<?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>237300</bug_id>
          
          <creation_ts>2022-02-28 18:31:27 -0800</creation_ts>
          <short_desc>Move StorageBucket function definitions outside the class definition</short_desc>
          <delta_ts>2022-03-01 13:00:29 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>cdumez</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1846869</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-02-28 18:31:27 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846892</commentid>
    <comment_count>1</comment_count>
      <attachid>453466</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-02-28 19:51:20 -0800</bug_when>
    <thetext>Created attachment 453466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847028</commentid>
    <comment_count>2</comment_count>
      <attachid>453466</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-01 07:59:09 -0800</bug_when>
    <thetext>Comment on attachment 453466
Patch

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

r=me

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:115
&gt; +    return &quot;&quot;_s;

emptyString()

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:166
&gt; +    return m_localStorageManager.get();

This is a one liner, I think we should keep it inline within the class definition.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:179
&gt; +    return m_sessionStorageManager.get();

ditto.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:192
&gt; +    return m_idbStorageManager.get();

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847123</commentid>
    <comment_count>3</comment_count>
      <attachid>453515</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-03-01 11:44:41 -0800</bug_when>
    <thetext>Created attachment 453515
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847128</commentid>
    <comment_count>4</comment_count>
      <attachid>453516</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-03-01 11:58:44 -0800</bug_when>
    <thetext>Created attachment 453516
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847151</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-01 12:59:07 -0800</bug_when>
    <thetext>Committed r290669 (?): &lt;https://commits.webkit.org/r290669&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453516.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847153</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-01 13:00:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/89636878&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453466</attachid>
            <date>2022-02-28 19:51:20 -0800</date>
            <delta_ts>2022-03-01 11:44:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237300-20220228195119.patch</filename>
            <type>text/plain</type>
            <size>30488</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFmZmE1MGViMjhmOTYyMGQw
