<?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>262868</bug_id>
          
          <creation_ts>2023-10-08 12:21:48 -0700</creation_ts>
          <short_desc>AX: All methods in AXIsolatedObject should be final, not override</short_desc>
          <delta_ts>2023-10-08 16:37:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tyler Wilcock">tyler_w</reporter>
          <assigned_to name="Tyler Wilcock">tyler_w</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1983590</commentid>
    <comment_count>0</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-10-08 12:21:48 -0700</bug_when>
    <thetext>This can help de-virtualize function calls:

https://github.com/llvm/llvm-project/blob/876334321f842edadcc0cd4241c76b59bb888b9e/clang/lib/AST/DeclCXX.cpp#L2260#L2261</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1983591</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-10-08 12:21:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/116650535&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1983592</commentid>
    <comment_count>2</comment_count>
      <attachid>468115</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-10-08 12:27:25 -0700</bug_when>
    <thetext>Created attachment 468115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1983601</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-10-08 16:37:54 -0700</bug_when>
    <thetext>Committed 269059@main (db4f2bb7df50): &lt;https://commits.webkit.org/269059@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 468115.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468115</attachid>
            <date>2023-10-08 12:27:25 -0700</date>
            <delta_ts>2023-10-08 16:37:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-262868-20231008122724.patch</filename>
            <type>text/plain</type>
            <size>55946</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSAxMjQwZTcxNzMxNzZjMmMxMzUxMjk0ZjhjYmYwZDFkNWRjZWRjZDcwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU3VuLCA4IE9jdCAyMDIzIDEyOjIyOjAxIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gQVg6IEFs
