<?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>127132</bug_id>
          
          <creation_ts>2014-01-16 12:32:58 -0800</creation_ts>
          <short_desc>Remove Nix from Source/Platform</short_desc>
          <delta_ts>2014-01-16 14:51:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968858</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-16 12:32:58 -0800</bug_when>
    <thetext>Remove Nix from Source/Platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968864</commentid>
    <comment_count>1</comment_count>
      <attachid>221403</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-16 12:38:31 -0800</bug_when>
    <thetext>Created attachment 221403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968949</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-16 14:51:04 -0800</bug_when>
    <thetext>Committed r162155: &lt;http://trac.webkit.org/changeset/162155&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221403</attachid>
            <date>2014-01-16 12:38:31 -0800</date>
            <delta_ts>2014-01-16 13:01:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127132-20140116123827.patch</filename>
            <type>text/plain</type>
            <size>260170</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Bs
YXRmb3JtL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRmb3JtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAxLTE2ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBOaXgg
ZnJvbSBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNzEzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBmZXcgZmlsZXMgbGVmdCBhcmUgcmVsYXRlZCB0byBHVEssIGl0IGlz
IG5vdCBjbGVhciB0byBtZSBpZiB0aGV5IGNhbiBiZSByZW1vdmVkIG9yIG5vdC4KKworICAgICAg
ICAqIFBsYXRmb3JtTml4LmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIG5peDogUmVtb3ZlZC4K
KwogMjAxMy0xMi0xMSAgSm9zw6kgRGFwZW5hIFBheiAgPGpkYXBlbmFAaWdhbGlhLmNvbT4gYW5k
IFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFk
ZCBhIFVQb3dlci1iYXNlZCBCYXR0ZXJ5UHJvdmlkZXIKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9Q
bGF0Zm9ybU5peC5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm1O
aXguY21ha2UJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybU5p
eC5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCwwIEBACi1zZXQoUGxhdGZvcm1fSU5D
TFVERVMKLSAgICBuaXgKLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9ICMgRm9yIGNtYWtlY29uZmln
LmgKLSAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy8gIyBGb3IgSW50UmVjdC5o
Ci0gICAgJHtXVEZfRElSfSAjIEZvciBjb25maWcuaAotKQotCi1zZXQoUGxhdGZvcm1fSEVBREVS
UwotICAgIG5peC9wdWJsaWMvQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmgKLSAgICBuaXgvcHVi
bGljL0F1ZGlvRGV2aWNlLmgKLSAgICBuaXgvcHVibGljL0NhbnZhcy5oCi0gICAgbml4L3B1Ymxp
Yy9Db2xvci5oCi0gICAgbml4L3B1YmxpYy9Db21tb24uaAotICAgIG5peC9wdWJsaWMvRkZURnJh
bWUuaAotICAgIG5peC9wdWJsaWMvR2FtZXBhZC5oCi0gICAgbml4L3B1YmxpYy9HYW1lcGFkcy5o
Ci0gICAgbml4L3B1YmxpYy9NZWRpYUNvbnN0cmFpbnRzLmgKLSAgICBuaXgvcHVibGljL01lZGlh
UGxheWVyLmgKLSAgICBuaXgvcHVibGljL01lZGlhU3RyZWFtLmgKLSAgICBuaXgvcHVibGljL01l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaAotICAgIG5peC9wdWJsaWMvTWVkaWFTdHJlYW1DZW50ZXIu
aAotICAgIG5peC9wdWJsaWMvTWVkaWFTdHJlYW1Tb3VyY2UuaAotICAgIG5peC9wdWJsaWMvTXVs
dGlDaGFubmVsUENNRGF0YS5oCi0gICAgbml4L3B1YmxpYy9QbGF0Zm9ybS5oCi0gICAgbml4L3B1
YmxpYy9Qcml2YXRlUHRyLmgKLSAgICBuaXgvcHVibGljL1JlY3QuaAotICAgIG5peC9wdWJsaWMv
U2l6ZS5oCi0gICAgbml4L3B1YmxpYy9UaGVtZUVuZ2luZS5oCi0pCi0KLXNldChQbGF0Zm9ybV9T
T1VSQ0VTCi0gICAgbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuY3BwCi0gICAgbml4L3Ny
Yy9QbGF0Zm9ybS5jcHAKLSkKLQotaW5zdGFsbChGSUxFUyAke1BsYXRmb3JtX0hFQURFUlN9IERF
U1RJTkFUSU9OIGluY2x1ZGUvJHtXZWJLaXQyX09VVFBVVF9OQU1FfS0ke1BST0pFQ1RfVkVSU0lP
Tl9NQUpPUn0vTml4UGxhdGZvcm0pCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9B
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9BdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgTml4X0F1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCi0jZGVmaW5lIE5peF9B
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJfaAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBBdWRpb0Rlc3RpbmF0aW9uQ29u
c3VtZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcigp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cywgZmxvYXQgc2FtcGxlUmF0ZSkgPSAwOwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIHZlY3Rv
ciBpcyB0aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLCBhbmQgbnVtYmVyT2ZGcmFtZXMgaXMg
dGhlCi0gICAgLy8gbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBpbiB0aGUgKHBvc3NpYmx5IG11bHRp
LWNoYW5uZWwpIGJ1ZmZlciBpbiBhIHBsYW5hciBmb3JtYXQuCi0gICAgdmlydHVhbCB2b2lkIGNv
bnN1bWVBdWRpbyhjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBmbG9hdCo+JiBwY21EYXRhLCBzaXpl
X3QgbnVtYmVyT2ZGcmFtZXMpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5k
aWYgLy8gTml4X0F1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X0F1ZGlvRGV2aWNlX2gKLSNkZWZp
bmUgTml4X0F1ZGlvRGV2aWNlX2gKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8dmVj
dG9yPgotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgQXVkaW9EZXZpY2UgewotcHVibGljOgot
ICAgIGNsYXNzIFJlbmRlckNhbGxiYWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCByZW5kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgLypzb3VyY2VEYXRhKi8sIGNv
bnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIC8qZGVzdGluYXRpb25EYXRhKi8sIHNpemVfdCAvKm51
bWJlck9mRnJhbWVzKi8pID0gMDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCB+
UmVuZGVyQ2FsbGJhY2soKSB7IH0KLSAgICB9OwotCi0gICAgdmlydHVhbCB+QXVkaW9EZXZpY2Uo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVSYXRlKCkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBOaXhfQXVkaW9EZXZpY2VfaApJbmRleDog
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTml4X0NhbnZhc19oCi0jZGVm
aW5lIE5peF9DYW52YXNfaAotCi0jaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KLQotbmFtZXNwYWNl
IE5peCB7Ci0KLXR5cGVkZWYgY2Fpcm9fdCBDYW52YXM7Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAot
Ci0jZW5kaWYgLy8gTml4X0NhbnZhc19oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbG9y
LmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBOaXhfQ29sb3JfaAotI2RlZmluZSBOaXhfQ29sb3Jf
aAotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLW5hbWVzcGFj
ZSBOaXggewotCi1jbGFzcyBDb2xvciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB1X2ludDMyX3Qg
QVJHQjMyOyAvLyBBUkdCIHF1YWRydXBsZXQKLQotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgYmxh
Y2sgPSAweEZGMDAwMDAwOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgd2hpdGUgPSAweEZGRkZG
RkZGOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgcmVkID0gMHhGRkZGMDAwMDsKLSAgICBzdGF0
aWMgY29uc3QgQVJHQjMyIGdyZWVuID0gMHhGRjAwRkYwMDsKLSAgICBzdGF0aWMgY29uc3QgQVJH
QjMyIGJsdWUgPSAweEZGMDAwMEZGOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZGFya0dyYXkg
PSAweEZGODA4MDgwOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZ3JheSA9IDB4RkZBMEEwQTA7
Ci0gICAgc3RhdGljIGNvbnN0IEFSR0IzMiBsaWdodEdyYXkgPSAweEZGQzBDMEMwOwotICAgIHN0
YXRpYyBjb25zdCBBUkdCMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOwotCi0gICAgQ29sb3Io
QVJHQjMyIHJnYmEpCi0gICAgICAgIDogbV9hcmdiKHJnYmEpCi0gICAgewotICAgIH0KLQotICAg
IENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhID0gMjU1KQotICAgICAgICA6IG1fYXJn
Yihib3VuZFZhbHVlKGEpIDw8IDI0IHwgYm91bmRWYWx1ZShyKSA8PCAxNiB8IGJvdW5kVmFsdWUo
ZykgPDwgOCB8IGJvdW5kVmFsdWUoYikpCi0gICAgewotICAgIH0KLQotICAgIG9wZXJhdG9yIEFS
R0IzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmdiOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGNoYXIgcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKG1fYXJnYiAm
IDB4MDBGRjAwMDApID4+IDE2OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gKG1fYXJnYiAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgY2hhciBiKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAo
bV9hcmdiICYgMHgwMDAwMDBGRik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciBhKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAobV9hcmdiICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0g
ICAgfQotCi0gICAgQVJHQjMyIGFyZ2IzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9hcmdiOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgb3RoZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmdiID09IG90aGVyLm1fYXJnYjsKLSAgICB9Ci0K
LSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYXJnYiAhPSBvdGhlci5tX2FyZ2I7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFS
R0IzMiBtX2FyZ2I7Ci0gICAgc3RhdGljIGlubGluZSBBUkdCMzIgYm91bmRWYWx1ZShpbnQgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4odmFsdWUsIDI1
NSkpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X0Nv
bG9yX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCShyZXZpc2lvbiAxNjIx
NDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Db21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4
X0NvbW1vbl9oCi0jZGVmaW5lIE5peF9Db21tb25faAotCi0jZGVmaW5lIE5JWF9FWFBPUlQgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotI2luY2x1ZGUgPHN0ZGRlZi5o
PiAvLyBGb3Igc2l6ZV90LgotCi0jZW5kaWYgLy8gTml4X0NvbW1vbl9oCkluZGV4OiBTb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0ZGVEZyYW1lLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9Q
bGF0Zm9ybS9uaXgvcHVibGljL0ZGVEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBOaXhfRkZURnJhbWVfaAotI2Rl
ZmluZSBOaXhfRkZURnJhbWVfaAotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgRkZURnJhbWUg
ewotcHVibGljOgotICAgIEZGVEZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB+RkZURnJhbWUoKSB7
IH0KLQotICAgIHZpcnR1YWwgRkZURnJhbWUqIGNvcHkoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZG9GRlQoY29uc3QgZmxvYXQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvSW52
ZXJzZUZGVChmbG9hdCopID0gMDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgZnJlcXVlbmN5RG9t
YWluU2FtcGxlQ291bnQoKSBjb25zdCA9IDA7Ci0gICAgLy8gQWZ0ZXIgbXVsdGlwbGljYXRpb24g
YW5kIHRyYW5zZm9ybSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyBzY2FsZWQKLSAgICAvLyB0byB0
YWtlIGluIGFjY291bnQgdGhlIHNjYWxlIHVzZWQgaW50ZXJuYWxseSBpbiBXZWJLaXQsIG9yaWdp
bmFsbHkKLSAgICAvLyBmcm9tIE1hYydzIHZlY0xpYi4KLSAgICAvLyBBZnRlciBtdWx0aXBsaWNh
dGlvbjogUGxhbmFyIGRhdGEgaXMgc2NhbGVkIGJ5IDAuNS4KLSAgICAvLyBBZnRlciBkaXJlY3Qg
dHJhbnNmb3JtOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkgMi4wLgotICAgIC8vIEFmdGVyIGlu
dmVyc2UgdHJhbnNmb3JtOiBUaW1lIGRvbWFpbiBkYXRhIGlzIHNjYWxlZCBieSAxLjAvKDIqIEZG
VCBzaXplKS4KLSAgICB2aXJ0dWFsIGZsb2F0KiByZWFsRGF0YSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGZsb2F0KiBpbWFnRGF0YSgpIGNvbnN0ID0gMDsKLXByaXZhdGU6Ci0gICAgRkZURnJh
bWUoY29uc3QgRkZURnJhbWUmKTsKLSAgICBGRlRGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IEZGVEZy
YW1lJik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9GRlRGcmFt
ZV9oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvR2FtZXBhZC5oCShyZXZpc2lvbiAxNjIx
NDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4
X0dhbWVwYWRfaAotI2RlZmluZSBOaXhfR2FtZXBhZF9oCi0KLSNpbmNsdWRlICJDb21tb24uaCIK
LQotbmFtZXNwYWNlIE5peCB7Ci0KLWNsYXNzIEdhbWVwYWQgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgaWRMZW5ndGhDYXAgPSAxMjg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBheGVzTGVuZ3RoQ2FwID0gMTY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBidXR0b25zTGVu
Z3RoQ2FwID0gMzI7Ci0KLSAgICBHYW1lcGFkKCkKLSAgICAgICAgOiBjb25uZWN0ZWQoZmFsc2Up
Ci0gICAgICAgICwgdGltZXN0YW1wKDApCi0gICAgICAgICwgYXhlc0xlbmd0aCgwKQotICAgICAg
ICAsIGJ1dHRvbnNMZW5ndGgoMCkKLSAgICB7Ci0gICAgICAgIGlkWzBdID0gMDsKLSAgICB9Ci0K
LSAgICAvLyBJcyB0aGVyZSBhIGdhbWVwYWQgY29ubmVjdGVkIGF0IHRoaXMgaW5kZXg/Ci0gICAg
Ym9vbCBjb25uZWN0ZWQ7Ci0KLSAgICAvLyBEZXZpY2UgaWRlbnRpZmllciAoYmFzZWQgb24gbWFu
dWZhY3R1cmVyLCBtb2RlbCwgZXRjLikuCi0gICAgY2hhciBpZFtpZExlbmd0aENhcF07Ci0KLSAg
ICAvLyBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdmFsdWUgcmVmZXJyaW5nIHRvIHdoZW4gdGhl
IGRhdGEgd2VyZSBsYXN0Ci0gICAgLy8gdXBkYXRlZC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg
dGltZXN0YW1wOwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGF4ZXMg
YXJyYXkuCi0gICAgdW5zaWduZWQgYXhlc0xlbmd0aDsKLQotICAgIC8vIE5vcm1hbGl6ZWQgdmFs
dWVzIHJlcHJlc2VudGluZyBheGVzLCBpbiB0aGUgcmFuZ2UgWy0xLi4xXS4KLSAgICBmbG9hdCBh
eGVzW2F4ZXNMZW5ndGhDYXBdOwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4g
dGhlIGJ1dHRvbnMgYXJyYXkuCi0gICAgdW5zaWduZWQgYnV0dG9uc0xlbmd0aDsKLQotICAgIC8v
IE5vcm1hbGl6ZWQgdmFsdWVzIHJlcHJlc2VudGluZyBidXR0b25zLCBpbiB0aGUgcmFuZ2UgWzAu
LjFdLgotICAgIGZsb2F0IGJ1dHRvbnNbYnV0dG9uc0xlbmd0aENhcF07Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9HYW1lcGFkX2gKSW5kZXg6IFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0dhbWVwYWRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvR2FtZXBhZHMuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvR2FtZXBhZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfR2FtZXBhZHNfaAotI2RlZmlu
ZSBOaXhfR2FtZXBhZHNfaAotCi0jaW5jbHVkZSAiR2FtZXBhZC5oIgotCi1uYW1lc3BhY2UgTml4
IHsKLQotY2xhc3MgR2FtZXBhZHMgewotcHVibGljOgotICAgIEdhbWVwYWRzKCkKLSAgICAgICAg
OiBsZW5ndGgoMCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaXRlbXNMZW5n
dGhDYXAgPSA0OwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGl0ZW1z
IGFycmF5LgotICAgIHVuc2lnbmVkIGxlbmd0aDsKLQotICAgIC8vIEdhbWVwYWQgZGF0YSBmb3Ig
TiBzZXBhcmF0ZSBnYW1lcGFkIGRldmljZXMuCi0gICAgR2FtZXBhZCBpdGVtc1tpdGVtc0xlbmd0
aENhcF07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9HYW1lcGFk
c19oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYUNvbnN0cmFpbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTWVkaWFDb25zdHJhaW50
cy5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRp
YUNvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X01lZGlhQ29uc3RyYWludHNf
aAotI2RlZmluZSBOaXhfTWVkaWFDb25zdHJhaW50c19oCi0KLSNpbmNsdWRlICJDb21tb24uaCIK
LSNpbmNsdWRlICJQcml2YXRlUHRyLmgiCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVj
dCBNZWRpYUNvbnN0cmFpbnQ7Ci1jbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwotfQotCi1uYW1lc3Bh
Y2UgTml4IHsKLQotc3RydWN0IE1lZGlhQ29uc3RyYWludCB7Ci0gICAgTWVkaWFDb25zdHJhaW50
KCkKLSAgICB7Ci0gICAgfQotCi0gICAgTWVkaWFDb25zdHJhaW50KHN0ZDo6c3RyaW5nIG5hbWUs
IHN0ZDo6c3RyaW5nIHZhbHVlKQotICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIG1fbmFtZTsKLSAg
ICBzdGQ6OnN0cmluZyBtX3ZhbHVlOwotfTsKLQotY2xhc3MgTWVkaWFDb25zdHJhaW50cyB7Ci1w
dWJsaWM6Ci0gICAgTWVkaWFDb25zdHJhaW50cygpIHsgfQotICAgIH5NZWRpYUNvbnN0cmFpbnRz
KCkgeyByZXNldCgpOyB9Ci0KLSAgICB2b2lkIGFzc2lnbihjb25zdCBNZWRpYUNvbnN0cmFpbnRz
Jik7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgTklYX0VYUE9SVCBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0gICAgTklYX0VYUE9SVCB2b2lk
IGdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKHN0ZDo6dmVjdG9yPE1lZGlhQ29uc3RyYWludD4mKSBj
b25zdDsKLSAgICBOSVhfRVhQT1JUIHZvaWQgZ2V0T3B0aW9uYWxDb25zdHJhaW50cyhzdGQ6OnZl
Y3RvcjxNZWRpYUNvbnN0cmFpbnQ+JikgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIGJvb2wgZ2V0
TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6c3RyaW5nJiB2
YWx1ZSkgY29uc3Q7Ci0gICAgTklYX0VYUE9SVCBib29sIGdldE9wdGlvbmFsQ29uc3RyYWludFZh
bHVlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6c3RyaW5nJiB2YWx1ZSkgY29uc3Q7Ci0KLSNpZmRl
ZiBCVUlMRElOR19OSVhfXwotICAgIE1lZGlhQ29uc3RyYWludHMoY29uc3QgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHM+Jik7Ci0gICAgTWVkaWFDb25zdHJhaW50cyhX
ZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzKik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBQcml2
YXRlUHRyPFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHM+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X01lZGlhQ29uc3RyYWludHNfaAotCkluZGV4
OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDE2MjE0
MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhUGxheWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IE5peF9NZWRpYVBsYXllcgotI2RlZmluZSBOaXhfTWVkaWFQbGF5ZXIKLQotI2luY2x1ZGUgPG1l
bW9yeT4KLQotbmFtZXNwYWNlIE5peCB7Ci0KLWNsYXNzIE1lZGlhUGxheWVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBlbnVtIFJlYWR5U3RhdGUgIHsgSGF2ZU5vdGhpbmcsIEhhdmVNZXRhZGF0YSwg
SGF2ZUN1cnJlbnREYXRhLCBIYXZlRnV0dXJlRGF0YSwgSGF2ZUVub3VnaERhdGEgfTsKLSAgICBl
bnVtIE5ldHdvcmtTdGF0ZSB7IEVtcHR5LCBJZGxlLCBMb2FkaW5nLCBMb2FkZWQsIEZvcm1hdEVy
cm9yLCBOZXR3b3JrRXJyb3IsIERlY29kZUVycm9yIH07Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYVBs
YXllckNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoUmVhZHlTdGF0ZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkKE5ldHdvcmtTdGF0ZSkgPSAwOwotfTsK
LQotY2xhc3MgTWVkaWFQbGF5ZXIgewotcHVibGljOgotICAgIC8vIERlcml2YXRlZCBjbGFzc2Vz
IHNob3VsZG4ndCBkbyBhbnkgam9iIG9uIGNvbnN0cnVjdG9yLCBNZWRpYVBsYXllcnMgY291bGQg
YmUKLSAgICAvLyBjcmVhdGVkIGZvciBwcm9iaW5nIHB1cnBvc2VzIHdpdGggYSBudWxsIGNsaWVu
dC4KLSAgICBNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQotICAgICAgICA6
IG1fcGxheWVyQ2xpZW50KGNsaWVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+TWVk
aWFQbGF5ZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBwYXVzZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgPSAwOwot
ICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9h
dCBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZs
b2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZChjb25zdCBjaGFyKiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2Vl
a2luZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJhY2tSYXRlKGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXllckNsaWVudD4gbV9wbGF5ZXJDbGllbnQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9NZWRpYVBsYXllcl9oCklu
ZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtLmgJKHJldmlzaW9uIDE2
MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgTml4X01lZGlhU3RyZWFtX2gKLSNkZWZpbmUgTml4X01lZGlhU3RyZWFtX2gKLQotI2lu
Y2x1ZGUgIkNvbW1vbi5oIgotI2luY2x1ZGUgIlByaXZhdGVQdHIuaCIKLQotI2luY2x1ZGUgPGNz
dGRkZWY+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBN
ZWRpYVN0cmVhbVByaXZhdGU7Ci19Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBNZWRpYVN0
cmVhbVNvdXJjZTsKLWNsYXNzIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U7Ci0KLWNsYXNzIE1lZGlh
U3RyZWFtIHsKLXB1YmxpYzoKLSAgICBNZWRpYVN0cmVhbSgpIHsgfQotICAgIE1lZGlhU3RyZWFt
KGNvbnN0IE1lZGlhU3RyZWFtJiBvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9Ci0gICAgfk1lZGlh
U3RyZWFtKCkgeyByZXNldCgpOyB9Ci0KLSAgICBNZWRpYVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0
IE1lZGlhU3RyZWFtJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNv
bnN0IE1lZGlhU3RyZWFtJik7Ci0KLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIE1lZGlh
U3RyZWFtU291cmNlKiBwb2ludGVycywgZGVsZXRpbmcgdGhlbS4KLSAgICBOSVhfRVhQT1JUIHZv
aWQgaW5pdGlhbGl6ZShzdGQ6OnZlY3RvcjxNZWRpYVN0cmVhbVNvdXJjZSo+JiBhdWRpb1RyYWNr
cywgc3RkOjp2ZWN0b3I8TWVkaWFTdHJlYW1Tb3VyY2UqPiYgdmlkZW9UcmFja3MpOwotCi0gICAg
TklYX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgTklYX0VYUE9SVCBib29sIGlzTnVsbCgpIGNv
bnN0OwotCi0KLSAgICBOSVhfRVhQT1JUIGNvbnN0IGNoYXIqIGlkKCkgY29uc3Q7Ci0KLSAgICAv
LyBDYWxsZXIgbXVzdCBkZWxldGUgdGhlIHJldHVybmVkIE1lZGlhU3RyZWFtU291cmNlKgotICAg
IE5JWF9FWFBPUlQgc3RkOjp2ZWN0b3I8TWVkaWFTdHJlYW1Tb3VyY2UqPiBhdWRpb1NvdXJjZXMo
KSBjb25zdDsKLSAgICBOSVhfRVhQT1JUIHN0ZDo6dmVjdG9yPE1lZGlhU3RyZWFtU291cmNlKj4g
dmlkZW9Tb3VyY2VzKCkgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgYWRkU291cmNlKGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlJik7Ci0gICAgTklYX0VYUE9SVCB2b2lkIHJlbW92ZVNvdXJj
ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZSYpOwotCi0jaWYgQlVJTERJTkdfTklYX18KLSAgICBN
ZWRpYVN0cmVhbShXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGUqKTsKLSAgICBNZWRpYVN0cmVh
bShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlPiYpOwot
ICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGU+
KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlKigpIGNv
bnN0OwotICAgIE1lZGlhU3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZT4mKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFBy
aXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3ByaXZhdGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9NZWRpYVN0cmVhbV9oCi0KSW5kZXg6
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbUF1ZGlvU291
cmNlLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1BdWRpb1NvdXJjZV9oCi0K
LSNpbmNsdWRlICJDb21tb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbUF1ZGlvU291cmNlOwotfQotCi1u
YW1lc3BhY2UgTml4IHsKLWNsYXNzIEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcjsKLQotY2xhc3Mg
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZSA6IHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZSB7Ci1wdWJs
aWM6Ci0gICAgTklYX0VYUE9SVCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlKCk7Ci0gICAgTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZShjb25zdCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvdGhlcikgOiBN
ZWRpYVN0cmVhbVNvdXJjZShvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9Ci0gICAgfk1lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2UoKSB7IHJlc2V0KCk7IH0KLQotICAgIE1lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2UmIG9wZXJhdG9yPShjb25zdCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0K
LSAgICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2Um
KTsKLQotICAgIE5JWF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Ci0KLSAgICBOSVhfRVhQT1JUIGNvbnN0
IGNoYXIqIGRldmljZUlkKCkgY29uc3Q7Ci0gICAgTklYX0VYUE9SVCB2b2lkIHNldERldmljZUlk
KGNvbnN0IGNoYXIqKTsKLQotICAgIC8vIFRoZSBOaXg6OkF1ZGlvRGVzdGluYXRpb25Db25zdW1l
ciBpcyBub3Qgb3duZWQsIGFuZCBoYXMgdG8gYmUgZGlzcG9zZWQgb2Ygc2VwYXJhdGVseQotICAg
IC8vIGFmdGVyIGNhbGxpbmcgcmVtb3ZlQXVkaW9Db25zdW1lci4KLSAgICBOSVhfRVhQT1JUIHZv
aWQgYWRkQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqKTsKLSAgICBOSVhf
RVhQT1JUIGJvb2wgcmVtb3ZlQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIq
KTsKLQotI2lmIEJVSUxESU5HX05JWF9fCi0gICAgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZT4mKTsKLSAg
ICBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1B
dWRpb1NvdXJjZSopOwotICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRp
YVN0cmVhbUF1ZGlvU291cmNlPigpIGNvbnN0OwotICAgIG9wZXJhdG9yIFdlYkNvcmU6Ok1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2UqKCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFdlYkNvcmU6Ok1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2UqIHRvV2ViQ29yZUF1ZGlvU291cmNlKCkgY29uc3Q7Ci0jZW5kaWYK
LQotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBOaXhfTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZV9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3Ry
ZWFtQ2VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTWVk
aWFTdHJlYW1DZW50ZXIuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvTWVkaWFTdHJlYW1DZW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfTWVkaWFTdHJlYW1D
ZW50ZXJfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1DZW50ZXJfaAotCi0jaW5jbHVkZSAiQ29t
bW9uLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBNZWRpYVN0cmVhbUNlbnRlcjsKLX0KLQotbmFtZXNwYWNlIE5peCB7Ci1jbGFzcyBNZWRp
YVN0cmVhbTsKLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlOwotY2xhc3MgTWVkaWFDb25zdHJhaW50
czsKLQotY2xhc3MgTklYX0VYUE9SVCBNZWRpYVN0cmVhbUNlbnRlciB7Ci1wdWJsaWM6Ci0gICAg
TWVkaWFTdHJlYW1DZW50ZXIoKTsKLSAgICB2b2lkIHJlcXVlc3QoKTsKLSAgICAvLyBSZXR1cm4g
dGhlIG5hbWUgb2YgdGhlIGZhaWxlZCBjb25zdHJhaW50LiAwIGlmIHN1Y2Nlc3NmdWwuCi0gICAg
dmlydHVhbCBjb25zdCBjaGFyKiB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhNZWRpYUNvbnN0
cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0NvbnN0cmFp
bnRzKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRpYVN0cmVhbSBjcmVhdGVNZWRpYVN0cmVhbShNZWRp
YUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0Nv
bnN0cmFpbnRzKSA9IDA7Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8g
Tml4X01lZGlhU3RyZWFtQ2VudGVyX2gKLQpJbmRleDogU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvTWVkaWFTdHJlYW1Tb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9NZWRpYVN0cmVhbVNvdXJjZS5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOaXhfTWVkaWFTdHJlYW1Tb3VyY2VfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1Tb3Vy
Y2VfaAotCi0jaW5jbHVkZSAiQ29tbW9uLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZVB0ci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKLX0KLQotbmFtZXNw
YWNlIE5peCB7Ci0KLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlIHsKLXB1YmxpYzoKLQotICAgIGVu
dW0gVHlwZSB7Ci0gICAgICAgIEF1ZGlvLAotICAgICAgICBWaWRlbwotICAgIH07Ci0KLSAgICBl
bnVtIFJlYWR5U3RhdGUgewotICAgICAgICBSZWFkeVN0YXRlTGl2ZSA9IDAsCi0gICAgICAgIFJl
YWR5U3RhdGVNdXRlZCA9IDEsCi0gICAgICAgIFJlYWR5U3RhdGVFbmRlZCA9IDIKLSAgICB9Owot
Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2UoKSB7IH0KLSAgICBNZWRpYVN0cmVhbVNvdXJjZShjb25z
dCBNZWRpYVN0cmVhbVNvdXJjZSYgb3RoZXIpIHsgYXNzaWduKG90aGVyKTsgfQotICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtU291cmNlKCkgeyByZXNldCgpOyB9Ci0KLSAgICBNZWRpYVN0cmVhbVNv
dXJjZSYgb3BlcmF0b3I9KGNvbnN0IE1lZGlhU3RyZWFtU291cmNlJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAg
ICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlJik7Ci0KLSAg
ICBOSVhfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0gICAgTklYX0VYUE9SVCBjb25zdCBjaGFyKiBp
ZCgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgVHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgTklYX0VY
UE9SVCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgc2V0
UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKLSAgICBOSVhfRVhQT1JUIFJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0OwotCi0gICAgTklYX0VYUE9SVCBib29sIGVuYWJsZWQoKSBjb25zdDsKLSAg
ICBOSVhfRVhQT1JUIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLQotICAgIE5JWF9FWFBPUlQgYm9v
bCBtdXRlZCgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgdm9pZCBzZXRNdXRlZChib29sKTsKLQot
ICAgIE5JWF9FWFBPUlQgYm9vbCByZWFkb25seSgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgdm9p
ZCBzZXRSZWFkb25seShib29sKTsKLQotICAgIC8vIEZJWE1FIEFkZCBzdXBwb3J0IGZvciBjYXBh
YmlsaXRlcy4KLQotI2lmIEJVSUxESU5HX05JWF9fCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2UoY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlPiYpOwotICAgIE1l
ZGlhU3RyZWFtU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKTsK
LSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U+
KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKCkgY29u
c3Q7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFByaXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFT
dHJlYW1Tb3VyY2U+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5k
aWYgLy8gTml4X01lZGlhU3RyZWFtU291cmNlX2gKLQpJbmRleDogU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL011bHRpQ2hhbm5lbFBDTURhdGEuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOaXhfTXVsdGlDaGFubmVsUENNRGF0YV9oCi0jZGVmaW5lIE5peF9NdWx0aUNoYW5uZWxQ
Q01EYXRhX2gKLQotI2luY2x1ZGUgIkNvbW1vbi5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotLy8g
QSBjb250YWluZXIgZm9yIG11bHRpLWNoYW5uZWwgbGluZWFyIFBDTSBhdWRpbyBkYXRhLgotY2xh
c3MgTklYX0VYUE9SVCBNdWx0aUNoYW5uZWxQQ01EYXRhIHsKLXB1YmxpYzoKLSAgICBNdWx0aUNo
YW5uZWxQQ01EYXRhKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGRv
dWJsZSBzYW1wbGVSYXRlKTsKLSAgICB+TXVsdGlDaGFubmVsUENNRGF0YSgpOwotCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OwotICAgIHNpemVfdCBsZW5ndGgoKSBjb25z
dDsKLSAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBjYW4gcmV0
dXJuIG51bGwgaWYgTml4IHdhcyBjb21waWxlZCB3aXRob3V0IFdlYkF1ZGlvIHN1cHBvcnQuCi0g
ICAgZmxvYXQqIGNoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCk7Ci0KLSNpZmRlZiBC
VUlMRElOR19OSVhfXwotICAgIHZvaWQqIGdldEludGVybmFsRGF0YSgpOwotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgTXVsdGlDaGFubmVsUENNRGF0YShjb25zdCBNdWx0aUNoYW5uZWxQQ01EYXRh
Jik7Ci0gICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTXVsdGlDaGFubmVsUENNRGF0YSYpOwotCi0g
ICAgdm9pZCogbV9kYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBO
aXhfTXVsdGlDaGFubmVsUENNRGF0YV9oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1Bs
YXRmb3JtLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIE5peF9QbGF0Zm9ybV9oCi0jZGVmaW5lIE5peF9QbGF0Zm9ybV9oCi0KLSNpbmNsdWRl
ICJBdWRpb0RldmljZS5oIgotI2luY2x1ZGUgIkdhbWVwYWRzLmgiCi0jaW5jbHVkZSA8c3RkaW50
Lmg+Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBNdWx0aUNoYW5uZWxQQ01EYXRhOwotY2xh
c3MgRkZURnJhbWU7Ci1jbGFzcyBUaGVtZUVuZ2luZTsKLWNsYXNzIE1lZGlhUGxheWVyOwotY2xh
c3MgTWVkaWFQbGF5ZXJDbGllbnQ7Ci0KLWNsYXNzIE5JWF9FWFBPUlQgUGxhdGZvcm0gewotcHVi
bGljOgotCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShQbGF0Zm9ybSopOwotICAgIHN0YXRp
YyBQbGF0Zm9ybSogY3VycmVudCgpOwotCi0gICAgLy8gQXVkaW8KLSAgICB2aXJ0dWFsIGZsb2F0
IGF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRlKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgc2l6
ZV90IGF1ZGlvSGFyZHdhcmVCdWZmZXJTaXplKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
dW5zaWduZWQgYXVkaW9IYXJkd2FyZU91dHB1dENoYW5uZWxzKCkgeyByZXR1cm4gMDsgfQotCi0g
ICAgLy8gQ3JlYXRlcyBhIGRldmljZSBmb3IgYXVkaW8gSS9PLgotICAgIC8vIFBhc3MgaW4gKG51
bWJlck9mSW5wdXRDaGFubmVscyA+IDApIGlmIGxpdmUvbG9jYWwgYXVkaW8gaW5wdXQgaXMgZGVz
aXJlZC4KLSAgICB2aXJ0dWFsIEF1ZGlvRGV2aWNlKiBjcmVhdGVBdWRpb0RldmljZShjb25zdCBj
aGFyKiAvKmlucHV0RGV2aWNlSWQqLywgc2l6ZV90IC8qYnVmZmVyU2l6ZSovLCB1bnNpZ25lZCAv
Km51bWJlck9mSW5wdXRDaGFubmVscyovLCB1bnNpZ25lZCAvKm51bWJlck9mT3V0cHV0Q2hhbm5l
bHMqLywgZG91YmxlIC8qc2FtcGxlUmF0ZSovLCBBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2sq
KSB7IHJldHVybiBudWxscHRyOyB9Ci0KLSAgICAvLyBHYW1lcGFkCi0gICAgdmlydHVhbCB2b2lk
IHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRzJiBpbnRvKSB7IGludG8ubGVuZ3RoID0gMDsgfQotCi0g
ICAgLy8gRkZURnJhbWUKLSAgICB2aXJ0dWFsIEZGVEZyYW1lKiBjcmVhdGVGRlRGcmFtZSh1bnNp
Z25lZCAvKmZmdHNpemUqLykgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0gICAgLy8gRGVjb2RlcyB0
aGUgaW4tbWVtb3J5IGF1ZGlvIGZpbGUgZGF0YSBhbmQgcmV0dXJucyB0aGUgbGluZWFyIFBDTSBh
dWRpbyBkYXRhLgotICAgIHZpcnR1YWwgTXVsdGlDaGFubmVsUENNRGF0YSogZGVjb2RlQXVkaW9S
ZXNvdXJjZShjb25zdCB2b2lkKiAvKmF1ZGlvRGF0YSovLCBzaXplX3QgLypkYXRhU2l6ZSovLCBk
b3VibGUgLypzYW1wbGVSYXRlKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KLQotICAgIC8vIFRoZW1l
IGVuZ2luZQotICAgIHZpcnR1YWwgVGhlbWVFbmdpbmUqIHRoZW1lRW5naW5lKCk7Ci0KLSAgICAv
LyBDcmVhdGUgYSBNZWRpYVBsYXllciwgdXNlZCB0by4uLiBwbGF5IG1lZGlhIDotKQotICAgIHZp
cnR1YWwgTWVkaWFQbGF5ZXIqIGNyZWF0ZU1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kikg
eyByZXR1cm4gbnVsbHB0cjsgfQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgflBsYXRmb3JtKCkg
eyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9QbGF0Zm9ybV9o
CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Qcml2YXRlUHRyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUHJpdmF0ZVB0ci5oCShyZXZpc2lvbiAx
NjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Qcml2YXRlUHRyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfUHJpdmF0
ZVB0cl9oCi0jZGVmaW5lIE5peF9Qcml2YXRlUHRyX2gKLQotI2luY2x1ZGUgIkNvbW1vbi5oIgot
Ci0jaWYgQlVJTERJTkdfTklYX18KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2VuZGlm
Ci0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotCi1uYW1lc3BhY2UgTml4IHsKLQotLy8gVGhpcyBjbGFz
cyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIE5peCBBUEkuIEl0IGV4aXN0cwot
Ly8gdG8gaGVscCBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgTml4IGludGVyZmFjZXMg
dGhhdCBtZXJlbHkKLS8vIHdyYXAgYSByZWZlcmVuY2UgY291bnRlZCBXZWJDb3JlIGNsYXNzLgot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcml2YXRlUHRyIHsKLXB1YmxpYzoKLSAgICBQ
cml2YXRlUHRyKCkgOiBtX3B0cigwKSB7IH0KLSAgICB+UHJpdmF0ZVB0cigpIHsgYXNzZXJ0KCFt
X3B0cik7IH0KLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9Ci0K
LSNpZiBCVUlMRElOR19OSVhfXwotICAgIFByaXZhdGVQdHIoY29uc3QgUGFzc1JlZlB0cjxUPiYg
cHJwKQotICAgICAgICA6IG1fcHRyKHBycC5sZWFrUmVmKCkpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgYXNzaWduKDApOwotICAgIH0KLQotICAgIFBy
aXZhdGVQdHI8VD4mIG9wZXJhdG9yPShjb25zdCBQcml2YXRlUHRyPFQ+JiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIFQqIHAgPSBvdGhlci5tX3B0cjsKLSAgICAgICAgaWYgKHApCi0gICAgICAgICAg
ICBwLT5yZWYoKTsKLSAgICAgICAgYXNzaWduKHApOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotCi0gICAgUHJpdmF0ZVB0cjxUPiYgb3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8VD4m
IHBycCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihwcnAubGVha1JlZigpKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIFQqIGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9wdHI7Ci0gICAgfQotCi0gICAgVCogb3BlcmF0b3ItPigpIGNvbnN0Ci0gICAgewot
ICAgICAgICBhc3NlcnQobV9wdHIpOwotICAgICAgICByZXR1cm4gbV9wdHI7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIHZvaWQgYXNzaWduKFQqIHApCi0gICAgewotICAgICAgICAvLyBwIGlzIGFs
cmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKLSAgICAgICAgaWYgKG1fcHRyKQotICAg
ICAgICAgICAgbV9wdHItPmRlcmVmKCk7Ci0gICAgICAgIG1fcHRyID0gcDsKLSAgICB9Ci0jZW5k
aWYKLQotcHJpdmF0ZToKLQotICAgIFQqIG1fcHRyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4
Ci0KLSNlbmRpZiAvLyBOaXhfUHJpdmF0ZVB0cl9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1JlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9SZWN0LmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1JlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgTml4X1JlY3RfaAotI2RlZmluZSBOaXhfUmVjdF9oCi0KLW5hbWVz
cGFjZSBOaXggewotCi1jbGFzcyBSZWN0IHsKLXB1YmxpYzoKLSAgICBpbnQgeDsKLSAgICBpbnQg
eTsKLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IGhlaWdodDsKLQotICAgIFJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogeCh4KQotICAgICAgICAsIHko
eSkKLSAgICAgICAgLCB3aWR0aCh3aWR0aCkKLSAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQotICAg
IHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9SZWN0
X2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9TaXplLmgJKHJldmlzaW9uIDE2MjE0MCkKKysr
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X1NpemVfaAotI2RlZmluZSBOaXhfU2l6
ZV9oCi0KLW5hbWVzcGFjZSBOaXggewotCi1zdHJ1Y3QgU2l6ZSB7Ci0gICAgaW50IHdpZHRoOwot
ICAgIGludCBoZWlnaHQ7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDA7Ci0gICAgfQotCi0gICAgU2l6ZSgp
Ci0gICAgICAgIDogd2lkdGgoMCkKLSAgICAgICAgLCBoZWlnaHQoMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogd2lkdGgod2lkdGgp
Ci0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHdp
ZHRoID09IG90aGVyLndpZHRoICYmIGhlaWdodCA9PSBvdGhlci5oZWlnaHQ7Ci0gICAgfQotCi0g
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IE5peAotCi0jZW5kaWYgLy8gTml4X1NpemVfaApJbmRleDogU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1
YmxpYy9UaGVtZUVuZ2luZS5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9UaGVtZUVuZ2luZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTml4X1RoZW1lRW5naW5lX2gKLSNkZWZpbmUgTml4X1RoZW1l
RW5naW5lX2gKLQotI2luY2x1ZGUgIkNhbnZhcy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiU2l6ZS5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgUmVjdDsKLQotY2xhc3Mg
VGhlbWVFbmdpbmUgewotcHVibGljOgotICAgIC8vIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBh
c3NvY2lhdGVkIFBhcnQuCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFN0YXRlRGlzYWJsZWQs
Ci0gICAgICAgIFN0YXRlSG92ZXIsCi0gICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0
ZVByZXNzZWQKLSAgICB9OwotCi0gICAgZW51bSBNZWRpYVBsYXllclN0YXRlIHsKLSAgICAgICAg
U3RhdGVQbGF5aW5nLAotICAgICAgICBTdGF0ZVBhdXNlZCwKLSAgICAgICAgU3RhdGVNdXRlZCwK
LSAgICAgICAgU3RhdGVOb3RNdXRlZAotICAgIH07Ci0KLSAgICAvLyBFeHRyYSBwYXJhbWV0ZXJz
IGZvciBkcmF3aW5nIHRoZSBQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIGFuZAotICAgIC8v
IFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLgotICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4
dHJhUGFyYW1zIHsKLSAgICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBh
cyBvcHBvc2VkIHRvIHRoZSBwYXJ0IGJlaW5nIHBhaW50ZWQuCi0gICAgICAgIGludCB0cmFja1g7
Ci0gICAgICAgIGludCB0cmFja1k7Ci0gICAgICAgIGludCB0cmFja1dpZHRoOwotICAgICAgICBp
bnQgdHJhY2tIZWlnaHQ7Ci0gICAgfTsKLQotICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBh
cnRDaGVja2JveCwgUGFydFB1c2hCdXR0b24gYW5kIFBhcnRSYWRpby4KLSAgICBzdHJ1Y3QgQnV0
dG9uRXh0cmFQYXJhbXMgewotICAgICAgICBib29sIGNoZWNrZWQ7Ci0gICAgICAgIGJvb2wgaW5k
ZXRlcm1pbmF0ZTsgLy8gV2hldGhlciB0aGUgYnV0dG9uIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUu
Ci0gICAgICAgIGJvb2wgaXNEZWZhdWx0OyAvLyBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGVmYXVs
dCBidXR0b24uCi0gICAgICAgIGJvb2wgaGFzQm9yZGVyOwotICAgIH07Ci0KLSAgICAvLyBFeHRy
YSBwYXJhbWV0ZXJzIGZvciBQYXJ0SW5uZXJTcGluQnV0dG9uCi0gICAgc3RydWN0IElubmVyU3Bp
bkJ1dHRvbkV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9vbCBzcGluVXA7Ci0gICAgICAgIGJvb2wg
cmVhZE9ubHk7Ci0gICAgfTsKLQotICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRQcm9n
cmVzc0JhcgotICAgIHN0cnVjdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9v
bCBpc0RldGVybWluYXRlOwotICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgIGRvdWJs
ZSBhbmltYXRpb25Qcm9ncmVzczsKLSAgICAgICAgZG91YmxlIGFuaW1hdGlvblN0YXJ0VGltZTsK
LSAgICB9OwotCi0gICAgc3RydWN0IE1ldGVyRXh0cmFQYXJhbXMgewotICAgICAgICBkb3VibGUg
bWluOwotICAgICAgICBkb3VibGUgbWF4OwotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAg
IGRvdWJsZSBsb3c7Ci0gICAgICAgIGRvdWJsZSBoaWdoOwotICAgICAgICBkb3VibGUgb3B0aW11
bTsKLSAgICAgICAgZG91YmxlIHZhbHVlUmF0aW8oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobWF4IDw9IG1pbikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgY29u
c3QgeyByZXR1cm4gIiI7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhUXVpcmtzU3R5
bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBl
eHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gIiI7IH0KLQotICAgIC8vIFRl
eHQgc2VsZWN0aW9uIGNvbG9ycy4KLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29s
b3IgaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7Ci0KLSAgICAv
LyBMaXN0IGJveCBzZWxlY3Rpb24gY29sb3JzCi0gICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0
Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29s
b3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29sb3IgaW5h
Y3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFs
IENvbG9yIGZvY3VzUmluZ0NvbG9yKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBDb2xvciB0
YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1
dHRvbihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1z
JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChDYW52YXMqLCBT
dGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFNpemUgZ2V0Q2hlY2ti
b3hTaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENoZWNrYm94KENhbnZh
cyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRSYWRpbyhDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1
dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRB
cmVhKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRNZW51TGlzdFBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0
LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50TWVudUxpc3QoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoQ2FudmFzKiwgU3Rh
dGUsIGNvbnN0IFJlY3QmLCBjb25zdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zJikgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jl
c3NCYXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5uZXJT
cGluQnV0dG9uUGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYg
cGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBj
b25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRNZXRlcihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IE1ldGVy
RXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJh
Y2soQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50U2xpZGVyVGh1bWIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9
IDA7Ci0KLSAgICAvLyBNZWRpYVBsYXllciAoYXVkaW8gYW5kIHZpZGVvIGVsZW1lbnRzKQotICAg
IHZpcnR1YWwgdm9pZCBwYWludE1lZGlhUGxheUJ1dHRvbihDYW52YXMqLCBNZWRpYVBsYXllclN0
YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlh
TXV0ZUJ1dHRvbihDYW52YXMqLCBNZWRpYVBsYXllclN0YXRlLCBjb25zdCBSZWN0JikgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwg
Y29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYVNlZWtG
b3J3YXJkQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X1RoZW1lRW5n
aW5lX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2lu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRo
ZW1lRW5naW5lLmNwcAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRmb3JtL25peC9z
cmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ODcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJEZWZhdWx0V2ViVGhlbWVFbmdpbmUuaCIKLQotI2luY2x1ZGUgInB1YmxpYy9Db2xv
ci5oIgotI2luY2x1ZGUgInB1YmxpYy9SZWN0LmgiCi0jaW5jbHVkZSAicHVibGljL1NpemUuaCIK
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KLSNpbmNsdWRl
IDxjbWF0aD4KLQotY29uc3QgZG91YmxlIEJHQ29sb3IxID0gMHhGNiAvIDI1NS4wOwotY29uc3Qg
ZG91YmxlIEJHQ29sb3IyID0gMHhERSAvIDI1NS4wOwotY29uc3QgZG91YmxlIEJvcmRlckNvbG9y
ID0gMHhBNCAvIDI1NS4wOwotY29uc3QgZG91YmxlIEJvcmRlck9uSG92ZXJDb2xvciA9IDB4N0Eg
LyAyNTUuMDsKLWNvbnN0IGRvdWJsZSBDaGVja0NvbG9yID0gMHg2NiAvIDI1NS4wOwotY29uc3Qg
ZG91YmxlIFRleHRGaWVsZERhcmtCb3JkZXJDb2xvciA9IDB4OUEgLyAyNTUuMDsKLWNvbnN0IGRv
dWJsZSBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yID0gMHhFRSAvIDI1NS4wOwotCi1jb25zdCBp
bnQgTWVudUxpc3RCb3JkZXIgPSA1OwotY29uc3QgaW50IE1lbnVMaXN0QXJyb3dTaXplID0gNjsK
LQotY29uc3QgaW50IElubmVyU3BpbkJ1dHRvbkJvcmRlciA9IDM7Ci1jb25zdCBpbnQgSW5uZXJT
cGluQnV0dG9uQXJyb3dTaXplID0gMjsKLQotY29uc3QgTml4OjpDb2xvciBUYXBIaWdoTGlnaHRD
b2xvcigweDY2MDAwMDAwKTsKLQotbmFtZXNwYWNlIE5peCB7Ci0KLUNvbG9yIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ29sb3I6OmJsdWU7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29s
b3I6OndoaXRlOwotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMTc2LCAx
NzYsIDE3Nik7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6YmxhY2s7
Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpOwotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBh
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKLX0KLQotQ29sb3IgRGVmYXVsdFdlYlRo
ZW1lRW5naW5lOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAotewotICAgIHJldHVybiBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwotfQot
Ci1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCk7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZl
VGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1
LCAxNTAsIDUwKTsgLy8gT3JhbmdlLgotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q29sb3IoMjU1LCAyNTUsIDApOyAvLyBZZWxsb3cuCi19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6Zm9jdXNSaW5nQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6Ymxh
Y2s7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6dGFwSGlnaGxpZ2h0Q29sb3Io
KSBjb25zdAotewotICAgIHJldHVybiBUYXBIaWdoTGlnaHRDb2xvcjsKLX0KLQotc3RhdGljIHZv
aWQgZ3JhZGllbnRGaWxsKGNhaXJvX3QqIGNhaXJvLCBkb3VibGUgeVN0YXJ0LCBkb3VibGUgeUxl
bmd0aCwgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQotewotICAgIGRvdWJsZSBncmFkU3RhcnRDb2xv
ciA9IEJHQ29sb3IxOwotICAgIGRvdWJsZSBncmFkRW5kQ29sb3IgPSBCR0NvbG9yMjsKLSAgICBp
ZiAoaW52ZXJ0ZWQpCi0gICAgICAgIHN0ZDo6c3dhcChncmFkU3RhcnRDb2xvciwgZ3JhZEVuZENv
bG9yKTsKLQotICAgIGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQgPSBjYWlyb19wYXR0ZXJuX2Ny
ZWF0ZV9saW5lYXIoMCwgeVN0YXJ0LCAwLCB5U3RhcnQgKyB5TGVuZ3RoKTsKLSAgICBjYWlyb19w
YXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYihncmFkaWVudCwgMCwgZ3JhZFN0YXJ0Q29sb3IsIGdy
YWRTdGFydENvbG9yLCBncmFkU3RhcnRDb2xvcik7Ci0gICAgY2Fpcm9fcGF0dGVybl9hZGRfY29s
b3Jfc3RvcF9yZ2IoZ3JhZGllbnQsIDEsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9yLCBncmFk
RW5kQ29sb3IpOwotICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm8sIGdyYWRpZW50KTsKLSAgICBj
YWlyb19maWxsKGNhaXJvKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3koZ3JhZGllbnQpOwot
fQotCi1zdGF0aWMgdm9pZCBzZXR1cEJvcmRlcihjYWlyb190ICogY2Fpcm8sIFRoZW1lRW5naW5l
OjpTdGF0ZSBzdGF0ZSkKLXsKLSAgICBkb3VibGUgYm9yZGVyQ29sb3IgPSBzdGF0ZSA9PSBUaGVt
ZUVuZ2luZTo6U3RhdGVIb3ZlciA/IEJvcmRlck9uSG92ZXJDb2xvciA6IEJvcmRlckNvbG9yOwot
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhaXJvLCBib3JkZXJDb2xvciwgYm9yZGVyQ29sb3Is
IGJvcmRlckNvbG9yKTsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYWlybywgMSk7Ci19Ci0K
LXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludEJ1dHRvbihDYW52YXMqIGNhbnZhcywg
U3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikg
Y29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0gICAgc2V0dXBCb3JkZXIoY2FudmFz
LCBzdGF0ZSk7Ci0gICAgLy8gQ2Fpcm8gdXNlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIG5vdCBiYXNl
ZCBvbiBwaXhlbCBjb29yZGluYXRlcywgc28KLSAgICAvLyB3ZSBuZWVkIHRvIGFkZCAgMC41IHRv
IHggYW5kIHkgY29vcmQgb3IgdGhlIGxpbmUgd2lsbCBzdGF5IGJldHdlZW4KLSAgICAvLyB0d28g
cGl4ZWxzIGluc3RlYWQgb2YgaW4gdGhlIG1pZGRsZSBvZiBhIHBpeGVsLgotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCBy
ZWN0LmhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAgICBn
cmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVBy
ZXNzZWQpOwotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OnBhaW50VGV4dEZpZWxkKENhbnZhcyogY2FudmFzLCBTdGF0ZSwgY29uc3Qg
UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0KLSAgICBjb25z
dCBkb3VibGUgbGluZVdpZHRoID0gMjsKLSAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvbiA9IGxp
bmVXaWR0aCAvIDIuMDsKLQotICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgbGluZVdp
ZHRoKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIFRleHRGaWVsZERhcmtCb3Jk
ZXJDb2xvciwgVGV4dEZpZWxkRGFya0JvcmRlckNvbG9yLCBUZXh0RmllbGREYXJrQm9yZGVyQ29s
b3IpOwotICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyBjb3JyZWN0aW9uLCByZWN0
LnkgKyBjb3JyZWN0aW9uICsgcmVjdC5oZWlnaHQpOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgMCwgLXJlY3QuaGVpZ2h0KTsKLSAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJl
Y3Qud2lkdGgsIDApOwotICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOwotCi0gICAgY2Fpcm9fc2V0
X3NvdXJjZV9yZ2IoY2FudmFzLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRM
aWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yKTsKLSAgICBjYWlyb19t
b3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgY29ycmVjdGlvbiArIHJlY3Qud2lkdGgsIHJlY3QueSAr
IGNvcnJlY3Rpb24pOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgMCwgcmVjdC5oZWln
aHQpOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLXJlY3Qud2lkdGgsIDApOwotICAg
IGNhaXJvX3N0cm9rZShjYW52YXMpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQot
Ci12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0QXJlYShDYW52YXMqIGNhbnZh
cywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgcGFpbnRUZXh0
RmllbGQoY2FudmFzLCBzdGF0ZSwgcmVjdCk7Ci19Ci0KLVNpemUgRGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpnZXRDaGVja2JveFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBTaXplKDEzLCAxMyk7
Ci19Ci0KLXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludENoZWNrYm94KENhbnZhcyog
Y2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQ
YXJhbXMmIHBhcmFtKSBjb25zdAotewotICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKLSAgICBzZXR1
cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0
LnggKyAwLjUsIHJlY3QueSArIDAuNSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwotICAgIGNh
aXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOwotCi0gICAgZ3JhZGllbnRGaWxsKGNhbnZhcywg
cmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKLQotICAgIGlmIChw
YXJhbS5jaGVja2VkKSB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBib3JkZXIgPSAzOwotICAgICAg
ICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52YXMsIDIpOwotICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOwotICAg
ICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0Lnkg
KyAwLjUgKyByZWN0LmhlaWdodCAtIGJvcmRlcik7Ci0gICAgICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgcmVjdC53aWR0aCAtIGJvcmRlciAqIDIsIC1yZWN0LmhlaWdodCArIGJvcmRlciAq
IDIpOwotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVy
LCByZWN0LnkgKyAwLjUgKyBib3JkZXIpOwotICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52
YXMsIHJlY3Qud2lkdGggLSBib3JkZXIgKiAyLCByZWN0LmhlaWdodCAtIGJvcmRlciAqIDIpOwot
ICAgICAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKLSAgICB9Ci0KLSAgICBjYWlyb19yZXN0b3Jl
KGNhbnZhcyk7Ci19Ci0KLVNpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUo
KSBjb25zdAotewotICAgIHJldHVybiBTaXplKDEzLCAxMyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludFJhZGlvKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29u
c3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAotewot
ICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKLSAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsK
LSAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCByZWN0Lnkg
KyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDIuMCwgMCwgMiAqIE1fUEkpOwotICAg
IGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOwotCi0gICAgZ3JhZGllbnRGaWxsKGNhbnZh
cywgcmVjdC55LCByZWN0LmhlaWdodCk7Ci0KLSAgICBpZiAocGFyYW0uY2hlY2tlZCkgewotICAg
ICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3Is
IENoZWNrQ29sb3IpOwotICAgICAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0Lndp
ZHRoIC8gMi4wLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDQuMCwg
MCwgMiAqIE1fUEkpOwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgfQotICAgIGNh
aXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6Omdl
dE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYg
cGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0Ci17Ci0gICAgcGFkZGluZ1Rv
cCA9IE1lbnVMaXN0Qm9yZGVyOwotICAgIHBhZGRpbmdMZWZ0ID0gTWVudUxpc3RCb3JkZXI7Ci0g
ICAgcGFkZGluZ0JvdHRvbSA9IE1lbnVMaXN0Qm9yZGVyOwotICAgIHBhZGRpbmdSaWdodCA9IDIg
KiBNZW51TGlzdEJvcmRlciArIE1lbnVMaXN0QXJyb3dTaXplOwotfQotCi12b2lkIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6cGFpbnRNZW51TGlzdChDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUs
IGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAg
IHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMs
IHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7Ci0g
ICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAgICBncmFkaWVudEZpbGwoY2Fu
dmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOwotCi0gICAg
Y2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBNZW51TGlzdEFycm93
U2l6ZSAtIE1lbnVMaXN0Qm9yZGVyLCByZWN0LnkgKyAxICsgcmVjdC5oZWlnaHQgLyAyIC0gTWVu
dUxpc3RBcnJvd1NpemUgLyAyKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENo
ZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOwotICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUpOwotICAgIGNh
aXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKLSAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0KLSAgICBj
YWlyb19yZXN0b3JlKGNhbnZhcyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpw
YWludFByb2dyZXNzQmFyKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYg
cmVjdCwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAotewotICAg
IGNhaXJvX3NhdmUoY2FudmFzKTsKLQotICAgIGlmIChwYXJhbXMuaXNEZXRlcm1pbmF0ZSkgewot
ICAgICAgICAvLyBCYWNrZ3JvdW5kCi0gICAgICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUp
OwotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53
aWR0aCwgcmVjdC5oZWlnaHQpOwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgICAg
IC8vIFByb2dyZXNzCi0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVj
dC55LCByZWN0LndpZHRoICogcGFyYW1zLnBvc2l0aW9uLCByZWN0LmhlaWdodCk7Ci0gICAgICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0Lndp
ZHRoLCByZWN0LmhlaWdodCk7Ci0gICAgICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwg
cmVjdC5oZWlnaHQsIHRydWUpOwotICAgIH0KLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyA9IDEwOwotc3Rh
dGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7Ci0KLWRv
dWJsZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoKSBjb25zdAotewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVy
dmFsOwotfQotCi1kb3VibGUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRp
b25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNr
IGFuZCBmb3J0aC4KLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldElubmVyU3Bp
bkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBh
ZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdAotewotICAgIHBhZGRpbmdUb3Ag
PSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7Ci0gICAgcGFkZGluZ0xlZnQgPSBJbm5lclNwaW5CdXR0
b25Cb3JkZXI7Ci0gICAgcGFkZGluZ0JvdHRvbSA9IElubmVyU3BpbkJ1dHRvbkJvcmRlcjsKLSAg
ICBwYWRkaW5nUmlnaHQgPSAyICogSW5uZXJTcGluQnV0dG9uQm9yZGVyICsgSW5uZXJTcGluQnV0
dG9uQXJyb3dTaXplOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRJbm5l
clNwaW5CdXR0b24oQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0
LCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNvbnN0Ci17Ci0gICAg
ZG91YmxlIHJlY3RIYWxmSGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyAyOwotCi0gICAgY2Fpcm9fc2F2
ZShjYW52YXMpOwotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMS41LCByZWN0LndpZHRoLCBy
ZWN0SGFsZkhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAg
ICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3RIYWxmSGVpZ2h0LCBzdGF0ZSA9PSBT
dGF0ZVByZXNzZWQgJiYgcGFyYW0uc3BpblVwKTsKLQotICAgIHNldHVwQm9yZGVyKGNhbnZhcywg
c3RhdGUpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55
ICsgMC41ICsgcmVjdEhhbGZIZWlnaHQsIHJlY3Qud2lkdGgsIHJlY3RIYWxmSGVpZ2h0KTsKLSAg
ICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKLQotICAgIGdyYWRpZW50RmlsbChjYW52
YXMsIHJlY3QueSArIHJlY3RIYWxmSGVpZ2h0LCByZWN0SGFsZkhlaWdodCwgc3RhdGUgPT0gU3Rh
dGVQcmVzc2VkICYmICFwYXJhbS5zcGluVXApOwotCi0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMs
IHJlY3QueCArIHJlY3Qud2lkdGggLSBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUgLSBJbm5lclNw
aW5CdXR0b25Cb3JkZXIgKiAyLCByZWN0LnkgKyByZWN0SGFsZkhlaWdodCArIHJlY3QuaGVpZ2h0
IC8gNCAtIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSArIDEuNSk7Ci0gICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKLSAg
ICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKLSAgICBj
YWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIE1lbnVMaXN0
QXJyb3dTaXplKTsKLSAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7Ci0KLSAgICBjYWlyb19t
b3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAtIElubmVyU3BpbkJ1dHRvbkFycm93
U2l6ZSAtIElubmVyU3BpbkJ1dHRvbkJvcmRlciAqIDIsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8g
NCArIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2Io
Y2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKLSAgICBjYWlyb19y
ZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKLSAgICBjYWlyb19yZWxf
bGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIC1NZW51TGlzdEFycm93U2l6
ZSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwotCi0gICAgY2Fpcm9fZmlsbChjYW52
YXMpOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZXRlcihDYW52YXMq
IGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IE1ldGVyRXh0cmFQ
YXJhbXMmIHBhcmFtcykgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0KLSAgICAv
LyBCYWNrZ3JvdW5kLgotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJv
X3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdo
dCk7Ci0gICAgY2Fpcm9fZmlsbChjYW52YXMpOwotICAgIC8vIE1ldGVyLgotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoICogcGFyYW1zLnZhbHVl
UmF0aW8oKSwgcmVjdC5oZWlnaHQpOwotICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwg
cmVjdC5oZWlnaHQpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi1jb25zdCBp
bnQgU2xpZGVyVHJhY2tIZWlnaHQgPSA2OwotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
cGFpbnRTbGlkZXJUcmFjayhDYW52YXMqIGNhbnZhcywgU3RhdGUsIGNvbnN0IFJlY3QmIHJlY3Qp
IGNvbnN0Ci17Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAgIGNhaXJvX3JlY3RhbmdsZShj
YW52YXMsIHJlY3QueCwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0IC0gU2xpZGVyVHJhY2tIZWlnaHQp
IC8gMi4wLCByZWN0LndpZHRoLCBTbGlkZXJUcmFja0hlaWdodCk7Ci0gICAgZ3JhZGllbnRGaWxs
KGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgdHJ1ZSk7Ci0gICAgY2Fpcm9fcmVzdG9yZShj
YW52YXMpOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUaHVt
YihDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUp
OwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRo
LCByZWN0LmhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0gICAg
Z3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQ
cmVzc2VkKTsKLSAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludE1lZGlhUGxheUJ1dHRvbihDYW52YXMqIGNhbnZhcywgTWVkaWFQ
bGF5ZXJTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19z
YXZlKGNhbnZhcyk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsK
LSAgICBpZiAoc3RhdGUgPT0gU3RhdGVQYXVzZWQpIHsKLSAgICAgICAgY2Fpcm9fbW92ZV90byhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC4yNSkpOwotICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjc1KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41KSk7Ci0gICAgICAgIGNh
aXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzUpKTsKLSAgICAgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMp
OwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgfSBlbHNlIHsgLy8gSWYgc3RhdGUg
aXMgU3RhdGVQbGF5aW5nLgotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0Lngg
KyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjUpLCAocmVj
dC53aWR0aCAqIDAuMTUpLCAocmVjdC5oZWlnaHQgKiAwLjUpKTsKLSAgICAgICAgY2Fpcm9fZmls
bChjYW52YXMpOwotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNTUpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI1KSwgKHJlY3Qud2lk
dGggKiAwLjE1KSwgKHJlY3QuaGVpZ2h0ICogMC41KSk7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY2Fu
dmFzKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi12b2lkIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiBjYW52YXMsIE1l
ZGlhUGxheWVyU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fp
cm9fc2F2ZShjYW52YXMpOwotICAgIGlmIChzdGF0ZSA9PSBTdGF0ZU11dGVkKSB7Ci0gICAgICAg
IGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgMSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3Vy
Y2VfcmdiKGNhbnZhcywgMTM5LCAwLCAwKTsKLQotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC42NykpOwotICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjg3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zNCkpOwotICAgICAgICBjYWly
b19zdHJva2UoY2FudmFzKTsKLQotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjg3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC42NykpOwot
ICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU5
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zNCkpOwotICAgICAgICBjYWlyb19zdHJva2Uo
Y2FudmFzKTsKLSAgICB9IGVsc2UgeyAvLyBJZiBzdGF0ZSBpcyBTdGF0ZU5vdE11dGVkCi0gICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgNSk7Ci0gICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7Ci0KLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywg
cmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUp
LCByZWN0LndpZHRoICogMC4zNCwgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAg
IGNhaXJvX2ZpbGwoY2FudmFzKTsKLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0Lndp
ZHRoICogMC40NSwgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAgIGNhaXJvX2Zp
bGwoY2FudmFzKTsKLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0LndpZHRoICogMC41
NywgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY2FudmFz
KTsKLSAgICB9Ci0KLSAgICAvLyBTcGVha2VyCi0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMTgp
KTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjI5
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zOCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2Fu
dmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMDgpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQg
KiAwLjM4KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRo
ICogMC4wOCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNjIpKTsKLSAgICBjYWlyb19saW5l
X3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjI5KSwgcmVjdC55ICsgKHJlY3Qu
aGVpZ2h0ICogMC42MikpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjgyKSk7Ci0gICAgY2Fp
cm9fY2xvc2VfcGF0aChjYW52YXMpOwotICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKLQotICAgIGNh
aXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBh
aW50TWVkaWFTZWVrQmFja0J1dHRvbihDYW52YXMqIGNhbnZhcywgY29uc3QgUmVjdCYgcmVjdCkg
Y29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2IoY2FudmFzLCAxLCAxLCAxKTsKLSAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjkwKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOwotICAg
IGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCByZWN0
LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzAp
KTsKLQotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAu
MjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fpcm9fbGluZV90byhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdo
dCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjExKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOwotICAgIGNhaXJvX2xp
bmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTEpLCByZWN0LnkgKyAocmVj
dC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChy
ZWN0LndpZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAgICBj
YWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjIzKSwgcmVjdC55
ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotCi0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkp
KTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU4
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2Fu
dmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuOTApLCByZWN0LnkgKyAocmVjdC5oZWlnaHQg
KiAwLjI5KSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwotICAgIGNhaXJvX2ZpbGwo
Y2FudmFzKTsKLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihDYW52YXMqIGNhbnZh
cywgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0g
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsKLSAgICBjYWlyb19tb3Zl
X3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjEwKSwgcmVjdC55ICsgKHJlY3Qu
aGVpZ2h0ICogMC43MCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNDIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzApKTsKLQotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0
LnggKyAocmVjdC53aWR0aCAqIDAuNzcpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7
Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43Nyks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjg5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC43MCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuODkpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43NyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuMjkpKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjc3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotCi0gICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjQyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwot
ICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTApLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52
YXMpOwotICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFz
KTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFSZXdpbmRCdXR0
b24oQ2FudmFzKiBjYW52YXMsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fpcm9f
c2F2ZShjYW52YXMpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7
Ci0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NCks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC41MSkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuNTIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7Ci0gICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4xNyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuNTApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOwotICAgIGNhaXJv
X2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAo
cmVjdC5oZWlnaHQgKiAwLjQ4KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCAr
IChyZWN0LndpZHRoICogMC44NCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAg
ICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7Ci0gICAgY2Fpcm9fZmlsbChjYW52YXMpOwotCi0g
ICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi19CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0v
bml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxh
dGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIERlZmF1bHRXZWJUaGVtZUVuZ2luZV9oCi0jZGVmaW5lIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZV9oCi0KLSNpbmNsdWRlICJwdWJsaWMvVGhlbWVFbmdpbmUuaCIKLQotbmFtZXNwYWNlIE5peCB7
Ci0KLWNsYXNzIERlZmF1bHRXZWJUaGVtZUVuZ2luZSBGSU5BTCA6IHB1YmxpYyBUaGVtZUVuZ2lu
ZSB7Ci1wdWJsaWM6Ci0gICAgLy8gVGV4dCBzZWxlY3Rpb24gY29sb3JzLgotICAgIHZpcnR1YWwg
Q29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gTGlzdCBib3ggc2Vs
ZWN0aW9uIGNvbG9ycwotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgQ29sb3IgYWN0
aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURF
OwotCi0gICAgdmlydHVhbCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCBDb2xvciB0YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0
JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUZXh0RmllbGQoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0QXJlYShDYW52YXMqLCBTdGF0ZSwg
Y29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU2l6ZSBnZXRDaGVja2Jv
eFNpemUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChD
YW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJhZGlvKENhbnZhcyosIFN0YXRlLCBjb25zdCBS
ZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRNZW51TGlzdChDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFJlY3QgJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBh
ZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRk
aW5nUmlnaHQpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNz
QmFyKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBh
cmFtcyYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGRvdWJsZSBnZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyAqLCBTdGF0
ZSwgY29uc3QgUmVjdCAmLCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGlu
dCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQm
IHBhZGRpbmdSaWdodCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWV0
ZXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soQ2FudmFz
KiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTbGlkZXJUaHVtYihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJS
SURFOwotCi0gICAgLy8gTWVkaWEgUGxheWVyCi0gICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFQ
bGF5QnV0dG9uKENhbnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiwg
TWVkaWFQbGF5ZXJTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBwYWludE1lZGlhUmV3aW5kQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVS
UklERTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gRGVmYXVsdFdlYlRo
ZW1lRW5naW5lX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9QbGF0Zm9ybS5jcHAJKHJldmlz
aW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwdWJsaWMvUGxhdGZvcm0uaCIKLQotI2luY2x1
ZGUgIkRlZmF1bHRXZWJUaGVtZUVuZ2luZS5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotc3RhdGlj
IFBsYXRmb3JtKiBzX3BsYXRmb3JtOwotCi12b2lkIFBsYXRmb3JtOjppbml0aWFsaXplKFBsYXRm
b3JtKiBwbGF0Zm9ybSkKLXsKLSAgICBzX3BsYXRmb3JtID0gcGxhdGZvcm07Ci19Ci0KLVBsYXRm
b3JtKiBQbGF0Zm9ybTo6Y3VycmVudCgpCi17Ci0gICAgc3RhdGljIFBsYXRmb3JtIGVtcHR5UGxh
dGZvcm07Ci0gICAgcmV0dXJuIHNfcGxhdGZvcm0gPyBzX3BsYXRmb3JtIDogJmVtcHR5UGxhdGZv
cm07Ci19Ci0KLVRoZW1lRW5naW5lKiBQbGF0Zm9ybTo6dGhlbWVFbmdpbmUoKQotewotICAgIHN0
YXRpYyBEZWZhdWx0V2ViVGhlbWVFbmdpbmUgdGhlbWU7Ci0gICAgcmV0dXJuICZ0aGVtZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgTml4CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9B
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9BdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgTml4X0F1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCi0jZGVmaW5lIE5peF9B
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJfaAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBBdWRpb0Rlc3RpbmF0aW9uQ29u
c3VtZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcigp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cywgZmxvYXQgc2FtcGxlUmF0ZSkgPSAwOwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIHZlY3Rv
ciBpcyB0aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLCBhbmQgbnVtYmVyT2ZGcmFtZXMgaXMg
dGhlCi0gICAgLy8gbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBpbiB0aGUgKHBvc3NpYmx5IG11bHRp
LWNoYW5uZWwpIGJ1ZmZlciBpbiBhIHBsYW5hciBmb3JtYXQuCi0gICAgdmlydHVhbCB2b2lkIGNv
bnN1bWVBdWRpbyhjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBmbG9hdCo+JiBwY21EYXRhLCBzaXpl
X3QgbnVtYmVyT2ZGcmFtZXMpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5k
aWYgLy8gTml4X0F1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X0F1ZGlvRGV2aWNlX2gKLSNkZWZp
bmUgTml4X0F1ZGlvRGV2aWNlX2gKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8dmVj
dG9yPgotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgQXVkaW9EZXZpY2UgewotcHVibGljOgot
ICAgIGNsYXNzIFJlbmRlckNhbGxiYWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCByZW5kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgLypzb3VyY2VEYXRhKi8sIGNv
bnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIC8qZGVzdGluYXRpb25EYXRhKi8sIHNpemVfdCAvKm51
bWJlck9mRnJhbWVzKi8pID0gMDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCB+
UmVuZGVyQ2FsbGJhY2soKSB7IH0KLSAgICB9OwotCi0gICAgdmlydHVhbCB+QXVkaW9EZXZpY2Uo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVSYXRlKCkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBOaXhfQXVkaW9EZXZpY2VfaApJbmRleDog
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTml4X0NhbnZhc19oCi0jZGVm
aW5lIE5peF9DYW52YXNfaAotCi0jaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KLQotbmFtZXNwYWNl
IE5peCB7Ci0KLXR5cGVkZWYgY2Fpcm9fdCBDYW52YXM7Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAot
Ci0jZW5kaWYgLy8gTml4X0NhbnZhc19oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbG9y
LmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBOaXhfQ29sb3JfaAotI2RlZmluZSBOaXhfQ29sb3Jf
aAotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLW5hbWVzcGFj
ZSBOaXggewotCi1jbGFzcyBDb2xvciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB1X2ludDMyX3Qg
QVJHQjMyOyAvLyBBUkdCIHF1YWRydXBsZXQKLQotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgYmxh
Y2sgPSAweEZGMDAwMDAwOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgd2hpdGUgPSAweEZGRkZG
RkZGOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgcmVkID0gMHhGRkZGMDAwMDsKLSAgICBzdGF0
aWMgY29uc3QgQVJHQjMyIGdyZWVuID0gMHhGRjAwRkYwMDsKLSAgICBzdGF0aWMgY29uc3QgQVJH
QjMyIGJsdWUgPSAweEZGMDAwMEZGOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZGFya0dyYXkg
PSAweEZGODA4MDgwOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZ3JheSA9IDB4RkZBMEEwQTA7
Ci0gICAgc3RhdGljIGNvbnN0IEFSR0IzMiBsaWdodEdyYXkgPSAweEZGQzBDMEMwOwotICAgIHN0
YXRpYyBjb25zdCBBUkdCMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOwotCi0gICAgQ29sb3Io
QVJHQjMyIHJnYmEpCi0gICAgICAgIDogbV9hcmdiKHJnYmEpCi0gICAgewotICAgIH0KLQotICAg
IENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhID0gMjU1KQotICAgICAgICA6IG1fYXJn
Yihib3VuZFZhbHVlKGEpIDw8IDI0IHwgYm91bmRWYWx1ZShyKSA8PCAxNiB8IGJvdW5kVmFsdWUo
ZykgPDwgOCB8IGJvdW5kVmFsdWUoYikpCi0gICAgewotICAgIH0KLQotICAgIG9wZXJhdG9yIEFS
R0IzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmdiOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGNoYXIgcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKG1fYXJnYiAm
IDB4MDBGRjAwMDApID4+IDE2OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gKG1fYXJnYiAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgY2hhciBiKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAo
bV9hcmdiICYgMHgwMDAwMDBGRik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciBhKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAobV9hcmdiICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0g
ICAgfQotCi0gICAgQVJHQjMyIGFyZ2IzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9hcmdiOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgb3RoZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmdiID09IG90aGVyLm1fYXJnYjsKLSAgICB9Ci0K
LSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYXJnYiAhPSBvdGhlci5tX2FyZ2I7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFS
R0IzMiBtX2FyZ2I7Ci0gICAgc3RhdGljIGlubGluZSBBUkdCMzIgYm91bmRWYWx1ZShpbnQgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4odmFsdWUsIDI1
NSkpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X0Nv
bG9yX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCShyZXZpc2lvbiAxNjIx
NDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Db21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4
X0NvbW1vbl9oCi0jZGVmaW5lIE5peF9Db21tb25faAotCi0jZGVmaW5lIE5JWF9FWFBPUlQgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotI2luY2x1ZGUgPHN0ZGRlZi5o
PiAvLyBGb3Igc2l6ZV90LgotCi0jZW5kaWYgLy8gTml4X0NvbW1vbl9oCkluZGV4OiBTb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0ZGVEZyYW1lLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9Q
bGF0Zm9ybS9uaXgvcHVibGljL0ZGVEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBOaXhfRkZURnJhbWVfaAotI2Rl
ZmluZSBOaXhfRkZURnJhbWVfaAotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgRkZURnJhbWUg
ewotcHVibGljOgotICAgIEZGVEZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB+RkZURnJhbWUoKSB7
IH0KLQotICAgIHZpcnR1YWwgRkZURnJhbWUqIGNvcHkoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZG9GRlQoY29uc3QgZmxvYXQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvSW52
ZXJzZUZGVChmbG9hdCopID0gMDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgZnJlcXVlbmN5RG9t
YWluU2FtcGxlQ291bnQoKSBjb25zdCA9IDA7Ci0gICAgLy8gQWZ0ZXIgbXVsdGlwbGljYXRpb24g
YW5kIHRyYW5zZm9ybSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyBzY2FsZWQKLSAgICAvLyB0byB0
YWtlIGluIGFjY291bnQgdGhlIHNjYWxlIHVzZWQgaW50ZXJuYWxseSBpbiBXZWJLaXQsIG9yaWdp
bmFsbHkKLSAgICAvLyBmcm9tIE1hYydzIHZlY0xpYi4KLSAgICAvLyBBZnRlciBtdWx0aXBsaWNh
dGlvbjogUGxhbmFyIGRhdGEgaXMgc2NhbGVkIGJ5IDAuNS4KLSAgICAvLyBBZnRlciBkaXJlY3Qg
dHJhbnNmb3JtOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkgMi4wLgotICAgIC8vIEFmdGVyIGlu
dmVyc2UgdHJhbnNmb3JtOiBUaW1lIGRvbWFpbiBkYXRhIGlzIHNjYWxlZCBieSAxLjAvKDIqIEZG
VCBzaXplKS4KLSAgICB2aXJ0dWFsIGZsb2F0KiByZWFsRGF0YSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGZsb2F0KiBpbWFnRGF0YSgpIGNvbnN0ID0gMDsKLXByaXZhdGU6Ci0gICAgRkZURnJh
bWUoY29uc3QgRkZURnJhbWUmKTsKLSAgICBGRlRGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IEZGVEZy
YW1lJik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9GRlRGcmFt
ZV9oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvR2FtZXBhZC5oCShyZXZpc2lvbiAxNjIx
NDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4
X0dhbWVwYWRfaAotI2RlZmluZSBOaXhfR2FtZXBhZF9oCi0KLSNpbmNsdWRlICJDb21tb24uaCIK
LQotbmFtZXNwYWNlIE5peCB7Ci0KLWNsYXNzIEdhbWVwYWQgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgaWRMZW5ndGhDYXAgPSAxMjg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBheGVzTGVuZ3RoQ2FwID0gMTY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBidXR0b25zTGVu
Z3RoQ2FwID0gMzI7Ci0KLSAgICBHYW1lcGFkKCkKLSAgICAgICAgOiBjb25uZWN0ZWQoZmFsc2Up
Ci0gICAgICAgICwgdGltZXN0YW1wKDApCi0gICAgICAgICwgYXhlc0xlbmd0aCgwKQotICAgICAg
ICAsIGJ1dHRvbnNMZW5ndGgoMCkKLSAgICB7Ci0gICAgICAgIGlkWzBdID0gMDsKLSAgICB9Ci0K
LSAgICAvLyBJcyB0aGVyZSBhIGdhbWVwYWQgY29ubmVjdGVkIGF0IHRoaXMgaW5kZXg/Ci0gICAg
Ym9vbCBjb25uZWN0ZWQ7Ci0KLSAgICAvLyBEZXZpY2UgaWRlbnRpZmllciAoYmFzZWQgb24gbWFu
dWZhY3R1cmVyLCBtb2RlbCwgZXRjLikuCi0gICAgY2hhciBpZFtpZExlbmd0aENhcF07Ci0KLSAg
ICAvLyBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdmFsdWUgcmVmZXJyaW5nIHRvIHdoZW4gdGhl
IGRhdGEgd2VyZSBsYXN0Ci0gICAgLy8gdXBkYXRlZC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg
dGltZXN0YW1wOwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGF4ZXMg
YXJyYXkuCi0gICAgdW5zaWduZWQgYXhlc0xlbmd0aDsKLQotICAgIC8vIE5vcm1hbGl6ZWQgdmFs
dWVzIHJlcHJlc2VudGluZyBheGVzLCBpbiB0aGUgcmFuZ2UgWy0xLi4xXS4KLSAgICBmbG9hdCBh
eGVzW2F4ZXNMZW5ndGhDYXBdOwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4g
dGhlIGJ1dHRvbnMgYXJyYXkuCi0gICAgdW5zaWduZWQgYnV0dG9uc0xlbmd0aDsKLQotICAgIC8v
IE5vcm1hbGl6ZWQgdmFsdWVzIHJlcHJlc2VudGluZyBidXR0b25zLCBpbiB0aGUgcmFuZ2UgWzAu
LjFdLgotICAgIGZsb2F0IGJ1dHRvbnNbYnV0dG9uc0xlbmd0aENhcF07Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9HYW1lcGFkX2gKSW5kZXg6IFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0dhbWVwYWRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvR2FtZXBhZHMuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvR2FtZXBhZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfR2FtZXBhZHNfaAotI2RlZmlu
ZSBOaXhfR2FtZXBhZHNfaAotCi0jaW5jbHVkZSAiR2FtZXBhZC5oIgotCi1uYW1lc3BhY2UgTml4
IHsKLQotY2xhc3MgR2FtZXBhZHMgewotcHVibGljOgotICAgIEdhbWVwYWRzKCkKLSAgICAgICAg
OiBsZW5ndGgoMCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaXRlbXNMZW5n
dGhDYXAgPSA0OwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGl0ZW1z
IGFycmF5LgotICAgIHVuc2lnbmVkIGxlbmd0aDsKLQotICAgIC8vIEdhbWVwYWQgZGF0YSBmb3Ig
TiBzZXBhcmF0ZSBnYW1lcGFkIGRldmljZXMuCi0gICAgR2FtZXBhZCBpdGVtc1tpdGVtc0xlbmd0
aENhcF07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9HYW1lcGFk
c19oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYUNvbnN0cmFpbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTWVkaWFDb25zdHJhaW50
cy5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRp
YUNvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X01lZGlhQ29uc3RyYWludHNf
aAotI2RlZmluZSBOaXhfTWVkaWFDb25zdHJhaW50c19oCi0KLSNpbmNsdWRlICJDb21tb24uaCIK
LSNpbmNsdWRlICJQcml2YXRlUHRyLmgiCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVj
dCBNZWRpYUNvbnN0cmFpbnQ7Ci1jbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwotfQotCi1uYW1lc3Bh
Y2UgTml4IHsKLQotc3RydWN0IE1lZGlhQ29uc3RyYWludCB7Ci0gICAgTWVkaWFDb25zdHJhaW50
KCkKLSAgICB7Ci0gICAgfQotCi0gICAgTWVkaWFDb25zdHJhaW50KHN0ZDo6c3RyaW5nIG5hbWUs
IHN0ZDo6c3RyaW5nIHZhbHVlKQotICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIG1fbmFtZTsKLSAg
ICBzdGQ6OnN0cmluZyBtX3ZhbHVlOwotfTsKLQotY2xhc3MgTWVkaWFDb25zdHJhaW50cyB7Ci1w
dWJsaWM6Ci0gICAgTWVkaWFDb25zdHJhaW50cygpIHsgfQotICAgIH5NZWRpYUNvbnN0cmFpbnRz
KCkgeyByZXNldCgpOyB9Ci0KLSAgICB2b2lkIGFzc2lnbihjb25zdCBNZWRpYUNvbnN0cmFpbnRz
Jik7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgTklYX0VYUE9SVCBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0gICAgTklYX0VYUE9SVCB2b2lk
IGdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKHN0ZDo6dmVjdG9yPE1lZGlhQ29uc3RyYWludD4mKSBj
b25zdDsKLSAgICBOSVhfRVhQT1JUIHZvaWQgZ2V0T3B0aW9uYWxDb25zdHJhaW50cyhzdGQ6OnZl
Y3RvcjxNZWRpYUNvbnN0cmFpbnQ+JikgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIGJvb2wgZ2V0
TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6c3RyaW5nJiB2
YWx1ZSkgY29uc3Q7Ci0gICAgTklYX0VYUE9SVCBib29sIGdldE9wdGlvbmFsQ29uc3RyYWludFZh
bHVlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6c3RyaW5nJiB2YWx1ZSkgY29uc3Q7Ci0KLSNpZmRl
ZiBCVUlMRElOR19OSVhfXwotICAgIE1lZGlhQ29uc3RyYWludHMoY29uc3QgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHM+Jik7Ci0gICAgTWVkaWFDb25zdHJhaW50cyhX
ZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzKik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBQcml2
YXRlUHRyPFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHM+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X01lZGlhQ29uc3RyYWludHNfaAotCkluZGV4
OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDE2MjE0
MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhUGxheWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IE5peF9NZWRpYVBsYXllcgotI2RlZmluZSBOaXhfTWVkaWFQbGF5ZXIKLQotI2luY2x1ZGUgPG1l
bW9yeT4KLQotbmFtZXNwYWNlIE5peCB7Ci0KLWNsYXNzIE1lZGlhUGxheWVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBlbnVtIFJlYWR5U3RhdGUgIHsgSGF2ZU5vdGhpbmcsIEhhdmVNZXRhZGF0YSwg
SGF2ZUN1cnJlbnREYXRhLCBIYXZlRnV0dXJlRGF0YSwgSGF2ZUVub3VnaERhdGEgfTsKLSAgICBl
bnVtIE5ldHdvcmtTdGF0ZSB7IEVtcHR5LCBJZGxlLCBMb2FkaW5nLCBMb2FkZWQsIEZvcm1hdEVy
cm9yLCBOZXR3b3JrRXJyb3IsIERlY29kZUVycm9yIH07Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYVBs
YXllckNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoUmVhZHlTdGF0ZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkKE5ldHdvcmtTdGF0ZSkgPSAwOwotfTsK
LQotY2xhc3MgTWVkaWFQbGF5ZXIgewotcHVibGljOgotICAgIC8vIERlcml2YXRlZCBjbGFzc2Vz
IHNob3VsZG4ndCBkbyBhbnkgam9iIG9uIGNvbnN0cnVjdG9yLCBNZWRpYVBsYXllcnMgY291bGQg
YmUKLSAgICAvLyBjcmVhdGVkIGZvciBwcm9iaW5nIHB1cnBvc2VzIHdpdGggYSBudWxsIGNsaWVu
dC4KLSAgICBNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQotICAgICAgICA6
IG1fcGxheWVyQ2xpZW50KGNsaWVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+TWVk
aWFQbGF5ZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBwYXVzZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgPSAwOwot
ICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9h
dCBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZs
b2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZChjb25zdCBjaGFyKiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2Vl
a2luZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJhY2tSYXRlKGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXllckNsaWVudD4gbV9wbGF5ZXJDbGllbnQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9NZWRpYVBsYXllcl9oCklu
ZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtLmgJKHJldmlzaW9uIDE2
MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgTml4X01lZGlhU3RyZWFtX2gKLSNkZWZpbmUgTml4X01lZGlhU3RyZWFtX2gKLQotI2lu
Y2x1ZGUgIkNvbW1vbi5oIgotI2luY2x1ZGUgIlByaXZhdGVQdHIuaCIKLQotI2luY2x1ZGUgPGNz
dGRkZWY+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBN
ZWRpYVN0cmVhbVByaXZhdGU7Ci19Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBNZWRpYVN0
cmVhbVNvdXJjZTsKLWNsYXNzIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U7Ci0KLWNsYXNzIE1lZGlh
U3RyZWFtIHsKLXB1YmxpYzoKLSAgICBNZWRpYVN0cmVhbSgpIHsgfQotICAgIE1lZGlhU3RyZWFt
KGNvbnN0IE1lZGlhU3RyZWFtJiBvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9Ci0gICAgfk1lZGlh
U3RyZWFtKCkgeyByZXNldCgpOyB9Ci0KLSAgICBNZWRpYVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0
IE1lZGlhU3RyZWFtJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNv
bnN0IE1lZGlhU3RyZWFtJik7Ci0KLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIE1lZGlh
U3RyZWFtU291cmNlKiBwb2ludGVycywgZGVsZXRpbmcgdGhlbS4KLSAgICBOSVhfRVhQT1JUIHZv
aWQgaW5pdGlhbGl6ZShzdGQ6OnZlY3RvcjxNZWRpYVN0cmVhbVNvdXJjZSo+JiBhdWRpb1RyYWNr
cywgc3RkOjp2ZWN0b3I8TWVkaWFTdHJlYW1Tb3VyY2UqPiYgdmlkZW9UcmFja3MpOwotCi0gICAg
TklYX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgTklYX0VYUE9SVCBib29sIGlzTnVsbCgpIGNv
bnN0OwotCi0KLSAgICBOSVhfRVhQT1JUIGNvbnN0IGNoYXIqIGlkKCkgY29uc3Q7Ci0KLSAgICAv
LyBDYWxsZXIgbXVzdCBkZWxldGUgdGhlIHJldHVybmVkIE1lZGlhU3RyZWFtU291cmNlKgotICAg
IE5JWF9FWFBPUlQgc3RkOjp2ZWN0b3I8TWVkaWFTdHJlYW1Tb3VyY2UqPiBhdWRpb1NvdXJjZXMo
KSBjb25zdDsKLSAgICBOSVhfRVhQT1JUIHN0ZDo6dmVjdG9yPE1lZGlhU3RyZWFtU291cmNlKj4g
dmlkZW9Tb3VyY2VzKCkgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgYWRkU291cmNlKGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlJik7Ci0gICAgTklYX0VYUE9SVCB2b2lkIHJlbW92ZVNvdXJj
ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZSYpOwotCi0jaWYgQlVJTERJTkdfTklYX18KLSAgICBN
ZWRpYVN0cmVhbShXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGUqKTsKLSAgICBNZWRpYVN0cmVh
bShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlPiYpOwot
ICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGU+
KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlKigpIGNv
bnN0OwotICAgIE1lZGlhU3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZT4mKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFBy
aXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3ByaXZhdGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9NZWRpYVN0cmVhbV9oCi0KSW5kZXg6
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbUF1ZGlvU291
cmNlLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1BdWRpb1NvdXJjZV9oCi0K
LSNpbmNsdWRlICJDb21tb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbUF1ZGlvU291cmNlOwotfQotCi1u
YW1lc3BhY2UgTml4IHsKLWNsYXNzIEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcjsKLQotY2xhc3Mg
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZSA6IHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZSB7Ci1wdWJs
aWM6Ci0gICAgTklYX0VYUE9SVCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlKCk7Ci0gICAgTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZShjb25zdCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvdGhlcikgOiBN
ZWRpYVN0cmVhbVNvdXJjZShvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9Ci0gICAgfk1lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2UoKSB7IHJlc2V0KCk7IH0KLQotICAgIE1lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2UmIG9wZXJhdG9yPShjb25zdCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0K
LSAgICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2Um
KTsKLQotICAgIE5JWF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Ci0KLSAgICBOSVhfRVhQT1JUIGNvbnN0
IGNoYXIqIGRldmljZUlkKCkgY29uc3Q7Ci0gICAgTklYX0VYUE9SVCB2b2lkIHNldERldmljZUlk
KGNvbnN0IGNoYXIqKTsKLQotICAgIC8vIFRoZSBOaXg6OkF1ZGlvRGVzdGluYXRpb25Db25zdW1l
ciBpcyBub3Qgb3duZWQsIGFuZCBoYXMgdG8gYmUgZGlzcG9zZWQgb2Ygc2VwYXJhdGVseQotICAg
IC8vIGFmdGVyIGNhbGxpbmcgcmVtb3ZlQXVkaW9Db25zdW1lci4KLSAgICBOSVhfRVhQT1JUIHZv
aWQgYWRkQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqKTsKLSAgICBOSVhf
RVhQT1JUIGJvb2wgcmVtb3ZlQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIq
KTsKLQotI2lmIEJVSUxESU5HX05JWF9fCi0gICAgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZT4mKTsKLSAg
ICBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1B
dWRpb1NvdXJjZSopOwotICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRp
YVN0cmVhbUF1ZGlvU291cmNlPigpIGNvbnN0OwotICAgIG9wZXJhdG9yIFdlYkNvcmU6Ok1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2UqKCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFdlYkNvcmU6Ok1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2UqIHRvV2ViQ29yZUF1ZGlvU291cmNlKCkgY29uc3Q7Ci0jZW5kaWYK
LQotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBOaXhfTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZV9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3Ry
ZWFtQ2VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTWVk
aWFTdHJlYW1DZW50ZXIuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvTWVkaWFTdHJlYW1DZW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfTWVkaWFTdHJlYW1D
ZW50ZXJfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1DZW50ZXJfaAotCi0jaW5jbHVkZSAiQ29t
bW9uLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBNZWRpYVN0cmVhbUNlbnRlcjsKLX0KLQotbmFtZXNwYWNlIE5peCB7Ci1jbGFzcyBNZWRp
YVN0cmVhbTsKLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlOwotY2xhc3MgTWVkaWFDb25zdHJhaW50
czsKLQotY2xhc3MgTklYX0VYUE9SVCBNZWRpYVN0cmVhbUNlbnRlciB7Ci1wdWJsaWM6Ci0gICAg
TWVkaWFTdHJlYW1DZW50ZXIoKTsKLSAgICB2b2lkIHJlcXVlc3QoKTsKLSAgICAvLyBSZXR1cm4g
dGhlIG5hbWUgb2YgdGhlIGZhaWxlZCBjb25zdHJhaW50LiAwIGlmIHN1Y2Nlc3NmdWwuCi0gICAg
dmlydHVhbCBjb25zdCBjaGFyKiB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhNZWRpYUNvbnN0
cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0NvbnN0cmFp
bnRzKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRpYVN0cmVhbSBjcmVhdGVNZWRpYVN0cmVhbShNZWRp
YUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0Nv
bnN0cmFpbnRzKSA9IDA7Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8g
Tml4X01lZGlhU3RyZWFtQ2VudGVyX2gKLQpJbmRleDogU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvTWVkaWFTdHJlYW1Tb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9NZWRpYVN0cmVhbVNvdXJjZS5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOaXhfTWVkaWFTdHJlYW1Tb3VyY2VfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1Tb3Vy
Y2VfaAotCi0jaW5jbHVkZSAiQ29tbW9uLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZVB0ci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKLX0KLQotbmFtZXNw
YWNlIE5peCB7Ci0KLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlIHsKLXB1YmxpYzoKLQotICAgIGVu
dW0gVHlwZSB7Ci0gICAgICAgIEF1ZGlvLAotICAgICAgICBWaWRlbwotICAgIH07Ci0KLSAgICBl
bnVtIFJlYWR5U3RhdGUgewotICAgICAgICBSZWFkeVN0YXRlTGl2ZSA9IDAsCi0gICAgICAgIFJl
YWR5U3RhdGVNdXRlZCA9IDEsCi0gICAgICAgIFJlYWR5U3RhdGVFbmRlZCA9IDIKLSAgICB9Owot
Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2UoKSB7IH0KLSAgICBNZWRpYVN0cmVhbVNvdXJjZShjb25z
dCBNZWRpYVN0cmVhbVNvdXJjZSYgb3RoZXIpIHsgYXNzaWduKG90aGVyKTsgfQotICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtU291cmNlKCkgeyByZXNldCgpOyB9Ci0KLSAgICBNZWRpYVN0cmVhbVNv
dXJjZSYgb3BlcmF0b3I9KGNvbnN0IE1lZGlhU3RyZWFtU291cmNlJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAg
ICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlJik7Ci0KLSAg
ICBOSVhfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0gICAgTklYX0VYUE9SVCBjb25zdCBjaGFyKiBp
ZCgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgVHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgTklYX0VY
UE9SVCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgc2V0
UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKLSAgICBOSVhfRVhQT1JUIFJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0OwotCi0gICAgTklYX0VYUE9SVCBib29sIGVuYWJsZWQoKSBjb25zdDsKLSAg
ICBOSVhfRVhQT1JUIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLQotICAgIE5JWF9FWFBPUlQgYm9v
bCBtdXRlZCgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgdm9pZCBzZXRNdXRlZChib29sKTsKLQot
ICAgIE5JWF9FWFBPUlQgYm9vbCByZWFkb25seSgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgdm9p
ZCBzZXRSZWFkb25seShib29sKTsKLQotICAgIC8vIEZJWE1FIEFkZCBzdXBwb3J0IGZvciBjYXBh
YmlsaXRlcy4KLQotI2lmIEJVSUxESU5HX05JWF9fCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2UoY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlPiYpOwotICAgIE1l
ZGlhU3RyZWFtU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKTsK
LSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U+
KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKCkgY29u
c3Q7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFByaXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFT
dHJlYW1Tb3VyY2U+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5k
aWYgLy8gTml4X01lZGlhU3RyZWFtU291cmNlX2gKLQpJbmRleDogU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL011bHRpQ2hhbm5lbFBDTURhdGEuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOaXhfTXVsdGlDaGFubmVsUENNRGF0YV9oCi0jZGVmaW5lIE5peF9NdWx0aUNoYW5uZWxQ
Q01EYXRhX2gKLQotI2luY2x1ZGUgIkNvbW1vbi5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotLy8g
QSBjb250YWluZXIgZm9yIG11bHRpLWNoYW5uZWwgbGluZWFyIFBDTSBhdWRpbyBkYXRhLgotY2xh
c3MgTklYX0VYUE9SVCBNdWx0aUNoYW5uZWxQQ01EYXRhIHsKLXB1YmxpYzoKLSAgICBNdWx0aUNo
YW5uZWxQQ01EYXRhKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGRv
dWJsZSBzYW1wbGVSYXRlKTsKLSAgICB+TXVsdGlDaGFubmVsUENNRGF0YSgpOwotCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OwotICAgIHNpemVfdCBsZW5ndGgoKSBjb25z
dDsKLSAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBjYW4gcmV0
dXJuIG51bGwgaWYgTml4IHdhcyBjb21waWxlZCB3aXRob3V0IFdlYkF1ZGlvIHN1cHBvcnQuCi0g
ICAgZmxvYXQqIGNoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCk7Ci0KLSNpZmRlZiBC
VUlMRElOR19OSVhfXwotICAgIHZvaWQqIGdldEludGVybmFsRGF0YSgpOwotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgTXVsdGlDaGFubmVsUENNRGF0YShjb25zdCBNdWx0aUNoYW5uZWxQQ01EYXRh
Jik7Ci0gICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTXVsdGlDaGFubmVsUENNRGF0YSYpOwotCi0g
ICAgdm9pZCogbV9kYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBO
aXhfTXVsdGlDaGFubmVsUENNRGF0YV9oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1Bs
YXRmb3JtLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIE5peF9QbGF0Zm9ybV9oCi0jZGVmaW5lIE5peF9QbGF0Zm9ybV9oCi0KLSNpbmNsdWRl
ICJBdWRpb0RldmljZS5oIgotI2luY2x1ZGUgIkdhbWVwYWRzLmgiCi0jaW5jbHVkZSA8c3RkaW50
Lmg+Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBNdWx0aUNoYW5uZWxQQ01EYXRhOwotY2xh
c3MgRkZURnJhbWU7Ci1jbGFzcyBUaGVtZUVuZ2luZTsKLWNsYXNzIE1lZGlhUGxheWVyOwotY2xh
c3MgTWVkaWFQbGF5ZXJDbGllbnQ7Ci0KLWNsYXNzIE5JWF9FWFBPUlQgUGxhdGZvcm0gewotcHVi
bGljOgotCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShQbGF0Zm9ybSopOwotICAgIHN0YXRp
YyBQbGF0Zm9ybSogY3VycmVudCgpOwotCi0gICAgLy8gQXVkaW8KLSAgICB2aXJ0dWFsIGZsb2F0
IGF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRlKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgc2l6
ZV90IGF1ZGlvSGFyZHdhcmVCdWZmZXJTaXplKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
dW5zaWduZWQgYXVkaW9IYXJkd2FyZU91dHB1dENoYW5uZWxzKCkgeyByZXR1cm4gMDsgfQotCi0g
ICAgLy8gQ3JlYXRlcyBhIGRldmljZSBmb3IgYXVkaW8gSS9PLgotICAgIC8vIFBhc3MgaW4gKG51
bWJlck9mSW5wdXRDaGFubmVscyA+IDApIGlmIGxpdmUvbG9jYWwgYXVkaW8gaW5wdXQgaXMgZGVz
aXJlZC4KLSAgICB2aXJ0dWFsIEF1ZGlvRGV2aWNlKiBjcmVhdGVBdWRpb0RldmljZShjb25zdCBj
aGFyKiAvKmlucHV0RGV2aWNlSWQqLywgc2l6ZV90IC8qYnVmZmVyU2l6ZSovLCB1bnNpZ25lZCAv
Km51bWJlck9mSW5wdXRDaGFubmVscyovLCB1bnNpZ25lZCAvKm51bWJlck9mT3V0cHV0Q2hhbm5l
bHMqLywgZG91YmxlIC8qc2FtcGxlUmF0ZSovLCBBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2sq
KSB7IHJldHVybiBudWxscHRyOyB9Ci0KLSAgICAvLyBHYW1lcGFkCi0gICAgdmlydHVhbCB2b2lk
IHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRzJiBpbnRvKSB7IGludG8ubGVuZ3RoID0gMDsgfQotCi0g
ICAgLy8gRkZURnJhbWUKLSAgICB2aXJ0dWFsIEZGVEZyYW1lKiBjcmVhdGVGRlRGcmFtZSh1bnNp
Z25lZCAvKmZmdHNpemUqLykgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0gICAgLy8gRGVjb2RlcyB0
aGUgaW4tbWVtb3J5IGF1ZGlvIGZpbGUgZGF0YSBhbmQgcmV0dXJucyB0aGUgbGluZWFyIFBDTSBh
dWRpbyBkYXRhLgotICAgIHZpcnR1YWwgTXVsdGlDaGFubmVsUENNRGF0YSogZGVjb2RlQXVkaW9S
ZXNvdXJjZShjb25zdCB2b2lkKiAvKmF1ZGlvRGF0YSovLCBzaXplX3QgLypkYXRhU2l6ZSovLCBk
b3VibGUgLypzYW1wbGVSYXRlKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KLQotICAgIC8vIFRoZW1l
IGVuZ2luZQotICAgIHZpcnR1YWwgVGhlbWVFbmdpbmUqIHRoZW1lRW5naW5lKCk7Ci0KLSAgICAv
LyBDcmVhdGUgYSBNZWRpYVBsYXllciwgdXNlZCB0by4uLiBwbGF5IG1lZGlhIDotKQotICAgIHZp
cnR1YWwgTWVkaWFQbGF5ZXIqIGNyZWF0ZU1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kikg
eyByZXR1cm4gbnVsbHB0cjsgfQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgflBsYXRmb3JtKCkg
eyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9QbGF0Zm9ybV9o
CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Qcml2YXRlUHRyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUHJpdmF0ZVB0ci5oCShyZXZpc2lvbiAx
NjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Qcml2YXRlUHRyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfUHJpdmF0
ZVB0cl9oCi0jZGVmaW5lIE5peF9Qcml2YXRlUHRyX2gKLQotI2luY2x1ZGUgIkNvbW1vbi5oIgot
Ci0jaWYgQlVJTERJTkdfTklYX18KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2VuZGlm
Ci0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotCi1uYW1lc3BhY2UgTml4IHsKLQotLy8gVGhpcyBjbGFz
cyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIE5peCBBUEkuIEl0IGV4aXN0cwot
Ly8gdG8gaGVscCBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgTml4IGludGVyZmFjZXMg
dGhhdCBtZXJlbHkKLS8vIHdyYXAgYSByZWZlcmVuY2UgY291bnRlZCBXZWJDb3JlIGNsYXNzLgot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcml2YXRlUHRyIHsKLXB1YmxpYzoKLSAgICBQ
cml2YXRlUHRyKCkgOiBtX3B0cigwKSB7IH0KLSAgICB+UHJpdmF0ZVB0cigpIHsgYXNzZXJ0KCFt
X3B0cik7IH0KLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9Ci0K
LSNpZiBCVUlMRElOR19OSVhfXwotICAgIFByaXZhdGVQdHIoY29uc3QgUGFzc1JlZlB0cjxUPiYg
cHJwKQotICAgICAgICA6IG1fcHRyKHBycC5sZWFrUmVmKCkpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgYXNzaWduKDApOwotICAgIH0KLQotICAgIFBy
aXZhdGVQdHI8VD4mIG9wZXJhdG9yPShjb25zdCBQcml2YXRlUHRyPFQ+JiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIFQqIHAgPSBvdGhlci5tX3B0cjsKLSAgICAgICAgaWYgKHApCi0gICAgICAgICAg
ICBwLT5yZWYoKTsKLSAgICAgICAgYXNzaWduKHApOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotCi0gICAgUHJpdmF0ZVB0cjxUPiYgb3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8VD4m
IHBycCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihwcnAubGVha1JlZigpKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIFQqIGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9wdHI7Ci0gICAgfQotCi0gICAgVCogb3BlcmF0b3ItPigpIGNvbnN0Ci0gICAgewot
ICAgICAgICBhc3NlcnQobV9wdHIpOwotICAgICAgICByZXR1cm4gbV9wdHI7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIHZvaWQgYXNzaWduKFQqIHApCi0gICAgewotICAgICAgICAvLyBwIGlzIGFs
cmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKLSAgICAgICAgaWYgKG1fcHRyKQotICAg
ICAgICAgICAgbV9wdHItPmRlcmVmKCk7Ci0gICAgICAgIG1fcHRyID0gcDsKLSAgICB9Ci0jZW5k
aWYKLQotcHJpdmF0ZToKLQotICAgIFQqIG1fcHRyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4
Ci0KLSNlbmRpZiAvLyBOaXhfUHJpdmF0ZVB0cl9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1JlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9SZWN0LmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1JlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgTml4X1JlY3RfaAotI2RlZmluZSBOaXhfUmVjdF9oCi0KLW5hbWVz
cGFjZSBOaXggewotCi1jbGFzcyBSZWN0IHsKLXB1YmxpYzoKLSAgICBpbnQgeDsKLSAgICBpbnQg
eTsKLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IGhlaWdodDsKLQotICAgIFJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogeCh4KQotICAgICAgICAsIHko
eSkKLSAgICAgICAgLCB3aWR0aCh3aWR0aCkKLSAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQotICAg
IHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9SZWN0
X2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9TaXplLmgJKHJldmlzaW9uIDE2MjE0MCkKKysr
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X1NpemVfaAotI2RlZmluZSBOaXhfU2l6
ZV9oCi0KLW5hbWVzcGFjZSBOaXggewotCi1zdHJ1Y3QgU2l6ZSB7Ci0gICAgaW50IHdpZHRoOwot
ICAgIGludCBoZWlnaHQ7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDA7Ci0gICAgfQotCi0gICAgU2l6ZSgp
Ci0gICAgICAgIDogd2lkdGgoMCkKLSAgICAgICAgLCBoZWlnaHQoMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogd2lkdGgod2lkdGgp
Ci0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHdp
ZHRoID09IG90aGVyLndpZHRoICYmIGhlaWdodCA9PSBvdGhlci5oZWlnaHQ7Ci0gICAgfQotCi0g
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IE5peAotCi0jZW5kaWYgLy8gTml4X1NpemVfaApJbmRleDogU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1
YmxpYy9UaGVtZUVuZ2luZS5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9UaGVtZUVuZ2luZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTml4X1RoZW1lRW5naW5lX2gKLSNkZWZpbmUgTml4X1RoZW1l
RW5naW5lX2gKLQotI2luY2x1ZGUgIkNhbnZhcy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiU2l6ZS5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgUmVjdDsKLQotY2xhc3Mg
VGhlbWVFbmdpbmUgewotcHVibGljOgotICAgIC8vIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBh
c3NvY2lhdGVkIFBhcnQuCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFN0YXRlRGlzYWJsZWQs
Ci0gICAgICAgIFN0YXRlSG92ZXIsCi0gICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0
ZVByZXNzZWQKLSAgICB9OwotCi0gICAgZW51bSBNZWRpYVBsYXllclN0YXRlIHsKLSAgICAgICAg
U3RhdGVQbGF5aW5nLAotICAgICAgICBTdGF0ZVBhdXNlZCwKLSAgICAgICAgU3RhdGVNdXRlZCwK
LSAgICAgICAgU3RhdGVOb3RNdXRlZAotICAgIH07Ci0KLSAgICAvLyBFeHRyYSBwYXJhbWV0ZXJz
IGZvciBkcmF3aW5nIHRoZSBQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIGFuZAotICAgIC8v
IFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLgotICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4
dHJhUGFyYW1zIHsKLSAgICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBh
cyBvcHBvc2VkIHRvIHRoZSBwYXJ0IGJlaW5nIHBhaW50ZWQuCi0gICAgICAgIGludCB0cmFja1g7
Ci0gICAgICAgIGludCB0cmFja1k7Ci0gICAgICAgIGludCB0cmFja1dpZHRoOwotICAgICAgICBp
bnQgdHJhY2tIZWlnaHQ7Ci0gICAgfTsKLQotICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBh
cnRDaGVja2JveCwgUGFydFB1c2hCdXR0b24gYW5kIFBhcnRSYWRpby4KLSAgICBzdHJ1Y3QgQnV0
dG9uRXh0cmFQYXJhbXMgewotICAgICAgICBib29sIGNoZWNrZWQ7Ci0gICAgICAgIGJvb2wgaW5k
ZXRlcm1pbmF0ZTsgLy8gV2hldGhlciB0aGUgYnV0dG9uIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUu
Ci0gICAgICAgIGJvb2wgaXNEZWZhdWx0OyAvLyBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGVmYXVs
dCBidXR0b24uCi0gICAgICAgIGJvb2wgaGFzQm9yZGVyOwotICAgIH07Ci0KLSAgICAvLyBFeHRy
YSBwYXJhbWV0ZXJzIGZvciBQYXJ0SW5uZXJTcGluQnV0dG9uCi0gICAgc3RydWN0IElubmVyU3Bp
bkJ1dHRvbkV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9vbCBzcGluVXA7Ci0gICAgICAgIGJvb2wg
cmVhZE9ubHk7Ci0gICAgfTsKLQotICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRQcm9n
cmVzc0JhcgotICAgIHN0cnVjdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9v
bCBpc0RldGVybWluYXRlOwotICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgIGRvdWJs
ZSBhbmltYXRpb25Qcm9ncmVzczsKLSAgICAgICAgZG91YmxlIGFuaW1hdGlvblN0YXJ0VGltZTsK
LSAgICB9OwotCi0gICAgc3RydWN0IE1ldGVyRXh0cmFQYXJhbXMgewotICAgICAgICBkb3VibGUg
bWluOwotICAgICAgICBkb3VibGUgbWF4OwotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAg
IGRvdWJsZSBsb3c7Ci0gICAgICAgIGRvdWJsZSBoaWdoOwotICAgICAgICBkb3VibGUgb3B0aW11
bTsKLSAgICAgICAgZG91YmxlIHZhbHVlUmF0aW8oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobWF4IDw9IG1pbikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgY29u
c3QgeyByZXR1cm4gIiI7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhUXVpcmtzU3R5
bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBl
eHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gIiI7IH0KLQotICAgIC8vIFRl
eHQgc2VsZWN0aW9uIGNvbG9ycy4KLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29s
b3IgaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7Ci0KLSAgICAv
LyBMaXN0IGJveCBzZWxlY3Rpb24gY29sb3JzCi0gICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0
Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29s
b3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29sb3IgaW5h
Y3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFs
IENvbG9yIGZvY3VzUmluZ0NvbG9yKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBDb2xvciB0
YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1
dHRvbihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1z
JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChDYW52YXMqLCBT
dGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFNpemUgZ2V0Q2hlY2ti
b3hTaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENoZWNrYm94KENhbnZh
cyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRSYWRpbyhDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1
dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRB
cmVhKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRNZW51TGlzdFBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0
LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50TWVudUxpc3QoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoQ2FudmFzKiwgU3Rh
dGUsIGNvbnN0IFJlY3QmLCBjb25zdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zJikgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jl
c3NCYXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5uZXJT
cGluQnV0dG9uUGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYg
cGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBj
b25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRNZXRlcihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IE1ldGVy
RXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJh
Y2soQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50U2xpZGVyVGh1bWIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9
IDA7Ci0KLSAgICAvLyBNZWRpYVBsYXllciAoYXVkaW8gYW5kIHZpZGVvIGVsZW1lbnRzKQotICAg
IHZpcnR1YWwgdm9pZCBwYWludE1lZGlhUGxheUJ1dHRvbihDYW52YXMqLCBNZWRpYVBsYXllclN0
YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlh
TXV0ZUJ1dHRvbihDYW52YXMqLCBNZWRpYVBsYXllclN0YXRlLCBjb25zdCBSZWN0JikgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwg
Y29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYVNlZWtG
b3J3YXJkQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X1RoZW1lRW5n
aW5lX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2lu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRo
ZW1lRW5naW5lLmNwcAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRmb3JtL25peC9z
cmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ODcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJEZWZhdWx0V2ViVGhlbWVFbmdpbmUuaCIKLQotI2luY2x1ZGUgInB1YmxpYy9Db2xv
ci5oIgotI2luY2x1ZGUgInB1YmxpYy9SZWN0LmgiCi0jaW5jbHVkZSAicHVibGljL1NpemUuaCIK
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KLSNpbmNsdWRl
IDxjbWF0aD4KLQotY29uc3QgZG91YmxlIEJHQ29sb3IxID0gMHhGNiAvIDI1NS4wOwotY29uc3Qg
ZG91YmxlIEJHQ29sb3IyID0gMHhERSAvIDI1NS4wOwotY29uc3QgZG91YmxlIEJvcmRlckNvbG9y
ID0gMHhBNCAvIDI1NS4wOwotY29uc3QgZG91YmxlIEJvcmRlck9uSG92ZXJDb2xvciA9IDB4N0Eg
LyAyNTUuMDsKLWNvbnN0IGRvdWJsZSBDaGVja0NvbG9yID0gMHg2NiAvIDI1NS4wOwotY29uc3Qg
ZG91YmxlIFRleHRGaWVsZERhcmtCb3JkZXJDb2xvciA9IDB4OUEgLyAyNTUuMDsKLWNvbnN0IGRv
dWJsZSBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yID0gMHhFRSAvIDI1NS4wOwotCi1jb25zdCBp
bnQgTWVudUxpc3RCb3JkZXIgPSA1OwotY29uc3QgaW50IE1lbnVMaXN0QXJyb3dTaXplID0gNjsK
LQotY29uc3QgaW50IElubmVyU3BpbkJ1dHRvbkJvcmRlciA9IDM7Ci1jb25zdCBpbnQgSW5uZXJT
cGluQnV0dG9uQXJyb3dTaXplID0gMjsKLQotY29uc3QgTml4OjpDb2xvciBUYXBIaWdoTGlnaHRD
b2xvcigweDY2MDAwMDAwKTsKLQotbmFtZXNwYWNlIE5peCB7Ci0KLUNvbG9yIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ29sb3I6OmJsdWU7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29s
b3I6OndoaXRlOwotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMTc2LCAx
NzYsIDE3Nik7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6YmxhY2s7
Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpOwotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBh
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKLX0KLQotQ29sb3IgRGVmYXVsdFdlYlRo
ZW1lRW5naW5lOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAotewotICAgIHJldHVybiBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwotfQot
Ci1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCk7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZl
VGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1
LCAxNTAsIDUwKTsgLy8gT3JhbmdlLgotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q29sb3IoMjU1LCAyNTUsIDApOyAvLyBZZWxsb3cuCi19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6Zm9jdXNSaW5nQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6Ymxh
Y2s7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6dGFwSGlnaGxpZ2h0Q29sb3Io
KSBjb25zdAotewotICAgIHJldHVybiBUYXBIaWdoTGlnaHRDb2xvcjsKLX0KLQotc3RhdGljIHZv
aWQgZ3JhZGllbnRGaWxsKGNhaXJvX3QqIGNhaXJvLCBkb3VibGUgeVN0YXJ0LCBkb3VibGUgeUxl
bmd0aCwgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQotewotICAgIGRvdWJsZSBncmFkU3RhcnRDb2xv
ciA9IEJHQ29sb3IxOwotICAgIGRvdWJsZSBncmFkRW5kQ29sb3IgPSBCR0NvbG9yMjsKLSAgICBp
ZiAoaW52ZXJ0ZWQpCi0gICAgICAgIHN0ZDo6c3dhcChncmFkU3RhcnRDb2xvciwgZ3JhZEVuZENv
bG9yKTsKLQotICAgIGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQgPSBjYWlyb19wYXR0ZXJuX2Ny
ZWF0ZV9saW5lYXIoMCwgeVN0YXJ0LCAwLCB5U3RhcnQgKyB5TGVuZ3RoKTsKLSAgICBjYWlyb19w
YXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYihncmFkaWVudCwgMCwgZ3JhZFN0YXJ0Q29sb3IsIGdy
YWRTdGFydENvbG9yLCBncmFkU3RhcnRDb2xvcik7Ci0gICAgY2Fpcm9fcGF0dGVybl9hZGRfY29s
b3Jfc3RvcF9yZ2IoZ3JhZGllbnQsIDEsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9yLCBncmFk
RW5kQ29sb3IpOwotICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm8sIGdyYWRpZW50KTsKLSAgICBj
YWlyb19maWxsKGNhaXJvKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3koZ3JhZGllbnQpOwot
fQotCi1zdGF0aWMgdm9pZCBzZXR1cEJvcmRlcihjYWlyb190ICogY2Fpcm8sIFRoZW1lRW5naW5l
OjpTdGF0ZSBzdGF0ZSkKLXsKLSAgICBkb3VibGUgYm9yZGVyQ29sb3IgPSBzdGF0ZSA9PSBUaGVt
ZUVuZ2luZTo6U3RhdGVIb3ZlciA/IEJvcmRlck9uSG92ZXJDb2xvciA6IEJvcmRlckNvbG9yOwot
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhaXJvLCBib3JkZXJDb2xvciwgYm9yZGVyQ29sb3Is
IGJvcmRlckNvbG9yKTsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYWlybywgMSk7Ci19Ci0K
LXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludEJ1dHRvbihDYW52YXMqIGNhbnZhcywg
U3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikg
Y29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0gICAgc2V0dXBCb3JkZXIoY2FudmFz
LCBzdGF0ZSk7Ci0gICAgLy8gQ2Fpcm8gdXNlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIG5vdCBiYXNl
ZCBvbiBwaXhlbCBjb29yZGluYXRlcywgc28KLSAgICAvLyB3ZSBuZWVkIHRvIGFkZCAgMC41IHRv
IHggYW5kIHkgY29vcmQgb3IgdGhlIGxpbmUgd2lsbCBzdGF5IGJldHdlZW4KLSAgICAvLyB0d28g
cGl4ZWxzIGluc3RlYWQgb2YgaW4gdGhlIG1pZGRsZSBvZiBhIHBpeGVsLgotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCBy
ZWN0LmhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAgICBn
cmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVBy
ZXNzZWQpOwotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OnBhaW50VGV4dEZpZWxkKENhbnZhcyogY2FudmFzLCBTdGF0ZSwgY29uc3Qg
UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0KLSAgICBjb25z
dCBkb3VibGUgbGluZVdpZHRoID0gMjsKLSAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvbiA9IGxp
bmVXaWR0aCAvIDIuMDsKLQotICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgbGluZVdp
ZHRoKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIFRleHRGaWVsZERhcmtCb3Jk
ZXJDb2xvciwgVGV4dEZpZWxkRGFya0JvcmRlckNvbG9yLCBUZXh0RmllbGREYXJrQm9yZGVyQ29s
b3IpOwotICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyBjb3JyZWN0aW9uLCByZWN0
LnkgKyBjb3JyZWN0aW9uICsgcmVjdC5oZWlnaHQpOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgMCwgLXJlY3QuaGVpZ2h0KTsKLSAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJl
Y3Qud2lkdGgsIDApOwotICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOwotCi0gICAgY2Fpcm9fc2V0
X3NvdXJjZV9yZ2IoY2FudmFzLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRM
aWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yKTsKLSAgICBjYWlyb19t
b3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgY29ycmVjdGlvbiArIHJlY3Qud2lkdGgsIHJlY3QueSAr
IGNvcnJlY3Rpb24pOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgMCwgcmVjdC5oZWln
aHQpOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLXJlY3Qud2lkdGgsIDApOwotICAg
IGNhaXJvX3N0cm9rZShjYW52YXMpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQot
Ci12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0QXJlYShDYW52YXMqIGNhbnZh
cywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgcGFpbnRUZXh0
RmllbGQoY2FudmFzLCBzdGF0ZSwgcmVjdCk7Ci19Ci0KLVNpemUgRGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpnZXRDaGVja2JveFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBTaXplKDEzLCAxMyk7
Ci19Ci0KLXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludENoZWNrYm94KENhbnZhcyog
Y2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQ
YXJhbXMmIHBhcmFtKSBjb25zdAotewotICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKLSAgICBzZXR1
cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0
LnggKyAwLjUsIHJlY3QueSArIDAuNSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwotICAgIGNh
aXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOwotCi0gICAgZ3JhZGllbnRGaWxsKGNhbnZhcywg
cmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKLQotICAgIGlmIChw
YXJhbS5jaGVja2VkKSB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBib3JkZXIgPSAzOwotICAgICAg
ICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52YXMsIDIpOwotICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOwotICAg
ICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0Lnkg
KyAwLjUgKyByZWN0LmhlaWdodCAtIGJvcmRlcik7Ci0gICAgICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgcmVjdC53aWR0aCAtIGJvcmRlciAqIDIsIC1yZWN0LmhlaWdodCArIGJvcmRlciAq
IDIpOwotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVy
LCByZWN0LnkgKyAwLjUgKyBib3JkZXIpOwotICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52
YXMsIHJlY3Qud2lkdGggLSBib3JkZXIgKiAyLCByZWN0LmhlaWdodCAtIGJvcmRlciAqIDIpOwot
ICAgICAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKLSAgICB9Ci0KLSAgICBjYWlyb19yZXN0b3Jl
KGNhbnZhcyk7Ci19Ci0KLVNpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUo
KSBjb25zdAotewotICAgIHJldHVybiBTaXplKDEzLCAxMyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludFJhZGlvKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29u
c3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAotewot
ICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKLSAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsK
LSAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCByZWN0Lnkg
KyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDIuMCwgMCwgMiAqIE1fUEkpOwotICAg
IGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOwotCi0gICAgZ3JhZGllbnRGaWxsKGNhbnZh
cywgcmVjdC55LCByZWN0LmhlaWdodCk7Ci0KLSAgICBpZiAocGFyYW0uY2hlY2tlZCkgewotICAg
ICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3Is
IENoZWNrQ29sb3IpOwotICAgICAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0Lndp
ZHRoIC8gMi4wLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDQuMCwg
MCwgMiAqIE1fUEkpOwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgfQotICAgIGNh
aXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6Omdl
dE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYg
cGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0Ci17Ci0gICAgcGFkZGluZ1Rv
cCA9IE1lbnVMaXN0Qm9yZGVyOwotICAgIHBhZGRpbmdMZWZ0ID0gTWVudUxpc3RCb3JkZXI7Ci0g
ICAgcGFkZGluZ0JvdHRvbSA9IE1lbnVMaXN0Qm9yZGVyOwotICAgIHBhZGRpbmdSaWdodCA9IDIg
KiBNZW51TGlzdEJvcmRlciArIE1lbnVMaXN0QXJyb3dTaXplOwotfQotCi12b2lkIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6cGFpbnRNZW51TGlzdChDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUs
IGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAg
IHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMs
IHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7Ci0g
ICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAgICBncmFkaWVudEZpbGwoY2Fu
dmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOwotCi0gICAg
Y2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBNZW51TGlzdEFycm93
U2l6ZSAtIE1lbnVMaXN0Qm9yZGVyLCByZWN0LnkgKyAxICsgcmVjdC5oZWlnaHQgLyAyIC0gTWVu
dUxpc3RBcnJvd1NpemUgLyAyKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENo
ZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOwotICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUpOwotICAgIGNh
aXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKLSAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0KLSAgICBj
YWlyb19yZXN0b3JlKGNhbnZhcyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpw
YWludFByb2dyZXNzQmFyKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYg
cmVjdCwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAotewotICAg
IGNhaXJvX3NhdmUoY2FudmFzKTsKLQotICAgIGlmIChwYXJhbXMuaXNEZXRlcm1pbmF0ZSkgewot
ICAgICAgICAvLyBCYWNrZ3JvdW5kCi0gICAgICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUp
OwotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53
aWR0aCwgcmVjdC5oZWlnaHQpOwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgICAg
IC8vIFByb2dyZXNzCi0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVj
dC55LCByZWN0LndpZHRoICogcGFyYW1zLnBvc2l0aW9uLCByZWN0LmhlaWdodCk7Ci0gICAgICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0Lndp
ZHRoLCByZWN0LmhlaWdodCk7Ci0gICAgICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwg
cmVjdC5oZWlnaHQsIHRydWUpOwotICAgIH0KLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyA9IDEwOwotc3Rh
dGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7Ci0KLWRv
dWJsZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoKSBjb25zdAotewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVy
dmFsOwotfQotCi1kb3VibGUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRp
b25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNr
IGFuZCBmb3J0aC4KLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldElubmVyU3Bp
bkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBh
ZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdAotewotICAgIHBhZGRpbmdUb3Ag
PSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7Ci0gICAgcGFkZGluZ0xlZnQgPSBJbm5lclNwaW5CdXR0
b25Cb3JkZXI7Ci0gICAgcGFkZGluZ0JvdHRvbSA9IElubmVyU3BpbkJ1dHRvbkJvcmRlcjsKLSAg
ICBwYWRkaW5nUmlnaHQgPSAyICogSW5uZXJTcGluQnV0dG9uQm9yZGVyICsgSW5uZXJTcGluQnV0
dG9uQXJyb3dTaXplOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRJbm5l
clNwaW5CdXR0b24oQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0
LCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNvbnN0Ci17Ci0gICAg
ZG91YmxlIHJlY3RIYWxmSGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyAyOwotCi0gICAgY2Fpcm9fc2F2
ZShjYW52YXMpOwotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMS41LCByZWN0LndpZHRoLCBy
ZWN0SGFsZkhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAg
ICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3RIYWxmSGVpZ2h0LCBzdGF0ZSA9PSBT
dGF0ZVByZXNzZWQgJiYgcGFyYW0uc3BpblVwKTsKLQotICAgIHNldHVwQm9yZGVyKGNhbnZhcywg
c3RhdGUpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55
ICsgMC41ICsgcmVjdEhhbGZIZWlnaHQsIHJlY3Qud2lkdGgsIHJlY3RIYWxmSGVpZ2h0KTsKLSAg
ICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKLQotICAgIGdyYWRpZW50RmlsbChjYW52
YXMsIHJlY3QueSArIHJlY3RIYWxmSGVpZ2h0LCByZWN0SGFsZkhlaWdodCwgc3RhdGUgPT0gU3Rh
dGVQcmVzc2VkICYmICFwYXJhbS5zcGluVXApOwotCi0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMs
IHJlY3QueCArIHJlY3Qud2lkdGggLSBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUgLSBJbm5lclNw
aW5CdXR0b25Cb3JkZXIgKiAyLCByZWN0LnkgKyByZWN0SGFsZkhlaWdodCArIHJlY3QuaGVpZ2h0
IC8gNCAtIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSArIDEuNSk7Ci0gICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKLSAg
ICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKLSAgICBj
YWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIE1lbnVMaXN0
QXJyb3dTaXplKTsKLSAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7Ci0KLSAgICBjYWlyb19t
b3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAtIElubmVyU3BpbkJ1dHRvbkFycm93
U2l6ZSAtIElubmVyU3BpbkJ1dHRvbkJvcmRlciAqIDIsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8g
NCArIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2Io
Y2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKLSAgICBjYWlyb19y
ZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKLSAgICBjYWlyb19yZWxf
bGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIC1NZW51TGlzdEFycm93U2l6
ZSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwotCi0gICAgY2Fpcm9fZmlsbChjYW52
YXMpOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZXRlcihDYW52YXMq
IGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IE1ldGVyRXh0cmFQ
YXJhbXMmIHBhcmFtcykgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0KLSAgICAv
LyBCYWNrZ3JvdW5kLgotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJv
X3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdo
dCk7Ci0gICAgY2Fpcm9fZmlsbChjYW52YXMpOwotICAgIC8vIE1ldGVyLgotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoICogcGFyYW1zLnZhbHVl
UmF0aW8oKSwgcmVjdC5oZWlnaHQpOwotICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwg
cmVjdC5oZWlnaHQpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi1jb25zdCBp
bnQgU2xpZGVyVHJhY2tIZWlnaHQgPSA2OwotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
cGFpbnRTbGlkZXJUcmFjayhDYW52YXMqIGNhbnZhcywgU3RhdGUsIGNvbnN0IFJlY3QmIHJlY3Qp
IGNvbnN0Ci17Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAgIGNhaXJvX3JlY3RhbmdsZShj
YW52YXMsIHJlY3QueCwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0IC0gU2xpZGVyVHJhY2tIZWlnaHQp
IC8gMi4wLCByZWN0LndpZHRoLCBTbGlkZXJUcmFja0hlaWdodCk7Ci0gICAgZ3JhZGllbnRGaWxs
KGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgdHJ1ZSk7Ci0gICAgY2Fpcm9fcmVzdG9yZShj
YW52YXMpOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUaHVt
YihDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUp
OwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRo
LCByZWN0LmhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0gICAg
Z3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQ
cmVzc2VkKTsKLSAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludE1lZGlhUGxheUJ1dHRvbihDYW52YXMqIGNhbnZhcywgTWVkaWFQ
bGF5ZXJTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19z
YXZlKGNhbnZhcyk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsK
LSAgICBpZiAoc3RhdGUgPT0gU3RhdGVQYXVzZWQpIHsKLSAgICAgICAgY2Fpcm9fbW92ZV90byhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC4yNSkpOwotICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjc1KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41KSk7Ci0gICAgICAgIGNh
aXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzUpKTsKLSAgICAgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMp
OwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgfSBlbHNlIHsgLy8gSWYgc3RhdGUg
aXMgU3RhdGVQbGF5aW5nLgotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0Lngg
KyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjUpLCAocmVj
dC53aWR0aCAqIDAuMTUpLCAocmVjdC5oZWlnaHQgKiAwLjUpKTsKLSAgICAgICAgY2Fpcm9fZmls
bChjYW52YXMpOwotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNTUpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI1KSwgKHJlY3Qud2lk
dGggKiAwLjE1KSwgKHJlY3QuaGVpZ2h0ICogMC41KSk7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY2Fu
dmFzKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi12b2lkIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiBjYW52YXMsIE1l
ZGlhUGxheWVyU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fp
cm9fc2F2ZShjYW52YXMpOwotICAgIGlmIChzdGF0ZSA9PSBTdGF0ZU11dGVkKSB7Ci0gICAgICAg
IGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgMSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3Vy
Y2VfcmdiKGNhbnZhcywgMTM5LCAwLCAwKTsKLQotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC42NykpOwotICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjg3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zNCkpOwotICAgICAgICBjYWly
b19zdHJva2UoY2FudmFzKTsKLQotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjg3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC42NykpOwot
ICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU5
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zNCkpOwotICAgICAgICBjYWlyb19zdHJva2Uo
Y2FudmFzKTsKLSAgICB9IGVsc2UgeyAvLyBJZiBzdGF0ZSBpcyBTdGF0ZU5vdE11dGVkCi0gICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgNSk7Ci0gICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7Ci0KLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywg
cmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUp
LCByZWN0LndpZHRoICogMC4zNCwgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAg
IGNhaXJvX2ZpbGwoY2FudmFzKTsKLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0Lndp
ZHRoICogMC40NSwgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAgIGNhaXJvX2Zp
bGwoY2FudmFzKTsKLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0LndpZHRoICogMC41
NywgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY2FudmFz
KTsKLSAgICB9Ci0KLSAgICAvLyBTcGVha2VyCi0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMTgp
KTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjI5
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zOCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2Fu
dmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMDgpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQg
KiAwLjM4KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRo
ICogMC4wOCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNjIpKTsKLSAgICBjYWlyb19saW5l
X3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjI5KSwgcmVjdC55ICsgKHJlY3Qu
aGVpZ2h0ICogMC42MikpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjgyKSk7Ci0gICAgY2Fp
cm9fY2xvc2VfcGF0aChjYW52YXMpOwotICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKLQotICAgIGNh
aXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBh
aW50TWVkaWFTZWVrQmFja0J1dHRvbihDYW52YXMqIGNhbnZhcywgY29uc3QgUmVjdCYgcmVjdCkg
Y29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2IoY2FudmFzLCAxLCAxLCAxKTsKLSAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjkwKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOwotICAg
IGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCByZWN0
LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzAp
KTsKLQotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAu
MjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fpcm9fbGluZV90byhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdo
dCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjExKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOwotICAgIGNhaXJvX2xp
bmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTEpLCByZWN0LnkgKyAocmVj
dC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChy
ZWN0LndpZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAgICBj
YWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjIzKSwgcmVjdC55
ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotCi0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkp
KTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU4
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2Fu
dmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuOTApLCByZWN0LnkgKyAocmVjdC5oZWlnaHQg
KiAwLjI5KSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwotICAgIGNhaXJvX2ZpbGwo
Y2FudmFzKTsKLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihDYW52YXMqIGNhbnZh
cywgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0g
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsKLSAgICBjYWlyb19tb3Zl
X3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjEwKSwgcmVjdC55ICsgKHJlY3Qu
aGVpZ2h0ICogMC43MCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNDIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzApKTsKLQotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0
LnggKyAocmVjdC53aWR0aCAqIDAuNzcpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7
Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43Nyks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjg5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC43MCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuODkpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43NyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuMjkpKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjc3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotCi0gICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjQyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwot
ICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTApLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52
YXMpOwotICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFz
KTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFSZXdpbmRCdXR0
b24oQ2FudmFzKiBjYW52YXMsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fpcm9f
c2F2ZShjYW52YXMpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7
Ci0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NCks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC41MSkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuNTIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7Ci0gICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4xNyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuNTApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOwotICAgIGNhaXJv
X2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAo
cmVjdC5oZWlnaHQgKiAwLjQ4KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCAr
IChyZWN0LndpZHRoICogMC44NCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAg
ICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7Ci0gICAgY2Fpcm9fZmlsbChjYW52YXMpOwotCi0g
ICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi19CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0v
bml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxh
dGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIERlZmF1bHRXZWJUaGVtZUVuZ2luZV9oCi0jZGVmaW5lIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZV9oCi0KLSNpbmNsdWRlICJwdWJsaWMvVGhlbWVFbmdpbmUuaCIKLQotbmFtZXNwYWNlIE5peCB7
Ci0KLWNsYXNzIERlZmF1bHRXZWJUaGVtZUVuZ2luZSBGSU5BTCA6IHB1YmxpYyBUaGVtZUVuZ2lu
ZSB7Ci1wdWJsaWM6Ci0gICAgLy8gVGV4dCBzZWxlY3Rpb24gY29sb3JzLgotICAgIHZpcnR1YWwg
Q29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gTGlzdCBib3ggc2Vs
ZWN0aW9uIGNvbG9ycwotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgQ29sb3IgYWN0
aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURF
OwotCi0gICAgdmlydHVhbCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCBDb2xvciB0YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0
JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUZXh0RmllbGQoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0QXJlYShDYW52YXMqLCBTdGF0ZSwg
Y29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU2l6ZSBnZXRDaGVja2Jv
eFNpemUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChD
YW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJhZGlvKENhbnZhcyosIFN0YXRlLCBjb25zdCBS
ZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRNZW51TGlzdChDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFJlY3QgJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBh
ZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRk
aW5nUmlnaHQpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNz
QmFyKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBh
cmFtcyYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGRvdWJsZSBnZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyAqLCBTdGF0
ZSwgY29uc3QgUmVjdCAmLCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGlu
dCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQm
IHBhZGRpbmdSaWdodCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWV0
ZXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soQ2FudmFz
KiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTbGlkZXJUaHVtYihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJS
SURFOwotCi0gICAgLy8gTWVkaWEgUGxheWVyCi0gICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFQ
bGF5QnV0dG9uKENhbnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiwg
TWVkaWFQbGF5ZXJTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBwYWludE1lZGlhUmV3aW5kQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVS
UklERTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gRGVmYXVsdFdlYlRo
ZW1lRW5naW5lX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9QbGF0Zm9ybS5jcHAJKHJldmlz
aW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwdWJsaWMvUGxhdGZvcm0uaCIKLQotI2luY2x1
ZGUgIkRlZmF1bHRXZWJUaGVtZUVuZ2luZS5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotc3RhdGlj
IFBsYXRmb3JtKiBzX3BsYXRmb3JtOwotCi12b2lkIFBsYXRmb3JtOjppbml0aWFsaXplKFBsYXRm
b3JtKiBwbGF0Zm9ybSkKLXsKLSAgICBzX3BsYXRmb3JtID0gcGxhdGZvcm07Ci19Ci0KLVBsYXRm
b3JtKiBQbGF0Zm9ybTo6Y3VycmVudCgpCi17Ci0gICAgc3RhdGljIFBsYXRmb3JtIGVtcHR5UGxh
dGZvcm07Ci0gICAgcmV0dXJuIHNfcGxhdGZvcm0gPyBzX3BsYXRmb3JtIDogJmVtcHR5UGxhdGZv
cm07Ci19Ci0KLVRoZW1lRW5naW5lKiBQbGF0Zm9ybTo6dGhlbWVFbmdpbmUoKQotewotICAgIHN0
YXRpYyBEZWZhdWx0V2ViVGhlbWVFbmdpbmUgdGhlbWU7Ci0gICAgcmV0dXJuICZ0aGVtZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgTml4CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9B
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9BdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgTml4X0F1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCi0jZGVmaW5lIE5peF9B
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJfaAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBBdWRpb0Rlc3RpbmF0aW9uQ29u
c3VtZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcigp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cywgZmxvYXQgc2FtcGxlUmF0ZSkgPSAwOwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIHZlY3Rv
ciBpcyB0aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLCBhbmQgbnVtYmVyT2ZGcmFtZXMgaXMg
dGhlCi0gICAgLy8gbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBpbiB0aGUgKHBvc3NpYmx5IG11bHRp
LWNoYW5uZWwpIGJ1ZmZlciBpbiBhIHBsYW5hciBmb3JtYXQuCi0gICAgdmlydHVhbCB2b2lkIGNv
bnN1bWVBdWRpbyhjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBmbG9hdCo+JiBwY21EYXRhLCBzaXpl
X3QgbnVtYmVyT2ZGcmFtZXMpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5k
aWYgLy8gTml4X0F1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X0F1ZGlvRGV2aWNlX2gKLSNkZWZp
bmUgTml4X0F1ZGlvRGV2aWNlX2gKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8dmVj
dG9yPgotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgQXVkaW9EZXZpY2UgewotcHVibGljOgot
ICAgIGNsYXNzIFJlbmRlckNhbGxiYWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCByZW5kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgLypzb3VyY2VEYXRhKi8sIGNv
bnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIC8qZGVzdGluYXRpb25EYXRhKi8sIHNpemVfdCAvKm51
bWJlck9mRnJhbWVzKi8pID0gMDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCB+
UmVuZGVyQ2FsbGJhY2soKSB7IH0KLSAgICB9OwotCi0gICAgdmlydHVhbCB+QXVkaW9EZXZpY2Uo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVSYXRlKCkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBOaXhfQXVkaW9EZXZpY2VfaApJbmRleDog
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTml4X0NhbnZhc19oCi0jZGVm
aW5lIE5peF9DYW52YXNfaAotCi0jaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KLQotbmFtZXNwYWNl
IE5peCB7Ci0KLXR5cGVkZWYgY2Fpcm9fdCBDYW52YXM7Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAot
Ci0jZW5kaWYgLy8gTml4X0NhbnZhc19oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbG9y
LmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBOaXhfQ29sb3JfaAotI2RlZmluZSBOaXhfQ29sb3Jf
aAotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLW5hbWVzcGFj
ZSBOaXggewotCi1jbGFzcyBDb2xvciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB1X2ludDMyX3Qg
QVJHQjMyOyAvLyBBUkdCIHF1YWRydXBsZXQKLQotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgYmxh
Y2sgPSAweEZGMDAwMDAwOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgd2hpdGUgPSAweEZGRkZG
RkZGOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgcmVkID0gMHhGRkZGMDAwMDsKLSAgICBzdGF0
aWMgY29uc3QgQVJHQjMyIGdyZWVuID0gMHhGRjAwRkYwMDsKLSAgICBzdGF0aWMgY29uc3QgQVJH
QjMyIGJsdWUgPSAweEZGMDAwMEZGOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZGFya0dyYXkg
PSAweEZGODA4MDgwOwotICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZ3JheSA9IDB4RkZBMEEwQTA7
Ci0gICAgc3RhdGljIGNvbnN0IEFSR0IzMiBsaWdodEdyYXkgPSAweEZGQzBDMEMwOwotICAgIHN0
YXRpYyBjb25zdCBBUkdCMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOwotCi0gICAgQ29sb3Io
QVJHQjMyIHJnYmEpCi0gICAgICAgIDogbV9hcmdiKHJnYmEpCi0gICAgewotICAgIH0KLQotICAg
IENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhID0gMjU1KQotICAgICAgICA6IG1fYXJn
Yihib3VuZFZhbHVlKGEpIDw8IDI0IHwgYm91bmRWYWx1ZShyKSA8PCAxNiB8IGJvdW5kVmFsdWUo
ZykgPDwgOCB8IGJvdW5kVmFsdWUoYikpCi0gICAgewotICAgIH0KLQotICAgIG9wZXJhdG9yIEFS
R0IzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmdiOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGNoYXIgcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKG1fYXJnYiAm
IDB4MDBGRjAwMDApID4+IDE2OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gKG1fYXJnYiAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgY2hhciBiKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAo
bV9hcmdiICYgMHgwMDAwMDBGRik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciBhKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAobV9hcmdiICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0g
ICAgfQotCi0gICAgQVJHQjMyIGFyZ2IzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9hcmdiOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgb3RoZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmdiID09IG90aGVyLm1fYXJnYjsKLSAgICB9Ci0K
LSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYXJnYiAhPSBvdGhlci5tX2FyZ2I7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFS
R0IzMiBtX2FyZ2I7Ci0gICAgc3RhdGljIGlubGluZSBBUkdCMzIgYm91bmRWYWx1ZShpbnQgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4odmFsdWUsIDI1
NSkpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X0Nv
bG9yX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCShyZXZpc2lvbiAxNjIx
NDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Db21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4
X0NvbW1vbl9oCi0jZGVmaW5lIE5peF9Db21tb25faAotCi0jZGVmaW5lIE5JWF9FWFBPUlQgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotI2luY2x1ZGUgPHN0ZGRlZi5o
PiAvLyBGb3Igc2l6ZV90LgotCi0jZW5kaWYgLy8gTml4X0NvbW1vbl9oCkluZGV4OiBTb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0ZGVEZyYW1lLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9Q
bGF0Zm9ybS9uaXgvcHVibGljL0ZGVEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBOaXhfRkZURnJhbWVfaAotI2Rl
ZmluZSBOaXhfRkZURnJhbWVfaAotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgRkZURnJhbWUg
ewotcHVibGljOgotICAgIEZGVEZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB+RkZURnJhbWUoKSB7
IH0KLQotICAgIHZpcnR1YWwgRkZURnJhbWUqIGNvcHkoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZG9GRlQoY29uc3QgZmxvYXQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvSW52
ZXJzZUZGVChmbG9hdCopID0gMDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgZnJlcXVlbmN5RG9t
YWluU2FtcGxlQ291bnQoKSBjb25zdCA9IDA7Ci0gICAgLy8gQWZ0ZXIgbXVsdGlwbGljYXRpb24g
YW5kIHRyYW5zZm9ybSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyBzY2FsZWQKLSAgICAvLyB0byB0
YWtlIGluIGFjY291bnQgdGhlIHNjYWxlIHVzZWQgaW50ZXJuYWxseSBpbiBXZWJLaXQsIG9yaWdp
bmFsbHkKLSAgICAvLyBmcm9tIE1hYydzIHZlY0xpYi4KLSAgICAvLyBBZnRlciBtdWx0aXBsaWNh
dGlvbjogUGxhbmFyIGRhdGEgaXMgc2NhbGVkIGJ5IDAuNS4KLSAgICAvLyBBZnRlciBkaXJlY3Qg
dHJhbnNmb3JtOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkgMi4wLgotICAgIC8vIEFmdGVyIGlu
dmVyc2UgdHJhbnNmb3JtOiBUaW1lIGRvbWFpbiBkYXRhIGlzIHNjYWxlZCBieSAxLjAvKDIqIEZG
VCBzaXplKS4KLSAgICB2aXJ0dWFsIGZsb2F0KiByZWFsRGF0YSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGZsb2F0KiBpbWFnRGF0YSgpIGNvbnN0ID0gMDsKLXByaXZhdGU6Ci0gICAgRkZURnJh
bWUoY29uc3QgRkZURnJhbWUmKTsKLSAgICBGRlRGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IEZGVEZy
YW1lJik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9GRlRGcmFt
ZV9oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvR2FtZXBhZC5oCShyZXZpc2lvbiAxNjIx
NDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4
X0dhbWVwYWRfaAotI2RlZmluZSBOaXhfR2FtZXBhZF9oCi0KLSNpbmNsdWRlICJDb21tb24uaCIK
LQotbmFtZXNwYWNlIE5peCB7Ci0KLWNsYXNzIEdhbWVwYWQgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgaWRMZW5ndGhDYXAgPSAxMjg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBheGVzTGVuZ3RoQ2FwID0gMTY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBidXR0b25zTGVu
Z3RoQ2FwID0gMzI7Ci0KLSAgICBHYW1lcGFkKCkKLSAgICAgICAgOiBjb25uZWN0ZWQoZmFsc2Up
Ci0gICAgICAgICwgdGltZXN0YW1wKDApCi0gICAgICAgICwgYXhlc0xlbmd0aCgwKQotICAgICAg
ICAsIGJ1dHRvbnNMZW5ndGgoMCkKLSAgICB7Ci0gICAgICAgIGlkWzBdID0gMDsKLSAgICB9Ci0K
LSAgICAvLyBJcyB0aGVyZSBhIGdhbWVwYWQgY29ubmVjdGVkIGF0IHRoaXMgaW5kZXg/Ci0gICAg
Ym9vbCBjb25uZWN0ZWQ7Ci0KLSAgICAvLyBEZXZpY2UgaWRlbnRpZmllciAoYmFzZWQgb24gbWFu
dWZhY3R1cmVyLCBtb2RlbCwgZXRjLikuCi0gICAgY2hhciBpZFtpZExlbmd0aENhcF07Ci0KLSAg
ICAvLyBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdmFsdWUgcmVmZXJyaW5nIHRvIHdoZW4gdGhl
IGRhdGEgd2VyZSBsYXN0Ci0gICAgLy8gdXBkYXRlZC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg
dGltZXN0YW1wOwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGF4ZXMg
YXJyYXkuCi0gICAgdW5zaWduZWQgYXhlc0xlbmd0aDsKLQotICAgIC8vIE5vcm1hbGl6ZWQgdmFs
dWVzIHJlcHJlc2VudGluZyBheGVzLCBpbiB0aGUgcmFuZ2UgWy0xLi4xXS4KLSAgICBmbG9hdCBh
eGVzW2F4ZXNMZW5ndGhDYXBdOwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4g
dGhlIGJ1dHRvbnMgYXJyYXkuCi0gICAgdW5zaWduZWQgYnV0dG9uc0xlbmd0aDsKLQotICAgIC8v
IE5vcm1hbGl6ZWQgdmFsdWVzIHJlcHJlc2VudGluZyBidXR0b25zLCBpbiB0aGUgcmFuZ2UgWzAu
LjFdLgotICAgIGZsb2F0IGJ1dHRvbnNbYnV0dG9uc0xlbmd0aENhcF07Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9HYW1lcGFkX2gKSW5kZXg6IFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0dhbWVwYWRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvR2FtZXBhZHMuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvR2FtZXBhZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfR2FtZXBhZHNfaAotI2RlZmlu
ZSBOaXhfR2FtZXBhZHNfaAotCi0jaW5jbHVkZSAiR2FtZXBhZC5oIgotCi1uYW1lc3BhY2UgTml4
IHsKLQotY2xhc3MgR2FtZXBhZHMgewotcHVibGljOgotICAgIEdhbWVwYWRzKCkKLSAgICAgICAg
OiBsZW5ndGgoMCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaXRlbXNMZW5n
dGhDYXAgPSA0OwotCi0gICAgLy8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGl0ZW1z
IGFycmF5LgotICAgIHVuc2lnbmVkIGxlbmd0aDsKLQotICAgIC8vIEdhbWVwYWQgZGF0YSBmb3Ig
TiBzZXBhcmF0ZSBnYW1lcGFkIGRldmljZXMuCi0gICAgR2FtZXBhZCBpdGVtc1tpdGVtc0xlbmd0
aENhcF07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9HYW1lcGFk
c19oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYUNvbnN0cmFpbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTWVkaWFDb25zdHJhaW50
cy5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRp
YUNvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X01lZGlhQ29uc3RyYWludHNf
aAotI2RlZmluZSBOaXhfTWVkaWFDb25zdHJhaW50c19oCi0KLSNpbmNsdWRlICJDb21tb24uaCIK
LSNpbmNsdWRlICJQcml2YXRlUHRyLmgiCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVj
dCBNZWRpYUNvbnN0cmFpbnQ7Ci1jbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwotfQotCi1uYW1lc3Bh
Y2UgTml4IHsKLQotc3RydWN0IE1lZGlhQ29uc3RyYWludCB7Ci0gICAgTWVkaWFDb25zdHJhaW50
KCkKLSAgICB7Ci0gICAgfQotCi0gICAgTWVkaWFDb25zdHJhaW50KHN0ZDo6c3RyaW5nIG5hbWUs
IHN0ZDo6c3RyaW5nIHZhbHVlKQotICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIG1fbmFtZTsKLSAg
ICBzdGQ6OnN0cmluZyBtX3ZhbHVlOwotfTsKLQotY2xhc3MgTWVkaWFDb25zdHJhaW50cyB7Ci1w
dWJsaWM6Ci0gICAgTWVkaWFDb25zdHJhaW50cygpIHsgfQotICAgIH5NZWRpYUNvbnN0cmFpbnRz
KCkgeyByZXNldCgpOyB9Ci0KLSAgICB2b2lkIGFzc2lnbihjb25zdCBNZWRpYUNvbnN0cmFpbnRz
Jik7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgTklYX0VYUE9SVCBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0gICAgTklYX0VYUE9SVCB2b2lk
IGdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKHN0ZDo6dmVjdG9yPE1lZGlhQ29uc3RyYWludD4mKSBj
b25zdDsKLSAgICBOSVhfRVhQT1JUIHZvaWQgZ2V0T3B0aW9uYWxDb25zdHJhaW50cyhzdGQ6OnZl
Y3RvcjxNZWRpYUNvbnN0cmFpbnQ+JikgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIGJvb2wgZ2V0
TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6c3RyaW5nJiB2
YWx1ZSkgY29uc3Q7Ci0gICAgTklYX0VYUE9SVCBib29sIGdldE9wdGlvbmFsQ29uc3RyYWludFZh
bHVlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6c3RyaW5nJiB2YWx1ZSkgY29uc3Q7Ci0KLSNpZmRl
ZiBCVUlMRElOR19OSVhfXwotICAgIE1lZGlhQ29uc3RyYWludHMoY29uc3QgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHM+Jik7Ci0gICAgTWVkaWFDb25zdHJhaW50cyhX
ZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzKik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBQcml2
YXRlUHRyPFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHM+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X01lZGlhQ29uc3RyYWludHNfaAotCkluZGV4
OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDE2MjE0
MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhUGxheWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IE5peF9NZWRpYVBsYXllcgotI2RlZmluZSBOaXhfTWVkaWFQbGF5ZXIKLQotI2luY2x1ZGUgPG1l
bW9yeT4KLQotbmFtZXNwYWNlIE5peCB7Ci0KLWNsYXNzIE1lZGlhUGxheWVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBlbnVtIFJlYWR5U3RhdGUgIHsgSGF2ZU5vdGhpbmcsIEhhdmVNZXRhZGF0YSwg
SGF2ZUN1cnJlbnREYXRhLCBIYXZlRnV0dXJlRGF0YSwgSGF2ZUVub3VnaERhdGEgfTsKLSAgICBl
bnVtIE5ldHdvcmtTdGF0ZSB7IEVtcHR5LCBJZGxlLCBMb2FkaW5nLCBMb2FkZWQsIEZvcm1hdEVy
cm9yLCBOZXR3b3JrRXJyb3IsIERlY29kZUVycm9yIH07Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYVBs
YXllckNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnJlbnRUaW1lQ2hhbmdlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoUmVhZHlTdGF0ZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkKE5ldHdvcmtTdGF0ZSkgPSAwOwotfTsK
LQotY2xhc3MgTWVkaWFQbGF5ZXIgewotcHVibGljOgotICAgIC8vIERlcml2YXRlZCBjbGFzc2Vz
IHNob3VsZG4ndCBkbyBhbnkgam9iIG9uIGNvbnN0cnVjdG9yLCBNZWRpYVBsYXllcnMgY291bGQg
YmUKLSAgICAvLyBjcmVhdGVkIGZvciBwcm9iaW5nIHB1cnBvc2VzIHdpdGggYSBudWxsIGNsaWVu
dC4KLSAgICBNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQotICAgICAgICA6
IG1fcGxheWVyQ2xpZW50KGNsaWVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+TWVk
aWFQbGF5ZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBwYXVzZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgPSAwOwot
ICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9h
dCBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZs
b2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZChjb25zdCBjaGFyKiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2Vl
a2luZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJhY2tSYXRlKGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXllckNsaWVudD4gbV9wbGF5ZXJDbGllbnQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9NZWRpYVBsYXllcl9oCklu
ZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtLmgJKHJldmlzaW9uIDE2
MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgTml4X01lZGlhU3RyZWFtX2gKLSNkZWZpbmUgTml4X01lZGlhU3RyZWFtX2gKLQotI2lu
Y2x1ZGUgIkNvbW1vbi5oIgotI2luY2x1ZGUgIlByaXZhdGVQdHIuaCIKLQotI2luY2x1ZGUgPGNz
dGRkZWY+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBN
ZWRpYVN0cmVhbVByaXZhdGU7Ci19Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBNZWRpYVN0
cmVhbVNvdXJjZTsKLWNsYXNzIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U7Ci0KLWNsYXNzIE1lZGlh
U3RyZWFtIHsKLXB1YmxpYzoKLSAgICBNZWRpYVN0cmVhbSgpIHsgfQotICAgIE1lZGlhU3RyZWFt
KGNvbnN0IE1lZGlhU3RyZWFtJiBvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9Ci0gICAgfk1lZGlh
U3RyZWFtKCkgeyByZXNldCgpOyB9Ci0KLSAgICBNZWRpYVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0
IE1lZGlhU3RyZWFtJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNv
bnN0IE1lZGlhU3RyZWFtJik7Ci0KLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIE1lZGlh
U3RyZWFtU291cmNlKiBwb2ludGVycywgZGVsZXRpbmcgdGhlbS4KLSAgICBOSVhfRVhQT1JUIHZv
aWQgaW5pdGlhbGl6ZShzdGQ6OnZlY3RvcjxNZWRpYVN0cmVhbVNvdXJjZSo+JiBhdWRpb1RyYWNr
cywgc3RkOjp2ZWN0b3I8TWVkaWFTdHJlYW1Tb3VyY2UqPiYgdmlkZW9UcmFja3MpOwotCi0gICAg
TklYX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgTklYX0VYUE9SVCBib29sIGlzTnVsbCgpIGNv
bnN0OwotCi0KLSAgICBOSVhfRVhQT1JUIGNvbnN0IGNoYXIqIGlkKCkgY29uc3Q7Ci0KLSAgICAv
LyBDYWxsZXIgbXVzdCBkZWxldGUgdGhlIHJldHVybmVkIE1lZGlhU3RyZWFtU291cmNlKgotICAg
IE5JWF9FWFBPUlQgc3RkOjp2ZWN0b3I8TWVkaWFTdHJlYW1Tb3VyY2UqPiBhdWRpb1NvdXJjZXMo
KSBjb25zdDsKLSAgICBOSVhfRVhQT1JUIHN0ZDo6dmVjdG9yPE1lZGlhU3RyZWFtU291cmNlKj4g
dmlkZW9Tb3VyY2VzKCkgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgYWRkU291cmNlKGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlJik7Ci0gICAgTklYX0VYUE9SVCB2b2lkIHJlbW92ZVNvdXJj
ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZSYpOwotCi0jaWYgQlVJTERJTkdfTklYX18KLSAgICBN
ZWRpYVN0cmVhbShXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGUqKTsKLSAgICBNZWRpYVN0cmVh
bShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlPiYpOwot
ICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGU+
KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlKigpIGNv
bnN0OwotICAgIE1lZGlhU3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZT4mKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFBy
aXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3ByaXZhdGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9NZWRpYVN0cmVhbV9oCi0KSW5kZXg6
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbUF1ZGlvU291
cmNlLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1BdWRpb1NvdXJjZV9oCi0K
LSNpbmNsdWRlICJDb21tb24uaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbUF1ZGlvU291cmNlOwotfQotCi1u
YW1lc3BhY2UgTml4IHsKLWNsYXNzIEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcjsKLQotY2xhc3Mg
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZSA6IHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZSB7Ci1wdWJs
aWM6Ci0gICAgTklYX0VYUE9SVCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlKCk7Ci0gICAgTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZShjb25zdCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvdGhlcikgOiBN
ZWRpYVN0cmVhbVNvdXJjZShvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9Ci0gICAgfk1lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2UoKSB7IHJlc2V0KCk7IH0KLQotICAgIE1lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2UmIG9wZXJhdG9yPShjb25zdCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0K
LSAgICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2Um
KTsKLQotICAgIE5JWF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Ci0KLSAgICBOSVhfRVhQT1JUIGNvbnN0
IGNoYXIqIGRldmljZUlkKCkgY29uc3Q7Ci0gICAgTklYX0VYUE9SVCB2b2lkIHNldERldmljZUlk
KGNvbnN0IGNoYXIqKTsKLQotICAgIC8vIFRoZSBOaXg6OkF1ZGlvRGVzdGluYXRpb25Db25zdW1l
ciBpcyBub3Qgb3duZWQsIGFuZCBoYXMgdG8gYmUgZGlzcG9zZWQgb2Ygc2VwYXJhdGVseQotICAg
IC8vIGFmdGVyIGNhbGxpbmcgcmVtb3ZlQXVkaW9Db25zdW1lci4KLSAgICBOSVhfRVhQT1JUIHZv
aWQgYWRkQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqKTsKLSAgICBOSVhf
RVhQT1JUIGJvb2wgcmVtb3ZlQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIq
KTsKLQotI2lmIEJVSUxESU5HX05JWF9fCi0gICAgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZT4mKTsKLSAg
ICBNZWRpYVN0cmVhbUF1ZGlvU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1B
dWRpb1NvdXJjZSopOwotICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRp
YVN0cmVhbUF1ZGlvU291cmNlPigpIGNvbnN0OwotICAgIG9wZXJhdG9yIFdlYkNvcmU6Ok1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2UqKCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFdlYkNvcmU6Ok1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2UqIHRvV2ViQ29yZUF1ZGlvU291cmNlKCkgY29uc3Q7Ci0jZW5kaWYK
LQotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBOaXhfTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZV9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhU3Ry
ZWFtQ2VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTWVk
aWFTdHJlYW1DZW50ZXIuaAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvTWVkaWFTdHJlYW1DZW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfTWVkaWFTdHJlYW1D
ZW50ZXJfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1DZW50ZXJfaAotCi0jaW5jbHVkZSAiQ29t
bW9uLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBNZWRpYVN0cmVhbUNlbnRlcjsKLX0KLQotbmFtZXNwYWNlIE5peCB7Ci1jbGFzcyBNZWRp
YVN0cmVhbTsKLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlOwotY2xhc3MgTWVkaWFDb25zdHJhaW50
czsKLQotY2xhc3MgTklYX0VYUE9SVCBNZWRpYVN0cmVhbUNlbnRlciB7Ci1wdWJsaWM6Ci0gICAg
TWVkaWFTdHJlYW1DZW50ZXIoKTsKLSAgICB2b2lkIHJlcXVlc3QoKTsKLSAgICAvLyBSZXR1cm4g
dGhlIG5hbWUgb2YgdGhlIGZhaWxlZCBjb25zdHJhaW50LiAwIGlmIHN1Y2Nlc3NmdWwuCi0gICAg
dmlydHVhbCBjb25zdCBjaGFyKiB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhNZWRpYUNvbnN0
cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0NvbnN0cmFp
bnRzKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRpYVN0cmVhbSBjcmVhdGVNZWRpYVN0cmVhbShNZWRp
YUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0Nv
bnN0cmFpbnRzKSA9IDA7Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8g
Tml4X01lZGlhU3RyZWFtQ2VudGVyX2gKLQpJbmRleDogU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvTWVkaWFTdHJlYW1Tb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9NZWRpYVN0cmVhbVNvdXJjZS5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOaXhfTWVkaWFTdHJlYW1Tb3VyY2VfaAotI2RlZmluZSBOaXhfTWVkaWFTdHJlYW1Tb3Vy
Y2VfaAotCi0jaW5jbHVkZSAiQ29tbW9uLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZVB0ci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKLX0KLQotbmFtZXNw
YWNlIE5peCB7Ci0KLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlIHsKLXB1YmxpYzoKLQotICAgIGVu
dW0gVHlwZSB7Ci0gICAgICAgIEF1ZGlvLAotICAgICAgICBWaWRlbwotICAgIH07Ci0KLSAgICBl
bnVtIFJlYWR5U3RhdGUgewotICAgICAgICBSZWFkeVN0YXRlTGl2ZSA9IDAsCi0gICAgICAgIFJl
YWR5U3RhdGVNdXRlZCA9IDEsCi0gICAgICAgIFJlYWR5U3RhdGVFbmRlZCA9IDIKLSAgICB9Owot
Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2UoKSB7IH0KLSAgICBNZWRpYVN0cmVhbVNvdXJjZShjb25z
dCBNZWRpYVN0cmVhbVNvdXJjZSYgb3RoZXIpIHsgYXNzaWduKG90aGVyKTsgfQotICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtU291cmNlKCkgeyByZXNldCgpOyB9Ci0KLSAgICBNZWRpYVN0cmVhbVNv
dXJjZSYgb3BlcmF0b3I9KGNvbnN0IE1lZGlhU3RyZWFtU291cmNlJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIGFzc2lnbihvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAg
ICBOSVhfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlJik7Ci0KLSAg
ICBOSVhfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0gICAgTklYX0VYUE9SVCBjb25zdCBjaGFyKiBp
ZCgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgVHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgTklYX0VY
UE9SVCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Q7Ci0KLSAgICBOSVhfRVhQT1JUIHZvaWQgc2V0
UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKLSAgICBOSVhfRVhQT1JUIFJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0OwotCi0gICAgTklYX0VYUE9SVCBib29sIGVuYWJsZWQoKSBjb25zdDsKLSAg
ICBOSVhfRVhQT1JUIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLQotICAgIE5JWF9FWFBPUlQgYm9v
bCBtdXRlZCgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgdm9pZCBzZXRNdXRlZChib29sKTsKLQot
ICAgIE5JWF9FWFBPUlQgYm9vbCByZWFkb25seSgpIGNvbnN0OwotICAgIE5JWF9FWFBPUlQgdm9p
ZCBzZXRSZWFkb25seShib29sKTsKLQotICAgIC8vIEZJWE1FIEFkZCBzdXBwb3J0IGZvciBjYXBh
YmlsaXRlcy4KLQotI2lmIEJVSUxESU5HX05JWF9fCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2UoY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlPiYpOwotICAgIE1l
ZGlhU3RyZWFtU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKTsK
LSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U+
KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKCkgY29u
c3Q7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFByaXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFT
dHJlYW1Tb3VyY2U+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5k
aWYgLy8gTml4X01lZGlhU3RyZWFtU291cmNlX2gKLQpJbmRleDogU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL011bHRpQ2hhbm5lbFBDTURhdGEuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOaXhfTXVsdGlDaGFubmVsUENNRGF0YV9oCi0jZGVmaW5lIE5peF9NdWx0aUNoYW5uZWxQ
Q01EYXRhX2gKLQotI2luY2x1ZGUgIkNvbW1vbi5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotLy8g
QSBjb250YWluZXIgZm9yIG11bHRpLWNoYW5uZWwgbGluZWFyIFBDTSBhdWRpbyBkYXRhLgotY2xh
c3MgTklYX0VYUE9SVCBNdWx0aUNoYW5uZWxQQ01EYXRhIHsKLXB1YmxpYzoKLSAgICBNdWx0aUNo
YW5uZWxQQ01EYXRhKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGRv
dWJsZSBzYW1wbGVSYXRlKTsKLSAgICB+TXVsdGlDaGFubmVsUENNRGF0YSgpOwotCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OwotICAgIHNpemVfdCBsZW5ndGgoKSBjb25z
dDsKLSAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBjYW4gcmV0
dXJuIG51bGwgaWYgTml4IHdhcyBjb21waWxlZCB3aXRob3V0IFdlYkF1ZGlvIHN1cHBvcnQuCi0g
ICAgZmxvYXQqIGNoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCk7Ci0KLSNpZmRlZiBC
VUlMRElOR19OSVhfXwotICAgIHZvaWQqIGdldEludGVybmFsRGF0YSgpOwotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgTXVsdGlDaGFubmVsUENNRGF0YShjb25zdCBNdWx0aUNoYW5uZWxQQ01EYXRh
Jik7Ci0gICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTXVsdGlDaGFubmVsUENNRGF0YSYpOwotCi0g
ICAgdm9pZCogbV9kYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4Ci0KLSNlbmRpZiAvLyBO
aXhfTXVsdGlDaGFubmVsUENNRGF0YV9oCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1Bs
YXRmb3JtLmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIE5peF9QbGF0Zm9ybV9oCi0jZGVmaW5lIE5peF9QbGF0Zm9ybV9oCi0KLSNpbmNsdWRl
ICJBdWRpb0RldmljZS5oIgotI2luY2x1ZGUgIkdhbWVwYWRzLmgiCi0jaW5jbHVkZSA8c3RkaW50
Lmg+Ci0KLW5hbWVzcGFjZSBOaXggewotCi1jbGFzcyBNdWx0aUNoYW5uZWxQQ01EYXRhOwotY2xh
c3MgRkZURnJhbWU7Ci1jbGFzcyBUaGVtZUVuZ2luZTsKLWNsYXNzIE1lZGlhUGxheWVyOwotY2xh
c3MgTWVkaWFQbGF5ZXJDbGllbnQ7Ci0KLWNsYXNzIE5JWF9FWFBPUlQgUGxhdGZvcm0gewotcHVi
bGljOgotCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShQbGF0Zm9ybSopOwotICAgIHN0YXRp
YyBQbGF0Zm9ybSogY3VycmVudCgpOwotCi0gICAgLy8gQXVkaW8KLSAgICB2aXJ0dWFsIGZsb2F0
IGF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRlKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgc2l6
ZV90IGF1ZGlvSGFyZHdhcmVCdWZmZXJTaXplKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
dW5zaWduZWQgYXVkaW9IYXJkd2FyZU91dHB1dENoYW5uZWxzKCkgeyByZXR1cm4gMDsgfQotCi0g
ICAgLy8gQ3JlYXRlcyBhIGRldmljZSBmb3IgYXVkaW8gSS9PLgotICAgIC8vIFBhc3MgaW4gKG51
bWJlck9mSW5wdXRDaGFubmVscyA+IDApIGlmIGxpdmUvbG9jYWwgYXVkaW8gaW5wdXQgaXMgZGVz
aXJlZC4KLSAgICB2aXJ0dWFsIEF1ZGlvRGV2aWNlKiBjcmVhdGVBdWRpb0RldmljZShjb25zdCBj
aGFyKiAvKmlucHV0RGV2aWNlSWQqLywgc2l6ZV90IC8qYnVmZmVyU2l6ZSovLCB1bnNpZ25lZCAv
Km51bWJlck9mSW5wdXRDaGFubmVscyovLCB1bnNpZ25lZCAvKm51bWJlck9mT3V0cHV0Q2hhbm5l
bHMqLywgZG91YmxlIC8qc2FtcGxlUmF0ZSovLCBBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2sq
KSB7IHJldHVybiBudWxscHRyOyB9Ci0KLSAgICAvLyBHYW1lcGFkCi0gICAgdmlydHVhbCB2b2lk
IHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRzJiBpbnRvKSB7IGludG8ubGVuZ3RoID0gMDsgfQotCi0g
ICAgLy8gRkZURnJhbWUKLSAgICB2aXJ0dWFsIEZGVEZyYW1lKiBjcmVhdGVGRlRGcmFtZSh1bnNp
Z25lZCAvKmZmdHNpemUqLykgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0gICAgLy8gRGVjb2RlcyB0
aGUgaW4tbWVtb3J5IGF1ZGlvIGZpbGUgZGF0YSBhbmQgcmV0dXJucyB0aGUgbGluZWFyIFBDTSBh
dWRpbyBkYXRhLgotICAgIHZpcnR1YWwgTXVsdGlDaGFubmVsUENNRGF0YSogZGVjb2RlQXVkaW9S
ZXNvdXJjZShjb25zdCB2b2lkKiAvKmF1ZGlvRGF0YSovLCBzaXplX3QgLypkYXRhU2l6ZSovLCBk
b3VibGUgLypzYW1wbGVSYXRlKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KLQotICAgIC8vIFRoZW1l
IGVuZ2luZQotICAgIHZpcnR1YWwgVGhlbWVFbmdpbmUqIHRoZW1lRW5naW5lKCk7Ci0KLSAgICAv
LyBDcmVhdGUgYSBNZWRpYVBsYXllciwgdXNlZCB0by4uLiBwbGF5IG1lZGlhIDotKQotICAgIHZp
cnR1YWwgTWVkaWFQbGF5ZXIqIGNyZWF0ZU1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kikg
eyByZXR1cm4gbnVsbHB0cjsgfQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgflBsYXRmb3JtKCkg
eyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9QbGF0Zm9ybV9o
CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Qcml2YXRlUHRyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUHJpdmF0ZVB0ci5oCShyZXZpc2lvbiAx
NjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Qcml2YXRlUHRyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOaXhfUHJpdmF0
ZVB0cl9oCi0jZGVmaW5lIE5peF9Qcml2YXRlUHRyX2gKLQotI2luY2x1ZGUgIkNvbW1vbi5oIgot
Ci0jaWYgQlVJTERJTkdfTklYX18KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2VuZGlm
Ci0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotCi1uYW1lc3BhY2UgTml4IHsKLQotLy8gVGhpcyBjbGFz
cyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIE5peCBBUEkuIEl0IGV4aXN0cwot
Ly8gdG8gaGVscCBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgTml4IGludGVyZmFjZXMg
dGhhdCBtZXJlbHkKLS8vIHdyYXAgYSByZWZlcmVuY2UgY291bnRlZCBXZWJDb3JlIGNsYXNzLgot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcml2YXRlUHRyIHsKLXB1YmxpYzoKLSAgICBQ
cml2YXRlUHRyKCkgOiBtX3B0cigwKSB7IH0KLSAgICB+UHJpdmF0ZVB0cigpIHsgYXNzZXJ0KCFt
X3B0cik7IH0KLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9Ci0K
LSNpZiBCVUlMRElOR19OSVhfXwotICAgIFByaXZhdGVQdHIoY29uc3QgUGFzc1JlZlB0cjxUPiYg
cHJwKQotICAgICAgICA6IG1fcHRyKHBycC5sZWFrUmVmKCkpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgYXNzaWduKDApOwotICAgIH0KLQotICAgIFBy
aXZhdGVQdHI8VD4mIG9wZXJhdG9yPShjb25zdCBQcml2YXRlUHRyPFQ+JiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIFQqIHAgPSBvdGhlci5tX3B0cjsKLSAgICAgICAgaWYgKHApCi0gICAgICAgICAg
ICBwLT5yZWYoKTsKLSAgICAgICAgYXNzaWduKHApOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotCi0gICAgUHJpdmF0ZVB0cjxUPiYgb3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8VD4m
IHBycCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihwcnAubGVha1JlZigpKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIFQqIGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9wdHI7Ci0gICAgfQotCi0gICAgVCogb3BlcmF0b3ItPigpIGNvbnN0Ci0gICAgewot
ICAgICAgICBhc3NlcnQobV9wdHIpOwotICAgICAgICByZXR1cm4gbV9wdHI7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIHZvaWQgYXNzaWduKFQqIHApCi0gICAgewotICAgICAgICAvLyBwIGlzIGFs
cmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKLSAgICAgICAgaWYgKG1fcHRyKQotICAg
ICAgICAgICAgbV9wdHItPmRlcmVmKCk7Ci0gICAgICAgIG1fcHRyID0gcDsKLSAgICB9Ci0jZW5k
aWYKLQotcHJpdmF0ZToKLQotICAgIFQqIG1fcHRyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTml4
Ci0KLSNlbmRpZiAvLyBOaXhfUHJpdmF0ZVB0cl9oCi0KSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1JlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9SZWN0LmgJKHJldmlzaW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1JlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgTml4X1JlY3RfaAotI2RlZmluZSBOaXhfUmVjdF9oCi0KLW5hbWVz
cGFjZSBOaXggewotCi1jbGFzcyBSZWN0IHsKLXB1YmxpYzoKLSAgICBpbnQgeDsKLSAgICBpbnQg
eTsKLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IGhlaWdodDsKLQotICAgIFJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogeCh4KQotICAgICAgICAsIHko
eSkKLSAgICAgICAgLCB3aWR0aCh3aWR0aCkKLSAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQotICAg
IHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaXgKLQotI2VuZGlmIC8vIE5peF9SZWN0
X2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9TaXplLmgJKHJldmlzaW9uIDE2MjE0MCkKKysr
IFNvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTml4X1NpemVfaAotI2RlZmluZSBOaXhfU2l6
ZV9oCi0KLW5hbWVzcGFjZSBOaXggewotCi1zdHJ1Y3QgU2l6ZSB7Ci0gICAgaW50IHdpZHRoOwot
ICAgIGludCBoZWlnaHQ7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDA7Ci0gICAgfQotCi0gICAgU2l6ZSgp
Ci0gICAgICAgIDogd2lkdGgoMCkKLSAgICAgICAgLCBoZWlnaHQoMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogd2lkdGgod2lkdGgp
Ci0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHdp
ZHRoID09IG90aGVyLndpZHRoICYmIGhlaWdodCA9PSBvdGhlci5oZWlnaHQ7Ci0gICAgfQotCi0g
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IE5peAotCi0jZW5kaWYgLy8gTml4X1NpemVfaApJbmRleDogU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3B1
YmxpYy9UaGVtZUVuZ2luZS5oCShyZXZpc2lvbiAxNjIxNDApCisrKyBTb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9UaGVtZUVuZ2luZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTml4X1RoZW1lRW5naW5lX2gKLSNkZWZpbmUgTml4X1RoZW1l
RW5naW5lX2gKLQotI2luY2x1ZGUgIkNhbnZhcy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiU2l6ZS5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotY2xhc3MgUmVjdDsKLQotY2xhc3Mg
VGhlbWVFbmdpbmUgewotcHVibGljOgotICAgIC8vIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBh
c3NvY2lhdGVkIFBhcnQuCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFN0YXRlRGlzYWJsZWQs
Ci0gICAgICAgIFN0YXRlSG92ZXIsCi0gICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0
ZVByZXNzZWQKLSAgICB9OwotCi0gICAgZW51bSBNZWRpYVBsYXllclN0YXRlIHsKLSAgICAgICAg
U3RhdGVQbGF5aW5nLAotICAgICAgICBTdGF0ZVBhdXNlZCwKLSAgICAgICAgU3RhdGVNdXRlZCwK
LSAgICAgICAgU3RhdGVOb3RNdXRlZAotICAgIH07Ci0KLSAgICAvLyBFeHRyYSBwYXJhbWV0ZXJz
IGZvciBkcmF3aW5nIHRoZSBQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIGFuZAotICAgIC8v
IFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLgotICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4
dHJhUGFyYW1zIHsKLSAgICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBh
cyBvcHBvc2VkIHRvIHRoZSBwYXJ0IGJlaW5nIHBhaW50ZWQuCi0gICAgICAgIGludCB0cmFja1g7
Ci0gICAgICAgIGludCB0cmFja1k7Ci0gICAgICAgIGludCB0cmFja1dpZHRoOwotICAgICAgICBp
bnQgdHJhY2tIZWlnaHQ7Ci0gICAgfTsKLQotICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBh
cnRDaGVja2JveCwgUGFydFB1c2hCdXR0b24gYW5kIFBhcnRSYWRpby4KLSAgICBzdHJ1Y3QgQnV0
dG9uRXh0cmFQYXJhbXMgewotICAgICAgICBib29sIGNoZWNrZWQ7Ci0gICAgICAgIGJvb2wgaW5k
ZXRlcm1pbmF0ZTsgLy8gV2hldGhlciB0aGUgYnV0dG9uIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUu
Ci0gICAgICAgIGJvb2wgaXNEZWZhdWx0OyAvLyBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGVmYXVs
dCBidXR0b24uCi0gICAgICAgIGJvb2wgaGFzQm9yZGVyOwotICAgIH07Ci0KLSAgICAvLyBFeHRy
YSBwYXJhbWV0ZXJzIGZvciBQYXJ0SW5uZXJTcGluQnV0dG9uCi0gICAgc3RydWN0IElubmVyU3Bp
bkJ1dHRvbkV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9vbCBzcGluVXA7Ci0gICAgICAgIGJvb2wg
cmVhZE9ubHk7Ci0gICAgfTsKLQotICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRQcm9n
cmVzc0JhcgotICAgIHN0cnVjdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9v
bCBpc0RldGVybWluYXRlOwotICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgIGRvdWJs
ZSBhbmltYXRpb25Qcm9ncmVzczsKLSAgICAgICAgZG91YmxlIGFuaW1hdGlvblN0YXJ0VGltZTsK
LSAgICB9OwotCi0gICAgc3RydWN0IE1ldGVyRXh0cmFQYXJhbXMgewotICAgICAgICBkb3VibGUg
bWluOwotICAgICAgICBkb3VibGUgbWF4OwotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAg
IGRvdWJsZSBsb3c7Ci0gICAgICAgIGRvdWJsZSBoaWdoOwotICAgICAgICBkb3VibGUgb3B0aW11
bTsKLSAgICAgICAgZG91YmxlIHZhbHVlUmF0aW8oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobWF4IDw9IG1pbikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgY29u
c3QgeyByZXR1cm4gIiI7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhUXVpcmtzU3R5
bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBl
eHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gIiI7IH0KLQotICAgIC8vIFRl
eHQgc2VsZWN0aW9uIGNvbG9ycy4KLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29s
b3IgaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7Ci0KLSAgICAv
LyBMaXN0IGJveCBzZWxlY3Rpb24gY29sb3JzCi0gICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0
Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29s
b3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ29sb3IgaW5h
Y3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFs
IENvbG9yIGZvY3VzUmluZ0NvbG9yKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBDb2xvciB0
YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1
dHRvbihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1z
JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChDYW52YXMqLCBT
dGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFNpemUgZ2V0Q2hlY2ti
b3hTaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENoZWNrYm94KENhbnZh
cyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRSYWRpbyhDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1
dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRB
cmVhKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRNZW51TGlzdFBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0
LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50TWVudUxpc3QoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoQ2FudmFzKiwgU3Rh
dGUsIGNvbnN0IFJlY3QmLCBjb25zdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zJikgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jl
c3NCYXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5uZXJT
cGluQnV0dG9uUGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYg
cGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBj
b25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRNZXRlcihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IE1ldGVy
RXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJh
Y2soQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50U2xpZGVyVGh1bWIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9
IDA7Ci0KLSAgICAvLyBNZWRpYVBsYXllciAoYXVkaW8gYW5kIHZpZGVvIGVsZW1lbnRzKQotICAg
IHZpcnR1YWwgdm9pZCBwYWludE1lZGlhUGxheUJ1dHRvbihDYW52YXMqLCBNZWRpYVBsYXllclN0
YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlh
TXV0ZUJ1dHRvbihDYW52YXMqLCBNZWRpYVBsYXllclN0YXRlLCBjb25zdCBSZWN0JikgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwg
Y29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYVNlZWtG
b3J3YXJkQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gTml4X1RoZW1lRW5n
aW5lX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2lu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRo
ZW1lRW5naW5lLmNwcAkocmV2aXNpb24gMTYyMTQwKQorKysgU291cmNlL1BsYXRmb3JtL25peC9z
cmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ODcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJEZWZhdWx0V2ViVGhlbWVFbmdpbmUuaCIKLQotI2luY2x1ZGUgInB1YmxpYy9Db2xv
ci5oIgotI2luY2x1ZGUgInB1YmxpYy9SZWN0LmgiCi0jaW5jbHVkZSAicHVibGljL1NpemUuaCIK
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KLSNpbmNsdWRl
IDxjbWF0aD4KLQotY29uc3QgZG91YmxlIEJHQ29sb3IxID0gMHhGNiAvIDI1NS4wOwotY29uc3Qg
ZG91YmxlIEJHQ29sb3IyID0gMHhERSAvIDI1NS4wOwotY29uc3QgZG91YmxlIEJvcmRlckNvbG9y
ID0gMHhBNCAvIDI1NS4wOwotY29uc3QgZG91YmxlIEJvcmRlck9uSG92ZXJDb2xvciA9IDB4N0Eg
LyAyNTUuMDsKLWNvbnN0IGRvdWJsZSBDaGVja0NvbG9yID0gMHg2NiAvIDI1NS4wOwotY29uc3Qg
ZG91YmxlIFRleHRGaWVsZERhcmtCb3JkZXJDb2xvciA9IDB4OUEgLyAyNTUuMDsKLWNvbnN0IGRv
dWJsZSBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yID0gMHhFRSAvIDI1NS4wOwotCi1jb25zdCBp
bnQgTWVudUxpc3RCb3JkZXIgPSA1OwotY29uc3QgaW50IE1lbnVMaXN0QXJyb3dTaXplID0gNjsK
LQotY29uc3QgaW50IElubmVyU3BpbkJ1dHRvbkJvcmRlciA9IDM7Ci1jb25zdCBpbnQgSW5uZXJT
cGluQnV0dG9uQXJyb3dTaXplID0gMjsKLQotY29uc3QgTml4OjpDb2xvciBUYXBIaWdoTGlnaHRD
b2xvcigweDY2MDAwMDAwKTsKLQotbmFtZXNwYWNlIE5peCB7Ci0KLUNvbG9yIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ29sb3I6OmJsdWU7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29s
b3I6OndoaXRlOwotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMTc2LCAx
NzYsIDE3Nik7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6YmxhY2s7
Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpOwotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBh
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKLX0KLQotQ29sb3IgRGVmYXVsdFdlYlRo
ZW1lRW5naW5lOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAotewotICAgIHJldHVybiBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwotfQot
Ci1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCk7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZl
VGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1
LCAxNTAsIDUwKTsgLy8gT3JhbmdlLgotfQotCi1Db2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q29sb3IoMjU1LCAyNTUsIDApOyAvLyBZZWxsb3cuCi19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6Zm9jdXNSaW5nQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6Ymxh
Y2s7Ci19Ci0KLUNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6dGFwSGlnaGxpZ2h0Q29sb3Io
KSBjb25zdAotewotICAgIHJldHVybiBUYXBIaWdoTGlnaHRDb2xvcjsKLX0KLQotc3RhdGljIHZv
aWQgZ3JhZGllbnRGaWxsKGNhaXJvX3QqIGNhaXJvLCBkb3VibGUgeVN0YXJ0LCBkb3VibGUgeUxl
bmd0aCwgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQotewotICAgIGRvdWJsZSBncmFkU3RhcnRDb2xv
ciA9IEJHQ29sb3IxOwotICAgIGRvdWJsZSBncmFkRW5kQ29sb3IgPSBCR0NvbG9yMjsKLSAgICBp
ZiAoaW52ZXJ0ZWQpCi0gICAgICAgIHN0ZDo6c3dhcChncmFkU3RhcnRDb2xvciwgZ3JhZEVuZENv
bG9yKTsKLQotICAgIGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQgPSBjYWlyb19wYXR0ZXJuX2Ny
ZWF0ZV9saW5lYXIoMCwgeVN0YXJ0LCAwLCB5U3RhcnQgKyB5TGVuZ3RoKTsKLSAgICBjYWlyb19w
YXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYihncmFkaWVudCwgMCwgZ3JhZFN0YXJ0Q29sb3IsIGdy
YWRTdGFydENvbG9yLCBncmFkU3RhcnRDb2xvcik7Ci0gICAgY2Fpcm9fcGF0dGVybl9hZGRfY29s
b3Jfc3RvcF9yZ2IoZ3JhZGllbnQsIDEsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9yLCBncmFk
RW5kQ29sb3IpOwotICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm8sIGdyYWRpZW50KTsKLSAgICBj
YWlyb19maWxsKGNhaXJvKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3koZ3JhZGllbnQpOwot
fQotCi1zdGF0aWMgdm9pZCBzZXR1cEJvcmRlcihjYWlyb190ICogY2Fpcm8sIFRoZW1lRW5naW5l
OjpTdGF0ZSBzdGF0ZSkKLXsKLSAgICBkb3VibGUgYm9yZGVyQ29sb3IgPSBzdGF0ZSA9PSBUaGVt
ZUVuZ2luZTo6U3RhdGVIb3ZlciA/IEJvcmRlck9uSG92ZXJDb2xvciA6IEJvcmRlckNvbG9yOwot
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhaXJvLCBib3JkZXJDb2xvciwgYm9yZGVyQ29sb3Is
IGJvcmRlckNvbG9yKTsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYWlybywgMSk7Ci19Ci0K
LXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludEJ1dHRvbihDYW52YXMqIGNhbnZhcywg
U3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikg
Y29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0gICAgc2V0dXBCb3JkZXIoY2FudmFz
LCBzdGF0ZSk7Ci0gICAgLy8gQ2Fpcm8gdXNlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIG5vdCBiYXNl
ZCBvbiBwaXhlbCBjb29yZGluYXRlcywgc28KLSAgICAvLyB3ZSBuZWVkIHRvIGFkZCAgMC41IHRv
IHggYW5kIHkgY29vcmQgb3IgdGhlIGxpbmUgd2lsbCBzdGF5IGJldHdlZW4KLSAgICAvLyB0d28g
cGl4ZWxzIGluc3RlYWQgb2YgaW4gdGhlIG1pZGRsZSBvZiBhIHBpeGVsLgotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCBy
ZWN0LmhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAgICBn
cmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVBy
ZXNzZWQpOwotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OnBhaW50VGV4dEZpZWxkKENhbnZhcyogY2FudmFzLCBTdGF0ZSwgY29uc3Qg
UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0KLSAgICBjb25z
dCBkb3VibGUgbGluZVdpZHRoID0gMjsKLSAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvbiA9IGxp
bmVXaWR0aCAvIDIuMDsKLQotICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgbGluZVdp
ZHRoKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIFRleHRGaWVsZERhcmtCb3Jk
ZXJDb2xvciwgVGV4dEZpZWxkRGFya0JvcmRlckNvbG9yLCBUZXh0RmllbGREYXJrQm9yZGVyQ29s
b3IpOwotICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyBjb3JyZWN0aW9uLCByZWN0
LnkgKyBjb3JyZWN0aW9uICsgcmVjdC5oZWlnaHQpOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgMCwgLXJlY3QuaGVpZ2h0KTsKLSAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJl
Y3Qud2lkdGgsIDApOwotICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOwotCi0gICAgY2Fpcm9fc2V0
X3NvdXJjZV9yZ2IoY2FudmFzLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRM
aWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yKTsKLSAgICBjYWlyb19t
b3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgY29ycmVjdGlvbiArIHJlY3Qud2lkdGgsIHJlY3QueSAr
IGNvcnJlY3Rpb24pOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgMCwgcmVjdC5oZWln
aHQpOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLXJlY3Qud2lkdGgsIDApOwotICAg
IGNhaXJvX3N0cm9rZShjYW52YXMpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQot
Ci12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0QXJlYShDYW52YXMqIGNhbnZh
cywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgcGFpbnRUZXh0
RmllbGQoY2FudmFzLCBzdGF0ZSwgcmVjdCk7Ci19Ci0KLVNpemUgRGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpnZXRDaGVja2JveFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBTaXplKDEzLCAxMyk7
Ci19Ci0KLXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludENoZWNrYm94KENhbnZhcyog
Y2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQ
YXJhbXMmIHBhcmFtKSBjb25zdAotewotICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKLSAgICBzZXR1
cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0
LnggKyAwLjUsIHJlY3QueSArIDAuNSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwotICAgIGNh
aXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOwotCi0gICAgZ3JhZGllbnRGaWxsKGNhbnZhcywg
cmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKLQotICAgIGlmIChw
YXJhbS5jaGVja2VkKSB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBib3JkZXIgPSAzOwotICAgICAg
ICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52YXMsIDIpOwotICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOwotICAg
ICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0Lnkg
KyAwLjUgKyByZWN0LmhlaWdodCAtIGJvcmRlcik7Ci0gICAgICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgcmVjdC53aWR0aCAtIGJvcmRlciAqIDIsIC1yZWN0LmhlaWdodCArIGJvcmRlciAq
IDIpOwotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVy
LCByZWN0LnkgKyAwLjUgKyBib3JkZXIpOwotICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52
YXMsIHJlY3Qud2lkdGggLSBib3JkZXIgKiAyLCByZWN0LmhlaWdodCAtIGJvcmRlciAqIDIpOwot
ICAgICAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKLSAgICB9Ci0KLSAgICBjYWlyb19yZXN0b3Jl
KGNhbnZhcyk7Ci19Ci0KLVNpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUo
KSBjb25zdAotewotICAgIHJldHVybiBTaXplKDEzLCAxMyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludFJhZGlvKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29u
c3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAotewot
ICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKLSAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsK
LSAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCByZWN0Lnkg
KyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDIuMCwgMCwgMiAqIE1fUEkpOwotICAg
IGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOwotCi0gICAgZ3JhZGllbnRGaWxsKGNhbnZh
cywgcmVjdC55LCByZWN0LmhlaWdodCk7Ci0KLSAgICBpZiAocGFyYW0uY2hlY2tlZCkgewotICAg
ICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3Is
IENoZWNrQ29sb3IpOwotICAgICAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0Lndp
ZHRoIC8gMi4wLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDQuMCwg
MCwgMiAqIE1fUEkpOwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgfQotICAgIGNh
aXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6Omdl
dE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYg
cGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0Ci17Ci0gICAgcGFkZGluZ1Rv
cCA9IE1lbnVMaXN0Qm9yZGVyOwotICAgIHBhZGRpbmdMZWZ0ID0gTWVudUxpc3RCb3JkZXI7Ci0g
ICAgcGFkZGluZ0JvdHRvbSA9IE1lbnVMaXN0Qm9yZGVyOwotICAgIHBhZGRpbmdSaWdodCA9IDIg
KiBNZW51TGlzdEJvcmRlciArIE1lbnVMaXN0QXJyb3dTaXplOwotfQotCi12b2lkIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6cGFpbnRNZW51TGlzdChDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUs
IGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAg
IHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMs
IHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7Ci0g
ICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAgICBncmFkaWVudEZpbGwoY2Fu
dmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOwotCi0gICAg
Y2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBNZW51TGlzdEFycm93
U2l6ZSAtIE1lbnVMaXN0Qm9yZGVyLCByZWN0LnkgKyAxICsgcmVjdC5oZWlnaHQgLyAyIC0gTWVu
dUxpc3RBcnJvd1NpemUgLyAyKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENo
ZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOwotICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOwotICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUpOwotICAgIGNh
aXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKLSAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0KLSAgICBj
YWlyb19yZXN0b3JlKGNhbnZhcyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpw
YWludFByb2dyZXNzQmFyKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYg
cmVjdCwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAotewotICAg
IGNhaXJvX3NhdmUoY2FudmFzKTsKLQotICAgIGlmIChwYXJhbXMuaXNEZXRlcm1pbmF0ZSkgewot
ICAgICAgICAvLyBCYWNrZ3JvdW5kCi0gICAgICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUp
OwotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53
aWR0aCwgcmVjdC5oZWlnaHQpOwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgICAg
IC8vIFByb2dyZXNzCi0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVj
dC55LCByZWN0LndpZHRoICogcGFyYW1zLnBvc2l0aW9uLCByZWN0LmhlaWdodCk7Ci0gICAgICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0Lndp
ZHRoLCByZWN0LmhlaWdodCk7Ci0gICAgICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwg
cmVjdC5oZWlnaHQsIHRydWUpOwotICAgIH0KLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyA9IDEwOwotc3Rh
dGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7Ci0KLWRv
dWJsZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoKSBjb25zdAotewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVy
dmFsOwotfQotCi1kb3VibGUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRp
b25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNr
IGFuZCBmb3J0aC4KLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldElubmVyU3Bp
bkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBh
ZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdAotewotICAgIHBhZGRpbmdUb3Ag
PSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7Ci0gICAgcGFkZGluZ0xlZnQgPSBJbm5lclNwaW5CdXR0
b25Cb3JkZXI7Ci0gICAgcGFkZGluZ0JvdHRvbSA9IElubmVyU3BpbkJ1dHRvbkJvcmRlcjsKLSAg
ICBwYWRkaW5nUmlnaHQgPSAyICogSW5uZXJTcGluQnV0dG9uQm9yZGVyICsgSW5uZXJTcGluQnV0
dG9uQXJyb3dTaXplOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRJbm5l
clNwaW5CdXR0b24oQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0
LCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNvbnN0Ci17Ci0gICAg
ZG91YmxlIHJlY3RIYWxmSGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyAyOwotCi0gICAgY2Fpcm9fc2F2
ZShjYW52YXMpOwotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMS41LCByZWN0LndpZHRoLCBy
ZWN0SGFsZkhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0KLSAg
ICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3RIYWxmSGVpZ2h0LCBzdGF0ZSA9PSBT
dGF0ZVByZXNzZWQgJiYgcGFyYW0uc3BpblVwKTsKLQotICAgIHNldHVwQm9yZGVyKGNhbnZhcywg
c3RhdGUpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55
ICsgMC41ICsgcmVjdEhhbGZIZWlnaHQsIHJlY3Qud2lkdGgsIHJlY3RIYWxmSGVpZ2h0KTsKLSAg
ICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKLQotICAgIGdyYWRpZW50RmlsbChjYW52
YXMsIHJlY3QueSArIHJlY3RIYWxmSGVpZ2h0LCByZWN0SGFsZkhlaWdodCwgc3RhdGUgPT0gU3Rh
dGVQcmVzc2VkICYmICFwYXJhbS5zcGluVXApOwotCi0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMs
IHJlY3QueCArIHJlY3Qud2lkdGggLSBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUgLSBJbm5lclNw
aW5CdXR0b25Cb3JkZXIgKiAyLCByZWN0LnkgKyByZWN0SGFsZkhlaWdodCArIHJlY3QuaGVpZ2h0
IC8gNCAtIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSArIDEuNSk7Ci0gICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKLSAg
ICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKLSAgICBj
YWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIE1lbnVMaXN0
QXJyb3dTaXplKTsKLSAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7Ci0KLSAgICBjYWlyb19t
b3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAtIElubmVyU3BpbkJ1dHRvbkFycm93
U2l6ZSAtIElubmVyU3BpbkJ1dHRvbkJvcmRlciAqIDIsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8g
NCArIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2Io
Y2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKLSAgICBjYWlyb19y
ZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKLSAgICBjYWlyb19yZWxf
bGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIC1NZW51TGlzdEFycm93U2l6
ZSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwotCi0gICAgY2Fpcm9fZmlsbChjYW52
YXMpOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZXRlcihDYW52YXMq
IGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IE1ldGVyRXh0cmFQ
YXJhbXMmIHBhcmFtcykgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0KLSAgICAv
LyBCYWNrZ3JvdW5kLgotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOwotICAgIGNhaXJv
X3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdo
dCk7Ci0gICAgY2Fpcm9fZmlsbChjYW52YXMpOwotICAgIC8vIE1ldGVyLgotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoICogcGFyYW1zLnZhbHVl
UmF0aW8oKSwgcmVjdC5oZWlnaHQpOwotICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwg
cmVjdC5oZWlnaHQpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi1jb25zdCBp
bnQgU2xpZGVyVHJhY2tIZWlnaHQgPSA2OwotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
cGFpbnRTbGlkZXJUcmFjayhDYW52YXMqIGNhbnZhcywgU3RhdGUsIGNvbnN0IFJlY3QmIHJlY3Qp
IGNvbnN0Ci17Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAgIGNhaXJvX3JlY3RhbmdsZShj
YW52YXMsIHJlY3QueCwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0IC0gU2xpZGVyVHJhY2tIZWlnaHQp
IC8gMi4wLCByZWN0LndpZHRoLCBTbGlkZXJUcmFja0hlaWdodCk7Ci0gICAgZ3JhZGllbnRGaWxs
KGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgdHJ1ZSk7Ci0gICAgY2Fpcm9fcmVzdG9yZShj
YW52YXMpOwotfQotCi12b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUaHVt
YihDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgY2Fpcm9fc2F2ZShjYW52YXMpOwotICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUp
OwotICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRo
LCByZWN0LmhlaWdodCk7Ci0gICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7Ci0gICAg
Z3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQ
cmVzc2VkKTsKLSAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Ci19Ci0KLXZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludE1lZGlhUGxheUJ1dHRvbihDYW52YXMqIGNhbnZhcywgTWVkaWFQ
bGF5ZXJTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19z
YXZlKGNhbnZhcyk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsK
LSAgICBpZiAoc3RhdGUgPT0gU3RhdGVQYXVzZWQpIHsKLSAgICAgICAgY2Fpcm9fbW92ZV90byhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC4yNSkpOwotICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjc1KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41KSk7Ci0gICAgICAgIGNh
aXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzUpKTsKLSAgICAgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMp
OwotICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7Ci0gICAgfSBlbHNlIHsgLy8gSWYgc3RhdGUg
aXMgU3RhdGVQbGF5aW5nLgotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0Lngg
KyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjUpLCAocmVj
dC53aWR0aCAqIDAuMTUpLCAocmVjdC5oZWlnaHQgKiAwLjUpKTsKLSAgICAgICAgY2Fpcm9fZmls
bChjYW52YXMpOwotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNTUpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI1KSwgKHJlY3Qud2lk
dGggKiAwLjE1KSwgKHJlY3QuaGVpZ2h0ICogMC41KSk7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY2Fu
dmFzKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi12b2lkIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiBjYW52YXMsIE1l
ZGlhUGxheWVyU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fp
cm9fc2F2ZShjYW52YXMpOwotICAgIGlmIChzdGF0ZSA9PSBTdGF0ZU11dGVkKSB7Ci0gICAgICAg
IGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgMSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3Vy
Y2VfcmdiKGNhbnZhcywgMTM5LCAwLCAwKTsKLQotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC42NykpOwotICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjg3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zNCkpOwotICAgICAgICBjYWly
b19zdHJva2UoY2FudmFzKTsKLQotICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjg3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC42NykpOwot
ICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU5
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zNCkpOwotICAgICAgICBjYWlyb19zdHJva2Uo
Y2FudmFzKTsKLSAgICB9IGVsc2UgeyAvLyBJZiBzdGF0ZSBpcyBTdGF0ZU5vdE11dGVkCi0gICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgNSk7Ci0gICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7Ci0KLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywg
cmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUp
LCByZWN0LndpZHRoICogMC4zNCwgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAg
IGNhaXJvX2ZpbGwoY2FudmFzKTsKLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0Lndp
ZHRoICogMC40NSwgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAgIGNhaXJvX2Zp
bGwoY2FudmFzKTsKLSAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0LndpZHRoICogMC41
NywgMTEgKiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY2FudmFz
KTsKLSAgICB9Ci0KLSAgICAvLyBTcGVha2VyCi0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMTgp
KTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjI5
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zOCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2Fu
dmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMDgpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQg
KiAwLjM4KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRo
ICogMC4wOCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNjIpKTsKLSAgICBjYWlyb19saW5l
X3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjI5KSwgcmVjdC55ICsgKHJlY3Qu
aGVpZ2h0ICogMC42MikpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjgyKSk7Ci0gICAgY2Fp
cm9fY2xvc2VfcGF0aChjYW52YXMpOwotICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKLQotICAgIGNh
aXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBh
aW50TWVkaWFTZWVrQmFja0J1dHRvbihDYW52YXMqIGNhbnZhcywgY29uc3QgUmVjdCYgcmVjdCkg
Y29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2IoY2FudmFzLCAxLCAxLCAxKTsKLSAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjkwKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOwotICAg
IGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCByZWN0
LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzAp
KTsKLQotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAu
MjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fpcm9fbGluZV90byhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdo
dCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjExKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOwotICAgIGNhaXJvX2xp
bmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTEpLCByZWN0LnkgKyAocmVj
dC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChy
ZWN0LndpZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAgICBj
YWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjIzKSwgcmVjdC55
ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotCi0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkp
KTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU4
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2Fu
dmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuOTApLCByZWN0LnkgKyAocmVjdC5oZWlnaHQg
KiAwLjI5KSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwotICAgIGNhaXJvX2ZpbGwo
Y2FudmFzKTsKLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKLX0KLQotdm9pZCBEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihDYW52YXMqIGNhbnZh
cywgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBjYWlyb19zYXZlKGNhbnZhcyk7Ci0g
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsKLSAgICBjYWlyb19tb3Zl
X3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjEwKSwgcmVjdC55ICsgKHJlY3Qu
aGVpZ2h0ICogMC43MCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNDIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7Ci0gICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzApKTsKLQotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0
LnggKyAocmVjdC53aWR0aCAqIDAuNzcpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7
Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43Nyks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjg5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC43MCkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuODkpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43NyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuMjkpKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjc3KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwotCi0gICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjQyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOwot
ICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTApLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52
YXMpOwotICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKLQotICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFz
KTsKLX0KLQotdm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFSZXdpbmRCdXR0
b24oQ2FudmFzKiBjYW52YXMsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgY2Fpcm9f
c2F2ZShjYW52YXMpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7
Ci0gICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NCks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC41MSkpOwotICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuNTIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7Ci0gICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4xNyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuNTApKTsKLSAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOwotICAgIGNhaXJv
X2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAo
cmVjdC5oZWlnaHQgKiAwLjQ4KSk7Ci0gICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCAr
IChyZWN0LndpZHRoICogMC44NCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKLSAg
ICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7Ci0gICAgY2Fpcm9fZmlsbChjYW52YXMpOwotCi0g
ICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOwotfQotCi19CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0v
bml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxh
dGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaAkocmV2aXNpb24gMTYyMTQwKQor
KysgU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIERlZmF1bHRXZWJUaGVtZUVuZ2luZV9oCi0jZGVmaW5lIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZV9oCi0KLSNpbmNsdWRlICJwdWJsaWMvVGhlbWVFbmdpbmUuaCIKLQotbmFtZXNwYWNlIE5peCB7
Ci0KLWNsYXNzIERlZmF1bHRXZWJUaGVtZUVuZ2luZSBGSU5BTCA6IHB1YmxpYyBUaGVtZUVuZ2lu
ZSB7Ci1wdWJsaWM6Ci0gICAgLy8gVGV4dCBzZWxlY3Rpb24gY29sb3JzLgotICAgIHZpcnR1YWwg
Q29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gTGlzdCBib3ggc2Vs
ZWN0aW9uIGNvbG9ycwotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgQ29sb3IgYWN0
aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURF
OwotCi0gICAgdmlydHVhbCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCBDb2xvciB0YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0
JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUZXh0RmllbGQoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0QXJlYShDYW52YXMqLCBTdGF0ZSwg
Y29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU2l6ZSBnZXRDaGVja2Jv
eFNpemUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChD
YW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJhZGlvKENhbnZhcyosIFN0YXRlLCBjb25zdCBS
ZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRNZW51TGlzdChDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFJlY3QgJikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBh
ZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRk
aW5nUmlnaHQpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNz
QmFyKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBh
cmFtcyYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGRvdWJsZSBnZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyAqLCBTdGF0
ZSwgY29uc3QgUmVjdCAmLCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGlu
dCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQm
IHBhZGRpbmdSaWdodCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWV0
ZXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soQ2FudmFz
KiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTbGlkZXJUaHVtYihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJS
SURFOwotCi0gICAgLy8gTWVkaWEgUGxheWVyCi0gICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFQ
bGF5QnV0dG9uKENhbnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiwg
TWVkaWFQbGF5ZXJTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBwYWludE1lZGlhUmV3aW5kQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVS
UklERTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5peAotCi0jZW5kaWYgLy8gRGVmYXVsdFdlYlRo
ZW1lRW5naW5lX2gKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9QbGF0Zm9ybS5jcHAJKHJldmlz
aW9uIDE2MjE0MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwdWJsaWMvUGxhdGZvcm0uaCIKLQotI2luY2x1
ZGUgIkRlZmF1bHRXZWJUaGVtZUVuZ2luZS5oIgotCi1uYW1lc3BhY2UgTml4IHsKLQotc3RhdGlj
IFBsYXRmb3JtKiBzX3BsYXRmb3JtOwotCi12b2lkIFBsYXRmb3JtOjppbml0aWFsaXplKFBsYXRm
b3JtKiBwbGF0Zm9ybSkKLXsKLSAgICBzX3BsYXRmb3JtID0gcGxhdGZvcm07Ci19Ci0KLVBsYXRm
b3JtKiBQbGF0Zm9ybTo6Y3VycmVudCgpCi17Ci0gICAgc3RhdGljIFBsYXRmb3JtIGVtcHR5UGxh
dGZvcm07Ci0gICAgcmV0dXJuIHNfcGxhdGZvcm0gPyBzX3BsYXRmb3JtIDogJmVtcHR5UGxhdGZv
cm07Ci19Ci0KLVRoZW1lRW5naW5lKiBQbGF0Zm9ybTo6dGhlbWVFbmdpbmUoKQotewotICAgIHN0
YXRpYyBEZWZhdWx0V2ViVGhlbWVFbmdpbmUgdGhlbWU7Ci0gICAgcmV0dXJuICZ0aGVtZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgTml4Cg==
</data>
<flag name="review"
          id="245309"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>