YmRjNjEwY2IwZWEwZWQ1NWNkZjllMzQuLjRlZTczYTY0Y2I1ZTA4YmNkMGNmMDk3ZTQyMTE2NTVh
MTI1Y2MzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDItMjggIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTdG9yYWdlQnVja2V0IGZ1
bmN0aW9uIGRlZmluaXRpb25zIG91dHNpZGUgdGhlIGNsYXNzIGRlZmluaXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzMwMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0b1N0b3JhZ2VJZGVudGlmaWVyIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6
OlN0b3JhZ2VCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
U3RvcmFnZUJ1Y2tldDo6Y29ubmVjdGlvbkNsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0eXBlU3RvcmFnZVBhdGggY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6Zmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ1Nlc3Npb25TdG9yYWdl
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0OjppZGJTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ0lEQlN0b3JhZ2VNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmlzQWN0
aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3Jh
Z2VCdWNrZXQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUJ1Y2tldDo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3QpOgorICAgICAgICAoV2ViS2l0
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZmV0Y2hEYXRhVHlwZXNJbkxp
c3RGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURpc2spOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxl
dGVGaWxlU3lzdGVtU3RvcmFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVTZXNz
aW9uU3RvcmFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlSURCU3RvcmFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6bW92ZURhdGEpOgorICAgICAgICAo
V2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6cmVzb2x2ZWRMb2Nh
bFN0b3JhZ2VQYXRoKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OnJlc29sdmVkSURCU3RvcmFnZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9XZWJzaXRlRGF0YVR5cGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6IERlbGV0ZWQuCisKIDIwMjItMDItMjggIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZG9wdCB0aGUgbW9kZXJuIEhh
c2hlciBtb3JlIHdpZGVseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggYmRkZjZiZWNj
MzE3MzVjZjU5OGQxOGE2ZmIxZTc5ZDcyMzM3YTBkMi4uMGYxYjAzZGIwNmY4MDM5NjVkY2U2NzM2
YmQ5MTQxYWRlZjEwMmUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC00NywzNTEg
KzQ3LDM2MiBAQCBlbnVtIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0
TW9kZSA6IGJvb2wgeyBCZXN0RWZmb3J0LCBQZXJzaXN0ZQogY2xhc3MgT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIFN0b3JhZ2VCdWNrZXQoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIGNvbnN0IFN0
cmluZyYgaWRiU3RvcmFnZVBhdGgsIGJvb2wgc2hvdWxkVXNlQ3VzdG9tUGF0aHMpCi0gICAgICAg
IDogbV9yb290UGF0aChyb290UGF0aCkKLSAgICAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKLSAgICAgICAgLCBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgobG9jYWxTdG9yYWdlUGF0aCkK
LSAgICAgICAgLCBtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoKGlkYlN0b3JhZ2VQYXRoKQotICAgICAg
ICAsIG1fc2hvdWxkVXNlQ3VzdG9tUGF0aHMoc2hvdWxkVXNlQ3VzdG9tUGF0aHMpCi0gICAgewot
ICAgIH0KKyAgICBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIDogdWludDhfdCB7CisgICAgICAgIEZp
bGVTeXN0ZW0sCisgICAgICAgIExvY2FsU3RvcmFnZSwKKyAgICAgICAgU2Vzc2lvblN0b3JhZ2Us
CisgICAgICAgIEluZGV4ZWREQiwKKyAgICB9OworICAgIFN0cmluZyB0b1N0b3JhZ2VJZGVudGlm
aWVyKFN0b3JhZ2VUeXBlKSBjb25zdDsKIAorICAgIFN0b3JhZ2VCdWNrZXQoY29uc3QgU3RyaW5n
JiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGxvY2Fs
U3RvcmFnZVBhdGgsIGNvbnN0IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgsIGJvb2wgc2hvdWxkVXNl
Q3VzdG9tUGF0aHMpOwogICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KICAgICB2b2lkIHNldE1vZGUoU3RvcmFnZUJ1Y2tldE1vZGUgbW9kZSkgeyBt
X21vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQpOworICAgIFN0cmluZyB0eXBlU3RvcmFnZVBhdGgoU3RvcmFnZVR5cGUpIGNv
bnN0OworICAgIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciYgZmlsZVN5c3RlbVN0b3JhZ2VNYW5h
Z2VyKEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkmKTsKKyAgICBMb2NhbFN0b3JhZ2VN
YW5hZ2VyJiBsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBM
b2NhbFN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKTsKKyAgICBT
ZXNzaW9uU3RvcmFnZU1hbmFnZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJl
Z2lzdHJ5Jik7CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9y
YWdlTWFuYWdlcigpOworICAgIElEQlN0b3JhZ2VNYW5hZ2VyJiBpZGJTdG9yYWdlTWFuYWdlcihJ
REJTdG9yYWdlUmVnaXN0cnkmLCBJREJTdG9yYWdlTWFuYWdlcjo6UXVvdGFDaGVja0Z1bmN0aW9u
JiYpOworICAgIElEQlN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0lEQlN0b3JhZ2VNYW5hZ2VyKCk7
CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpOworICAgIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0KE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+KTsKKyAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIFdhbGxUaW1lKTsKKyAgICB2b2lkIG1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+LCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIGNvbnN0IFN0cmluZyYg
aWRiU3RvcmFnZVBhdGgpOworICAgIFN0cmluZyByZXNvbHZlZExvY2FsU3RvcmFnZVBhdGgoKTsK
KyAgICBTdHJpbmcgcmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpOwogCi0gICAgdm9pZCBjb25uZWN0
aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1fZmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLT5jb25uZWN0aW9uQ2xvc2VkKGNvbm5lY3Rpb24pOworcHJp
dmF0ZToKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlz
dEZyb21NZW1vcnkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4pOworICAgIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURpc2soT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4pOworICAgIHZvaWQgZGVsZXRlRmlsZVN5c3RlbVN0b3JhZ2VEYXRhKFdh
bGxUaW1lKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEoV2FsbFRpbWUpOworICAg
IHZvaWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgdm9pZCBkZWxldGVJREJTdG9y
YWdlRGF0YShXYWxsVGltZSk7CiAKLSAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikK
LSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y29ubmVjdGlvbkNsb3NlZChjb25u
ZWN0aW9uKTsKKyAgICBTdHJpbmcgbV9yb290UGF0aDsKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OworICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1fbW9kZSB7IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0
RWZmb3J0IH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcj4g
bV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsU3Rv
cmFnZU1hbmFnZXI+IG1fbG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICBTdHJpbmcgbV9jdXN0b21M
b2NhbFN0b3JhZ2VQYXRoOworICAgIFN0cmluZyBtX3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0aDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyPiBtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCU3RvcmFnZU1hbmFnZXI+IG1faWRi
U3RvcmFnZU1hbmFnZXI7CisgICAgU3RyaW5nIG1fY3VzdG9tSURCU3RvcmFnZVBhdGg7CisgICAg
U3RyaW5nIG1fcmVzb2x2ZWRJREJTdG9yYWdlUGF0aDsKKyAgICBib29sIG1fc2hvdWxkVXNlQ3Vz
dG9tUGF0aHM7Cit9OwogCi0gICAgICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcikKLSAg
ICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jb25uZWN0aW9uQ2xvc2VkKGNvbm5l
Y3Rpb24pOworU3RyaW5nIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0b1N0
b3JhZ2VJZGVudGlmaWVyKFN0b3JhZ2VUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbToKKyAgICAgICAgcmV0dXJu
ICJGaWxlU3lzdGVtIl9zOworICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsU3RvcmFnZToKKyAg
ICAgICAgcmV0dXJuICJMb2NhbFN0b3JhZ2UiX3M7CisgICAgY2FzZSBTdG9yYWdlVHlwZTo6U2Vz
c2lvblN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiU2Vzc2lvblN0b3JhZ2UiX3M7CisgICAgY2Fz
ZSBTdG9yYWdlVHlwZTo6SW5kZXhlZERCOgorICAgICAgICByZXR1cm4gIkluZGV4ZWREQiJfczsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuICIiX3M7Cit9CiAKLSAgICBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBl
IDogdWludDhfdCB7Ci0gICAgICAgIEZpbGVTeXN0ZW0sCi0gICAgICAgIExvY2FsU3RvcmFnZSwK
LSAgICAgICAgU2Vzc2lvblN0b3JhZ2UsCi0gICAgICAgIEluZGV4ZWREQiwKLSAgICB9OworT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQoY29uc3QgU3Ry
aW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGxv
Y2FsU3RvcmFnZVBhdGgsIGNvbnN0IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgsIGJvb2wgc2hvdWxk
VXNlQ3VzdG9tUGF0aHMpCisgICAgOiBtX3Jvb3RQYXRoKHJvb3RQYXRoKQorICAgICwgbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgobG9jYWxT
dG9yYWdlUGF0aCkKKyAgICAsIG1fY3VzdG9tSURCU3RvcmFnZVBhdGgoaWRiU3RvcmFnZVBhdGgp
CisgICAgLCBtX3Nob3VsZFVzZUN1c3RvbVBhdGhzKHNob3VsZFVzZUN1c3RvbVBhdGhzKQorewor
fQogCi0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVE
YXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAg
aWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJGaWxlU3lzdGVtIl9zKQotICAgICAgICAgICAgcmV0
dXJuIFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbTsKLSAgICAgICAgaWYgKHN0b3JhZ2VJZGVu
dGlmaWVyID09ICJMb2NhbFN0b3JhZ2UiX3MpCi0gICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURh
dGFUeXBlOjpMb2NhbFN0b3JhZ2U7Ci0gICAgICAgIGlmIChzdG9yYWdlSWRlbnRpZmllciA9PSAi
U2Vzc2lvblN0b3JhZ2UiX3MpCi0gICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpT
ZXNzaW9uU3RvcmFnZTsKLSAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJJbmRleGVk
REIiX3MpCi0gICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRh
YmFzZXM7Ci0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Cit2b2lkIE9yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBpZiAobV9maWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXIpCisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLT5jb25uZWN0
aW9uQ2xvc2VkKGNvbm5lY3Rpb24pOwogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0b3JhZ2VJZGVu
dGlmaWVyKFN0b3JhZ2VUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbToKLSAgICAgICAgICAgIHJldHVy
biAiRmlsZVN5c3RlbSJfczsKLSAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdl
OgotICAgICAgICAgICAgcmV0dXJuICJMb2NhbFN0b3JhZ2UiX3M7Ci0gICAgICAgIGNhc2UgU3Rv
cmFnZVR5cGU6OlNlc3Npb25TdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICJTZXNzaW9uU3Rv
cmFnZSJfczsKLSAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6SW5kZXhlZERCOgotICAgICAgICAg
ICAgcmV0dXJuICJJbmRleGVkREIiX3M7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuICIiX3M7Ci0gICAgfQorICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAg
ICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsK
IAotICAgIFN0cmluZyB0eXBlU3RvcmFnZVBhdGgoU3RvcmFnZVR5cGUgdHlwZSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGF1dG8gc3RvcmFnZUlkZW50aWZpZXIgPSB0b1N0b3JhZ2VJZGVudGlmaWVy
KHR5cGUpOwotICAgICAgICBpZiAobV9yb290UGF0aC5pc0VtcHR5KCkgfHwgc3RvcmFnZUlkZW50
aWZpZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAg
aWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlci0+Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKK30KIAotICAgICAgICByZXR1cm4g
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcm9vdFBhdGgsIHN0b3JhZ2VJ
ZGVudGlmaWVyKTsKLSAgICB9CitTdHJpbmcgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VC
dWNrZXQ6OnR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZSB0eXBlKSBjb25zdAoreworICAgIGF1
dG8gc3RvcmFnZUlkZW50aWZpZXIgPSB0b1N0b3JhZ2VJZGVudGlmaWVyKHR5cGUpOworICAgIGlm
IChtX3Jvb3RQYXRoLmlzRW1wdHkoKSB8fCBzdG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5h
Z2VyJiBmaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIoRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdp
c3RyeSYgcmVnaXN0cnkpCi0gICAgewotICAgICAgICBpZiAoIW1fZmlsZVN5c3RlbVN0b3JhZ2VN
YW5hZ2VyKQotICAgICAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5p
cXVlPEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcj4odHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBl
OjpGaWxlU3lzdGVtKSwgcmVnaXN0cnkpOworICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9yb290UGF0aCwgc3RvcmFnZUlkZW50aWZpZXIpOworfQogCi0g
ICAgICAgIHJldHVybiAqbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7Ci0gICAgfQorRmlsZVN5
c3RlbVN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkm
IHJlZ2lzdHJ5KQoreworICAgIGlmICghbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIpCisgICAg
ICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxGaWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXI+KHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbSksIHJl
Z2lzdHJ5KTsKIAotICAgIExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIo
U3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCi0gICAgewotICAgICAgICBpZiAoIW1fbG9j
YWxTdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1h
a2VVbmlxdWU8TG9jYWxTdG9yYWdlTWFuYWdlcj4ocmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCks
IHJlZ2lzdHJ5KTsKKyAgICByZXR1cm4gKm1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworfQog
Ci0gICAgICAgIHJldHVybiAqbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyOwotICAgIH0KK0xvY2FsU3Rv
cmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpsb2NhbFN0
b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQoreworICAgIGlmICgh
bV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXIgPSBt
YWtlVW5pcXVlPExvY2FsU3RvcmFnZU1hbmFnZXI+KHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgp
LCByZWdpc3RyeSk7CiAKLSAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0xvY2FsU3Rv
cmFnZU1hbmFnZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlTWFuYWdl
ci5nZXQoKTsKLSAgICB9CisgICAgcmV0dXJuICptX2xvY2FsU3RvcmFnZU1hbmFnZXI7Cit9CiAK
LSAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdl
QXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zZXNzaW9uU3Rv
cmFnZU1hbmFnZXIpCi0gICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1ha2VV
bmlxdWU8U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyPihyZWdpc3RyeSk7CitMb2NhbFN0b3JhZ2VNYW5h
Z2VyKiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLmdldCgp
OworfQogCi0gICAgICAgIHJldHVybiAqbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7Ci0gICAgfQor
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tl
dDo6c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQor
eworICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIG1fc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+KHJlZ2lzdHJ5
KTsKIAotICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciogZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1h
bmFnZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmdl
dCgpOwotICAgIH0KKyAgICByZXR1cm4gKm1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworfQogCi0g
ICAgSURCU3RvcmFnZU1hbmFnZXImIGlkYlN0b3JhZ2VNYW5hZ2VyKElEQlN0b3JhZ2VSZWdpc3Ry
eSYgcmVnaXN0cnksIElEQlN0b3JhZ2VNYW5hZ2VyOjpRdW90YUNoZWNrRnVuY3Rpb24mJiBxdW90
YUNoZWNrRnVuY3Rpb24pCi0gICAgewotICAgICAgICBpZiAoIW1faWRiU3RvcmFnZU1hbmFnZXIp
Ci0gICAgICAgICAgICBtX2lkYlN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxJREJTdG9yYWdl
TWFuYWdlcj4ocmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpLCByZWdpc3RyeSwgV1RGTW92ZShxdW90
YUNoZWNrRnVuY3Rpb24pKTsKK1Nlc3Npb25TdG9yYWdlTWFuYWdlciogT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkKK3sK
KyAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIuZ2V0KCk7Cit9CiAKLSAgICAgICAg
cmV0dXJuICptX2lkYlN0b3JhZ2VNYW5hZ2VyOwotICAgIH0KK0lEQlN0b3JhZ2VNYW5hZ2VyJiBP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aWRiU3RvcmFnZU1hbmFnZXIoSURC
U3RvcmFnZVJlZ2lzdHJ5JiByZWdpc3RyeSwgSURCU3RvcmFnZU1hbmFnZXI6OlF1b3RhQ2hlY2tG
dW5jdGlvbiYmIHF1b3RhQ2hlY2tGdW5jdGlvbikKK3sKKyAgICBpZiAoIW1faWRiU3RvcmFnZU1h
bmFnZXIpCisgICAgICAgIG1faWRiU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPElEQlN0b3Jh
Z2VNYW5hZ2VyPihyZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCksIHJlZ2lzdHJ5LCBXVEZNb3ZlKHF1
b3RhQ2hlY2tGdW5jdGlvbikpOwogCi0gICAgSURCU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nSURC
U3RvcmFnZU1hbmFnZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faWRiU3RvcmFnZU1hbmFn
ZXIuZ2V0KCk7Ci0gICAgfQorICAgIHJldHVybiAqbV9pZGJTdG9yYWdlTWFuYWdlcjsKK30KIAot
ICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IHJl
bW92ZSB0aGUgYnVja2V0IGlmIGl0IGhhcyBpbi1tZW1vcnkgZGF0YSwgb3RoZXJ3aXNlIHNlc3Np
b24KLSAgICAgICAgLy8gZGF0YSBtYXkgYmUgbG9zdC4KLSAgICAgICAgcmV0dXJuIChtX2ZpbGVT
eXN0ZW1TdG9yYWdlTWFuYWdlciAmJiBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci0+aXNBY3Rp
dmUoKSkKLSAgICAgICAgICAgIHx8IChtX2xvY2FsU3RvcmFnZU1hbmFnZXIgJiYgKG1fbG9jYWxT
dG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2Vy
LT5pc0FjdGl2ZSgpKSkKLSAgICAgICAgICAgIHx8IChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciAm
JiAobV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9yeSgpIHx8IG1fc2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKSkKLSAgICAgICAgICAgIHx8IChtX2lkYlN0b3Jh
Z2VNYW5hZ2VyICYmIChtX2lkYlN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSB8fCBt
X2lkYlN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKSk7Ci0gICAgfQorSURCU3RvcmFnZU1hbmFn
ZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ0lEQlN0b3Jh
Z2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gbV9pZGJTdG9yYWdlTWFuYWdlci5nZXQoKTsKK30K
KworYm9vbCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNBY3RpdmUoKSBj
b25zdAoreworICAgIC8vIFdlIGNhbm5vdCByZW1vdmUgdGhlIGJ1Y2tldCBpZiBpdCBoYXMgaW4t
bWVtb3J5IGRhdGEsIG90aGVyd2lzZSBzZXNzaW9uCisgICAgLy8gZGF0YSBtYXkgYmUgbG9zdC4K
KyAgICByZXR1cm4gKG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyICYmIG1fZmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQorICAgICAgICB8fCAobV9sb2NhbFN0b3JhZ2VNYW5h
Z2VyICYmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9yeSgpIHx8IG1fbG9j
YWxTdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUoKSkpCisgICAgICAgIHx8IChtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlciAmJiAobV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9yeSgp
IHx8IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKSkKKyAgICAgICAgfHwgKG1f
aWRiU3RvcmFnZU1hbmFnZXIgJiYgKG1faWRiU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9y
eSgpIHx8IG1faWRiU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkpKTsKK30KIAotICAgIGJvb2wg
aXNFbXB0eSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKK2Jv
b2wgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmlzRW1wdHkoKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgICAgIGF1dG8gZmlsZXMgPSBGaWxl
U3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcm9vdFBhdGgpOwotICAgICAgICBhdXRvIGhhc1ZhbGlk
RmlsZSA9IFdURjo6YW55T2YoZmlsZXMsIFsmXShhdXRvIGZpbGUpIHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbnZhbGlkRmlsZSA9IChmaWxlID09IG9yaWdpbkZpbGVOYW1lKTsKKyAgICBhdXRvIGZp
bGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQYXRoKTsKKyAgICBhdXRvIGhh
c1ZhbGlkRmlsZSA9IFdURjo6YW55T2YoZmlsZXMsIFsmXShhdXRvIGZpbGUpIHsKKyAgICAgICAg
Ym9vbCBpc0ludmFsaWRGaWxlID0gKGZpbGUgPT0gb3JpZ2luRmlsZU5hbWUpOwogI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgICAgICAgICAgaXNJbnZhbGlkRmlsZSB8PSAoZmlsZSA9PSAiLkRTX1N0
b3JlIik7CisgICAgICAgIGlzSW52YWxpZEZpbGUgfD0gKGZpbGUgPT0gIi5EU19TdG9yZSIpOwog
I2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gIWlzSW52YWxpZEZpbGU7Ci0gICAgICAgIH0pOwot
ICAgICAgICBpZiAoaGFzVmFsaWRGaWxlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gIWlzSW52YWxpZEZpbGU7CisgICAgfSk7CisgICAgaWYgKGhhc1ZhbGlkRmls
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpZGJTdG9yYWdlRmlsZXMgPSBG
aWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKSk7CisgICAg
cmV0dXJuICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgp
KSAmJiBpZGJTdG9yYWdlRmlsZXMuaXNFbXB0eSgpOworfQorCitPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZmV0Y2hEYXRhVHlw
ZXNJbkxpc3QoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgYXV0byBy
ZXN1bHQgPSBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21NZW1vcnkodHlwZXMpOworICAgIHJlc3Vs
dC5hZGQoZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tRGlzayh0eXBlcykpOwogCi0gICAgICAgIGF1
dG8gaWRiU3RvcmFnZUZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShyZXNvbHZlZElE
QlN0b3JhZ2VQYXRoKCkpOwotICAgICAgICByZXR1cm4gIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
cmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkpICYmIGlkYlN0b3JhZ2VGaWxlcy5pc0VtcHR5KCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0RnJv
bU1lbW9yeShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKK3sKKyAgICBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQ7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgeworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VN
YW5hZ2VyICYmIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAg
ICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKICAgICB9
CiAKLSAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdChP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5KHR5cGVzKTsKLSAgICAgICAgcmVz
dWx0LmFkZChmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKHR5cGVzKSk7CisgICAgaWYgKHR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7CisgICAgICAg
IGlmIChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciAmJiBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+
aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlw
ZTo6U2Vzc2lvblN0b3JhZ2UpOworICAgIH0KIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykp
IHsKKyAgICAgICAgaWYgKG1faWRiU3RvcmFnZU1hbmFnZXIgJiYgbV9pZGJTdG9yYWdlTWFuYWdl
ci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRh
VHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKTsKICAgICB9CiAKLSAgICB2b2lkIGRlbGV0ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VU
aW1lKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
RmlsZVN5c3RlbSkpCi0gICAgICAgICAgICBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9k
aWZpZWRTaW5jZVRpbWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLSAgICAgICAgaWYgKHR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkKLSAgICAgICAgICAg
IGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOworT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNo
RGF0YVR5cGVzSW5MaXN0RnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMp
Cit7CisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gcmVzdWx0OworICAgIGlmICh0eXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pKSB7CisgICAgICAgIGF1dG8g
ZmlsZVN5c3RlbVN0b3JhZ2VQYXRoID0gdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpGaWxl
U3lzdGVtKTsKKyAgICAgICAgaWYgKGF1dG8gZmlsZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0
b3J5KGZpbGVTeXN0ZW1TdG9yYWdlUGF0aCk7ICFmaWxlcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSk7CisgICAgfQogCi0gICAg
ICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAm
JiBtb2RpZmllZFNpbmNlVGltZSA8IFdhbGxUaW1lOjpub3coKSkKLSAgICAgICAgICAgIGRlbGV0
ZVNlc3Npb25TdG9yYWdlRGF0YSgpOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMocmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkpKQorICAgICAgICAgICAgcmVzdWx0LmFkZChX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7CisgICAgfQogCi0gICAgICAgIGlmICh0eXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpCi0gICAgICAg
ICAgICBkZWxldGVJREJTdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7CisgICAgaWYgKHR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgeworICAg
ICAgICBpZiAoYXV0byBkYXRhYmFzZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHJlc29s
dmVkSURCU3RvcmFnZVBhdGgoKSk7ICFkYXRhYmFzZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcyk7CiAgICAgfQog
Ci0gICAgdm9pZCBtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgY29u
c3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBjb25zdCBTdHJpbmcmIGlkYlN0b3JhZ2VQYXRo
KQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgSW5kZXhlZERC
IGFuZCBMb2NhbFN0b3JhZ2Ugbm93LgotICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmICFsb2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgICAg
ICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsb3NlKCk7Ci0KLSAgICAgICAgICAgIGF1dG8gY3Vy
cmVudExvY2FsU3RvcmFnZVBhdGggPSByZXNvbHZlZExvY2FsU3RvcmFnZVBhdGgoKTsKLSAgICAg
ICAgICAgIGlmICghY3VycmVudExvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVTeXN0ZW06OnBhcmVu
dFBhdGgobG9jYWxTdG9yYWdlUGF0aCkpOwotICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0
ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUoY3VycmVudExvY2FsU3RvcmFnZVBhdGgsIGxv
Y2FsU3RvcmFnZVBhdGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KIAotICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJ
bmRleGVkREJEYXRhYmFzZXMpICYmICFpZGJTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIGlmIChtX2lkYlN0b3JhZ2VNYW5hZ2VyKQotICAgICAgICAgICAgICAgIG1faWRiU3Rv
cmFnZU1hbmFnZXItPmNsb3NlRGF0YWJhc2VzRm9yRGVsZXRpb24oKTsKK3ZvaWQgT3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQoreworICAgIGlmICh0
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pKQorICAgICAgICBkZWxl
dGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOwogCi0gICAgICAgICAg
ICBhdXRvIGN1cnJlbnRJREJTdG9yYWdlUGF0aCA9IHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKTsK
LSAgICAgICAgICAgIGlmICghY3VycmVudElEQlN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpw
YXJlbnRQYXRoKGlkYlN0b3JhZ2VQYXRoKSk7Ci0gICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6
bW92ZUZpbGUoY3VycmVudElEQlN0b3JhZ2VQYXRoLCBpZGJTdG9yYWdlUGF0aCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkKKyAgICAgICAgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YSht
b2RpZmllZFNpbmNlVGltZSk7CiAKLSAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRo
KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9yZXNvbHZlZExvY2FsU3RvcmFnZVBhdGguaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9yZXNvbHZlZExvY2FsU3RvcmFnZVBhdGg7CisgICAg
aWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1v
ZGlmaWVkU2luY2VUaW1lIDwgV2FsbFRpbWU6Om5vdygpKQorICAgICAgICBkZWxldGVTZXNzaW9u
U3RvcmFnZURhdGEoKTsKIAotICAgICAgICBpZiAobV9zaG91bGRVc2VDdXN0b21QYXRocykgewot
ICAgICAgICAgICAgQVNTRVJUKG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkgPT0g
bV9yb290UGF0aC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgbV9yZXNvbHZlZExvY2FsU3RvcmFn
ZVBhdGggPSBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGg7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1f
cm9vdFBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGxvY2FsU3RvcmFnZURpcmVj
dG9yeSA9IHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdlKTsKLSAgICAg
ICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3Rvcmllcyhsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkpOwotICAgICAgICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAobG9jYWxTdG9y
YWdlRGlyZWN0b3J5KTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJ
bmRleGVkREJEYXRhYmFzZXMpKQorICAgICAgICBkZWxldGVJREJTdG9yYWdlRGF0YShtb2RpZmll
ZFNpbmNlVGltZSk7Cit9CiAKLSAgICAgICAgICAgIGF1dG8gbG9jYWxTdG9yYWdlUGF0aCA9IExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKGxvY2FsU3RvcmFnZURpcmVj
dG9yeSk7Ci0gICAgICAgICAgICBpZiAoIW1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5
KCkgJiYgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobG9jYWxTdG9yYWdlUGF0aCkgJiYgRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgpKQotICAgICAgICAgICAg
ICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUobV9jdXN0b21M
b2NhbFN0b3JhZ2VQYXRoLCBsb2NhbFN0b3JhZ2VQYXRoKTsKK3ZvaWQgT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShXYWxsVGlt
ZSBtb2RpZmllZFNpbmNlVGltZSkKK3sKKyAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciA9
IG51bGxwdHI7CiAKLSAgICAgICAgICAgIG1fcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoID0gbG9j
YWxTdG9yYWdlUGF0aDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Jlc29sdmVkTG9j
YWxTdG9yYWdlUGF0aCA9IGVtcHR5U3RyaW5nKCk7CisgICAgYXV0byBmaWxlU3lzdGVtU3RvcmFn
ZVBhdGggPSB0eXBlU3RvcmFnZVBhdGgoU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW0pOworICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUFsbEZpbGVzTW9kaWZpZWRTaW5jZShmaWxlU3lzdGVtU3RvcmFnZVBh
dGgsIG1vZGlmaWVkU2luY2VUaW1lKTsKK30KIAotICAgICAgICByZXR1cm4gbV9yZXNvbHZlZExv
Y2FsU3RvcmFnZVBhdGg7Cit2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0
OjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKFdhbGxUaW1lIHRpbWUpCit7CisgICAgYXV0byBjdXJy
ZW50TG9jYWxTdG9yYWdlUGF0aCA9IHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgpOworICAgIGlm
IChGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9uVGltZShjdXJyZW50TG9jYWxTdG9yYWdlUGF0
aCkgPj0gdGltZSkgeworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5jbGVhckRhdGFPbkRpc2soKTsKKyAgICAgICAg
V2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGN1cnJlbnRMb2Nh
bFN0b3JhZ2VQYXRoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzb2x2ZWRJREJTdG9yYWdlUGF0
aCgpCi0gICAgewotICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAo
IW1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICgh
bV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG1f
cmVzb2x2ZWRJREJTdG9yYWdlUGF0aDsKKyAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFy
RGF0YUluTWVtb3J5KCk7CisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZl
KCkpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7Cit9CiAKLSAgICAg
ICAgaWYgKG1fc2hvdWxkVXNlQ3VzdG9tUGF0aHMpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1
c3RvbUlEQlN0b3JhZ2VQYXRoLmlzRW1wdHkoKSA9PSBtX3Jvb3RQYXRoLmlzRW1wdHkoKSk7Ci0g
ICAgICAgICAgICBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGggPSBtX2N1c3RvbUlEQlN0b3JhZ2VQ
YXRoOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBpZGJTdG9yYWdlUGF0aCA9
IHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZTo6SW5kZXhlZERCKTsKLSAgICAgICAgICAgIGlm
ICghbV9jdXN0b21JREJTdG9yYWdlUGF0aC5pc0VtcHR5KCkgJiYgIUZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoaWRiU3RvcmFnZVBhdGgpICYmIEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9jdXN0b21J
REJTdG9yYWdlUGF0aCkpIHsKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGly
ZWN0b3JpZXMoaWRiU3RvcmFnZVBhdGgpOwotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06Om1v
dmVGaWxlKG1fY3VzdG9tSURCU3RvcmFnZVBhdGgsIGlkYlN0b3JhZ2VQYXRoKTsKLSAgICAgICAg
ICAgIH0KK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZVNl
c3Npb25TdG9yYWdlRGF0YSgpCit7CisgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcikK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGgg
PSBpZGJTdG9yYWdlUGF0aDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFt
X3Jlc29sdmVkSURCU3RvcmFnZVBhdGguaXNOdWxsKCkpOwotICAgICAgICByZXR1cm4gbV9yZXNv
bHZlZElEQlN0b3JhZ2VQYXRoOwotICAgIH0KKyAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+
Y2xlYXJEYXRhKCk7CisgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUo
KSkKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworfQogCi1wcml2
YXRlOgotICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0
RnJvbU1lbW9yeShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKLSAgICB7Ci0gICAg
ICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdDsKLSAgICAgICAgaWYgKHR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgewotICAgICAgICAgICAg
aWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlciAmJiBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmhhc0Rh
dGFJbk1lbW9yeSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBl
OjpMb2NhbFN0b3JhZ2UpOwotICAgICAgICB9Cit2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQnVja2V0OjpkZWxldGVJREJTdG9yYWdlRGF0YShXYWxsVGltZSB0aW1lKQoreworICAg
IGlmIChtX2lkYlN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX2lkYlN0b3JhZ2VNYW5hZ2VyLT5j
bG9zZURhdGFiYXNlc0ZvckRlbGV0aW9uKCk7CiAKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBpZiAobV9z
ZXNzaW9uU3RvcmFnZU1hbmFnZXIgJiYgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJ
bk1lbW9yeSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpT
ZXNzaW9uU3RvcmFnZSk7Ci0gICAgICAgIH0KKyAgICBGaWxlU3lzdGVtOjpkZWxldGVBbGxGaWxl
c01vZGlmaWVkU2luY2UocmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpLCB0aW1lKTsKK30KIAotICAg
ICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFz
ZXMpKSB7Ci0gICAgICAgICAgICBpZiAobV9pZGJTdG9yYWdlTWFuYWdlciAmJiBtX2lkYlN0b3Jh
Z2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRk
KFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKTsKLSAgICAgICAgfQordm9pZCBP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6bW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gdHlwZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCwgY29u
c3QgU3RyaW5nJiBpZGJTdG9yYWdlUGF0aCkKK3sKKyAgICAvLyBUaGlzIGlzIG9ubHkgc3VwcG9y
dGVkIGZvciBJbmRleGVkREIgYW5kIExvY2FsU3RvcmFnZSBub3cuCisgICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSAmJiAhbG9jYWxTdG9yYWdlUGF0
aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAg
ICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKIAotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBhdXRvIGN1cnJlbnRMb2NhbFN0b3JhZ2VQYXRoID0gcmVzb2x2ZWRM
b2NhbFN0b3JhZ2VQYXRoKCk7CisgICAgICAgIGlmICghY3VycmVudExvY2FsU3RvcmFnZVBhdGgu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMo
RmlsZVN5c3RlbTo6cGFyZW50UGF0aChsb2NhbFN0b3JhZ2VQYXRoKSk7CisgICAgICAgICAgICBX
ZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjptb3ZlRGF0YWJhc2VGaWxlKGN1cnJlbnRMb2NhbFN0
b3JhZ2VQYXRoLCBsb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURpc2soT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCi0gICAgewotICAgICAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQ7Ci0gICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pKSB7Ci0gICAgICAgICAgICBhdXRvIGZpbGVTeXN0ZW1T
dG9yYWdlUGF0aCA9IHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbSk7Ci0g
ICAgICAgICAgICBpZiAoYXV0byBmaWxlcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkoZmls
ZVN5c3RlbVN0b3JhZ2VQYXRoKTsgIWZpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSk7Ci0gICAgICAgIH0KKyAgICBp
ZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYm
ICFpZGJTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1faWRiU3RvcmFnZU1h
bmFnZXIpCisgICAgICAgICAgICBtX2lkYlN0b3JhZ2VNYW5hZ2VyLT5jbG9zZURhdGFiYXNlc0Zv
ckRlbGV0aW9uKCk7CiAKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6TG9jYWxTdG9yYWdlKSkgewotICAgICAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMocmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5h
ZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAgICAgICBhdXRvIGN1cnJlbnRJ
REJTdG9yYWdlUGF0aCA9IHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKTsKKyAgICAgICAgaWYgKCFj
dXJyZW50SURCU3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBGaWxlU3lzdGVt
OjptYWtlQWxsRGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChpZGJTdG9yYWdlUGF0
aCkpOworICAgICAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUoY3VycmVudElEQlN0b3JhZ2VQ
YXRoLCBpZGJTdG9yYWdlUGF0aCk7CiAgICAgICAgIH0KKyAgICB9Cit9CiAKLSAgICAgICAgaWYg
KHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8gZGF0YWJhc2VzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eShyZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCkpOyAhZGF0YWJhc2VzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2Vz
KTsKLSAgICAgICAgfQorU3RyaW5nIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0
OjpyZXNvbHZlZExvY2FsU3RvcmFnZVBhdGgoKQoreworICAgIGlmICghbV9yZXNvbHZlZExvY2Fs
U3RvcmFnZVBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX3Jlc29sdmVkTG9jYWxTdG9y
YWdlUGF0aDsKIAotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAobV9zaG91
bGRVc2VDdXN0b21QYXRocykgeworICAgICAgICBBU1NFUlQobV9jdXN0b21Mb2NhbFN0b3JhZ2VQ
YXRoLmlzRW1wdHkoKSA9PSBtX3Jvb3RQYXRoLmlzRW1wdHkoKSk7CisgICAgICAgIG1fcmVzb2x2
ZWRMb2NhbFN0b3JhZ2VQYXRoID0gbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoOworICAgIH0gZWxz
ZSBpZiAoIW1fcm9vdFBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gbG9jYWxTdG9yYWdl
RGlyZWN0b3J5ID0gdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpMb2NhbFN0b3JhZ2UpOwor
ICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobG9jYWxTdG9yYWdlRGlyZWN0
b3J5KTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAobG9jYWxTdG9yYWdl
RGlyZWN0b3J5KTsKIAotICAgIHZvaWQgZGVsZXRlRmlsZVN5c3RlbVN0b3JhZ2VEYXRhKFdhbGxU
aW1lIG1vZGlmaWVkU2luY2VUaW1lKQotICAgIHsKLSAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFn
ZU1hbmFnZXIgPSBudWxscHRyOworICAgICAgICBhdXRvIGxvY2FsU3RvcmFnZVBhdGggPSBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aChsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkpOworICAgICAgICBpZiAoIW1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkgJiYg
IUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobG9jYWxTdG9yYWdlUGF0aCkgJiYgRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgpKQorICAgICAgICAgICAgV2ViQ29y
ZTo6U1FMaXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZShtX2N1c3RvbUxvY2FsU3RvcmFn
ZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwogCi0gICAgICAgIGF1dG8gZmlsZVN5c3RlbVN0b3Jh
Z2VQYXRoID0gdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVtKTsKLSAgICAg
ICAgRmlsZVN5c3RlbTo6ZGVsZXRlQWxsRmlsZXNNb2RpZmllZFNpbmNlKGZpbGVTeXN0ZW1TdG9y
YWdlUGF0aCwgbW9kaWZpZWRTaW5jZVRpbWUpOwotICAgIH0KKyAgICAgICAgbV9yZXNvbHZlZExv
Y2FsU3RvcmFnZVBhdGggPSBsb2NhbFN0b3JhZ2VQYXRoOworICAgIH0gZWxzZQorICAgICAgICBt
X3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCA9IGVtcHR5U3RyaW5nKCk7CiAKLSAgICB2b2lkIGRl
bGV0ZUxvY2FsU3RvcmFnZURhdGEoV2FsbFRpbWUgdGltZSkKLSAgICB7Ci0gICAgICAgIGF1dG8g
Y3VycmVudExvY2FsU3RvcmFnZVBhdGggPSByZXNvbHZlZExvY2FsU3RvcmFnZVBhdGgoKTsKLSAg
ICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVNb2RpZmljYXRpb25UaW1lKGN1cnJlbnRMb2NhbFN0
b3JhZ2VQYXRoKSA+PSB0aW1lKSB7Ci0gICAgICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5h
Z2VyKQotICAgICAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xlYXJEYXRhT25E
aXNrKCk7Ci0gICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRh
YmFzZUZpbGUoY3VycmVudExvY2FsU3RvcmFnZVBhdGgpOwotICAgICAgICB9CisgICAgcmV0dXJu
IG1fcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoOworfQogCi0gICAgICAgIGlmICghbV9sb2NhbFN0
b3JhZ2VNYW5hZ2VyKQotICAgICAgICAgICAgcmV0dXJuOworU3RyaW5nIE9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpyZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFn
ZXItPmNsZWFyRGF0YUluTWVtb3J5KCk7Ci0gICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5h
Z2VyLT5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbnVs
bHB0cjsKLSAgICB9CisgICAgaWYgKCFtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGguaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGg7CiAKLSAgICB2b2lkIGRl
bGV0ZVNlc3Npb25TdG9yYWdlRGF0YSgpCi0gICAgewotICAgICAgICBpZiAoIW1fc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3Nob3VsZFVzZUN1
c3RvbVBhdGhzKSB7CisgICAgICAgIEFTU0VSVChtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoLmlzRW1w
dHkoKSA9PSBtX3Jvb3RQYXRoLmlzRW1wdHkoKSk7CisgICAgICAgIG1fcmVzb2x2ZWRJREJTdG9y
YWdlUGF0aCA9IG1fY3VzdG9tSURCU3RvcmFnZVBhdGg7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YXV0byBpZGJTdG9yYWdlUGF0aCA9IHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZTo6SW5kZXhl
ZERCKTsKKyAgICAgICAgaWYgKCFtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoLmlzRW1wdHkoKSAmJiAh
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhpZGJTdG9yYWdlUGF0aCkgJiYgRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoKSkgeworICAgICAgICAgICAgRmlsZVN5c3Rl
bTo6bWFrZUFsbERpcmVjdG9yaWVzKGlkYlN0b3JhZ2VQYXRoKTsKKyAgICAgICAgICAgIEZpbGVT
eXN0ZW06Om1vdmVGaWxlKG1fY3VzdG9tSURCU3RvcmFnZVBhdGgsIGlkYlN0b3JhZ2VQYXRoKTsK
KyAgICAgICAgfQogCi0gICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jbGVhckRhdGEo
KTsKLSAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUoKSkKLSAg
ICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICAgICAgbV9y
ZXNvbHZlZElEQlN0b3JhZ2VQYXRoID0gaWRiU3RvcmFnZVBhdGg7CiAgICAgfQogICAgIAotICAg
IHZvaWQgZGVsZXRlSURCU3RvcmFnZURhdGEoV2FsbFRpbWUgdGltZSkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2lkYlN0b3JhZ2VNYW5hZ2VyKQotICAgICAgICAgICAgbV9pZGJTdG9yYWdlTWFuYWdl
ci0+Y2xvc2VEYXRhYmFzZXNGb3JEZWxldGlvbigpOwotCi0gICAgICAgIEZpbGVTeXN0ZW06OmRl
bGV0ZUFsbEZpbGVzTW9kaWZpZWRTaW5jZShyZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCksIHRpbWUp
OwotICAgIH0KLQotICAgIFN0cmluZyBtX3Jvb3RQYXRoOwotICAgIFN0cmluZyBtX2lkZW50aWZp
ZXI7Ci0gICAgU3RvcmFnZUJ1Y2tldE1vZGUgbV9tb2RlIHsgU3RvcmFnZUJ1Y2tldE1vZGU6OkJl
c3RFZmZvcnQgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2Vy
PiBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxT
dG9yYWdlTWFuYWdlcj4gbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyOwotICAgIFN0cmluZyBtX2N1c3Rv
bUxvY2FsU3RvcmFnZVBhdGg7Ci0gICAgU3RyaW5nIG1fcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRo
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+IG1fc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJTdG9yYWdlTWFuYWdlcj4gbV9p
ZGJTdG9yYWdlTWFuYWdlcjsKLSAgICBTdHJpbmcgbV9jdXN0b21JREJTdG9yYWdlUGF0aDsKLSAg
ICBTdHJpbmcgbV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoOwotICAgIGJvb2wgbV9zaG91bGRVc2VD
dXN0b21QYXRoczsKLX07CisgICAgQVNTRVJUKCFtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGguaXNO
dWxsKCkpOworICAgIHJldHVybiBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGg7Cit9CiAKIFN0cmlu
ZyBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6b3JpZ2luRmlsZUlkZW50aWZpZXIoKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453515</attachid>
            <date>2022-03-01 11:44:41 -0800</date>
            <delta_ts>2022-03-01 11:58:41 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-237300-20220301114440.patch</filename>
            <type>text/plain</type>
            <size>30546</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDllNzhlNDYyNWM1NTllNjMx