bCBtZXRob2RzIGluIEFYSXNvbGF0ZWRPYmplY3Qgc2hvdWxkIGJlIGZpbmFsLCBub3QKIG92ZXJy
aWRlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjI4NjgKIHJkYXI6
Ly9wcm9ibGVtLzExNjY1MDUzNQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpUaGlzIGNh
biBoZWxwIGRlLXZpcnR1YWxpemUgZnVuY3Rpb24gY2FsbHM6CgpodHRwczovL2dpdGh1Yi5jb20v
bGx2bS9sbHZtLXByb2plY3QvYmxvYi84NzYzMzQzMjFmODQyZWRhZGNjMGNkNDI0MWM3NmI1OWJi
ODg4YjllL2NsYW5nL2xpYi9BU1QvRGVjbENYWC5jcHAjTDIyNjAjTDIyNjEKCkFYSXNvbGF0ZWRP
YmplY3QgaGFzIG5vIHN1YmNsYXNzZXMsIHNvIGV2ZXJ5dGhpbmcgY2FuIGJlIGZpbmFsLgoKKiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
Lmg6Ci0tLQogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmggICAgICAgICAgIHwg
NTg4ICsrKysrKysrKy0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI5NCBpbnNlcnRpb25zKCsp
LCAyOTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCmluZGV4IGRiOTc1ODEx
MzUyYy4uNTlhYTgwN2IwZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCkBAIC01MSwyMSAr
NTEsMjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8QVhJc29sYXRlZE9iamVjdD4gY3JlYXRl
KGNvbnN0IFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiYsIEFYSXNvbGF0ZWRUcmVlKik7CiAgICAg
fkFYSXNvbGF0ZWRPYmplY3QoKTsKIAotICAgIFByb2Nlc3NJRCBwcm9jZXNzSUQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cmVlKCktPnByb2Nlc3NJRCgpOyB9CisgICAgUHJvY2Vzc0lEIHBy
b2Nlc3NJRCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRyZWUoKS0+cHJvY2Vzc0lEKCk7IH0KICAg
ICBTdHJpbmcgZGJnKCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGF0dGFjaFBsYXRmb3JtV3Jh
cHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopOwotICAgIGJvb2wgaXNEZXRhY2hlZCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNEZXRhY2hlZCgpIGNvbnN0IGZpbmFsOwogICAg
IGJvb2wgaXNUYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SXNUYWJsZSk7IH0KICAgICBib29sIGlzRXhwb3NhYmxlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0V4cG9z
YWJsZSk7IH0KIAotICAgIEFYSXNvbGF0ZWRPYmplY3QqIHBhcmVudE9iamVjdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHBhcmVudE9iamVjdFVuaWdub3JlZCgpOyB9Ci0gICAgQVhJc29sYXRl
ZE9iamVjdCogZWRpdGFibGVBbmNlc3RvcigpIG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OmVkaXRhYmxlQW5jZXN0b3IoKnRoaXMpOyB9OwotICAgIGJvb2wgY2FuU2V0Rm9jdXNBdHRy
aWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OkNhblNldEZvY3VzQXR0cmlidXRlKTsgfQorICAgIEFYSXNvbGF0ZWRPYmplY3Qq
IHBhcmVudE9iamVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpOyB9CisgICAgQVhJc29sYXRlZE9iamVjdCogZWRpdGFibGVBbmNlc3RvcigpIGZpbmFsIHsg
cmV0dXJuIEFjY2Vzc2liaWxpdHk6OmVkaXRhYmxlQW5jZXN0b3IoKnRoaXMpOyB9OworICAgIGJv
b2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhblNldEZvY3VzQXR0cmlidXRlKTsgfQogCiBwcml2
YXRlOgotICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRU
eXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmls
aXR5RGV0YWNobWVudFR5cGUpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMo
QWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKSBmaW5hbDsKKyAgICB2b2lkIGRldGFjaFBsYXRm
b3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpIGZpbmFsOwogCiAgICAgQVhJ
RCBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudElEOyB9CiAgICAgdm9pZCBzZXRQYXJl
bnQoQVhJRCBheElEKSB7IG1fcGFyZW50SUQgPSBheElEOyB9CkBAIC03NCw3ICs3NCw3IEBAIHBy
aXZhdGU6CiAKICAgICBBWElzb2xhdGVkT2JqZWN0KCkgPSBkZWZhdWx0OwogICAgIEFYSXNvbGF0
ZWRPYmplY3QoY29uc3QgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+JiwgQVhJc29sYXRlZFRyZWUq
KTsKLSAgICBib29sIGlzQVhJc29sYXRlZE9iamVjdEluc3RhbmNlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNBWElzb2xhdGVkT2JqZWN0SW5zdGFuY2UoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXNz
b2NpYXRlZEFYT2JqZWN0KCkgY29uc3Q7CiAKICAgICB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVz
KGNvbnN0IFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiYpOwpAQCAtMTI4LDMwICsxMjgsMzAgQEAg
cHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBBdHRyaWJ1dGUgcmV0cmlldmFsIG92ZXJyaWRlcy4K
LSAgICBib29sIGlzTGluaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMaW5rKTsgfQotICAgIGJvb2wgaXNTZWN1cmVGaWVsZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6SXNTZWN1cmVGaWVsZCk7IH0KLSAgICBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBdHRhY2ht
ZW50KTsgfQotICAgIGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0lucHV0SW1hZ2UpOyB9Ci0gICAg
Ym9vbCBpc0NvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzQ29udHJvbCk7IH0KLQotICAgIGJvb2wgaXNMaXN0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJ
c0xpc3QpOyB9Ci0gICAgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0tleWJvYXJkRm9j
dXNhYmxlKTsgfQorICAgIGJvb2wgaXNMaW5rKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0xpbmspOyB9CisgICAgYm9vbCBpc1NlY3Vy
ZUZpZWxkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpJc1NlY3VyZUZpZWxkKTsgfQorICAgIGJvb2wgaXNBdHRhY2htZW50KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0F0dGFj
aG1lbnQpOyB9CisgICAgYm9vbCBpc0lucHV0SW1hZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW5wdXRJbWFnZSk7IH0KKyAgICBi
b29sIGlzQ29udHJvbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SXNDb250cm9sKTsgfQorCisgICAgYm9vbCBpc0xpc3QoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTGlzdCk7
IH0KKyAgICBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzS2V5Ym9hcmRGb2N1c2FibGUpOyB9
CiAgICAgCiAgICAgLy8gVGFibGUgc3VwcG9ydC4KICAgICBBWElzb2xhdGVkT2JqZWN0KiBleHBv
c2VkVGFibGVBbmNlc3Rvcihib29sIGluY2x1ZGVTZWxmID0gZmFsc2UpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIEFjY2Vzc2liaWxpdHk6OmV4cG9zZWRUYWJsZUFuY2VzdG9yKCp0aGlzLCBpbmNsdWRl
U2VsZik7IH0KLSAgICBib29sIHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NlbGVj
dGVkUm93cyk7IH0KKyAgICBib29sIHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NlbGVj
dGVkUm93cyk7IH0KICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1ucygpIGZp
bmFsIHsgcmV0dXJuIHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxB
WElEPihBWFByb3BlcnR5TmFtZTo6Q29sdW1ucykpOyB9CiAgICAgQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHJvd3MoKSBmaW5hbCB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVj
dG9yQXR0cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OlJvd3MpKTsgfQogICAgIHVu
c2lnbmVkIGNvbHVtbkNvdW50KCkgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNvbHVtbnMoKS5zaXplKCkpOyB9CiAgICAgdW5zaWduZWQgcm93Q291bnQoKSBmaW5hbCB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocm93cygpLnNpemUoKSk7IH0KLSAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVycmlkZSB7IHJldHVybiB0cmVlKCktPm9i
amVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OkNl
bGxzKSk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBmaW5hbCB7
IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJRD4o
QVhQcm9wZXJ0eU5hbWU6OkNlbGxzKSk7IH0KICAgICBBWElzb2xhdGVkT2JqZWN0KiBjZWxsRm9y
Q29sdW1uQW5kUm93KHVuc2lnbmVkLCB1bnNpZ25lZCkgZmluYWw7Ci0gICAgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNvbHVtbkhlYWRlcnMoKSBvdmVycmlkZTsKLSAgICBBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVycygpIG92ZXJyaWRlOwotICAgIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciB2aXNpYmxlUm93cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRyZWUoKS0+
b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihBWFByb3BlcnR5TmFtZTo6
VmlzaWJsZVJvd3MpKTsgfQorICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5I
ZWFkZXJzKCkgZmluYWw7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRl
cnMoKSBmaW5hbDsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJsZVJvd3Mo
KSBmaW5hbCB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFs
dWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OlZpc2libGVSb3dzKSk7IH0KICAgICBBWElzb2xhdGVk
T2JqZWN0KiBoZWFkZXJDb250YWluZXIoKSBmaW5hbCB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SGVhZGVyQ29udGFpbmVyKTsgfQotICAgIGludCBheENvbHVt
bkNvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OkFYQ29sdW1uQ291bnQpOyB9Ci0gICAgaW50IGF4Um93Q291bnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QVhSb3dD
b3VudCk7IH0KKyAgICBpbnQgYXhDb2x1bW5Db3VudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBWENvbHVtbkNvdW50KTsgfQorICAgIGlu
dCBheFJvd0NvdW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OkFYUm93Q291bnQpOyB9CiAKICAgICAvLyBUYWJsZSBjZWxsIHN1cHBvcnQu
CiAgICAgYm9vbCBpc1RhYmxlQ2VsbCgpIGNvbnN0IGZpbmFsOwpAQCAtMTYwLDEyOCArMTYwLDEy
OCBAQCBwcml2YXRlOgogICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHJvd0luZGV4
UmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpbmRleFJhbmdlUGFpckF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpSb3dJbmRleFJhbmdlKTsgfQogICAgIC8vIFJldHVybnMgdGhlIHN0
YXJ0IGxvY2F0aW9uIGFuZCBjb2x1bW4gc3BhbiBvZiB0aGUgY2VsbC4KICAgICBzdGQ6OnBhaXI8
dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5JbmRleFJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gaW5kZXhSYW5nZVBhaXJBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sdW1uSW5k
ZXhSYW5nZSk7IH0KLSAgICBpbnQgYXhDb2x1bW5JbmRleCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBWENvbHVtbkluZGV4KTsgfQot
ICAgIGludCBheFJvd0luZGV4KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFYUm93SW5kZXgpOyB9CisgICAgaW50IGF4Q29sdW1uSW5k
ZXgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6QVhDb2x1bW5JbmRleCk7IH0KKyAgICBpbnQgYXhSb3dJbmRleCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBWFJvd0luZGV4KTsgfQog
ICAgIGJvb2wgaXNDb2x1bW5IZWFkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQ29sdW1uSGVhZGVyKTsgfQogICAgIGJvb2wgaXNS
b3dIZWFkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OklzUm93SGVhZGVyKTsgfQogICAgIFN0cmluZyBjZWxsU2NvcGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2VsbFNj
b3BlKTsgfQogICAgIEFYSUQgcm93R3JvdXBBbmNlc3RvcklEKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gcHJvcGVydHlWYWx1ZTxBWElEPihBWFByb3BlcnR5TmFtZTo6Um93R3JvdXBBbmNlc3RvcklE
KTsgfQogCiAgICAgLy8gVGFibGUgY29sdW1uIHN1cHBvcnQuCi0gICAgYm9vbCBpc1RhYmxlQ29s
dW1uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpJc1RhYmxlQ29sdW1uKTsgfQotICAgIHVuc2lnbmVkIGNvbHVtbkluZGV4KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6Q29sdW1uSW5kZXgpOyB9CisgICAgYm9vbCBpc1RhYmxlQ29sdW1uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ29sdW1u
KTsgfQorICAgIHVuc2lnbmVkIGNvbHVtbkluZGV4KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdW5z
aWduZWRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sdW1uSW5kZXgpOyB9CiAgICAg
QVhJc29sYXRlZE9iamVjdCogY29sdW1uSGVhZGVyKCkgZmluYWwgeyByZXR1cm4gb2JqZWN0QXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbHVtbkhlYWRlcik7IH0KIAogICAgIC8vIFRh
YmxlIHJvdyBzdXBwb3J0LgotICAgIGJvb2wgaXNUYWJsZVJvdygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUYWJsZVJvdyk7IH0K
LSAgICB1bnNpZ25lZCByb3dJbmRleCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHVuc2lnbmVk
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJvd0luZGV4KTsgfQorICAgIGJvb2wgaXNU
YWJsZVJvdygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNUYWJsZVJvdyk7IH0KKyAgICB1bnNpZ25lZCByb3dJbmRleCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJvd0lu
ZGV4KTsgfQogICAgIEFYSXNvbGF0ZWRPYmplY3QqIHJvd0hlYWRlcigpIGZpbmFsIHsgcmV0dXJu
IG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpSb3dIZWFkZXIpOyB9OwogCiAg
ICAgLy8gQVJJQSB0cmVlL2dyaWQgcm93IHN1cHBvcnQuCi0gICAgYm9vbCBpc0FSSUFUcmVlR3Jp
ZFJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNBUklBVHJlZUdyaWRSb3cpOyB9Ci0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIGRpc2Nsb3NlZFJvd3MoKSBvdmVycmlkZSB7IHJldHVybiB0cmVlKCktPm9iamVjdHNG
b3JJRHModmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OkRpc2Nsb3Nl
ZFJvd3MpKTsgfQorICAgIGJvb2wgaXNBUklBVHJlZUdyaWRSb3coKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQVJJQVRyZWVHcmlkUm93
KTsgfQorICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBkaXNjbG9zZWRSb3dzKCkgZmlu
YWwgeyByZXR1cm4gdHJlZSgpLT5vYmplY3RzRm9ySURzKHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFY
SUQ+KEFYUHJvcGVydHlOYW1lOjpEaXNjbG9zZWRSb3dzKSk7IH0KICAgICBBWElzb2xhdGVkT2Jq
ZWN0KiBkaXNjbG9zZWRCeVJvdygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEaXNjbG9zZWRCeVJvdyk7IH0KIAotICAgIGJvb2wgaXNG
aWVsZHNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNGaWVsZHNldCk7IH0KLSAgICBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNDaGVj
a2VkKTsgfQotICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0VuYWJsZWQpOyB9Ci0gICAgYm9vbCBp
c1NlbGVjdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc1NlbGVjdGVkKTsgfQotICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJlZSgpLT5mb2N1c2VkTm9kZUlEKCkgPT0gb2JqZWN0SUQoKTsg
fQotICAgIGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTXVsdGlTZWxlY3RhYmxlKTsgfQor
ICAgIGJvb2wgaXNGaWVsZHNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNGaWVsZHNldCk7IH0KKyAgICBib29sIGlzQ2hlY2tlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNDaGVja2VkKTsgfQorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0VuYWJsZWQpOyB9CisgICAgYm9v
bCBpc1NlbGVjdGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc1NlbGVjdGVkKTsgfQorICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJlZSgpLT5mb2N1c2VkTm9kZUlEKCkgPT0gb2JqZWN0SUQoKTsgfQor
ICAgIGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTXVsdGlTZWxlY3RhYmxlKTsgfQogICAgIElu
c2lkZUxpbmsgaW5zaWRlTGluaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHByb3BlcnR5VmFsdWU8
SW5zaWRlTGluaz4oQVhQcm9wZXJ0eU5hbWU6Okluc2lkZUxpbmspOyB9Ci0gICAgYm9vbCBpc1Jl
cXVpcmVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc1JlcXVpcmVkKTsgfQotICAgIGJvb2wgc3VwcG9ydHNSZXF1aXJlZEF0dHJp
YnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6U3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSk7IH0KLSAgICBib29sIGlzRXhwYW5k
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzRXhwYW5kZWQpOyB9CisgICAgYm9vbCBpc1JlcXVpcmVkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1JlcXVpcmVkKTsg
fQorICAgIGJvb2wgc3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNSZXF1aXJlZEF0
dHJpYnV0ZSk7IH0KKyAgICBib29sIGlzRXhwYW5kZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzRXhwYW5kZWQpOyB9CiAgICAgRmxv
YXRQb2ludCBzY3JlZW5SZWxhdGl2ZVBvc2l0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgRmxvYXRS
ZWN0IHJlbGF0aXZlRnJhbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgcmVsYXRp
dmVGcmFtZSgpIGNvbnN0IGZpbmFsOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBGbG9hdFJlY3Qg
cHJpbWFyeVNjcmVlblJlY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgcHJpbWFy
eVNjcmVlblJlY3QoKSBjb25zdCBmaW5hbDsKICNlbmRpZgogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QocmVsYXRpdmVGcmFt
ZSgpKSkuc2l6ZSgpOyB9CiAgICAgRmxvYXRSZWN0IHJlbGF0aXZlRnJhbWVGcm9tQ2hpbGRyZW4o
KSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRz
RGF0ZXRpbWVBdHRyaWJ1dGUpOyB9Ci0gICAgU3RyaW5nIGRhdGV0aW1lQXR0cmlidXRlVmFsdWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6RGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSk7IH0KLSAgICBib29sIGNhblNldFZhbHVlQXR0
cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpDYW5TZXRWYWx1ZUF0dHJpYnV0ZSk7IH0KLSAgICBib29sIGNhblNldFNlbGVj
dGVkQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpDYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSk7IH0KLSAgICBib29sIGNh
blNldFNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhblNldFNlbGVjdGVkQ2hpbGRyZW4pOyB9CisgICAg
Ym9vbCBzdXBwb3J0c0RhdGV0aW1lQXR0cmlidXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0RhdGV0aW1lQXR0cmlidXRl
KTsgfQorICAgIFN0cmluZyBkYXRldGltZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRhdGV0aW1lQXR0cmli
dXRlVmFsdWUpOyB9CisgICAgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0VmFsdWVB
dHRyaWJ1dGUpOyB9CisgICAgYm9vbCBjYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0U2Vs
ZWN0ZWRBdHRyaWJ1dGUpOyB9CisgICAgYm9vbCBjYW5TZXRTZWxlY3RlZENoaWxkcmVuKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDYW5T
ZXRTZWxlY3RlZENoaWxkcmVuKTsgfQogICAgIC8vIFdlIHNob3VsZCBuZXZlciBjcmVhdGUgYW4g
aXNvbGF0ZWQgb2JqZWN0IGZyb20gYW4gaWdub3JlZCBsaXZlIG9iamVjdCwgc28gd2UgY2FuIGhh
cmRjb2RlIHRoaXMgdG8gZmFsc2UuCi0gICAgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB1bnNpZ25lZCBibG9ja3F1b3Rl
TGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB1bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpCbG9ja3F1b3RlTGV2ZWwpOyB9Ci0gICAgdW5zaWduZWQgaGVhZGluZ0xl
dmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SGVhZGluZ0xldmVsKTsgfQotICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0
ZSBjaGVja2JveE9yUmFkaW9WYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHByb3BlcnR5
VmFsdWU8QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlPihBWFByb3BlcnR5TmFtZTo6QnV0dG9uU3Rh
dGUpOyB9Ci0gICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFsdWVEZXNjcmlwdGlv
bik7IH0KLSAgICBmbG9hdCB2YWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFsdWVGb3JSYW5nZSk7IH0KLSAg
ICBmbG9hdCBtYXhWYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmxvYXRB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF4VmFsdWVGb3JSYW5nZSk7IH0KLSAgICBm
bG9hdCBtaW5WYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmxvYXRBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWluVmFsdWVGb3JSYW5nZSk7IH0KLSAgICBpbnQg
bGF5b3V0Q291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBkb3VibGUgbG9hZGluZ1Byb2dyZXNz
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJlZSgpLT5sb2FkaW5nUHJvZ3Jlc3MoKTsgfQot
ICAgIGJvb2wgc3VwcG9ydHNBUklBT3ducygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBT3ducyk7IH0KLSAgICBT
dHJpbmcgcG9wdXBWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpQb3B1cFZhbHVlKTsgfQotICAgIGJvb2wgcHJlc3NlZElz
UHJlc2VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBpbnZhbGlkU3RhdHVzKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OkludmFsaWRTdGF0dXMpOyB9Ci0gICAgYm9vbCBzdXBwb3J0c0V4cGFuZGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0
c0V4cGFuZGVkKTsgfQotICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uIHNvcnREaXJlY3Rp
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5U29y
dERpcmVjdGlvbj4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlNvcnREaXJlY3Rp
b24pKTsgfQotICAgIGJvb2wgc3VwcG9ydHNSYW5nZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1JhbmdlVmFs
dWUpOyB9Ci0gICAgU3RyaW5nIGlkZW50aWZpZXJBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBTdHJpbmcgbGlua1JlbFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFN0
cmluZz4gY2xhc3NMaXN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQWNjZXNzaWJpbGl0eUN1cnJl
bnRTdGF0ZSBjdXJyZW50U3RhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q3VycmVudFN0YXRlKSk7IH0KLSAgICBib29sIHN1cHBvcnRzQ3VycmVudCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3Vw
cG9ydHNDdXJyZW50KTsgfQotICAgIGJvb2wgc3VwcG9ydHNLZXlTaG9ydGN1dHMoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBv
cnRzS2V5U2hvcnRjdXRzKTsgfQotICAgIFN0cmluZyBrZXlTaG9ydGN1dHMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6S2V5U2hv
cnRjdXRzKTsgfQotICAgIGJvb2wgc3VwcG9ydHNTZXRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NldFNpemUp
OyB9Ci0gICAgYm9vbCBzdXBwb3J0c1Bvc0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1Bvc0luU2V0KTsgfQot
ICAgIGludCBzZXRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlNldFNpemUpOyB9Ci0gICAgaW50IHBvc0luU2V0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlBvc0lu
U2V0KTsgfQotICAgIGJvb2wgc3VwcG9ydHNEcm9wcGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNEcm9wcGluZyk7
IH0KLSAgICBib29sIHN1cHBvcnRzRHJhZ2dpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRHJhZ2dpbmcpOyB9Ci0g
ICAgYm9vbCBpc0dyYWJiZWQoKSBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OklzR3JhYmJlZCk7IH0KLSAgICBWZWN0b3I8U3RyaW5nPiBkZXRlcm1p
bmVEcm9wRWZmZWN0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdW5zaWduZWQgYmxv
Y2txdW90ZUxldmVsKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6QmxvY2txdW90ZUxldmVsKTsgfQorICAgIHVuc2lnbmVkIGhlYWRp
bmdMZXZlbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OkhlYWRpbmdMZXZlbCk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5QnV0dG9uU3Rh
dGUgY2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBwcm9wZXJ0eVZh
bHVlPEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZT4oQVhQcm9wZXJ0eU5hbWU6OkJ1dHRvblN0YXRl
KTsgfQorICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlRGVzY3JpcHRpb24pOyB9
CisgICAgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZsb2F0QXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlRm9yUmFuZ2UpOyB9CisgICAgZmxvYXQg
bWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZsb2F0QXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6Ok1heFZhbHVlRm9yUmFuZ2UpOyB9CisgICAgZmxvYXQgbWluVmFs
dWVGb3JSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZsb2F0QXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6Ok1pblZhbHVlRm9yUmFuZ2UpOyB9CisgICAgaW50IGxheW91dENvdW50KCkg
Y29uc3QgZmluYWw7CisgICAgZG91YmxlIGxvYWRpbmdQcm9ncmVzcygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRyZWUoKS0+bG9hZGluZ1Byb2dyZXNzKCk7IH0KKyAgICBib29sIHN1cHBvcnRzQVJJ
QU93bnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OlN1cHBvcnRzQVJJQU93bnMpOyB9CisgICAgU3RyaW5nIHBvcHVwVmFsdWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6UG9w
dXBWYWx1ZSk7IH0KKyAgICBib29sIHByZXNzZWRJc1ByZXNlbnQoKSBjb25zdCBmaW5hbDsKKyAg
ICBTdHJpbmcgaW52YWxpZFN0YXR1cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJbnZhbGlkU3RhdHVzKTsgfQorICAgIGJvb2wgc3Vw
cG9ydHNFeHBhbmRlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6U3VwcG9ydHNFeHBhbmRlZCk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5U29y
dERpcmVjdGlvbiBzb3J0RGlyZWN0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpTb3J0RGlyZWN0aW9uKSk7IH0KKyAgICBib29sIHN1cHBvcnRzUmFuZ2VWYWx1ZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
U3VwcG9ydHNSYW5nZVZhbHVlKTsgfQorICAgIFN0cmluZyBpZGVudGlmaWVyQXR0cmlidXRlKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIGxpbmtSZWxWYWx1ZSgpIGNvbnN0IGZpbmFsOworICAg
IFZlY3RvcjxTdHJpbmc+IGNsYXNzTGlzdCgpIGNvbnN0IGZpbmFsOworICAgIEFjY2Vzc2liaWxp
dHlDdXJyZW50U3RhdGUgY3VycmVudFN0YXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OkN1cnJlbnRTdGF0ZSkpOyB9CisgICAgYm9vbCBzdXBwb3J0c0N1cnJlbnQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1
cHBvcnRzQ3VycmVudCk7IH0KKyAgICBib29sIHN1cHBvcnRzS2V5U2hvcnRjdXRzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0
c0tleVNob3J0Y3V0cyk7IH0KKyAgICBTdHJpbmcga2V5U2hvcnRjdXRzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OktleVNob3J0Y3V0
cyk7IH0KKyAgICBib29sIHN1cHBvcnRzU2V0U2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNTZXRTaXplKTsgfQorICAg
IGJvb2wgc3VwcG9ydHNQb3NJblNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNQb3NJblNldCk7IH0KKyAgICBpbnQgc2V0
U2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpTZXRTaXplKTsgfQorICAgIGludCBwb3NJblNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpQb3NJblNldCk7IH0KKyAgICBib29s
IHN1cHBvcnRzRHJvcHBpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRHJvcHBpbmcpOyB9CisgICAgYm9vbCBzdXBwb3J0
c0RyYWdnaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpTdXBwb3J0c0RyYWdnaW5nKTsgfQorICAgIGJvb2wgaXNHcmFiYmVkKCkgZmlu
YWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0dyYWJiZWQp
OyB9CisgICAgVmVjdG9yPFN0cmluZz4gZGV0ZXJtaW5lRHJvcEVmZmVjdHMoKSBjb25zdCBmaW5h
bDsKICAgICBBWElzb2xhdGVkT2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQ
b2ludCYpIGNvbnN0IGZpbmFsOwogICAgIEFYSXNvbGF0ZWRPYmplY3QqIGZvY3VzZWRVSUVsZW1l
bnQoKSBjb25zdCBmaW5hbDsKLSAgICBBWElzb2xhdGVkT2JqZWN0KiBwYXJlbnRPYmplY3RVbmln
bm9yZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
bGlua2VkT2JqZWN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRyZWUoKS0+b2JqZWN0c0Zv
cklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihBWFByb3BlcnR5TmFtZTo6TGlua2VkT2Jq
ZWN0cykpOyB9CisgICAgQVhJc29sYXRlZE9iamVjdCogcGFyZW50T2JqZWN0VW5pZ25vcmVkKCkg
Y29uc3QgZmluYWw7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtlZE9iamVj
dHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0
cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OkxpbmtlZE9iamVjdHMpKTsgfQogICAg
IEFYSXNvbGF0ZWRPYmplY3QqIHRpdGxlVUlFbGVtZW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
b2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlRpdGxlVUlFbGVtZW50KTsgfQog
ICAgIEFYSXNvbGF0ZWRPYmplY3QqIHNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24p
IGZpbmFsOwotICAgIGNvbnN0IFN0cmluZyBwbGFjZWhvbGRlclZhbHVlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlBsYWNlaG9s
ZGVyVmFsdWUpOyB9Ci0gICAgU3RyaW5nIGV4cGFuZGVkVGV4dFZhbHVlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkV4cGFuZGVk
VGV4dFZhbHVlKTsgfQotICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3Vw
cG9ydHNFeHBhbmRlZFRleHRWYWx1ZSk7IH0KLSAgICBTUkdCQTx1aW50OF90PiBjb2xvclZhbHVl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJvbGU+KGludEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpSb2xlVmFsdWUpKTsgfQotICAgIFN0cmluZyBy
b2xlUGxhdGZvcm1TdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Um9sZVBsYXRmb3JtU3RyaW5nKTsgfQotICAgIFN0cmlu
ZyByb2xlRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Um9sZURlc2NyaXB0aW9uKTsgfQotICAgIFN0cmluZyBz
dWJyb2xlUGxhdGZvcm1TdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3Vicm9sZVBsYXRmb3JtU3RyaW5nKTsgfQotICAg
IExheW91dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBTdHJp
bmcgcGxhY2Vob2xkZXJWYWx1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlclZhbHVlKTsgfQorICAgIFN0cmluZyBl
eHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpFeHBhbmRlZFRleHRWYWx1ZSk7IH0KKyAgICBib29sIHN1cHBv
cnRzRXhwYW5kZWRUZXh0VmFsdWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUpOyB9CisgICAg
U1JHQkE8dWludDhfdD4gY29sb3JWYWx1ZSgpIGNvbnN0IGZpbmFsOworICAgIEFjY2Vzc2liaWxp
dHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlSb2xlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Um9sZVZhbHVl
KSk7IH0KKyAgICBTdHJpbmcgcm9sZVBsYXRmb3JtU3RyaW5nKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVQbGF0Zm9ybVN0cmlu
Zyk7IH0KKyAgICBTdHJpbmcgcm9sZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbik7IH0K
KyAgICBTdHJpbmcgc3Vicm9sZVBsYXRmb3JtU3RyaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1YnJvbGVQbGF0Zm9ybVN0cmlu
Zyk7IH0KKyAgICBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3QgZmluYWw7CiAgICAgSW50
UG9pbnQgY2xpY2tQb2ludCgpIGZpbmFsOwotICAgIHZvaWQgYWNjZXNzaWJpbGl0eVRleHQoVmVj
dG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dHMpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmlu
ZyBicmFpbGxlTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6QnJhaWxsZUxhYmVsKTsgfQotICAgIFN0cmluZyBicmFpbGxl
Um9sZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkJyYWlsbGVSb2xlRGVzY3JpcHRpb24pOyB9Ci0gICAgU3Ry
aW5nIGVtYmVkZGVkSW1hZ2VEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpFbWJlZGRlZEltYWdlRGVzY3JpcHRp
b24pOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I+IGlt
YWdlT3ZlcmxheUVsZW1lbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0g
ICAgU3RyaW5nIGV4dGVuZGVkRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RXh0ZW5kZWREZXNjcmlwdGlvbik7
IH0KLSAgICBTdHJpbmcgY29tcHV0ZWRSb2xlU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVmFsdWVBdXRvZmlsbEF2YWlsYWJs
ZSk7IH0KLSAgICBBdXRvRmlsbEJ1dHRvblR5cGUgdmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBdXRvRmlsbEJ1dHRvblR5cGU+KGlu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpWYWx1ZUF1dG9maWxsQnV0dG9uVHlwZSkp
OyB9Ci0gICAgdm9pZCBhcmlhVHJlZVJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6QVJJQVRyZWVSb3dzLCBjaGlsZHJlbik7IH0KLSAgICBVUkwgdXJsKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdXJsQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlVSTCk7
IH0KLSAgICBTdHJpbmcgYWNjZXNzS2V5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc0tleSk7IH0KLSAgICBTdHJpbmcg
bG9jYWxpemVkQWN0aW9uVmVyYigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpMb2NhbGl6ZWRBY3Rpb25WZXJiKTsgfQotICAgIFN0
cmluZyBhY3Rpb25WZXJiKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjdGlvblZlcmIpOyB9Ci0gICAgU3RyaW5nIGF1dG9Db21w
bGV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OkF1dG9Db21wbGV0ZVZhbHVlKTsgfQotICAgIGJvb2wgaXNNYXRoRWxl
bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNNYXRoRWxlbWVudCk7IH0KLSAgICBib29sIGlzTWF0aEZyYWN0aW9uKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJ
c01hdGhGcmFjdGlvbik7IH0KLSAgICBib29sIGlzTWF0aEZlbmNlZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRmVuY2Vk
KTsgfQotICAgIGJvb2wgaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFN1YnNj
cmlwdFN1cGVyc2NyaXB0KTsgfQotICAgIGJvb2wgaXNNYXRoUm93KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhSb3cpOyB9
Ci0gICAgYm9vbCBpc01hdGhVbmRlck92ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFVuZGVyT3Zlcik7IH0KLSAgICBi
b29sIGlzTWF0aFJvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFJvb3QpOyB9Ci0gICAgYm9vbCBpc01hdGhTcXVhcmVS
b290KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpJc01hdGhTcXVhcmVSb290KTsgfQotICAgIGJvb2wgaXNNYXRoVGFibGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklz
TWF0aFRhYmxlKTsgfQotICAgIGJvb2wgaXNNYXRoVGFibGVSb3coKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRhYmxlUm93
KTsgfQotICAgIGJvb2wgaXNNYXRoVGFibGVDZWxsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhUYWJsZUNlbGwpOyB9Ci0g
ICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoTXVsdGlzY3JpcHQpOyB9Ci0gICAg
Ym9vbCBpc01hdGhUb2tlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVG9rZW4pOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I+IG1hdGhSYWRpY2FuZCgpIG92ZXJyaWRlOworICAg
IHZvaWQgYWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dHMp
IGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBicmFpbGxlTGFiZWwoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QnJhaWxsZUxhYmVsKTsg
fQorICAgIFN0cmluZyBicmFpbGxlUm9sZURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkJyYWlsbGVSb2xlRGVzY3Jp
cHRpb24pOyB9CisgICAgU3RyaW5nIGVtYmVkZGVkSW1hZ2VEZXNjcmlwdGlvbigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpFbWJlZGRl
ZEltYWdlRGVzY3JpcHRpb24pOyB9CisgICAgc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3I+IGltYWdlT3ZlcmxheUVsZW1lbnRzKCkgZmluYWwgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CisgICAgU3RyaW5nIGV4dGVuZGVkRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RXh0ZW5kZWREZXNj
cmlwdGlvbik7IH0KKyAgICBTdHJpbmcgY29tcHV0ZWRSb2xlU3RyaW5nKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVmFsdWVBdXRvZmlsbEF2YWls
YWJsZSk7IH0KKyAgICBBdXRvRmlsbEJ1dHRvblR5cGUgdmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGF0aWNfY2FzdDxBdXRvRmlsbEJ1dHRvblR5cGU+KGlu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpWYWx1ZUF1dG9maWxsQnV0dG9uVHlwZSkp
OyB9CisgICAgdm9pZCBhcmlhVHJlZVJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbikgZmluYWwgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6QVJJQVRyZWVSb3dzLCBjaGlsZHJlbik7IH0KKyAgICBVUkwgdXJsKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdXJsQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlVSTCk7IH0KKyAg
ICBTdHJpbmcgYWNjZXNzS2V5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc0tleSk7IH0KKyAgICBTdHJpbmcgbG9jYWxpemVk
QWN0aW9uVmVyYigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpMb2NhbGl6ZWRBY3Rpb25WZXJiKTsgfQorICAgIFN0cmluZyBhY3Rpb25W
ZXJiKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OkFjdGlvblZlcmIpOyB9CisgICAgU3RyaW5nIGF1dG9Db21wbGV0ZVZhbHVlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkF1
dG9Db21wbGV0ZVZhbHVlKTsgfQorICAgIGJvb2wgaXNNYXRoRWxlbWVudCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRWxlbWVu
dCk7IH0KKyAgICBib29sIGlzTWF0aEZyYWN0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhGcmFjdGlvbik7IH0KKyAgICBi
b29sIGlzTWF0aEZlbmNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRmVuY2VkKTsgfQorICAgIGJvb2wgaXNNYXRoU3Vic2Ny
aXB0U3VwZXJzY3JpcHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OklzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KTsgfQorICAgIGJvb2wg
aXNNYXRoUm93KCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc01hdGhSb3cpOyB9CisgICAgYm9vbCBpc01hdGhVbmRlck92ZXIoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0
aFVuZGVyT3Zlcik7IH0KKyAgICBib29sIGlzTWF0aFJvb3QoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFJvb3QpOyB9CisgICAg
Ym9vbCBpc01hdGhTcXVhcmVSb290KCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhTcXVhcmVSb290KTsgfQorICAgIGJvb2wgaXNN
YXRoVGFibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OklzTWF0aFRhYmxlKTsgfQorICAgIGJvb2wgaXNNYXRoVGFibGVSb3coKSBjb25z
dCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0
aFRhYmxlUm93KTsgfQorICAgIGJvb2wgaXNNYXRoVGFibGVDZWxsKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhUYWJsZUNlbGwp
OyB9CisgICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoTXVsdGlzY3JpcHQpOyB9Cisg
ICAgYm9vbCBpc01hdGhUb2tlbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVG9rZW4pOyB9CisgICAgc3RkOjpvcHRpb25hbDxB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I+IG1hdGhSYWRpY2FuZCgpIGZpbmFsOwogICAgIEFY
SXNvbGF0ZWRPYmplY3QqIG1hdGhSb290SW5kZXhPYmplY3QoKSBmaW5hbCB7IHJldHVybiBvYmpl
Y3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aFJvb3RJbmRleE9iamVjdCk7IH0K
ICAgICBBWElzb2xhdGVkT2JqZWN0KiBtYXRoVW5kZXJPYmplY3QoKSBmaW5hbCB7IHJldHVybiBv
YmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aFVuZGVyT2JqZWN0KTsgfQog
ICAgIEFYSXNvbGF0ZWRPYmplY3QqIG1hdGhPdmVyT2JqZWN0KCkgZmluYWwgeyByZXR1cm4gb2Jq
ZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhPdmVyT2JqZWN0KTsgfQpAQCAt
MjkwLDI0MiArMjkwLDI0MiBAQCBwcml2YXRlOgogICAgIEFYSXNvbGF0ZWRPYmplY3QqIG1hdGhC
YXNlT2JqZWN0KCkgZmluYWwgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6Ok1hdGhCYXNlT2JqZWN0KTsgfQogICAgIEFYSXNvbGF0ZWRPYmplY3QqIG1hdGhTdWJz
Y3JpcHRPYmplY3QoKSBmaW5hbCB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6TWF0aFN1YnNjcmlwdE9iamVjdCk7IH0KICAgICBBWElzb2xhdGVkT2JqZWN0KiBt
YXRoU3VwZXJzY3JpcHRPYmplY3QoKSBmaW5hbCB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6TWF0aFN1cGVyc2NyaXB0T2JqZWN0KTsgfQotICAgIFN0cmluZyBt
YXRoRmVuY2VkT3BlblN0cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoRmVuY2VkT3BlblN0cmluZyk7IH0KLSAgICBT
dHJpbmcgbWF0aEZlbmNlZENsb3NlU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3Ry
aW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhGZW5jZWRDbG9zZVN0cmluZyk7
IH0KLSAgICBpbnQgbWF0aExpbmVUaGlja25lc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBp
bnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aExpbmVUaGlja25lc3MpOyB9Ci0g
ICAgdm9pZCBtYXRoUHJlc2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMm
KSBvdmVycmlkZTsKLSAgICB2b2lkIG1hdGhQb3N0c2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11
bHRpc2NyaXB0UGFpcnMmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgbWF0aEZlbmNlZE9wZW5TdHJp
bmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6TWF0aEZlbmNlZE9wZW5TdHJpbmcpOyB9CisgICAgU3RyaW5nIG1hdGhGZW5jZWRDbG9z
ZVN0cmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpNYXRoRmVuY2VkQ2xvc2VTdHJpbmcpOyB9CisgICAgaW50IG1hdGhMaW5lVGhp
Y2tuZXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6Ok1hdGhMaW5lVGhpY2tuZXNzKTsgfQorICAgIHZvaWQgbWF0aFByZXNjcmlwdHMoQWNj
ZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgZmluYWw7CisgICAgdm9pZCBtYXRoUG9z
dHNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgZmluYWw7CiAjaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgU3RyaW5nIHNwZWVjaEhpbnRBdHRyaWJ1dGVWYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpTcGVlY2hIaW50KTsgfQotICAgIFN0cmluZyBkZXNjcmlwdGlvbkF0dHJpYnV0ZVZhbHVlKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGhlbHBUZXh0QXR0cmlidXRlVmFsdWUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGl0bGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIFN0cmluZyBzcGVlY2hIaW50QXR0cmlidXRlVmFsdWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3BlZWNoSGludCk7
IH0KKyAgICBTdHJpbmcgZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IGZpbmFsOwor
ICAgIFN0cmluZyBoZWxwVGV4dEF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgZmluYWw7CisgICAgU3Ry
aW5nIHRpdGxlQXR0cmlidXRlVmFsdWUoKSBjb25zdCBmaW5hbDsKICNlbmRpZgogI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBib29sIGNhcmV0QnJvd3NpbmdFbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDYXJldEJyb3dzaW5n
RW5hYmxlZCk7IH0KKyAgICBib29sIGNhcmV0QnJvd3NpbmdFbmFibGVkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDYXJldEJyb3dzaW5n
RW5hYmxlZCk7IH0KICNlbmRpZgotICAgIEFYSXNvbGF0ZWRPYmplY3QqIGZvY3VzYWJsZUFuY2Vz
dG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNzaWJpbGl0eTo6Zm9jdXNhYmxlQW5jZXN0b3Io
KnRoaXMpOyB9Ci0gICAgQVhJc29sYXRlZE9iamVjdCogaGlnaGVzdEVkaXRhYmxlQW5jZXN0b3Io
KSBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5OjpoaWdoZXN0RWRpdGFibGVBbmNlc3Rv
cigqdGhpcyk7IH0KLSAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b24+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpPcmllbnRhdGlvbikpOyB9Ci0g
ICAgdW5zaWduZWQgaGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB1
bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIaWVyYXJjaGljYWxMZXZlbCk7
IH0KLSAgICBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TGFuZ3VhZ2UpOyB9CisgICAgQVhJc29sYXRl
ZE9iamVjdCogZm9jdXNhYmxlQW5jZXN0b3IoKSBmaW5hbCB7IHJldHVybiBBY2Nlc3NpYmlsaXR5
Ojpmb2N1c2FibGVBbmNlc3RvcigqdGhpcyk7IH0KKyAgICBBWElzb2xhdGVkT2JqZWN0KiBoaWdo
ZXN0RWRpdGFibGVBbmNlc3RvcigpIGZpbmFsIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OmhpZ2hl
c3RFZGl0YWJsZUFuY2VzdG9yKCp0aGlzKTsgfQorICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlv
biBvcmllbnRhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlPcmllbnRhdGlvbj4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok9yaWVu
dGF0aW9uKSk7IH0KKyAgICB1bnNpZ25lZCBoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkhpZXJhcmNo
aWNhbExldmVsKTsgfQorICAgIFN0cmluZyBsYW5ndWFnZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpMYW5ndWFnZSk7IH0KICAgICBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbigpIGZpbmFsIHsgcmV0
dXJuIHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihBWFBy
b3BlcnR5TmFtZTo6U2VsZWN0ZWRDaGlsZHJlbikpOyB9Ci0gICAgdm9pZCBzZXRTZWxlY3RlZENo
aWxkcmVuKGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlOwotICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlQ2hpbGRyZW4oKSBvdmVycmlkZSB7
IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJRD4o
QVhQcm9wZXJ0eU5hbWU6OlZpc2libGVDaGlsZHJlbikpOyB9Ci0gICAgQXRvbVN0cmluZyB0YWdO
YW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBjaGlsZHJlbihib29sIHVwZGF0ZUNoaWxkcmVuSWZOZWVkZWQgPSB0cnVlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKSBvdmVycmlkZTsKLSAgICBi
b29sIGlzRGV0YWNoZWRGcm9tUGFyZW50KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTZWxlY3Rl
ZENoaWxkcmVuKGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGZpbmFsOworICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlQ2hpbGRyZW4oKSBmaW5hbCB7IHJl
dHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJRD4oQVhQ
cm9wZXJ0eU5hbWU6OlZpc2libGVDaGlsZHJlbikpOyB9CisgICAgQXRvbVN0cmluZyB0YWdOYW1l
KCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbihib29sIHVwZGF0ZUNoaWxkcmVuSWZOZWVkZWQgPSB0cnVlKSBmaW5hbDsKKyAgICB2
b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKSBmaW5hbDsKKyAgICBib29sIGlzRGV0YWNo
ZWRGcm9tUGFyZW50KCkgZmluYWw7CiAgICAgQVhJc29sYXRlZE9iamVjdCogbGl2ZVJlZ2lvbkFu
Y2VzdG9yKGJvb2wgZXhjbHVkZUlmT2ZmID0gdHJ1ZSkgY29uc3QgZmluYWwgeyByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6bGl2ZVJlZ2lvbkFuY2VzdG9yKCp0aGlzLCBleGNsdWRlSWZPZmYpOyB9Ci0g
ICAgY29uc3QgU3RyaW5nIGxpdmVSZWdpb25TdGF0dXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TGl2ZVJlZ2lvblN0YXR1cyk7
IH0KLSAgICBjb25zdCBTdHJpbmcgbGl2ZVJlZ2lvblJlbGV2YW50KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25S
ZWxldmFudCk7IH0KLSAgICBib29sIGxpdmVSZWdpb25BdG9taWMoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25BdG9t
aWMpOyB9Ci0gICAgYm9vbCBpc0J1c3koKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQnVzeSk7IH0KLSAgICBib29sIGlzSW5saW5l
VGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNJbmxpbmVUZXh0KTsgfQorICAgIGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uU3Rh
dHVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OkxpdmVSZWdpb25TdGF0dXMpOyB9CisgICAgY29uc3QgU3RyaW5nIGxpdmVSZWdpb25S
ZWxldmFudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpMaXZlUmVnaW9uUmVsZXZhbnQpOyB9CisgICAgYm9vbCBsaXZlUmVnaW9uQXRv
bWljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpMaXZlUmVnaW9uQXRvbWljKTsgfQorICAgIGJvb2wgaXNCdXN5KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0J1c3kpOyB9Cisg
ICAgYm9vbCBpc0lubGluZVRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW5saW5lVGV4dCk7IH0KICAgICAvLyBTcGluIGJ1dHRv
biBzdXBwb3J0LgogICAgIEFYSXNvbGF0ZWRPYmplY3QqIGluY3JlbWVudEJ1dHRvbigpIGZpbmFs
IHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJbmNyZW1lbnRC
dXR0b24pOyB9CiAgICAgQVhJc29sYXRlZE9iamVjdCogZGVjcmVtZW50QnV0dG9uKCkgZmluYWwg
eyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRlY3JlbWVudEJ1
dHRvbik7IH0KLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgZG9jdW1lbnRMaW5rcygp
IG92ZXJyaWRlIHsgcmV0dXJuIHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVW
YWx1ZTxBWElEPihBWFByb3BlcnR5TmFtZTo6RG9jdW1lbnRMaW5rcykpOyB9Ci0gICAgYm9vbCBz
dXBwb3J0c0NoZWNrZWRTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNDaGVja2VkU3RhdGUpOyB9CisgICAgQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGRvY3VtZW50TGlua3MoKSBmaW5hbCB7IHJldHVybiB0
cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0
eU5hbWU6OkRvY3VtZW50TGlua3MpKTsgfQorICAgIGJvb2wgc3VwcG9ydHNDaGVja2VkU3RhdGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OlN1cHBvcnRzQ2hlY2tlZFN0YXRlKTsgfQogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IHBsYXRmb3JtU3RyaW5nVmFsdWUoKSBjb25zdDsKIAogICAg
IC8vIFBhcmFtZXRlcml6ZWQgYXR0cmlidXRlIHJldHJpZXZhbC4KLSAgICBWZWN0b3I8U2ltcGxl
UmFuZ2U+IGZpbmRUZXh0UmFuZ2VzKGNvbnN0IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVy
aWEmKSBjb25zdCBvdmVycmlkZTsKLSAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtVGV4dE9wZXJh
dGlvbihjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqLCBBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBvdmVycmlkZTsKKyAgICBWZWN0b3I8U2ltcGxlUmFu
Z2U+IGZpbmRUZXh0UmFuZ2VzKGNvbnN0IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEm
KSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtVGV4dE9wZXJhdGlvbihj
b25zdCBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiYpIGZpbmFsOworICAgIHZvaWQgZmluZE1h
dGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqLCBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBmaW5hbDsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wg
cHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6UHJldmVudEtleWJvYXJkRE9NRXZl
bnREaXNwYXRjaCk7IH0KKyAgICBib29sIHByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2go
KSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OlByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2gpOyB9CiAjZW5kaWYKIAogICAgIC8vIENo
YXJhY3RlclJhbmdlIHN1cHBvcnQuCi0gICAgQ2hhcmFjdGVyUmFuZ2Ugc2VsZWN0ZWRUZXh0UmFu
Z2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBpbnQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgQ2hhcmFjdGVyUmFuZ2UgZG9BWFJhbmdlRm9yTGluZSh1bnNp
Z25lZCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGRvQVhTdHJpbmdGb3JSYW5nZShjb25z
dCBDaGFyYWN0ZXJSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIENoYXJhY3RlclJhbmdlIGNo
YXJhY3RlclJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBDaGFyYWN0ZXJSYW5nZSBkb0FYUmFuZ2VGb3JJbmRleCh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgQ2hhcmFjdGVyUmFuZ2UgZG9BWFN0eWxlUmFuZ2VGb3JJbmRleCh1bnNpZ25lZCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBkb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJh
Y3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIElu
dFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlKGNvbnN0IENoYXJhY3RlclJhbmdlJikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdW5zaWduZWQgZG9BWExpbmVGb3JJbmRleCh1bnNpZ25lZCkgb3ZlcnJpZGU7
Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRp
b25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5n
ZT4gc2ltcGxlUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFYVGV4dE1hcmtl
clJhbmdlIHRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIENoYXJhY3RlclJh
bmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgZmluYWw7CisgICAgaW50IGluc2VydGlvblBv
aW50TGluZU51bWJlcigpIGNvbnN0IGZpbmFsOworICAgIENoYXJhY3RlclJhbmdlIGRvQVhSYW5n
ZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkb0FYU3RyaW5nRm9y
UmFuZ2UoY29uc3QgQ2hhcmFjdGVyUmFuZ2UmKSBjb25zdCBmaW5hbDsKKyAgICBDaGFyYWN0ZXJS
YW5nZSBjaGFyYWN0ZXJSYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7
CisgICAgQ2hhcmFjdGVyUmFuZ2UgZG9BWFJhbmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0IGZp
bmFsOworICAgIENoYXJhY3RlclJhbmdlIGRvQVhTdHlsZVJhbmdlRm9ySW5kZXgodW5zaWduZWQp
IGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0
ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyUmFuZ2UmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0
IGRvQVhCb3VuZHNGb3JSYW5nZShjb25zdCBDaGFyYWN0ZXJSYW5nZSYpIGNvbnN0IGZpbmFsOwor
ICAgIHVuc2lnbmVkIGRvQVhMaW5lRm9ySW5kZXgodW5zaWduZWQpIGZpbmFsOworCisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFNlbGVj
dGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25z
dCBmaW5hbDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNpbXBsZVJhbmdlKCkg
Y29uc3QgZmluYWw7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFu
Z2UoKSBjb25zdCBmaW5hbDsKKyAgICBBWFRleHRNYXJrZXJSYW5nZSB0ZXh0TWFya2VyUmFuZ2Uo
KSBjb25zdCBmaW5hbDsKIAogICAgIC8vIFRPRE86IFRleHQgcmFuZ2VzIGFuZCBzZWxlY3Rpb24u
Ci0gICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JVbm9yZGVyZWRQb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcG9z
aXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHBvc2l0aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgbGVm
dExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBv
dmVycmlkZTsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByaWdodExpbmVWaXNpYmxlUG9zaXRp
b25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZTsKLSAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSBzZW50ZW5jZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHBhcmFncmFwaEZv
clBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZp
c2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mKSBjb25zdCBvdmVycmlkZTsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxl
UG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IENoYXJhY3RlclJhbmdlJikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgbGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VGb3JDaGFyYWN0ZXJSYW5nZShjb25zdCBDaGFyYWN0ZXJSYW5nZSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdCBmaW5hbDsKKyAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWdu
ZWQpIGNvbnN0IGZpbmFsOworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlv
blJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IGZpbmFsOworICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHBvc2l0aW9uT2ZMZWZ0V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBmaW5hbDsK
KyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwb3NpdGlvbk9mUmlnaHRXb3JkKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpIGNvbnN0IGZpbmFsOworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIGxlZnRM
aW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgZmlu
YWw7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgZmluYWw7CisgICAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2Ugc2VudGVuY2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25z
dCBmaW5hbDsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwYXJhZ3JhcGhGb3JQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBmaW5hbDsKKyAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSBzdHlsZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qg
ZmluYWw7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JS
YW5nZShjb25zdCBDaGFyYWN0ZXJSYW5nZSYpIGNvbnN0IGZpbmFsOworICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNv
bnN0IGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yQ2hhcmFj
dGVyUmFuZ2UoY29uc3QgQ2hhcmFjdGVyUmFuZ2UmKSBjb25zdCBmaW5hbDsKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBBWFRleHRNYXJrZXJSYW5nZSB0ZXh0TWFya2VyUmFuZ2VGb3JOU1Jhbmdl
KGNvbnN0IE5TUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWFRleHRNYXJrZXJSYW5nZSB0
ZXh0TWFya2VyUmFuZ2VGb3JOU1JhbmdlKGNvbnN0IE5TUmFuZ2UmKSBjb25zdCBmaW5hbDsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBBWFRleHRNYXJrZXJSYW5nZSBzZWxlY3RlZFRl
eHRNYXJrZXJSYW5nZSgpIG92ZXJyaWRlOworICAgIEFYVGV4dE1hcmtlclJhbmdlIHNlbGVjdGVk
VGV4dE1hcmtlclJhbmdlKCkgZmluYWw7CiAjZW5kaWYKLSAgICBTdHJpbmcgc3RyaW5nRm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGJvdW5k
c0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lRW5kUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25z
dCBvdmVycmlkZTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEVuZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZpc2libGVQb3Np
dGlvbiBwcmV2aW91c1BhcmFncmFwaFN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZv
ckluZGV4KHVuc2lnbmVkLCBib29sIGxhc3RJbmRleE9LKSBjb25zdCBvdmVycmlkZTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50KSBjb25zdCBvdmVycmlk
ZTsKLSAgICBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50IGxpbmVGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdl
PiB2aXNpYmxlQ2hhcmFjdGVyUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBGbG9hdFJlY3Qg
dW5vYnNjdXJlZENvbnRlbnRSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN0cmlu
Z0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBi
b3VuZHNGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0IGZpbmFsOworICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0
IGZpbmFsOworICAgIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZUVuZFBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpIGNvbnN0IGZpbmFsOworICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c0xpbmVTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IGZpbmFsOwor
ICAgIFZpc2libGVQb3NpdGlvbiBuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBmaW5hbDsKKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNTZW50
ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgZmluYWw7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBmaW5hbDsKKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNQYXJh
Z3JhcGhTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IGZpbmFsOwor
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1bnNpZ25lZCwgYm9v
bCBsYXN0SW5kZXhPSykgY29uc3QgZmluYWw7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkZvckluZGV4KGludCkgY29uc3QgZmluYWw7CisgICAgaW50IGluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IGZpbmFsOworICAgIGludCBs
aW5lRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgZmluYWw7CisgICAg
c3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gdmlzaWJsZUNoYXJhY3RlclJhbmdlKCkgY29uc3Qg
ZmluYWw7CisgICAgRmxvYXRSZWN0IHVub2JzY3VyZWRDb250ZW50UmVjdCgpIGNvbnN0IGZpbmFs
OwogICAgIAogICAgIC8vIEF0dHJpYnV0ZSBzZXR0ZXJzLgotICAgIHZvaWQgc2V0QVJJQUdyYWJi
ZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRJc0V4cGFuZGVkKGJvb2wpIG92ZXJyaWRl
OwotICAgIGJvb2wgc2V0VmFsdWUoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QVJJQUdy
YWJiZWQoYm9vbCkgZmluYWw7CisgICAgdm9pZCBzZXRJc0V4cGFuZGVkKGJvb2wpIGZpbmFsOwor
ICAgIGJvb2wgc2V0VmFsdWUoZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgc2V0VmFsdWVJZ25vcmlu
Z1Jlc3VsdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZChib29sKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldFNlbGVjdGVkUm93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
U2VsZWN0ZWRUZXh0UmFuZ2UoQ2hhcmFjdGVyUmFuZ2UmJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBz
ZXRWYWx1ZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNlbGVjdGVkKGJv
b2wpIGZpbmFsOworICAgIHZvaWQgc2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYmKSBmaW5hbDsKKyAgICB2b2lkIHNldEZvY3VzZWQoYm9vbCkgZmluYWw7CisgICAg
dm9pZCBzZXRTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgdm9pZCBzZXRT
ZWxlY3RlZFRleHRSYW5nZShDaGFyYWN0ZXJSYW5nZSYmKSBmaW5hbDsKKyAgICBib29sIHNldFZh
bHVlKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIHZvaWQgc2V0VmFsdWVJZ25vcmluZ1Jlc3Vs
dChjb25zdCBTdHJpbmcmKSBmaW5hbDsKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBzZXRD
YXJldEJyb3dzaW5nRW5hYmxlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldENhcmV0QnJv
d3NpbmdFbmFibGVkKGJvb2wpIGZpbmFsOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgdm9pZCBzZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKGJvb2wpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChib29sKSBmaW5h
bDsKICNlbmRpZgogCi0gICAgU3RyaW5nIHRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRl
eHRVbmRlckVsZW1lbnRNb2RlID0gQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlKCkp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1pc3NwZWxs
aW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9u
KSBjb25zdCBvdmVycmlkZTsKLSAgICBGbG9hdFJlY3QgY29udmVydEZyYW1lVG9TcGFjZShjb25z
dCBGbG9hdFJlY3QmLCBBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIGluY3JlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVjcmVtZW50KCkg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBwZXJmb3JtRGlzbWlzc0FjdGlvbigpIG92ZXJyaWRlOworICAg
IFN0cmluZyB0ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9k
ZSA9IEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZSgpKSBjb25zdCBmaW5hbDsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3QgZmluYWw7CisgICAg
RmxvYXRSZWN0IGNvbnZlcnRGcmFtZVRvU3BhY2UoY29uc3QgRmxvYXRSZWN0JiwgQWNjZXNzaWJp
bGl0eUNvbnZlcnNpb25TcGFjZSkgY29uc3QgZmluYWw7CisgICAgdm9pZCBpbmNyZW1lbnQoKSBm
aW5hbDsKKyAgICB2b2lkIGRlY3JlbWVudCgpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybURpc21p
c3NBY3Rpb24oKSBmaW5hbDsKICAgICB2b2lkIHBlcmZvcm1EaXNtaXNzQWN0aW9uSWdub3JpbmdS
ZXN1bHQoKSBmaW5hbDsKLSAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGUoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoSW50UmVjdCYm
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQm
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCByZXBsYWNlVGV4dEluUmFuZ2UoY29uc3QgU3Ry
aW5nJiwgY29uc3QgQ2hhcmFjdGVyUmFuZ2UmKSBvdmVycmlkZTsKLSAgICBib29sIGluc2VydFRl
eHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwcmVzcygpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2Ny
b2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhJbnRSZWN0JiYpIGNvbnN0IGZpbmFsOworICAg
IHZvaWQgc2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludCYmKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIHJlcGxhY2VUZXh0SW5SYW5nZShjb25zdCBTdHJpbmcmLCBjb25zdCBDaGFyYWN0ZXJSYW5n
ZSYpIGZpbmFsOworICAgIGJvb2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAg
ICBib29sIHByZXNzKCkgZmluYWw7CiAKLSAgICBib29sIGlzQWNjZXNzaWJpbGl0eU9iamVjdCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FjY2Vzc2liaWxp
dHlPYmplY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gRnVuY3Rp
b25zIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhbiBpc29sYXRlZCB0cmVlIG9iamVj
dC4gQVNTRVJUIHRoYXQgdGhlc2UgYXJlIG5vdCByZWFjaGVkOwotICAgIGJvb2wgaXNBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0FjY2Vzc2li
aWxpdHlUYWJsZUluc3RhbmNlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0FjY2Vzc2li
aWxpdHlBUklBR3JpZEluc3RhbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICBib29sIGlzQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93SW5zdGFuY2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5QVJJQUdyaWRD
ZWxsSW5zdGFuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgYm9v
bCBpc05hdGl2ZVRleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0xpc3RC
b3hPcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTW9ja09iamVjdCgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIGJvb2wgaXNOb25OYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgaXNJbmRldGVybWluYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0luZGV0ZXJtaW5hdGUpOyB9Ci0g
ICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGxvYWRpbmdQcm9ncmVz
cygpID49IDE7IH0KLSAgICBib29sIGlzT25TY3JlZW4oKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzT2ZmU2NyZWVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1ByZXNzZWQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNWaXNpYmxlKTsgfQotICAg
IGJvb2wgaXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
aGFzQm9sZEZvbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6Okhhc0JvbGRGb250KTsgfQotICAgIGJvb2wgaGFzSXRhbGljRm9udCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6SGFzSXRhbGljRm9udCk7IH0KLSAgICBib29sIGhhc01pc3NwZWxsaW5nKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBoYXNQbGFpblRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okhhc1BsYWluVGV4dCk7IH0KLSAgICBi
b29sIGhhc1NhbWVGb250KGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IGJvb2wgaGFzU2FtZUZvbnRDb2xvcihjb25zdCBBWENvcmVPYmplY3QmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGhhc1NhbWVTdHlsZShjb25zdCBBWENvcmVPYmplY3QmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGhhc1VuZGVybGluZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGFzVW5kZXJsaW5lKTsgfQotICAgIGJv
b2wgaGFzSGlnaGxpZ2h0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIYXNIaWdobGlnaHRpbmcpOyB9CisgICAgYm9vbCBpc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzQWNjZXNz
aWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzQWNjZXNzaWJp
bGl0eUFSSUFHcmlkSW5zdGFuY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3dJbnN0YW5jZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGxJbnN0
YW5jZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIGlzTmF0aXZl
VGV4dENvbnRyb2woKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzTGlzdEJveE9wdGlvbigpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgaXNNb2NrT2JqZWN0KCkgY29uc3QgZmluYWw7CisgICAgYm9v
bCBpc05vbk5hdGl2ZVRleHRDb250cm9sKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0luZGV0
ZXJtaW5hdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OklzSW5kZXRlcm1pbmF0ZSk7IH0KKyAgICBib29sIGlzTG9hZGVkKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbG9hZGluZ1Byb2dyZXNzKCkgPj0gMTsgfQorICAgIGJvb2wgaXNPblNj
cmVlbigpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNPZmZTY3JlZW4oKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGlzUHJlc3NlZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJ
c1Zpc2libGUpOyB9CisgICAgYm9vbCBpc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBoYXNCb2xkRm9udCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2xBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGFzQm9sZEZvbnQpOyB9CisgICAgYm9vbCBoYXNJ
dGFsaWNGb250KCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpIYXNJdGFsaWNGb250KTsgfQorICAgIGJvb2wgaGFzTWlzc3BlbGxpbmcoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGhhc1BsYWluVGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGFzUGxhaW5UZXh0KTsgfQorICAg
IGJvb2wgaGFzU2FtZUZvbnQoY29uc3QgQVhDb3JlT2JqZWN0JikgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBoYXNTYW1lRm9udENvbG9yKGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgaGFzU2FtZVN0eWxlKGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgaGFzVW5kZXJsaW5lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIYXNVbmRlcmxpbmUpOyB9CisgICAgYm9vbCBoYXNIaWdo
bGlnaHRpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6Okhhc0hpZ2hsaWdodGluZyk7IH0KICAgICBBWFRleHRNYXJrZXJSYW5nZSB0ZXh0
SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdCBmaW5hbDsKLSAgICBFbGVtZW50KiBl
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBFbGVt
ZW50KiBlbGVtZW50KCkgY29uc3QgZmluYWw7CisgICAgTm9kZSogbm9kZSgpIGNvbnN0IGZpbmFs
OworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCBmaW5hbDsKIAotICAgIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciByZWxhdGVkT2JqZWN0cyhBWFJlbGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJlbGF0ZWRPYmpl
Y3RzKEFYUmVsYXRpb25UeXBlKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgc3VwcG9ydHNIYXNQ
b3B1cCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNIYXNQb3B1cCgpIGNvbnN0
IGZpbmFsOwogICAgIGJvb2wgc3VwcG9ydHNQcmVzc0FjdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNQcmVzc0FjdGlv
bik7IH0KLSAgICBib29sIHN1cHBvcnRzQ2hlY2tlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgaXNNb2RhbE5vZGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzRGVzY2VuZGFudE9m
Um9sZShBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQVhDb3JlT2JqZWN0
KiBjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIEFYQ29yZU9iamVjdCogY29ycmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBY2Nlc3NpYmxlTmFtZShjb25zdCBBdG9tU3RyaW5n
Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBzdXBwb3J0c0NoZWNrZWQoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIGlzTW9kYWxOb2RlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0Rlc2NlbmRhbnRP
ZlJvbGUoQWNjZXNzaWJpbGl0eVJvbGUpIGNvbnN0IGZpbmFsOworICAgIEFYQ29yZU9iamVjdCog
Y29ycmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW1lbnQoKSBjb25zdCBmaW5hbDsKKyAgICBB
WENvcmVPYmplY3QqIGNvcnJlc3BvbmRpbmdDb250cm9sRm9yTGFiZWxFbGVtZW50KCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0IGZpbmFs
OworICAgIHZvaWQgc2V0QWNjZXNzaWJsZU5hbWUoY29uc3QgQXRvbVN0cmluZyYpIGZpbmFsOwog
Ci0gICAgU3RyaW5nIHRpdGxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlRpdGxlKTsgfQotICAgIFN0cmluZyBkZXNjcmlwdGlv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpEZXNjcmlwdGlvbik7IH0KKyAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGl0bGUpOyB9Cisg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RyaW5nQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRlc2NyaXB0aW9uKTsgfQogCi0gICAgc3RkOjpvcHRp
b25hbDxTdHJpbmc+IHRleHRDb250ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjpvcHRp
b25hbDxTdHJpbmc+IHRleHRDb250ZW50KCkgY29uc3QgZmluYWw7CiAKLSAgICBTdHJpbmcgdGV4
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHVuc2lnbmVkIHRleHRM
ZW5ndGgoKSBjb25zdCBmaW5hbDsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBSZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFY
VGV4dE1hcmtlclJhbmdlJiYsIFNwZWxsQ2hlY2spIGNvbnN0IG92ZXJyaWRlOworICAgIFJldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2UoQVhUZXh0TWFya2VyUmFuZ2UmJiwgU3BlbGxDaGVjaykgY29uc3QgZmluYWw7CiAjZW5kaWYK
LSAgICBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
RWxlbWVudCogYWN0aW9uRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBhdGggZWxlbWVu
dFBhdGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBwYXRoQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OlBhdGgpOyB9OwotICAgIGJvb2wgc3VwcG9ydHNQYXRoKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1Bh
dGgpOyB9CisgICAgQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0IGZpbmFsOwor
ICAgIEVsZW1lbnQqIGFjdGlvbkVsZW1lbnQoKSBjb25zdCBmaW5hbDsKKyAgICBQYXRoIGVsZW1l
bnRQYXRoKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcGF0aEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpQYXRoKTsgfTsKKyAgICBib29sIHN1cHBvcnRzUGF0aCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNQYXRoKTsg
fQogCi0gICAgYm9vbCBpc1dpZGdldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNXaWRnZXQpOyB9Ci0gICAgV2lkZ2V0KiB3aWRn
ZXQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybVdpZGdldCBwbGF0Zm9ybVdpZGdldCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFdpZGdldCogd2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzV2lkZ2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1dpZGdldCk7IH0KKyAgICBXaWRn
ZXQqIHdpZGdldCgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtV2lkZ2V0IHBsYXRmb3JtV2lk
Z2V0KCkgY29uc3QgZmluYWw7CisgICAgV2lkZ2V0KiB3aWRnZXRGb3JBdHRhY2htZW50Vmlldygp
IGNvbnN0IGZpbmFsOwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIEFYRWRpdGluZ1N0eWxlVmFsdWVW
YXJpYW50PiByZXNvbHZlZEVkaXRpbmdTdHlsZXMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBIYXNo
TWFwPFN0cmluZywgQVhFZGl0aW5nU3R5bGVWYWx1ZVZhcmlhbnQ+IHJlc29sdmVkRWRpdGluZ1N0
eWxlcygpIGNvbnN0IGZpbmFsOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFJlbW90ZUFYT2Jq
ZWN0UmVmIHJlbW90ZVBhcmVudE9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEZsb2F0UmVj
dCBjb252ZXJ0UmVjdFRvUGxhdGZvcm1TcGFjZShjb25zdCBGbG9hdFJlY3QmLCBBY2Nlc3NpYmls
aXR5Q29udmVyc2lvblNwYWNlKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZW1vdGVBWE9iamVjdFJl
ZiByZW1vdGVQYXJlbnRPYmplY3QoKSBjb25zdCBmaW5hbDsKKyAgICBGbG9hdFJlY3QgY29udmVy
dFJlY3RUb1BsYXRmb3JtU3BhY2UoY29uc3QgRmxvYXRSZWN0JiwgQWNjZXNzaWJpbGl0eUNvbnZl
cnNpb25TcGFjZSkgY29uc3QgZmluYWw7CiAjZW5kaWYKLSAgICBQYWdlKiBwYWdlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
TG9jYWxGcmFtZVZpZXcqIGRvY3VtZW50RnJhbWVWaWV3KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
U2Nyb2xsVmlldyogc2Nyb2xsVmlldygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZGV0YWNo
RnJvbVBhcmVudCgpIG92ZXJyaWRlOworICAgIFBhZ2UqIHBhZ2UoKSBjb25zdCBmaW5hbDsKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCBmaW5hbDsKKyAgICBMb2NhbEZyYW1lVmlldyog
ZG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdCBmaW5hbDsKKyAgICBTY3JvbGxWaWV3KiBzY3JvbGxW
aWV3KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBkZXRhY2hGcm9tUGFyZW50KCkgZmluYWw7CiAK
ICAgICBPcHRpb25TZXQ8QVhBbmNlc3RvckZsYWc+IGFuY2VzdG9yRmxhZ3MoKSBjb25zdDsKIAot
ICAgIGJvb2wgaGFzRG9jdW1lbnRSb2xlQW5jZXN0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBhbmNlc3RvckZsYWdzKCkuY29udGFpbnMoQVhBbmNlc3RvckZsYWc6Okhhc0RvY3VtZW50Um9s
ZUFuY2VzdG9yKTsgfQotICAgIGJvb2wgaGFzV2ViQXBwbGljYXRpb25BbmNlc3RvcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGFuY2VzdG9yRmxhZ3MoKS5jb250YWlucyhBWEFuY2VzdG9yRmxh
Zzo6SGFzV2ViQXBwbGljYXRpb25BbmNlc3Rvcik7IH0KLSAgICBib29sIGlzSW5EZXNjcmlwdGlv
bkxpc3REZXRhaWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhbmNlc3RvckZsYWdzKCkuY29u
dGFpbnMoQVhBbmNlc3RvckZsYWc6OklzSW5EZXNjcmlwdGlvbkxpc3REZXRhaWwpOyB9Ci0gICAg
Ym9vbCBpc0luRGVzY3JpcHRpb25MaXN0VGVybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFu
Y2VzdG9yRmxhZ3MoKS5jb250YWlucyhBWEFuY2VzdG9yRmxhZzo6SXNJbkRlc2NyaXB0aW9uTGlz
dFRlcm0pOyB9Ci0gICAgYm9vbCBpc0luQ2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFu
Y2VzdG9yRmxhZ3MoKS5jb250YWlucyhBWEFuY2VzdG9yRmxhZzo6SXNJbkNlbGwpOyB9CisgICAg
Ym9vbCBoYXNEb2N1bWVudFJvbGVBbmNlc3RvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGFuY2Vz
dG9yRmxhZ3MoKS5jb250YWlucyhBWEFuY2VzdG9yRmxhZzo6SGFzRG9jdW1lbnRSb2xlQW5jZXN0
b3IpOyB9CisgICAgYm9vbCBoYXNXZWJBcHBsaWNhdGlvbkFuY2VzdG9yKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gYW5jZXN0b3JGbGFncygpLmNvbnRhaW5zKEFYQW5jZXN0b3JGbGFnOjpIYXNXZWJB
cHBsaWNhdGlvbkFuY2VzdG9yKTsgfQorICAgIGJvb2wgaXNJbkRlc2NyaXB0aW9uTGlzdERldGFp
bCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGFuY2VzdG9yRmxhZ3MoKS5jb250YWlucyhBWEFuY2Vz
dG9yRmxhZzo6SXNJbkRlc2NyaXB0aW9uTGlzdERldGFpbCk7IH0KKyAgICBib29sIGlzSW5EZXNj
cmlwdGlvbkxpc3RUZXJtKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYW5jZXN0b3JGbGFncygpLmNv
bnRhaW5zKEFYQW5jZXN0b3JGbGFnOjpJc0luRGVzY3JpcHRpb25MaXN0VGVybSk7IH0KKyAgICBi
b29sIGlzSW5DZWxsKCkgY29uc3QgZmluYWwgeyByZXR1cm4gYW5jZXN0b3JGbGFncygpLmNvbnRh
aW5zKEFYQW5jZXN0b3JGbGFnOjpJc0luQ2VsbCk7IH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBhdHRyaWJ1dGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsKKyAgICBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gYXR0cmlidXRlVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Qg
ZmluYWw7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCBoYXNBcHBsZVBERkFubm90YXRp
b25BdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6Okhhc0FwcGxlUERGQW5ub3RhdGlvbkF0dHJpYnV0ZSk7IH0KKyAgICBi
b29sIGhhc0FwcGxlUERGQW5ub3RhdGlvbkF0dHJpYnV0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGFzQXBwbGVQREZBbm5vdGF0aW9u
QXR0cmlidXRlKTsgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1P
REVMX0VMRU1FTlQpCi0gICAgVmVjdG9yPFJldGFpblB0cjxpZD4+IG1vZGVsRWxlbWVudENoaWxk
cmVuKCkgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFJldGFpblB0cjxpZD4+IG1vZGVsRWxlbWVudENo
aWxkcmVuKCkgZmluYWw7CiAjZW5kaWYKICAgICAKLSAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9y
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCkgZmluYWw7CiAKLSAg
ICBTdHJpbmcgaW5uZXJIVE1MKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIG91dGVySFRN
TCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBpbm5lckhUTUwoKSBjb25zdCBmaW5hbDsK
KyAgICBTdHJpbmcgb3V0ZXJIVE1MKCkgY29uc3QgZmluYWw7CiAKICAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIGEgVGhyZWFkU2FmZVdlYWtQdHI8QVhJc29sYXRlZFRyZWU+LgogICAgIFJlZlB0cjxB
WElzb2xhdGVkVHJlZT4gbV9jYWNoZWRUcmVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>