ZDQ0NjQ3M2QzMDg3Nzg5Y2FlZjAzMGQuLjE1ODVhZjg3NjcyN2EzNzhiYTRiZTA5YTZlODc4OWRm
OTc2N2IxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjItMDMtMDEgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTdG9yYWdlQnVja2V0IGZ1
bmN0aW9uIGRlZmluaXRpb25zIG91dHNpZGUgdGhlIGNsYXNzIGRlZmluaXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzMwMAorCisgICAgICAg
IFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vZGUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6c2V0TW9kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpTdG9yYWdl
QnVja2V0KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VC
dWNrZXQ6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0eXBlU3Rv
cmFnZVBhdGggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
U3RvcmFnZUJ1Y2tldDo6ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2FsU3RvcmFnZU1hbmFn
ZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tl
dDo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlz
dGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjppZGJTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ0lEQlN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3Qp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
ZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURp
c2spOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tl
dDo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQnVja2V0OjpkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlTG9jYWxTdG9y
YWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmln
aW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlSURCU3RvcmFnZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6bW92
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6cmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnJlc29sdmVkSURCU3RvcmFnZVBhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9X
ZWJzaXRlRGF0YVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6IERlbGV0ZWQuCisK
IDIwMjItMDMtMDEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgZm9jdXMoe3ByZXZlbnRTY3JvbGw6IHRydWV9KSBkb2VzIG5vdCBwcmV2ZW50IHNjcm9s
bGluZyBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAppbmRleCAyNjU1OGZiNTZiNGI5NmI2
MTc2NmJlMTk1MGNiY2ZhZTA1NDJlYzJiLi4yZjkyNjVkM2YwZTdjMWQ2OWExN2M4NGM2MjkwZmE0
NmUwYzAyYjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCkBAIC00MCw3ICs0MCw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9JbmRleGVkREIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4K
IAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBTaGFyZWRGaWxlSGFuZGxlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdl
TWFuYWdlci5jcHAKaW5kZXggMTM3ZmRjNDVmNDc2NWZkNTQ0YzY4ODMxZjY0YmMyOWEzNmMwOTc0
Yi4uODZjZjY4ZDUyNzg1YTU5OTJhNmZkNjUwODlmMTBkZmJhOWNmOGIyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3Rv
cmFnZU1hbmFnZXIuY3BwCkBAIC00NywzNDcgKzQ3LDM0MiBAQCBlbnVtIGNsYXNzIE9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2wgeyBCZXN0RWZmb3J0LCBQZXJz
aXN0ZQogY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0b3JhZ2VCdWNrZXQoY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGxvY2FsU3RvcmFnZVBhdGgsIGNvbnN0IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgsIGJvb2wgc2hv
dWxkVXNlQ3VzdG9tUGF0aHMpCi0gICAgICAgIDogbV9yb290UGF0aChyb290UGF0aCkKLSAgICAg
ICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAgICAgLCBtX2N1c3RvbUxvY2FsU3Rv
cmFnZVBhdGgobG9jYWxTdG9yYWdlUGF0aCkKLSAgICAgICAgLCBtX2N1c3RvbUlEQlN0b3JhZ2VQ
YXRoKGlkYlN0b3JhZ2VQYXRoKQotICAgICAgICAsIG1fc2hvdWxkVXNlQ3VzdG9tUGF0aHMoc2hv
dWxkVXNlQ3VzdG9tUGF0aHMpCi0gICAgewotICAgIH0KLQotICAgIFN0b3JhZ2VCdWNrZXRNb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICB2b2lkIHNldE1vZGUoU3RvcmFn
ZUJ1Y2tldE1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9Ci0KLSAgICB2b2lkIGNvbm5lY3Rp
b25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKQotICAgICAgICAgICAgbV9maWxl
U3lzdGVtU3RvcmFnZU1hbmFnZXItPmNvbm5lY3Rpb25DbG9zZWQoY29ubmVjdGlvbik7Ci0KLSAg
ICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1fbG9jYWxTdG9y
YWdlTWFuYWdlci0+Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKLQotICAgICAgICBpZiAo
bV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCi0gICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlci0+Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKLSAgICB9Ci0KICAgICBlbnVtIGNs
YXNzIFN0b3JhZ2VUeXBlIDogdWludDhfdCB7CiAgICAgICAgIEZpbGVTeXN0ZW0sCiAgICAgICAg
IExvY2FsU3RvcmFnZSwKICAgICAgICAgU2Vzc2lvblN0b3JhZ2UsCiAgICAgICAgIEluZGV4ZWRE
QiwKICAgICB9OworICAgIFN0cmluZyB0b1N0b3JhZ2VJZGVudGlmaWVyKFN0b3JhZ2VUeXBlKSBj
b25zdDsKKyAgICBTdG9yYWdlQnVja2V0KGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBjb25zdCBT
dHJpbmcmIGlkYlN0b3JhZ2VQYXRoLCBib29sIHNob3VsZFVzZUN1c3RvbVBhdGhzKTsKKyAgICBT
dG9yYWdlQnVja2V0TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgdm9p
ZCBzZXRNb2RlKFN0b3JhZ2VCdWNrZXRNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQorICAg
IHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rp
b24pOworICAgIFN0cmluZyB0eXBlU3RvcmFnZVBhdGgoU3RvcmFnZVR5cGUgdHlwZSkgY29uc3Q7
CisgICAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBmaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIo
RmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFnZU1hbmFn
ZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIExvY2Fs
U3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1f
bG9jYWxTdG9yYWdlTWFuYWdlci5nZXQoKTsgfQorICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciYg
c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBTZXNzaW9u
U3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4g
bV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KKyAgICBJREJTdG9yYWdlTWFuYWdlciYg
aWRiU3RvcmFnZU1hbmFnZXIoSURCU3RvcmFnZVJlZ2lzdHJ5JiwgSURCU3RvcmFnZU1hbmFnZXI6
OlF1b3RhQ2hlY2tGdW5jdGlvbiYmKTsKKyAgICBJREJTdG9yYWdlTWFuYWdlciogZXhpc3RpbmdJ
REJTdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1faWRiU3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0K
KyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCk7CisgICAgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3QoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4pOworICAgIHZvaWQgZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgV2FsbFRpbWUpOworICAgIHZvaWQgbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCwgY29uc3QgU3RyaW5nJiBp
ZGJTdG9yYWdlUGF0aCk7CisgICAgU3RyaW5nIHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgpOwor
ICAgIFN0cmluZyByZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCk7CiAKLSAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlKGNvbnN0IFN0cmluZyYg
c3RvcmFnZUlkZW50aWZpZXIpCi0gICAgewotICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIg
PT0gIkZpbGVTeXN0ZW0iX3MpCi0gICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpG
aWxlU3lzdGVtOwotICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkxvY2FsU3RvcmFn
ZSJfcykKLSAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsK
LSAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJTZXNzaW9uU3RvcmFnZSJfcykKLSAg
ICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlOwotICAgICAg
ICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkluZGV4ZWREQiJfcykKLSAgICAgICAgICAgIHJl
dHVybiBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlczsKLQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIH0KK3ByaXZhdGU6CisgICAgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5KE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+KTsKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBl
c0luTGlzdEZyb21EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKKyAgICB2b2lkIGRl
bGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShXYWxsVGltZSk7CisgICAgdm9pZCBkZWxldGVMb2Nh
bFN0b3JhZ2VEYXRhKFdhbGxUaW1lKTsKKyAgICB2b2lkIGRlbGV0ZVNlc3Npb25TdG9yYWdlRGF0
YSgpOworICAgIHZvaWQgZGVsZXRlSURCU3RvcmFnZURhdGEoV2FsbFRpbWUpOwogCi0gICAgc3Rh
dGljIFN0cmluZyB0b1N0b3JhZ2VJZGVudGlmaWVyKFN0b3JhZ2VUeXBlIHR5cGUpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6RmlsZVN5
c3RlbToKLSAgICAgICAgICAgIHJldHVybiAiRmlsZVN5c3RlbSJfczsKLSAgICAgICAgY2FzZSBT
dG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICJMb2NhbFN0b3Jh
Z2UiX3M7Ci0gICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OlNlc3Npb25TdG9yYWdlOgotICAgICAg
ICAgICAgcmV0dXJuICJTZXNzaW9uU3RvcmFnZSJfczsKLSAgICAgICAgY2FzZSBTdG9yYWdlVHlw
ZTo6SW5kZXhlZERCOgotICAgICAgICAgICAgcmV0dXJuICJJbmRleGVkREIiX3M7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuICIiX3M7Ci0gICAgfQorICAgIFN0cmluZyBt
X3Jvb3RQYXRoOworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgU3RvcmFnZUJ1Y2tldE1v
ZGUgbV9tb2RlIHsgU3RvcmFnZUJ1Y2tldE1vZGU6OkJlc3RFZmZvcnQgfTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8RmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyPiBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFu
YWdlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxTdG9yYWdlTWFuYWdlcj4gbV9sb2NhbFN0
b3JhZ2VNYW5hZ2VyOworICAgIFN0cmluZyBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGg7CisgICAg
U3RyaW5nIG1fcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoOworICAgIHN0ZDo6dW5pcXVlX3B0cjxT
ZXNzaW9uU3RvcmFnZU1hbmFnZXI+IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJREJTdG9yYWdlTWFuYWdlcj4gbV9pZGJTdG9yYWdlTWFuYWdlcjsKKyAgICBT
dHJpbmcgbV9jdXN0b21JREJTdG9yYWdlUGF0aDsKKyAgICBTdHJpbmcgbV9yZXNvbHZlZElEQlN0
b3JhZ2VQYXRoOworICAgIGJvb2wgbV9zaG91bGRVc2VDdXN0b21QYXRoczsKK307CisKK09yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpTdG9yYWdlQnVja2V0KGNvbnN0IFN0cmlu
ZyYgcm9vdFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBsb2Nh
bFN0b3JhZ2VQYXRoLCBjb25zdCBTdHJpbmcmIGlkYlN0b3JhZ2VQYXRoLCBib29sIHNob3VsZFVz
ZUN1c3RvbVBhdGhzKQorICAgIDogbV9yb290UGF0aChyb290UGF0aCkKKyAgICAsIG1faWRlbnRp
ZmllcihpZGVudGlmaWVyKQorICAgICwgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKGxvY2FsU3Rv
cmFnZVBhdGgpCisgICAgLCBtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoKGlkYlN0b3JhZ2VQYXRoKQor
ICAgICwgbV9zaG91bGRVc2VDdXN0b21QYXRocyhzaG91bGRVc2VDdXN0b21QYXRocykKK3sKK30K
IAotICAgIFN0cmluZyB0eXBlU3RvcmFnZVBhdGgoU3RvcmFnZVR5cGUgdHlwZSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGF1dG8gc3RvcmFnZUlkZW50aWZpZXIgPSB0b1N0b3JhZ2VJZGVudGlmaWVy
KHR5cGUpOwotICAgICAgICBpZiAobV9yb290UGF0aC5pc0VtcHR5KCkgfHwgc3RvcmFnZUlkZW50
aWZpZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit2b2lk
IE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpjb25uZWN0aW9uQ2xvc2VkKElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBpZiAobV9maWxlU3lz
dGVtU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLT5j
b25uZWN0aW9uQ2xvc2VkKGNvbm5lY3Rpb24pOwogCi0gICAgICAgIHJldHVybiBGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9yb290UGF0aCwgc3RvcmFnZUlkZW50aWZpZXIp
OwotICAgIH0KKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX2xvY2Fs
U3RvcmFnZU1hbmFnZXItPmNvbm5lY3Rpb25DbG9zZWQoY29ubmVjdGlvbik7CiAKLSAgICBGaWxl
U3lzdGVtU3RvcmFnZU1hbmFnZXImIGZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihGaWxlU3lzdGVt
U3RvcmFnZUhhbmRsZVJlZ2lzdHJ5JiByZWdpc3RyeSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9m
aWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIpCi0gICAgICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdl
TWFuYWdlciA9IG1ha2VVbmlxdWU8RmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyPih0eXBlU3RvcmFn
ZVBhdGgoU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW0pLCByZWdpc3RyeSk7CisgICAgaWYgKG1fc2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+Y29u
bmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKK30KIAotICAgICAgICByZXR1cm4gKm1fZmlsZVN5
c3RlbVN0b3JhZ2VNYW5hZ2VyOworU3RyaW5nIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojp0b1N0b3JhZ2VJZGVudGlmaWVyKFN0b3JhZ2VUeXBlIHR5cGUpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbToKKyAg
ICAgICAgcmV0dXJuICJGaWxlU3lzdGVtIl9zOworICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2Fs
U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJMb2NhbFN0b3JhZ2UiX3M7CisgICAgY2FzZSBTdG9y
YWdlVHlwZTo6U2Vzc2lvblN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiU2Vzc2lvblN0b3JhZ2Ui
X3M7CisgICAgY2FzZSBTdG9yYWdlVHlwZTo6SW5kZXhlZERCOgorICAgICAgICByZXR1cm4gIklu
ZGV4ZWREQiJfczsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CiAKLSAgICBM
b2NhbFN0b3JhZ2VNYW5hZ2VyJiBsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0
cnkmIHJlZ2lzdHJ5KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXIp
Ci0gICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPExvY2FsU3Rv
cmFnZU1hbmFnZXI+KHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgpLCByZWdpc3RyeSk7CitTdHJp
bmcgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnR5cGVTdG9yYWdlUGF0aChT
dG9yYWdlVHlwZSB0eXBlKSBjb25zdAoreworICAgIGF1dG8gc3RvcmFnZUlkZW50aWZpZXIgPSB0
b1N0b3JhZ2VJZGVudGlmaWVyKHR5cGUpOworICAgIGlmIChtX3Jvb3RQYXRoLmlzRW1wdHkoKSB8
fCBzdG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCi0gICAgICAgIHJldHVybiAqbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyOwotICAgIH0KKyAg
ICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcm9vdFBhdGgs
IHN0b3JhZ2VJZGVudGlmaWVyKTsKK30KIAotICAgIExvY2FsU3RvcmFnZU1hbmFnZXIqIGV4aXN0
aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9sb2NhbFN0
b3JhZ2VNYW5hZ2VyLmdldCgpOwotICAgIH0KK0ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciYgT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdl
cihGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5JiByZWdpc3RyeSkKK3sKKyAgICBpZiAo
IW1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdl
TWFuYWdlciA9IG1ha2VVbmlxdWU8RmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyPih0eXBlU3RvcmFn
ZVBhdGgoU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW0pLCByZWdpc3RyeSk7CiAKLSAgICBTZXNzaW9u
U3RvcmFnZU1hbmFnZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5
JiByZWdpc3RyeSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIp
Ci0gICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8U2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyPihyZWdpc3RyeSk7CisgICAgcmV0dXJuICptX2ZpbGVTeXN0ZW1TdG9y
YWdlTWFuYWdlcjsKK30KIAotICAgICAgICByZXR1cm4gKm1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
OwotICAgIH0KK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lz
dHJ5KQoreworICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBtX2xvY2Fs
U3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPExvY2FsU3RvcmFnZU1hbmFnZXI+KHJlc29sdmVk
TG9jYWxTdG9yYWdlUGF0aCgpLCByZWdpc3RyeSk7CiAKLSAgICBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXIqIGV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci5nZXQoKTsKLSAgICB9CisgICAgcmV0dXJuICptX2xv
Y2FsU3RvcmFnZU1hbmFnZXI7Cit9CiAKLSAgICBJREJTdG9yYWdlTWFuYWdlciYgaWRiU3RvcmFn
ZU1hbmFnZXIoSURCU3RvcmFnZVJlZ2lzdHJ5JiByZWdpc3RyeSwgSURCU3RvcmFnZU1hbmFnZXI6
OlF1b3RhQ2hlY2tGdW5jdGlvbiYmIHF1b3RhQ2hlY2tGdW5jdGlvbikKLSAgICB7Ci0gICAgICAg
IGlmICghbV9pZGJTdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1faWRiU3RvcmFnZU1hbmFn
ZXIgPSBtYWtlVW5pcXVlPElEQlN0b3JhZ2VNYW5hZ2VyPihyZXNvbHZlZElEQlN0b3JhZ2VQYXRo
KCksIHJlZ2lzdHJ5LCBXVEZNb3ZlKHF1b3RhQ2hlY2tGdW5jdGlvbikpOworU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6c2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQoreworICAgIGlmICgh
bV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
ID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+KHJlZ2lzdHJ5KTsKIAotICAgICAg
ICByZXR1cm4gKm1faWRiU3RvcmFnZU1hbmFnZXI7Ci0gICAgfQorICAgIHJldHVybiAqbV9zZXNz
aW9uU3RvcmFnZU1hbmFnZXI7Cit9CiAKLSAgICBJREJTdG9yYWdlTWFuYWdlciogZXhpc3RpbmdJ
REJTdG9yYWdlTWFuYWdlcigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9pZGJTdG9yYWdlTWFu
YWdlci5nZXQoKTsKLSAgICB9CitJREJTdG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OlN0b3JhZ2VCdWNrZXQ6OmlkYlN0b3JhZ2VNYW5hZ2VyKElEQlN0b3JhZ2VSZWdpc3RyeSYg
cmVnaXN0cnksIElEQlN0b3JhZ2VNYW5hZ2VyOjpRdW90YUNoZWNrRnVuY3Rpb24mJiBxdW90YUNo
ZWNrRnVuY3Rpb24pCit7CisgICAgaWYgKCFtX2lkYlN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBt
X2lkYlN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxJREJTdG9yYWdlTWFuYWdlcj4ocmVzb2x2
ZWRJREJTdG9yYWdlUGF0aCgpLCByZWdpc3RyeSwgV1RGTW92ZShxdW90YUNoZWNrRnVuY3Rpb24p
KTsKIAotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gV2UgY2Fu
bm90IHJlbW92ZSB0aGUgYnVja2V0IGlmIGl0IGhhcyBpbi1tZW1vcnkgZGF0YSwgb3RoZXJ3aXNl
IHNlc3Npb24KLSAgICAgICAgLy8gZGF0YSBtYXkgYmUgbG9zdC4KLSAgICAgICAgcmV0dXJuICht
X2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciAmJiBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci0+
aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIHx8IChtX2xvY2FsU3RvcmFnZU1hbmFnZXIgJiYgKG1f
bG9jYWxTdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkgfHwgbV9sb2NhbFN0b3JhZ2VN
YW5hZ2VyLT5pc0FjdGl2ZSgpKSkKLSAgICAgICAgICAgIHx8IChtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlciAmJiAobV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9yeSgpIHx8IG1f
c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKSkKLSAgICAgICAgICAgIHx8IChtX2lk
YlN0b3JhZ2VNYW5hZ2VyICYmIChtX2lkYlN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnko
KSB8fCBtX2lkYlN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKSk7Ci0gICAgfQorICAgIHJldHVy
biAqbV9pZGJTdG9yYWdlTWFuYWdlcjsKK30KIAotICAgIGJvb2wgaXNFbXB0eSgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKK2Jvb2wgT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICAvLyBXZSBjYW5u
b3QgcmVtb3ZlIHRoZSBidWNrZXQgaWYgaXQgaGFzIGluLW1lbW9yeSBkYXRhLCBvdGhlcndpc2Ug
c2Vzc2lvbgorICAgIC8vIGRhdGEgbWF5IGJlIGxvc3QuCisgICAgcmV0dXJuIChtX2ZpbGVTeXN0
ZW1TdG9yYWdlTWFuYWdlciAmJiBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUo
KSkKKyAgICAgICAgfHwgKG1fbG9jYWxTdG9yYWdlTWFuYWdlciAmJiAobV9sb2NhbFN0b3JhZ2VN
YW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSB8fCBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0
aXZlKCkpKQorICAgICAgICB8fCAobV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgJiYgKG1fc2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSB8fCBtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlci0+aXNBY3RpdmUoKSkpCisgICAgICAgIHx8IChtX2lkYlN0b3JhZ2VNYW5hZ2VyICYmICht
X2lkYlN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSB8fCBtX2lkYlN0b3JhZ2VNYW5h
Z2VyLT5pc0FjdGl2ZSgpKSk7Cit9CiAKLSAgICAgICAgYXV0byBmaWxlcyA9IEZpbGVTeXN0ZW06
Omxpc3REaXJlY3RvcnkobV9yb290UGF0aCk7Ci0gICAgICAgIGF1dG8gaGFzVmFsaWRGaWxlID0g
V1RGOjphbnlPZihmaWxlcywgWyZdKGF1dG8gZmlsZSkgewotICAgICAgICAgICAgYm9vbCBpc0lu
dmFsaWRGaWxlID0gKGZpbGUgPT0gb3JpZ2luRmlsZU5hbWUpOworYm9vbCBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNFbXB0eSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBhdXRvIGZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eShtX3Jvb3RQYXRoKTsKKyAgICBhdXRvIGhhc1ZhbGlkRmlsZSA9IFdURjo6YW55T2YoZmlsZXMs
IFsmXShhdXRvIGZpbGUpIHsKKyAgICAgICAgYm9vbCBpc0ludmFsaWRGaWxlID0gKGZpbGUgPT0g
b3JpZ2luRmlsZU5hbWUpOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICAgICAgaXNJbnZh
bGlkRmlsZSB8PSAoZmlsZSA9PSAiLkRTX1N0b3JlIik7CisgICAgICAgIGlzSW52YWxpZEZpbGUg
fD0gKGZpbGUgPT0gIi5EU19TdG9yZSIpOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gIWlz
SW52YWxpZEZpbGU7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAoaGFzVmFsaWRGaWxlKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gIWlzSW52YWxpZEZpbGU7Cisg
ICAgfSk7CisgICAgaWYgKGhhc1ZhbGlkRmlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGF1dG8gaWRiU3RvcmFnZUZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShy
ZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCkpOwotICAgICAgICByZXR1cm4gIUZpbGVTeXN0ZW06OmZp
bGVFeGlzdHMocmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkpICYmIGlkYlN0b3JhZ2VGaWxlcy5p
c0VtcHR5KCk7CisgICAgYXV0byBpZGJTdG9yYWdlRmlsZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGly
ZWN0b3J5KHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKSk7CisgICAgcmV0dXJuICFGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgpKSAmJiBpZGJTdG9yYWdlRmls
ZXMuaXNFbXB0eSgpOworfQorCitPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3QoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgYXV0byByZXN1bHQgPSBmZXRjaERhdGFU
eXBlc0luTGlzdEZyb21NZW1vcnkodHlwZXMpOworICAgIHJlc3VsdC5hZGQoZmV0Y2hEYXRhVHlw
ZXNJbkxpc3RGcm9tRGlzayh0eXBlcykpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNr
ZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbU1lbW9yeShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiB0eXBlcykKK3sKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQ7Cisg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgewor
ICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyICYmIG1fbG9jYWxTdG9yYWdlTWFuYWdl
ci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRh
VHlwZTo6TG9jYWxTdG9yYWdlKTsKICAgICB9CiAKLSAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdChPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBl
cykKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9t
TWVtb3J5KHR5cGVzKTsKLSAgICAgICAgcmVzdWx0LmFkZChmZXRjaERhdGFUeXBlc0luTGlzdEZy
b21EaXNrKHR5cGVzKSk7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
U2Vzc2lvblN0b3JhZ2UpKSB7CisgICAgICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciAm
JiBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAg
ICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAgIH0KIAot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKKyAgICAgICAgaWYgKG1faWRiU3RvcmFnZU1h
bmFnZXIgJiYgbV9pZGJTdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAg
ICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKTsKICAg
ICB9CiAKLSAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlw
ZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpCi0gICAgICAgICAgICBkZWxl
dGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CiAKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
TG9jYWxTdG9yYWdlKSkKLSAgICAgICAgICAgIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEobW9kaWZp
ZWRTaW5jZVRpbWUpOworT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURpc2soT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gcmVzdWx0OworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZp
bGVTeXN0ZW0pKSB7CisgICAgICAgIGF1dG8gZmlsZVN5c3RlbVN0b3JhZ2VQYXRoID0gdHlwZVN0
b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVtKTsKKyAgICAgICAgaWYgKGF1dG8gZmls
ZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KGZpbGVTeXN0ZW1TdG9yYWdlUGF0aCk7ICFm
aWxlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6
RmlsZVN5c3RlbSk7CisgICAgfQogCi0gICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtb2RpZmllZFNpbmNlVGltZSA8IFdhbGxUaW1l
Ojpub3coKSkKLSAgICAgICAgICAgIGRlbGV0ZVNlc3Npb25TdG9yYWdlRGF0YSgpOworICAgIGlm
ICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAg
ICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMocmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkp
KQorICAgICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7
CisgICAgfQogCi0gICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Oklu
ZGV4ZWREQkRhdGFiYXNlcykpCi0gICAgICAgICAgICBkZWxldGVJREJTdG9yYWdlRGF0YShtb2Rp
ZmllZFNpbmNlVGltZSk7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
SW5kZXhlZERCRGF0YWJhc2VzKSkgeworICAgICAgICBpZiAoYXV0byBkYXRhYmFzZXMgPSBGaWxl
U3lzdGVtOjpsaXN0RGlyZWN0b3J5KHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKSk7ICFkYXRhYmFz
ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6Oklu
ZGV4ZWREQkRhdGFiYXNlcyk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBj
b25zdCBTdHJpbmcmIGlkYlN0b3JhZ2VQYXRoKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBv
bmx5IHN1cHBvcnRlZCBmb3IgSW5kZXhlZERCIGFuZCBMb2NhbFN0b3JhZ2Ugbm93LgotICAgICAg
ICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmICFs
b2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKG1fbG9jYWxTdG9y
YWdlTWFuYWdlcikKLSAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsb3Nl
KCk7Ci0KLSAgICAgICAgICAgIGF1dG8gY3VycmVudExvY2FsU3RvcmFnZVBhdGggPSByZXNvbHZl
ZExvY2FsU3RvcmFnZVBhdGgoKTsKLSAgICAgICAgICAgIGlmICghY3VycmVudExvY2FsU3RvcmFn
ZVBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERp
cmVjdG9yaWVzKEZpbGVTeXN0ZW06OnBhcmVudFBhdGgobG9jYWxTdG9yYWdlUGF0aCkpOwotICAg
ICAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUo
Y3VycmVudExvY2FsU3RvcmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotICAgICAgICBpZiAodHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYmICFpZGJTdG9y
YWdlUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChtX2lkYlN0b3JhZ2VNYW5hZ2Vy
KQotICAgICAgICAgICAgICAgIG1faWRiU3RvcmFnZU1hbmFnZXItPmNsb3NlRGF0YWJhc2VzRm9y
RGVsZXRpb24oKTsKK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRl
bGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlm
aWVkU2luY2VUaW1lKQoreworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkZpbGVTeXN0ZW0pKQorICAgICAgICBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZp
ZWRTaW5jZVRpbWUpOwogCi0gICAgICAgICAgICBhdXRvIGN1cnJlbnRJREJTdG9yYWdlUGF0aCA9
IHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKTsKLSAgICAgICAgICAgIGlmICghY3VycmVudElEQlN0
b3JhZ2VQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VB
bGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKGlkYlN0b3JhZ2VQYXRoKSk7Ci0g
ICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUoY3VycmVudElEQlN0b3JhZ2VQYXRo
LCBpZGJTdG9yYWdlUGF0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAg
aWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkKKyAgICAg
ICAgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7CiAKLSAgICBTdHJp
bmcgcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9yZXNv
bHZlZExvY2FsU3RvcmFnZVBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9yZXNv
bHZlZExvY2FsU3RvcmFnZVBhdGg7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1vZGlmaWVkU2luY2VUaW1lIDwgV2FsbFRpbWU6Om5v
dygpKQorICAgICAgICBkZWxldGVTZXNzaW9uU3RvcmFnZURhdGEoKTsKIAotICAgICAgICBpZiAo
bV9zaG91bGRVc2VDdXN0b21QYXRocykgewotICAgICAgICAgICAgQVNTRVJUKG1fY3VzdG9tTG9j
YWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkgPT0gbV9yb290UGF0aC5pc0VtcHR5KCkpOwotICAgICAg
ICAgICAgbV9yZXNvbHZlZExvY2FsU3RvcmFnZVBhdGggPSBtX2N1c3RvbUxvY2FsU3RvcmFnZVBh
dGg7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fcm9vdFBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IHR5cGVTdG9yYWdlUGF0aChTdG9yYWdl
VHlwZTo6TG9jYWxTdG9yYWdlKTsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJl
Y3Rvcmllcyhsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwotICAgICAgICAgICAgRmlsZVN5c3RlbTo6
ZXhjbHVkZUZyb21CYWNrdXAobG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKKyAgICBpZiAodHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKQorICAgICAgICBk
ZWxldGVJREJTdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7Cit9CiAKLSAgICAgICAgICAg
IGF1dG8gbG9jYWxTdG9yYWdlUGF0aCA9IExvY2FsU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFn
ZUZpbGVQYXRoKGxvY2FsU3RvcmFnZURpcmVjdG9yeSk7Ci0gICAgICAgICAgICBpZiAoIW1fY3Vz
dG9tTG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkgJiYgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
bG9jYWxTdG9yYWdlUGF0aCkgJiYgRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2N1c3RvbUxvY2Fs
U3RvcmFnZVBhdGgpKQotICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06
Om1vdmVEYXRhYmFzZUZpbGUobV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBsb2NhbFN0b3JhZ2VQ
YXRoKTsKK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUZp
bGVTeXN0ZW1TdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKK3sKKyAgICBt
X2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7CiAKLSAgICAgICAgICAgIG1fcmVz
b2x2ZWRMb2NhbFN0b3JhZ2VQYXRoID0gbG9jYWxTdG9yYWdlUGF0aDsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCA9IGVtcHR5U3RyaW5nKCk7
CisgICAgYXV0byBmaWxlU3lzdGVtU3RvcmFnZVBhdGggPSB0eXBlU3RvcmFnZVBhdGgoU3RvcmFn
ZVR5cGU6OkZpbGVTeXN0ZW0pOworICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUFsbEZpbGVzTW9kaWZp
ZWRTaW5jZShmaWxlU3lzdGVtU3RvcmFnZVBhdGgsIG1vZGlmaWVkU2luY2VUaW1lKTsKK30KIAot
ICAgICAgICByZXR1cm4gbV9yZXNvbHZlZExvY2FsU3RvcmFnZVBhdGg7Cit2b2lkIE9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKFdhbGxU
aW1lIHRpbWUpCit7CisgICAgYXV0byBjdXJyZW50TG9jYWxTdG9yYWdlUGF0aCA9IHJlc29sdmVk
TG9jYWxTdG9yYWdlUGF0aCgpOworICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9u
VGltZShjdXJyZW50TG9jYWxTdG9yYWdlUGF0aCkgPj0gdGltZSkgeworICAgICAgICBpZiAobV9s
b2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5j
bGVhckRhdGFPbkRpc2soKTsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVs
ZXRlRGF0YWJhc2VGaWxlKGN1cnJlbnRMb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB9CiAKLSAgICBT
dHJpbmcgcmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpCi0gICAgewotICAgICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghbV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoLmlzTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRJREJTdG9yYWdlUGF0aDsKKyAgICBt
X2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YUluTWVtb3J5KCk7CisgICAgaWYgKCFtX2xv
Y2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFu
YWdlciA9IG51bGxwdHI7Cit9CiAKLSAgICAgICAgaWYgKG1fc2hvdWxkVXNlQ3VzdG9tUGF0aHMp
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoLmlzRW1wdHkoKSA9
PSBtX3Jvb3RQYXRoLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBtX3Jlc29sdmVkSURCU3RvcmFn
ZVBhdGggPSBtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgYXV0byBpZGJTdG9yYWdlUGF0aCA9IHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZTo6
SW5kZXhlZERCKTsKLSAgICAgICAgICAgIElEQlN0b3JhZ2VNYW5hZ2VyOjptaWdyYXRlT3JpZ2lu
RGF0YShtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoLCBpZGJTdG9yYWdlUGF0aCk7Ci0gICAgICAgICAg
ICBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGggPSBpZGJTdG9yYWdlUGF0aDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGguaXNOdWxs
KCkpOwotICAgICAgICByZXR1cm4gbV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoOwotICAgIH0KK3Zv
aWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZVNlc3Npb25TdG9y
YWdlRGF0YSgpCit7CisgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcikKKyAgICAgICAg
cmV0dXJuOwogCi1wcml2YXRlOgotICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNo
RGF0YVR5cGVzSW5MaXN0RnJvbU1lbW9yeShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBl
cykKLSAgICB7Ci0gICAgICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdDsKLSAg
ICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkg
ewotICAgICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlciAmJiBtX2xvY2FsU3RvcmFn
ZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9yeSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQo
V2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOwotICAgICAgICB9CisgICAgbV9zZXNzaW9u
U3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YSgpOworICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXItPmlzQWN0aXZlKCkpCisgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0gbnVs
bHB0cjsKK30KIAotICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpT
ZXNzaW9uU3RvcmFnZSkpIHsKLSAgICAgICAgICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlTWFuYWdl
ciAmJiBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKTsKLSAg
ICAgICAgfQordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRl
SURCU3RvcmFnZURhdGEoV2FsbFRpbWUgdGltZSkKK3sKKyAgICBpZiAobV9pZGJTdG9yYWdlTWFu
YWdlcikKKyAgICAgICAgbV9pZGJTdG9yYWdlTWFuYWdlci0+Y2xvc2VEYXRhYmFzZXNGb3JEZWxl
dGlvbigpOwogCi0gICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Oklu
ZGV4ZWREQkRhdGFiYXNlcykpIHsKLSAgICAgICAgICAgIGlmIChtX2lkYlN0b3JhZ2VNYW5hZ2Vy
ICYmIG1faWRiU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9yeSgpKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpOwotICAg
ICAgICB9CisgICAgRmlsZVN5c3RlbTo6ZGVsZXRlQWxsRmlsZXNNb2RpZmllZFNpbmNlKHJlc29s
dmVkSURCU3RvcmFnZVBhdGgoKSwgdGltZSk7Cit9CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Cit2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojptb3ZlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgY29uc3QgU3RyaW5nJiBsb2NhbFN0
b3JhZ2VQYXRoLCBjb25zdCBTdHJpbmcmIGlkYlN0b3JhZ2VQYXRoKQoreworICAgIC8vIFRoaXMg
aXMgb25seSBzdXBwb3J0ZWQgZm9yIEluZGV4ZWREQiBhbmQgTG9jYWxTdG9yYWdlIG5vdy4KKyAg
ICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmICFs
b2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VN
YW5hZ2VyKQorICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5jbG9zZSgpOwogCi0g
ICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tRGlz
ayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKLSAgICB7Ci0gICAgICAgIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdDsKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpIHsKLSAgICAgICAgICAgIGF1dG8gZmlsZVN5
c3RlbVN0b3JhZ2VQYXRoID0gdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVt
KTsKLSAgICAgICAgICAgIGlmIChhdXRvIGZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eShmaWxlU3lzdGVtU3RvcmFnZVBhdGgpOyAhZmlsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKTsKKyAgICAgICAgYXV0
byBjdXJyZW50TG9jYWxTdG9yYWdlUGF0aCA9IHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgpOwor
ICAgICAgICBpZiAoIWN1cnJlbnRMb2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVTeXN0ZW06OnBhcmVudFBh
dGgobG9jYWxTdG9yYWdlUGF0aCkpOworICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5
c3RlbTo6bW92ZURhdGFiYXNlRmlsZShjdXJyZW50TG9jYWxTdG9yYWdlUGF0aCwgbG9jYWxTdG9y
YWdlUGF0aCk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgewotICAgICAgICAgICAgaWYgKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMocmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOwotICAgICAg
ICB9CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0
YWJhc2VzKSAmJiAhaWRiU3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2lk
YlN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9pZGJTdG9yYWdlTWFuYWdlci0+Y2xvc2VE
YXRhYmFzZXNGb3JEZWxldGlvbigpOwogCi0gICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
IGRhdGFiYXNlcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocmVzb2x2ZWRJREJTdG9yYWdl
UGF0aCgpKTsgIWRhdGFiYXNlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFk
ZChXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcyk7CisgICAgICAgIGF1dG8gY3Vy
cmVudElEQlN0b3JhZ2VQYXRoID0gcmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpOworICAgICAgICBp
ZiAoIWN1cnJlbnRJREJTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEZpbGVT
eXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKGlkYlN0b3Jh
Z2VQYXRoKSk7CisgICAgICAgICAgICBGaWxlU3lzdGVtOjptb3ZlRmlsZShjdXJyZW50SURCU3Rv
cmFnZVBhdGgsIGlkYlN0b3JhZ2VQYXRoKTsKICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQorfQogCi0gICAgdm9pZCBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEo
V2FsbFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUpCi0gICAgewotICAgICAgICBtX2ZpbGVTeXN0ZW1T
dG9yYWdlTWFuYWdlciA9IG51bGxwdHI7CitTdHJpbmcgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OnJlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCgpCit7CisgICAgaWYgKCFtX3Jl
c29sdmVkTG9jYWxTdG9yYWdlUGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzb2x2
ZWRMb2NhbFN0b3JhZ2VQYXRoOwogCi0gICAgICAgIGF1dG8gZmlsZVN5c3RlbVN0b3JhZ2VQYXRo
ID0gdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVtKTsKLSAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlQWxsRmlsZXNNb2RpZmllZFNpbmNlKGZpbGVTeXN0ZW1TdG9yYWdlUGF0
aCwgbW9kaWZpZWRTaW5jZVRpbWUpOwotICAgIH0KKyAgICBpZiAobV9zaG91bGRVc2VDdXN0b21Q
YXRocykgeworICAgICAgICBBU1NFUlQobV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHko
KSA9PSBtX3Jvb3RQYXRoLmlzRW1wdHkoKSk7CisgICAgICAgIG1fcmVzb2x2ZWRMb2NhbFN0b3Jh
Z2VQYXRoID0gbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoOworICAgIH0gZWxzZSBpZiAoIW1fcm9v
dFBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
dHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAgICAgICBGaWxl
U3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKKyAgICAg
ICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAobG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsK
IAotICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShXYWxsVGltZSB0aW1lKQotICAgIHsK
LSAgICAgICAgYXV0byBjdXJyZW50TG9jYWxTdG9yYWdlUGF0aCA9IHJlc29sdmVkTG9jYWxTdG9y
YWdlUGF0aCgpOwotICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZU1vZGlmaWNhdGlvblRpbWUo
Y3VycmVudExvY2FsU3RvcmFnZVBhdGgpID49IHRpbWUpIHsKLSAgICAgICAgICAgIGlmIChtX2xv
Y2FsU3RvcmFnZU1hbmFnZXIpCi0gICAgICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2Vy
LT5jbGVhckRhdGFPbkRpc2soKTsKLSAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0
ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjdXJyZW50TG9jYWxTdG9yYWdlUGF0aCk7Ci0gICAgICAg
IH0KKyAgICAgICAgYXV0byBsb2NhbFN0b3JhZ2VQYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlcjo6
bG9jYWxTdG9yYWdlRmlsZVBhdGgobG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKKyAgICAgICAgaWYg
KCFtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgpICYmICFGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKGxvY2FsU3RvcmFnZVBhdGgpICYmIEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9jdXN0
b21Mb2NhbFN0b3JhZ2VQYXRoKSkKKyAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0
ZW06Om1vdmVEYXRhYmFzZUZpbGUobV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBsb2NhbFN0b3Jh
Z2VQYXRoKTsKIAotICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlcikKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9yZXNvbHZlZExvY2FsU3RvcmFnZVBhdGggPSBsb2NhbFN0
b3JhZ2VQYXRoOworICAgIH0gZWxzZQorICAgICAgICBtX3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0
aCA9IGVtcHR5U3RyaW5nKCk7CiAKLSAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5jbGVh
ckRhdGFJbk1lbW9yeSgpOwotICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aXNB
Y3RpdmUoKSkKLSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7Ci0g
ICAgfQorICAgIHJldHVybiBtX3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0aDsKK30KIAotICAgIHZv
aWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zZXNz
aW9uU3RvcmFnZU1hbmFnZXIpCi0gICAgICAgICAgICByZXR1cm47CitTdHJpbmcgT3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnJlc29sdmVkSURCU3RvcmFnZVBhdGgoKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgICAgIG1fc2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyLT5jbGVhckRhdGEoKTsKLSAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlci0+aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0g
bnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkZWxldGVJREJTdG9yYWdlRGF0YShXYWxs
VGltZSB0aW1lKQotICAgIHsKLSAgICAgICAgaWYgKG1faWRiU3RvcmFnZU1hbmFnZXIpCi0gICAg
ICAgICAgICBtX2lkYlN0b3JhZ2VNYW5hZ2VyLT5jbG9zZURhdGFiYXNlc0ZvckRlbGV0aW9uKCk7
CisgICAgaWYgKCFtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGguaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGg7CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlQWxsRmlsZXNNb2RpZmllZFNpbmNlKHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKSwgdGltZSk7
CisgICAgaWYgKG1fc2hvdWxkVXNlQ3VzdG9tUGF0aHMpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vz
dG9tSURCU3RvcmFnZVBhdGguaXNFbXB0eSgpID09IG1fcm9vdFBhdGguaXNFbXB0eSgpKTsKKyAg
ICAgICAgbV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoID0gbV9jdXN0b21JREJTdG9yYWdlUGF0aDsK
KyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGlkYlN0b3JhZ2VQYXRoID0gdHlwZVN0b3JhZ2VQ
YXRoKFN0b3JhZ2VUeXBlOjpJbmRleGVkREIpOworICAgICAgICBJREJTdG9yYWdlTWFuYWdlcjo6
bWlncmF0ZU9yaWdpbkRhdGEobV9jdXN0b21JREJTdG9yYWdlUGF0aCwgaWRiU3RvcmFnZVBhdGgp
OworICAgICAgICBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGggPSBpZGJTdG9yYWdlUGF0aDsKICAg
ICB9Ci0KLSAgICBTdHJpbmcgbV9yb290UGF0aDsKLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwot
ICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1fbW9kZSB7IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZm
b3J0IH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcj4gbV9m
aWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsU3RvcmFn
ZU1hbmFnZXI+IG1fbG9jYWxTdG9yYWdlTWFuYWdlcjsKLSAgICBTdHJpbmcgbV9jdXN0b21Mb2Nh
bFN0b3JhZ2VQYXRoOwotICAgIFN0cmluZyBtX3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0aDsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyPiBtX3Nlc3Npb25TdG9yYWdl
TWFuYWdlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCU3RvcmFnZU1hbmFnZXI+IG1faWRiU3Rv
cmFnZU1hbmFnZXI7Ci0gICAgU3RyaW5nIG1fY3VzdG9tSURCU3RvcmFnZVBhdGg7Ci0gICAgU3Ry
aW5nIG1fcmVzb2x2ZWRJREJTdG9yYWdlUGF0aDsKLSAgICBib29sIG1fc2hvdWxkVXNlQ3VzdG9t
UGF0aHM7Ci19OworICAgIAorICAgIEFTU0VSVCghbV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoLmlz
TnVsbCgpKTsKKyAgICByZXR1cm4gbV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoOworfQogCiBTdHJp
bmcgT3JpZ2luU3RvcmFnZU1hbmFnZXI6Om9yaWdpbkZpbGVJZGVudGlmaWVyKCkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453516</attachid>
            <date>2022-03-01 11:58:44 -0800</date>
            <delta_ts>2022-03-01 12:59:10 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-237300-20220301115843.patch</filename>
            <type>text/plain</type>
            <size>30530</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDllNzhlNDYyNWM1NTllNjMx
ZDQ0NjQ3M2QzMDg3Nzg5Y2FlZjAzMGQuLjE1ODVhZjg3NjcyN2EzNzhiYTRiZTA5YTZlODc4OWRm
OTc2N2IxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjItMDMtMDEgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTdG9yYWdlQnVja2V0IGZ1
bmN0aW9uIGRlZmluaXRpb25zIG91dHNpZGUgdGhlIGNsYXNzIGRlZmluaXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzMwMAorCisgICAgICAg
IFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vZGUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6c2V0TW9kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpTdG9yYWdl
QnVja2V0KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VC
dWNrZXQ6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0eXBlU3Rv
cmFnZVBhdGggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
U3RvcmFnZUJ1Y2tldDo6ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2FsU3RvcmFnZU1hbmFn
ZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tl
dDo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlz
dGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjppZGJTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ0lEQlN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3Qp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
ZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURp
c2spOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tl
dDo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQnVja2V0OjpkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlTG9jYWxTdG9y
YWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0OjpkZWxldGVTZXNzaW9uU3RvcmFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmln
aW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlSURCU3RvcmFnZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6bW92
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6cmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnJlc29sdmVkSURCU3RvcmFnZVBhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9X
ZWJzaXRlRGF0YVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6IERlbGV0ZWQuCisK
IDIwMjItMDMtMDEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgZm9jdXMoe3ByZXZlbnRTY3JvbGw6IHRydWV9KSBkb2VzIG5vdCBwcmV2ZW50IHNjcm9s
bGluZyBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAppbmRleCAyNjU1OGZiNTZiNGI5NmI2
MTc2NmJlMTk1MGNiY2ZhZTA1NDJlYzJiLi4yZjkyNjVkM2YwZTdjMWQ2OWExN2M4NGM2MjkwZmE0
NmUwYzAyYjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCkBAIC00MCw3ICs0MCw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9JbmRleGVkREIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4K
IAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBTaGFyZWRGaWxlSGFuZGxlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdl
TWFuYWdlci5jcHAKaW5kZXggMTM3ZmRjNDVmNDc2NWZkNTQ0YzY4ODMxZjY0YmMyOWEzNmMwOTc0
Yi4uMjU2OGM3YWRhMTA2NTNkMGMyMjhkYzNiNWNhNTExMTUxN2U5NzliOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3Rv
cmFnZU1hbmFnZXIuY3BwCkBAIC00NywzNDcgKzQ3LDM0MiBAQCBlbnVtIGNsYXNzIE9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2wgeyBCZXN0RWZmb3J0LCBQZXJz
aXN0ZQogY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0b3JhZ2VCdWNrZXQoY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGxvY2FsU3RvcmFnZVBhdGgsIGNvbnN0IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgsIGJvb2wgc2hv
dWxkVXNlQ3VzdG9tUGF0aHMpCi0gICAgICAgIDogbV9yb290UGF0aChyb290UGF0aCkKLSAgICAg
ICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAgICAgLCBtX2N1c3RvbUxvY2FsU3Rv
cmFnZVBhdGgobG9jYWxTdG9yYWdlUGF0aCkKLSAgICAgICAgLCBtX2N1c3RvbUlEQlN0b3JhZ2VQ
YXRoKGlkYlN0b3JhZ2VQYXRoKQotICAgICAgICAsIG1fc2hvdWxkVXNlQ3VzdG9tUGF0aHMoc2hv
dWxkVXNlQ3VzdG9tUGF0aHMpCi0gICAgewotICAgIH0KLQotICAgIFN0b3JhZ2VCdWNrZXRNb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICB2b2lkIHNldE1vZGUoU3RvcmFn
ZUJ1Y2tldE1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9Ci0KLSAgICB2b2lkIGNvbm5lY3Rp
b25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKQotICAgICAgICAgICAgbV9maWxl
U3lzdGVtU3RvcmFnZU1hbmFnZXItPmNvbm5lY3Rpb25DbG9zZWQoY29ubmVjdGlvbik7Ci0KLSAg
ICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1fbG9jYWxTdG9y
YWdlTWFuYWdlci0+Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKLQotICAgICAgICBpZiAo
bV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCi0gICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlci0+Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKLSAgICB9Ci0KICAgICBlbnVtIGNs
YXNzIFN0b3JhZ2VUeXBlIDogdWludDhfdCB7CiAgICAgICAgIEZpbGVTeXN0ZW0sCiAgICAgICAg
IExvY2FsU3RvcmFnZSwKICAgICAgICAgU2Vzc2lvblN0b3JhZ2UsCiAgICAgICAgIEluZGV4ZWRE
QiwKICAgICB9OworICAgIFN0cmluZyB0b1N0b3JhZ2VJZGVudGlmaWVyKFN0b3JhZ2VUeXBlKSBj
b25zdDsKKyAgICBTdG9yYWdlQnVja2V0KGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBjb25zdCBT
dHJpbmcmIGlkYlN0b3JhZ2VQYXRoLCBib29sIHNob3VsZFVzZUN1c3RvbVBhdGhzKTsKKyAgICBT
dG9yYWdlQnVja2V0TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgdm9p
ZCBzZXRNb2RlKFN0b3JhZ2VCdWNrZXRNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQorICAg
IHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKyAgICBT
dHJpbmcgdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlKSBjb25zdDsKKyAgICBGaWxlU3lzdGVt
U3RvcmFnZU1hbmFnZXImIGZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihGaWxlU3lzdGVtU3RvcmFn
ZUhhbmRsZVJlZ2lzdHJ5Jik7CisgICAgTG9jYWxTdG9yYWdlTWFuYWdlciYgbG9jYWxTdG9yYWdl
TWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgTG9jYWxTdG9yYWdlTWFuYWdlciog
ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9sb2NhbFN0b3JhZ2VNYW5h
Z2VyLmdldCgpOyB9CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBzZXNzaW9uU3RvcmFnZU1h
bmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciog
ZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKSB7IHJldHVybiBtX3Nlc3Npb25TdG9yYWdl
TWFuYWdlci5nZXQoKTsgfQorICAgIElEQlN0b3JhZ2VNYW5hZ2VyJiBpZGJTdG9yYWdlTWFuYWdl
cihJREJTdG9yYWdlUmVnaXN0cnkmLCBJREJTdG9yYWdlTWFuYWdlcjo6UXVvdGFDaGVja0Z1bmN0
aW9uJiYpOworICAgIElEQlN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0lEQlN0b3JhZ2VNYW5hZ2Vy
KCkgeyByZXR1cm4gbV9pZGJTdG9yYWdlTWFuYWdlci5nZXQoKTsgfQorICAgIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHkoKTsKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdChPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPik7
CisgICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGlt
ZSk7CisgICAgdm9pZCBtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3Qg
U3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBjb25zdCBTdHJpbmcmIGlkYlN0b3JhZ2VQYXRoKTsK
KyAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCk7CisgICAgU3RyaW5nIHJlc29s
dmVkSURCU3RvcmFnZVBhdGgoKTsKIAotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVE
YXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGUoY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRlbnRpZmll
cikKLSAgICB7Ci0gICAgICAgIGlmIChzdG9yYWdlSWRlbnRpZmllciA9PSAiRmlsZVN5c3RlbSJf
cykKLSAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07Ci0gICAg
ICAgIGlmIChzdG9yYWdlSWRlbnRpZmllciA9PSAiTG9jYWxTdG9yYWdlIl9zKQotICAgICAgICAg
ICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlOwotICAgICAgICBpZiAoc3Rv
cmFnZUlkZW50aWZpZXIgPT0gIlNlc3Npb25TdG9yYWdlIl9zKQotICAgICAgICAgICAgcmV0dXJu
IFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2U7Ci0gICAgICAgIGlmIChzdG9yYWdlSWRl
bnRpZmllciA9PSAiSW5kZXhlZERCIl9zKQotICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRh
VHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzOwotCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgfQorcHJpdmF0ZToKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERh
dGFUeXBlc0luTGlzdEZyb21NZW1vcnkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4pOworICAg
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURpc2so
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4pOworICAgIHZvaWQgZGVsZXRlRmlsZVN5c3RlbVN0
b3JhZ2VEYXRhKFdhbGxUaW1lKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEoV2Fs
bFRpbWUpOworICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgdm9pZCBk
ZWxldGVJREJTdG9yYWdlRGF0YShXYWxsVGltZSk7CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3Rv
cmFnZUlkZW50aWZpZXIoU3RvcmFnZVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
dHlwZSkgewotICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVtOgotICAgICAgICAg
ICAgcmV0dXJuICJGaWxlU3lzdGVtIl9zOwotICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpMb2Nh
bFN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gIkxvY2FsU3RvcmFnZSJfczsKLSAgICAgICAg
Y2FzZSBTdG9yYWdlVHlwZTo6U2Vzc2lvblN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gIlNl
c3Npb25TdG9yYWdlIl9zOwotICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpJbmRleGVkREI6Ci0g
ICAgICAgICAgICByZXR1cm4gIkluZGV4ZWREQiJfczsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gIiJfczsKLSAgICB9CisgICAgU3RyaW5nIG1fcm9vdFBhdGg7CisgICAg
U3RyaW5nIG1faWRlbnRpZmllcjsKKyAgICBTdG9yYWdlQnVja2V0TW9kZSBtX21vZGUgeyBTdG9y
YWdlQnVja2V0TW9kZTo6QmVzdEVmZm9ydCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlU3lz
dGVtU3RvcmFnZU1hbmFnZXI+IG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxMb2NhbFN0b3JhZ2VNYW5hZ2VyPiBtX2xvY2FsU3RvcmFnZU1hbmFnZXI7Cisg
ICAgU3RyaW5nIG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsKKyAgICBTdHJpbmcgbV9yZXNvbHZl
ZExvY2FsU3RvcmFnZVBhdGg7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNlc3Npb25TdG9yYWdlTWFu
YWdlcj4gbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQlN0
b3JhZ2VNYW5hZ2VyPiBtX2lkYlN0b3JhZ2VNYW5hZ2VyOworICAgIFN0cmluZyBtX2N1c3RvbUlE
QlN0b3JhZ2VQYXRoOworICAgIFN0cmluZyBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGg7CisgICAg
Ym9vbCBtX3Nob3VsZFVzZUN1c3RvbVBhdGhzOworfTsKKworT3JpZ2luU3RvcmFnZU1hbmFnZXI6
OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIGNv
bnN0IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgsIGJvb2wgc2hvdWxkVXNlQ3VzdG9tUGF0aHMpCisg
ICAgOiBtX3Jvb3RQYXRoKHJvb3RQYXRoKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CisgICAgLCBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgobG9jYWxTdG9yYWdlUGF0aCkKKyAgICAs
IG1fY3VzdG9tSURCU3RvcmFnZVBhdGgoaWRiU3RvcmFnZVBhdGgpCisgICAgLCBtX3Nob3VsZFVz
ZUN1c3RvbVBhdGhzKHNob3VsZFVzZUN1c3RvbVBhdGhzKQoreworfQogCi0gICAgU3RyaW5nIHR5
cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZSB0eXBlKSBjb25zdAotICAgIHsKLSAgICAgICAgYXV0
byBzdG9yYWdlSWRlbnRpZmllciA9IHRvU3RvcmFnZUlkZW50aWZpZXIodHlwZSk7Ci0gICAgICAg
IGlmIChtX3Jvb3RQYXRoLmlzRW1wdHkoKSB8fCBzdG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK3ZvaWQgT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIGlmIChtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdl
cikKKyAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXItPmNvbm5lY3Rpb25DbG9zZWQo
Y29ubmVjdGlvbik7CiAKLSAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChtX3Jvb3RQYXRoLCBzdG9yYWdlSWRlbnRpZmllcik7Ci0gICAgfQorICAgIGlm
IChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+
Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKIAotICAgIEZpbGVTeXN0ZW1TdG9yYWdlTWFu
YWdlciYgZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVn
aXN0cnkmIHJlZ2lzdHJ5KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ZpbGVTeXN0ZW1TdG9yYWdl
TWFuYWdlcikKLSAgICAgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVu
aXF1ZTxGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI+KHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlw
ZTo6RmlsZVN5c3RlbSksIHJlZ2lzdHJ5KTsKKyAgICBpZiAobV9zZXNzaW9uU3RvcmFnZU1hbmFn
ZXIpCisgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jb25uZWN0aW9uQ2xvc2VkKGNv
bm5lY3Rpb24pOworfQogCi0gICAgICAgIHJldHVybiAqbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFn
ZXI7CitTdHJpbmcgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnRvU3RvcmFn
ZUlkZW50aWZpZXIoU3RvcmFnZVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVtOgorICAgICAgICByZXR1cm4gIkZp
bGVTeXN0ZW0iX3M7CisgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gIkxvY2FsU3RvcmFnZSJfczsKKyAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9u
U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJTZXNzaW9uU3RvcmFnZSJfczsKKyAgICBjYXNlIFN0
b3JhZ2VUeXBlOjpJbmRleGVkREI6CisgICAgICAgIHJldHVybiAiSW5kZXhlZERCIl9zOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KIAotICAgIExvY2FsU3RvcmFnZU1hbmFn
ZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCi0g
ICAgewotICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1f
bG9jYWxTdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8TG9jYWxTdG9yYWdlTWFuYWdlcj4ocmVz
b2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCksIHJlZ2lzdHJ5KTsKK1N0cmluZyBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlIHR5cGUp
IGNvbnN0Cit7CisgICAgYXV0byBzdG9yYWdlSWRlbnRpZmllciA9IHRvU3RvcmFnZUlkZW50aWZp
ZXIodHlwZSk7CisgICAgaWYgKG1fcm9vdFBhdGguaXNFbXB0eSgpIHx8IHN0b3JhZ2VJZGVudGlm
aWVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICAgICAg
cmV0dXJuICptX2xvY2FsU3RvcmFnZU1hbmFnZXI7Ci0gICAgfQorICAgIHJldHVybiBGaWxlU3lz
dGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9yb290UGF0aCwgc3RvcmFnZUlkZW50aWZp
ZXIpOworfQogCi0gICAgTG9jYWxTdG9yYWdlTWFuYWdlciogZXhpc3RpbmdMb2NhbFN0b3JhZ2VN
YW5hZ2VyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZU1hbmFnZXIuZ2V0
KCk7Ci0gICAgfQorRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUJ1Y2tldDo6ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKEZpbGVTeXN0ZW1TdG9y
YWdlSGFuZGxlUmVnaXN0cnkmIHJlZ2lzdHJ5KQoreworICAgIGlmICghbV9maWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXIpCisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVu
aXF1ZTxGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI+KHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlw
ZTo6RmlsZVN5c3RlbSksIHJlZ2lzdHJ5KTsKIAotICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciYg
c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQotICAg
IHsKLSAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1f
c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+
KHJlZ2lzdHJ5KTsKKyAgICByZXR1cm4gKm1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworfQog
Ci0gICAgICAgIHJldHVybiAqbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7Ci0gICAgfQorTG9jYWxT
dG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2Fs
U3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgaWYg
KCFtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlciA9
IG1ha2VVbmlxdWU8TG9jYWxTdG9yYWdlTWFuYWdlcj4ocmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRo
KCksIHJlZ2lzdHJ5KTsKIAotICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciogZXhpc3RpbmdTZXNz
aW9uU3RvcmFnZU1hbmFnZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyLmdldCgpOwotICAgIH0KKyAgICByZXR1cm4gKm1fbG9jYWxTdG9yYWdlTWFuYWdl
cjsKK30KIAotICAgIElEQlN0b3JhZ2VNYW5hZ2VyJiBpZGJTdG9yYWdlTWFuYWdlcihJREJTdG9y
YWdlUmVnaXN0cnkmIHJlZ2lzdHJ5LCBJREJTdG9yYWdlTWFuYWdlcjo6UXVvdGFDaGVja0Z1bmN0
aW9uJiYgcXVvdGFDaGVja0Z1bmN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2lkYlN0b3Jh
Z2VNYW5hZ2VyKQotICAgICAgICAgICAgbV9pZGJTdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8
SURCU3RvcmFnZU1hbmFnZXI+KHJlc29sdmVkSURCU3RvcmFnZVBhdGgoKSwgcmVnaXN0cnksIFdU
Rk1vdmUocXVvdGFDaGVja0Z1bmN0aW9uKSk7CitTZXNzaW9uU3RvcmFnZU1hbmFnZXImIE9yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3Rv
cmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdl
TWFuYWdlcikKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPFNl
c3Npb25TdG9yYWdlTWFuYWdlcj4ocmVnaXN0cnkpOwogCi0gICAgICAgIHJldHVybiAqbV9pZGJT
dG9yYWdlTWFuYWdlcjsKLSAgICB9CisgICAgcmV0dXJuICptX3Nlc3Npb25TdG9yYWdlTWFuYWdl
cjsKK30KIAotICAgIElEQlN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0lEQlN0b3JhZ2VNYW5hZ2Vy
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lkYlN0b3JhZ2VNYW5hZ2VyLmdldCgpOwotICAg
IH0KK0lEQlN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tl
dDo6aWRiU3RvcmFnZU1hbmFnZXIoSURCU3RvcmFnZVJlZ2lzdHJ5JiByZWdpc3RyeSwgSURCU3Rv
cmFnZU1hbmFnZXI6OlF1b3RhQ2hlY2tGdW5jdGlvbiYmIHF1b3RhQ2hlY2tGdW5jdGlvbikKK3sK
KyAgICBpZiAoIW1faWRiU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIG1faWRiU3RvcmFnZU1hbmFn
ZXIgPSBtYWtlVW5pcXVlPElEQlN0b3JhZ2VNYW5hZ2VyPihyZXNvbHZlZElEQlN0b3JhZ2VQYXRo
KCksIHJlZ2lzdHJ5LCBXVEZNb3ZlKHF1b3RhQ2hlY2tGdW5jdGlvbikpOwogCi0gICAgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBi
dWNrZXQgaWYgaXQgaGFzIGluLW1lbW9yeSBkYXRhLCBvdGhlcndpc2Ugc2Vzc2lvbgotICAgICAg
ICAvLyBkYXRhIG1heSBiZSBsb3N0LgotICAgICAgICByZXR1cm4gKG1fZmlsZVN5c3RlbVN0b3Jh
Z2VNYW5hZ2VyICYmIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQotICAg
ICAgICAgICAgfHwgKG1fbG9jYWxTdG9yYWdlTWFuYWdlciAmJiAobV9sb2NhbFN0b3JhZ2VNYW5h
Z2VyLT5oYXNEYXRhSW5NZW1vcnkoKSB8fCBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZl
KCkpKQotICAgICAgICAgICAgfHwgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIChtX3Nlc3Np
b25TdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkgfHwgbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXItPmlzQWN0aXZlKCkpKQotICAgICAgICAgICAgfHwgKG1faWRiU3RvcmFnZU1hbmFnZXIg
JiYgKG1faWRiU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9yeSgpIHx8IG1faWRiU3RvcmFn
ZU1hbmFnZXItPmlzQWN0aXZlKCkpKTsKLSAgICB9CisgICAgcmV0dXJuICptX2lkYlN0b3JhZ2VN
YW5hZ2VyOworfQogCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworYm9vbCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIC8vIFdlIGNhbm5vdCByZW1vdmUgdGhlIGJ1
Y2tldCBpZiBpdCBoYXMgaW4tbWVtb3J5IGRhdGEsIG90aGVyd2lzZSBzZXNzaW9uCisgICAgLy8g
ZGF0YSBtYXkgYmUgbG9zdC4KKyAgICByZXR1cm4gKG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2Vy
ICYmIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQorICAgICAgICB8fCAo
bV9sb2NhbFN0b3JhZ2VNYW5hZ2VyICYmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJ
bk1lbW9yeSgpIHx8IG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUoKSkpCisgICAgICAg
IHx8IChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciAmJiAobV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIt
Pmhhc0RhdGFJbk1lbW9yeSgpIHx8IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgp
KSkKKyAgICAgICAgfHwgKG1faWRiU3RvcmFnZU1hbmFnZXIgJiYgKG1faWRiU3RvcmFnZU1hbmFn
ZXItPmhhc0RhdGFJbk1lbW9yeSgpIHx8IG1faWRiU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkp
KTsKK30KIAotICAgICAgICBhdXRvIGZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeSht
X3Jvb3RQYXRoKTsKLSAgICAgICAgYXV0byBoYXNWYWxpZEZpbGUgPSBXVEY6OmFueU9mKGZpbGVz
LCBbJl0oYXV0byBmaWxlKSB7Ci0gICAgICAgICAgICBib29sIGlzSW52YWxpZEZpbGUgPSAoZmls
ZSA9PSBvcmlnaW5GaWxlTmFtZSk7Citib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0VtcHR5KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8gZmlsZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcm9vdFBhdGgpOwor
ICAgIGF1dG8gaGFzVmFsaWRGaWxlID0gV1RGOjphbnlPZihmaWxlcywgWyZdKGF1dG8gZmlsZSkg
eworICAgICAgICBib29sIGlzSW52YWxpZEZpbGUgPSAoZmlsZSA9PSBvcmlnaW5GaWxlTmFtZSk7
CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICBpc0ludmFsaWRGaWxlIHw9IChmaWxl
ID09ICIuRFNfU3RvcmUiKTsKKyAgICAgICAgaXNJbnZhbGlkRmlsZSB8PSAoZmlsZSA9PSAiLkRT
X1N0b3JlIik7CiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybiAhaXNJbnZhbGlkRmlsZTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIGlmIChoYXNWYWxpZEZpbGUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiAhaXNJbnZhbGlkRmlsZTsKKyAgICB9KTsKKyAgICBpZiAo
aGFzVmFsaWRGaWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXV0byBpZGJT
dG9yYWdlRmlsZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHJlc29sdmVkSURCU3RvcmFn
ZVBhdGgoKSk7Ci0gICAgICAgIHJldHVybiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhyZXNvbHZl
ZExvY2FsU3RvcmFnZVBhdGgoKSkgJiYgaWRiU3RvcmFnZUZpbGVzLmlzRW1wdHkoKTsKKyAgICBh
dXRvIGlkYlN0b3JhZ2VGaWxlcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocmVzb2x2ZWRJ
REJTdG9yYWdlUGF0aCgpKTsKKyAgICByZXR1cm4gIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMocmVz
b2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkpICYmIGlkYlN0b3JhZ2VGaWxlcy5pc0VtcHR5KCk7Cit9
CisKK09wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0OjpmZXRjaERhdGFUeXBlc0luTGlzdChPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiB0eXBlcykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbU1l
bW9yeSh0eXBlcyk7CisgICAgcmVzdWx0LmFkZChmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNr
KHR5cGVzKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZmV0Y2hEYXRhVHlw
ZXNJbkxpc3RGcm9tTWVtb3J5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorewor
ICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdDsKKyAgICBpZiAodHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7CisgICAgICAgIGlmIChtX2xv
Y2FsU3RvcmFnZU1hbmFnZXIgJiYgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1v
cnkoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3Jh
Z2UpOwogICAgIH0KIAotICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YVR5
cGVzSW5MaXN0KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQotICAgIHsKLSAgICAg
ICAgYXV0byByZXN1bHQgPSBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21NZW1vcnkodHlwZXMpOwot
ICAgICAgICByZXN1bHQuYWRkKGZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbURpc2sodHlwZXMpKTsK
KyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkp
IHsKKyAgICAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIG1fc2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vi
c2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSk7CisgICAgfQogCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERC
RGF0YWJhc2VzKSkgeworICAgICAgICBpZiAobV9pZGJTdG9yYWdlTWFuYWdlciAmJiBtX2lkYlN0
b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQo
V2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpOwogICAgIH0KIAotICAgIHZvaWQg
ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9k
aWZpZWRTaW5jZVRpbWUpCi0gICAgewotICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpGaWxlU3lzdGVtKSkKLSAgICAgICAgICAgIGRlbGV0ZUZpbGVTeXN0ZW1TdG9y
YWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotICAg
ICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKQot
ICAgICAgICAgICAgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7CitP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiB0eXBlcykKK3sKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQ7Cisg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpIHsKKyAg
ICAgICAgYXV0byBmaWxlU3lzdGVtU3RvcmFnZVBhdGggPSB0eXBlU3RvcmFnZVBhdGgoU3RvcmFn
ZVR5cGU6OkZpbGVTeXN0ZW0pOworICAgICAgICBpZiAoYXV0byBmaWxlcyA9IEZpbGVTeXN0ZW06
Omxpc3REaXJlY3RvcnkoZmlsZVN5c3RlbVN0b3JhZ2VQYXRoKTsgIWZpbGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKTsKKyAg
ICB9CiAKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lv
blN0b3JhZ2UpICYmIG1vZGlmaWVkU2luY2VUaW1lIDwgV2FsbFRpbWU6Om5vdygpKQotICAgICAg
ICAgICAgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgeworICAgICAgICBpZiAoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyhyZXNvbHZlZExvY2FsU3RvcmFnZVBhdGgoKSkpCisgICAgICAgICAgICBy
ZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICB9CiAKLSAgICAg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2Vz
KSkKLSAgICAgICAgICAgIGRlbGV0ZUlEQlN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lKTsK
KyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFz
ZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGRhdGFiYXNlcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJl
Y3RvcnkocmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpKTsgIWRhdGFiYXNlcy5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2Vz
KTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHR5cGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIGNvbnN0IFN0cmluZyYgaWRi
U3RvcmFnZVBhdGgpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZv
ciBJbmRleGVkREIgYW5kIExvY2FsU3RvcmFnZSBub3cuCi0gICAgICAgIGlmICh0eXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgIWxvY2FsU3RvcmFnZVBhdGgu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQotICAg
ICAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKLQotICAgICAgICAg
ICAgYXV0byBjdXJyZW50TG9jYWxTdG9yYWdlUGF0aCA9IHJlc29sdmVkTG9jYWxTdG9yYWdlUGF0
aCgpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50TG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoRmlsZVN5
c3RlbTo6cGFyZW50UGF0aChsb2NhbFN0b3JhZ2VQYXRoKSk7Ci0gICAgICAgICAgICAgICAgV2Vi
Q29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZShjdXJyZW50TG9jYWxTdG9y
YWdlUGF0aCwgbG9jYWxTdG9yYWdlUGF0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIWlkYlN0b3JhZ2VQYXRoLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKG1faWRiU3RvcmFnZU1hbmFnZXIpCi0gICAgICAgICAgICAg
ICAgbV9pZGJTdG9yYWdlTWFuYWdlci0+Y2xvc2VEYXRhYmFzZXNGb3JEZWxldGlvbigpOwordm9p
ZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUpCit7
CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpCisg
ICAgICAgIGRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7CiAK
LSAgICAgICAgICAgIGF1dG8gY3VycmVudElEQlN0b3JhZ2VQYXRoID0gcmVzb2x2ZWRJREJTdG9y
YWdlUGF0aCgpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50SURCU3RvcmFnZVBhdGguaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZp
bGVTeXN0ZW06OnBhcmVudFBhdGgoaWRiU3RvcmFnZVBhdGgpKTsKLSAgICAgICAgICAgICAgICBG
aWxlU3lzdGVtOjptb3ZlRmlsZShjdXJyZW50SURCU3RvcmFnZVBhdGgsIGlkYlN0b3JhZ2VQYXRo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAodHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKQorICAgICAgICBkZWxldGVMb2NhbFN0
b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lKTsKIAotICAgIFN0cmluZyByZXNvbHZlZExvY2Fs
U3RvcmFnZVBhdGgoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3Jlc29sdmVkTG9jYWxTdG9yYWdl
UGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3Jlc29sdmVkTG9jYWxTdG9yYWdl
UGF0aDsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3Rv
cmFnZSkgJiYgbW9kaWZpZWRTaW5jZVRpbWUgPCBXYWxsVGltZTo6bm93KCkpCisgICAgICAgIGRl
bGV0ZVNlc3Npb25TdG9yYWdlRGF0YSgpOwogCi0gICAgICAgIGlmIChtX3Nob3VsZFVzZUN1c3Rv
bVBhdGhzKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLmlz
RW1wdHkoKSA9PSBtX3Jvb3RQYXRoLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBtX3Jlc29sdmVk
TG9jYWxTdG9yYWdlUGF0aCA9IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsKLSAgICAgICAgfSBl
bHNlIGlmICghbV9yb290UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGF1dG8gbG9jYWxT
dG9yYWdlRGlyZWN0b3J5ID0gdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpMb2NhbFN0b3Jh
Z2UpOwotICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSk7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjpleGNsdWRlRnJvbUJhY2t1
cChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpCisgICAgICAgIGRlbGV0ZUlEQlN0b3JhZ2VE
YXRhKG1vZGlmaWVkU2luY2VUaW1lKTsKK30KIAotICAgICAgICAgICAgYXV0byBsb2NhbFN0b3Jh
Z2VQYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlRmlsZVBhdGgobG9jYWxT
dG9yYWdlRGlyZWN0b3J5KTsKLSAgICAgICAgICAgIGlmICghbV9jdXN0b21Mb2NhbFN0b3JhZ2VQ
YXRoLmlzRW1wdHkoKSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhsb2NhbFN0b3JhZ2VQYXRo
KSAmJiBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkpCi0g
ICAgICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmls
ZShtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwordm9pZCBPcmln
aW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRmlsZVN5c3RlbVN0b3JhZ2VE
YXRhKFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQoreworICAgIG1fZmlsZVN5c3RlbVN0b3Jh
Z2VNYW5hZ2VyID0gbnVsbHB0cjsKIAotICAgICAgICAgICAgbV9yZXNvbHZlZExvY2FsU3RvcmFn
ZVBhdGggPSBsb2NhbFN0b3JhZ2VQYXRoOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
cmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoID0gZW1wdHlTdHJpbmcoKTsKKyAgICBhdXRvIGZpbGVT
eXN0ZW1TdG9yYWdlUGF0aCA9IHR5cGVTdG9yYWdlUGF0aChTdG9yYWdlVHlwZTo6RmlsZVN5c3Rl
bSk7CisgICAgRmlsZVN5c3RlbTo6ZGVsZXRlQWxsRmlsZXNNb2RpZmllZFNpbmNlKGZpbGVTeXN0
ZW1TdG9yYWdlUGF0aCwgbW9kaWZpZWRTaW5jZVRpbWUpOworfQogCi0gICAgICAgIHJldHVybiBt
X3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0aDsKK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OmRlbGV0ZUxvY2FsU3RvcmFnZURhdGEoV2FsbFRpbWUgdGltZSkKK3sKKyAg
ICBhdXRvIGN1cnJlbnRMb2NhbFN0b3JhZ2VQYXRoID0gcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRo
KCk7CisgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVNb2RpZmljYXRpb25UaW1lKGN1cnJlbnRMb2Nh
bFN0b3JhZ2VQYXRoKSA+PSB0aW1lKSB7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFn
ZXIpCisgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YU9uRGlzaygp
OworICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUo
Y3VycmVudExvY2FsU3RvcmFnZVBhdGgpOwogICAgIH0KIAotICAgIFN0cmluZyByZXNvbHZlZElE
QlN0b3JhZ2VQYXRoKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgaWYgKCFtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGguaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gbV9yZXNvbHZlZElEQlN0b3JhZ2VQYXRoOworICAgIG1fbG9jYWxTdG9yYWdlTWFu
YWdlci0+Y2xlYXJEYXRhSW5NZW1vcnkoKTsKKyAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdl
ci0+aXNBY3RpdmUoKSkKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsK
K30KIAotICAgICAgICBpZiAobV9zaG91bGRVc2VDdXN0b21QYXRocykgewotICAgICAgICAgICAg
QVNTRVJUKG1fY3VzdG9tSURCU3RvcmFnZVBhdGguaXNFbXB0eSgpID09IG1fcm9vdFBhdGguaXNF
bXB0eSgpKTsKLSAgICAgICAgICAgIG1fcmVzb2x2ZWRJREJTdG9yYWdlUGF0aCA9IG1fY3VzdG9t
SURCU3RvcmFnZVBhdGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGlkYlN0
b3JhZ2VQYXRoID0gdHlwZVN0b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpJbmRleGVkREIpOwotICAg
ICAgICAgICAgSURCU3RvcmFnZU1hbmFnZXI6Om1pZ3JhdGVPcmlnaW5EYXRhKG1fY3VzdG9tSURC
U3RvcmFnZVBhdGgsIGlkYlN0b3JhZ2VQYXRoKTsKLSAgICAgICAgICAgIG1fcmVzb2x2ZWRJREJT
dG9yYWdlUGF0aCA9IGlkYlN0b3JhZ2VQYXRoOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBBU1NFUlQoIW1fcmVzb2x2ZWRJREJTdG9yYWdlUGF0aC5pc051bGwoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGg7Ci0gICAgfQordm9pZCBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCkKK3sKKyAg
ICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICByZXR1cm47CiAKLXByaXZh
dGU6Ci0gICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3RG
cm9tTWVtb3J5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQotICAgIHsKLSAgICAg
ICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gcmVzdWx0OwotICAgICAgICBpZiAodHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBp
ZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyICYmIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFzRGF0
YUluTWVtb3J5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6
OkxvY2FsU3RvcmFnZSk7Ci0gICAgICAgIH0KKyAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+
Y2xlYXJEYXRhKCk7CisgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUo
KSkKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworfQogCi0gICAg
ICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkg
ewotICAgICAgICAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIG1fc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQu
YWRkKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOwotICAgICAgICB9Cit2b2lkIE9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVJREJTdG9yYWdlRGF0YShX
YWxsVGltZSB0aW1lKQoreworICAgIGlmIChtX2lkYlN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBt
X2lkYlN0b3JhZ2VNYW5hZ2VyLT5jbG9zZURhdGFiYXNlc0ZvckRlbGV0aW9uKCk7CiAKLSAgICAg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2Vz
KSkgewotICAgICAgICAgICAgaWYgKG1faWRiU3RvcmFnZU1hbmFnZXIgJiYgbV9pZGJTdG9yYWdl
TWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChX
ZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcyk7Ci0gICAgICAgIH0KKyAgICBGaWxl
U3lzdGVtOjpkZWxldGVBbGxGaWxlc01vZGlmaWVkU2luY2UocmVzb2x2ZWRJREJTdG9yYWdlUGF0
aCgpLCB0aW1lKTsKK30KIAotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KK3ZvaWQgT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IHR5cGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIGNvbnN0
IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgpCit7CisgICAgLy8gVGhpcyBpcyBvbmx5IHN1cHBvcnRl
ZCBmb3IgSW5kZXhlZERCIGFuZCBMb2NhbFN0b3JhZ2Ugbm93LgorICAgIGlmICh0eXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgIWxvY2FsU3RvcmFnZVBhdGgu
aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAg
ICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsb3NlKCk7CiAKLSAgICBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IHR5cGVzKQotICAgIHsKLSAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gcmVzdWx0OwotICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpGaWxlU3lzdGVtKSkgewotICAgICAgICAgICAgYXV0byBmaWxlU3lzdGVtU3RvcmFnZVBhdGgg
PSB0eXBlU3RvcmFnZVBhdGgoU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW0pOwotICAgICAgICAgICAg
aWYgKGF1dG8gZmlsZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KGZpbGVTeXN0ZW1TdG9y
YWdlUGF0aCk7ICFmaWxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChX
ZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pOworICAgICAgICBhdXRvIGN1cnJlbnRMb2NhbFN0
b3JhZ2VQYXRoID0gcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCk7CisgICAgICAgIGlmICghY3Vy
cmVudExvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBGaWxlU3lzdGVt
OjptYWtlQWxsRGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChsb2NhbFN0b3JhZ2VQ
YXRoKSk7CisgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjptb3ZlRGF0YWJh
c2VGaWxlKGN1cnJlbnRMb2NhbFN0b3JhZ2VQYXRoLCBsb2NhbFN0b3JhZ2VQYXRoKTsKICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhyZXNvbHZlZExvY2FsU3RvcmFnZVBhdGgoKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFk
ZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7Ci0gICAgICAgIH0KKyAgICBpZiAodHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYmICFpZGJT
dG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1faWRiU3RvcmFnZU1hbmFnZXIp
CisgICAgICAgICAgICBtX2lkYlN0b3JhZ2VNYW5hZ2VyLT5jbG9zZURhdGFiYXNlc0ZvckRlbGV0
aW9uKCk7CiAKLSAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5k
ZXhlZERCRGF0YWJhc2VzKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gZGF0YWJhc2VzID0gRmls
ZVN5c3RlbTo6bGlzdERpcmVjdG9yeShyZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCkpOyAhZGF0YWJh
c2VzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlw
ZTo6SW5kZXhlZERCRGF0YWJhc2VzKTsKKyAgICAgICAgYXV0byBjdXJyZW50SURCU3RvcmFnZVBh
dGggPSByZXNvbHZlZElEQlN0b3JhZ2VQYXRoKCk7CisgICAgICAgIGlmICghY3VycmVudElEQlN0
b3JhZ2VQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERp
cmVjdG9yaWVzKEZpbGVTeXN0ZW06OnBhcmVudFBhdGgoaWRiU3RvcmFnZVBhdGgpKTsKKyAgICAg
ICAgICAgIEZpbGVTeXN0ZW06Om1vdmVGaWxlKGN1cnJlbnRJREJTdG9yYWdlUGF0aCwgaWRiU3Rv
cmFnZVBhdGgpOwogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Cit9
CiAKLSAgICB2b2lkIGRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmll
ZFNpbmNlVGltZSkKLSAgICB7Ci0gICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0g
bnVsbHB0cjsKK1N0cmluZyBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6cmVz
b2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCkKK3sKKyAgICBpZiAoIW1fcmVzb2x2ZWRMb2NhbFN0b3Jh
Z2VQYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9yZXNvbHZlZExvY2FsU3RvcmFnZVBh
dGg7CiAKLSAgICAgICAgYXV0byBmaWxlU3lzdGVtU3RvcmFnZVBhdGggPSB0eXBlU3RvcmFnZVBh
dGgoU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW0pOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVB
bGxGaWxlc01vZGlmaWVkU2luY2UoZmlsZVN5c3RlbVN0b3JhZ2VQYXRoLCBtb2RpZmllZFNpbmNl
VGltZSk7Ci0gICAgfQorICAgIGlmIChtX3Nob3VsZFVzZUN1c3RvbVBhdGhzKSB7CisgICAgICAg
IEFTU0VSVChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgpID09IG1fcm9vdFBhdGgu
aXNFbXB0eSgpKTsKKyAgICAgICAgbV9yZXNvbHZlZExvY2FsU3RvcmFnZVBhdGggPSBtX2N1c3Rv
bUxvY2FsU3RvcmFnZVBhdGg7CisgICAgfSBlbHNlIGlmICghbV9yb290UGF0aC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSB0eXBlU3RvcmFnZVBhdGgo
U3RvcmFnZVR5cGU6OkxvY2FsU3RvcmFnZSk7CisgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxE
aXJlY3Rvcmllcyhsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOworICAgICAgICBGaWxlU3lzdGVtOjpl
eGNsdWRlRnJvbUJhY2t1cChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwogCi0gICAgdm9pZCBkZWxl
dGVMb2NhbFN0b3JhZ2VEYXRhKFdhbGxUaW1lIHRpbWUpCi0gICAgewotICAgICAgICBhdXRvIGN1
cnJlbnRMb2NhbFN0b3JhZ2VQYXRoID0gcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoKCk7Ci0gICAg
ICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9uVGltZShjdXJyZW50TG9jYWxTdG9y
YWdlUGF0aCkgPj0gdGltZSkgewotICAgICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdl
cikKLSAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YU9uRGlz
aygpOwotICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJh
c2VGaWxlKGN1cnJlbnRMb2NhbFN0b3JhZ2VQYXRoKTsKLSAgICAgICAgfQorICAgICAgICBhdXRv
IGxvY2FsU3RvcmFnZVBhdGggPSBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxl
UGF0aChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOworICAgICAgICBpZiAoIW1fY3VzdG9tTG9jYWxT
dG9yYWdlUGF0aC5pc0VtcHR5KCkgJiYgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobG9jYWxTdG9y
YWdlUGF0aCkgJiYgRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2N1c3RvbUxvY2FsU3RvcmFnZVBh
dGgpKQorICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNl
RmlsZShtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwogCi0gICAg
ICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBtX3Jlc29sdmVkTG9jYWxTdG9yYWdlUGF0aCA9IGxvY2FsU3RvcmFnZVBhdGg7CisgICAg
fSBlbHNlCisgICAgICAgIG1fcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoID0gZW1wdHlTdHJpbmco
KTsKIAotICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YUluTWVtb3J5KCk7
Ci0gICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQotICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKLSAgICB9CisgICAgcmV0dXJu
IG1fcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoOworfQogCi0gICAgdm9pZCBkZWxldGVTZXNzaW9u
U3RvcmFnZURhdGEoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdl
cikKLSAgICAgICAgICAgIHJldHVybjsKK1N0cmluZyBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3Rv
cmFnZUJ1Y2tldDo6cmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CiAKLSAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmNsZWFy
RGF0YSgpOwotICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgp
KQotICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGRlbGV0ZUlEQlN0b3JhZ2VEYXRhKFdhbGxUaW1lIHRpbWUpCi0gICAg
ewotICAgICAgICBpZiAobV9pZGJTdG9yYWdlTWFuYWdlcikKLSAgICAgICAgICAgIG1faWRiU3Rv
cmFnZU1hbmFnZXItPmNsb3NlRGF0YWJhc2VzRm9yRGVsZXRpb24oKTsKKyAgICBpZiAoIW1fcmVz
b2x2ZWRJREJTdG9yYWdlUGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRJ
REJTdG9yYWdlUGF0aDsKIAotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVBbGxGaWxlc01vZGlm
aWVkU2luY2UocmVzb2x2ZWRJREJTdG9yYWdlUGF0aCgpLCB0aW1lKTsKKyAgICBpZiAobV9zaG91
bGRVc2VDdXN0b21QYXRocykgeworICAgICAgICBBU1NFUlQobV9jdXN0b21JREJTdG9yYWdlUGF0
aC5pc0VtcHR5KCkgPT0gbV9yb290UGF0aC5pc0VtcHR5KCkpOworICAgICAgICBtX3Jlc29sdmVk
SURCU3RvcmFnZVBhdGggPSBtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGF1dG8gaWRiU3RvcmFnZVBhdGggPSB0eXBlU3RvcmFnZVBhdGgoU3RvcmFnZVR5cGU6
OkluZGV4ZWREQik7CisgICAgICAgIElEQlN0b3JhZ2VNYW5hZ2VyOjptaWdyYXRlT3JpZ2luRGF0
YShtX2N1c3RvbUlEQlN0b3JhZ2VQYXRoLCBpZGJTdG9yYWdlUGF0aCk7CisgICAgICAgIG1fcmVz
b2x2ZWRJREJTdG9yYWdlUGF0aCA9IGlkYlN0b3JhZ2VQYXRoOwogICAgIH0KLQotICAgIFN0cmlu
ZyBtX3Jvb3RQYXRoOwotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgU3RvcmFnZUJ1Y2tl
dE1vZGUgbV9tb2RlIHsgU3RvcmFnZUJ1Y2tldE1vZGU6OkJlc3RFZmZvcnQgfTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8RmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyPiBtX2ZpbGVTeXN0ZW1TdG9yYWdl
TWFuYWdlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxTdG9yYWdlTWFuYWdlcj4gbV9sb2Nh
bFN0b3JhZ2VNYW5hZ2VyOwotICAgIFN0cmluZyBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGg7Ci0g
ICAgU3RyaW5nIG1fcmVzb2x2ZWRMb2NhbFN0b3JhZ2VQYXRoOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJREJTdG9yYWdlTWFuYWdlcj4gbV9pZGJTdG9yYWdlTWFuYWdlcjsKLSAg
ICBTdHJpbmcgbV9jdXN0b21JREJTdG9yYWdlUGF0aDsKLSAgICBTdHJpbmcgbV9yZXNvbHZlZElE
QlN0b3JhZ2VQYXRoOwotICAgIGJvb2wgbV9zaG91bGRVc2VDdXN0b21QYXRoczsKLX07CisgICAg
CisgICAgQVNTRVJUKCFtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGguaXNOdWxsKCkpOworICAgIHJl
dHVybiBtX3Jlc29sdmVkSURCU3RvcmFnZVBhdGg7Cit9CiAKIFN0cmluZyBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6b3JpZ2luRmlsZUlkZW50aWZpZXIoKQogewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>