<?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>26113</bug_id>
          
          <creation_ts>2009-05-31 23:21:26 -0700</creation_ts>
          <short_desc>[Mac] break WebTextCompletionController out into its own source file</short_desc>
          <delta_ts>2009-06-01 00:48:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>26112</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123786</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-31 23:21:26 -0700</bug_when>
    <thetext>As part of bug 26112 I broke WebCompletionController into a separate source file, but that made the patch way too big. So I&apos;m doing that as a separate step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123798</commentid>
    <comment_count>1</comment_count>
      <attachid>30827</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-01 00:41:28 -0700</bug_when>
    <thetext>Created attachment 30827
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123801</commentid>
    <comment_count>2</comment_count>
      <attachid>30827</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-06-01 00:44:25 -0700</bug_when>
    <thetext>Comment on attachment 30827
patch

r=me on the file split. I didn&apos;t review every line, but I assume you got it right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123803</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-01 00:48:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/44313</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30827</attachid>
            <date>2009-06-01 00:41:28 -0700</date>
            <delta_ts>2009-06-01 00:44:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>CompControllerPatch.txt</filename>
            <type>text/plain</type>
            <size>999039</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gNDQzMTApCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMDktMDUtMzEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjEx
MzogYnJlYWsgV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyIG91dCBpbnRvIGl0cyBvd24gc291
cmNlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI2MTEzCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRk
IFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oL21tLgorCiAyMDA5LTA1LTI4ICBNYXJrIFJv
d2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQW5kZXJz
IENhcmxzc29uLgpJbmRleDogV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOCBAQAogCQk5MzRDMTE2NzBEODcxMEJC
MDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEMxMTY2MEQ4NzEwQkIwMEMz
MkFCRCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oICovOyB9OwogCQk5MzRD
NEE5MTBGMDE0MDZDMDA5MzcyQzAgLyogV2ViTlNPYmplY3RFeHRyYXMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRDNEE5MDBGMDE0MDZDMDA5Mzcy
QzAgLyogV2ViTlNPYmplY3RFeHRyYXMubW0gKi87IH07CiAJCTkzNEM0QUEwMEYwMTQxRjcwMDkz
NzJDMCAvKiBXZWJSZXNvdXJjZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRDNEE5RjBGMDE0MUY3MDA5MzcyQzAgLyogV2ViUmVzb3Vy
Y2VJbnRlcm5hbC5oICovOyB9OworCQk5MzZBMkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTM2QTJERTcwRkQyRDA4MDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0
aW9uQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJOTM2QTJERUEwRkQyRDA4NDAwRDMxMkRCIC8qIFdl
YlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM2QTJERTkwRkQyRDA4NDAwRDMxMkRCIC8qIFdlYlRleHRDb21w
bGV0aW9uQ29udHJvbGxlci5oICovOyB9OwogCQk5Mzk4MTAxMTA4MjRCRjAxMDA4REYwMzggLyog
V2ViQmFja0ZvcndhcmRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzOTQ0NjA3RDAyMEY1MEVEMEVDQTE3NjcgLyogV2ViQmFja0ZvcndhcmRMaXN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5Mzk4
MTAxMjA4MjRCRjAxMDA4REYwMzggLyogV2ViSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyMEZCMTkwMjIxREVGRDAxQzFBNTI1IC8qIFdl
Ykhpc3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07
CiAJCTkzOTgxMDEzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5SXRlbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwN0YwMjBGNTBFRDBF
Q0ExNzY3IC8qIFdlYkhpc3RvcnlJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHVibGljLCApOyB9OyB9OwpAQCAtNTM3LDYgKzUzOSw4IEBACiAJCTkzNEMxMTY2MEQ4NzEwQkIw
MEMzMkFCRCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzRDNEE5MDBGMDE0MDZDMDA5MzcyQzAg
LyogV2ViTlNPYmplY3RFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJOU09iamVjdEV4dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTM0QzRBOUYwRjAxNDFGNzAwOTM3MkMwIC8qIFdlYlJlc291cmNlSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzZBMkRFNzBGRDJEMDgwMDBEMzEyREIgLyogV2Vi
VGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5MzZBMkRFOTBGRDJEMDg0MDBEMzEyREIgLyogV2ViVGV4dENvbXBs
ZXRpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlRl
eHRDb21wbGV0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
Mzk4MTEzMjA4MjRCRjAxMDA4REYwMzggLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlz
dC54bWw7IG5hbWUgPSBJbmZvLnBsaXN0OyBwYXRoID0gbWFjL0luZm8ucGxpc3Q7IHNvdXJjZVRy
ZWUgPSBTT1VSQ0VfUk9PVDsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDE7IH07CiAJCTkzOTgx
MTMzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gV2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJOTNBRUIxN0QwMzJDMTczNTAwODYzNUNFIC8qIFdlYktpdExv
Z2dpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJLaXRMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwpAQCAtMTA2NCw2ICsxMDY4LDggQEAKIAkJCQk3RTZGRUYwNjA4OTg1
QTcyMDBDNDRDM0YgLyogV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbSAqLywKIAkJCQlDMDE2N0JG
NjBEN0Y1REQwMDAyODY5NkUgLyogV2ViU2NyaXB0RGVidWdnZXIuaCAqLywKIAkJCQlDMDE2N0JG
NzBEN0Y1REQwMDAyODY5NkUgLyogV2ViU2NyaXB0RGVidWdnZXIubW0gKi8sCisJCQkJOTM2QTJE
RTkwRkQyRDA4NDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oICovLAor
CQkJCTkzNkEyREU3MEZEMkQwODAwMEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xs
ZXIubW0gKi8sCiAJCQkJRjgzNEFBRDUwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRv
ci5oICovLAogCQkJCUY4MzRBQUQ2MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3Iu
bW0gKi8sCiAJCQkJNTE1RTI3Q0MwNDU4Qzg2NTAwQ0EyRDNBIC8qIFdlYlVJRGVsZWdhdGUuaCAq
LywKQEAgLTE0MTYsNiArMTQyMiw3IEBACiAJCQkJQUI5RkJCQkIwRjg1ODJCMDAwNkFEQzQzIC8q
IFdlYkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEFFQkZGNjMw
RjlGQThCRTAwMEQ0ODZCIC8qIFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hlY2tQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwQUI3NTIzNzBGQTJFNERCMDBEN0NCQjEgLyogV2ViTmV0c2NhcGVD
b250YWluZXJDaGVja0NvbnRleHRJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MzZBMkRFQTBG
RDJEMDg0MDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTE3NDIsNiArMTc0OSw3IEBACiAJCQkJMEFFQkZGNjQwRjlGQThCRTAwMEQ0ODZC
IC8qIFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hlY2tQcml2YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEFCNzUyMzgwRkEyRTREQjAwRDdDQkIxIC8qIFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hlY2tD
b250ZXh0SW5mby5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNTY2MzE5MEZCNjFDMUYwMEMxOTlD
QSAvKiBXZWJEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTkzNkEyREU4MEZEMkQwODAw
MEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA0NDMxMCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMDYtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEJ1ZyAyNjExMzogYnJlYWsgV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyIG91dCBpbnRv
IGl0cyBvd24gc291cmNlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2MTEzCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgor
ICAgICAgICAoLVtXZWJIVE1MVmlld1ByaXZhdGUgZGVhbGxvY10pOiBVcGRhdGVkIGZvciBuZXcg
bmFtZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXdQcml2YXRlIGNsZWFyXSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyBfZnJhbWVPckJvdW5kc0NoYW5nZWRdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IG1lbnVGb3JFdmVudDpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IHdpbmRvd0RpZFJlc2lnbktleTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IHdpbmRvd1dpbGxDbG9zZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IG1vdXNlRG93bjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHJlc2lnbkZpcnN0
UmVzcG9uZGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBrZXlEb3duOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY29tcGxldGU6XSk6IERpdHRvLiBBbHNvIHBh
c3MgV2ViVmlldyB0byBpbml0IG1ldGhvZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2ludGVy
Y2VwdEVkaXRpbmdLZXlFdmVudDpzaG91bGRTYXZlQ29tbWFuZDpdKTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oOiBDb3BpZWQgZnJvbSBt
YWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlRleHRDb21w
bGV0aW9uQ29udHJvbGxlci5tbTogQ29waWVkIGZyb20gbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0uCisgICAgICAgIENoYW5nZWQgaW5pdGlhbGl6ZXIgdG8gcGFzcyBpbiBhIHNwZWFyYXRlIFdl
YlZpZXcgYW5kIFdlYkhUTUxWaWV3LCB0byBzbW9vdGggdGhlCisgICAgICAgIHdheSBmb3IgaGFu
ZGxpbmcgdmlld2xlc3MgbW9kZSBwcm9wZXJseSBpbiB0aGUgZnV0dXJlLgorCiAyMDA5LTA1LTMw
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEpTTG9j
ayB0byAtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWluXQpJbmRleDogV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAKICNpbXBvcnQgIldl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViUmVzb3VyY2VQcml2YXRlLmgiCiAj
aW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0b3IuaCIKKyNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9u
Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2Vi
VUlEZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgpAQCAtNDA1
LDI0ICs0MDYsNiBAQCBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHByb21pc2VkRGF0CiAt
ICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleTsK
IEBlbmQKIAotLy8gSGFuZGxlcyB0aGUgY29tcGxldGU6IHRleHQgY29tbWFuZAotQGludGVyZmFj
ZSBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIDogTlNPYmplY3QgPE5TVGFibGVWaWV3RGVsZWdh
dGUsIE5TVGFibGVWaWV3RGF0YVNvdXJjZT4gewotQHByaXZhdGUKLSAgICBXZWJIVE1MVmlldyAq
X3ZpZXc7Ci0gICAgTlNXaW5kb3cgKl9wb3B1cFdpbmRvdzsKLSAgICBOU1RhYmxlVmlldyAqX3Rh
YmxlVmlldzsKLSAgICBOU0FycmF5ICpfY29tcGxldGlvbnM7Ci0gICAgTlNTdHJpbmcgKl9vcmln
aW5hbFN0cmluZzsKLSAgICBpbnQgcHJlZml4TGVuZ3RoOwotfQotLSAoaWQpaW5pdFdpdGhIVE1M
VmlldzooV2ViSFRNTFZpZXcgKil2aWV3OwotLSAodm9pZClkb0NvbXBsZXRpb247Ci0tICh2b2lk
KWVuZFJldmVydGluZ0NoYW5nZTooQk9PTClyZXZlcnRDaGFuZ2UgbW92ZUxlZnQ6KEJPT0wpZ29M
ZWZ0OwotLSAoQk9PTClwb3B1cFdpbmRvd0lzT3BlbjsKLS0gKEJPT0wpZmlsdGVyS2V5RG93bjoo
TlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClfcmVmbGVjdFNlbGVjdGlvbjsKLUBlbmQKLQogc3Ry
dWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7CiAgICAgS2V5Ym9h
cmRFdmVudCogZXZlbnQ7CiAgICAgQk9PTCBldmVudFdhc0hhbmRsZWQ7CkBAIC00NzksNyArNDYy
LDcgQEAgc3RydWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYQogICAgIEJPT0wg
bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZTsKICNlbmRpZgogICAgIAotICAgIFdlYlRleHRDb21w
bGV0ZUNvbnRyb2xsZXIgKmNvbXBDb250cm9sbGVyOworICAgIFdlYlRleHRDb21wbGV0aW9uQ29u
dHJvbGxlciAqY29tcGxldGlvbkNvbnRyb2xsZXI7CiAgICAgCiAgICAgQk9PTCB0cmFuc3BhcmVu
dEJhY2tncm91bmQ7CiAKQEAgLTU2MSw3ICs1NDQsNyBAQCBzdGF0aWMgTlNDZWxsU3RhdGVWYWx1
ZSBraXQoVHJpU3RhdGUgc3RhCiAgICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKICAgICBbcGx1
Z2luQ29udHJvbGxlciByZWxlYXNlXTsKICAgICBbdG9vbFRpcCByZWxlYXNlXTsKLSAgICBbY29t
cENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgW2NvbXBsZXRpb25Db250cm9sbGVyIHJlbGVhc2Vd
OwogICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOwogICAgIFtoaWdobGlnaHRlcnMgcmVsZWFzZV07
CiAgICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQpAQCAtNTg2LDcgKzU2OSw3IEBA
IHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlTdGF0ZSBzdGEKICAgICBba2V5RG93bkV2
ZW50IHJlbGVhc2VdOwogICAgIFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwogICAgIFt0b29s
VGlwIHJlbGVhc2VdOwotICAgIFtjb21wQ29udHJvbGxlciByZWxlYXNlXTsKKyAgICBbY29tcGxl
dGlvbkNvbnRyb2xsZXIgcmVsZWFzZV07CiAgICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07CiAgICAg
W2hpZ2hsaWdodGVycyByZWxlYXNlXTsKICAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UpCkBAIC01OTYsNyArNTc5LDcgQEAgc3RhdGljIE5TQ2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0
YXRlIHN0YQogICAgIGtleURvd25FdmVudCA9IG5pbDsKICAgICBwbHVnaW5Db250cm9sbGVyID0g
bmlsOwogICAgIHRvb2xUaXAgPSBuaWw7Ci0gICAgY29tcENvbnRyb2xsZXIgPSBuaWw7CisgICAg
Y29tcGxldGlvbkNvbnRyb2xsZXIgPSBuaWw7CiAgICAgZGF0YVNvdXJjZSA9IG5pbDsKICAgICBo
aWdobGlnaHRlcnMgPSBuaWw7CiAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSAwOwpA
QCAtMTE5OSw3ICsxMTgyLDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2Fs
bGJhYwogICAgIGlmICghTlNFcXVhbFBvaW50cyhfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9u
LCBvcmlnaW4pKSB7CiAgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKSkKICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRTY3Jv
bGxFdmVudCgpOwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGlu
Z0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNv
bnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKICAgICAgICAgCiAg
ICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CiAgICAgICAgIFtbd2Vi
VmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRpZFNjcm9sbERvY3Vt
ZW50SW5GcmFtZVZpZXc6W3NlbGYgX2ZyYW1lVmlld11dOwpAQCAtMzA3OSw3ICszMDYyLDcgQEAg
c3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQogICAgIC8vIGluc2lkZSBB
cHBLaXQgY29kZS4KICAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwogCi0gICAgW19w
cml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9d
OworICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdl
Ok5PIG1vdmVMZWZ0Ok5PXTsKIAogICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKQEAgLTMzMDYsNyArMzI4OSw3IEBA
IHN0YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUKIAogICAgIGlmIChmb3Jt
ZXJLZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8fCBmb3JtZXJLZXlXaW5kb3cgPT0gW1tzZWxm
IHdpbmRvd10gYXR0YWNoZWRTaGVldF0pIHsKICAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRB
bmRBY3RpdmVTdGF0ZV07Ci0gICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2
ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgW19wcml2YXRlLT5jb21wbGV0
aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwogICAgIH0K
IH0KIApAQCAtMzMxNyw3ICszMzAwLDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgW19wcml2YXRlLT5jb21w
Q29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgIFtfcHJp
dmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0
Ok5PXTsKICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lBbGxQbHVnaW5zXTsK
IH0KIApAQCAtMzQxNiw3ICszMzk5LDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZQogICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91
c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRd
KQogICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVu
ZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgW19wcml2YXRlLT5jb21wbGV0
aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwogCiAgICAg
Ly8gSWYgdGhlIHdlYiBwYWdlIGhhbmRsZXMgdGhlIGNvbnRleHQgbWVudSBldmVudCBhbmQgbWVu
dUZvckV2ZW50OiByZXR1cm5zIG5pbCwgd2UnbGwgZ2V0IGNvbnRyb2wgY2xpY2sgZXZlbnRzIGhl
cmUuCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXNzIHRoZW0gYWxvbmcgdG8gS0hUTUwgYSBz
ZWNvbmQgdGltZS4KQEAgLTM2NzksNyArMzY2Miw3IEBAIHN0YXRpYyBCT09MIGlzSW5QYXNzd29y
ZEZpZWxkKEZyYW1lKiBjb3IKICAgICBCT09MIHJlc2lnbiA9IFtzdXBlciByZXNpZ25GaXJzdFJl
c3BvbmRlcl07CiAgICAgaWYgKHJlc2lnbikgewogICAgICAgICBfcHJpdmF0ZS0+cmVzaWduaW5n
Rmlyc3RSZXNwb25kZXIgPSBZRVM7Ci0gICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIg
ZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgW19wcml2YXRlLT5j
b21wbGV0aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwog
ICAgICAgICBpZiAoIVtzZWxmIG1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uXSkgeyAKICAgICAg
ICAgICAgIFtzZWxmIGRlc2VsZWN0QWxsXTsKICAgICAgICAgICAgIGlmICghW1tzZWxmIF93ZWJW
aWV3XSBfaXNQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdKQpAQCAtMzk3OSwxNSArMzk2Miwx
NSBAQCBzdGF0aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29yCiAgICAgW19wcml2
YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFzZV07CiAgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9
IFtldmVudCByZXRhaW5dOwogCi0gICAgQk9PTCBjb21wbGV0aW9uUG9wdXBXYXNPcGVuID0gX3By
aXZhdGUtPmNvbXBDb250cm9sbGVyICYmIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgcG9wdXBX
aW5kb3dJc09wZW5dOworICAgIEJPT0wgY29tcGxldGlvblBvcHVwV2FzT3BlbiA9IF9wcml2YXRl
LT5jb21wbGV0aW9uQ29udHJvbGxlciAmJiBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVy
IHBvcHVwV2luZG93SXNPcGVuXTsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKICAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKSB7CiAgICAgICAgIC8v
IFdlYkNvcmUgcHJvY2Vzc2VkIGEga2V5IGV2ZW50LCBiYWlsIG9uIGFueSBwcmVleGlzdGluZyBj
b21wbGV0ZTogVUkKICAgICAgICAgaWYgKGNvbXBsZXRpb25Qb3B1cFdhc09wZW4pCi0gICAgICAg
ICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92
ZUxlZnQ6Tk9dOwotICAgIH0gZWxzZSBpZiAoIV9wcml2YXRlLT5jb21wQ29udHJvbGxlciB8fCAh
W19wcml2YXRlLT5jb21wQ29udHJvbGxlciBmaWx0ZXJLZXlEb3duOmV2ZW50XSkgeworICAgICAg
ICAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6
WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICB9IGVsc2UgaWYgKCFfcHJpdmF0ZS0+Y29tcGxldGlvbkNv
bnRyb2xsZXIgfHwgIVtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZmlsdGVyS2V5RG93
bjpldmVudF0pIHsKICAgICAgICAgLy8gTm90IGNvbnN1bWVkIGJ5IGNvbXBsZXRlOiBwb3B1cCB3
aW5kb3cKLSAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFu
Z2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJv
bGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKICAgICAgICAgY2FsbFN1
cGVyID0gWUVTOwogICAgIH0KICAgICBpZiAoY2FsbFN1cGVyKQpAQCAtNDYxMyw5ICs0NTk2LDkg
QEAgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQwogCiAgICAgaWYgKCFb
c2VsZiBfY2FuRWRpdF0pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIV9wcml2YXRlLT5jb21w
Q29udHJvbGxlcikKLSAgICAgICAgX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyID0gW1tXZWJUZXh0
Q29tcGxldGVDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEhUTUxWaWV3OnNlbGZdOwotICAgIFtf
cHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZG9Db21wbGV0aW9uXTsKKyAgICBpZiAoIV9wcml2YXRl
LT5jb21wbGV0aW9uQ29udHJvbGxlcikKKyAgICAgICAgX3ByaXZhdGUtPmNvbXBsZXRpb25Db250
cm9sbGVyID0gW1tXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzpbc2VsZiBfd2ViVmlld10gSFRNTFZpZXc6c2VsZl07CisgICAgW19wcml2YXRlLT5jb21w
bGV0aW9uQ29udHJvbGxlciBkb0NvbXBsZXRpb25dOwogfQogCiAtICh2b2lkKWNoZWNrU3BlbGxp
bmc6KGlkKXNlbmRlcgpAQCAtNTM0MCw3ICs1MzIzLDcgQEAgc3RhdGljIENHUG9pbnQgY29yZUdy
YXBoaWNzU2NyZWVuUG9pbnRGbwogCiAgICAgaWYgKGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpKSB7CiAgICAgICAgIE5TRXZlbnQg
Km1hY0V2ZW50ID0gcGxhdGZvcm1FdmVudC0+bWFjRXZlbnQoKTsKLSAgICAgICAgaWYgKFttYWNF
dmVudCB0eXBlXSA9PSBOU0tleURvd24gJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBmaWx0
ZXJLZXlEb3duOm1hY0V2ZW50XSkKKyAgICAgICAgaWYgKFttYWNFdmVudCB0eXBlXSA9PSBOU0tl
eURvd24gJiYgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBmaWx0ZXJLZXlEb3duOm1h
Y0V2ZW50XSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYg
KFttYWNFdmVudCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKQEAgLTU4ODQsMjkyICs1ODY3LDYg
QEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogCiBAZW5kCiAKLS8q
Ci0gICAgVGhpcyBjbGFzcyBydW5zIHRoZSBzaG93IGZvciBoYW5kaW5nIHRoZSBjb21wbGV0ZTog
TlNUZXh0VmlldyBvcGVyYXRpb24uICBJdCBjb3VudHMgb24gaXRzIEhUTUwgdmlldwotICAgIHRv
IGNhbGwgZW5kUmV2ZXJ0aW5nQ2hhbmdlOiB3aGVuZXZlciB0aGUgY3VycmVudCBjb21wbGV0aW9u
IG5lZWRzIHRvIGJlIGFib3J0ZWQuCi0gCi0gICAgVGhlIGNsYXNzIGlzIGluIG9uZSBvZiB0d28g
bW9kZXM6ICBQb3B1cFdpbmRvdyBzaG93aW5nLCBvciBub3QuICBJdCBpcyBzaG93biB3aGVuIGEg
Y29tcGxldGlvbiB5aWVsZHMKLSAgICBtb3JlIHRoYW4gb25lIG1hdGNoLiAgSWYgYSBjb21wbGV0
aW9uIHlpZWxkcyBvbmUgb3IgemVybyBtYXRjaGVzLCBpdCBpcyBub3Qgc2hvd24sIGFuZCAqKnRo
ZXJlIGlzIG5vCi0gICAgc3RhdGUgY2FycmllZCBhY3Jvc3MgdG8gdGhlIG5leHQgY29tcGxldGlv
bioqLgotICovCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyCi0K
LS0gKGlkKWluaXRXaXRoSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopdmlldwotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IF92aWV3ID0gdmlldzsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17
Ci0gICAgW19wb3B1cFdpbmRvdyByZWxlYXNlXTsKLSAgICBbX2NvbXBsZXRpb25zIHJlbGVhc2Vd
OwotICAgIFtfb3JpZ2luYWxTdHJpbmcgcmVsZWFzZV07Ci0gICAgCi0gICAgW3N1cGVyIGRlYWxs
b2NdOwotfQotCi0tICh2b2lkKV9pbnNlcnRNYXRjaDooTlNTdHJpbmcgKiltYXRjaAotewotICAg
IC8vIEZJWE1FOiAzNzY5NjU0IC0gV2Ugc2hvdWxkIHByZXNlcnZlIGNhc2Ugb2Ygc3RyaW5nIGJl
aW5nIGluc2VydGVkLCBldmVuIGluIHByZWZpeCAoYnV0IHRoZW4gYWxzbyBiZQotICAgIC8vIGFi
bGUgdG8gcmV2ZXJ0IHRoYXQpLiAgTWltaWMgTlNUZXh0LgotICAgIFdlYkZyYW1lICpmcmFtZSA9
IFtfdmlldyBfZnJhbWVdOwotICAgIE5TU3RyaW5nICpuZXdUZXh0ID0gW21hdGNoIHN1YnN0cmlu
Z0Zyb21JbmRleDpwcmVmaXhMZW5ndGhdOwotICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0Om5ld1RleHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Ci19
Ci0KLS8vIG1vc3RseSBsaWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJpbmRpbmcubQotLSAodm9p
ZClfYnVpbGRVSQotewotICAgIE5TUmVjdCBzY3JvbGxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwg
MTAwLCAxMDApOwotICAgIE5TUmVjdCB0YWJsZUZyYW1lID0gTlNaZXJvUmVjdDsgICAgCi0gICAg
dGFibGVGcmFtZS5zaXplID0gW05TU2Nyb2xsVmlldyBjb250ZW50U2l6ZUZvckZyYW1lU2l6ZTpz
Y3JvbGxGcmFtZS5zaXplIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNhbFNjcm9s
bGVyOllFUyBib3JkZXJUeXBlOk5TTm9Cb3JkZXJdOwotICAgIC8vIEFkZGVkIGNhc3QgdG8gd29y
ayBhcm91bmQgcHJvYmxlbSB3aXRoIG11bHRpcGxlIEZvdW5kYXRpb24gaW5pdFdpdGhJZGVudGlm
aWVyOiBtZXRob2RzIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciB0eXBlcy4KLSAgICBOU1RhYmxl
Q29sdW1uICpjb2x1bW4gPSBbKE5TVGFibGVDb2x1bW4gKilbTlNUYWJsZUNvbHVtbiBhbGxvY10g
aW5pdFdpdGhJZGVudGlmaWVyOltOU051bWJlciBudW1iZXJXaXRoSW50OjBdXTsKLSAgICBbY29s
dW1uIHNldFdpZHRoOnRhYmxlRnJhbWUuc2l6ZS53aWR0aF07Ci0gICAgW2NvbHVtbiBzZXRFZGl0
YWJsZTpOT107Ci0gICAgCi0gICAgX3RhYmxlVmlldyA9IFtbTlNUYWJsZVZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6dGFibGVGcmFtZV07Ci0gICAgW190YWJsZVZpZXcgc2V0QXV0b3Jlc2l6aW5n
TWFzazpOU1ZpZXdXaWR0aFNpemFibGVdOwotICAgIFtfdGFibGVWaWV3IGFkZFRhYmxlQ29sdW1u
OmNvbHVtbl07Ci0gICAgW2NvbHVtbiByZWxlYXNlXTsKLSAgICBbX3RhYmxlVmlldyBzZXRHcmlk
U3R5bGVNYXNrOk5TVGFibGVWaWV3R3JpZE5vbmVdOwotICAgIFtfdGFibGVWaWV3IHNldENvcm5l
clZpZXc6bmlsXTsKLSAgICBbX3RhYmxlVmlldyBzZXRIZWFkZXJWaWV3Om5pbF07Ci0gICAgW190
YWJsZVZpZXcgc2V0Q29sdW1uQXV0b3Jlc2l6aW5nU3R5bGU6TlNUYWJsZVZpZXdVbmlmb3JtQ29s
dW1uQXV0b3Jlc2l6aW5nU3R5bGVdOwotICAgIFtfdGFibGVWaWV3IHNldERlbGVnYXRlOnNlbGZd
OwotICAgIFtfdGFibGVWaWV3IHNldERhdGFTb3VyY2U6c2VsZl07Ci0gICAgW190YWJsZVZpZXcg
c2V0VGFyZ2V0OnNlbGZdOwotICAgIFtfdGFibGVWaWV3IHNldERvdWJsZUFjdGlvbjpAc2VsZWN0
b3IodGFibGVBY3Rpb246KV07Ci0gICAgCi0gICAgTlNTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0g
W1tOU1Njcm9sbFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2Nyb2xsRnJhbWVdOwotICAgIFtz
Y3JvbGxWaWV3IHNldEJvcmRlclR5cGU6TlNOb0JvcmRlcl07Ci0gICAgW3Njcm9sbFZpZXcgc2V0
SGFzVmVydGljYWxTY3JvbGxlcjpZRVNdOwotICAgIFtzY3JvbGxWaWV3IHNldEF1dG9yZXNpemlu
Z01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0gICAgW3Nj
cm9sbFZpZXcgc2V0RG9jdW1lbnRWaWV3Ol90YWJsZVZpZXddOwotICAgIFtfdGFibGVWaWV3IHJl
bGVhc2VdOwotICAgIAotICAgIF9wb3B1cFdpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRX
aXRoQ29udGVudFJlY3Q6c2Nyb2xsRnJhbWUgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01h
c2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBbX3BvcHVw
V2luZG93IHNldEFscGhhVmFsdWU6MC44OGZdOwotICAgIFtfcG9wdXBXaW5kb3cgc2V0Q29udGVu
dFZpZXc6c2Nyb2xsVmlld107Ci0gICAgW3Njcm9sbFZpZXcgcmVsZWFzZV07Ci0gICAgW19wb3B1
cFdpbmRvdyBzZXRIYXNTaGFkb3c6WUVTXTsKLSAgICBbX3BvcHVwV2luZG93IHNldE9uZVNob3Q6
WUVTXTsKLSAgICBbX3BvcHVwV2luZG93IF9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOllFU107Ci0g
ICAgW19wb3B1cFdpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOwotfQotCi0vLyBtb3N0
bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0KLS0gKHZvaWQpX3BsYWNlUG9w
dXBXaW5kb3c6KE5TUG9pbnQpdG9wTGVmdAotewotICAgIGludCBudW1iZXJUb1Nob3cgPSBbX2Nv
bXBsZXRpb25zIGNvdW50XTsKLSAgICBpZiAobnVtYmVyVG9TaG93ID4gMjApIHsKLSAgICAgICAg
bnVtYmVyVG9TaG93ID0gMjA7Ci0gICAgfQotCi0gICAgTlNSZWN0IHdpbmRvd0ZyYW1lOwotICAg
IE5TUG9pbnQgd29yZFN0YXJ0ID0gdG9wTGVmdDsKLSAgICB3aW5kb3dGcmFtZS5vcmlnaW4gPSBb
W192aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpbX3ZpZXcgY29udmVydFBvaW50Ondv
cmRTdGFydCB0b1ZpZXc6bmlsXV07Ci0gICAgd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQgPSBudW1i
ZXJUb1Nob3cgKiBbX3RhYmxlVmlldyByb3dIZWlnaHRdICsgKG51bWJlclRvU2hvdyArIDEpICog
W190YWJsZVZpZXcgaW50ZXJjZWxsU3BhY2luZ10uaGVpZ2h0OwotICAgIHdpbmRvd0ZyYW1lLm9y
aWdpbi55IC09IHdpbmRvd0ZyYW1lLnNpemUuaGVpZ2h0OwotICAgIE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6MTIuMGZdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCBuaWxdOwot
ICAgIGZsb2F0IG1heFdpZHRoID0gMC4wZjsKLSAgICBpbnQgbWF4SW5kZXggPSAtMTsKLSAgICBp
bnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyVG9TaG93OyBpKyspIHsKLSAgICAgICAg
ZmxvYXQgd2lkdGggPSBjZWlsZihbW19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OmldIHNpemVX
aXRoQXR0cmlidXRlczphdHRyaWJ1dGVzXS53aWR0aCk7Ci0gICAgICAgIGlmICh3aWR0aCA+IG1h
eFdpZHRoKSB7Ci0gICAgICAgICAgICBtYXhXaWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgbWF4
SW5kZXggPSBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdpbmRvd0ZyYW1lLnNpemUud2lkdGgg
PSAxMDA7Ci0gICAgaWYgKG1heEluZGV4ID49IDApIHsKLSAgICAgICAgbWF4V2lkdGggPSBjZWls
ZihbTlNTY3JvbGxWaWV3IGZyYW1lU2l6ZUZvckNvbnRlbnRTaXplOk5TTWFrZVNpemUobWF4V2lk
dGgsIDEwMC4wZikgaGFzSG9yaXpvbnRhbFNjcm9sbGVyOk5PIGhhc1ZlcnRpY2FsU2Nyb2xsZXI6
WUVTIGJvcmRlclR5cGU6TlNOb0JvcmRlcl0ud2lkdGgpOwotICAgICAgICBtYXhXaWR0aCA9IGNl
aWxmKFtOU1dpbmRvdyBmcmFtZVJlY3RGb3JDb250ZW50UmVjdDpOU01ha2VSZWN0KDAuMGYsIDAu
MGYsIG1heFdpZHRoLCAxMDAuMGYpIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrXS5z
aXplLndpZHRoKTsKLSAgICAgICAgbWF4V2lkdGggKz0gNS4wZjsKLSAgICAgICAgd2luZG93RnJh
bWUuc2l6ZS53aWR0aCA9IE1BWChtYXhXaWR0aCwgd2luZG93RnJhbWUuc2l6ZS53aWR0aCk7Ci0g
ICAgICAgIG1heFdpZHRoID0gTUlOKDQwMC4wZiwgd2luZG93RnJhbWUuc2l6ZS53aWR0aCk7Ci0g
ICAgfQotICAgIFtfcG9wdXBXaW5kb3cgc2V0RnJhbWU6d2luZG93RnJhbWUgZGlzcGxheTpOT107
Ci0gICAgCi0gICAgW190YWJsZVZpZXcgcmVsb2FkRGF0YV07Ci0gICAgW190YWJsZVZpZXcgc2Vs
ZWN0Um93SW5kZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDowXSBieUV4dGVuZGlu
Z1NlbGVjdGlvbjpOT107Ci0gICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxlOjBdOwot
ICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsKLSAgICBbX3BvcHVwV2luZG93IHNldExldmVs
Ok5TUG9wVXBNZW51V2luZG93TGV2ZWxdOwotICAgIFtfcG9wdXBXaW5kb3cgb3JkZXJGcm9udDpu
aWxdOyAgICAKLSAgICBbW192aWV3IHdpbmRvd10gYWRkQ2hpbGRXaW5kb3c6X3BvcHVwV2luZG93
IG9yZGVyZWQ6TlNXaW5kb3dBYm92ZV07Ci19Ci0KLS0gKHZvaWQpZG9Db21wbGV0aW9uCi17Ci0g
ICAgaWYgKCFfcG9wdXBXaW5kb3cpIHsKLSAgICAgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIg
PSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKLSAgICAgICAgaWYgKCFjaGVj
a2VyKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3
b3JkIHN0ZW0KLSAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07Ci0gICAg
ICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9
IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpTZWxlY3Rpb25Db250cm9s
bGVyOjpFWFRFTkQKLSAgICAgICAgICAgIGRpcmVjdGlvbjpTZWxlY3Rpb25Db250cm9sbGVyOjpC
QUNLV0FSRCBncmFudWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwotICAgICAgICBET01SYW5nZSAq
cHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdlXTsKLSAgICAgICAgW3ByZWZpeCBzZXRFbmQ6
W3NlbGVjdGlvbiBzdGFydENvbnRhaW5lcl0gb2Zmc2V0OltzZWxlY3Rpb24gc3RhcnRPZmZzZXRd
XTsKLQotICAgICAgICAvLyBSZWplY3Qgc29tZSBOT1AgY2FzZXMKLSAgICAgICAgaWYgKFtwcmVm
aXggY29sbGFwc2VkXSkgewotICAgICAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgTlNTdHJpbmcgKnByZWZpeFN0ciA9IFtmcmFtZSBfc3Ry
aW5nRm9yUmFuZ2U6cHJlZml4XTsKLSAgICAgICAgTlNTdHJpbmcgKnRyaW1tZWRQcmVmaXggPSBb
cHJlZml4U3RyIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0
IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV07Ci0gICAgICAgIGlmIChbdHJpbW1l
ZFByZWZpeCBsZW5ndGhdID09IDApIHsKLSAgICAgICAgICAgIE5TQmVlcCgpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHByZWZpeExlbmd0aCA9IFtwcmVmaXhTdHIg
bGVuZ3RoXTsKLQotICAgICAgICAvLyBMb29rdXAgbWF0Y2hlcwotICAgICAgICBbX2NvbXBsZXRp
b25zIHJlbGVhc2VdOwotICAgICAgICBfY29tcGxldGlvbnMgPSBbY2hlY2tlciBjb21wbGV0aW9u
c0ZvclBhcnRpYWxXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3ByZWZpeFN0ciBsZW5ndGhdKSBp
blN0cmluZzpwcmVmaXhTdHIgbGFuZ3VhZ2U6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6W1tf
dmlldyBfd2ViVmlld10gc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKLSAgICAgICAgW19jb21w
bGV0aW9ucyByZXRhaW5dOwotICAgIAotICAgICAgICBpZiAoIV9jb21wbGV0aW9ucyB8fCBbX2Nv
bXBsZXRpb25zIGNvdW50XSA9PSAwKSB7Ci0gICAgICAgICAgICBOU0JlZXAoKTsKLSAgICAgICAg
fSBlbHNlIGlmIChbX2NvbXBsZXRpb25zIGNvdW50XSA9PSAxKSB7Ci0gICAgICAgICAgICBbc2Vs
ZiBfaW5zZXJ0TWF0Y2g6W19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OjBdXTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCghX29yaWdpbmFsU3RyaW5nKTsgICAgICAgLy8g
dGhpcyBzaG91bGQgb25seSBiZSBzZXQgSUZGIHdlIGhhdmUgYSBwb3B1cCB3aW5kb3cKLSAgICAg
ICAgICAgIF9vcmlnaW5hbFN0cmluZyA9IFtbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnNlbGVjdGlv
bl0gcmV0YWluXTsKLSAgICAgICAgICAgIFtzZWxmIF9idWlsZFVJXTsKLSAgICAgICAgICAgIE5T
UmVjdCB3b3JkUmVjdCA9IFtmcmFtZSBfY2FyZXRSZWN0QXROb2RlOlt3aG9sZVdvcmQgc3RhcnRD
b250YWluZXJdIG9mZnNldDpbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbV07Ci0gICAgICAgICAgICAvLyArMSB0byBiZSB1bmRlciB0
aGUgd29yZCwgbm90IHRoZSBjYXJldAotICAgICAgICAgICAgLy8gRklYTUUgLSAzNzY5NjUyIC0g
V3JvbmcgcG9zaXRpb25pbmcgZm9yIHJpZ2h0IHRvIGxlZnQgbGFuZ3VhZ2VzLiAgV2Ugc2hvdWxk
IGxpbmUgdXAgdGhlIHVwcGVyCi0gICAgICAgICAgICAvLyByaWdodCBjb3JuZXIgd2l0aCB0aGUg
Y2FyZXQgaW5zdGVhZCBvZiB1cHBlciBsZWZ0LCBhbmQgdGhlICsxIHdvdWxkIGJlIGEgLTEuCi0g
ICAgICAgICAgICBOU1BvaW50IHdvcmRMb3dlckxlZnQgPSB7IE5TTWluWCh3b3JkUmVjdCkrMSwg
TlNNYXhZKHdvcmRSZWN0KSB9OwotICAgICAgICAgICAgW3NlbGYgX3BsYWNlUG9wdXBXaW5kb3c6
d29yZExvd2VyTGVmdF07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBbc2VsZiBl
bmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQp
ZW5kUmV2ZXJ0aW5nQ2hhbmdlOihCT09MKXJldmVydENoYW5nZSBtb3ZlTGVmdDooQk9PTClnb0xl
ZnQKLXsKLSAgICBpZiAoX3BvcHVwV2luZG93KSB7Ci0gICAgICAgIC8vIHRlYXIgZG93biBVSQot
ICAgICAgICBbW192aWV3IHdpbmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6X3BvcHVwV2luZG93XTsK
LSAgICAgICAgW19wb3B1cFdpbmRvdyBvcmRlck91dDpzZWxmXTsKLSAgICAgICAgLy8gTXVzdCBh
dXRvcmVsZWFzZSBiZWNhdXNlIGV2ZW50IHRyYWNraW5nIGNvZGUgbWF5IGJlIG9uIHRoZSBzdGFj
ayB0b3VjaGluZyBVSQotICAgICAgICBbX3BvcHVwV2luZG93IGF1dG9yZWxlYXNlXTsKLSAgICAg
ICAgX3BvcHVwV2luZG93ID0gbmlsOwotCi0gICAgICAgIGlmIChyZXZlcnRDaGFuZ2UpIHsKLSAg
ICAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVdOwotICAgICAgICAgICAg
W2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6X29yaWdpbmFsU3RyaW5nIHNlbGVjdFJl
cGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwotICAgICAgICB9IGVsc2UgaWYgKFtfdmll
dyBfaGFzU2VsZWN0aW9uXSkgewotICAgICAgICAgICAgaWYgKGdvTGVmdCkKLSAgICAgICAgICAg
ICAgICBbX3ZpZXcgbW92ZUJhY2t3YXJkOm5pbF07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgW192aWV3IG1vdmVGb3J3YXJkOm5pbF07Ci0gICAgICAgIH0KLSAgICAgICAgW19v
cmlnaW5hbFN0cmluZyByZWxlYXNlXTsKLSAgICAgICAgX29yaWdpbmFsU3RyaW5nID0gbmlsOwot
ICAgIH0KLSAgICAvLyBlbHNlIHRoZXJlIGlzIG5vIHN0YXRlIHRvIGFib3J0IGlmIHRoZSB3aW5k
b3cgd2FzIG5vdCB1cAotfQotCi0tIChCT09MKXBvcHVwV2luZG93SXNPcGVuCi17Ci0gICAgcmV0
dXJuIF9wb3B1cFdpbmRvdyAhPSBuaWw7Ci19Ci0KLS8vIFdlYkhUTUxWaWV3IGdpdmVzIHVzIGEg
Y3JhY2sgYXQga2V5IGV2ZW50cyBpdCBzZWVzLiBSZXR1cm4gd2hldGhlciB3ZSBjb25zdW1lZCB0
aGUgZXZlbnQuCi0vLyBUaGUgZmVhdHVyZXMgZm9yIHRoZSB2YXJpb3VzIGtleXMgbWltaWMgTlNU
ZXh0Vmlldy4KLS0gKEJPT0wpZmlsdGVyS2V5RG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAg
aWYgKCFfcG9wdXBXaW5kb3cpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBOU1N0cmluZyAqc3Ry
aW5nID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107Ci0gICAgaWYgKCFbc3Ry
aW5nIGxlbmd0aF0pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICB1bmljaGFyIGMgPSBbc3RyaW5n
IGNoYXJhY3RlckF0SW5kZXg6MF07Ci0gICAgaWYgKGMgPT0gTlNVcEFycm93RnVuY3Rpb25LZXkp
IHsKLSAgICAgICAgaW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOwot
ICAgICAgICBpZiAoMCA8IHNlbGVjdGVkUm93KSB7Ci0gICAgICAgICAgICBbX3RhYmxlVmlldyBz
ZWxlY3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OnNlbGVjdGVkUm93
IC0gMV0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9dOwotICAgICAgICAgICAgW190YWJsZVZpZXcg
c2Nyb2xsUm93VG9WaXNpYmxlOnNlbGVjdGVkUm93IC0gMV07Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMgPT0gTlNEb3duQXJyb3dGdW5jdGlvbktleSkg
ewotICAgICAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBzZWxlY3RlZFJvd107Ci0g
ICAgICAgIGlmIChzZWxlY3RlZFJvdyA8IChpbnQpW19jb21wbGV0aW9ucyBjb3VudF0gLSAxKSB7
Ci0gICAgICAgICAgICBbX3RhYmxlVmlldyBzZWxlY3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGlu
ZGV4U2V0V2l0aEluZGV4OnNlbGVjdGVkUm93ICsgMV0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9d
OwotICAgICAgICAgICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxlOnNlbGVjdGVkUm93
ICsgMV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMg
PT0gTlNSaWdodEFycm93RnVuY3Rpb25LZXkgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBj
ID09ICdcdCcpIHsKLSAgICAgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgYmFja3RhYj8KLSAgICAg
ICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLSAgICAgICAgcmV0
dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMgPT0gTlNMZWZ0QXJyb3dGdW5jdGlvbktleSkgewot
ICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6WUVTXTsKLSAgICAg
ICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMgPT0gMHgxQiB8fCBjID09IE5TRjVGdW5j
dGlvbktleSkgewotICAgICAgICAvLyBGSVhNRTogRjU/Ci0gICAgICAgIFtzZWxmIGVuZFJldmVy
dGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0K
LSAgICBpZiAoYyA9PSAnICcgfHwgYyA+PSAweDIxICYmIGMgPD0gMHgyRiB8fCBjID49IDB4M0Eg
JiYgYyA8PSAweDQwIHx8IGMgPj0gMHg1QiAmJiBjIDw9IDB4NjAgfHwgYyA+PSAweDdCICYmIGMg
PD0gMHg3RCkgewotICAgICAgICAvLyBGSVhNRTogSXMgdGhlIGFib3ZlIGxpc3Qgb2Yga2V5cyBy
ZWFsbHkgZGVmaW5pdGl2ZT8KLSAgICAgICAgLy8gT3JpZ2luYWxseSB0aGlzIGNvZGUgY2FsbGVk
IGlzcHVuY3Q7IGFyZW4ndCB0aGVyZSBvdGhlciBwdW5jdHVhdGlvbiBrZXlzIG9uIGludGVybmF0
aW9uYWwga2V5Ym9hcmRzPwotICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92
ZUxlZnQ6Tk9dOwotICAgICAgICByZXR1cm4gTk87IC8vIGxldCB0aGUgY2hhciBnZXQgaW5zZXJ0
ZWQKLSAgICB9Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKV9yZWZsZWN0U2VsZWN0aW9u
Ci17Ci0gICAgaW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOwotICAg
IEFTU0VSVChzZWxlY3RlZFJvdyA+PSAwICYmIHNlbGVjdGVkUm93IDwgKGludClbX2NvbXBsZXRp
b25zIGNvdW50XSk7Ci0gICAgW3NlbGYgX2luc2VydE1hdGNoOltfY29tcGxldGlvbnMgb2JqZWN0
QXRJbmRleDpzZWxlY3RlZFJvd11dOwotfQotCi0tICh2b2lkKXRhYmxlQWN0aW9uOihpZClzZW5k
ZXIKLXsKLSAgICBbc2VsZiBfcmVmbGVjdFNlbGVjdGlvbl07Ci0gICAgW3NlbGYgZW5kUmV2ZXJ0
aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLX0KLQotLSAoTlNJbnRlZ2VyKW51bWJlck9mUm93
c0luVGFibGVWaWV3OihOU1RhYmxlVmlldyAqKXRhYmxlVmlldwotewotICAgIHJldHVybiBbX2Nv
bXBsZXRpb25zIGNvdW50XTsKLX0KLQotLSAoaWQpdGFibGVWaWV3OihOU1RhYmxlVmlldyAqKXRh
YmxlVmlldyBvYmplY3RWYWx1ZUZvclRhYmxlQ29sdW1uOihOU1RhYmxlQ29sdW1uICopdGFibGVD
b2x1bW4gcm93OihOU0ludGVnZXIpcm93Ci17Ci0gICAgcmV0dXJuIFtfY29tcGxldGlvbnMgb2Jq
ZWN0QXRJbmRleDpyb3ddOwotfQotCi0tICh2b2lkKXRhYmxlVmlld1NlbGVjdGlvbkRpZENoYW5n
ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBbc2VsZiBfcmVmbGVjdFNl
bGVjdGlvbl07Ci19Ci0KLUBlbmQKLQogQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJE
b2N1bWVudFByaXZhdGVQcm90b2NvbHMpCiAKIC0gKE5TUmVjdClzZWxlY3Rpb25SZWN0CkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5o
CShyZXZpc2lvbiA0NDI5MikJKGZyb20gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
OjQ0MjkyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDYsIDIwMDcgR3JhaGFtIERlbm5pcyAoZ3JhaGFt
LmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViSFRNTFZpZXcuaCIKKworI2ltcG9ydCAi
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkludGVybmFsLmgiCisjaW1wb3J0ICJET01Eb2N1bWVudEZy
YWdtZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTURvY3VtZW50SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgorI2lt
cG9ydCAiV2ViQXJjaGl2ZS5oIgorI2ltcG9ydCAiV2ViQ2xpcFZpZXcuaCIKKyNpbXBvcnQgIldl
YkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRGF0YVNvdXJjZUludGVybmFs
LmgiCisjaW1wb3J0ICJXZWJEZWZhdWx0VUlEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV2ViRG9jdW1l
bnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3LmgiCisjaW1w
b3J0ICJXZWJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkVsZW1lbnREaWN0aW9uYXJ5
LmgiCisjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCisjaW1wb3J0ICJXZWJGcmFtZVByaXZh
dGUuaCIKKyNpbXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJIVE1M
UmVwcmVzZW50YXRpb25Qcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgi
CisjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCisjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4dHJh
cy5oIgorI2ltcG9ydCAiV2ViS2l0VmVyc2lvbkNoZWNrcy5oIgorI2ltcG9ydCAiV2ViTG9jYWxp
emFibGVTdHJpbmdzLmgiCisjaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIK
KyNpbXBvcnQgIldlYk5TRXZlbnRFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TRmlsZU1hbmFnZXJF
eHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TSW1hZ2VFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TT2Jq
ZWN0RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaCIKKyNpbXBvcnQg
IldlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgi
CisjaW1wb3J0ICJXZWJOU1ZpZXdFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2lu
Vmlldy5oIgorI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodC5oIgorI2ltcG9ydCAiV2ViUGx1Z2lu
Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKKyNpbXBvcnQgIldlYlBy
ZWZlcmVuY2VzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VQcml2YXRlLmgiCisjaW1w
b3J0ICJXZWJTdHJpbmdUcnVuY2F0b3IuaCIKKyNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJWaWV3SW50ZXJu
YWwuaCIKKyNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHkuaD4KKyNpbXBvcnQgPEFwcGxp
Y2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFn
ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9Db2xvck1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudS5oPgorI2lt
cG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yRGVsZXRlQWN0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0VsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0V4Y2VwdGlvbkhhbmRsZXJzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5V2Vi
QXJjaGl2ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9SYW5nZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVG
b250RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVPYmpDRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUZXh0UmVuZGVyZXIu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvbWFya3VwLmg+CisjaW1wb3J0IDxXZWJLaXQvRE9NLmg+Cisj
aW1wb3J0IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5oPgorI2ltcG9ydCA8V2ViS2l0L0RPTVByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8ZGxmY24u
aD4KKyNpbXBvcnQgPGxpbWl0cz4KKyNpbXBvcnQgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2ltcG9ydCA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworQGludGVy
ZmFjZSBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKKy0gKE5TVmlldyopX3dlYl9ib3JkZXJW
aWV3OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTlNXaW5kb3cgKEJvcmRlclZpZXdBY2Nlc3Mp
CistIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldworeworICAgIHJldHVybiBfYm9yZGVyVmlldzsK
K30KK0BlbmQKKworQGludGVyZmFjZSBXZWJSZXNwb25kZXJDaGFpblNpbmsgOiBOU1Jlc3BvbmRl
ciB7CisgICAgTlNSZXNwb25kZXIqIF9sYXN0UmVzcG9uZGVySW5DaGFpbjsKKyAgICBCT09MIF9y
ZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQ7Cit9CistIChpZClpbml0V2l0aFJlc3BvbmRlckNoYWlu
OihOU1Jlc3BvbmRlciAqKWNoYWluOworLSAodm9pZClkZXRhY2g7CistIChCT09MKXJlY2VpdmVk
VW5oYW5kbGVkQ29tbWFuZDsKK0BlbmQKKworc3RhdGljIElNUCBvbGRTZXRDdXJzb3JJTVAgPSBO
VUxMOworCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKworc3RhdGljIElNUCBvbGRSZXNldEN1
cnNvclJlY3RzSU1QID0gTlVMTDsKK3N0YXRpYyBCT09MIGNhblNldEN1cnNvciA9IFlFUzsKKwor
c3RhdGljIHZvaWQgcmVzZXRDdXJzb3JSZWN0cyhOU1dpbmRvdyogc2VsZiwgU0VMIGNtZCkKK3sK
KyAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgbW91c2VMb2NhdGlvbk91dHNpZGVPZkV2ZW50U3Ry
ZWFtXTsKKyAgICBOU1ZpZXcqIHZpZXcgPSBbW3NlbGYgX3dlYl9ib3JkZXJWaWV3XSBoaXRUZXN0
OnBvaW50XTsKKyAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSkgeworICAgICAgICBXZWJIVE1MVmlldyAqaHRtbFZpZXcgPSAoV2ViSFRNTFZpZXcqKXZpZXc7
CisgICAgICAgIE5TUG9pbnQgbG9jYWxQb2ludCA9IFtodG1sVmlldyBjb252ZXJ0UG9pbnQ6cG9p
bnQgZnJvbVZpZXc6bmlsXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW2h0bWxWaWV3
IGVsZW1lbnRBdFBvaW50OmxvY2FsUG9pbnQgYWxsb3dTaGFkb3dDb250ZW50Ok5PXTsKKyAgICAg
ICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtkaWN0IG9iamVjdEZvcktleTpXZWJFbGVtZW50RE9N
Tm9kZUtleV07CisgICAgICAgIGlmICghW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEFw
cGxldEVsZW1lbnQgY2xhc3NdXSAmJiAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTE9i
amVjdEVsZW1lbnQgY2xhc3NdXSAmJgorICAgICAgICAgICAgIVtlbGVtZW50IGlzS2luZE9mQ2xh
c3M6W0RPTUhUTUxFbWJlZEVsZW1lbnQgY2xhc3NdXSkKKyAgICAgICAgICAgIGNhblNldEN1cnNv
ciA9IE5POworICAgIH0KKyAgICBvbGRSZXNldEN1cnNvclJlY3RzSU1QKHNlbGYsIGNtZCk7Cisg
ICAgY2FuU2V0Q3Vyc29yID0gWUVTOworfQorCitzdGF0aWMgdm9pZCBzZXRDdXJzb3IoTlNDdXJz
b3IqIHNlbGYsIFNFTCBjbWQpCit7CisgICAgaWYgKGNhblNldEN1cnNvcikKKyAgICAgICAgb2xk
U2V0Q3Vyc29ySU1QKHNlbGYsIGNtZCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIHNldEN1
cnNvcihOU1dpbmRvdyogc2VsZiwgU0VMIGNtZCwgTlNQb2ludCBwb2ludCkKK3sKKyAgICBOU1Zp
ZXcqIHZpZXcgPSBbW3NlbGYgX3dlYl9ib3JkZXJWaWV3XSBoaXRUZXN0OnBvaW50XTsKKyAgICBp
ZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgeworICAgICAgICBX
ZWJIVE1MVmlldyAqaHRtbFZpZXcgPSAoV2ViSFRNTFZpZXcqKXZpZXc7CisgICAgICAgIE5TUG9p
bnQgbG9jYWxQb2ludCA9IFtodG1sVmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmls
XTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW2h0bWxWaWV3IGVsZW1lbnRBdFBvaW50
OmxvY2FsUG9pbnQgYWxsb3dTaGFkb3dDb250ZW50Ok5PXTsKKyAgICAgICAgRE9NRWxlbWVudCAq
ZWxlbWVudCA9IFtkaWN0IG9iamVjdEZvcktleTpXZWJFbGVtZW50RE9NTm9kZUtleV07CisgICAg
ICAgIGlmICghW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEFwcGxldEVsZW1lbnQgY2xh
c3NdXSAmJiAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTE9iamVjdEVsZW1lbnQgY2xh
c3NdXSAmJgorICAgICAgICAgICAgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxFbWJl
ZEVsZW1lbnQgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb2xkU2V0
Q3Vyc29ySU1QKHNlbGYsIGNtZCwgcG9pbnQpOworfQorCisjZW5kaWYKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworQGludGVyZmFjZSBXZWJMYXllckhvc3RpbmdWaWV3IDog
TlNWaWV3CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJMYXllckhvc3RpbmdWaWV3CisKKy8v
IEVtcHR5IE5TVmlld3MgaW50ZXJjZXB0IHJpZ2h0TW91c2VEb3duOiB0byBkbyBjb250ZXh0IG1l
bnUgaGFuZGxpbmcsIGJ1dCB3ZSBuZWVkIHRoZSBXZWJMYXllckhvc3RpbmdWaWV3IHRvCisvLyBs
ZXQgcmlnaHQgbW91c2UgY2xpY2tzIHRocm91Z2guCistICh2b2lkKXJpZ2h0TW91c2VEb3duOihO
U0V2ZW50ICopZXZlbnQKK3sKKyAgICBbW3NlbGYgbmV4dFJlc3BvbmRlcl0gcGVyZm9ybVNlbGVj
dG9yOl9jbWQgd2l0aE9iamVjdDpldmVudF07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworZXh0ZXJuICJDIiB7CisKKy8vIE5lZWQgdG8gZGVj
bGFyZSB0aGVzZSBhdHRyaWJ1dGUgbmFtZXMgYmVjYXVzZSBBcHBLaXQgZXhwb3J0cyB0aGVtIGJ1
dCBkb2VzIG5vdCBtYWtlIHRoZW0gYXZhaWxhYmxlIGluIEFQSSBvciBTUEkgaGVhZGVycy4KKwor
ZXh0ZXJuIE5TU3RyaW5nICpOU01hcmtlZENsYXVzZVNlZ21lbnRBdHRyaWJ1dGVOYW1lOworZXh0
ZXJuIE5TU3RyaW5nICpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lOwor
Cit9CisKK0BpbnRlcmZhY2UgTlNWaWV3IChXZWJOU1ZpZXdEZXRhaWxzKQorLSAodm9pZClfcmVj
dXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KXJlY3QgaXNW
aXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzoo
TlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3OworLSAodm9pZClfcmVj
dXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czooQk9PTCluZWVkc0xvY2tGb2N1cyB2
aXNSZWN0OihOU1JlY3QpdmlzUmVjdDsKKy0gKHZvaWQpX3JlY3Vyc2l2ZTooQk9PTClyZWN1cnNl
IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxheVJlY3QgaW5Db250ZXh0
OihOU0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQgdG9wVmlldzooQk9PTCl0b3BWaWV3OworLSAo
TlNSZWN0KV9kaXJ0eVJlY3Q7CistICh2b2lkKV9zZXREcmF3c093bkRlc2NlbmRhbnRzOihCT09M
KWRyYXdzT3duRGVzY2VuZGFudHM7CistICh2b2lkKV9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFx
dWVBbmNlc3RvcnM7CistICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGU7CitAZW5kCisKK0Bp
bnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlvbkRldGFpbHMpCistICh2b2lk
KXNwZWFrU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKK0BlbmQKKworQGludGVyZmFjZSBOU1dp
bmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQorLSAoaWQpX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJS
ZXNpZ25pbmc7CistICh2b2lkKV9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7CitA
ZW5kCisKK0BpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJp
bmdEZXRhaWxzKQorLSAoaWQpX2luaXRXaXRoRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7Cist
IChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdl
IGRvY3VtZW50OihET01Eb2N1bWVudCAqKWRvY3VtZW50IGRvY3VtZW50QXR0cmlidXRlczooTlNE
aWN0aW9uYXJ5ICopZGljdCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOwor
QGVuZAorCitAaW50ZXJmYWNlIE5TU3BlbGxDaGVja2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFp
bHMpCistICh2b2lkKWxlYXJuV29yZDooTlNTdHJpbmcgKil3b3JkOworQGVuZAorCisvLyBCeSBp
bWFnaW5nIHRvIGEgd2lkdGggYSBsaXR0bGUgd2lkZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHBpeGVs
cywKKy8vIHRoaW4gcGFnZXMgd2lsbCBiZSBzY2FsZWQgZG93biBhIGxpdHRsZSwgbWF0Y2hpbmcg
dGhlIHdheSB0aGV5CisvLyBwcmludCBpbiBJRSBhbmQgQ2FtaW5vLiBUaGlzIGxldHMgdGhlbSB1
c2UgZmV3ZXIgc2hlZXRzIHRoYW4gdGhleQorLy8gd291bGQgb3RoZXJ3aXNlLCB3aGljaCBpcyBw
cmVzdW1hYmx5IHdoeSBvdGhlciBicm93c2VycyBkbyB0aGlzLgorLy8gV2lkZSBwYWdlcyB3aWxs
IGJlIHNjYWxlZCBkb3duIG1vcmUgdGhhbiB0aGlzLgorI2RlZmluZSBQcmludGluZ01pbmltdW1T
aHJpbmtGYWN0b3IgICAgIDEuMjVmCisKKy8vIFRoaXMgbnVtYmVyIGRldGVybWluZXMgaG93IHNt
YWxsIHdlIGFyZSB3aWxsaW5nIHRvIHJlZHVjZSB0aGUgcGFnZSBjb250ZW50CisvLyBpbiBvcmRl
ciB0byBhY2NvbW1vZGF0ZSB0aGUgd2lkZXN0IGxpbmUuIElmIHRoZSBwYWdlIHdvdWxkIGhhdmUg
dG8gYmUKKy8vIHJlZHVjZWQgc21hbGxlciB0byBtYWtlIHRoZSB3aWRlc3QgbGluZSBmaXQsIHdl
IGp1c3QgY2xpcCBpbnN0ZWFkICh0aGlzCisvLyBiZWhhdmlvciBtYXRjaGVzIE1hY0lFIGFuZCBN
b3ppbGxhLCBhdCBsZWFzdCkKKyNkZWZpbmUgUHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yICAg
ICAyLjBmCisKKy8vIFRoaXMgbnVtYmVyIGRldGVybWluZXMgaG93IHNob3J0IHRoZSBsYXN0IHBy
aW50ZWQgcGFnZSBvZiBhIG11bHRpLXBhZ2UgcHJpbnQgc2Vzc2lvbgorLy8gY2FuIGJlIGJlZm9y
ZSB3ZSB0cnkgdG8gc2hyaW5rIHRoZSBzY2FsZSBpbiBvcmRlciB0byByZWR1Y2UgdGhlIG51bWJl
ciBvZiBwYWdlcywgYW5kCisvLyB0aHVzIGVsaW1pbmF0ZSB0aGUgb3JwaGFuLgorI2RlZmluZSBM
YXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbyAgICAgIDAuMWYKKworLy8gVGhpcyBudW1iZXIgZGV0
ZXJtaW5lcyB0aGUgYW1vdW50IHRoZSBzY2FsZSBmYWN0b3IgaXMgYWRqdXN0ZWQgdG8gdHJ5IHRv
IGVsaW1pbmF0ZSBvcnBoYW5zLgorLy8gSXQgaGFzIG5vIGRpcmVjdCBtYXRoZW1hdGljYWwgcmVs
YXRpb25zaGlwIHRvIExhc3RQcmludGVkUGFnZU9ycGhhblJhdGlvLCBkdWUgdG8gdmFyaWFibGUK
Ky8vIG51bWJlcnMgb2YgcGFnZXMsIGxvZ2ljIHRvIGF2b2lkIGJyZWFraW5nIGVsZW1lbnRzLCBh
bmQgQ1NTLXN1cHBsaWVkIGhhcmQgcGFnZSBicmVha3MuCisjZGVmaW5lIFByaW50aW5nT3JwaGFu
U2hyaW5rQWRqdXN0bWVudCAgMS4xZgorCisjZGVmaW5lIEFVVE9TQ1JPTExfSU5URVJWQUwgICAg
ICAgICAgICAgMC4xZgorCisjZGVmaW5lIERSQUdfTEFCRUxfQk9SREVSX1ggICAgICAgICAgICAg
NC4wZgorLy9LZWVwIGJvcmRlcl95IGluIHN5bmNoIHdpdGggRHJhZ0NvbnRyb2xsZXI6OkxpbmtE
cmFnQm9yZGVySW5zZXQKKyNkZWZpbmUgRFJBR19MQUJFTF9CT1JERVJfWSAgICAgICAgICAgICAy
LjBmCisjZGVmaW5lIERSQUdfTEFCRUxfUkFESVVTICAgICAgICAgICAgICAgNS4wZgorI2RlZmlu
ZSBEUkFHX0xBQkVMX0JPUkRFUl9ZX09GRlNFVCAgICAgICAgICAgICAgMi4wZgorCisjZGVmaW5l
IE1JTl9EUkFHX0xBQkVMX1dJRFRIX0JFRk9SRV9DTElQICAgICAgICAxMjAuMGYKKyNkZWZpbmUg
TUFYX0RSQUdfTEFCRUxfV0lEVEggICAgICAgICAgICAgICAgICAgIDMyMC4wZgorCisjZGVmaW5l
IERSQUdfTElOS19MQUJFTF9GT05UX1NJWkUgICAxMS4wZgorI2RlZmluZSBEUkFHX0xJTktfVVJM
X0ZPTlRfU0laRSAgIDEwLjBmCisKKy8vIEFueSBub24temVybyB2YWx1ZSB3aWxsIGRvLCBidXQg
dXNpbmcgc29tZXRoaW5nIHJlY29nbml6YWJsZSBtaWdodCBoZWxwIHVzIGRlYnVnIHNvbWUgZGF5
LgorI2RlZmluZSBUUkFDS0lOR19SRUNUX1RBRyAweEJBREZBQ0UKKworLy8gRklYTUU6IFRoaXMg
Y29uc3RhbnQgaXMgY29waWVkIGZyb20gQXBwS2l0J3MgX05YU21hcnRQYXN0ZSBjb25zdGFudC4K
KyNkZWZpbmUgV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUgQCJOZVhUIHNtYXJ0IHBhc3RlIHBhc3Rl
Ym9hcmQgdHlwZSIKKworI2RlZmluZSBTVEFOREFSRF9XRUlHSFQgNQorI2RlZmluZSBNSU5fQk9M
RF9XRUlHSFQgNworI2RlZmluZSBTVEFOREFSRF9CT0xEX1dFSUdIVCA5CisKKy8vIEZha2UgVVJM
IHNjaGVtZS4KKyNkZWZpbmUgV2ViRGF0YVByb3RvY29sU2NoZW1lIEAid2Via2l0LWZha2UtdXJs
IgorCisvLyA8cmRhcjovL3Byb2JsZW0vNDk4NTUyND4gUmVmZXJlbmNlcyB0byBXZWJDb3JlU2Ny
b2xsVmlldyBhcyBhIHN1YnZpZXcgb2YgYSBXZWJIVE1MVmlldyBtYXkgYmUgcHJlc2VudAorLy8g
aW4gc29tZSBOSUIgZmlsZXMsIHNvIE5TVW5hcmNoaXZlciBtdXN0IGJlIHN0aWxsIGFibGUgdG8g
bG9vayB1cCB0aGlzIG5vdy11bnVzZWQgY2xhc3MuCitAaW50ZXJmYWNlIFdlYkNvcmVTY3JvbGxW
aWV3IDogTlNTY3JvbGxWaWV3CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlU2Nyb2xs
VmlldworQGVuZAorCisvLyBpZiBZRVMsIGRvIHRoZSBzdGFuZGFyZCBOU1ZpZXcgaGl0IHRlc3Qg
KHdoaWNoIGNhbid0IGdpdmUgdGhlIHJpZ2h0IHJlc3VsdCB3aGVuIEhUTUwgb3ZlcmxhcHMgYSB2
aWV3KQorc3RhdGljIEJPT0wgZm9yY2VOU1ZpZXdIaXRUZXN0OworCisvLyBpZiBZRVMsIGRvIHRo
ZSAidG9wIFdlYkhUTUxWaWV3IiBoaXQgdGVzdCAod2hpY2ggd2UnZCBsaWtlIHRvIGRvIGFsbCB0
aGUgdGltZSBidXQgY2FuJ3QgYmVjYXVzZSBvZiBKYXZhIHJlcXVpcmVtZW50cyBbc2VlIGJ1ZyA0
MzQ5NzIxXSkKK3N0YXRpYyBCT09MIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0OworCitzdGF0aWMg
V2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3OworCisvLyBXZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0
byBzYWZlbHkgcmVmZXJlbmNlIHRoZSBDYWNoZWRJbWFnZSBmb3IgdGhlIHByb21pc2VkIGRyYWcg
ZGF0YQorc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBwcm9taXNlZERhdGFDbGllbnQoKQor
eworICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCogc3RhdGljQ2FjaGVkUmVzb3VyY2VD
bGllbnQgPSBuZXcgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CisgICAgcmV0dXJuIHN0YXRpY0NhY2hl
ZFJlc291cmNlQ2xpZW50OworfQorCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmll
d0ZpbGVJbnRlcm5hbCkKKy0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAqKXBh
dGhzOworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgaW5Db250ZXh0OihET01SYW5nZSAqKWNv
bnRleHQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CistIChOU1N0cmluZyAq
KV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKKy0g
KHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxs
b3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CistICh2b2lkKV9wYXN0ZUFzUGxhaW5U
ZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CistICh2b2lkKV9y
ZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHk7CistICh2b2lkKV9yZW1vdmVT
dXBlcnZpZXdPYnNlcnZlcnM7CistICh2b2lkKV9yZW1vdmVXaW5kb3dPYnNlcnZlcnM7CistIChC
T09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50
IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3
SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKEJPT0wpX3Nob3VsZEluc2VydFRleHQ6KE5TU3RyaW5n
ICopdGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjoo
V2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CistIChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFj
dGlvbilhY3Rpb247CistIChmbG9hdClfY2FsY3VsYXRlUHJpbnRIZWlnaHQ7CistIChET01SYW5n
ZSAqKV9zZWxlY3RlZFJhbmdlOworLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2U7CistIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7
CistICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0
eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0cmli
dXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZzsKKy0gKERP
TVJhbmdlICopX2RvY3VtZW50UmFuZ2U7CistICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNF
dmVudCAqKWV2ZW50OworLSAoV2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXc7CistIChCT09MKV9p
c1RvcEhUTUxWaWV3OworLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKKy0g
KHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZTsKKy0g
KHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKK0BlbmQKKworI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
CitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld1RleHRDaGVja2luZ0ludGVybmFs
KQorLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOihpZClzZW5kZXI7CistIChC
T09MKXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKKy0gKHZvaWQpc2V0U21hcnRJbnNlcnREZWxl
dGVFbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOihp
ZClzZW5kZXI7CistIChCT09MKWlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOwor
LSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsK
Ky0gKHZvaWQpdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246KGlkKXNlbmRlcjsKKy0g
KEJPT0wpaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDsKKy0gKHZvaWQpc2V0QXV0b21h
dGljTGlua0RldGVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKKy0gKHZvaWQpdG9nZ2xlQXV0b21h
dGljTGlua0RldGVjdGlvbjooaWQpc2VuZGVyOworLSAoQk9PTClpc0F1dG9tYXRpY0Rhc2hTdWJz
dGl0dXRpb25FbmFibGVkOworLSAodm9pZClzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5h
YmxlZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9u
OihpZClzZW5kZXI7CistIChCT09MKWlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDsK
Ky0gKHZvaWQpc2V0QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDooQk9PTClmbGFnOwor
LSAodm9pZCl0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KGlkKXNlbmRlcjsKKy0gKEJP
T0wpaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOworLSAodm9pZClzZXRBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2ds
ZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyOworQGVuZAorCisjZW5kaWYK
KworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRm9yd2FyZERlY2xhcmF0aW9uKSAvLyBGSVhN
RTogUHV0IHRoaXMgaW4gYSBub3JtYWwgY2F0ZWdvcnkgYW5kIHN0b3AgZG9pbmcgdGhlIGZvcndh
cmQgZGVjbGFyYXRpb24gdHJpY2suCistICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGlu
ZyBtaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDoo
ZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplOwor
QGVuZAorCitAY2xhc3MgTlNUZXh0SW5wdXRDb250ZXh0OworQGludGVyZmFjZSBOU1Jlc3BvbmRl
ciAoQXBwS2l0RGV0YWlscykKKy0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsK
K0BlbmQKKworQGludGVyZmFjZSBOU09iamVjdCAoTlNUZXh0SW5wdXRDb250ZXh0RGV0YWlscykK
Ky0gKEJPT0wpd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzOworLSAoQk9PTCloYW5kbGVNb3VzZUV2
ZW50OihOU0V2ZW50ICopZXZlbnQ7CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdl
Yk5TVGV4dElucHV0U3VwcG9ydCkgPE5TVGV4dElucHV0PgorLSAodm9pZClfdXBkYXRlU2VsZWN0
aW9uRm9ySW5wdXRNYW5hZ2VyOworQGVuZAorCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJF
ZGl0aW5nU3R5bGVTdXBwb3J0KQorLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9lbXB0eVN0
eWxlOworLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAqKWNvbG9yOworQGVu
ZAorCitAaW50ZXJmYWNlIE5TVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCistICh2b2lk
KV93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICop
IGFycmF5OworQGVuZAorCitAaW50ZXJmYWNlIE5TTXV0YWJsZURpY3Rpb25hcnkgKFdlYkhUTUxW
aWV3RmlsZUludGVybmFsKQorLSAodm9pZClfd2ViX3NldE9iamVjdElmTm90TmlsOihpZClvYmpl
Y3QgZm9yS2V5OihpZClrZXk7CitAZW5kCisKKy8vIEhhbmRsZXMgdGhlIGNvbXBsZXRlOiB0ZXh0
IGNvbW1hbmQKK0BpbnRlcmZhY2UgV2ViVGV4dENvbXBsZXRlQ29udHJvbGxlciA6IE5TT2JqZWN0
IDxOU1RhYmxlVmlld0RlbGVnYXRlLCBOU1RhYmxlVmlld0RhdGFTb3VyY2U+IHsKK0Bwcml2YXRl
CisgICAgV2ViSFRNTFZpZXcgKl92aWV3OworICAgIE5TV2luZG93ICpfcG9wdXBXaW5kb3c7Cisg
ICAgTlNUYWJsZVZpZXcgKl90YWJsZVZpZXc7CisgICAgTlNBcnJheSAqX2NvbXBsZXRpb25zOwor
ICAgIE5TU3RyaW5nICpfb3JpZ2luYWxTdHJpbmc7CisgICAgaW50IHByZWZpeExlbmd0aDsKK30K
Ky0gKGlkKWluaXRXaXRoSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopdmlldzsKKy0gKHZvaWQpZG9D
b21wbGV0aW9uOworLSAodm9pZCllbmRSZXZlcnRpbmdDaGFuZ2U6KEJPT0wpcmV2ZXJ0Q2hhbmdl
IG1vdmVMZWZ0OihCT09MKWdvTGVmdDsKKy0gKEJPT0wpcG9wdXBXaW5kb3dJc09wZW47CistIChC
T09MKWZpbHRlcktleURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpX3JlZmxlY3RTZWxl
Y3Rpb247CitAZW5kCisKK3N0cnVjdCBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFt
ZXRlcnMgeworICAgIEtleWJvYXJkRXZlbnQqIGV2ZW50OworICAgIEJPT0wgZXZlbnRXYXNIYW5k
bGVkOworICAgIEJPT0wgc2hvdWxkU2F2ZUNvbW1hbmQ7CisgICAgLy8gVGhlIElucHV0IE1ldGhv
ZCBtYXkgY29uc3VtZSBhbiBldmVudCBhbmQgbm90IHRlbGwgdXMsIGluCisgICAgLy8gd2hpY2gg
Y2FzZSB3ZSBzaG91bGQgbm90IGJ1YmJsZSB0aGUgZXZlbnQgdXAgdGhlIERPTQorICAgIEJPT0wg
Y29uc3VtZWRCeUlNOworfTsKKworQGludGVyZmFjZSBXZWJIVE1MVmlld1ByaXZhdGUgOiBOU09i
amVjdCB7CitAcHVibGljCisgICAgQk9PTCBjbG9zZWQ7CisgICAgQk9PTCBuZWVkc1RvQXBwbHlT
dHlsZXM7CisgICAgQk9PTCBpZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50czsKKyAgICBCT09MIHBy
aW50aW5nOworICAgIEJPT0wgYXZvaWRpbmdQcmludE9ycGhhbjsKKyAgICBCT09MIG9ic2Vydmlu
Z01vdXNlTW92ZWROb3RpZmljYXRpb25zOworICAgIEJPT0wgb2JzZXJ2aW5nU3VwZXJ2aWV3Tm90
aWZpY2F0aW9uczsKKyAgICBCT09MIG9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnM7CisgICAg
Qk9PTCByZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsKKyAgICAKKyAgICBpZCBzYXZlZFN1YnZpZXdz
OworICAgIEJPT0wgc3Vidmlld3NTZXRBc2lkZTsKKyAgICAKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgTlNWaWV3ICpsYXllckhvc3RpbmdWaWV3OworI2VuZGlmCisKKyAg
ICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZl
bnQuCisgICAgQk9PTCBoYW5kbGluZ01vdXNlRG93bkV2ZW50OworICAgIE5TRXZlbnQgKmtleURv
d25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCisKKyAgICAvLyBBIFdl
YkhUTUxWaWV3IGhhcyBhIHNpbmdsZSBpbnB1dCBjb250ZXh0LCBidXQgd2UgcmV0dXJuIG5pbCB3
aGVuIGluIG5vbi1lZGl0YWJsZSBjb250ZW50IHRvIGF2b2lkIG1ha2luZyBpbnB1dCBtZXRob2Rz
IGRvIHRoZWlyIHdvcmsuCisgICAgLy8gVGhpcyBzdGF0ZSBpcyBzYXZlZCBlYWNoIHRpbWUgc2Vs
ZWN0aW9uIGNoYW5nZXMsIGJlY2F1c2UgY29tcHV0aW5nIGl0IGNhdXNlcyBzdHlsZSByZWNhbGMs
IHdoaWNoIGlzIG5vdCBhbHdheXMgc2FmZSB0byBkby4KKyAgICBCT09MIGV4cG9zZUlucHV0Q29u
dGV4dDsKKworICAgIE5TUG9pbnQgbGFzdFNjcm9sbFBvc2l0aW9uOworCisgICAgV2ViUGx1Z2lu
Q29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxlcjsKKyAgICAKKyAgICBOU1N0cmluZyAqdG9vbFRp
cDsKKyAgICBOU1Rvb2xUaXBUYWcgbGFzdFRvb2xUaXBUYWc7CisgICAgaWQgdHJhY2tpbmdSZWN0
T3duZXI7CisgICAgdm9pZCAqdHJhY2tpbmdSZWN0VXNlckRhdGE7CisgICAgCisgICAgTlNUaW1l
ciAqYXV0b3Njcm9sbFRpbWVyOworICAgIE5TRXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7
CisgICAgCisgICAgTlNBcnJheSAqcGFnZVJlY3RzOworCisgICAgTlNNdXRhYmxlRGljdGlvbmFy
eSAqaGlnaGxpZ2h0ZXJzOworCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBCT09MIG5l
eHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7CisjZW5kaWYKKyAgICAKKyAgICBXZWJUZXh0Q29tcGxl
dGVDb250cm9sbGVyICpjb21wQ29udHJvbGxlcjsKKyAgICAKKyAgICBCT09MIHRyYW5zcGFyZW50
QmFja2dyb3VuZDsKKworICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVy
cyogaW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBCT09MIHJlY2VpdmVkTk9PUDsK
KyAgICAKKyAgICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlOworICAgIFdlYkNvcmU6OkNhY2hl
ZEltYWdlKiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKKyAgICAKKyAgICBDRlJ1bkxvb3BU
aW1lclJlZiB1cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcjsKKyAgICBDRlJ1bkxvb3BU
aW1lclJlZiB1cGRhdGVNb3VzZW92ZXJUaW1lcjsKKworICAgIFNFTCBzZWxlY3RvckZvckRvQ29t
bWFuZEJ5U2VsZWN0b3I7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgQk9PTCBlbnVtZXJhdGluZ1N1
YnZpZXdzOworI2VuZGlmCit9CistICh2b2lkKWNsZWFyOworQGVuZAorCitzdGF0aWMgTlNDZWxs
U3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgewor
ICAgICAgICBjYXNlIEZhbHNlVHJpU3RhdGU6CisgICAgICAgICAgICByZXR1cm4gTlNPZmZTdGF0
ZTsKKyAgICAgICAgY2FzZSBUcnVlVHJpU3RhdGU6CisgICAgICAgICAgICByZXR1cm4gTlNPblN0
YXRlOworICAgICAgICBjYXNlIE1peGVkVHJpU3RhdGU6CisgICAgICAgICAgICByZXR1cm4gTlNN
aXhlZFN0YXRlOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
TlNPZmZTdGF0ZTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3UHJpdmF0ZQorCisr
ICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyNp
Zm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25NYWluVGhy
ZWFkKHNlbGYpOworI2VuZGlmCisKKyAgICBpZiAoIW9sZFNldEN1cnNvcklNUCkgeworI2lmZGVm
IEJVSUxESU5HX09OX1RJR0VSCisgICAgICAgIE1ldGhvZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFz
c19nZXRJbnN0YW5jZU1ldGhvZChbTlNDdXJzb3IgY2xhc3NdLCBAc2VsZWN0b3Ioc2V0KSk7Cisj
ZWxzZQorICAgICAgICBNZXRob2Qgc2V0Q3Vyc29yTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VN
ZXRob2QoW05TV2luZG93IGNsYXNzXSwgQHNlbGVjdG9yKF9zZXRDdXJzb3JGb3JNb3VzZUxvY2F0
aW9uOikpOworI2VuZGlmCisgICAgICAgIEFTU0VSVChzZXRDdXJzb3JNZXRob2QpOworCisgICAg
ICAgIG9sZFNldEN1cnNvcklNUCA9IG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihzZXRDdXJzb3JN
ZXRob2QsIChJTVApc2V0Q3Vyc29yKTsKKyAgICAgICAgQVNTRVJUKG9sZFNldEN1cnNvcklNUCk7
CisgICAgfQorICAgIAorI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgaWYgKCFvbGRSZXNl
dEN1cnNvclJlY3RzSU1QKSB7CisgICAgICAgIE1ldGhvZCByZXNldEN1cnNvclJlY3RzTWV0aG9k
ID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TV2luZG93IGNsYXNzXSwgQHNlbGVjdG9yKHJl
c2V0Q3Vyc29yUmVjdHMpKTsKKyAgICAgICAgQVNTRVJUKHJlc2V0Q3Vyc29yUmVjdHNNZXRob2Qp
OworICAgICAgICBvbGRSZXNldEN1cnNvclJlY3RzSU1QID0gbWV0aG9kX3NldEltcGxlbWVudGF0
aW9uKHJlc2V0Q3Vyc29yUmVjdHNNZXRob2QsIChJTVApcmVzZXRDdXJzb3JSZWN0cyk7CisgICAg
ICAgIEFTU0VSVChvbGRSZXNldEN1cnNvclJlY3RzSU1QKTsKKyAgICB9CisjZW5kaWYKKworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2Nh
dGVPbk1haW5UaHJlYWQoW1dlYkhUTUxWaWV3UHJpdmF0ZSBjbGFzc10sIHNlbGYpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQoIWF1dG9zY3JvbGxUaW1lcik7CisgICAgQVNTRVJUKCFh
dXRvc2Nyb2xsVHJpZ2dlckV2ZW50KTsKKyAgICBBU1NFUlQoIXVwZGF0ZUZvY3VzZWRBbmRBY3Rp
dmVTdGF0ZVRpbWVyKTsKKyAgICBBU1NFUlQoIXVwZGF0ZU1vdXNlb3ZlclRpbWVyKTsKKyAgICAK
KyAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFzZV07CisgICAgW2tleURvd25FdmVudCByZWxlYXNl
XTsKKyAgICBbcGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKKyAgICBbdG9vbFRpcCByZWxlYXNl
XTsKKyAgICBbY29tcENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgW2RhdGFTb3VyY2UgcmVsZWFz
ZV07CisgICAgW2hpZ2hsaWdodGVycyByZWxlYXNlXTsKKyAgICBpZiAocHJvbWlzZWREcmFnVElG
RkRhdGFTb3VyY2UpCisgICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVD
bGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQor
CistICh2b2lkKWZpbmFsaXplCit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CisKKyAgICBp
ZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCisgICAgICAgIHByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOworCisgICAgW3N1
cGVyIGZpbmFsaXplXTsKK30KKworLSAodm9pZCljbGVhcgoreworICAgIFttb3VzZURvd25FdmVu
dCByZWxlYXNlXTsKKyAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAgIFtwbHVnaW5Db250
cm9sbGVyIHJlbGVhc2VdOworICAgIFt0b29sVGlwIHJlbGVhc2VdOworICAgIFtjb21wQ29udHJv
bGxlciByZWxlYXNlXTsKKyAgICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKKyAgICBbaGlnaGxpZ2h0
ZXJzIHJlbGVhc2VdOworICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKKyAgICAg
ICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFD
bGllbnQoKSk7CisKKyAgICBtb3VzZURvd25FdmVudCA9IG5pbDsKKyAgICBrZXlEb3duRXZlbnQg
PSBuaWw7CisgICAgcGx1Z2luQ29udHJvbGxlciA9IG5pbDsKKyAgICB0b29sVGlwID0gbmlsOwor
ICAgIGNvbXBDb250cm9sbGVyID0gbmlsOworICAgIGRhdGFTb3VyY2UgPSBuaWw7CisgICAgaGln
aGxpZ2h0ZXJzID0gbmlsOworICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlID0gMDsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBsYXllckhvc3RpbmdWaWV3ID0g
bmlsOworI2VuZGlmCit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChX
ZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKworLSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRSYW5nZQor
eworICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIF9kb2N1bWVudFJhbmdl
XTsKK30KKworLSAoQk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHMKK3sK
KyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbcGF0aHMgb2JqZWN0RW51bWVyYXRvcl07
CisgICAgTlNTdHJpbmcgKnBhdGg7CisgICAgCisgICAgd2hpbGUgKChwYXRoID0gW2VudW1lcmF0
b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgeworICAgICAgICBOU1N0cmluZyAqTUlNRVR5cGUgPSBX
S0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKFtwYXRoIHBhdGhFeHRlbnNpb25dKTsKKyAgICAgICAg
aWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKE1J
TUVUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIAorICAgIHJldHVy
biBOTzsKK30KKworLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRhU291cmNlCit7CisgICAgcmV0dXJu
IF9wcml2YXRlLT5kYXRhU291cmNlOworfQorCistIChXZWJWaWV3ICopX3dlYlZpZXcKK3sKKyAg
ICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291cmNlIF93ZWJWaWV3XTsKK30KKworLSAoV2ViRnJh
bWVWaWV3ICopX2ZyYW1lVmlldworeworICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNl
IHdlYkZyYW1lXSBmcmFtZVZpZXddOworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2Rv
Y3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6KE5TQXJyYXkgKilwYXRocworeworICAgIERPTURvY3Vt
ZW50RnJhZ21lbnQgKmZyYWdtZW50OworICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtw
YXRocyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBOU011dGFibGVBcnJheSAqZG9tTm9kZXMgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBOU1N0cmluZyAqcGF0aDsKKyAgICAK
KyAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Cisg
ICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVzOyBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nIGlz
IGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlzIHdpbGwKKyAgICAgICAgLy8gYmUgcGFzdGVk
IGFzIHZpc2libGUgdGV4dC4KKyAgICAgICAgTlNTdHJpbmcgKnVybCA9IFtbW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpwYXRoXSBfd2Via2l0X2Nhbm9uaWNhbGl6ZV0gX3dlYl91c2VyVmlzaWJsZVN0
cmluZ107CisgICAgICAgIFtkb21Ob2RlcyBhZGRPYmplY3Q6W1tbc2VsZiBfZnJhbWVdIERPTURv
Y3VtZW50XSBjcmVhdGVUZXh0Tm9kZTogdXJsXV07CisgICAgfQorICAgIAorICAgIGZyYWdtZW50
ID0gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6
ZG9tTm9kZXNdOyAKKyAgICAKKyAgICBbZG9tTm9kZXMgcmVsZWFzZV07CisgICAgCisgICAgcmV0
dXJuIFtmcmFnbWVudCBmaXJzdENoaWxkXSAhPSBuaWwgPyBmcmFnbWVudCA6IG5pbDsKK30KKwor
KyAoTlNBcnJheSAqKV9leGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNp
b24KK3sKKyAgICBzdGF0aWMgTlNBcnJheSAqZWxlbWVudHMgPSBuaWw7CisgICAgaWYgKGVsZW1l
bnRzID09IG5pbCkgeworICAgICAgICBlbGVtZW50cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOgorICAgICAgICAgICAgLy8gT21pdCBzdHlsZSBzaW5jZSB3ZSB3YW50IHN0eWxl
IHRvIGJlIGlubGluZSBzbyB0aGUgZnJhZ21lbnQgY2FuIGJlIGVhc2lseSBpbnNlcnRlZC4KKyAg
ICAgICAgICAgIEAic3R5bGUiLAorICAgICAgICAgICAgLy8gT21pdCB4bWwgc28gdGhlIHJlc3Vs
dCBpcyBub3QgWEhUTUwuCisgICAgICAgICAgICBAInhtbCIsIAorICAgICAgICAgICAgLy8gT21p
dCB0YWdzIHRoYXQgd2lsbCBnZXQgc3RyaXBwZWQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVu
dCBhbnl3YXkuCisgICAgICAgICAgICBAImRvY3R5cGUiLCBAImh0bWwiLCBAImhlYWQiLCBAImJv
ZHkiLAorICAgICAgICAgICAgLy8gT21pdCBkZXByZWNhdGVkIHRhZ3MuCisgICAgICAgICAgICBA
ImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJmb250IiwgQCJpc2lu
ZGV4IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAorICAgICAgICAgICAgLy8gT21p
dCBvYmplY3Qgc28gbm8gZmlsZSBhdHRhY2htZW50cyBhcmUgcGFydCBvZiB0aGUgZnJhZ21lbnQu
CisgICAgICAgICAgICBAIm9iamVjdCIsIG5pbF07CisgICAgICAgIENGUmV0YWluKGVsZW1lbnRz
KTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnRzOworfQorCitzdGF0aWMgTlNVUkwqIHVuaXF1
ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0aXZlUGFydCkKK3sKKyAgICBDRlVV
SURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKKyAgICBO
U1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKKyAgICBDRlJlbGVhc2UoVVVJRFJlZik7CisgICAg
TlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVs
YXRpdmVQYXJ0XV07CisgICAgQ0ZSZWxlYXNlKFVVSURTdHJpbmcpOworCisgICAgcmV0dXJuIFVS
TDsKK30KKworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBh
c3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRleHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93UGxhaW5UZXh0
OihCT09MKWFsbG93UGxhaW5UZXh0Cit7CisgICAgTlNBcnJheSAqdHlwZXMgPSBbcGFzdGVib2Fy
ZCB0eXBlc107CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBuaWw7CisKKyAg
ICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hpdmVQYm9hcmRUeXBlXSAmJgorICAg
ICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBh
c3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAg
ICByZXR1cm4gZnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5
cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBh
c3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6
MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgCisgICAgaWYgKFt0eXBlcyBjb250
YWluc09iamVjdDpOU0hUTUxQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNIVE1MUGJv
YXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAK
KyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0gJiYKKyAgICAg
ICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0
ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVy
biBmcmFnbWVudDsKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJk
VHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9t
UGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUlRGRFBib2FyZFR5cGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0p
KQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TVElGRlBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1
bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRl
eHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworCisgICAgaWYgKFt0
eXBlcyBjb250YWluc09iamVjdDpOU1BERlBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVu
dCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpO
U1BERlBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
CisKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1BJQ1RQYm9hcmRUeXBl
XSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0
ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvclR5cGU6TlNQSUNUUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisg
ICAgICAgIHJldHVybiBmcmFnbWVudDsKKyNlbmRpZgorCisgICAgLy8gT25seSAxMC41IGFuZCBo
aWdoZXIgc3VwcG9ydCBzZXR0aW5nIGFuZCByZXRyaWV2aW5nIHBhc3RlYm9hcmQgdHlwZXMgd2l0
aCBVVElzLCBidXQgd2UgZG9uJ3QgYmVsaWV2ZQorICAgIC8vIHRoYXQgYW55IGFwcGxpY2F0aW9u
cyBvbiBUaWdlciBwdXQgdHlwZXMgZm9yIHdoaWNoIHdlIG9ubHkgaGF2ZSBhIFVUSSwgbGlrZSBQ
TkcsIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6KE5T
U3RyaW5nKilrVVRUeXBlUE5HXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1l
bnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6KE5TU3RyaW5nKilrVVRUeXBl
UE5HCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNv
bnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgICAgICAK
KyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVVJMUGJvYXJkVHlwZV0gJiYKKyAgICAg
ICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0
ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVy
biBmcmFnbWVudDsKKyAgICAgICAgCisgICAgaWYgKGFsbG93UGxhaW5UZXh0ICYmIFt0eXBlcyBj
b250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9
IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TU3Ry
aW5nUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpIHsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCistIChOU1N0cmluZyAqKV9wbGFp
blRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAoreworICAgIE5T
QXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9hcmQgdHlwZXNdOworICAgIAorICAgIGlmIChbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkKKyAgICAgICAgcmV0dXJuIFtbcGFz
dGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJp
bmdXaXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICph
dHRyaWJ1dGVkU3RyaW5nID0gbmlsOworICAgIE5TU3RyaW5nICpzdHJpbmc7CisKKyAgICBpZiAo
W3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKQorICAgICAgICBhdHRyaWJ1
dGVkU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFz
dGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6
TlVMTF07CisgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmlsICYmIFt0eXBlcyBjb250YWlu
c09iamVjdDpOU1JURlBib2FyZFR5cGVdKQorICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JU
eXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIGlmIChh
dHRyaWJ1dGVkU3RyaW5nICE9IG5pbCkgeworICAgICAgICBzdHJpbmcgPSBbW2F0dHJpYnV0ZWRT
dHJpbmcgc3RyaW5nXSBjb3B5XTsKKyAgICAgICAgW2F0dHJpYnV0ZWRTdHJpbmcgcmVsZWFzZV07
CisgICAgICAgIHJldHVybiBbc3RyaW5nIGF1dG9yZWxlYXNlXTsKKyAgICB9CisgICAgCisgICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7CisgICAg
ICAgIHN0cmluZyA9IFtbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZW5hbWVz
UGJvYXJkVHlwZV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4iXTsKKyAgICAgICAgaWYg
KHN0cmluZyAhPSBuaWwpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIH0KKyAgICAK
KyAgICBOU1VSTCAqVVJMOworICAgIAorICAgIGlmICgoVVJMID0gW05TVVJMIFVSTEZyb21QYXN0
ZWJvYXJkOnBhc3RlYm9hcmRdKSkgeworICAgICAgICBzdHJpbmcgPSBbVVJMIF93ZWJfdXNlclZp
c2libGVTdHJpbmddOworICAgICAgICBpZiAoW3N0cmluZyBsZW5ndGhdID4gMCkKKyAgICAgICAg
ICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorICAgIAorICAgIHJldHVybiBuaWw7Cit9CisKKy0g
KHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxs
b3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQKK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3
ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5dOworICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25Q
YXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworCisgICAgRE9NUmFuZ2UgKnJhbmdlID0gW3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdOworICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYg
X2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpyYW5n
ZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWluVGV4dF07CisgICAgaWYgKGZyYWdtZW50ICYmIFtz
ZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5n
ZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKKyAgICAgICAgW1tzZWxm
IF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVw
bGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVi
b2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5PXTsKKworICAgIFt3ZWJWaWV3IF9zZXRJbnNl
cnRpb25QYXN0ZWJvYXJkOm5pbF07CisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKKy0gKHZv
aWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZAoreworICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW3NlbGYgX3dlYlZpZXddIHJldGFpbl07
CisgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisKKyAg
ICBOU1N0cmluZyAqdGV4dCA9IFtzZWxmIF9wbGFpblRleHRGcm9tUGFzdGVib2FyZDpwYXN0ZWJv
YXJkXTsKKyAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0ZXh0
IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQorICAgICAgICBbW3NlbGYg
X2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6
Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0
ZWJvYXJkXV07CisKKyAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpuaWxdOwor
ICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworfQorCistICh2b2lkKV9yZW1vdmVNb3VzZU1vdmVkT2Jz
ZXJ2ZXJVbmNvbmRpdGlvbmFsbHkKK3sKKyAgICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+
b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpXS01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6bmlsXTsKKyAgICBf
cHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMgPSBmYWxzZTsKK30KKwor
LSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzCit7CisgICAgaWYgKCFfcHJpdmF0ZSB8
fCAhX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBOU1ZpZXcgKnN1cGVydmlldyA9IFtzZWxmIHN1cGVydmlld107Cisg
ICAgaWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdpbmRvd10pCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIg
cmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IG9iamVjdDpzdXBlcnZpZXddOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2
ZXI6c2VsZiBuYW1lOk5TVmlld0JvdW5kc0RpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3Vw
ZXJ2aWV3XTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0
aW9ucyA9IGZhbHNlOworfQorCistICh2b2lkKV9yZW1vdmVXaW5kb3dPYnNlcnZlcnMKK3sKKyAg
ICBpZiAoIV9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAg
aWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU05vdGlmaWNhdGlvbkNl
bnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1l
Ok5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtub3Rp
ZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkUmVzaWdu
S2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVt
b3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVj
dDp3aW5kb3ddOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBu
YW1lOldLV2luZG93V2lsbE9yZGVyT25TY3JlZW5Ob3RpZmljYXRpb24oKSBvYmplY3Q6d2luZG93
XTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucyA9IGZh
bHNlOworfQorCistIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFn
bWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVu
QWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgRE9NTm9kZSAqY2hpbGQgPSBbZnJhZ21lbnQgZmly
c3RDaGlsZF07CisgICAgaWYgKFtmcmFnbWVudCBsYXN0Q2hpbGRdID09IGNoaWxkICYmIFtjaGls
ZCBpc0tpbmRPZkNsYXNzOltET01DaGFyYWN0ZXJEYXRhIGNsYXNzXV0pCisgICAgICAgIHJldHVy
biBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNo
b3VsZEluc2VydFRleHQ6WyhET01DaGFyYWN0ZXJEYXRhICopY2hpbGQgZGF0YV0gcmVwbGFjaW5n
RE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKKyAgICByZXR1cm4gW1t3ZWJWaWV3
IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnRO
b2RlOmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07
Cit9CisKKy0gKEJPT0wpX3Nob3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNp
bmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFj
dGlvbilhY3Rpb24KK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwor
ICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3
ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6dGV4dCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZl
bkFjdGlvbjphY3Rpb25dOworfQorCistIChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilh
Y3Rpb24KK3sKKyAgICByZXR1cm4gW3NlbGYgX3Nob3VsZEluc2VydFRleHQ6dGV4dCByZXBsYWNp
bmdET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gZ2l2ZW5BY3Rpb246YWN0aW9uXTsKK30K
KworLy8gQ2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSB2aWV3IHRoYXQgZml0cyBv
biBhIHNpbmdsZSBwYWdlCistIChmbG9hdClfY2FsY3VsYXRlUHJpbnRIZWlnaHQKK3sKKyAgICAv
LyBPYnRhaW4gdGhlIHByaW50IGluZm8gb2JqZWN0IGZvciB0aGUgY3VycmVudCBvcGVyYXRpb24K
KyAgICBOU1ByaW50SW5mbyAqcGkgPSBbW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlv
bl0gcHJpbnRJbmZvXTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHBhZ2UgaGVpZ2h0IGlu
IHBvaW50cworICAgIE5TU2l6ZSBwYXBlclNpemUgPSBbcGkgcGFwZXJTaXplXTsKKyAgICByZXR1
cm4gcGFwZXJTaXplLmhlaWdodCAtIFtwaSB0b3BNYXJnaW5dIC0gW3BpIGJvdHRvbU1hcmdpbl07
Cit9CisKKy0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2UKK3sKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpIDogbmlsOwor
fQorCistIChCT09MKV9zaG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQoreworICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY29yZShyYW5n
ZSkpOworfQorCistIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICAvLyBVc3VhbGx5LCB3ZSBoYWNrIEFLJ3MgaGl0VGVzdCBtZXRob2QgdG8gY2F0Y2gg
YWxsIGV2ZW50cyBhdCB0aGUgdG9wbW9zdCBXZWJIVE1MVmlldy4gIAorICAgIC8vIENhbGxlcnMg
b2YgdGhpcyBtZXRob2QsIGhvd2V2ZXIsIHdhbnQgdG8gcXVlcnkgdGhlIGRlZXBlc3QgdmlldyBp
bnN0ZWFkLgorICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IFlFUzsKKyAgICBOU1ZpZXcgKmhpdFZp
ZXcgPSBbW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGhpdFRlc3Q6W2V2ZW50IGxvY2F0aW9u
SW5XaW5kb3ddXTsKKyAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBOTzsgICAgCisgICAgcmV0dXJu
IGhpdFZpZXc7Cit9CisKKy0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBl
czooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2Fy
ZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVk
U3RyaW5nCit7CisgICAgLy8gUHV0IEhUTUwgb24gdGhlIHBhc3RlYm9hcmQuCisgICAgaWYgKFt0
eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgaWYg
KFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjb3JlQXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZUZyb21TZWxlY3Rpb24oY29yZShbc2VsZiBfZnJhbWVdKSkpIHsKKyAgICAgICAgICAg
IGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gY29yZUFyY2hpdmUgPyBjb3JlQXJjaGl2
ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkgOiAwKQorICAgICAgICAgICAgICAgIFtwYXN0ZWJv
YXJkIHNldERhdGE6KE5TRGF0YSAqKWRhdGEuZ2V0KCkgZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJk
VHlwZV07CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUHV0IHRoZSBhdHRyaWJ1dGVk
IHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZCAoUlRGL1JURkQgZm9ybWF0KS4KKyAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKSB7CisgICAgICAgIGlmIChhdHRy
aWJ1dGVkU3RyaW5nID09IG5pbCkgeworICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtz
ZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107CisgICAgICAgIH0gICAgICAgIAorICAgICAg
ICBOU0RhdGEgKlJURkREYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGREZyb21SYW5nZTpOU01h
a2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6
bmlsXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZERGF0YSBmb3JUeXBlOk5TUlRG
RFBib2FyZFR5cGVdOworICAgIH0gICAgICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNSVEZQYm9hcmRUeXBlXSkgeworICAgICAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBu
aWwpIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJp
YnV0ZWRTdHJpbmddOworICAgICAgICB9CisgICAgICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBj
b250YWluc0F0dGFjaG1lbnRzXSkgeworICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFth
dHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVu
dENoYXJhY3RlcnNdOworICAgICAgICB9CisgICAgICAgIE5TRGF0YSAqUlRGRGF0YSA9IFthdHRy
aWJ1dGVkU3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmlu
ZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQg
c2V0RGF0YTpSVEZEYXRhIGZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXTsKKyAgICB9CisgICAgCisg
ICAgLy8gUHV0IHBsYWluIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZC4KKyAgICBpZiAoW3R5cGVz
IGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgLy8gTWFwICZu
YnNwOyB0byBhIHBsYWluIG9sZCBzcGFjZSBiZWNhdXNlIHRoaXMgaXMgYmV0dGVyIGZvciBzb3Vy
Y2UgY29kZSwgb3RoZXIgYnJvd3NlcnMgZG8gaXQsCisgICAgICAgIC8vIGFuZCBiZWNhdXNlIEhU
TUwgZm9yY2VzIHlvdSB0byBkbyB0aGlzIGFueSB0aW1lIHlvdSB3YW50IHR3byBzcGFjZXMgaW4g
YSByb3cuCisgICAgICAgIE5TTXV0YWJsZVN0cmluZyAqcyA9IFtbc2VsZiBzZWxlY3RlZFN0cmlu
Z10gbXV0YWJsZUNvcHldOworICAgICAgICBjb25zdCB1bmljaGFyIE5vbkJyZWFraW5nU3BhY2VD
aGFyYWN0ZXIgPSAweEEwOworICAgICAgICBOU1N0cmluZyAqTm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczomTm9uQnJlYWtpbmdTcGFjZUNoYXJh
Y3RlciBsZW5ndGg6MV07CisgICAgICAgIFtzIHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOk5v
bkJyZWFraW5nU3BhY2VTdHJpbmcgd2l0aFN0cmluZzpAIiAiIG9wdGlvbnM6MCByYW5nZTpOU01h
a2VSYW5nZSgwLCBbcyBsZW5ndGhdKV07CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzpz
IGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXTsKKyAgICAgICAgW3MgcmVsZWFzZV07CisgICAg
fQorICAgIAorICAgIGlmIChbc2VsZiBfY2FuU21hcnRDb3B5T3JEZWxldGVdICYmIFt0eXBlcyBj
b250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgW3Bhc3Rl
Ym9hcmQgc2V0RGF0YTpuaWwgZm9yVHlwZTpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CisgICAg
fQorfQorCistICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgQVNTRVJUKCFldmVudCB8fCBbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91c2VEb3duIHx8IFtl
dmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VEb3duIHx8IFtldmVudCB0eXBlXSA9PSBOU090aGVy
TW91c2VEb3duKTsKKworICAgIGlmIChldmVudCA9PSBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIFtldmVudCByZXRhaW5dOworICAgIFtfcHJpdmF0ZS0+
bW91c2VEb3duRXZlbnQgcmVsZWFzZV07CisgICAgX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50ID0g
ZXZlbnQ7Cit9CisKKy0gKHZvaWQpX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRp
bWVyCit7CisgICAgaWYgKF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1l
cikgeworICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUoX3ByaXZhdGUtPnVwZGF0ZUZv
Y3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKKyAgICAgICAgQ0ZSZWxlYXNlKF9wcml2YXRlLT51
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcik7CisgICAgICAgIF9wcml2YXRlLT51cGRh
dGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lciA9IE5VTEw7CisgICAgfQorfQorCistICh2b2lk
KV9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcgoreworICAgIGlmIChfcHJpdmF0ZS0+dXBkYXRl
TW91c2VvdmVyVGltZXIpIHsKKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2
YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcik7CisgICAgICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+
dXBkYXRlTW91c2VvdmVyVGltZXIpOworICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVy
VGltZXIgPSBOVUxMOworICAgIH0KK30KKworLSAoV2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXcK
K3sKKyAgICAvLyBGSVhNRTogdGhpcyBjYW4gZmFpbCBpZiB0aGUgZGF0YVNvdXJjZSBpcyBuaWws
IHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUgV2ViVmlldyBpcyB0ZWFyaW5nIGRvd24gZnJvbSB0aGUg
d2luZG93IGNsb3NpbmcuCisgICAgV2ViSFRNTFZpZXcgKnZpZXcgPSAoV2ViSFRNTFZpZXcgKilb
W1tbX3ByaXZhdGUtPmRhdGFTb3VyY2UgX3dlYlZpZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBk
b2N1bWVudFZpZXddOworICAgIEFTU0VSVCh2aWV3KTsKKyAgICBBU1NFUlQoW3ZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7CisgICAgcmV0dXJuIHZpZXc7Cit9CisKKy0g
KEJPT0wpX2lzVG9wSFRNTFZpZXcKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBj
YWNoZWQgYm9vbGVhbiB0aGF0IGRvZXNuJ3QgcmVseSBvbiBfdG9wSFRNTFZpZXcgc2luY2UgdGhh
dCBjYW4gZmFpbCAoc2VlIF90b3BIVE1MVmlldykuCisgICAgcmV0dXJuIHNlbGYgPT0gW3NlbGYg
X3RvcEhUTUxWaWV3XTsKK30KKworLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2
ZQoreworICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1h
eGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyNpZm5kZWYgTkRFQlVH
CisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7CisjZW5kaWYKKworICAg
IE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF07CisKKyAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmll
d3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworCisgICAgdW5zaWduZWQgY291bnQg
PSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmpl
Y3RBdEluZGV4OmldIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGlt
dW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyAgICBbZGVzY2VuZGFudFdl
YkhUTUxWaWV3cyByZWxlYXNlXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51
bWVyYXRpbmdTdWJ2aWV3cyA9IE5POworI2VuZGlmCit9CisKKy0gKHZvaWQpX3dlYl9jbGVhclBy
aW50aW5nTW9kZVJlY3Vyc2l2ZQoreworICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVt
UGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlF
UzsKKyNlbmRpZgorCisgICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKworICAgIFtzZWxmIF93ZWJfYWRkRGVz
Y2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107CisKKyAg
ICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgW1tkZXNjZW5kYW50
V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdl
V2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworCisg
ICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgcmVsZWFzZV07CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsKKyNlbmRpZgorfQorCistICh2
b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemUKK3sKKyAg
ICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFn
ZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6WUVTXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBf
cHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKKyNlbmRpZgorCisgICAgTlNNdXRh
YmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKKworICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJy
YXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNj
ZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5k
ZXg6aV0gX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VX
aWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllFU107CisKKyAgICBbZGVzY2VuZGFudFdlYkhUTUxW
aWV3cyByZWxlYXNlXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRp
bmdTdWJ2aWV3cyA9IE5POworI2VuZGlmCit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YkhUTUxWaWV3IChXZWJQcml2YXRlKQorCisrIChOU0FycmF5ICopc3VwcG9ydGVkTUlNRVR5cGVz
Cit7CisgICAgcmV0dXJuIFtXZWJIVE1MUmVwcmVzZW50YXRpb24gc3VwcG9ydGVkTUlNRVR5cGVz
XTsKK30KKworKyAoTlNBcnJheSAqKXN1cHBvcnRlZEltYWdlTUlNRVR5cGVzCit7CisgICAgcmV0
dXJuIFtXZWJIVE1MUmVwcmVzZW50YXRpb24gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNdOworfQor
CisrIChOU0FycmF5ICopc3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZXMKK3sKKyAgICByZXR1cm4g
W1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlc107Cit9CisK
KysgKE5TQXJyYXkgKil1bnN1cHBvcnRlZFRleHRNSU1FVHlwZXMKK3sKKyAgICByZXR1cm4gW05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKKyAgICAgICAgQCJ0ZXh0L2NhbGVuZGFyIiwgICAgICAg
Ly8gaUNhbAorICAgICAgICBAInRleHQveC1jYWxlbmRhciIsCisgICAgICAgIEAidGV4dC94LXZj
YWxlbmRhciIsCisgICAgICAgIEAidGV4dC92Y2FsZW5kYXIiLAorICAgICAgICBAInRleHQvdmNh
cmQiLCAgICAgICAgICAvLyB2Q2FyZAorICAgICAgICBAInRleHQveC12Y2FyZCIsCisgICAgICAg
IEAidGV4dC9kaXJlY3RvcnkiLAorICAgICAgICBAInRleHQvbGRpZiIsICAgICAgICAgICAvLyBO
ZXRzY2FwZSBBZGRyZXNzIEJvb2sKKyAgICAgICAgQCJ0ZXh0L3FpZiIsICAgICAgICAgICAgLy8g
UXVpY2tlbgorICAgICAgICBAInRleHQveC1xaWYiLAorICAgICAgICBAInRleHQveC1jc3YiLCAg
ICAgICAgICAvLyBDU1YgKGZvciBBZGRyZXNzIEJvb2sgYW5kIE1pY3Jvc29mdCBPdXRsb29rKQor
ICAgICAgICBAInRleHQveC12Y2YiLCAgICAgICAgICAvLyB2Q2FyZCB0eXBlIHVzZWQgaW4gU3Vu
IGFmZmluaXR5IGFwcAorICAgICAgICBAInRleHQvcnRmIiwgICAgICAgICAgICAvLyBSaWNoIFRl
eHQgRm9ybWF0CisgICAgICAgIG5pbF07Cit9CisKKysgKHZvaWQpX3Bvc3RGbGFnc0NoYW5nZWRF
dmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2ZW50Cit7CisgICAgLy8gVGhpcyBpcyBhIHdv
cmthcm91bmQgZm9yOiA8cmRhcjovL3Byb2JsZW0vMjk4MTYxOT4gTlNSZXNwb25kZXJfUHJpdmF0
ZSBzaG91bGQgaW5jbHVkZSBub3RpZmljYXRpb24gZm9yIEZsYWdzQ2hhbmdlZAorICAgIE5TRXZl
bnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQK
KyAgICAgICAgbG9jYXRpb246W1tmbGFnc0NoYW5nZWRFdmVudCB3aW5kb3ddIGNvbnZlcnRTY3Jl
ZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlvbl1dCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6
W2ZsYWdzQ2hhbmdlZEV2ZW50IG1vZGlmaWVyRmxhZ3NdCisgICAgICAgIHRpbWVzdGFtcDpbZmxh
Z3NDaGFuZ2VkRXZlbnQgdGltZXN0YW1wXQorICAgICAgICB3aW5kb3dOdW1iZXI6W2ZsYWdzQ2hh
bmdlZEV2ZW50IHdpbmRvd051bWJlcl0KKyAgICAgICAgY29udGV4dDpbZmxhZ3NDaGFuZ2VkRXZl
bnQgY29udGV4dF0KKyAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6
MF07CisKKyAgICAvLyBQcmV0ZW5kIGl0J3MgYSBtb3VzZSBtb3ZlLgorICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KKyAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6
V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0OnNlbGYKKyAgICAgICAgdXNlckluZm86
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpmYWtlRXZlbnQgZm9yS2V5OkAiTlNF
dmVudCJdXTsKK30KKworLSAoaWQpX2JyaWRnZQoreworICAgIC8vIFRoaXMgbWV0aG9kIGV4aXN0
cyB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggTGVvcGFyZCdzIERpY3Rpb25hcnkuYXBw
LCBzaW5jZSBpdAorICAgIC8vIGNhbGxzIF9icmlkZ2UgdG8gZ2V0IGFjY2VzcyB0byBjb252ZXJ0
TlNSYW5nZVRvRE9NUmFuZ2U6IGFuZCBjb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6LgorICAgIC8v
IFJldHVybiB0aGUgV2ViRnJhbWUsIHdoaWNoIGltcGxlbWVudHMgdGhlIGNvbXBhdGliaWxpdHkg
bWV0aG9kcy4gPHJkYXI6Ly9wcm9ibGVtLzYwMDIxNjA+CisgICAgcmV0dXJuIFtzZWxmIF9mcmFt
ZV07Cit9CisKKy0gKHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnQKK3sKKyAgICBb
c2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOworICAgIAorICAgIE5TRXZlbnQgKmZh
a2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKKyAgICAg
ICAgbG9jYXRpb246W1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBt
b3VzZUxvY2F0aW9uXV0KKyAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVu
dF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFs
U2luY2VSZWZlcmVuY2VEYXRlXQorICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10g
d2luZG93TnVtYmVyXQorICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250
ZXh0XQorICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKKyAg
ICAKKyAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OmZha2VFdmVudF07Cit9CisK
K3N0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWNrKENGUnVuTG9vcFRpbWVy
UmVmIHRpbWVyLCB2b2lkICppbmZvKQoreworICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhU
TUxWaWV3ICopaW5mbzsKKyAgICAKKyAgICBbdmlldyBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VF
dmVudF07Cit9CisKKy0gKHZvaWQpX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkCit7CisgICAgTlNQb2lu
dCBvcmlnaW4gPSBbW3NlbGYgc3VwZXJ2aWV3XSBib3VuZHNdLm9yaWdpbjsKKyAgICBpZiAoIU5T
RXF1YWxQb2ludHMoX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiwgb3JpZ2luKSkgeworICAg
ICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAg
ICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKKyAgICAg
ICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxl
ZnQ6Tk9dOworICAgICAgICAKKyAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJW
aWV3XTsKKyAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ondl
YlZpZXcgZGlkU2Nyb2xsRG9jdW1lbnRJbkZyYW1lVmlldzpbc2VsZiBfZnJhbWVWaWV3XV07Cisg
ICAgfQorICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBvcmlnaW47CisKKyAgICBp
ZiAoW3NlbGYgd2luZG93XSAmJiAhX3ByaXZhdGUtPmNsb3NlZCAmJiAhX3ByaXZhdGUtPnVwZGF0
ZU1vdXNlb3ZlclRpbWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBjb250ZXh0
ID0geyAwLCBzZWxmLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgICAgICAgIAorICAgICAgICAvLyBV
c2UgYSAxMDBtcyBkZWxheSBzbyB0aGF0IHRoZSBzeW50aGV0aWMgbW91c2Ugb3ZlciB1cGRhdGUg
ZG9lc24ndCBjYXVzZSBjdXJzb3IgdGhyYXNoaW5nIHdoZW4gcGFnZXMgYXJlIGxvYWRpbmcKKyAg
ICAgICAgLy8gYW5kIHNjcm9sbGluZyByYXBpZGx5IGJhY2sgdG8gYmFjay4KKyAgICAgICAgX3By
aXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUoTlVMTCwg
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyAwLjEsIDAsIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVN
b3VzZW92ZXJUaW1lckNhbGxiYWNrLCAmY29udGV4dCk7CisgICAgICAgIENGUnVuTG9vcEFkZFRp
bWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVy
LCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAgIH0KK30KKworLSAodm9pZClfc2V0QXNpZGVT
dWJ2aWV3cworeworICAgIEFTU0VSVCghX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOworICAg
IEFTU0VSVChfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3cyA9PSBuaWwpOworICAgIF9wcml2YXRlLT5z
YXZlZFN1YnZpZXdzID0gX3N1YnZpZXdzOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdGhlIGxheWVyLWhvc3RpbmcgdmlldyBpbiB0aGUg
c3Vidmlld3MsIG90aGVyd2lzZSB0aGUgbGF5ZXJzIGZsYXNoLgorICAgIGlmIChfcHJpdmF0ZS0+
bGF5ZXJIb3N0aW5nVmlldykgeworICAgICAgICBOU0FycmF5KiBuZXdTdWJ2aWV3cyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOl9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3LCBu
aWxdOworICAgICAgICBfc3Vidmlld3MgPSBuZXdTdWJ2aWV3czsKKyAgICB9IGVsc2UKKyAgICAg
ICAgX3N1YnZpZXdzID0gbmlsOworI2Vsc2UKKyAgICBfc3Vidmlld3MgPSBuaWw7CisjZW5kaWYg
ICAgCisgICAgX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUgPSBZRVM7CisgfQorIAorIC0gKHZv
aWQpX3Jlc3RvcmVTdWJ2aWV3cworIHsKKyAgICBBU1NFUlQoX3ByaXZhdGUtPnN1YnZpZXdzU2V0
QXNpZGUpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoX3ByaXZh
dGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKKyAgICAgICAgW19zdWJ2aWV3cyByZWxlYXNlXTsKKyAg
ICAgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNhdmVkU3Vidmlld3M7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKF9zdWJ2aWV3cyA9PSBuaWwpOworICAgICAgICBfc3Vidmlld3MgPSBf
cHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKKyAgICB9CisjZWxzZQorICAgIEFTU0VSVChfc3Vidmll
d3MgPT0gbmlsKTsKKyAgICBfc3Vidmlld3MgPSBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKKyNl
bmRpZiAgICAKKyAgICBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3cyA9IG5pbDsKKyAgICBfcHJpdmF0
ZS0+c3Vidmlld3NTZXRBc2lkZSA9IE5POworfQorCisjaWZuZGVmIE5ERUJVRworCistICh2b2lk
KWRpZEFkZFN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKK3sKKyAgICBpZiAoX3ByaXZhdGUtPmVu
dW1lcmF0aW5nU3Vidmlld3MpCisgICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVz
IHdhcyBhZGRlZCBkdXJpbmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50
aW5nIG1vZGUgY2hhbmdlLiBUaGlzIHZpZXcgbWlnaHQgcGFpbnQgd2l0aG91dCBmaXJzdCByZWNl
aXZpbmcgbGF5b3V0LiIsIG9iamVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Cit9
CisKKy0gKHZvaWQpd2lsbFJlbW92ZVN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKK3sKKyAgICAv
LyBIYXZlIHRvIG51bGwtY2hlY2sgX3ByaXZhdGUsIHNpbmNlIHRoaXMgY2FuIGJlIGNhbGxlZCB2
aWEgLWRlYWxsb2Mgd2hlbgorICAgIC8vIGNsZWFuaW5nIHVwIHRoZSB0aGUgbGF5ZXJIb3N0aW5n
Vmlldy4KKyAgICBpZiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3Mp
CisgICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVzIHdhcyByZW1vdmVkIGR1cmlu
ZyBzdWJ2aWV3IGVudW1lcmF0aW9uIGZvciBsYXlvdXQgb3IgcHJpbnRpbmcgbW9kZSBjaGFuZ2Uu
IFdlIHdpbGwgc3RpbGwgZG8gbGF5b3V0IG9yIHRoZSBwcmludGluZyBtb2RlIGNoYW5nZSBldmVu
IHRob3VnaCB0aGlzIHZpZXcgaXMgbm8gbG9uZ2VyIGluIHRoZSB2aWV3IGhpZXJhcmNoeS4iLCBv
YmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNsYXNzXSkpOworfQorCisjZW5kaWYKKworI2lm
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKy8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgYXJlIGFi
b3V0IHRvIGRyYXcsIGJ1dCBiZWZvcmUgb3VyIGRpcnR5IHJlY3QgaXMgcHJvcGFnYXRlZCB0byBv
dXIgYW5jZXN0b3JzLgorLy8gVGhhdCdzIHRoZSBwZXJmZWN0IHRpbWUgdG8gZG8gYSBsYXlvdXQs
IGV4Y2VwdCB0aGF0IGlkZWFsbHkgd2UnZCB3YW50IHRvIGJlIHN1cmUgdGhhdCB3ZSdyZSBkaXJ0
eQorLy8gYmVmb3JlIGRvaW5nIGl0LiBBcyBhIGNvbXByb21pc2UsIHdoZW4gd2UncmUgb3BhcXVl
IHdlIGRvIHRoZSBsYXlvdXQgb25seSB3aGVuIGFjdHVhbGx5IGFza2VkIHRvCisvLyBkcmF3LCBi
dXQgd2hlbiB3ZSdyZSB0cmFuc3BhcmVudCB3ZSBkbyB0aGUgbGF5b3V0IGF0IHRoaXMgc3RhZ2Ug
c28gdmlld3MgYmVoaW5kIHVzIGtub3cgdGhhdCB0aGV5CisvLyBuZWVkIHRvIGJlIHJlZHJhd24g
KGluIGNhc2UgdGhlIGxheW91dCBjYXVzZXMgc29tZSB0aGluZ3MgdG8gZ2V0IGRpcnRpZWQpLgor
LSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3JzCit7CisgICAgaWYg
KCFbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFja2dyb3VuZF0pCisgICAgICAgIFtzZWxmIF93ZWJf
bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworICAgIFtzdXBlciBfcHJvcGFnYXRlRGlydHlSZWN0
c1RvT3BhcXVlQW5jZXN0b3JzXTsKK30KKworI2Vsc2UKKworLSAodm9pZCl2aWV3V2lsbERyYXcK
K3sKKyAgICAvLyBPbiB3aW5kb3cgY2xvc2Ugd2Ugd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZGF0
YXNvdXJjZSBpcyBuaWwsIHRoZW4gaGl0IGFuIGFzc2VydCBpbiBfdG9wSFRNTFZpZXcKKyAgICAv
LyBTbyBjaGVjayBpZiB0aGUgZGF0YVNvdXJjZSBpcyBuaWwgYmVmb3JlIGNhbGxpbmcgW3NlbGYg
X2lzVG9wSFRNTFZpZXddLCB0aGlzIGNhbiBiZSByZW1vdmVkCisgICAgLy8gb25jZSB0aGUgRklY
TUUgaW4gX2lzVG9wSFRNTFZpZXcgaXMgZml4ZWQuCisgICAgaWYgKF9wcml2YXRlLT5kYXRhU291
cmNlICYmIFtzZWxmIF9pc1RvcEhUTUxWaWV3XSkKKyAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJ
Zk5lZWRlZFJlY3Vyc2l2ZV07CisgICAgW3N1cGVyIHZpZXdXaWxsRHJhd107Cit9CisKKyNlbmRp
ZgorCisvLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJl
IG9mIHRoYXQuCistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdP
cGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0OihCT09MKWlzVmlzaWJsZVJlY3QgcmVj
dElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2aXNpYmxlVmlldyB0b3BWaWV3OihCT09M
KXRvcFZpZXcKK3sKKyAgICAvLyBUaGlzIGhlbHBzIHdoZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBh
IGxhcmdlciBwcmludCBwcm9jZXNzLgorICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYg
aXMgd2hhdCB3ZSdyZSBwcmludGluZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhp
cy4KKyAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0gX3ByaXZhdGUtPnByaW50aW5nOworICAg
IEJPT0wgaXNQcmludGluZyA9ICFbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3
aW5nVG9TY3JlZW5dOworICAgIGlmIChpc1ByaW50aW5nKSB7CisgICAgICAgIGlmICghd2FzSW5Q
cmludGluZ01vZGUpCisgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vy
c2l2ZV07CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworI2VuZGlmCisgICAgfSBl
bHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50
aW5nTW9kZVJlY3Vyc2l2ZV07CisKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorCisgICAgLy8g
QmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZpZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxh
eW91dCBoZXJlLgorICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworICAg
IFtfc3Vidmlld3MgbWFrZU9iamVjdHNQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9wcm9wYWdh
dGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnMpXTsKKworI2VuZGlmCisKKyAgICBbc2VsZiBf
c2V0QXNpZGVTdWJ2aWV3c107CisgICAgW3N1cGVyIF9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVl
ZGVkSWdub3JpbmdPcGFjaXR5OnJlY3QgaXNWaXNpYmxlUmVjdDppc1Zpc2libGVSZWN0IHJlY3RJ
c1Zpc2libGVSZWN0Rm9yVmlldzp2aXNpYmxlVmlldyB0b3BWaWV3OnRvcFZpZXddOworICAgIFtz
ZWxmIF9yZXN0b3JlU3Vidmlld3NdOworCisgICAgaWYgKHdhc0luUHJpbnRpbmdNb2RlICE9IGlz
UHJpbnRpbmcpIHsKKyAgICAgICAgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQorICAgICAgICAgICAg
W3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKyAgICB9Cit9
CisKKy8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUg
b2YgdGhhdC4KKy0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6
KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDooTlNSZWN0KXZpc1JlY3QKK3sKKyAgICBCT09M
IG5lZWRUb1NldEFzaWRlU3Vidmlld3MgPSAhX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGU7CisK
KyAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0gX3ByaXZhdGUtPnByaW50aW5nOworICAgIEJP
T0wgaXNQcmludGluZyA9ICFbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5n
VG9TY3JlZW5dOworCisgICAgaWYgKG5lZWRUb1NldEFzaWRlU3Vidmlld3MpIHsKKyAgICAgICAg
Ly8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJv
Y2Vzcy4KKyAgICAgICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3Jl
IHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLgorICAgICAgICBp
ZiAoaXNQcmludGluZykgeworICAgICAgICAgICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKKyAg
ICAgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07CisjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
W3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisjZW5kaWYKKyAgICAgICAgfSBl
bHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQ
cmludGluZ01vZGVSZWN1cnNpdmVdOworCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKworICAg
ICAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMgbm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQg
dG8gZG8gbGF5b3V0IGhlcmUuCisgICAgICAgIE5TUmVjdCBib3VuZHNCZWZvcmVMYXlvdXQgPSBb
c2VsZiBib3VuZHNdOworICAgICAgICBpZiAoIU5TSXNFbXB0eVJlY3QodmlzUmVjdCkpCisgICAg
ICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKKworICAgICAgICAv
LyBJZiBsYXlvdXQgY2hhbmdlcyB0aGUgdmlldydzIGJvdW5kcywgdGhlbiB3ZSBuZWVkIHRvIHJl
Y29tcHV0ZSB0aGUgdmlzUmVjdC4KKyAgICAgICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIHZpc1Jl
Y3QgcGFzc2VkIHRvIHVzIHdhcyBiYXNlZCBvbiB0aGUgYm91bmRzIGF0IHRoZSB0aW1lCisgICAg
ICAgIC8vIHdlIHdlcmUgY2FsbGVkLiBUaGlzIG1ldGhvZCBpcyBvbmx5IGRpc3BsYXllZCB0byBk
cmF3ICJhbGwiLCBzbyBpdCdzIHNhZmUKKyAgICAgICAgLy8gdG8ganVzdCBjYWxsIHZpc2libGVS
ZWN0IHRvIGNvbXB1dGUgdGhlIGVudGlyZSByZWN0YW5nbGUuCisgICAgICAgIGlmICghTlNFcXVh
bFJlY3RzKGJvdW5kc0JlZm9yZUxheW91dCwgW3NlbGYgYm91bmRzXSkpCisgICAgICAgICAgICB2
aXNSZWN0ID0gW3NlbGYgdmlzaWJsZVJlY3RdOworCisjZW5kaWYKKworICAgICAgICBbc2VsZiBf
c2V0QXNpZGVTdWJ2aWV3c107CisgICAgfQorCisgICAgW3N1cGVyIF9yZWN1cnNpdmVEaXNwbGF5
QWxsRGlydHlXaXRoTG9ja0ZvY3VzOm5lZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6dmlzUmVjdF07CisK
KyAgICBpZiAobmVlZFRvU2V0QXNpZGVTdWJ2aWV3cykgeworICAgICAgICBpZiAod2FzSW5Qcmlu
dGluZ01vZGUgIT0gaXNQcmludGluZykgeworICAgICAgICAgICAgaWYgKHdhc0luUHJpbnRpbmdN
b2RlKQorICAgICAgICAgICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZl
XTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJp
bnRpbmdNb2RlUmVjdXJzaXZlXTsKKyAgICAgICAgfQorCisgICAgICAgIFtzZWxmIF9yZXN0b3Jl
U3Vidmlld3NdOworICAgIH0KK30KKworLy8gRG9uJ3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vi
dmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0LgorLSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJl
Y3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdCBpbkNv
bnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0ICopY29udGV4dCB0b3BWaWV3OihCT09MKXRvcFZpZXcK
K3sKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUiAKKyAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMg
bm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhlcmUuCisgICAgW3Nl
bGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisjZW5kaWYKKworICAgIFtzZWxmIF9z
ZXRBc2lkZVN1YnZpZXdzXTsKKyAgICBbc3VwZXIgX3JlY3Vyc2l2ZTpyZWN1cnNlIGRpc3BsYXlS
ZWN0SWdub3JpbmdPcGFjaXR5OmRpc3BsYXlSZWN0IGluQ29udGV4dDpjb250ZXh0IHRvcFZpZXc6
dG9wVmlld107CisgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107Cit9CisKKy0gKEJPT0wpX2lu
c2lkZUFub3RoZXJIVE1MVmlldworeworICAgIHJldHVybiBzZWxmICE9IFtzZWxmIF90b3BIVE1M
Vmlld107Cit9CisKKy0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICAv
LyBXZWJIVE1MVmlldyBvYmplY3RzIGhhbmRsZSBhbGwgZXZlbnRzIGZvciBvYmplY3RzIGluc2lk
ZSB0aGVtLgorICAgIC8vIFRvIGdldCB0aG9zZSBldmVudHMsIHdlIHByZXZlbnQgaGl0IHRlc3Rp
bmcgZnJvbSBBcHBLaXQuCisKKyAgICAvLyBCdXQgdGhlcmUgYXJlIHRocmVlIGV4Y2VwdGlvbnMg
dG8gdGhpczoKKyAgICAvLyAgIDEpIEZvciByaWdodCBtb3VzZSBjbGlja3MgYW5kIGNvbnRyb2wg
Y2xpY2tzIHdlIGRvbid0IHlldCBoYXZlIGFuIGltcGxlbWVudGF0aW9uCisgICAgLy8gICAgICB0
aGF0IHdvcmtzIGZvciBuZXN0ZWQgdmlld3MsIHNvIHdlIGxldCB0aGUgaGl0IHRlc3RpbmcgZ28g
dGhyb3VnaCB0aGUKKyAgICAvLyAgICAgIHN0YW5kYXJkIE5TVmlldyBjb2RlIHBhdGggKG5lZWRz
IHRvIGJlIGZpeGVkLCBzZWUgYnVnIDQzNjE2MTgpLgorICAgIC8vICAgMikgSmF2YSBkZXBlbmRz
IG9uIGRvaW5nIGEgaGl0IHRlc3QgaW5zaWRlIGl0J3MgbW91c2UgbW92ZWQgaGFuZGxpbmcsCisg
ICAgLy8gICAgICBzbyB3ZSBsZXQgdGhlIGhpdCB0ZXN0aW5nIGdvIHRocm91Z2ggdGhlIHN0YW5k
YXJkIE5TVmlldyBjb2RlIHBhdGgKKyAgICAvLyAgICAgIHdoZW4gdGhlIGN1cnJlbnQgZXZlbnQg
aXMgYSBtb3VzZSBtb3ZlIChleGNlcHQgd2hlbiB3ZSBhcmUgY2FsbGluZworICAgIC8vICAgICAg
ZnJvbSBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50LCBzbyB3ZSBoYXZlIHRvIHVzZSBhIGdsb2Jh
bCwKKyAgICAvLyAgICAgIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0LCBmb3IgdGhhdCkKKyAgICAv
LyAgIDMpIFRoZSBhY2NlcHRzRmlyc3RNb3VzZTogYW5kIHNob3VsZERlbGF5V2luZG93T3JkZXJp
bmdGb3JFdmVudDogbWV0aG9kcworICAgIC8vICAgICAgYm90aCBuZWVkIHRvIGZpZ3VyZSBvdXQg
d2hpY2ggdmlldyB0byBjaGVjayB3aXRoIGluc2lkZSB0aGUgV2ViSFRNTFZpZXcuCisgICAgLy8g
ICAgICBUaGV5IHVzZSBhIGdsb2JhbCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGhpdFRlc3Q6
IHNvIHRoZXkgY2FuIGdldCB0aGUKKyAgICAvLyAgICAgIHJpZ2h0IHZpZXcuIFRoZSBnbG9iYWwg
aXMgZm9yY2VOU1ZpZXdIaXRUZXN0IGFuZCB0aGUgbWV0aG9kIHRoZXkgdXNlIHRvCisgICAgLy8g
ICAgICBkbyB0aGUgaGl0IHRlc3RpbmcgaXMgX2hpdFZpZXdGb3JFdmVudDouIChCdXQgdGhpcyBk
b2VzIG5vdCB3b3JrIGNvcnJlY3RseQorICAgIC8vICAgICAgd2hlbiB0aGVyZSBpcyBIVE1MIG92
ZXJsYXBwaW5nIHRoZSB2aWV3LCBzZWUgYnVnIDQzNjE2MjYpCisgICAgLy8gICA0KSBOU0FjY2Vz
c2liaWxpdHlIaXRUZXN0IHJlbGllcyBvbiB0aGlzIGZvciBjaGVja2luZyB0aGUgY3Vyc29yIHBv
c2l0aW9uLgorICAgIC8vICAgICAgT3VyIGNoZWNrIGZvciB0aGF0IGlzIHdoZXRoZXIgdGhlIGV2
ZW50IGlzIE5TRmxhZ3NDaGFuZ2VkLiAgVGhpcyB3b3JrcworICAgIC8vICAgICAgZm9yIFZvaWNl
T3ZlcidzIGNudGwtb3B0LWY1IGNvbW1hbmQgKG1vdmUgZm9jdXMgdG8gaXRlbSB1bmRlciBjdXJz
b3IpCisgICAgLy8gICAgICBhbmQgRGljdGlvbmFyeSdzIGNtZC1jbnRsLUQgKG9wZW4gZGljdGlv
bmFyeSBwb3B1cCBmb3IgaXRlbSB1bmRlciBjdXJzb3IpLgorICAgIC8vICAgICAgVGhpcyBpcyBv
ZiBjb3Vyc2UgYSBoYWNrLgorCisgICAgQk9PTCBjYXB0dXJlSGl0c09uU3Vidmlld3M7CisgICAg
aWYgKGZvcmNlTlNWaWV3SGl0VGVzdCkKKyAgICAgICAgY2FwdHVyZUhpdHNPblN1YnZpZXdzID0g
Tk87CisgICAgZWxzZSBpZiAoZm9yY2VXZWJIVE1MVmlld0hpdFRlc3QpCisgICAgICAgIGNhcHR1
cmVIaXRzT25TdWJ2aWV3cyA9IFlFUzsKKyAgICBlbHNlIHsKKyAgICAgICAgTlNFdmVudCAqZXZl
bnQgPSBbW3NlbGYgd2luZG93XSBjdXJyZW50RXZlbnRdOworICAgICAgICBjYXB0dXJlSGl0c09u
U3Vidmlld3MgPSAhKFtldmVudCB0eXBlXSA9PSBOU01vdXNlTW92ZWQKKyAgICAgICAgICAgIHx8
IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VEb3duCisgICAgICAgICAgICB8fCAoW2V2ZW50
IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biAmJiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlND
b250cm9sS2V5TWFzaykgIT0gMCkKKyAgICAgICAgICAgIHx8IFtldmVudCB0eXBlXSA9PSBOU0Zs
YWdzQ2hhbmdlZCk7CisgICAgfQorCisgICAgaWYgKCFjYXB0dXJlSGl0c09uU3Vidmlld3MpCisg
ICAgICAgIHJldHVybiBbc3VwZXIgaGl0VGVzdDpwb2ludF07CisgICAgaWYgKFtbc2VsZiBzdXBl
cnZpZXddIG1vdXNlOnBvaW50IGluUmVjdDpbc2VsZiBmcmFtZV1dKQorICAgICAgICByZXR1cm4g
c2VsZjsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9jbGVhckxhc3RIaXRWaWV3SWZT
ZWxmCit7CisgICAgaWYgKGxhc3RIaXRWaWV3ID09IHNlbGYpCisgICAgICAgIGxhc3RIaXRWaWV3
ID0gbmlsOworfQorCistIChOU1RyYWNraW5nUmVjdFRhZylhZGRUcmFja2luZ1JlY3Q6KE5TUmVj
dClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRl
OihCT09MKWFzc3VtZUluc2lkZQoreworICAgIEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0
T3duZXIgPT0gbmlsKTsKKyAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsK
KyAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGEgPSBkYXRhOworICAgIHJldHVybiBU
UkFDS0lOR19SRUNUX1RBRzsKK30KKworLSAoTlNUcmFja2luZ1JlY3RUYWcpX2FkZFRyYWNraW5n
UmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBh
c3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlIHVzZVRyYWNraW5nTnVtOihpbnQpdGFnCit7
CisgICAgQVNTRVJUKHRhZyA9PSAwIHx8IHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRyk7CisgICAg
QVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOworICAgIF9wcml2YXRl
LT50cmFja2luZ1JlY3RPd25lciA9IG93bmVyOworICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RV
c2VyRGF0YSA9IGRhdGE7CisgICAgcmV0dXJuIFRSQUNLSU5HX1JFQ1RfVEFHOworfQorCistICh2
b2lkKV9hZGRUcmFja2luZ1JlY3RzOihOU1JlY3QgKilyZWN0cyBvd25lcjooaWQpb3duZXIgdXNl
ckRhdGFMaXN0Oih2b2lkICoqKXVzZXJEYXRhTGlzdCBhc3N1bWVJbnNpZGVMaXN0OihCT09MICop
YXNzdW1lSW5zaWRlTGlzdCB0cmFja2luZ051bXM6KE5TVHJhY2tpbmdSZWN0VGFnICopdHJhY2tp
bmdOdW1zIGNvdW50OihpbnQpY291bnQKK3sKKyAgICBBU1NFUlQoY291bnQgPT0gMSk7CisgICAg
QVNTRVJUKHRyYWNraW5nTnVtc1swXSA9PSAwIHx8IHRyYWNraW5nTnVtc1swXSA9PSBUUkFDS0lO
R19SRUNUX1RBRyk7CisgICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBu
aWwpOworICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVyOworICAgIF9wcml2
YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9IHVzZXJEYXRhTGlzdFswXTsKKyAgICB0cmFja2lu
Z051bXNbMF0gPSBUUkFDS0lOR19SRUNUX1RBRzsKK30KKworLSAodm9pZClyZW1vdmVUcmFja2lu
Z1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRhZworeworICAgIGlmICh0YWcgPT0gMCkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGlmIChfcHJpdmF0ZSAmJiAodGFnID09IFRSQUNLSU5HX1JF
Q1RfVEFHKSkgeworICAgICAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBuaWw7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKF9wcml2YXRlICYmICh0YWcgPT0g
X3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnKSkgeworICAgICAgICBbc3VwZXIgcmVtb3ZlVHJhY2tp
bmdSZWN0OnRhZ107CisgICAgICAgIF9wcml2YXRlLT5sYXN0VG9vbFRpcFRhZyA9IDA7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gSWYgYW55IG90aGVyIHRyYWNraW5nIHJl
Y3QgaXMgYmVpbmcgcmVtb3ZlZCwgd2UgZG9uJ3Qga25vdyBob3cgaXQgd2FzIGNyZWF0ZWQKKyAg
ICAvLyBhbmQgaXQncyBwb3NzaWJsZSB0aGVyZSdzIGEgbGVhayBpbnZvbHZlZCAoc2VlIDM1MDAy
MTcpCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKy0gKHZvaWQpX3JlbW92ZVRyYWNr
aW5nUmVjdHM6KE5TVHJhY2tpbmdSZWN0VGFnICopdGFncyBjb3VudDooaW50KWNvdW50Cit7Cisg
ICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaW50
IHRhZyA9IHRhZ3NbaV07CisgICAgICAgIGlmICh0YWcgPT0gMCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBBU1NFUlQodGFnID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKKyAgICAgICAg
aWYgKF9wcml2YXRlICE9IG5pbCkgeworICAgICAgICAgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVj
dE93bmVyID0gbmlsOworICAgICAgICB9CisgICAgfQorfQorCistICh2b2lkKV9zZW5kVG9vbFRp
cE1vdXNlRXhpdGVkCit7CisgICAgLy8gTm90aGluZyBtYXR0ZXJzIGV4Y2VwdCB3aW5kb3csIHRy
YWNraW5nTnVtYmVyLCBhbmQgdXNlckRhdGEuCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05T
RXZlbnQgZW50ZXJFeGl0RXZlbnRXaXRoVHlwZTpOU01vdXNlRXhpdGVkCisgICAgICAgIGxvY2F0
aW9uOk5TTWFrZVBvaW50KDAsIDApCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6MAorICAgICAgICB0
aW1lc3RhbXA6MAorICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVt
YmVyXQorICAgICAgICBjb250ZXh0Ok5VTEwKKyAgICAgICAgZXZlbnROdW1iZXI6MAorICAgICAg
ICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19SRUNUX1RBRworICAgICAgICB1c2VyRGF0YTpfcHJp
dmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOworICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0
T3duZXIgbW91c2VFeGl0ZWQ6ZmFrZUV2ZW50XTsKK30KKworLSAodm9pZClfc2VuZFRvb2xUaXBN
b3VzZUVudGVyZWQKK3sKKyAgICAvLyBOb3RoaW5nIG1hdHRlcnMgZXhjZXB0IHdpbmRvdywgdHJh
Y2tpbmdOdW1iZXIsIGFuZCB1c2VyRGF0YS4KKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNF
dmVudCBlbnRlckV4aXRFdmVudFdpdGhUeXBlOk5TTW91c2VFbnRlcmVkCisgICAgICAgIGxvY2F0
aW9uOk5TTWFrZVBvaW50KDAsIDApCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6MAorICAgICAgICB0
aW1lc3RhbXA6MAorICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVt
YmVyXQorICAgICAgICBjb250ZXh0Ok5VTEwKKyAgICAgICAgZXZlbnROdW1iZXI6MAorICAgICAg
ICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19SRUNUX1RBRworICAgICAgICB1c2VyRGF0YTpfcHJp
dmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOworICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0
T3duZXIgbW91c2VFbnRlcmVkOmZha2VFdmVudF07Cit9CisKKy0gKHZvaWQpX3NldFRvb2xUaXA6
KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgTlNTdHJpbmcgKnRvb2xUaXAgPSBbc3RyaW5nIGxl
bmd0aF0gPT0gMCA/IG5pbCA6IHN0cmluZzsKKyAgICBOU1N0cmluZyAqb2xkVG9vbFRpcCA9IF9w
cml2YXRlLT50b29sVGlwOworICAgIGlmICgodG9vbFRpcCA9PSBuaWwgfHwgb2xkVG9vbFRpcCA9
PSBuaWwpID8gdG9vbFRpcCA9PSBvbGRUb29sVGlwIDogW3Rvb2xUaXAgaXNFcXVhbFRvU3RyaW5n
Om9sZFRvb2xUaXBdKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG9sZFRvb2xU
aXApIHsKKyAgICAgICAgW3NlbGYgX3NlbmRUb29sVGlwTW91c2VFeGl0ZWRdOworICAgICAgICBb
b2xkVG9vbFRpcCByZWxlYXNlXTsKKyAgICB9CisgICAgX3ByaXZhdGUtPnRvb2xUaXAgPSBbdG9v
bFRpcCBjb3B5XTsKKyAgICBpZiAodG9vbFRpcCkgeworICAgICAgICAvLyBTZWUgcmFkYXIgMzUw
MDIxNyBmb3Igd2h5IHdlIHJlbW92ZSBhbGwgdG9vbHRpcHMgcmF0aGVyIHRoYW4ganVzdCB0aGUg
c2luZ2xlIG9uZSB3ZSBjcmVhdGVkLgorICAgICAgICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107
CisgICAgICAgIE5TUmVjdCB3aWRlT3BlblJlY3QgPSBOU01ha2VSZWN0KC0xMDAwMDAsIC0xMDAw
MDAsIDIwMDAwMCwgMjAwMDAwKTsKKyAgICAgICAgX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnID0g
W3NlbGYgYWRkVG9vbFRpcFJlY3Q6d2lkZU9wZW5SZWN0IG93bmVyOnNlbGYgdXNlckRhdGE6TlVM
TF07CisgICAgICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZF07CisgICAgfQorfQor
CistIChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAqKXZpZXcgc3RyaW5nRm9yVG9vbFRpcDooTlNU
b29sVGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClwb2ludCB1c2VyRGF0YToodm9pZCAqKWRhdGEK
K3sKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+dG9vbFRpcCBjb3B5XSBhdXRvcmVsZWFzZV07Cit9
CisKKy0gKHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7
CisgICAgaWYgKF9wcml2YXRlLT5jbG9zZWQpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVmll
dyAqY29udGVudFZpZXcgPSBbW2V2ZW50IHdpbmRvd10gY29udGVudFZpZXddOworICAgIE5TUG9p
bnQgbG9jYXRpb25Gb3JIaXRUZXN0ID0gW1tjb250ZW50VmlldyBzdXBlcnZpZXddIGNvbnZlcnRQ
b2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsKKyAgICAKKyAgICBm
b3JjZVdlYkhUTUxWaWV3SGl0VGVzdCA9IFlFUzsKKyAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbY29u
dGVudFZpZXcgaGl0VGVzdDpsb2NhdGlvbkZvckhpdFRlc3RdOworICAgIGZvcmNlV2ViSFRNTFZp
ZXdIaXRUZXN0ID0gTk87CisgICAgCisgICAgV2ViSFRNTFZpZXcgKnZpZXcgPSBuaWw7CisgICAg
aWYgKFtoaXRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0gJiYgIVtbKFdl
YkhUTUxWaWV3ICopaGl0VmlldyBfd2ViVmlld10gaXNIb3ZlckZlZWRiYWNrU3VzcGVuZGVkXSkK
KyAgICAgICAgdmlldyA9IChXZWJIVE1MVmlldyAqKWhpdFZpZXc7ICAgIAorCisgICAgaWYgKHZp
ZXcpCisgICAgICAgIFt2aWV3IHJldGFpbl07CisKKyAgICBpZiAobGFzdEhpdFZpZXcgIT0gdmll
dyAmJiBsYXN0SGl0VmlldyAmJiBbbGFzdEhpdFZpZXcgX2ZyYW1lXSkgeworICAgICAgICAvLyBJ
ZiB3ZSBhcmUgbW92aW5nIG91dCBvZiBhIHZpZXcgKG9yIGZyYW1lKSwgbGV0J3MgcHJldGVuZCB0
aGUgbW91c2UgbW92ZWQKKyAgICAgICAgLy8gYWxsIHRoZSB3YXkgb3V0IG9mIHRoYXQgdmlldy4g
QnV0IHdlIGhhdmUgdG8gYWNjb3VudCBmb3Igc2Nyb2xsaW5nLCBiZWNhdXNlCisgICAgICAgIC8v
IGtodG1sIGRvZXNuJ3QgdW5kZXJzdGFuZCBvdXIgY2xpcHBpbmcuCisgICAgICAgIE5TUmVjdCB2
aXNpYmxlUmVjdCA9IFtbW1tsYXN0SGl0VmlldyBfZnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZp
ZXddIGRvY3VtZW50VmlzaWJsZVJlY3RdOworICAgICAgICBmbG9hdCB5U2Nyb2xsID0gdmlzaWJs
ZVJlY3Qub3JpZ2luLnk7CisgICAgICAgIGZsb2F0IHhTY3JvbGwgPSB2aXNpYmxlUmVjdC5vcmln
aW4ueDsKKworICAgICAgICBldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01v
dXNlTW92ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpOU01ha2VQb2ludCgt
MSAtIHhTY3JvbGwsIC0xIC0geVNjcm9sbCApCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9k
aWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVy
ZW5jZURhdGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVyOltbdmlldyB3
aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Oltb
TlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQorICAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgICAgICBpZiAoRnJhbWUq
IGxhc3RIaXRDb3JlRnJhbWUgPSBjb3JlKFtsYXN0SGl0VmlldyBfZnJhbWVdKSkKKyAgICAgICAg
ICAgIGxhc3RIaXRDb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsK
KyAgICB9CisKKyAgICBsYXN0SGl0VmlldyA9IHZpZXc7CisKKyAgICBpZiAodmlldykgeworICAg
ICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3ZpZXcgX2ZyYW1lXSkpCisgICAgICAg
ICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKKworICAg
ICAgICBbdmlldyByZWxlYXNlXTsKKyAgICB9Cit9CisKKy8vIGtlZXAgaW4gc3luYyB3aXRoIFdl
YlBhc3RlYm9hcmRIZWxwZXI6Omluc2VydGFibGVQYXN0ZWJvYXJkVHlwZXMKKysgKE5TQXJyYXkg
KilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcworeworICAgIHN0YXRpYyBOU0FycmF5ICp0eXBl
cyA9IG5pbDsKKyAgICBpZiAoIXR5cGVzKSB7CisgICAgICAgIHR5cGVzID0gW1tOU0FycmF5IGFs
bG9jXSBpbml0V2l0aE9iamVjdHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5
cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNUSUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRU
eXBlLAorI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICAgICAgICAgIE5TUElDVFBib2FyZFR5cGUsCisjZW5kaWYKKyAgICAg
ICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBl
LCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29sb3JQYm9hcmRUeXBlLCBrVVRUeXBlUE5HLCBuaWxd
OworICAgICAgICBDRlJldGFpbih0eXBlcyk7CisgICAgfQorICAgIHJldHVybiB0eXBlczsKK30K
KworKyAoTlNBcnJheSAqKV9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMKK3sKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHB1dCBkYXRhIGZvciBOU0hUTUxQYm9hcmRUeXBlIG9uIHRoZSBwYXN0ZWJv
YXJkIGJ1dCBNaWNyb3NvZnQgRXhjZWwgZG9lc24ndCBsaWtlIG91ciBmb3JtYXQgb2YgSFRNTCAo
MzY0MDQyMykuCisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6V2ViQXJjaGl2
ZVBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQ
Ym9hcmRUeXBlLCBuaWxdOworfQorCistIChOU0ltYWdlICopX2RyYWdJbWFnZUZvclVSTDooTlNT
dHJpbmcqKXVybFN0cmluZyB3aXRoTGFiZWw6KE5TU3RyaW5nKilsYWJlbAoreworICAgIEJPT0wg
ZHJhd1VSTFN0cmluZyA9IFlFUzsKKyAgICBCT09MIGNsaXBVUkxTdHJpbmcgPSBOTywgY2xpcExh
YmVsU3RyaW5nID0gTk87CisgICAgCisgICAgaWYgKCFsYWJlbCkgeworICAgICAgICBkcmF3VVJM
U3RyaW5nID0gTk87CisgICAgICAgIGxhYmVsID0gdXJsU3RyaW5nOworICAgIH0KKyAgICAKKyAg
ICBOU0ZvbnQgKmxhYmVsRm9udCA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0g
Y29udmVydEZvbnQ6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOkRSQUdfTElOS19MQUJFTF9GT05U
X1NJWkVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvSGF2ZVRyYWl0Ok5TQm9sZEZvbnRNYXNrXTsKKyAgICBOU0ZvbnQgKnVybEZv
bnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6IERSQUdfTElOS19VUkxfRk9OVF9TSVpFXTsK
KyAgICBOU1NpemUgbGFiZWxTaXplOworICAgIGxhYmVsU2l6ZS53aWR0aCA9IFtsYWJlbCBfd2Vi
X3dpZHRoV2l0aEZvbnQ6IGxhYmVsRm9udF07CisgICAgbGFiZWxTaXplLmhlaWdodCA9IFtsYWJl
bEZvbnQgYXNjZW5kZXJdIC0gW2xhYmVsRm9udCBkZXNjZW5kZXJdOworICAgIGlmIChsYWJlbFNp
emUud2lkdGggPiBNQVhfRFJBR19MQUJFTF9XSURUSCl7CisgICAgICAgIGxhYmVsU2l6ZS53aWR0
aCA9IE1BWF9EUkFHX0xBQkVMX1dJRFRIOworICAgICAgICBjbGlwTGFiZWxTdHJpbmcgPSBZRVM7
CisgICAgfQorICAgIAorICAgIE5TU2l6ZSBpbWFnZVNpemUsIHVybFN0cmluZ1NpemU7CisgICAg
aW1hZ2VTaXplLndpZHRoID0gbGFiZWxTaXplLndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAq
IDIuMGY7CisgICAgaW1hZ2VTaXplLmhlaWdodCA9IGxhYmVsU2l6ZS5oZWlnaHQgKyBEUkFHX0xB
QkVMX0JPUkRFUl9ZICogMi4wZjsKKyAgICBpZiAoZHJhd1VSTFN0cmluZykgeworICAgICAgICB1
cmxTdHJpbmdTaXplLndpZHRoID0gW3VybFN0cmluZyBfd2ViX3dpZHRoV2l0aEZvbnQ6IHVybEZv
bnRdOworICAgICAgICB1cmxTdHJpbmdTaXplLmhlaWdodCA9IFt1cmxGb250IGFzY2VuZGVyXSAt
IFt1cmxGb250IGRlc2NlbmRlcl07CisgICAgICAgIGltYWdlU2l6ZS5oZWlnaHQgKz0gdXJsU3Ry
aW5nU2l6ZS5oZWlnaHQ7CisgICAgICAgIGlmICh1cmxTdHJpbmdTaXplLndpZHRoID4gTUFYX0RS
QUdfTEFCRUxfV0lEVEgpIHsKKyAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0aCA9IE1BWChNQVhf
RFJBR19MQUJFTF9XSURUSCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmLCBNSU5fRFJBR19M
QUJFTF9XSURUSF9CRUZPUkVfQ0xJUCk7CisgICAgICAgICAgICBjbGlwVVJMU3RyaW5nID0gWUVT
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1hZ2VTaXplLndpZHRoID0gTUFYKGxh
YmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmLCB1cmxTdHJpbmdTaXpl
LndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYpOworICAgICAgICB9CisgICAgfQor
ICAgIE5TSW1hZ2UgKmRyYWdJbWFnZSA9IFtbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTog
aW1hZ2VTaXplXSBhdXRvcmVsZWFzZV07CisgICAgW2RyYWdJbWFnZSBsb2NrRm9jdXNdOworICAg
IAorICAgIFtbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6IDAuN2YgZ3JlZW46IDAuN2YgYmx1
ZTogMC43ZiBhbHBoYTogMC44Zl0gc2V0XTsKKyAgICAKKyAgICAvLyBEcmFnIGEgcmVjdGFuZ2xl
IHdpdGggcm91bmRlZCBjb3JuZXJzLworICAgIE5TQmV6aWVyUGF0aCAqcGF0aCA9IFtOU0Jlemll
clBhdGggYmV6aWVyUGF0aF07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5S
ZWN0OiBOU01ha2VSZWN0KDAuMGYsIDAuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJB
R19MQUJFTF9SQURJVVMgKiAyLjBmKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhP
dmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIGltYWdlU2l6ZS5oZWlnaHQgLSBEUkFHX0xBQkVMX1JB
RElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMg
KiAyLjBmKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01h
a2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgaW1hZ2VT
aXplLmhlaWdodCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMg
KiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXpp
ZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmLCAwLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdf
TEFCRUxfUkFESVVTICogMi4wZildOworICAgIAorICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhX
aXRoUmVjdDogTlNNYWtlUmVjdChEUkFHX0xBQkVMX1JBRElVUywgMC4wZiwgaW1hZ2VTaXplLndp
ZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBpbWFnZVNpemUuaGVpZ2h0KV07CisgICAg
W3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KDAuMGYsIERSQUdfTEFC
RUxfUkFESVVTLCBEUkFHX0xBQkVMX1JBRElVUyArIDEwLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0g
Mi4wZiAqIERSQUdfTEFCRUxfUkFESVVTKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdp
dGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdfTEFCRUxfUkFESVVTIC0g
MjAuMGYsIERSQUdfTEFCRUxfUkFESVVTLCBEUkFHX0xBQkVMX1JBRElVUyArIDIwLjBmLCBpbWFn
ZVNpemUuaGVpZ2h0IC0gMi4wZiAqIERSQUdfTEFCRUxfUkFESVVTKV07CisgICAgW3BhdGggZmls
bF07CisgICAgCisgICAgTlNDb2xvciAqdG9wQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZp
Y2VXaGl0ZTowLjBmIGFscGhhOjAuNzVmXTsKKyAgICBOU0NvbG9yICpib3R0b21Db2xvciA9IFtO
U0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjEuMGYgYWxwaGE6MC41Zl07CisgICAgaWYgKGRy
YXdVUkxTdHJpbmcpIHsKKyAgICAgICAgaWYgKGNsaXBVUkxTdHJpbmcpCisgICAgICAgICAgICB1
cmxTdHJpbmcgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIGNlbnRlclRydW5jYXRlU3RyaW5nOiB1cmxT
dHJpbmcgdG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAoRFJBR19MQUJFTF9CT1JERVJfWCAqIDIu
MGYpIHdpdGhGb250OnVybEZvbnRdOworICAgICAgICAKKyAgICAgICAgW3VybFN0cmluZyBfd2Vi
X2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQb2ludChEUkFHX0xBQkVMX0JPUkRFUl9YLCBEUkFH
X0xBQkVMX0JPUkRFUl9ZIC0gW3VybEZvbnQgZGVzY2VuZGVyXSkgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aXRoVG9wQ29sb3I6dG9wQ29sb3IgYm90dG9tQ29sb3I6Ym90dG9tQ29s
b3IgZm9udDp1cmxGb250XTsKKyAgICB9CisgICAgCisgICAgaWYgKGNsaXBMYWJlbFN0cmluZykK
KyAgICAgICAgbGFiZWwgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIHJpZ2h0VHJ1bmNhdGVTdHJpbmc6
IGxhYmVsIHRvV2lkdGg6aW1hZ2VTaXplLndpZHRoIC0gKERSQUdfTEFCRUxfQk9SREVSX1ggKiAy
LjBmKSB3aXRoRm9udDpsYWJlbEZvbnRdOworICAgIFtsYWJlbCBfd2ViX2RyYXdEb3VibGVkQXRQ
b2ludDpOU01ha2VQb2ludCAoRFJBR19MQUJFTF9CT1JERVJfWCwgaW1hZ2VTaXplLmhlaWdodCAt
IERSQUdfTEFCRUxfQk9SREVSX1lfT0ZGU0VUIC0gW2xhYmVsRm9udCBwb2ludFNpemVdKQorICAg
ICAgICAgICAgICAgICAgICAgIHdpdGhUb3BDb2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0
b21Db2xvciBmb250OmxhYmVsRm9udF07CisgICAgCisgICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1
c107CisgICAgCisgICAgcmV0dXJuIGRyYWdJbWFnZTsKK30KKworLSAoTlNJbWFnZSAqKV9kcmFn
SW1hZ2VGb3JMaW5rRWxlbWVudDooTlNEaWN0aW9uYXJ5ICopZWxlbWVudAoreworICAgIE5TVVJM
ICpsaW5rVVJMID0gW2VsZW1lbnQgb2JqZWN0Rm9yS2V5OiBXZWJFbGVtZW50TGlua1VSTEtleV07
CisgICAgCisgICAgTlNTdHJpbmcgKmxhYmVsID0gW2VsZW1lbnQgb2JqZWN0Rm9yS2V5OiBXZWJF
bGVtZW50TGlua0xhYmVsS2V5XTsKKyAgICBOU1N0cmluZyAqdXJsU3RyaW5nID0gW2xpbmtVUkwg
X3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAgcmV0dXJuIFtzZWxmIF9kcmFnSW1hZ2VGb3JV
Ukw6dXJsU3RyaW5nIHdpdGhMYWJlbDpsYWJlbF07Cit9CisKKy0gKHZvaWQpcGFzdGVib2FyZENo
YW5nZWRPd25lcjooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAoreworICAgIFtzZWxmIHNldFBy
b21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBdOworfQorCistICh2b2lkKXBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgcHJvdmlkZURhdGFGb3JUeXBlOihOU1N0cmluZyAqKXR5
cGUKK3sKKyAgICBpZiAoW3R5cGUgaXNFcXVhbDpOU1JURkRQYm9hcmRUeXBlXSAmJiBbW3Bhc3Rl
Ym9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgeworICAg
ICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aERh
dGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdXTsKKyAgICAg
ICAgW3Bhc3RlYm9hcmQgX3dlYl93cml0ZVByb21pc2VkUlRGREZyb21BcmNoaXZlOmFyY2hpdmUg
Y29udGFpbnNJbWFnZTpbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBi
b2FyZFR5cGVdXTsKKyAgICAgICAgW2FyY2hpdmUgcmVsZWFzZV07CisgICAgfSBlbHNlIGlmIChb
dHlwZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVdICYmIFtzZWxmIHByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlXSkgeworICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0gW3NlbGYgcHJvbWlzZWRE
cmFnVElGRkRhdGFTb3VyY2VdLT5pbWFnZSgpKQorICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0
RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJRkZSZXByZXNlbnRhdGlvbigpIGZvclR5cGU6TlNU
SUZGUGJvYXJkVHlwZV07CisgICAgICAgIFtzZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlOjBdOworICAgIH0KK30KKworLSAodm9pZClfaGFuZGxlQXV0b3Njcm9sbEZvck1vdXNlRHJh
Z2dlZDooTlNFdmVudCAqKWV2ZW50IAoreyAKKyAgICBbc2VsZiBhdXRvc2Nyb2xsOmV2ZW50XTsg
CisgICAgW3NlbGYgX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOmV2ZW50XTsgCit9IAorCistIChXZWJQ
bHVnaW5Db250cm9sbGVyICopX3BsdWdpbkNvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gX3ByaXZh
dGUtPnBsdWdpbkNvbnRyb2xsZXI7Cit9CisKKy0gKHZvaWQpX2xheW91dEZvclByaW50aW5nCit7
CisgICAgLy8gU2V0IHByaW50aW5nIG1vZGUgdGVtcG9yYXJpbHkgc28gd2UgY2FuIGFkanVzdCB0
aGUgc2l6ZSBvZiB0aGUgdmlldy4gVGhpcyB3aWxsIGFsbG93CisgICAgLy8gQXBwS2l0J3MgcGFn
aW5hdGlvbiBjb2RlIHRvIHVzZSB0aGUgY29ycmVjdCBoZWlnaHQgZm9yIHRoZSBwYWdlIGNvbnRl
bnQuIExlYXZpbmcgcHJpbnRpbmcKKyAgICAvLyBtb2RlIG9uIGluZGVmaW5pdGVseSB3b3VsZCBp
bnRlcmZlcmUgd2l0aCBNYWlsJ3MgcHJpbnRpbmcgbWVjaGFuaXNtIChhdCBsZWFzdCksIHNvIHdl
IGp1c3QKKyAgICAvLyB0dXJuIGl0IG9mZiBhZ2FpbiBhZnRlciBhZGp1c3RpbmcgdGhlIHNpemUu
CisgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6
ZV07CisgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Cit9CisKKy0g
KHZvaWQpX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxh
Y2luZ1JhbmdlOihET01SYW5nZSAqKXJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJp
bmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOihOU1N0cmluZyAqKilhZnRlclN0cmluZwor
eworICAgIGlmICghcGFzdGVTdHJpbmcgfHwgIXJhbmdlVG9SZXBsYWNlIHx8ICFbW3NlbGYgX3dl
YlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pIHsKKyAgICAgICAgaWYgKGJlZm9yZVN0
cmluZykKKyAgICAgICAgICAgICpiZWZvcmVTdHJpbmcgPSBuaWw7CisgICAgICAgIGlmIChhZnRl
clN0cmluZykKKyAgICAgICAgICAgICphZnRlclN0cmluZyA9IG5pbDsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBbW3NlbGYgX2ZyYW1lXSBfc21hcnRJbnNlcnRGb3JTdHJpbmc6
cGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6cmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOmJl
Zm9yZVN0cmluZyBhZnRlclN0cmluZzphZnRlclN0cmluZ107Cit9CisKKy0gKEJPT0wpX2NhblNt
YXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7Cisg
ICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSAmJiBb
W3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBl
XTsKK30KKworLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6IChOU0V2ZW50ICopdHJpZ2dl
ckV2ZW50Cit7CisgICAgaWYgKF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPT0gbmlsKSB7Cisg
ICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGlt
ZXJXaXRoVGltZUludGVydmFsOkFVVE9TQ1JPTExfSU5URVJWQUwKKyAgICAgICAgICAgIHRhcmdl
dDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfYXV0b3Njcm9sbCkgdXNlckluZm86bmlsIHJlcGVh
dHM6WUVTXSByZXRhaW5dOworICAgICAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVu
dCA9IFt0cmlnZ2VyRXZlbnQgcmV0YWluXTsKKyAgICB9Cit9CisKKy8vIEZJWE1FOiBfc2VsZWN0
aW9uUmVjdCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHNlbGVjdGlvblJlY3QsIHdoaWNoIGlz
IGluIHByb3RvY29sIFdlYkRvY3VtZW50U2VsZWN0aW9uLgorLy8gV2UgY2FuJ3QgcmVtb3ZlIHRo
aXMgeWV0IGJlY2F1c2UgaXQncyBzdGlsbCBpbiB1c2UgYnkgTWFpbC4KKy0gKE5TUmVjdClfc2Vs
ZWN0aW9uUmVjdAoreworICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0XTsKK30KKworLSAo
dm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcgoreworICAgIE5TVGltZXIgKnRpbWVyID0gX3ByaXZh
dGUtPmF1dG9zY3JvbGxUaW1lcjsKKyAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gbmls
OworICAgIFtfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCByZWxlYXNlXTsKKyAgICBf
cHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9IG5pbDsKKyAgICBbdGltZXIgaW52YWxp
ZGF0ZV07CisgICAgW3RpbWVyIHJlbGVhc2VdOworfQorCistICh2b2lkKV9hdXRvc2Nyb2xsCit7
CisgICAgLy8gR3VhcmFudGVlIHRoYXQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaXMgaW52YWxpZGF0
ZWQsIGV2ZW4gaWYgd2UgZG9uJ3QgcmVjZWl2ZQorICAgIC8vIGEgbW91c2UgdXAgZXZlbnQuCisg
ICAgQk9PTCBpc1N0aWxsRG93biA9IENHRXZlbnRTb3VyY2VCdXR0b25TdGF0ZShrQ0dFdmVudFNv
dXJjZVN0YXRlQ29tYmluZWRTZXNzaW9uU3RhdGUsIGtDR01vdXNlQnV0dG9uTGVmdCk7ICAgCisg
ICAgaWYgKCFpc1N0aWxsRG93bil7CisgICAgICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVy
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtO
U0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xlZnRNb3VzZURyYWdnZWQKKyAgICAgICAgbG9j
YXRpb246W1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBtb3VzZUxv
Y2F0aW9uXV0KKyAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9k
aWZpZXJGbGFnc10KKyAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VS
ZWZlcmVuY2VEYXRlXQorICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93
TnVtYmVyXQorICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQor
ICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKKyAgICBbc2Vs
ZiBtb3VzZURyYWdnZWQ6ZmFrZUV2ZW50XTsKK30KKworLSAoQk9PTClfY2FuRWRpdAoreworICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworfQorCistIChCT09MKV9j
YW5FZGl0UmljaGx5Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0
UmljaGx5KCk7Cit9CisKKy0gKEJPT0wpX2NhbkFsdGVyQ3VycmVudFNlbGVjdGlvbgoreworICAg
IHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uT3JJbnNlcnRpb25Qb2ludF0gJiYgW3NlbGYgX2lz
RWRpdGFibGVdOworfQorCistIChCT09MKV9oYXNTZWxlY3Rpb24KK3sKKyAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKK30KKworLSAoQk9PTClfaGFzU2VsZWN0
aW9uT3JJbnNlcnRpb25Qb2ludAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNDYXJldE9yUmFuZ2UoKTsKK30KKworLSAoQk9PTClfaGFzSW5zZXJ0aW9uUG9pbnQKK3sK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4g
Y29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ2FyZXQoKTsKK30KKworLSAo
Qk9PTClfaXNFZGl0YWJsZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNDb250ZW50RWRpdGFibGUoKTsKK30KKworLSAoQk9PTClfdHJhbnNwYXJlbnRCYWNrZ3JvdW5k
Cit7CisgICAgcmV0dXJuIF9wcml2YXRlLT50cmFuc3BhcmVudEJhY2tncm91bmQ7Cit9CisKKy0g
KHZvaWQpX3NldFRyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClmCit7CisgICAgX3ByaXZhdGUt
PnRyYW5zcGFyZW50QmFja2dyb3VuZCA9IGY7Cit9CisKKy0gKE5TSW1hZ2UgKilfc2VsZWN0aW9u
RHJhZ2dpbmdJbWFnZQoreworICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkgeworICAgICAg
ICBOU0ltYWdlICpkcmFnSW1hZ2UgPSBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25JbWFn
ZSgpOworICAgICAgICBbZHJhZ0ltYWdlIF93ZWJfZGlzc29sdmVUb0ZyYWN0aW9uOldlYkRyYWdJ
bWFnZUFscGhhXTsKKyAgICAgICAgcmV0dXJuIGRyYWdJbWFnZTsKKyAgICB9CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoTlNSZWN0KV9zZWxlY3Rpb25EcmFnZ2luZ1JlY3QKK3sKKyAgICAvLyBN
YWlsIGN1cnJlbnRseSBjYWxscyB0aGlzIG1ldGhvZC4gV2UgY2FuIGVsaW1pbmF0ZSBpdCB3aGVu
IE1haWwgbm8gbG9uZ2VyIGNhbGxzIGl0LgorICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0
XTsKK30KKworLSAoRE9NTm9kZSAqKV9pbnNlcnRPcmRlcmVkTGlzdAoreworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBr
aXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0T3JkZXJlZExpc3QoKS5nZXQoKSkgOiBuaWw7
Cit9CisKKy0gKERPTU5vZGUgKilfaW5zZXJ0VW5vcmRlcmVkTGlzdAoreworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBr
aXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VW5vcmRlcmVkTGlzdCgpLmdldCgpKSA6IG5p
bDsKK30KKworLSAoQk9PTClfY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKK3sKKyAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCk7Cit9CisKKy0gKEJPT0wpX2NhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCit7CisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bCgpOworfQorCistIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCit7Cisg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNv
cmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbCgpLmdldCgpKSA6IG5pbDsKK30KKworLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbE9yZGVyZWQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCkt
PmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpLmdldCgpKSA6IG5pbDsKK30KKwor
LSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZAoreworICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3Jl
RnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxVbm9yZGVyZWQoKS5nZXQoKSkgOiBuaWw7Cit9CisKKy0gKHZvaWQpX2RlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgaWYgKGNvcmVGcmFtZSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+ZGVj
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKK30KKworLSAodm9pZClfc2V0SGlnaGxpZ2h0ZXI6
KGlkPFdlYkhUTUxIaWdobGlnaHRlcj4paGlnaGxpZ2h0ZXIgb2ZUeXBlOihOU1N0cmluZyopdHlw
ZQoreworICAgIGlmICghX3ByaXZhdGUtPmhpZ2hsaWdodGVycykKKyAgICAgICAgX3ByaXZhdGUt
PmhpZ2hsaWdodGVycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAg
W19wcml2YXRlLT5oaWdobGlnaHRlcnMgc2V0T2JqZWN0OmhpZ2hsaWdodGVyIGZvcktleTp0eXBl
XTsKK30KKworLSAodm9pZClfcmVtb3ZlSGlnaGxpZ2h0ZXJPZlR5cGU6KE5TU3RyaW5nKil0eXBl
Cit7CisgICAgW19wcml2YXRlLT5oaWdobGlnaHRlcnMgcmVtb3ZlT2JqZWN0Rm9yS2V5OnR5cGVd
OworfQorCistICh2b2lkKV91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUKK3sKKyAgICBbc2Vs
ZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOworCisgICAgW1tzZWxm
IF93ZWJWaWV3XSBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlRm9yRnJhbWU6W3NlbGYgX2Zy
YW1lXV07Cit9CisKKy0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3Rl
Ym9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgQVNTRVJUKFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsK
KyAgICBOU0FycmF5ICp0eXBlcyA9IFtzZWxmIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbl07
CisKKyAgICAvLyBEb24ndCB3cml0ZSBSVEZEIHRvIHRoZSBwYXN0ZWJvYXJkIHdoZW4gdGhlIGNv
cGllZCBhdHRyaWJ1dGVkIHN0cmluZyBoYXMgbm8gYXR0YWNobWVudHMuCisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3Ry
aW5nXTsKKyAgICBOU011dGFibGVBcnJheSAqbXV0YWJsZVR5cGVzID0gbmlsOworICAgIGlmICgh
W2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pIHsKKyAgICAgICAgbXV0YWJs
ZVR5cGVzID0gW3R5cGVzIG11dGFibGVDb3B5XTsKKyAgICAgICAgW211dGFibGVUeXBlcyByZW1v
dmVPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV07CisgICAgICAgIHR5cGVzID0gbXV0YWJsZVR5cGVz
OworICAgIH0KKworICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2Vs
ZiBfdG9wSFRNTFZpZXddXTsKKyAgICBbc2VsZiBfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2Fy
ZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJp
bmc6YXR0cmlidXRlZFN0cmluZ107CisgICAgW211dGFibGVUeXBlcyByZWxlYXNlXTsKK30KKwor
LSAodm9pZCljbG9zZQoreworICAgIC8vIENoZWNrIGZvciBhIG5pbCBfcHJpdmF0ZSBoZXJlIGlu
IGNhc2Ugd2Ugd2VyZSBjcmVhdGVkIHdpdGggaW5pdFdpdGhDb2Rlci4gSW4gdGhhdCBjYXNlLCB0
aGUgV2ViVmlldyBpcyBqdXN0IHRocm93aW5nCisgICAgLy8gb3V0IHRoZSBhcmNoaXZlZCBXZWJI
VE1MVmlldyBhbmQgcmVjcmVhdGluZyBhIG5ldyBvbmUgaWYgbmVlZGVkLiBTbyBjbG9zZSBkb2Vz
bid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaW4gdGhhdCBjYXNlLgorICAgIGlmICghX3ByaXZhdGUg
fHwgX3ByaXZhdGUtPmNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPmNs
b3NlZCA9IFlFUzsKKworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07Cisg
ICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsKKyAgICBb
c2VsZiBfY2xlYXJMYXN0SGl0Vmlld0lmU2VsZl07CisgICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92
ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07CisgICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2Vy
dmVyc107CisgICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVyc107CisgICAgW19wcml2
YXRlLT5wbHVnaW5Db250cm9sbGVyIGRlc3Ryb3lBbGxQbHVnaW5zXTsKKyAgICBbX3ByaXZhdGUt
PnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpuaWxdOworICAgIC8vIHJlbW92ZSB0b29s
dGlwcyBiZWZvcmUgY2xlYXJpbmcgX3ByaXZhdGUgc28gcmVtb3ZlVHJhY2tpbmdSZWN0OiB3aWxs
IHdvcmsgY29ycmVjdGx5CisgICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRpcHNdOworCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5n
VmlldykKKyAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RvcHBlZEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKKyNlbmRpZgorCisgICAgW19wcml2YXRlIGNs
ZWFyXTsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7CisgICAgaWYg
KHBhZ2UpCisgICAgICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNldERyYWdnaW5nSW1hZ2VV
UkwoS1VSTCgpKTsKK30KKworLSAoQk9PTClfaGFzSFRNTERvY3VtZW50Cit7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisg
ICAgICAgIHJldHVybiBOTzsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRv
Y3VtZW50KCk7CisgICAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVu
dCgpOworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9t
UGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6KE5TU3RyaW5nICopcGJvYXJk
VHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNv
bnRleHQ6KERPTVJhbmdlICopY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzCit7Cisg
ICAgaWYgKHBib2FyZFR5cGUgPT0gV2ViQXJjaGl2ZVBib2FyZFR5cGUpIHsKKyAgICAgICAgV2Vi
QXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0
ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV07CisgICAgICAgIGlmIChz
dWJyZXNvdXJjZXMpCisgICAgICAgICAgICAqc3VicmVzb3VyY2VzID0gW2FyY2hpdmUgc3VicmVz
b3VyY2VzXTsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYg
X2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEFyY2hpdmU6YXJjaGl2ZV07CisgICAg
ICAgIFthcmNoaXZlIHJlbGVhc2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQor
ICAgIGlmIChwYm9hcmRUeXBlID09IE5TRmlsZW5hbWVzUGJvYXJkVHlwZSkKKyAgICAgICAgcmV0
dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50V2l0aFBhdGhzOltwYXN0ZWJvYXJkIHByb3BlcnR5
TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXV07CisgICAgICAgIAorICAgIGlmIChw
Ym9hcmRUeXBlID09IE5TSFRNTFBib2FyZFR5cGUpIHsKKyAgICAgICAgTlNTdHJpbmcgKkhUTUxT
dHJpbmcgPSBbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TSFRNTFBib2FyZFR5cGVdOworICAg
ICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIE1pY3Jvc29mdCdzIEhUTUwgcGFzdGVib2Fy
ZCBkYXRhIHdvcmsuIFNlZSAzNzc4Nzg1LgorICAgICAgICBpZiAoW0hUTUxTdHJpbmcgaGFzUHJl
Zml4OkAiVmVyc2lvbjoiXSkgeworICAgICAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtIVE1MU3Ry
aW5nIHJhbmdlT2ZTdHJpbmc6QCI8aHRtbCIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJj
aF07CisgICAgICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKKyAgICAg
ICAgICAgICAgICBIVE1MU3RyaW5nID0gW0hUTUxTdHJpbmcgc3Vic3RyaW5nRnJvbUluZGV4OnJh
bmdlLmxvY2F0aW9uXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW0hUTUxTdHJpbmcgbGVuZ3Ro
XSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6SFRNTFN0
cmluZyBiYXNlVVJMU3RyaW5nOm5pbF07CisgICAgfQorCisgICAgLy8gVGhlIF9oYXNIVE1MRG9j
dW1lbnQgY2xhdXNlIGhlcmUgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBOU0F0dHJpYnV0
ZWRTdHJpbmc6IFJhZGFyIDUwNTIzNjkuCisgICAgLy8gSWYgd2UgY2FsbCBfZG9jdW1lbnRGcm9t
UmFuZ2Ugb24gYW4gWE1MIGRvY3VtZW50IHdlJ2xsIGdldCAic2V0SW5uZXJIVE1MOiBtZXRob2Qg
bm90IGZvdW5kIi4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBidWcgNTA1MjM2OSBp
cyBmaXhlZC4KKyAgICBpZiAoW3NlbGYgX2hhc0hUTUxEb2N1bWVudF0gJiYgcGJvYXJkVHlwZSA9
PSBOU1JURlBib2FyZFR5cGUgfHwgcGJvYXJkVHlwZSA9PSBOU1JURkRQYm9hcmRUeXBlKSB7Cisg
ICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gbmlsOworICAgICAgICBpZiAocGJv
YXJkVHlwZSA9PSBOU1JURkRQYm9hcmRUeXBlKQorICAgICAgICAgICAgc3RyaW5nID0gW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlw
ZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07CisgICAgICAgIGlm
IChzdHJpbmcgPT0gbmlsKQorICAgICAgICAgICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJk
VHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgICAgICBpZiAoc3RyaW5nID09IG5p
bCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICAKKyAgICAgICAgTlNEaWN0
aW9uYXJ5ICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtbc2VsZiBjbGFzc10gX2V4Y2x1ZGVkRWxl
bWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbl0sIE5TRXhjbHVkZWRFbGVtZW50c0Rv
Y3VtZW50QXR0cmlidXRlLAorICAgICAgICAgICAgc2VsZiwgQCJXZWJSZXNvdXJjZUhhbmRsZXIi
LCBuaWxdOworICAgICAgICBOU0FycmF5ICpzOworICAgICAgICAKKyAgICAgICAgQk9PTCB3YXNE
ZWZlcnJpbmdDYWxsYmFja3MgPSBbW3NlbGYgX3dlYlZpZXddIGRlZmVyc0NhbGxiYWNrc107Cisg
ICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQorICAgICAgICAgICAgW1tzZWxmIF93
ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6WUVTXTsKKyAgICAgICAgICAgIAorICAgICAgICBE
T01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzdHJpbmcgX2RvY3VtZW50RnJvbVJhbmdl
Ok5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6W1tzZWxmIF9mcmFt
ZV0gRE9NRG9jdW1lbnRdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnRBdHRyaWJ1dGVzOmRvY3VtZW50QXR0cmlidXRlcworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2Vz
OiZzXTsKKyAgICAgICAgaWYgKHN1YnJlc291cmNlcykKKyAgICAgICAgICAgICpzdWJyZXNvdXJj
ZXMgPSBzOworICAgICAgICAKKyAgICAgICAgTlNFbnVtZXJhdG9yICplID0gW3Mgb2JqZWN0RW51
bWVyYXRvcl07CisgICAgICAgIFdlYlJlc291cmNlICpyOworICAgICAgICB3aGlsZSAoKHIgPSBb
ZSBuZXh0T2JqZWN0XSkpCisgICAgICAgICAgICBbW3NlbGYgX2RhdGFTb3VyY2VdIGFkZFN1YnJl
c291cmNlOnJdOworICAgICAgICAKKyAgICAgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3Mp
CisgICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0NhbGxiYWNrczpOT107Cisg
ICAgICAgIAorICAgICAgICBbZG9jdW1lbnRBdHRyaWJ1dGVzIHJlbGVhc2VdOworICAgICAgICBb
c3RyaW5nIHJlbGVhc2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlm
IChwYm9hcmRUeXBlID09IE5TVElGRlBib2FyZFR5cGUpIHsKKyAgICAgICAgV2ViUmVzb3VyY2Ug
KnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJk
IGRhdGFGb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImltYWdlL3RpZmYiIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05h
bWU6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYW1lTmFtZTpuaWxdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFn
bWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNv
dXJjZTpyZXNvdXJjZV07CisgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAgICAgICAgcmV0
dXJuIGZyYWdtZW50OworICAgIH0KKyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1BERlBib2FyZFR5
cGUpIHsKKyAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxv
Y10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUERGUGJvYXJkVHlwZV0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJhcHBsaWNhdGlvbi5wZGYiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxd
OworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNv
dXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07CisgICAg
ICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0K
KyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQSUNUUGJvYXJkVHlwZSkgeworICAgICAg
ICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERh
dGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNQSUNUUGJvYXJkVHlwZV0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVu
aXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5waWN0IikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2Uv
cGljdCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dEVuY29kaW5nTmFtZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgICAgIERPTURvY3VtZW50
RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVu
dFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKKyAgICAgICAgW3Jlc291cmNlIHJlbGVhc2Vd
OworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorI2VuZGlmCisgICAgLy8gT25seSAx
MC41IGFuZCBoaWdoZXIgc3VwcG9ydCBzZXR0aW5nIGFuZCByZXRyaWV2aW5nIHBhc3RlYm9hcmQg
dHlwZXMgd2l0aCBVVElzLCBidXQgd2UgZG9uJ3QgYmVsaWV2ZQorICAgIC8vIHRoYXQgYW55IGFw
cGxpY2F0aW9ucyBvbiBUaWdlciBwdXQgdHlwZXMgZm9yIHdoaWNoIHdlIG9ubHkgaGF2ZSBhIFVU
SSwgbGlrZSBQTkcsIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbcGJvYXJkVHlwZSBpc0Vx
dWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlUE5HXSkgeworICAgICAgICBXZWJSZXNvdXJj
ZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9h
cmQgZGF0YUZvclR5cGU6KE5TU3RyaW5nKilrVVRUeXBlUE5HXQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJM
V2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImltYWdlL3BuZyIgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29k
aW5nTmFtZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQg
KmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFn
ZVJlc291cmNlOnJlc291cmNlXTsKKyAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOworICAgICAg
ICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlmIChwYm9hcmRUeXBlID09IE5TVVJMUGJv
YXJkVHlwZSkgeworICAgICAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJk
OnBhc3RlYm9hcmRdOworICAgICAgICBET01Eb2N1bWVudCogZG9jdW1lbnQgPSBbW3NlbGYgX2Zy
YW1lXSBET01Eb2N1bWVudF07CisgICAgICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBET01IVE1MQW5j
aG9yRWxlbWVudCAqYW5jaG9yID0gKERPTUhUTUxBbmNob3JFbGVtZW50ICopW2RvY3VtZW50IGNy
ZWF0ZUVsZW1lbnQ6QCJhIl07CisgICAgICAgIE5TU3RyaW5nICpVUkxTdHJpbmcgPSBbVVJMIF93
ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddOyAvLyBPcmlnaW5hbCBkYXRhIGlzIEFTQ0lJLW9ubHks
IHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJlY29tcG9zZS4KKyAgICAgICAgaWYgKFtVUkxTdHJp
bmcgbGVuZ3RoXSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgTlNTdHJp
bmcgKlVSTFRpdGxlU3RyaW5nID0gW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6V2ViVVJMTmFt
ZVBib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOworICAg
ICAgICBET01UZXh0ICp0ZXh0ID0gW2RvY3VtZW50IGNyZWF0ZVRleHROb2RlOlVSTFRpdGxlU3Ry
aW5nXTsKKyAgICAgICAgW2FuY2hvciBzZXRIcmVmOlVSTFN0cmluZ107CisgICAgICAgIFthbmNo
b3IgYXBwZW5kQ2hpbGQ6dGV4dF07CisgICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdt
ZW50ID0gW2RvY3VtZW50IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRdOworICAgICAgICBbZnJhZ21l
bnQgYXBwZW5kQ2hpbGQ6YW5jaG9yXTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0K
KyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0cmluZ1Bib2FyZFR5cGUpCisgICAgICAgIHJldHVy
biBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQg
c3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENh
bm9uaWNhbE1hcHBpbmddKS5nZXQoKSk7CisgICAgcmV0dXJuIG5pbDsKK30KKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKKy0gKHZvaWQpX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5l
dHNjYXBlUGx1Z2lucyAKK3sgCisgICAgTlNBcnJheSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2aWV3
c107IAorICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3Q291bnQgPSBbc3Vidmlld3MgY291bnRdOyAK
KyAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4OyAKKyAgICAKKyAgICBmb3IgKHN1YnZpZXdJ
bmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZpZXdDb3VudDsgc3Vidmlld0luZGV4KyspIHsg
CisgICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtzdWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1YnZp
ZXdJbmRleF07IAorICAgICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5l
dHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKKyAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldyAqKXN1YnZpZXcgc3RvcFRpbWVyc107CisgICAgfSAKK30gCisjZW5kaWYgCisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgCistICh2b2lkKV9yZXN1bWVOdWxsRXZl
bnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAoreyAKKyAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtz
ZWxmIHN1YnZpZXdzXTsgCisgICAgdW5zaWduZWQgaW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3
cyBjb3VudF07IAorICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3SW5kZXg7IAorICAgIAorICAgIGZv
ciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmlld0luZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3
SW5kZXgrKykgeyAKKyAgICAgICAgTlNWaWV3ICpzdWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0
SW5kZXg6c3Vidmlld0luZGV4XTsgCisgICAgICAgIGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNz
OltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pIAorICAgICAgICAgICAgWyhXZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3VidmlldyByZXN0YXJ0VGltZXJzXTsgCisgICAgfSAK
K30gCisjZW5kaWYgCisKKy0gKEJPT0wpX2lzVXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nCit7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHJldHVybiBfcHJpdmF0ZS0+
bGF5ZXJIb3N0aW5nVmlldyAhPSBuaWw7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVy
bmFsKQorCistICh2b2lkKV93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5T
TXV0YWJsZUFycmF5ICopYXJyYXkKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IFtfc3Vidmlld3Mg
Y291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgIE5TVmlldyAqY2hpbGQgPSBbX3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAg
IGlmIChbY2hpbGQgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6Y2hpbGRdOworICAgICAgICBbY2hpbGQgX3dlYl9hZGREZXNj
ZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTphcnJheV07CisgICAgfQorfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5h
bCkKKworLSAodm9pZClfd2ViX3NldE9iamVjdElmTm90TmlsOihpZClvYmplY3QgZm9yS2V5Oihp
ZClrZXkKK3sKKyAgICBpZiAob2JqZWN0ID09IG5pbCkgeworICAgICAgICBbc2VsZiByZW1vdmVP
YmplY3RGb3JLZXk6a2V5XTsKKyAgICB9IGVsc2UgeworICAgICAgICBbc2VsZiBzZXRPYmplY3Q6
b2JqZWN0IGZvcktleTprZXldOworICAgIH0KK30KKworQGVuZAorCitAaW50ZXJmYWNlIE5TU3Ry
aW5nIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKy0gKEJPT0wpbWF0Y2hlc0V4dGVuc2lvbkVx
dWl2YWxlbnQ6KE5TU3RyaW5nICopZXh0ZW5zaW9uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
TlNTdHJpbmcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorCistIChCT09MKW1hdGNoZXNFeHRl
bnNpb25FcXVpdmFsZW50OihOU1N0cmluZyAqKWV4dGVuc2lvbgoreworICAgIGlmIChbc2VsZiBo
YXNTdWZmaXg6ZXh0ZW5zaW9uXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICBlbHNlIGlmIChb
ZXh0ZW5zaW9uIGlzRXF1YWxUb1N0cmluZzpAImpwZWciXSAmJiBbc2VsZiBoYXNTdWZmaXg6QCJq
cGciXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICByZXR1cm4gTk87Cit9CisKK0BlbmQKKwor
I2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKy8vIFRoZSBmb2xsb3dpbmcgaXMgYSB3b3JrYXJv
dW5kIGZvcgorLy8gPHJkYXI6Ly9wcm9ibGVtLzM0Mjk2MzE+IHdpbmRvdyBzdG9wcyBnZXR0aW5n
IG1vdXNlIG1vdmVkIGV2ZW50cyBhZnRlciBmaXJzdCB0b29sdGlwIGFwcGVhcnMKKy8vIFRoZSB0
cmljayBpcyB0byBkZWZpbmUgYSBjYXRlZ29yeSBvbiBOU1Rvb2xUaXBQYW5lbCB0aGF0IGltcGxl
bWVudHMgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6LgorLy8gU2luY2UgdGhlIGNhdGVnb3J5
IHdpbGwgYmUgc2VhcmNoZWQgYmVmb3JlIHRoZSByZWFsIGNsYXNzLCB3ZSdsbCBwcmV2ZW50IHRo
ZSBmbGFnIGZyb20gYmVpbmcKKy8vIHNldCBvbiB0aGUgdG9vbCB0aXAgcGFuZWwuCisKK0BpbnRl
cmZhY2UgTlNUb29sVGlwUGFuZWwgOiBOU1BhbmVsCitAZW5kCisKK0BpbnRlcmZhY2UgTlNUb29s
VGlwUGFuZWwgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorQGVuZAorCitAaW1wbGVtZW50YXRp
b24gTlNUb29sVGlwUGFuZWwgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorCistICh2b2lkKXNl
dEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOihCT09MKWZsYWcKK3sKKyAgICAvLyBEbyBub3RoaW5n
LCBwcmV2ZW50aW5nIHRoZSB0b29sIHRpcCBwYW5lbCBmcm9tIHRyeWluZyB0byBhY2NlcHQgbW91
c2UtbW92ZWQgZXZlbnRzLgorfQorCitAZW5kCisKKyNlbmRpZgorCitAaW50ZXJmYWNlIE5TQXJy
YXkgKFdlYkhUTUxWaWV3KQorLSAodm9pZClfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxl
Y3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdDsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYkhUTUxWaWV3CisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtOU0Fw
cCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRUeXBlczpbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25Q
YXN0ZWJvYXJkVHlwZXNdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBl
czpbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzXV07CisgICAgSlNDOjpp
bml0aWFsaXplVGhyZWFkaW5nKCk7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgV2Vi
Q29yZU9iakNGaW5hbGl6ZU9uTWFpblRocmVhZChzZWxmKTsKKyNlbmRpZgorfQorCistIChpZClp
bml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRo
RnJhbWU6ZnJhbWVdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBbc2VsZiBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZU5vbmVdOworICAgIAor
ICAgIC8vIE1ha2UgYWxsIGRyYXdpbmcgZ28gdGhyb3VnaCB1cyBpbnN0ZWFkIG9mIHN1YnZpZXdz
LgorICAgIFtzZWxmIF9zZXREcmF3c093bkRlc2NlbmRhbnRzOllFU107CisgICAgCisgICAgX3By
aXZhdGUgPSBbW1dlYkhUTUxWaWV3UHJpdmF0ZSBhbGxvY10gaW5pdF07CisKKyAgICBfcHJpdmF0
ZS0+cGx1Z2luQ29udHJvbGxlciA9IFtbV2ViUGx1Z2luQ29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhEb2N1bWVudFZpZXc6c2VsZl07CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFp
blRocmVhZChbV2ViSFRNTFZpZXcgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gV2UgY2FuJ3QgYXNzZXJ0IHRoYXQgY2xvc2UgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQg
YmVjYXVzZQorICAgIC8vIHRoaXMgdmlldyBjYW4gYmUgcmVtb3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2
aWV3LCBldmVuIHRob3VnaAorICAgIC8vIGl0IGNvdWxkIGJlIG5lZWRlZCBsYXRlciwgc28gY2xv
c2UgaWYgbmVlZGVkLgorICAgIFtzZWxmIGNsb3NlXTsKKyAgICBbX3ByaXZhdGUgcmVsZWFzZV07
CisgICAgX3ByaXZhdGUgPSBuaWw7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lk
KWZpbmFsaXplCit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CisgICAgLy8gV2UgY2FuJ3Qg
YXNzZXJ0IHRoYXQgY2xvc2UgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgYmVjYXVzZQorICAgIC8v
IHRoaXMgdmlldyBjYW4gYmUgcmVtb3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2aWV3LCBldmVuIHRob3Vn
aAorICAgIC8vIGl0IGNvdWxkIGJlIG5lZWRlZCBsYXRlciwgc28gY2xvc2UgaWYgbmVlZGVkLgor
ICAgIFtzZWxmIGNsb3NlXTsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCisvLyBSZXR1cm5z
IFlFUyBpZiB0aGUgZGVsZWdhdGUgcmV0dXJucyBZRVMgKHNvIHdlIHNob3VsZCBkbyBubyBtb3Jl
IHdvcmspLgorLSAoQk9PTCljYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6
KFNFTClzZWxlY3RvcgoreworICAgIEJPT0wgY2FsbGVyQWxyZWFkeUNhbGxlZERlbGVnYXRlID0g
X3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9PSBzZWxlY3RvcjsKKyAg
ICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gMDsKKyAgICBpZiAo
Y2FsbGVyQWxyZWFkeUNhbGxlZERlbGVnYXRlKQorICAgICAgICByZXR1cm4gTk87CisgICAgV2Vi
VmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICByZXR1cm4gW1t3ZWJWaWV3IF9l
ZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkb0NvbW1hbmRCeVNlbGVj
dG9yOnNlbGVjdG9yXTsKK30KKworc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9y
KFNFTCBzZWxlY3RvcikKK3sKKyAgICAvLyBDaGFuZ2UgYSBmZXcgY29tbWFuZCBuYW1lcyBpbnRv
IG9uZXMgc3VwcG9ydGVkIGJ5IFdlYkNvcmU6OkVkaXRvci4KKyAgICAvLyBJZiB0aGlzIGxpc3Qg
Z2V0cyB0b28gbG9uZyB3ZSBtaWdodCBkZWNpZGUgd2UgbmVlZCB0byB1c2UgYSBoYXNoIHRhYmxl
LgorICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
OikgfHwgc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRp
dG9yOikpCisgICAgICAgIHJldHVybiAiSW5zZXJ0TmV3bGluZSI7CisgICAgaWYgKHNlbGVjdG9y
ID09IEBzZWxlY3RvcihpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yOikpCisgICAgICAgIHJl
dHVybiAiSW5zZXJ0VGFiIjsKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VEb3du
OikpCisgICAgICAgIHJldHVybiAiTW92ZVBhZ2VEb3duIjsKKyAgICBpZiAoc2VsZWN0b3IgPT0g
QHNlbGVjdG9yKHBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uOikpCisgICAgICAgIHJldHVybiAi
TW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIjsKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNl
bGVjdG9yKHBhZ2VVcDopKQorICAgICAgICByZXR1cm4gIk1vdmVQYWdlVXAiOworICAgIGlmIChz
ZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uOikpCisgICAgICAg
IHJldHVybiAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiI7CisKKyAgICAvLyBSZW1vdmUg
dGhlIHRyYWlsaW5nIGNvbG9uLgorICAgIGNvbnN0IGNoYXIqIHNlbGVjdG9yTmFtZSA9IHNlbF9n
ZXROYW1lKHNlbGVjdG9yKTsKKyAgICBzaXplX3Qgc2VsZWN0b3JOYW1lTGVuZ3RoID0gc3RybGVu
KHNlbGVjdG9yTmFtZSk7CisgICAgaWYgKHNlbGVjdG9yTmFtZUxlbmd0aCA8IDIgfHwgc2VsZWN0
b3JOYW1lW3NlbGVjdG9yTmFtZUxlbmd0aCAtIDFdICE9ICc6JykKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIHJldHVybiBTdHJpbmcoc2VsZWN0b3JOYW1lLCBzZWxlY3Rvck5hbWVMZW5n
dGggLSAxKTsKK30KKworLSAoRWRpdG9yOjpDb21tYW5kKWNvcmVDb21tYW5kQnlTZWxlY3Rvcjoo
U0VMKXNlbGVjdG9yCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBFZGl0b3I6OkNvbW1hbmQo
KTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZUZv
clNlbGVjdG9yKHNlbGVjdG9yKSk7Cit9CisKKy0gKEVkaXRvcjo6Q29tbWFuZCljb3JlQ29tbWFu
ZEJ5TmFtZTooY29uc3QgY2hhciopbmFtZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gRWRp
dG9yOjpDb21tYW5kKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQo
bmFtZSk7Cit9CisKKy0gKHZvaWQpZXhlY3V0ZUNvcmVDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNl
bGVjdG9yCit7CisgICAgaWYgKFtzZWxmIGNhbGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJ
Zk5lZWRlZDpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybjsKKyAgICBbc2VsZiBjb3JlQ29tbWFu
ZEJ5U2VsZWN0b3I6c2VsZWN0b3JdLmV4ZWN1dGUoKTsKK30KKworLSAodm9pZClleGVjdXRlQ29y
ZUNvbW1hbmRCeU5hbWU6KGNvbnN0IGNoYXIqKW5hbWUKK3sKKyAgICBbc2VsZiBjb3JlQ29tbWFu
ZEJ5TmFtZTpuYW1lXS5leGVjdXRlKCk7Cit9CisKKy8vIFRoZXNlIGNvbW1hbmRzIGFyZSBmb3J3
YXJkZWQgdG8gdGhlIEVkaXRvciBvYmplY3QgaW4gV2ViQ29yZS4KKy8vIElkZWFsbHkgd2UnZCBk
byB0aGlzIGZvciBhbGwgZWRpdGluZyBjb21tYW5kczsgbW9yZSBvZiB0aGUgY29kZQorLy8gc2hv
dWxkIGJlIG1vdmVkIGZyb20gaGVyZSB0byB0aGVyZSwgYW5kIG1vcmUgY29tbWFuZHMgc2hvdWxk
IGJlCisvLyBhZGRlZCB0byB0aGlzIGxpc3QuCisKKy8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQg
c2V0IHRoaW5ncyB1cCBzbyB0aGF0IGFsbCB0aGVzZSBzaGFyZSBhIHNpbmdsZSBtZXRob2QgaW1w
bGVtZW50YXRpb24gZnVuY3Rpb24uCisvLyBUaGUgZnVuY3Rpb25zIGFyZSBpZGVudGljYWwuCisK
KyNkZWZpbmUgV0VCQ09SRV9DT01NQU5EKGNvbW1hbmQpIC0gKHZvaWQpY29tbWFuZDooaWQpc2Vu
ZGVyIHsgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlTZWxlY3RvcjpfY21kXTsgfQorCitXRUJD
T1JFX0NPTU1BTkQoYWxpZ25DZW50ZXIpCitXRUJDT1JFX0NPTU1BTkQoYWxpZ25KdXN0aWZpZWQp
CitXRUJDT1JFX0NPTU1BTkQoYWxpZ25MZWZ0KQorV0VCQ09SRV9DT01NQU5EKGFsaWduUmlnaHQp
CitXRUJDT1JFX0NPTU1BTkQoY29weSkKK1dFQkNPUkVfQ09NTUFORChjdXQpCitXRUJDT1JFX0NP
TU1BTkQoZGVsZXRlKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJkKQorV0VCQ09SRV9D
T01NQU5EKGRlbGV0ZUJhY2t3YXJkQnlEZWNvbXBvc2luZ1ByZXZpb3VzQ2hhcmFjdGVyKQorV0VC
Q09SRV9DT01NQU5EKGRlbGV0ZUZvcndhcmQpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9CZWdp
bm5pbmdPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFw
aCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb0VuZE9mTGluZSkKK1dFQkNPUkVfQ09NTUFORChk
ZWxldGVUb0VuZE9mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvTWFyaykKK1dF
QkNPUkVfQ09NTUFORChkZWxldGVXb3JkQmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRl
V29yZEZvcndhcmQpCitXRUJDT1JFX0NPTU1BTkQoaWdub3JlU3BlbGxpbmcpCitXRUJDT1JFX0NP
TU1BTkQoaW5kZW50KQorV0VCQ09SRV9DT01NQU5EKGluc2VydEJhY2t0YWIpCitXRUJDT1JFX0NP
TU1BTkQoaW5zZXJ0TGluZUJyZWFrKQorV0VCQ09SRV9DT01NQU5EKGluc2VydE5ld2xpbmUpCitX
RUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3IpCitXRUJDT1JF
X0NPTU1BTkQoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKQorV0VCQ09SRV9DT01NQU5EKGluc2Vy
dFRhYikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yKQorV0VC
Q09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0KQorV0VCQ09S
RV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpCitXRUJDT1JFX0NPTU1B
TkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQpCitXRUJDT1JFX0NPTU1BTkQo
bW92ZUJhY2t3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVj
dGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlRG93bikKK1dFQkNPUkVfQ09NTUFORChtb3ZlRG93
bkFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlRm9yd2FyZCkKK1dFQkNP
UkVfQ09NTUFORChtb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFO
RChtb3ZlTGVmdCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikK
K1dFQkNPUkVfQ09NTUFORChtb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24p
CitXRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFncmFwaEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24p
CitXRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVSaWdodEFu
ZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkRvY3Vt
ZW50KQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlT
ZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZMaW5lKQorV0VCQ09S
RV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNP
UkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORCht
b3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09N
TUFORChtb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0Jl
Z2lubmluZ09mU2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92
ZVRvRW5kT2ZEb2N1bWVudCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkRvY3VtZW50QW5k
TW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mTGluZSkKK1dFQkNP
UkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NP
TU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGgpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQ
YXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZT
ZW50ZW5jZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlNlbnRlbmNlQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0xlZnRFbmRPZkxpbmUpCitXRUJDT1JFX0NP
TU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09N
TUFORChtb3ZlVG9SaWdodEVuZE9mTGluZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9SaWdodEVu
ZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVXApCitXRUJD
T1JFX0NPTU1BTkQobW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVXb3JkQmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlm
eVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEZvcndhcmQpCitXRUJDT1JFX0NP
TU1BTkQobW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5E
KG1vdmVXb3JkTGVmdCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZExlZnRBbmRNb2RpZnlTZWxl
Y3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRSaWdodCkKK1dFQkNPUkVfQ09NTUFORCht
b3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG91dGRlbnQp
CitXRUJDT1JFX0NPTU1BTkQocGFnZURvd24pCitXRUJDT1JFX0NPTU1BTkQocGFnZURvd25BbmRN
b2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQocGFnZVVwKQorV0VCQ09SRV9DT01NQU5E
KHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RBbGwpCitX
RUJDT1JFX0NPTU1BTkQoc2VsZWN0TGluZSkKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RQYXJhZ3Jh
cGgpCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0U2VudGVuY2UpCitXRUJDT1JFX0NPTU1BTkQoc2Vs
ZWN0VG9NYXJrKQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdFdvcmQpCitXRUJDT1JFX0NPTU1BTkQo
c2V0TWFyaykKK1dFQkNPUkVfQ09NTUFORChzdWJzY3JpcHQpCitXRUJDT1JFX0NPTU1BTkQoc3Vw
ZXJzY3JpcHQpCitXRUJDT1JFX0NPTU1BTkQoc3dhcFdpdGhNYXJrKQorV0VCQ09SRV9DT01NQU5E
KHRyYW5zcG9zZSkKK1dFQkNPUkVfQ09NTUFORCh1bmRlcmxpbmUpCitXRUJDT1JFX0NPTU1BTkQo
dW5zY3JpcHQpCitXRUJDT1JFX0NPTU1BTkQoeWFuaykKK1dFQkNPUkVfQ09NTUFORCh5YW5rQW5k
U2VsZWN0KQorCisjdW5kZWYgV0VCQ09SRV9DT01NQU5ECisKKyNkZWZpbmUgQ09NTUFORF9QUk9M
T0dVRSBpZiAoW3NlbGYgY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOl9j
bWRdKSByZXR1cm47CisKKy0gKElCQWN0aW9uKXRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjoo
aWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYgKCFbc2VsZiBfaGFz
U2VsZWN0aW9uXSkgeworICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFtOU1Bhc3RlYm9hcmQgX3dlYl9zZXRGaW5kUGFzdGVib2FyZFN0cmluZzpbc2VsZiBz
ZWxlY3RlZFN0cmluZ10gd2l0aE93bmVyOnNlbGZdOworfQorCistIChCT09MKXdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHR5cGVzOihOU0FycmF5
ICopdHlwZXMKK3sKKyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3Nl
bGYgX3RvcEhUTUxWaWV3XV07CisgICAgW3NlbGYgd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2Fy
ZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICByZXR1cm4gWUVTOwor
fQorCistIChCT09MKXJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgaWYgKGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgICAgIFtz
ZWxmIF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6WUVTXTsK
KyAgICBlbHNlCisgICAgICAgIFtzZWxmIF9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6
cGFzdGVib2FyZF07CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoaWQpdmFsaWRSZXF1ZXN0b3JG
b3JTZW5kVHlwZTooTlNTdHJpbmcgKilzZW5kVHlwZSByZXR1cm5UeXBlOihOU1N0cmluZyAqKXJl
dHVyblR5cGUKK3sKKyAgICBCT09MIGlzU2VuZFR5cGVPSyA9ICFzZW5kVHlwZSB8fCAoW1tzZWxm
IHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbl0gY29udGFpbnNPYmplY3Q6c2VuZFR5cGVdICYm
IFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsKKyAgICBCT09MIGlzUmV0dXJuVHlwZU9LID0gIXJldHVy
blR5cGUgfHwgKFtbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzXSBjb250
YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBbc2VsZiBfaXNFZGl0YWJsZV0pOworICAgIGlmIChp
c1NlbmRUeXBlT0sgJiYgaXNSZXR1cm5UeXBlT0spCisgICAgICAgIHJldHVybiBzZWxmOworICAg
IHJldHVybiBbW3NlbGYgbmV4dFJlc3BvbmRlcl0gdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpz
ZW5kVHlwZSByZXR1cm5UeXBlOnJldHVyblR5cGVdOworfQorCisvLyBqdW1wVG9TZWxlY3Rpb24g
aXMgdGhlIG9sZCBuYW1lIGZvciB3aGF0IEFwcEtpdCBub3cgY2FsbHMgY2VudGVyU2VsZWN0aW9u
SW5WaXNpYmxlQXJlYS4gU2FmYXJpCisvLyB3YXMgdXNpbmcgdGhlIG9sZCBqdW1wVG9TZWxlY3Rp
b24gc2VsZWN0b3IgaW4gaXRzIG1lbnUuIE5ld2VyIHZlcnNpb25zIG9mIFNhZmFyaSB3aWxsIHVz
ZSB0aGUKKy8vIHNlbGVjdG9yIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEuIFdlJ2xsIGxl
YXZlIHRoZSBvbGQgc2VsZWN0b3IgaW4gcGxhY2UgZm9yIHR3byByZWFzb25zOgorLy8gKDEpIENv
bXBhdGliaWxpdHkgYmV0d2VlbiBvbGRlciBTYWZhcmkgYW5kIG5ld2VyIFdlYktpdDsgKDIpIG90
aGVyIFdlYktpdC1iYXNlZCBhcHBsaWNhdGlvbnMKKy8vIG1pZ2h0IGJlIHVzaW5nIHRoZSBzZWxl
Y3RvciwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlbS4KKy0gKHZvaWQpanVtcFRvU2Vs
ZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+
cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOworfQor
CistIChOU0NlbGxTdGF0ZVZhbHVlKXNlbGVjdGlvbkhhc1N0eWxlOihDU1NTdHlsZURlY2xhcmF0
aW9uKilzdHlsZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKKyAgICBy
ZXR1cm4ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlKSk7
Cit9CisKKy0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZToo
aWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KK3sKKyAgICBTRUwgYWN0aW9u
ID0gW2l0ZW0gYWN0aW9uXTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAg
ICBpZiAoRG9jdW1lbnQqIGRvYyA9IGZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgIGlmIChk
b2MtPmlzUGx1Z2luRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAg
aWYgKGRvYy0+aXNJbWFnZURvY3VtZW50KCkpIHsgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKGNvcHk6KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZnJh
bWUtPmxvYWRlcigpLT5pc0NvbXBsZXRlKCk7CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VTcGVsbGlu
ZzopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKF9jaGFuZ2VTcGVsbGluZ0Zy
b21NZW51OikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hlY2tTcGVsbGlu
ZzopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNvbXBsZXRlOikKKyAgICAg
ICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVGb250OikpCisgICAgICAgIHJldHVy
biBbc2VsZiBfY2FuRWRpdF07CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihzaG93R3Vl
c3NQYW5lbDopKSB7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAgIC8vIE1hdGNo
IE9TIFggQXBwS2l0IGJlaGF2aW9yIGZvciBwb3N0LVRpZ2VyLiBEb24ndCBjaGFuZ2UgVGlnZXIg
YmVoYXZpb3IuCisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilp
dGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xh
c3NdXSkgeworICAgICAgICAgICAgQk9PTCBwYW5lbFNob3dpbmcgPSBbW1tOU1NwZWxsQ2hlY2tl
ciBzaGFyZWRTcGVsbENoZWNrZXJdIHNwZWxsaW5nUGFuZWxdIGlzVmlzaWJsZV07CisgICAgICAg
ICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6cGFuZWxTaG93aW5nCisgICAgICAgICAgICAgICAgPyBV
SV9TVFJJTkcoIkhpZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiLCAibWVudSBpdGVtIHRpdGxlIikK
KyAgICAgICAgICAgICAgICA6IFVJX1NUUklORygiU2hvdyBTcGVsbGluZyBhbmQgR3JhbW1hciIs
ICJtZW51IGl0ZW0gdGl0bGUiKV07CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICByZXR1cm4g
W3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cihjaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0g
QHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OikKKyAgICAgICAg
ICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRU
b0xlZnQ6KSkgeworICAgICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbjsK
KworICAgICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VCYXNlV3JpdGluZ0RpcmVj
dGlvbjopKSB7CisgICAgICAgICAgICB3cml0aW5nRGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8TlNX
cml0aW5nRGlyZWN0aW9uPihbaXRlbSB0YWddKTsKKyAgICAgICAgICAgIGlmICh3cml0aW5nRGly
ZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpCisgICAgICAgICAgICAgICAgcmV0
dXJuIE5POworICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6KSkKKyAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rp
b24gPSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0Owor
CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAg
ICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewor
ICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eSgiZGlyZWN0aW9uIiwgd3JpdGluZ0Rp
cmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/ICJMVFIiIDogIlJUTCIs
IGVjKTsKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpmcmFtZS0+ZWRpdG9yKCktPnNl
bGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvciht
YWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAq
bWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNL
aW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFN0YXRlOk5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQmFzZVdyaXRpbmdEaXJlY3Rpb246KSkgeworICAg
ICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAg
aWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoImRpcmVjdGlvbiIsICJSVEwiLCBlYyk7Cisg
ICAgICAgICAgICAvLyBUYWtlIGNvbnRyb2wgb2YgdGhlIHRpdGxlIG9mIHRoZSBtZW51IGl0ZW0g
aW5zdGVhZCBvZiBqdXN0IGNoZWNraW5nL3VuY2hlY2tpbmcgaXQgYmVjYXVzZQorICAgICAgICAg
ICAgLy8gYSBjaGVjayB3b3VsZCBiZSBhbWJpZ3VvdXMuCisgICAgICAgICAgICBbbWVudUl0ZW0g
c2V0VGl0bGU6ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkK
KyAgICAgICAgICAgICAgICA/IFVJX1NUUklORygiTGVmdCB0byBSaWdodCIsICJMZWZ0IHRvIFJp
Z2h0IGNvbnRleHQgbWVudSBpdGVtIikKKyAgICAgICAgICAgICAgICA6IFVJX1NUUklORygiUmln
aHQgdG8gTGVmdCIsICJSaWdodCB0byBMZWZ0IGNvbnRleHQgbWVudSBpdGVtIildOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfSAKKyAgICAKKyAgICBp
ZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VBdHRyaWJ1dGVzOikKKyAgICAgICAgICAgIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQ29sb3I6KSAgICAgICAgCisgICAgICAgICAgICB8
fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUZvbnQ6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxm
IF9jYW5FZGl0UmljaGx5XTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjYXBp
dGFsaXplV29yZDopCisgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGxvd2Vy
Y2FzZVdvcmQ6KQorICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih1cHBlcmNh
c2VXb3JkOikpCisgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXSAmJiBbc2VsZiBf
aXNFZGl0YWJsZV07CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjZW50ZXJTZWxlY3Rp
b25JblZpc2libGVBcmVhOikKKyAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
anVtcFRvU2VsZWN0aW9uOikKKyAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
Y29weUZvbnQ6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25dIHx8IChbc2Vs
ZiBfaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2hhc0luc2VydGlvblBvaW50XSk7CisgICAgCisgICAg
aWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6KSkK
KyAgICAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2Nh
bkVkaXRSaWNobHldOworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9pZ25vcmVT
cGVsbGluZ0Zyb21NZW51OikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoX2xl
YXJuU3BlbGxpbmdGcm9tTWVudTopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9y
KHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjopKQorICAgICAgICByZXR1cm4gW3NlbGYgX2hh
c1NlbGVjdGlvbl07CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGU6KSB8
fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlQXNQbGFpblRleHQ6KSkKKyAgICAgICAgcmV0dXJu
IGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRp
dG9yKCktPmNhblBhc3RlKCkpOworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBh
c3RlQXNSaWNoVGV4dDopKQorICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxQYXN0ZSgpCisgICAgICAgICAgICB8fCAoZnJhbWUtPmVkaXRvcigpLT5jYW5Q
YXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkp
OworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBlcmZvcm1GaW5kUGFuZWxBY3Rp
b246KSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKF9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTopKQorICAgICAgICByZXR1cm4gW3NlbGYg
X2hhc1NlbGVjdGlvbl07CisgICAgCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlR3JhbW1hckNoZWNraW5nOikpIHsKKyAgICAgICAg
Ly8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFt
bWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCB2YWxpZGF0ZSAKKyAgICAgICAgLy8gdGhl
IHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3ZSBpbXBsZW1lbnQgaXQgaGVyZSwgYW5kIHdlIG11c3Qg
aW1wbGVtZW50IGl0IGhlcmUgYmVjYXVzZSB0aGUgQXBwS2l0IAorICAgICAgICAvLyBjb2RlIGNo
ZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9
IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNz
OltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3Nl
bGYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwor
ICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3Iob3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDopKSB7CisgICAg
ICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBp
ZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgeworICAgICAg
ICAgICAgQk9PTCBwYW5lbFNob3dpbmcgPSBbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIHN1YnN0aXR1dGlvbnNQYW5lbF0gaXNWaXNpYmxlXTsKKyAgICAgICAgICAgIFttZW51
SXRlbSBzZXRUaXRsZTpwYW5lbFNob3dpbmcKKyAgICAgICAgICAgICAgICA/IFVJX1NUUklORygi
SGlkZSBTdWJzdGl0dXRpb25zIiwgIm1lbnUgaXRlbSB0aXRsZSIpCisgICAgICAgICAgICAgICAg
OiBVSV9TVFJJTkcoIlNob3cgU3Vic3RpdHV0aW9ucyIsICJtZW51IGl0ZW0gdGl0bGUiKV07Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9CisgICAgLy8g
RklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBsb2dpYywg
YnV0IHdlIG11c3QgdmFsaWRhdGUgCisgICAgLy8gdGhlIHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3
ZSBpbXBsZW1lbnQgaXQgaGVyZSwgYW5kIHdlIG11c3QgaW1wbGVtZW50IGl0IGhlcmUgYmVjYXVz
ZSB0aGUgQXBwS2l0IAorICAgIC8vIGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KSkgewor
ICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAg
ICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAg
ICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgc21hcnRJbnNlcnREZWxldGVFbmFibGVk
XSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVk
aXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNR
dW90ZVN1YnN0aXR1dGlvbjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5T
TWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05T
TWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBp
c0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0
YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9CisgICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjopKSB7CisgICAg
ICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBp
ZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAg
ICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFi
bGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gW3NlbGYgX2Nh
bkVkaXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0
aWNEYXNoU3Vic3RpdHV0aW9uOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAo
TlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpb
TlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxm
IGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZT
dGF0ZV07CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDopKSB7Cisg
ICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAg
ICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAg
ICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBbc2Vs
ZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJ
dGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9m
Q2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0
ZTpbc2VsZiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWRdID8gTlNPblN0YXRl
IDogTlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQor
I2VuZGlmCisgICAgCisgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29t
bWFuZEJ5U2VsZWN0b3I6YWN0aW9uXTsKKyAgICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKSB7
CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAg
ICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAg
ICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpraXQoY29tbWFuZC5zdGF0ZSgpKV07CisgICAg
ICAgIHJldHVybiBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgIH0KKworICAgIHJldHVybiBZRVM7
Cit9CisKKy0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVk
VXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KK3sKKyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZHVy
aW5nIHRlYXJkb3duIHdoZW4gX3dlYlZpZXcgaXMgbmlsLiBSZXR1cm4gTk8gd2hlbiB0aGlzIGhh
cHBlbnMsIGJlY2F1c2UgQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuCisgICAgLy8gYXNz
dW1lcyB0aGUgV2ViVklldyBpcyBub24tbmlsLgorICAgIGlmICghW3NlbGYgX3dlYlZpZXddKQor
ICAgICAgICByZXR1cm4gTk87CisgICAgQk9PTCByZXN1bHQgPSBbc2VsZiB2YWxpZGF0ZVVzZXJJ
bnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOml0ZW1dOworICAgIHJldHVybiBDYWxsVUlEZWxl
Z2F0ZVJldHVybmluZ0Jvb2xlYW4ocmVzdWx0LCBbc2VsZiBfd2ViVmlld10sIEBzZWxlY3Rvcih3
ZWJWaWV3OnZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06ZGVmYXVsdFZhbGlkYXRpb246KSwgaXRl
bSwgcmVzdWx0KTsKK30KKworLSAoQk9PTClhY2NlcHRzRmlyc3RSZXNwb25kZXIKK3sKKyAgICAv
LyBEb24ndCBhY2NlcHQgZmlyc3QgcmVzcG9uZGVyIHdoZW4gd2UgZmlyc3QgY2xpY2sgb24gdGhp
cyB2aWV3LgorICAgIC8vIFdlIGhhdmUgdG8gcGFzcyB0aGUgZXZlbnQgZG93biB0aHJvdWdoIFdl
YkNvcmUgZmlyc3QgdG8gYmUgc3VyZSB3ZSBkb24ndCBoaXQgYSBzdWJ2aWV3LgorICAgIC8vIERv
IGFjY2VwdCBmaXJzdCByZXNwb25kZXIgYXQgYW55IG90aGVyIHRpbWUsIGZvciBleGFtcGxlIGZy
b20ga2V5Ym9hcmQgZXZlbnRzLAorICAgIC8vIG9yIGZyb20gY2FsbHMgYmFjayBmcm9tIFdlYkNv
cmUgb25jZSB3ZSBiZWdpbiBtb3VzZS1kb3duIGV2ZW50IGhhbmRsaW5nLgorICAgIE5TRXZlbnQg
KmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CisgICAgaWYgKFtldmVudCB0eXBlXSA9PSBO
U0xlZnRNb3VzZURvd24KKyAgICAgICAgICAgICYmICFfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURv
d25FdmVudAorICAgICAgICAgICAgJiYgTlNQb2ludEluUmVjdChbZXZlbnQgbG9jYXRpb25Jbldp
bmRvd10sIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIHZpc2libGVSZWN0XSB0b1ZpZXc6bmlsXSkp
IHsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICByZXR1cm4gWUVTOworfQorCistIChC
T09MKW1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uCit7CisgICAgLy8gVGhpcyBtZXRob2QgaGVs
cHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFdlYkhUTUxWaWV3IHNob3VsZCBtYWludGFpbgor
ICAgIC8vIGFuIGluYWN0aXZlIHNlbGVjdGlvbiB3aGVuIGl0J3Mgbm90IGZpcnN0IHJlc3BvbmRl
ci4KKyAgICAvLyBUcmFkaXRpb25hbGx5LCB0aGVzZSB2aWV3cyBoYXZlIG5vdCBtYWludGFpbmVk
IHN1Y2ggc2VsZWN0aW9ucywKKyAgICAvLyBjbGVhcmluZyB0aGVtIHdoZW4gdGhlIHZpZXcgd2Fz
IG5vdCBmaXJzdCByZXNwb25kZXIuIEhvd2V2ZXIsCisgICAgLy8gdG8gZml4IGJ1Z3MgbGlrZSB0
aGlzIG9uZToKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzY3MjA4OD46ICJFZGl0YWJsZSBXZWJW
aWV3cyBzaG91bGQgbWFpbnRhaW4gYSBzZWxlY3Rpb24gZXZlbiAKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGVuIHRoZXkncmUgbm90IGZpcnN0UmVzcG9uZGVyIgorICAgIC8v
IGl0IHdhcyBkZWNpZGVkIHRvIGFkZCBhIHN3aXRjaCB0byBhY3QgbW9yZSBsaWtlIGFuIE5TVGV4
dFZpZXcuCisKKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBtYWludGFpbnNJbmFjdGl2ZVNlbGVj
dGlvbl0pCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICAvLyBQcmVkaWN0IHRoZSBjYXNlIHdo
ZXJlIHdlIGFyZSBsb3NpbmcgZmlyc3QgcmVzcG9uZGVyIHN0YXR1cyBvbmx5IHRvCisgICAgLy8g
Z2FpbiBpdCBiYWNrIGFnYWluLiBXYW50IHRvIGtlZXAgdGhlIHNlbGVjdGlvbiBpbiB0aGF0IGNh
c2UuCisgICAgaWQgbmV4dFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIF9uZXdGaXJzdFJlc3Bv
bmRlckFmdGVyUmVzaWduaW5nXTsKKyAgICBpZiAoW25leHRSZXNwb25kZXIgaXNLaW5kT2ZDbGFz
czpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgaWQgY29udGVudFZpZXcgPSBbbmV4
dFJlc3BvbmRlciBjb250ZW50Vmlld107CisgICAgICAgIGlmIChjb250ZW50VmlldykKKyAgICAg
ICAgICAgIG5leHRSZXNwb25kZXIgPSBjb250ZW50VmlldzsKKyAgICB9CisgICAgaWYgKFtuZXh0
UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TQ2xpcFZpZXcgY2xhc3NdXSkgeworICAgICAgICBp
ZCBkb2N1bWVudFZpZXcgPSBbbmV4dFJlc3BvbmRlciBkb2N1bWVudFZpZXddOworICAgICAgICBp
ZiAoZG9jdW1lbnRWaWV3KQorICAgICAgICAgICAgbmV4dFJlc3BvbmRlciA9IGRvY3VtZW50Vmll
dzsKKyAgICB9CisgICAgaWYgKG5leHRSZXNwb25kZXIgPT0gc2VsZikKKyAgICAgICAgcmV0dXJu
IFlFUzsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJvb2wgbmV4dFJlc3BvbmRlcklzSW5X
ZWJWaWV3ID0gW25leHRSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0KKyAg
ICAgICAgJiYgW25leHRSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6W1tbc2VsZiBfd2ViVmlld10g
bWFpbkZyYW1lXSBmcmFtZVZpZXddXTsKKworICAgIHJldHVybiBzZWxlY3Rpb25Jc0VkaXRhYmxl
ICYmIG5leHRSZXNwb25kZXJJc0luV2ViVmlldzsKK30KKworLSAodm9pZClhZGRNb3VzZU1vdmVk
T2JzZXJ2ZXIKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5kYXRhU291cmNlIHx8ICFbc2VsZiBfaXNU
b3BIVE1MVmlld10gfHwgX3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25z
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBVbmxlc3MgdGhlIERhc2hib2FyZCBhc2tzIHVz
IHRvIGRvIHRoaXMgZm9yIGFsbCB3aW5kb3dzLCBrZWVwIGFuIG9ic2VydmVyIGdvaW5nIG9ubHkg
Zm9yIHRoZSBrZXkgd2luZG93LgorICAgIGlmICghKFtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93
XSAKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgICAgICAgICB8fCBbW3NlbGYg
X3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvckFsd2F5c1Nl
bmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10KKyNlbmRpZgorICAgICAgICApKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKG1vdXNlTW92ZWROb3RpZmljYXRpb246KQor
ICAgICAgICBuYW1lOldLTW91c2VNb3ZlZE5vdGlmaWNhdGlvbigpIG9iamVjdDpuaWxdOworICAg
IFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07CisgICAgX3ByaXZhdGUtPm9ic2VydmluZ01v
dXNlTW92ZWROb3RpZmljYXRpb25zID0gdHJ1ZTsKK30KKworLSAodm9pZClyZW1vdmVNb3VzZU1v
dmVkT2JzZXJ2ZXIKK3sKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgLy8gRG9u
J3QgcmVtb3ZlIHRoZSBvYnNlcnZlciBpZiB3ZSdyZSBydW5uaW5nIHRoZSBEYXNoYm9hcmQuCisg
ICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJl
aGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRzVG9BbGxXaW5kb3dzXSkKKyAgICAgICAgcmV0dXJu
OworI2VuZGlmCisKKyAgICBbW3NlbGYgX3dlYlZpZXddIF9tb3VzZURpZE1vdmVPdmVyRWxlbWVu
dDpuaWwgbW9kaWZpZXJGbGFnczowXTsKKyAgICBbc2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2Vy
dmVyVW5jb25kaXRpb25hbGx5XTsKK30KKworLSAodm9pZClhZGRTdXBlcnZpZXdPYnNlcnZlcnMK
K3sKKyAgICBpZiAoX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMpCisg
ICAgICAgIHJldHVybjsKKworICAgIE5TVmlldyAqc3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3
XTsKKyAgICBpZiAoIXN1cGVydmlldyB8fCAhW3NlbGYgd2luZG93XSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgW25vdGlmaWNhdGlvbkNl
bnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZnJhbWVPckJvdW5kc0No
YW5nZWQpIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVy
dmlld107CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3RvcihfZnJhbWVPckJvdW5kc0NoYW5nZWQpIG5hbWU6TlNWaWV3Qm91bmRzRGlkQ2hh
bmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOworICAgIAorICAgIC8vIEluIGFkZGl0
aW9uIHRvIHJlZ2lzdGVyaW5nIGZvciBmcmFtZS9ib3VuZHMgY2hhbmdlIG5vdGlmaWNhdGlvbnMs
IGNhbGwgLV9mcmFtZU9yQm91bmRzQ2hhbmdlZC4KKyAgICAvLyBJdCB3aWxsIGNoZWNrIHRoZSBj
dXJyZW50IHNjcm9sbCBhZ2FpbnN0IHRoZSBwcmV2aW91cyBsYXlvdXQncyBzY3JvbGwuICBXZSBu
ZWVkIHRvCisgICAgLy8gZG8gdGhpcyBoZXJlIHRvIGNhdGNoIHRoZSBjYXNlIHdoZXJlIHRoZSBX
ZWJWaWV3IGlzIGxhaWQgb3V0IGF0IG9uZSBzaXplLCByZW1vdmVkIGZyb20gaXRzCisgICAgLy8g
d2luZG93LCByZXNpemVkLCBhbmQgaW5zZXJ0ZWQgaW50byBhbm90aGVyIHdpbmRvdy4gIE91ciBm
cmFtZS9ib3VuZHMgY2hhbmdlZCBub3RpZmljYXRpb25zCisgICAgLy8gd2lsbCBub3QgYmUgc2Vu
dCBpbiB0aGF0IHNpdHVhdGlvbiwgc2luY2Ugd2Ugb25seSB3YXRjaCBmb3IgY2hhbmdlcyB3aGls
ZSBpbiB0aGUgdmlldyBoaWVyYXJjaHkuCisgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2Vk
XTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucyA9
IHRydWU7Cit9CisKKy0gKHZvaWQpYWRkV2luZG93T2JzZXJ2ZXJzCit7CisgICAgaWYgKF9wcml2
YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgaWYgKCF3aW5kb3cp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZp
Y2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOworICAg
IFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
d2luZG93RGlkQmVjb21lS2V5OikgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlv
biBvYmplY3Q6bmlsXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZFJlc2lnbktleTopIG5hbWU6TlNXaW5kb3dEaWRS
ZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgW25vdGlmaWNhdGlvbkNlbnRl
ciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dXaWxsQ2xvc2U6KSBu
YW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOworICAgIFtu
b3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2lu
ZG93V2lsbE9yZGVyT25TY3JlZW46KSBuYW1lOldLV2luZG93V2lsbE9yZGVyT25TY3JlZW5Ob3Rp
ZmljYXRpb24oKSBvYmplY3Q6d2luZG93XTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5n
V2luZG93Tm90aWZpY2F0aW9ucyA9IHRydWU7Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9T
dXBlcnZpZXc6KE5TVmlldyAqKW5ld1N1cGVydmlldworeworICAgIFtzZWxmIF9yZW1vdmVTdXBl
cnZpZXdPYnNlcnZlcnNdOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9TdXBlcnZpZXcKK3sK
KyAgICBpZiAoW3NlbGYgc3VwZXJ2aWV3XSAhPSBuaWwpCisgICAgICAgIFtzZWxmIGFkZFN1cGVy
dmlld09ic2VydmVyc107Cit9CisKK3N0YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZl
U3RhdGVUaW1lckNhbGxiYWNrKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkICppbmZvKQor
eworICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICopaW5mbzsKKyAgICBbdmll
dyBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKK30KKworLSAodm9pZCl2aWV3V2lsbE1v
dmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGlu
ZyBpZiB3ZSBhcmVuJ3QgaW5pdGlhbGl6ZWQuICBUaGlzIGhhcHBlbnMKKyAgICAvLyB3aGVuIGRl
Y29kaW5nIGEgV2ViVmlldy4gIFdoZW4gV2ViVmlld3MgYXJlIGRlY29kZWQgdGhlaXIgc3Vidmll
d3MKKyAgICAvLyBhcmUgY3JlYXRlZCBieSBpbml0V2l0aENvZGVyOiBhbmQgc28gd29uJ3QgYmUg
bm9ybWFsbHkKKyAgICAvLyBpbml0aWFsaXplZC4gIFRoZSBzdHViIHZpZXdzIGFyZSBkaXNjYXJk
ZWQgYnkgV2ViVmlldy4KKyAgICBpZiAoIV9wcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRTogU29tZSBvZiB0aGVzZSBjYWxscyBtYXkgbm90IHdvcmsgYmVjYXVzZSB0aGlz
IHZpZXcgbWF5IGJlIGFscmVhZHkgcmVtb3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2aWV3LgorICAgIFtz
ZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHldOworICAgIFtzZWxm
IF9yZW1vdmVXaW5kb3dPYnNlcnZlcnNdOworICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNl
cnZlcnNdOworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07CisgICAgW3Nl
bGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsKKyAgICAKKyAgICBb
W3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIHN0b3BBbGxQbHVnaW5zXTsKK30KKworLSAodm9pZCl2
aWV3RGlkTW92ZVRvV2luZG93Cit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgYXJl
bid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBwZW5zCisgICAgLy8gd2hlbiBkZWNvZGluZyBhIFdl
YlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBkZWNvZGVkIHRoZWlyIHN1YnZpZXdzCisgICAgLy8g
YXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2RlcjogYW5kIHNvIHdvbid0IGJlIG5vcm1hbGx5Cisg
ICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1YiB2aWV3cyBhcmUgZGlzY2FyZGVkIGJ5IFdlYlZp
ZXcuCisgICAgaWYgKCFfcHJpdmF0ZSB8fCBfcHJpdmF0ZS0+Y2xvc2VkKQorICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKKyAgICBpZiAo
W3NlbGYgd2luZG93XSkgeworICAgICAgICBfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0g
W1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmlnaW47CisgICAgICAgIFtzZWxmIGFkZFdpbmRv
d09ic2VydmVyc107CisgICAgICAgIFtzZWxmIGFkZFN1cGVydmlld09ic2VydmVyc107CisgICAg
ICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNlcnZlcl07CisKKyAgICAgICAgLy8gU2NoZWR1bGUg
dGhpcyB1cGRhdGUsIHJhdGhlciB0aGFuIG1ha2luZyB0aGUgY2FsbCByaWdodCBub3cuCisgICAg
ICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCBwbGFjaW5nIHRoZSBjYXJldCBpbiB0aGUganVzdC1p
bnN0YWxsZWQgdmlldyByZXF1aXJlcworICAgICAgICAvLyB0aGUgSFRNTC9YTUwgZG9jdW1lbnQg
dG8gYmUgYXZhaWxhYmxlIG9uIHRoZSBXZWJDb3JlIHNpZGUsIGJ1dCBpdCBpcyBub3QKKyAgICAg
ICAgLy8gYXQgdGhlIHRpbWUgdGhpcyBjb2RlIGlzIHJ1bm5pbmcuIEhvd2V2ZXIsIGl0IHdpbGwg
YmUgdGhlcmUgb24gdGhlIG5leHQKKyAgICAgICAgLy8gY3Jhbmsgb2YgdGhlIHJ1biBsb29wLiBE
b2luZyB0aGlzIGhlbHBzIHRvIG1ha2UgYSBibGlua2luZyBjYXJldCBhcHBlYXIgCisgICAgICAg
IC8vIGluIGEgbmV3LCBlbXB0eSB3aW5kb3cgImF1dG9tYXRpYyIuCisgICAgICAgIGlmICghX3By
aXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKSB7CisgICAgICAgICAgICBD
RlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4dCA9IHsgMCwgc2VsZiwgTlVMTCwgTlVMTCwgTlVM
TCB9OworICAgICAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRp
bWVyID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUoTlVMTCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50
KCksIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1l
ckNhbGxiYWNrLCAmY29udGV4dCk7CisgICAgICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1
bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVU
aW1lciwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBzdGFydEFsbFBsdWdpbnNdOworCisgICAgICAg
IF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBOU1plcm9Qb2ludDsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cK
K3sKKyAgICBbW3NlbGYgc3Vidmlld3NdIF93ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVj
dG9yOkBzZWxlY3Rvcih2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KSB3aXRoT2JqZWN0Omhvc3RX
aW5kb3ddOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93Cit7CisgICAgW1tz
ZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0
b3Iodmlld0RpZE1vdmVUb0hvc3RXaW5kb3cpIHdpdGhPYmplY3Q6bmlsXTsKK30KKworCistICh2
b2lkKWFkZFN1YnZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICBbc3VwZXIgYWRkU3Vidmlldzp2
aWV3XTsKKworICAgIGlmIChbV2ViUGx1Z2luQ29udHJvbGxlciBpc1BsdWdJblZpZXc6dmlld10p
CisgICAgICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gYWRkUGx1Z2luOnZpZXddOworfQor
CistICh2b2lkKXdpbGxSZW1vdmVTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Cit7CisgICAgaWYg
KFtXZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzpzdWJ2aWV3XSkKKyAgICAgICAgW1tz
ZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95UGx1Z2luOnN1YnZpZXddOworCisgICAgW3N1
cGVyIHdpbGxSZW1vdmVTdWJ2aWV3OnN1YnZpZXddOworfQorCistICh2b2lkKXJlYXBwbHlTdHls
ZXMKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5uZWVkc1RvQXBwbHlTdHlsZXMpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyNpZmRlZiBMT0dfVElNRVMKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29s
dXRlVGltZUdldEN1cnJlbnQoKTsKKyNlbmRpZgorCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3
ID0gY29yZUZyYW1lLT52aWV3KCkpCisgICAgICAgICAgICBjb3JlVmlldy0+c2V0TWVkaWFUeXBl
KF9wcml2YXRlLT5wcmludGluZyA/ICJwcmludCIgOiAic2NyZWVuIik7CisgICAgICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICBk
b2N1bWVudC0+c2V0UHJpbnRpbmcoX3ByaXZhdGUtPnByaW50aW5nKTsKKyAgICAgICAgY29yZUZy
YW1lLT5yZWFwcGx5U3R5bGVzKCk7CisgICAgfQorICAgIAorI2lmZGVmIExPR19USU1FUyAgICAg
ICAgCisgICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBz
dGFydDsKKyAgICBMT0coVGltaW5nLCAiJXMgYXBwbHkgc3R5bGUgc2Vjb25kcyA9ICVmIiwgW3Nl
bGYgVVJMXSwgdGhpc1RpbWUpOworI2VuZGlmCisKKyAgICBfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5
U3R5bGVzID0gTk87Cit9CisKKy8vIERvIGEgbGF5b3V0LCBidXQgc2V0IHVwIGEgbmV3IGZpeGVk
IHdpZHRoIGZvciB0aGUgcHVycG9zZXMgb2YgZG9pbmcgcHJpbnRpbmcgbGF5b3V0LgorLy8gbWlu
UGFnZVdpZHRoPT0wIGltcGxpZXMgYSBub24tcHJpbnRpbmcgbGF5b3V0CistICh2b2lkKWxheW91
dFRvTWluaW11bVBhZ2VXaWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6
KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3RpbmdWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6
ZQoreworICAgIFtzZWxmIHJlYXBwbHlTdHlsZXNdOworICAgIAorICAgIGlmICghW3NlbGYgX25l
ZWRzTGF5b3V0XSkKKyAgICAgICAgcmV0dXJuOworCisjaWZkZWYgTE9HX1RJTUVTICAgICAgICAK
KyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKKyNlbmRpZgor
CisgICAgTE9HKFZpZXcsICIlQCBkb2luZyBsYXlvdXQiLCBzZWxmKTsKKworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoRnJhbWVWaWV3KiBjb3JlVmlldyA9IGNvcmVGcmFtZS0+
dmlldygpKSB7CisgICAgICAgIGlmIChtaW5QYWdlV2lkdGggPiAwLjApCisgICAgICAgICAgICBj
b3JlVmlldy0+Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZ2UobWluUGFnZVdpZHRoLCBtYXhQ
YWdlV2lkdGgsIGFkanVzdFZpZXdTaXplKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBj
b3JlVmlldy0+Zm9yY2VMYXlvdXQoIWFkanVzdFZpZXdTaXplKTsKKyAgICAgICAgICAgIGlmIChh
ZGp1c3RWaWV3U2l6ZSkKKyAgICAgICAgICAgICAgICBjb3JlVmlldy0+YWRqdXN0Vmlld1NpemUo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyNpZmRlZiBMT0dfVElNRVMgICAgICAgIAorICAg
IGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Cisg
ICAgTE9HKFRpbWluZywgIiVzIGxheW91dCBzZWNvbmRzID0gJWYiLCBbc2VsZiBVUkxdLCB0aGlz
VGltZSk7CisjZW5kaWYKK30KKworLSAodm9pZClsYXlvdXQKK3sKKyAgICBbc2VsZiBsYXlvdXRU
b01pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0aW5nVmll
d1NpemU6Tk9dOworfQorCisvLyBEZWxpdmVyIG1vdXNldXAgZXZlbnRzIHRvIHRoZSBET00gZm9y
IGJ1dHRvbiAyLgorLSAodm9pZClyaWdodE1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAg
IC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB3ZSBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCB0
aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNlZC4KKyAgICAvLyBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0
b3JlbGVhc2luZyBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gbGF0ZXIgaGVy
ZSBvcgorICAgIC8vIGluc2lkZSBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0
b3JlbGVhc2VdOworCisgICAgW3N1cGVyIHJpZ2h0TW91c2VVcDpldmVudF07CisKKyAgICBpZiAo
RnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlVXAoZXZlbnQpOworfQorCistIChOU01lbnUgKiltZW51
Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhh
dCBpZiB3ZSBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCB0aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNl
ZC4KKyAgICAvLyBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZyBwcmV2ZW50cyB0aGF0
IGZyb20gY2F1c2luZyBhIHByb2JsZW0gbGF0ZXIgaGVyZSBvcgorICAgIC8vIGluc2lkZSBBcHBL
aXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgW19wcml2
YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwor
CisgICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgUGFnZSogcGFnZSA9
IGNvcmVGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIC8vIE1hdGNoIGJlaGF2aW9yIG9mIG90aGVyIGJyb3dzZXJzIGJ5IHNlbmRpbmcgYSBt
b3VzZWRvd24gZXZlbnQgZm9yIHJpZ2h0IGNsaWNrcy4KKyAgICBfcHJpdmF0ZS0+aGFuZGxpbmdN
b3VzZURvd25FdmVudCA9IFlFUzsKKyAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+
Y2xlYXJDb250ZXh0TWVudSgpOworICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNl
RG93bihldmVudCk7CisgICAgQk9PTCBoYW5kbGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsK
KyAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POworCisgICAgaWYgKCFo
YW5kbGVkRXZlbnQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBSZS1nZXQgcGFnZSwg
c2luY2UgaXQgbWlnaHQgaGF2ZSBnb25lIGF3YXkgZHVyaW5nIGV2ZW50IGhhbmRsaW5nLgorICAg
IHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBDb250ZXh0TWVudSogY29yZU1lbnUgPSBwYWdlLT5jb250ZXh0TWVudUNv
bnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKTsKKyAgICBpZiAoIWNvcmVNZW51KQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgTlNBcnJheSogbWVudUl0ZW1zID0gY29yZU1lbnUtPnBsYXRmb3Jt
RGVzY3JpcHRpb24oKTsKKyAgICBpZiAoIW1lbnVJdGVtcykKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIE5TVUludGVnZXIgY291bnQgPSBbbWVudUl0ZW1zIGNvdW50XTsKKyAgICBpZiAoIWNv
dW50KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNNZW51KiBtZW51ID0gW1tbTlNNZW51
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgW21lbnUgYWRkSXRlbTpbbWVudUl0ZW1zIG9iamVjdEF0
SW5kZXg6aV1dOworICAgIHJldHVybiBtZW51OworfQorCistIChCT09MKXNlYXJjaEZvcjooTlNT
dHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9P
TCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnCit7CisgICAgcmV0dXJuIFtzZWxmIHNlYXJj
aEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndhcmQgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyB3cmFw
OndyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246Tk9dOworfQorCistICh2b2lkKWNsZWFyRm9jdXMK
K3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAo
IWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
cmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgZG9jdW1lbnQtPnNldEZvY3VzZWROb2RlKDApOworfQorCistIChCT09MKWlz
T3BhcXVlCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gZHJhd3NCYWNrZ3JvdW5kXTsK
K30KKworLSAodm9pZClzZXROZWVkc0Rpc3BsYXk6KEJPT0wpZmxhZworeworICAgIExPRyhWaWV3
LCAiJUAgc2V0TmVlZHNEaXNwbGF5OiVAIiwgc2VsZiwgZmxhZyA/IEAiWUVTIiA6IEAiTk8iKTsK
KyAgICBbc3VwZXIgc2V0TmVlZHNEaXNwbGF5OmZsYWddOworfQorCistICh2b2lkKXNldE5lZWRz
TGF5b3V0OiAoQk9PTClmbGFnCit7CisgICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc0xheW91dDol
QCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7CisgICAgaWYgKCFmbGFnKQorICAgICAg
ICByZXR1cm47IC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIHNheSB5b3UgZG9uJ3QgbmVlZCBhIGxheW91
dC4KKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hl
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpKQorICAgICAgICAgICAgdmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9
Cit9CisKKy0gKHZvaWQpc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiAoQk9PTClmbGFnCit7CisgICAg
TE9HKFZpZXcsICIlQCBzZXROZWVkc1RvQXBwbHlTdHlsZXM6JUAiLCBzZWxmLCBmbGFnID8gQCJZ
RVMiIDogQCJOTyIpOworICAgIF9wcml2YXRlLT5uZWVkc1RvQXBwbHlTdHlsZXMgPSBmbGFnOwor
fQorCistICh2b2lkKWRyYXdTaW5nbGVSZWN0OihOU1JlY3QpcmVjdAoreworICAgIFtOU0dyYXBo
aWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CisgICAgTlNSZWN0Q2xpcChyZWN0KTsKKyAg
ICAgICAgCisgICAgQVNTRVJUKFtbc2VsZiBzdXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNs
aXBWaWV3IGNsYXNzXV0pOworCisgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10g
c2V0QWRkaXRpb25hbENsaXA6cmVjdF07CisKKyAgICBAdHJ5IHsKKyAgICAgICAgaWYgKFtzZWxm
IF90cmFuc3BhcmVudEJhY2tncm91bmRdKSB7CisgICAgICAgICAgICBbW05TQ29sb3IgY2xlYXJD
b2xvcl0gc2V0XTsKKyAgICAgICAgICAgIE5TUmVjdEZpbGwgKHJlY3QpOworICAgICAgICB9CisK
KyAgICAgICAgW1tzZWxmIF9mcmFtZV0gX2RyYXdSZWN0OnJlY3QgY29udGVudHNPbmx5OllFU107
CisKKyAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKworICAgICAg
ICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGZvciA8cmRhcjovL3Byb2JsZW0vNTAyMzU0NT4uIFdl
IGNhbiBoaXQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBkcmF3UmVjdCB3aWxsIGJlCisgICAgICAg
IC8vIGNhbGxlZCBhZnRlciB0aGUgV2ViVmlldyBoYXMgY2xvc2VkLiBJZiB0aGUgY2xpZW50IGRp
ZCBub3QgcHJvcGVybHkgY2xvc2UgdGhlIFdlYlZpZXcgYW5kIHNldCB0aGUgCisgICAgICAgIC8v
IFVJRGVsZWdhdGUgdG8gbmlsLCB0aGVuIHRoZSBVSURlbGVnYXRlIHdpbGwgYmUgc3RhbGUgYW5k
IHRoaXMgY29kZSB3aWxsIGNyYXNoLiAKKyAgICAgICAgc3RhdGljIEJPT0wgdmVyc2lvbjNPckxh
dGVyQ2xpZW50ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJ
VEhPVVRfUVVJQ0tCT09LU19RVUlSSyk7CisgICAgICAgIGlmICh2ZXJzaW9uM09yTGF0ZXJDbGll
bnQpCisgICAgICAgICAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
d2ViVmlldyBkaWREcmF3UmVjdDpbd2ViVmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3OnNl
bGZdXTsKKworICAgICAgICBpZiAoV2ViTm9kZUhpZ2hsaWdodCAqY3VycmVudEhpZ2hsaWdodCA9
IFt3ZWJWaWV3IGN1cnJlbnROb2RlSGlnaGxpZ2h0XSkKKyAgICAgICAgICAgIFtjdXJyZW50SGln
aGxpZ2h0IHNldE5lZWRzVXBkYXRlSW5UYXJnZXRWaWV3UmVjdDpbc2VsZiBjb252ZXJ0UmVjdDpy
ZWN0IHRvVmlldzpbY3VycmVudEhpZ2hsaWdodCB0YXJnZXRWaWV3XV1dOworCisgICAgICAgIFso
V2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHJlc2V0QWRkaXRpb25hbENsaXBdOworCisg
ICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisgICAgfSBA
Y2F0Y2ggKE5TRXhjZXB0aW9uICpsb2NhbEV4Y2VwdGlvbikgeworICAgICAgICBbKFdlYkNsaXBW
aWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlwXTsKKyAgICAgICAgW05T
R3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKKyAgICAgICAgTE9HX0VSUk9S
KCJFeGNlcHRpb24gY2F1Z2h0IHdoaWxlIGRyYXdpbmc6ICVAIiwgbG9jYWxFeGNlcHRpb24pOwor
ICAgICAgICBbbG9jYWxFeGNlcHRpb24gcmFpc2VdOworICAgIH0KK30KKworLSAodm9pZClkcmF3
UmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKKyAgICBMT0co
VmlldywgIiVAIGRyYXdpbmciLCBzZWxmKTsKKworICAgIGNvbnN0IE5TUmVjdCAqcmVjdHM7Cisg
ICAgTlNJbnRlZ2VyIGNvdW50OworICAgIFtzZWxmIGdldFJlY3RzQmVpbmdEcmF3bjomcmVjdHMg
Y291bnQ6JmNvdW50XTsKKworICAgIEJPT0wgc3Vidmlld3NXZXJlU2V0QXNpZGUgPSBfcHJpdmF0
ZS0+c3Vidmlld3NTZXRBc2lkZTsKKyAgICBpZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCisgICAg
ICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOworCisjaWZkZWYgTE9HX1RJTUVTCisgICAgZG91
YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CisjZW5kaWYKKworICAgIGlm
IChbW3NlbGYgX3dlYlZpZXddIF9tdXN0RHJhd1VuaW9uZWRSZWN0OnJlY3Qgc2luZ2xlUmVjdHM6
cmVjdHMgY291bnQ6Y291bnRdKQorICAgICAgICBbc2VsZiBkcmF3U2luZ2xlUmVjdDpyZWN0XTsK
KyAgICBlbHNlCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJlY3RzW2ldXTsKKworI2lmZGVmIExPR19USU1F
UworICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3Rh
cnQ7CisgICAgTE9HKFRpbWluZywgIiVzIGRyYXcgc2Vjb25kcyA9ICVmIiwgd2lkZ2V0LT5wYXJ0
KCktPmJhc2VVUkwoKS5VUkwoKS5sYXRpbjEoKSwgdGhpc1RpbWUpOworI2VuZGlmCisKKyAgICBp
ZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCisgICAgICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdz
XTsKKyAgICAgICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChb
W3NlbGYgX3dlYlZpZXddIF9uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uXSkgewor
ICAgICAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHNvIHRoYXQgZHJhd2luZyBpbnRvIHRo
ZSBOU1ZpZXcgYW5kCisgICAgICAgIC8vIENBTGF5ZXIgdXBkYXRlcyBhcHBlYXIgb24gdGhlIHNj
cmVlbiBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICBbW3NlbGYgd2luZG93XSBkaXNhYmxlU2Ny
ZWVuVXBkYXRlc1VudGlsRmx1c2hdOworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07Cisg
ICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3NldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb246Tk9dOworICAgIH0KKyNlbmRpZgorfQorCisvLyBUdXJuIG9mZiB0aGUgYWRkaXRpb25h
bCBjbGlwIHdoaWxlIGNvbXB1dGluZyBvdXIgdmlzaWJsZVJlY3QuCistIChOU1JlY3QpdmlzaWJs
ZVJlY3QKK3sKKyAgICBpZiAoIShbW3NlbGYgc3VwZXJ2aWV3XSBpc0tpbmRPZkNsYXNzOltXZWJD
bGlwVmlldyBjbGFzc11dKSkKKyAgICAgICAgcmV0dXJuIFtzdXBlciB2aXNpYmxlUmVjdF07Cisg
ICAgICAgIAorICAgIFdlYkNsaXBWaWV3ICpjbGlwVmlldyA9IChXZWJDbGlwVmlldyAqKVtzZWxm
IHN1cGVydmlld107CisKKyAgICBCT09MIGhhc0FkZGl0aW9uYWxDbGlwID0gW2NsaXBWaWV3IGhh
c0FkZGl0aW9uYWxDbGlwXTsKKyAgICBpZiAoIWhhc0FkZGl0aW9uYWxDbGlwKSB7CisgICAgICAg
IHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3RdOworICAgIH0KKyAgICAKKyAgICBOU1JlY3QgYWRk
aXRpb25hbENsaXAgPSBbY2xpcFZpZXcgYWRkaXRpb25hbENsaXBdOworICAgIFtjbGlwVmlldyBy
ZXNldEFkZGl0aW9uYWxDbGlwXTsKKyAgICBOU1JlY3QgdmlzaWJsZVJlY3QgPSBbc3VwZXIgdmlz
aWJsZVJlY3RdOworICAgIFtjbGlwVmlldyBzZXRBZGRpdGlvbmFsQ2xpcDphZGRpdGlvbmFsQ2xp
cF07CisgICAgcmV0dXJuIHZpc2libGVSZWN0OworfQorCistIChCT09MKWlzRmxpcHBlZCAKK3sK
KyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKXdpbmRvd0RpZEJlY29tZUtleTooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7
CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmpl
Y3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgTlNXaW5kb3cgKmtleVdpbmRvdyA9IFtub3RpZmljYXRpb24gb2JqZWN0XTsKKwor
ICAgIGlmIChrZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSkKKyAgICAgICAgW3NlbGYgYWRkTW91
c2VNb3ZlZE9ic2VydmVyXTsKKworICAgIGlmIChrZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8
fCBrZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pCisgICAgICAgIFtz
ZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOworfQorCistICh2b2lkKXdpbmRvd0Rp
ZFJlc2lnbktleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIXB0
aHJlYWRfbWFpbl9ucCgpKSB7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRo
cmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNXaW5kb3cgKmZvcm1lcktleVdpbmRvdyA9IFtu
b3RpZmljYXRpb24gb2JqZWN0XTsKKworICAgIGlmIChmb3JtZXJLZXlXaW5kb3cgPT0gW3NlbGYg
d2luZG93XSkKKyAgICAgICAgW3NlbGYgcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyXTsKKworICAg
IGlmIChmb3JtZXJLZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8fCBmb3JtZXJLZXlXaW5kb3cg
PT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pIHsKKyAgICAgICAgW3NlbGYgX3VwZGF0
ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xs
ZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICB9Cit9CisKKy0gKHZv
aWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
T25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVjdDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpO
T107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9s
bGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgW1tzZWxmIF9wbHVn
aW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107Cit9CisKKy0gKHZvaWQpd2luZG93V2ls
bE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYg
KCFbW3NlbGYgX3dlYlZpZXddIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuXSkKKyAgICAgICAg
W3NlbGYgc2V0TmVlZHNEaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5T
RXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5n
IHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8g
ZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5n
IGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50
cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29k
ZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgRnJhbWUqIGZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPndoZWVsRXZlbnQoZXZlbnQpKQorICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6
ZXZlbnRdOworfQorCistIChCT09MKV9pc1NlbGVjdGlvbkV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2NhdGlv
bkluV2luZG93XSBmcm9tVmlldzpuaWxdOworICAgIHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBv
aW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDpZRVNdIG9iamVjdEZvcktleTpXZWJFbGVtZW50
SXNTZWxlY3RlZEtleV0gYm9vbFZhbHVlXTsKK30KKworLSAoQk9PTClhY2NlcHRzRmlyc3RNb3Vz
ZTooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3Bv
bmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAg
ICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRh
aW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHBy
ZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtp
dCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBOU1ZpZXcg
KmhpdFZpZXcgPSBbc2VsZiBfaGl0Vmlld0ZvckV2ZW50OmV2ZW50XTsKKyAgICBXZWJIVE1MVmll
dyAqaGl0SFRNTFZpZXcgPSBbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltzZWxmIGNsYXNzXV0gPyAo
V2ViSFRNTFZpZXcgKiloaXRWaWV3IDogbmlsOworICAgIAorI2lmIEVOQUJMRShEQVNIQk9BUkRf
U1VQUE9SVCkKKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2Vi
RGFzaGJvYXJkQmVoYXZpb3JBbHdheXNBY2NlcHRzRmlyc3RNb3VzZV0pCisgICAgICAgIHJldHVy
biBZRVM7CisjZW5kaWYKKyAgICAKKyAgICBpZiAoaGl0SFRNTFZpZXcpIHsKKyAgICAgICAgYm9v
bCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFto
aXRIVE1MVmlldyBfZnJhbWVdKSkgeworICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c2V0QWN0aXZhdGlvbkV2ZW50TnVtYmVyKFtldmVudCBldmVudE51bWJlcl0pOworICAg
ICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpldmVudF07CisgICAgICAg
ICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50XSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5ldmVudE1heVN0YXJ0
RHJhZyhldmVudCk7CisgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50
Om5pbF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmV0
dXJuIFtoaXRWaWV3IGFjY2VwdHNGaXJzdE1vdXNlOmV2ZW50XTsKK30KKworLSAoQk9PTClzaG91
bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8v
IFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4g
YSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWln
aHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcK
KyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHBy
b2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0g
YXV0b3JlbGVhc2VdOworCisgICAgTlNWaWV3ICpoaXRWaWV3ID0gW3NlbGYgX2hpdFZpZXdGb3JF
dmVudDpldmVudF07CisgICAgV2ViSFRNTFZpZXcgKmhpdEhUTUxWaWV3ID0gW2hpdFZpZXcgaXNL
aW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8gKFdlYkhUTUxWaWV3ICopaGl0VmlldyA6IG5pbDsK
KyAgICBpZiAoaGl0SFRNTFZpZXcpIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVudDpldmVudF0pCisgICAgICAg
ICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2hpdEhUTUxWaWV3IF9mcmFtZV0pKSB7
CisgICAgICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpldmVudF07
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZl
bnRNYXlTdGFydERyYWcoZXZlbnQpOworICAgICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0
TW91c2VEb3duRXZlbnQ6bmlsXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgcmV0dXJuIFtoaXRWaWV3IHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdG
b3JFdmVudDpldmVudF07Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gcHJv
dGVjdG9yID0gc2VsZjsKKyAgICBpZiAoW1tzZWxmIGlucHV0Q29udGV4dF0gd2FudHNUb0hhbmRs
ZU1vdXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5wdXRDb250ZXh0XSBoYW5kbGVNb3VzZUV2ZW50OmV2
ZW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3du
RXZlbnQgPSBZRVM7CisKKyAgICAvLyBSZWNvcmQgdGhlIG1vdXNlIGRvd24gcG9zaXRpb24gc28g
d2UgY2FuIGRldGVybWluZSBkcmFnIGh5c3RlcmVzaXMuCisgICAgW3NlbGYgX3NldE1vdXNlRG93
bkV2ZW50OmV2ZW50XTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2Vy
ID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAgIGlmIChbY3VycmVu
dElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRN
YW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAg
ICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVm
dDpOT107CisKKyAgICAvLyBJZiB0aGUgd2ViIHBhZ2UgaGFuZGxlcyB0aGUgY29udGV4dCBtZW51
IGV2ZW50IGFuZCBtZW51Rm9yRXZlbnQ6IHJldHVybnMgbmlsLCB3ZSdsbCBnZXQgY29udHJvbCBj
bGljayBldmVudHMgaGVyZS4KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhc3MgdGhlbSBhbG9u
ZyB0byBLSFRNTCBhIHNlY29uZCB0aW1lLgorICAgIGlmICghKFtldmVudCBtb2RpZmllckZsYWdz
XSAmIE5TQ29udHJvbEtleU1hc2spKSB7CisgICAgICAgIF9wcml2YXRlLT5pZ25vcmluZ01vdXNl
RHJhZ2dlZEV2ZW50cyA9IE5POworCisgICAgICAgIC8vIERvbid0IGRvIGFueSBtb3VzZW92ZXIg
d2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCisgICAgICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3Vz
ZW92ZXJUaW1lcl07CisKKyAgICAgICAgLy8gTGV0IFdlYkNvcmUgZ2V0IGEgY2hhbmNlIHRvIGRl
YWwgd2l0aCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBjYWxsIGJhY2sgdG8gdXMKKyAgICAgICAgLy8g
dG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIGlm
IChGcmFtZSogY29yZWZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNv
cmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRG93bihldmVudCk7CisgICAgfQorCitkb25l
OgorICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gTk87Cit9CisKKy0gKHZv
aWQpZHJhZ0ltYWdlOihOU0ltYWdlICopZHJhZ0ltYWdlCisgICAgICAgICAgICAgICBhdDooTlNQ
b2ludClhdAorICAgICAgICAgICBvZmZzZXQ6KE5TU2l6ZSlvZmZzZXQKKyAgICAgICAgICAgIGV2
ZW50OihOU0V2ZW50ICopZXZlbnQKKyAgICAgICBwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilw
YXN0ZWJvYXJkCisgICAgICAgICAgIHNvdXJjZTooaWQpc291cmNlCisgICAgICAgIHNsaWRlQmFj
azooQk9PTClzbGlkZUJhY2sKK3sKKyAgICBBU1NFUlQoc2VsZiA9PSBbc2VsZiBfdG9wSFRNTFZp
ZXddKTsKKyAgICBbc3VwZXIgZHJhZ0ltYWdlOmRyYWdJbWFnZSBhdDphdCBvZmZzZXQ6b2Zmc2V0
IGV2ZW50OmV2ZW50IHBhc3RlYm9hcmQ6cGFzdGVib2FyZCBzb3VyY2U6c291cmNlIHNsaWRlQmFj
azpzbGlkZUJhY2tdOworfQorCistICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVu
dCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5l
dyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0
b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBj
YXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZl
bnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElu
cHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKKyAgICBp
ZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3Vy
cmVudElucHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgW3NlbGYgcmV0YWluXTsKKworICAgIGlmICghX3ByaXZhdGUtPmlnbm9yaW5nTW91
c2VEcmFnZ2VkRXZlbnRzKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pKSB7CisgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkp
CisgICAgICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5tb3Vz
ZURyYWdnZWQoZXZlbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgW3NlbGYgcmVsZWFzZV07
Cit9CisKKy0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tGb3JM
b2NhbDooQk9PTClpc0xvY2FsCit7CisgICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3Nl
bGYgX2lzVG9wSFRNTFZpZXddKTsKKyAgICAKKyAgICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBf
d2ViVmlld10pOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIE5TRHJhZ09wZXJhdGlv
bk5vbmU7CisKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG92ZXJyaWRlIHRoZSBzb3VyY2UgcHJv
dmlkZWQgb3BlcmF0aW9uIGhlcmU/ICBXaHkgbm90IGluIERyYWdDb250cm9sbGVyOjpzdGFydERy
YWcKKyAgICBpZiAocGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+c291cmNlRHJhZ09wZXJhdGlvbigp
ID09IERyYWdPcGVyYXRpb25Ob25lKQorICAgICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uR2Vu
ZXJpYyB8IE5TRHJhZ09wZXJhdGlvbkNvcHk7CisKKyAgICByZXR1cm4gKE5TRHJhZ09wZXJhdGlv
bilwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zb3VyY2VEcmFnT3BlcmF0aW9uKCk7Cit9CisKKy0g
KHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdlICopaW1hZ2UgbW92ZWRUbzooTlNQb2ludClzY3Jl
ZW5Mb2MKK3sKKyAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1M
Vmlld10pOworICAgIAorICAgIE5TUG9pbnQgd2luZG93SW1hZ2VMb2MgPSBbW3NlbGYgd2luZG93
XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnNjcmVlbkxvY107CisgICAgTlNQb2ludCB3aW5kb3dNb3Vz
ZUxvYyA9IHdpbmRvd0ltYWdlTG9jOworICAgIAorICAgIGlmIChQYWdlKiBwYWdlID0gY29yZShb
c2VsZiBfd2ViVmlld10pKSB7CisgICAgICAgIERyYWdDb250cm9sbGVyKiBkcmFnQ29udHJvbGxl
ciA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCk7CisgICAgICAgIE5TUG9pbnQgd2luZG93TW91c2VM
b2MgPSBOU01ha2VQb2ludCh3aW5kb3dJbWFnZUxvYy54ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdP
ZmZzZXQoKS54KCksIHdpbmRvd0ltYWdlTG9jLnkgKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNl
dCgpLnkoKSk7CisgICAgfQorICAgIAorICAgIFtbc2VsZiBfZnJhbWVdIF9kcmFnU291cmNlTW92
ZWRUbzp3aW5kb3dNb3VzZUxvY107Cit9CisKKy0gKHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdl
ICopYW5JbWFnZSBlbmRlZEF0OihOU1BvaW50KWFQb2ludCBvcGVyYXRpb246KE5TRHJhZ09wZXJh
dGlvbilvcGVyYXRpb24KK3sKKyAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBf
aXNUb3BIVE1MVmlld10pOworICAgIAorICAgIE5TUG9pbnQgd2luZG93SW1hZ2VMb2MgPSBbW3Nl
bGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOmFQb2ludF07CisgICAgTlNQb2ludCB3aW5k
b3dNb3VzZUxvYyA9IHdpbmRvd0ltYWdlTG9jOworICAgIAorICAgIGlmIChQYWdlKiBwYWdlID0g
Y29yZShbc2VsZiBfd2ViVmlld10pKSB7CisgICAgICAgIERyYWdDb250cm9sbGVyKiBkcmFnQ29u
dHJvbGxlciA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCk7CisgICAgICAgIHdpbmRvd01vdXNlTG9j
ID0gTlNNYWtlUG9pbnQod2luZG93SW1hZ2VMb2MueCArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zm
c2V0KCkueCgpLCB3aW5kb3dJbWFnZUxvYy55ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQo
KS55KCkpOworICAgICAgICBkcmFnQ29udHJvbGxlci0+ZHJhZ0VuZGVkKCk7CisgICAgfQorICAg
IAorICAgIFtbc2VsZiBfZnJhbWVdIF9kcmFnU291cmNlRW5kZWRBdDp3aW5kb3dNb3VzZUxvYyBv
cGVyYXRpb246b3BlcmF0aW9uXTsKKyAgICAKKyAgICAvLyBQcmV2ZW50IHF1ZXVlZCBtb3VzZURy
YWdnZWQgZXZlbnRzIGZyb20gY29taW5nIGFmdGVyIHRoZSBkcmFnIGFuZCBmYWtlIG1vdXNlVXAg
ZXZlbnQuCisgICAgX3ByaXZhdGUtPmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gWUVTOwor
ICAgIAorICAgIC8vIE9uY2UgdGhlIGRyYWdnaW5nIG1hY2hpbmVyeSBraWNrcyBpbiwgd2Ugbm8g
bG9uZ2VyIGdldCBtb3VzZSBkcmFncyBvciB0aGUgdXAgZXZlbnQuCisgICAgLy8gV2ViQ29yZSBl
eHBlY3RzIHRvIGdldCBiYWxhbmNlZCBkb3duL3VwJ3MsIHNvIHdlIG11c3QgZmFrZSB1cCBhIG1v
dXNldXAuCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhU
eXBlOk5TTGVmdE1vdXNlVXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb246d2luZG93TW91c2VMb2MKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVy
RmxhZ3NdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0
YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3
aW5kb3dOdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVz
c3VyZTowXTsKKyAgICBbc2VsZiBtb3VzZVVwOmZha2VFdmVudF07IC8vIFRoaXMgd2lsbCBhbHNv
IHVwZGF0ZSB0aGUgbW91c2VvdmVyIHN0YXRlLgorfQorCistIChOU0FycmF5ICopbmFtZXNPZlBy
b21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjooTlNVUkwgKilkcm9wRGVzdGluYXRpb24K
K3sKKyAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOworICAgIE5TVVJMICpkcmFnZ2lu
Z0ltYWdlVVJMID0gbmlsOworICAgIAorICAgIGlmIChXZWJDb3JlOjpDYWNoZWRJbWFnZSogdGlm
ZlJlc291cmNlID0gW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdKSB7CisgICAgICAg
IAorICAgICAgICBTaGFyZWRCdWZmZXIgKmJ1ZmZlciA9IHN0YXRpY19jYXN0PENhY2hlZFJlc291
cmNlKj4odGlmZlJlc291cmNlKS0+ZGF0YSgpOworICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAg
ICAgICAgIGdvdG8gbm9Qcm9taXNlZERhdGE7CisgICAgICAgIAorICAgICAgICBOU0RhdGEgKmRh
dGEgPSBidWZmZXItPmNyZWF0ZU5TRGF0YSgpOworICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNw
b25zZSA9IHRpZmZSZXNvdXJjZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNlKCk7CisgICAgICAg
IGRyYWdnaW5nSW1hZ2VVUkwgPSBbcmVzcG9uc2UgVVJMXTsKKyAgICAgICAgd3JhcHBlciA9IFtb
W05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpkYXRhXSBh
dXRvcmVsZWFzZV07CisgICAgICAgIE5TU3RyaW5nKiBmaWxlbmFtZSA9IFtyZXNwb25zZSBzdWdn
ZXN0ZWRGaWxlbmFtZV07CisgICAgICAgIE5TU3RyaW5nKiB0cnVlRXh0ZW5zaW9uKHRpZmZSZXNv
dXJjZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKSk7CisgICAgICAgIGlmICghW2ZpbGVu
YW1lIG1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50OnRydWVFeHRlbnNpb25dKQorICAgICAgICAg
ICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLiJdIHN0
cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVFeHRlbnNpb25dOworICAgICAgICBbd3JhcHBlciBz
ZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07CisgICAgfQorICAgIAorbm9Qcm9taXNlZERh
dGE6CisgICAgCisgICAgaWYgKCF3cmFwcGVyKSB7CisgICAgICAgIEFTU0VSVCghW3NlbGYgX3dl
YlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBj
b3JlKFtzZWxmIF93ZWJWaWV3XSk7CisgICAgICAgIAorICAgICAgICAvL0lmIGEgbG9hZCBvY2N1
cnMgbWlkd2F5IHRocm91Z2ggYSBkcmFnLCB0aGUgdmlldyBtYXkgYmUgZGV0YWNoZWQsIHdoaWNo
IGdpdmVzCisgICAgICAgIC8vdXMgbm8gYWJpbGl0eSB0byBnZXQgdG8gdGhlIG9yaWdpbmFsIFBh
Z2UsIHNvIHdlIGNhbm5vdCBhY2Nlc3MgYW55IGRyYWcgc3RhdGUKKyAgICAgICAgLy9GSVhNRTog
aXMgdGhlcmUgYSB3YXkgdG8gcmVjb3Zlcj8KKyAgICAgICAgaWYgKCFwYWdlKSAKKyAgICAgICAg
ICAgIHJldHVybiBuaWw7IAorICAgICAgICAKKyAgICAgICAgY29uc3QgS1VSTCYgaW1hZ2VVUkwg
PSBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnZ2luZ0ltYWdlVVJMKCk7CisgICAgICAgIEFT
U0VSVCghaW1hZ2VVUkwuaXNFbXB0eSgpKTsKKyAgICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9IGlt
YWdlVVJMOworCisgICAgICAgIHdyYXBwZXIgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9maWxlV3Jh
cHBlckZvclVSTDpkcmFnZ2luZ0ltYWdlVVJMXTsKKyAgICB9CisgICAgCisgICAgaWYgKHdyYXBw
ZXIgPT0gbmlsKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBm
aWxlLiIpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIC8vIEZJWE1FOiBSZXBv
cnQgYW4gZXJyb3IgaWYgd2UgZmFpbCB0byBjcmVhdGUgYSBmaWxlLgorICAgIE5TU3RyaW5nICpw
YXRoID0gW1tkcm9wRGVzdGluYXRpb24gcGF0aF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50Olt3cmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXV07CisgICAgcGF0aCA9IFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtpdF9wYXRoV2l0aFVuaXF1ZUZpbGVuYW1lRm9yUGF0
aDpwYXRoXTsKKyAgICBpZiAoIVt3cmFwcGVyIHdyaXRlVG9GaWxlOnBhdGggYXRvbWljYWxseTpO
TyB1cGRhdGVGaWxlbmFtZXM6WUVTXSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIGltYWdlIGZpbGUgdmlhIC1bTlNGaWxlV3JhcHBlciB3cml0ZVRvRmlsZTphdG9taWNhbGx5
OnVwZGF0ZUZpbGVuYW1lczpdIik7CisgICAgCisgICAgaWYgKGRyYWdnaW5nSW1hZ2VVUkwpCisg
ICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtpdF9zZXRNZXRhZGF0
YVVSTDpbZHJhZ2dpbmdJbWFnZVVSTCBhYnNvbHV0ZVN0cmluZ10gcmVmZXJyZXI6bmlsIGF0UGF0
aDpwYXRoXTsKKyAgICAKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltwYXRo
IGxhc3RQYXRoQ29tcG9uZW50XV07Cit9CisKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2
ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBl
dmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBh
IG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4g
YXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJv
bSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtb
ZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZl
bnQ6bmlsXTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05T
SW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAgIGlmIChbY3VycmVudElucHV0
TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2Vy
IGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBy
ZXRhaW5dOworCisgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOworICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdl
ID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS0+bW91c2VVcChldmVudCk7CisgICAgfQorICAgIFtzZWxmIF91cGRhdGVNb3VzZW92
ZXJXaXRoRmFrZUV2ZW50XTsKKworICAgIFtzZWxmIHJlbGVhc2VdOworfQorCistICh2b2lkKW1v
dXNlTW92ZWROb3RpZmljYXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpbW25vdGlmaWNhdGlvbiB1c2VySW5m
b10gb2JqZWN0Rm9yS2V5OkAiTlNFdmVudCJdXTsKK30KKworLy8gcmV0dXJuaW5nIFlFUyBmcm9t
IHRoaXMgbWV0aG9kIGlzIHRoZSB3YXkgd2UgdGVsbCBBcHBLaXQgdGhhdCBpdCBpcyBvayBmb3Ig
dGhpcyB2aWV3CisvLyB0byBiZSBpbiB0aGUga2V5IGxvb3AgZXZlbiB3aGVuICJ0YWIgdG8gYWxs
IGNvbnRyb2xzIiBpcyBub3Qgb24uCistIChCT09MKW5lZWRzUGFuZWxUb0JlY29tZUtleQorewor
ICAgIHJldHVybiBZRVM7Cit9CisKKy8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHdl
IGRvbid0IHJldHVybiBhbnl0aGluZyB0aHJvdWdoIHRoZSBOU1RleHRJbnB1dAorLy8gQVBJIHdo
ZW4gYW4gZWRpdGFibGUgcmVnaW9uIGlzIG5vdCBjdXJyZW50bHkgZm9jdXNlZC4KK3N0YXRpYyBC
T09MIGlzVGV4dElucHV0KEZyYW1lKiBjb3JlRnJhbWUpCit7CisgICAgcmV0dXJuIGNvcmVGcmFt
ZSAmJiAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkgJiYgY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKK30KKworc3RhdGljIEJPT0wgaXNJblBhc3N3
b3JkRmllbGQoRnJhbWUqIGNvcmVGcmFtZSkKK3sKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNzd29yZEZpZWxkKCk7Cit9CisKKy0gKEJPT0wp
YmVjb21lRmlyc3RSZXNwb25kZXIKK3sKKyAgICBOU1NlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24gPSBOU0RpcmVjdFNlbGVjdGlvbjsKKyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX2lzUGVy
Zm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKKyAgICAgICAgZGlyZWN0aW9uID0gW1tzZWxmIHdp
bmRvd10ga2V5Vmlld1NlbGVjdGlvbkRpcmVjdGlvbl07CisKKyAgICBbc2VsZiBfdXBkYXRlRm9j
dXNlZEFuZEFjdGl2ZVN0YXRlXTsKKyAgICBbc2VsZiBfdXBkYXRlRm9udFBhbmVsXTsKKyAgICAK
KyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBCT09MIGV4cG9zZUlucHV0Q29udGV4dCA9IGlz
VGV4dElucHV0KGZyYW1lKSAmJiAhaXNJblBhc3N3b3JkRmllbGQoZnJhbWUpOworICAgIGlmIChl
eHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCkgeworICAg
ICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID0gZXhwb3NlSW5wdXRDb250ZXh0Owor
ICAgICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107CisgICAgfQorCisgICAgZnJhbWUtPmVkaXRv
cigpLT5zZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UodHJ1ZSk7CisKKyAgICBpZiAoZGlyZWN0
aW9uID09IE5TRGlyZWN0U2VsZWN0aW9uKQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4g
WUVTOworCisgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShmcmFt
ZSk7CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAg
ICAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7CisgICAgcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEluaXRpYWxGb2N1cyhkaXJlY3Rpb24gPT0gTlNTZWxlY3RpbmdOZXh0ID8gRm9j
dXNEaXJlY3Rpb25Gb3J3YXJkIDogRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
Y3VycmVudEtleWJvYXJkRXZlbnQoKS5nZXQoKSk7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAo
Qk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgoreworICAgIEJPT0wgcmVzaWduID0gW3N1cGVyIHJl
c2lnbkZpcnN0UmVzcG9uZGVyXTsKKyAgICBpZiAocmVzaWduKSB7CisgICAgICAgIF9wcml2YXRl
LT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKKyAgICAgICAgW19wcml2YXRlLT5jb21w
Q29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgICAgICBp
ZiAoIVtzZWxmIG1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uXSkgeyAKKyAgICAgICAgICAgIFtz
ZWxmIGRlc2VsZWN0QWxsXTsKKyAgICAgICAgICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBfaXNQ
ZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdKQorICAgICAgICAgICAgICAgIFtzZWxmIGNsZWFy
Rm9jdXNdOworICAgICAgICB9CisgICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZl
U3RhdGVdOworICAgICAgICBfcHJpdmF0ZS0+cmVzaWduaW5nRmlyc3RSZXNwb25kZXIgPSBOTzsK
KyAgICB9CisgICAgcmV0dXJuIHJlc2lnbjsKK30KKworLSAodm9pZClzZXREYXRhU291cmNlOihX
ZWJEYXRhU291cmNlICopZGF0YVNvdXJjZSAKK3sKKyAgICBBU1NFUlQoZGF0YVNvdXJjZSk7Cisg
ICAgaWYgKF9wcml2YXRlLT5kYXRhU291cmNlICE9IGRhdGFTb3VyY2UpIHsKKyAgICAgICAgQVNT
RVJUKCFfcHJpdmF0ZS0+Y2xvc2VkKTsKKyAgICAgICAgQk9PTCBoYWREYXRhU291cmNlID0gX3By
aXZhdGUtPmRhdGFTb3VyY2UgIT0gbmlsOworCisgICAgICAgIFtkYXRhU291cmNlIHJldGFpbl07
CisgICAgICAgIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSByZWxlYXNlXTsKKyAgICAgICAgX3ByaXZh
dGUtPmRhdGFTb3VyY2UgPSBkYXRhU291cmNlOworICAgICAgICBbX3ByaXZhdGUtPnBsdWdpbkNv
bnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpkYXRhU291cmNlXTsKKworICAgICAgICBpZiAoIWhhZERh
dGFTb3VyY2UpCisgICAgICAgICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOworICAg
IH0KK30KKworLSAodm9pZClkYXRhU291cmNlVXBkYXRlZDooV2ViRGF0YVNvdXJjZSAqKWRhdGFT
b3VyY2UKK3sKK30KKworLy8gVGhpcyBpcyBhbiBvdmVycmlkZSBvZiBhbiBOU0NvbnRyb2wgbWV0
aG9kIHRoYXQgd2FudHMgdG8gcmVwYWludCB0aGUgZW50aXJlIHZpZXcgd2hlbiB0aGUgd2luZG93
IHJlc2lnbnMvYmVjb21lcworLy8ga2V5LiAgV2ViSFRNTFZpZXcgaXMgYW4gTlNDb250cm9sIG9u
bHkgYmVjYXVzZSBpdCBob3N0cyBOU0NlbGxzIHRoYXQgYXJlIHBhaW50ZWQgYnkgV2ViQ29yZSdz
IEFxdWEgdGhlbWUKKy8vIHJlbmRlcmVyIChhbmQgdGhvc2UgY2VsbHMgbXVzdCBiZSBob3N0ZWQg
YnkgYW4gZW5jbG9zaW5nIE5TQ29udHJvbCBpbiBvcmRlciB0byBwYWludCBwcm9wZXJseSkuCist
ICh2b2lkKXVwZGF0ZUNlbGw6KE5TQ2VsbCopY2VsbAoreworfQorCisvLyBEb2VzIHNldE5lZWRz
RGlzcGxheTpOTyBhcyBhIHNpZGUgZWZmZWN0IHdoZW4gcHJpbnRpbmcgaXMgZW5kaW5nLgorLy8g
cGFnZVdpZHRoICE9IDAgaW1wbGllcyB3ZSB3aWxsIHJlbGF5b3V0IHRvIGEgbmV3IHdpZHRoCist
ICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFnZVdpZHRoOihmbG9h
dCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVz
dFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCit7CisgICAgV2ViRnJhbWUgKmZyYW1lID0g
W3NlbGYgX2ZyYW1lXTsKKyAgICBOU0FycmF5ICpzdWJmcmFtZXMgPSBbZnJhbWUgY2hpbGRGcmFt
ZXNdOworICAgIHVuc2lnbmVkIG4gPSBbc3ViZnJhbWVzIGNvdW50XTsKKyAgICB1bnNpZ25lZCBp
OworICAgIGZvciAoaSA9IDA7IGkgIT0gbjsgKytpKSB7CisgICAgICAgIFdlYkZyYW1lICpzdWJm
cmFtZSA9IFtzdWJmcmFtZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgV2ViRnJhbWVWaWV3
ICpmcmFtZVZpZXcgPSBbc3ViZnJhbWUgZnJhbWVWaWV3XTsKKyAgICAgICAgaWYgKFtbc3ViZnJh
bWUgX2RhdGFTb3VyY2VdIF9pc0RvY3VtZW50SFRNTF0pIHsKKyAgICAgICAgICAgIFsoV2ViSFRN
TFZpZXcgKilbZnJhbWVWaWV3IGRvY3VtZW50Vmlld10gX3NldFByaW50aW5nOnByaW50aW5nIG1p
bmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6
YWRqdXN0Vmlld1NpemVdOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHByaW50aW5nICE9
IF9wcml2YXRlLT5wcmludGluZykgeworICAgICAgICBbX3ByaXZhdGUtPnBhZ2VSZWN0cyByZWxl
YXNlXTsKKyAgICAgICAgX3ByaXZhdGUtPnBhZ2VSZWN0cyA9IG5pbDsKKyAgICAgICAgX3ByaXZh
dGUtPnByaW50aW5nID0gcHJpbnRpbmc7CisgICAgICAgIGlmICghcHJpbnRpbmcpCisgICAgICAg
ICAgICBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhhbiA9IE5POworICAgICAgICBbc2VsZiBz
ZXROZWVkc1RvQXBwbHlTdHlsZXM6WUVTXTsKKyAgICAgICAgW3NlbGYgc2V0TmVlZHNMYXlvdXQ6
WUVTXTsKKyAgICAgICAgW3NlbGYgbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOm1pblBhZ2VXaWR0
aCBtYXhpbXVtUGFnZVdpZHRoOm1heFBhZ2VXaWR0aCBhZGp1c3RpbmdWaWV3U2l6ZTphZGp1c3RW
aWV3U2l6ZV07CisgICAgICAgIGlmICghcHJpbnRpbmcpIHsKKyAgICAgICAgICAgIC8vIENhbid0
IGRvIHRoaXMgd2hlbiBzdGFydGluZyBwcmludGluZyBvciBuZXN0ZWQgcHJpbnRpbmcgd29uJ3Qg
d29yaywgc2VlIDM0OTE0MjcuCisgICAgICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6Tk9d
OworICAgICAgICB9CisgICAgfQorfQorCistIChCT09MKWNhblByaW50SGVhZGVyc0FuZEZvb3Rl
cnMKK3sKKyAgICByZXR1cm4gWUVTOworfQorCisvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIGNh
c2Ugd2hlcmUgdGhlIHdlYnZpZXcgaXMgZW1iZWRkZWQgaW4gdGhlIHZpZXcgdGhhdCdzIGJlaW5n
IHByaW50ZWQuCisvLyBJdCBzaG91bGRuJ3QgYmUgY2FsbGVkIHdoZW4gdGhlIHdlYnZpZXcgaXMg
YmVpbmcgcHJpbnRlZCBkaXJlY3RseS4KKy0gKHZvaWQpYWRqdXN0UGFnZUhlaWdodE5ldzooQ0dG
bG9hdCAqKW5ld0JvdHRvbSB0b3A6KENHRmxvYXQpb2xkVG9wIGJvdHRvbTooQ0dGbG9hdClvbGRC
b3R0b20gbGltaXQ6KENHRmxvYXQpYm90dG9tTGltaXQKK3sKKyAgICAvLyBUaGlzIGhlbHBzIHdo
ZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9jZXNzLgorICAgIC8vIElm
IHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGluZywgdGhlbiB3ZSB3
aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KKyAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0g
X3ByaXZhdGUtPnByaW50aW5nOworICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpCisgICAgICAg
IFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdl
V2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyAgICBmbG9hdCBuZXdCb3R0b21GbG9h
dCA9ICpuZXdCb3R0b207CisgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSktPnZpZXcoKSkKKyAgICAgICAgdmlldy0+YWRqdXN0UGFnZUhlaWdodCgmbmV3Qm90dG9t
RmxvYXQsIG9sZFRvcCwgb2xkQm90dG9tLCBib3R0b21MaW1pdCk7CisKKyNpZmRlZiBfX0xQNjRf
XworICAgIC8vIElmIHRoZSBuZXcgYm90dG9tIGlzIGVxdWFsIHRvIHRoZSBvbGQgYm90dG9tICh3
aGVuIGJvdGggYXJlIHRyZWF0ZWQgYXMgZmxvYXRzKSwgd2UganVzdCBjb3B5CisgICAgLy8gb2xk
Qm90dG9tIG92ZXIgdG8gbmV3Qm90dG9tLiBUaGlzIHByZXZlbnRzIHJvdW5kaW5nIGVycm9ycyB0
aGF0IGNhbiBvY2N1ciB3aGVuIGNvbnZlcnRpbmcgbmV3Qm90dG9tRmxvYXQgdG8gYSBkb3VibGUu
CisgICAgaWYgKGZhYnMoKGZsb2F0KW9sZEJvdHRvbSAtIG5ld0JvdHRvbUZsb2F0KSA8PSBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKSAKKyAgICAgICAgKm5ld0JvdHRvbSA9
IG9sZEJvdHRvbTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgKm5ld0JvdHRvbSA9IG5ld0Jv
dHRvbUZsb2F0OworICAgIAorICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpIHsKKyAgICAgICAg
TlNQcmludE9wZXJhdGlvbiAqY3VycmVuUHJpbnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJhdGlv
biBjdXJyZW50T3BlcmF0aW9uXTsKKyAgICAgICAgaWYgKGN1cnJlblByaW50T3BlcmF0aW9uKQor
ICAgICAgICAgICAgLy8gZGVsYXkgX3NldFByaW50aW5nOk5PIHVudGlsIGJhY2sgdG8gbWFpbiBs
b29wIGFzIHRoaXMgbWV0aG9kIG1heSBnZXQgY2FsbGVkIHJlcGVhdGVkbHkKKyAgICAgICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3
aXRoT2JqZWN0OmN1cnJlblByaW50T3BlcmF0aW9uIGFmdGVyRGVsYXk6MF07CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIC8vIG5vdCBzdXJlIGlmIHRoaXMgaXMgYWN0dWFsbHkgZXZlciBpbnZv
a2VkLCBpdCBwcm9iYWJseSBzaG91bGRuJ3QgYmUKKyAgICAgICAgICAgIFtzZWxmIF9zZXRQcmlu
dGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVz
dFZpZXdTaXplOk5PXTsKKyAgICB9Cit9CisKKy0gKGZsb2F0KV9hdmFpbGFibGVQYXBlcldpZHRo
Rm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJhdGlvbgorewor
ICAgIE5TUHJpbnRJbmZvICpwcmludEluZm8gPSBbcHJpbnRPcGVyYXRpb24gcHJpbnRJbmZvXTsK
KyAgICByZXR1cm4gW3ByaW50SW5mbyBwYXBlclNpemVdLndpZHRoIC0gW3ByaW50SW5mbyBsZWZ0
TWFyZ2luXSAtIFtwcmludEluZm8gcmlnaHRNYXJnaW5dOworfQorCistIChmbG9hdClfc2NhbGVG
YWN0b3JGb3JQcmludE9wZXJhdGlvbjooTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9u
Cit7CisgICAgZmxvYXQgdmlld1dpZHRoID0gTlNXaWR0aChbc2VsZiBib3VuZHNdKTsKKyAgICBp
ZiAodmlld1dpZHRoIDwgMSkgeworICAgICAgICBMT0dfRVJST1IoIiVAIGhhcyBubyB3aWR0aCB3
aGVuIHByaW50aW5nIiwgc2VsZik7CisgICAgICAgIHJldHVybiAxLjBmOworICAgIH0KKworICAg
IGZsb2F0IHVzZXJTY2FsZUZhY3RvciA9IFtwcmludE9wZXJhdGlvbiBfd2ViX3BhZ2VTZXR1cFNj
YWxlRmFjdG9yXTsKKyAgICBmbG9hdCBtYXhTaHJpbmtUb0ZpdFNjYWxlRmFjdG9yID0gMS4wZiAv
IFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKKyAgICBmbG9hdCBzaHJpbmtUb0ZpdFNjYWxl
RmFjdG9yID0gW3NlbGYgX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjpwcmlu
dE9wZXJhdGlvbl0vdmlld1dpZHRoOworICAgIGZsb2F0IHNocmlua1RvQXZvaWRPcnBoYW4gPSBf
cHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhhbiA/ICgxLjBmIC8gUHJpbnRpbmdPcnBoYW5TaHJp
bmtBZGp1c3RtZW50KSA6IDEuMGY7CisgICAgcmV0dXJuIHVzZXJTY2FsZUZhY3RvciAqIE1BWCht
YXhTaHJpbmtUb0ZpdFNjYWxlRmFjdG9yLCBzaHJpbmtUb0ZpdFNjYWxlRmFjdG9yKSAqIHNocmlu
a1RvQXZvaWRPcnBoYW47Cit9CisKKy8vIEZJWE1FIDM0OTEzNDQ6IFRoaXMgaXMgYSBzZWNyZXQg
QXBwS2l0LWludGVybmFsIG1ldGhvZCB0aGF0IHdlIG5lZWQgdG8gb3ZlcnJpZGUgaW4gb3JkZXIK
Ky8vIHRvIGdldCBvdXIgc2hyaW5rLXRvLWZpdCB0byB3b3JrIHdpdGggYSBjdXN0b20gcGFnaW5h
dGlvbiBzY2hlbWUuIFdlIGNhbiBkbyB0aGlzIGJldHRlcgorLy8gaWYgQXBwS2l0IG1ha2VzIGl0
IFNQSS9BUEkuCistIChDR0Zsb2F0KV9wcm92aWRlVG90YWxTY2FsZUZhY3RvckZvclByaW50T3Bl
cmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24gCit7CisgICAgcmV0dXJu
IFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXTsKK30K
KworLy8gVGhpcyBpcyB1c2VkIGZvciBDYXJib24gcHJpbnRpbmcuIEF0IHNvbWUgcG9pbnQgd2Ug
bWlnaHQgd2FudCB0byBtYWtlIHRoaXMgcHVibGljIEFQSS4KKy0gKHZvaWQpc2V0UGFnZVdpZHRo
Rm9yUHJpbnRpbmc6KGZsb2F0KXBhZ2VXaWR0aAoreworICAgIFtzZWxmIF9zZXRQcmludGluZzpO
TyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdT
aXplOk5PXTsKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6cGFn
ZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6cGFnZVdpZHRoIGFkanVzdFZpZXdTaXplOllFU107Cit9
CisKKy0gKHZvaWQpX2VuZFByaW50TW9kZQoreworICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBt
aW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXpl
OllFU107CisgICAgW1tzZWxmIHdpbmRvd10gc2V0QXV0b2Rpc3BsYXk6WUVTXTsKK30KKworLSAo
dm9pZClfZGVsYXllZEVuZFByaW50TW9kZTooTlNQcmludE9wZXJhdGlvbiAqKWluaXRpYXRpbmdP
cGVyYXRpb24KK3sKKyAgICBBU1NFUlRfQVJHKGluaXRpYXRpbmdPcGVyYXRpb24sIGluaXRpYXRp
bmdPcGVyYXRpb24gIT0gbmlsKTsKKyAgICBOU1ByaW50T3BlcmF0aW9uICpjdXJyZW50T3BlcmF0
aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl07CisgICAgaWYgKGluaXRp
YXRpbmdPcGVyYXRpb24gPT0gY3VycmVudE9wZXJhdGlvbikgeworICAgICAgICAvLyBUaGUgcHJp
bnQgb3BlcmF0aW9uIGlzIHN0aWxsIHVuZGVyd2F5LiBXZSBkb24ndCBleHBlY3QgdGhpcyB0byBl
dmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2VydCwgYnV0IHdlJ3JlCisgICAgICAgIC8vIGJlaW5n
IGV4dHJhIHBhcmFub2lkIGhlcmUgc2luY2UgdGhlIHByaW50aW5nIGNvZGUgaXMgc28gZnJhZ2ls
ZS4gRGVsYXkgdGhlIGNsZWFudXAKKyAgICAgICAgLy8gZnVydGhlci4KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Io
X2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRoT2JqZWN0OmluaXRpYXRpbmdPcGVyYXRpb24gYWZ0
ZXJEZWxheTowXTsKKyAgICB9IGVsc2UgaWYgKFtjdXJyZW50T3BlcmF0aW9uIHZpZXddID09IHNl
bGYpIHsKKyAgICAgICAgLy8gQSBuZXcgcHJpbnQgam9iIGhhcyBzdGFydGVkLCBidXQgaXQgaXMg
cHJpbnRpbmcgdGhlIHNhbWUgV2ViSFRNTFZpZXcgYWdhaW4uIFdlIGRvbid0IGV4cGVjdAorICAg
ICAgICAvLyB0aGlzIHRvIGV2ZXIgaGFwcGVuLCBoZW5jZSB0aGUgYXNzZXJ0LCBidXQgd2UncmUg
YmVpbmcgZXh0cmEgcGFyYW5vaWQgaGVyZSBzaW5jZSB0aGUgcHJpbnRpbmcgY29kZSBpcyBzbwor
ICAgICAgICAvLyBmcmFnaWxlLiBEbyBub3RoaW5nLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8g
YnJlYWsgdGhlIHByaW50IGpvYiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MsIGFuZAorICAgICAgICAv
LyB0aGUgcHJpbnQgam9iIGN1cnJlbnRseSBpbiBwcm9ncmVzcyBpcyByZXNwb25zaWJsZSBmb3Ig
aXRzIG93biBjbGVhbnVwLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBUaGUgcHJpbnQgam9iIHRoYXQga2lja2VkIG9mZiB0aGlzIGRlbGF5
ZWQgY2FsbCBoYXMgZmluaXNoZWQsIGFuZCB0aGlzIHZpZXcgaXMgbm90IGJlaW5nCisgICAgICAg
IC8vIHByaW50ZWQgYWdhaW4uIFdlIGV4cGVjdCB0aGF0IG5vIG90aGVyIHByaW50IGpvYiBoYXMg
c3RhcnRlZC4gU2luY2UgdGhpcyBkZWxheWVkIGNhbGwgd2Fzbid0CisgICAgICAgIC8vIGNhbmNl
bGxlZCwgYmVnaW5Eb2N1bWVudCBhbmQgZW5kRG9jdW1lbnQgbXVzdCBub3QgaGF2ZSBiZWVuIGNh
bGxlZCwgYW5kIHdlIG5lZWQgdG8gY2xlYW4gdXAKKyAgICAgICAgLy8gdGhlIHByaW50IG1vZGUg
aGVyZS4KKyAgICAgICAgQVNTRVJUKGN1cnJlbnRPcGVyYXRpb24gPT0gbmlsKTsKKyAgICAgICAg
W3NlbGYgX2VuZFByaW50TW9kZV07CisgICAgfQorfQorCisvLyBSZXR1cm4gdGhlIG51bWJlciBv
ZiBwYWdlcyBhdmFpbGFibGUgZm9yIHByaW50aW5nCistIChCT09MKWtub3dzUGFnZVJhbmdlOihO
U1JhbmdlUG9pbnRlcilyYW5nZQoreworICAgIC8vIE11c3QgZG8gdGhpcyBleHBsaWNpdCBkaXNw
bGF5IGhlcmUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSB2aWV3IG1pZ2h0IHJlZGlzcGxheSB3aGls
ZSB0aGUgcHJpbnQKKyAgICAvLyBzaGVldCB3YXMgdXAsIHVzaW5nIHByaW50ZXIgZm9udHMgKGFu
ZCBsb29raW5nIGRpZmZlcmVudCkuCisgICAgW3NlbGYgZGlzcGxheUlmTmVlZGVkXTsKKyAgICBb
W3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpOT107CisgICAgCisgICAgLy8gSWYgd2UgYXJl
IGEgZnJhbWVzZXQganVzdCBwcmludCB3aXRoIHRoZSBsYXlvdXQgd2UgaGF2ZSBvbnNjcmVlbiwg
b3RoZXJ3aXNlIHJlbGF5b3V0CisgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBwYXBlciBzaXplCisg
ICAgZmxvYXQgbWluTGF5b3V0V2lkdGggPSAwLjBmOworICAgIGZsb2F0IG1heExheW91dFdpZHRo
ID0gMC4wZjsKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiBOTzsKKyAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgp
IHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgpKSB7CisgICAgICAgIGZsb2F0IHBh
cGVyV2lkdGggPSBbc2VsZiBfYXZhaWxhYmxlUGFwZXJXaWR0aEZvclByaW50T3BlcmF0aW9uOltO
U1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dXTsKKyAgICAgICAgbWluTGF5b3V0V2lk
dGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOworICAgICAgICBt
YXhMYXlvdXRXaWR0aCA9IHBhcGVyV2lkdGggKiBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7
CisgICAgfQorICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDptaW5M
YXlvdXRXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOm1heExheW91dFdpZHRoIGFkanVzdFZpZXdTaXpl
OllFU107IC8vIHdpbGwgcmVsYXlvdXQKKyAgICBOU1ByaW50T3BlcmF0aW9uICpwcmludE9wZXJh
dGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dOworICAgIC8vIENlcnRh
aW4gdHlwZXMgb2YgZXJyb3JzLCBpbmNsdWRpbmcgaW52YWxpZCBwYWdlIHJhbmdlcywgY2FuIGNh
dXNlIGJlZ2luRG9jdW1lbnQgYW5kCisgICAgLy8gZW5kRG9jdW1lbnQgdG8gYmUgc2tpcHBlZCBh
ZnRlciB3ZSd2ZSBwdXQgb3Vyc2VsdmVzIGluIHByaW50IG1vZGUgKHNlZSA0MTQ1OTA1KS4gSW4g
dGhvc2UgY2FzZXMKKyAgICAvLyB3ZSBuZWVkIHRvIGdldCBvdXQgb2YgcHJpbnQgbW9kZSB3aXRo
b3V0IHJlbHlpbmcgb24gYW55IG1vcmUgY2FsbGJhY2tzIGZyb20gdGhlIHByaW50aW5nIG1lY2hh
bmlzbS4KKyAgICAvLyBJZiB3ZSBnZXQgYXMgZmFyIGFzIGJlZ2luRG9jdW1lbnQgd2l0aG91dCB0
cm91YmxlLCB0aGVuIHRoaXMgZGVsYXllZCByZXF1ZXN0IHdpbGwgYmUgY2FuY2VsbGVkLgorICAg
IC8vIElmIG5vdCBjYW5jZWxsZWQsIHRoaXMgZGVsYXllZCBjYWxsIHdpbGwgYmUgaW52b2tlZCBp
biB0aGUgbmV4dCBwYXNzIHRocm91Z2ggdGhlIG1haW4gZXZlbnQgbG9vcCwKKyAgICAvLyB3aGlj
aCBpcyBhZnRlciBiZWdpbkRvY3VtZW50IGFuZCBlbmREb2N1bWVudCB3b3VsZCBiZSBjYWxsZWQu
CisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9k
ZTopIHdpdGhPYmplY3Q6cHJpbnRPcGVyYXRpb24gYWZ0ZXJEZWxheTowXTsKKyAgICBbW3NlbGYg
X3dlYlZpZXddIF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdOworICAg
IAorICAgIC8vIFRoZXJlIGlzIGEgdGhlb3JldGljYWwgY2hhbmNlIHRoYXQgc29tZW9uZSBjb3Vs
ZCBkbyBzb21lIGRyYXdpbmcgYmV0d2VlbiBoZXJlIGFuZCBlbmREb2N1bWVudCwKKyAgICAvLyBp
ZiBzb21ldGhpbmcgY2F1c2VkIHNldE5lZWRzRGlzcGxheSBhZnRlciB0aGlzIHBvaW50LiBJZiBz
bywgaXQncyBub3QgYSBiaWcgdHJhZ2VkeSwgYmVjYXVzZQorICAgIC8vIHlvdSdkIHNpbXBseSBz
ZWUgdGhlIHByaW50ZXIgZm9udHMgb24gc2NyZWVuLiBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMg
ZG9lcyBub3QgaGFwcGVuIHdpdGggU2FmYXJpLgorCisgICAgcmFuZ2UtPmxvY2F0aW9uID0gMTsK
KyAgICBmbG9hdCB0b3RhbFNjYWxlRmFjdG9yID0gW3NlbGYgX3NjYWxlRmFjdG9yRm9yUHJpbnRP
cGVyYXRpb246cHJpbnRPcGVyYXRpb25dOworICAgIGZsb2F0IHVzZXJTY2FsZUZhY3RvciA9IFtw
cmludE9wZXJhdGlvbiBfd2ViX3BhZ2VTZXR1cFNjYWxlRmFjdG9yXTsKKyAgICBbX3ByaXZhdGUt
PnBhZ2VSZWN0cyByZWxlYXNlXTsKKyAgICBmbG9hdCBmdWxsUGFnZUhlaWdodCA9IGZsb29yZihb
c2VsZiBfY2FsY3VsYXRlUHJpbnRIZWlnaHRdL3RvdGFsU2NhbGVGYWN0b3IpOworICAgIE5TQXJy
YXkgKm5ld1BhZ2VSZWN0cyA9IFtbc2VsZiBfZnJhbWVdIF9jb21wdXRlUGFnZVJlY3RzV2l0aFBy
aW50V2lkdGhTY2FsZUZhY3Rvcjp1c2VyU2NhbGVGYWN0b3IKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp
bnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHRdOworICAgIAorICAgIC8vIEFwcEtpdCBnZXRzIGFsbCBt
ZXNzZWQgdXAgaWYgeW91IGdpdmUgaXQgYSB6ZXJvLWxlbmd0aCBwYWdlIGNvdW50IChzZWUgMzU3
NjMzNCksIHNvIGlmIHdlCisgICAgLy8gaGl0IHRoYXQgY2FzZSB3ZSdsbCBwYXNzIGFsb25nIGEg
ZGVnZW5lcmF0ZSAxIHBpeGVsIHNxdWFyZSB0byBwcmludC4gVGhpcyB3aWxsIHByaW50CisgICAg
Ly8gYSBibGFuayBwYWdlICh3aXRoIGNvcnJlY3QtbG9va2luZyBoZWFkZXIgYW5kIGZvb3RlciBp
ZiB0aGF0IG9wdGlvbiBpcyBvbiksIHdoaWNoIG1hdGNoZXMKKyAgICAvLyB0aGUgYmVoYXZpb3Ig
b2YgSUUgYW5kIENhbWlubyBhdCBsZWFzdC4KKyAgICBpZiAoW25ld1BhZ2VSZWN0cyBjb3VudF0g
PT0gMCkKKyAgICAgICAgbmV3UGFnZVJlY3RzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltO
U1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV1dOworICAgIGVsc2Ug
aWYgKFtuZXdQYWdlUmVjdHMgY291bnRdID4gMSkgeworICAgICAgICAvLyBJZiB0aGUgbGFzdCBw
YWdlIGlzIGEgc2hvcnQgb3JwaGFuLCB0cnkgYWRqdXN0aW5nIHRoZSBwcmludCBoZWlnaHQgc2xp
Z2h0bHkgdG8gc2VlIGlmIHRoaXMgd2lsbCBzcXVlZXplIHRoZQorICAgICAgICAvLyBjb250ZW50
IG9udG8gb25lIGZld2VyIHBhZ2UuIElmIGl0IGRvZXMsIHVzZSB0aGUgYWRqdXN0ZWQgc2NhbGUu
IElmIG5vdCwgdXNlIHRoZSBvcmlnaW5hbCBzY2FsZS4KKyAgICAgICAgZmxvYXQgbGFzdFBhZ2VI
ZWlnaHQgPSBOU0hlaWdodChbW25ld1BhZ2VSZWN0cyBsYXN0T2JqZWN0XSByZWN0VmFsdWVdKTsK
KyAgICAgICAgaWYgKGxhc3RQYWdlSGVpZ2h0L2Z1bGxQYWdlSGVpZ2h0IDwgTGFzdFByaW50ZWRQ
YWdlT3JwaGFuUmF0aW8pIHsKKyAgICAgICAgICAgIE5TQXJyYXkgKmFkanVzdGVkUGFnZVJlY3Rz
ID0gW1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFj
dG9yOnVzZXJTY2FsZUZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRI
ZWlnaHQ6ZnVsbFBhZ2VIZWlnaHQqUHJpbnRpbmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50XTsKKyAg
ICAgICAgICAgIC8vIFVzZSB0aGUgYWRqdXN0ZWQgcmVjdHMgb25seSBpZiB0aGUgcGFnZSBjb3Vu
dCB3ZW50IGRvd24KKyAgICAgICAgICAgIGlmIChbYWRqdXN0ZWRQYWdlUmVjdHMgY291bnRdIDwg
W25ld1BhZ2VSZWN0cyBjb3VudF0pIHsKKyAgICAgICAgICAgICAgICBuZXdQYWdlUmVjdHMgPSBh
ZGp1c3RlZFBhZ2VSZWN0czsKKyAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+YXZvaWRpbmdQcmlu
dE9ycGhhbiA9IFlFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gW25ld1BhZ2VSZWN0cyByZXRhaW5dOworICAgIAorICAg
IHJhbmdlLT5sZW5ndGggPSBbX3ByaXZhdGUtPnBhZ2VSZWN0cyBjb3VudF07CisgICAgCisgICAg
cmV0dXJuIFlFUzsKK30KKworLy8gUmV0dXJuIHRoZSBkcmF3aW5nIHJlY3RhbmdsZSBmb3IgYSBw
YXJ0aWN1bGFyIHBhZ2UgbnVtYmVyCistIChOU1JlY3QpcmVjdEZvclBhZ2U6KE5TSW50ZWdlcilw
YWdlCit7CisgICAgcmV0dXJuIFtbX3ByaXZhdGUtPnBhZ2VSZWN0cyBvYmplY3RBdEluZGV4OnBh
Z2UgLSAxXSByZWN0VmFsdWVdOworfQorCistICh2b2lkKWRyYXdQYWdlQm9yZGVyV2l0aFNpemU6
KE5TU2l6ZSlib3JkZXJTaXplCit7CisgICAgQVNTRVJUKE5TRXF1YWxTaXplcyhib3JkZXJTaXpl
LCBbW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dIHByaW50SW5mb10gcGFwZXJT
aXplXSkpOyAgICAKKyAgICBbW3NlbGYgX3dlYlZpZXddIF9kcmF3SGVhZGVyQW5kRm9vdGVyXTsK
K30KKworLSAodm9pZCliZWdpbkRvY3VtZW50Cit7CisgICAgQHRyeSB7CisgICAgICAgIC8vIEZy
b20gbm93IG9uIHdlJ2xsIGdldCBhIGNoYW5jZSB0byBjYWxsIF9lbmRQcmludE1vZGUgaW4gZWl0
aGVyIGJlZ2luRG9jdW1lbnQgb3IKKyAgICAgICAgLy8gZW5kRG9jdW1lbnQsIHNvIHdlIGNhbiBj
YW5jZWwgdGhlICJqdXN0IGluIGNhc2UiIHBlbmRpbmcgY2FsbC4KKyAgICAgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9y
KF9kZWxheWVkRW5kUHJpbnRNb2RlOikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdDpbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0
aW9uXV07CisgICAgICAgIFtzdXBlciBiZWdpbkRvY3VtZW50XTsKKyAgICB9IEBjYXRjaCAoTlNF
eGNlcHRpb24gKmxvY2FsRXhjZXB0aW9uKSB7CisgICAgICAgIC8vIEV4Y2VwdGlvbiBkdXJpbmcg
W3N1cGVyIGJlZ2luRG9jdW1lbnRdIG1lYW5zIHRoYXQgZW5kRG9jdW1lbnQgd2lsbCBub3QgZ2V0
IGNhbGxlZCwKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBjbGVhbiB1cCBvdXIgInByaW50IG1v
ZGUiIGhlcmUuCisgICAgICAgIFtzZWxmIF9lbmRQcmludE1vZGVdOworICAgIH0KK30KKworLSAo
dm9pZCllbmREb2N1bWVudAoreworICAgIFtzdXBlciBlbmREb2N1bWVudF07CisgICAgLy8gTm90
ZSBzYWRseSBhdCB0aGlzIHBvaW50IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERy
YXdpbmdUb1NjcmVlbl0gaXMgc3RpbGwgTk8gCisgICAgW3NlbGYgX2VuZFByaW50TW9kZV07Cit9
CisKKy0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBh
IGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBl
dmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNl
IHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRo
ZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNp
ZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFz
ZV07CisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwor
ICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQg
PT0gZXZlbnQpOworCisgICAgQk9PTCBjYWxsU3VwZXIgPSBOTzsKKworICAgIFtfcHJpdmF0ZS0+
a2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPSBbZXZl
bnQgcmV0YWluXTsKKworICAgIEJPT0wgY29tcGxldGlvblBvcHVwV2FzT3BlbiA9IF9wcml2YXRl
LT5jb21wQ29udHJvbGxlciAmJiBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIHBvcHVwV2luZG93
SXNPcGVuXTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAg
ICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKSB7CisgICAgICAgIC8vIFdlYkNvcmUgcHJv
Y2Vzc2VkIGEga2V5IGV2ZW50LCBiYWlsIG9uIGFueSBwcmVleGlzdGluZyBjb21wbGV0ZTogVUkK
KyAgICAgICAgaWYgKGNvbXBsZXRpb25Qb3B1cFdhc09wZW4pCisgICAgICAgICAgICBbX3ByaXZh
dGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwor
ICAgIH0gZWxzZSBpZiAoIV9wcml2YXRlLT5jb21wQ29udHJvbGxlciB8fCAhW19wcml2YXRlLT5j
b21wQ29udHJvbGxlciBmaWx0ZXJLZXlEb3duOmV2ZW50XSkgeworICAgICAgICAvLyBOb3QgY29u
c3VtZWQgYnkgY29tcGxldGU6IHBvcHVwIHdpbmRvdworICAgICAgICBbX3ByaXZhdGUtPmNvbXBD
b250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOworICAgICAgICBj
YWxsU3VwZXIgPSBZRVM7CisgICAgfQorICAgIGlmIChjYWxsU3VwZXIpCisgICAgICAgIFtzdXBl
ciBrZXlEb3duOmV2ZW50XTsKKyAgICBlbHNlCisgICAgICAgIFtOU0N1cnNvciBzZXRIaWRkZW5V
bnRpbE1vdXNlTW92ZXM6WUVTXTsKK30KKworLSAodm9pZClrZXlVcDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVu
dCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5l
dyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0
b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBj
YXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZl
bnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29y
ZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsKKworICAgIFJldGFpblB0cjxX
ZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKGNvcmVGcmFtZSAmJiAhZXZlbnRXYXNTZW50
VG9XZWJDb3JlKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChl
dmVudCk7CisgICAgZWxzZQorICAgICAgICBbc3VwZXIga2V5VXA6ZXZlbnRdOworfQorCistICh2
b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNo
YW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVu
dCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRo
ZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBj
dXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUg
V2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07
CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAo
Y29yZUZyYW1lKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jYXBzTG9ja1N0
YXRlTWF5SGF2ZUNoYW5nZWQoKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNl
bGZQcm90ZWN0b3IgPSBzZWxmOworCisgICAgdW5zaWduZWQgc2hvcnQga2V5Q29kZSA9IFtldmVu
dCBrZXlDb2RlXTsKKworICAgIC8vRG9uJ3QgbWFrZSBhbiBldmVudCBmcm9tIHRoZSBudW0gbG9j
ayBhbmQgZnVuY3Rpb24ga2V5cworICAgIGlmIChjb3JlRnJhbWUgJiYga2V5Q29kZSAhPSAwICYm
IGtleUNvZGUgIT0gMTAgJiYga2V5Q29kZSAhPSA2MykgeworICAgICAgICBjb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQoZXZlbnQpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgW3N1cGVyIGZsYWdzQ2hhbmdlZDpl
dmVudF07Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcq
KWF0dHJpYnV0ZU5hbWUKK3sKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWQgYWNjVHJl
ZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgICAgIGlmIChhY2NU
cmVlKQorICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDphY2NUcmVl
XTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlTmFtZV07Cit9CisKKy0gKGlkKWFjY2Vzc2li
aWxpdHlGb2N1c2VkVUlFbGVtZW50Cit7CisgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVd
IF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWYgKGFjY1RyZWUpCisgICAgICAgIHJldHVybiBb
YWNjVHJlZSBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF07CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Cit7CisgICAg
aWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWYg
KGFjY1RyZWUpIHsKKyAgICAgICAgTlNQb2ludCB3aW5kb3dDb29yZCA9IFtbc2VsZiB3aW5kb3dd
IGNvbnZlcnRTY3JlZW5Ub0Jhc2U6cG9pbnRdOworICAgICAgICByZXR1cm4gW2FjY1RyZWUgYWNj
ZXNzaWJpbGl0eUhpdFRlc3Q6W3NlbGYgY29udmVydFBvaW50OndpbmRvd0Nvb3JkIGZyb21WaWV3
Om5pbF1dOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpX2FjY2Vzc2liaWxp
dHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Cit7CisgICAgaWQgYWNjVHJlZSA9
IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWYgKCFhY2NUcmVlKQor
ICAgICAgICByZXR1cm4gc2VsZjsKKyAgICBpZCBwYXJlbnQgPSBbYWNjVHJlZSBfYWNjZXNzaWJp
bGl0eVBhcmVudEZvclN1YnZpZXc6c3Vidmlld107CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAg
IHJldHVybiBzZWxmOworICAgIHJldHVybiBwYXJlbnQ7Cit9CisKKy0gKHZvaWQpY2VudGVyU2Vs
ZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQor
CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAg
ICBjb3JlRnJhbWUtPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVy
QWx3YXlzKTsKK30KKworLSAoTlNEYXRhICopX3NlbGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNB
c1JURgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOkAieCIKKyAgICAgICAgYXR0cmlidXRlczpjb3JlRnJhbWUgPyBjb3Jl
RnJhbWUtPmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSA6IG5pbF07CisgICAgTlNE
YXRhICpkYXRhID0gW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBs
ZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKKyAgICBbc3RyaW5nIHJlbGVhc2VdOwor
ICAgIHJldHVybiBkYXRhOworfQorCistIChOU0RpY3Rpb25hcnkgKilfZm9udEF0dHJpYnV0ZXNG
cm9tRm9udFBhc3RlYm9hcmQKK3sKKyAgICBOU1Bhc3RlYm9hcmQgKmZvbnRQYXN0ZWJvYXJkID0g
W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNGb250UGJvYXJkXTsKKyAgICBpZiAo
Zm9udFBhc3RlYm9hcmQgPT0gbmlsKQorICAgICAgICByZXR1cm4gbmlsOworICAgIE5TRGF0YSAq
ZGF0YSA9IFtmb250UGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU0ZvbnRQYm9hcmRUeXBlXTsKKyAg
ICBpZiAoZGF0YSA9PSBuaWwgfHwgW2RhdGEgbGVuZ3RoXSA9PSAwKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIC8vIE5TVGV4dFZpZXcgZG9lcyBzb21ldGhpbmcgbW9yZSBlZmZpY2llbnQgYnkg
cGFyc2luZyB0aGUgYXR0cmlidXRlcyBvbmx5LCBidXQgdGhhdCdzIG5vdCBhdmFpbGFibGUgaW4g
QVBJLgorICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFJURjpkYXRhIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXSBhdXRv
cmVsZWFzZV07CisgICAgaWYgKHN0cmluZyA9PSBuaWwgfHwgW3N0cmluZyBsZW5ndGhdID09IDAp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtzdHJpbmcgZm9udEF0dHJpYnV0ZXNJ
blJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpXTsKK30KKworLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlv
biAqKV9lbXB0eVN0eWxlCit7CisgICAgcmV0dXJuIFtbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVu
dF0gY3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbl07Cit9CisKKy0gKE5TU3RyaW5nICopX2NvbG9y
QXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcgoreworICAgIE5TQ29sb3IgKnJnYkNvbG9yID0gW2Nv
bG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOworICAg
IC8vIEZJWE1FOiBJZiBjb2xvciBpcyBub24tbmlsIGFuZCByZ2JDb2xvciBpcyBuaWwsIHRoYXQg
bWVhbnMgd2UgZ290IHNvbWUga2luZAorICAgIC8vIG9mIGZhbmN5IGNvbG9yIHRoYXQgY2FuJ3Qg
YmUgY29udmVydGVkIHRvIFJHQi4gQ2hhbmdpbmcgdGhhdCB0byAidHJhbnNwYXJlbnQiCisgICAg
Ly8gbWlnaHQgbm90IGJlIGdyZWF0LCBidXQgaXQncyBwcm9iYWJseSBPSy4KKyAgICBpZiAocmdi
Q29sb3IgPT0gbmlsKQorICAgICAgICByZXR1cm4gQCJ0cmFuc3BhcmVudCI7CisgICAgZmxvYXQg
ciA9IFtyZ2JDb2xvciByZWRDb21wb25lbnRdOworICAgIGZsb2F0IGcgPSBbcmdiQ29sb3IgZ3Jl
ZW5Db21wb25lbnRdOworICAgIGZsb2F0IGIgPSBbcmdiQ29sb3IgYmx1ZUNvbXBvbmVudF07Cisg
ICAgZmxvYXQgYSA9IFtyZ2JDb2xvciBhbHBoYUNvbXBvbmVudF07CisgICAgaWYgKGEgPT0gMCkK
KyAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJlbnQiOworICAgIGlmIChyID09IDAgJiYgZyA9PSAw
ICYmIGIgPT0gMCAmJiBhID09IDEpCisgICAgICAgIHJldHVybiBAImJsYWNrIjsKKyAgICBpZiAo
ciA9PSAxICYmIGcgPT0gMSAmJiBiID09IDEgJiYgYSA9PSAxKQorICAgICAgICByZXR1cm4gQCJ3
aGl0ZSI7CisgICAgLy8gRklYTUU6IExvdHMgbW9yZSBuYW1lZCBjb2xvcnMuIE1heWJlIHdlIGNv
dWxkIHVzZSB0aGUgdGFibGUgaW4gV2ViQ29yZT8KKyAgICBpZiAoYSA9PSAxKQorICAgICAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2IoJS4wZiwlLjBmLCUuMGYpIiwg
ciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAicmdiYSglLjBmLCUuMGYsJS4wZiwlZikiLCByICogMjU1LCBnICogMjU1LCBi
ICogMjU1LCBhXTsKK30KKworLSAoTlNTdHJpbmcgKilfc2hhZG93QXNTdHJpbmc6KE5TU2hhZG93
ICopc2hhZG93Cit7CisgICAgaWYgKHNoYWRvdyA9PSBuaWwpCisgICAgICAgIHJldHVybiBAIm5v
bmUiOworICAgIE5TU2l6ZSBvZmZzZXQgPSBbc2hhZG93IHNoYWRvd09mZnNldF07CisgICAgZmxv
YXQgYmx1clJhZGl1cyA9IFtzaGFkb3cgc2hhZG93Qmx1clJhZGl1c107CisgICAgaWYgKG9mZnNl
dC53aWR0aCA9PSAwICYmIG9mZnNldC5oZWlnaHQgPT0gMCAmJiBibHVyUmFkaXVzID09IDApCisg
ICAgICAgIHJldHVybiBAIm5vbmUiOworICAgIE5TQ29sb3IgKmNvbG9yID0gW3NoYWRvdyBzaGFk
b3dDb2xvcl07CisgICAgaWYgKGNvbG9yID09IG5pbCkKKyAgICAgICAgcmV0dXJuIEAibm9uZSI7
CisgICAgLy8gRklYTUU6IEhhbmRsZSBub24taW50ZWdyYWwgdmFsdWVzIGhlcmU/CisgICAgaWYg
KGJsdXJSYWRpdXMgPT0gMCkKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJUAgJS4wZnB4ICUuMGZweCIsIFtzZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXSwgb2Zm
c2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0XTsKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlQCAlLjBmcHggJS4wZnB4ICUuMGZweCIsIFtzZWxmIF9jb2xvckFzU3RyaW5n
OmNvbG9yXSwgb2Zmc2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0LCBibHVyUmFkaXVzXTsKK30KKwor
LSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21Gb250QXR0cmlidXRlczooTlNE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeQoreworICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0
eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOworCisgICAgTlNDb2xvciAqY29sb3IgPSBbZGljdGlv
bmFyeSBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBb
c3R5bGUgc2V0QmFja2dyb3VuZENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXV07CisK
KyAgICBOU0ZvbnQgKmZvbnQgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07CisgICAgaWYgKCFmb250KSB7CisgICAgICAgIFtzdHlsZSBzZXRGb250RmFtaWx5
OkAiSGVsdmV0aWNhIl07CisgICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpAIjEycHgiXTsKKyAg
ICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6QCJub3JtYWwiXTsKKyAgICAgICAgW3N0eWxlIHNl
dEZvbnRTdHlsZTpAIm5vcm1hbCJdOworICAgIH0gZWxzZSB7CisgICAgICAgIE5TRm9udE1hbmFn
ZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgICAgICAvLyBG
SVhNRTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0ZWQgZXNjYXBpbmcgY29kZSBpZiB3ZSB3YW50IHRv
IGhhbmRsZSBmYW1pbHkgbmFtZXMKKyAgICAgICAgLy8gd2l0aCBjaGFyYWN0ZXJzIGxpa2Ugc2lu
Z2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0aGVpciBuYW1lcy4KKyAgICAgICAgW3N0eWxlIHNl
dEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCInJUAnIiwgW2ZvbnQgZmFt
aWx5TmFtZV1dXTsKKyAgICAgICAgW3N0eWxlIHNldEZvbnRTaXplOltOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJTAuZnB4IiwgW2ZvbnQgcG9pbnRTaXplXV1dOworICAgICAgICAvLyBGSVhN
RTogTWFwIHRvIHRoZSBlbnRpcmUgcmFuZ2Ugb2YgQ1NTIHdlaWdodCB2YWx1ZXMuCisgICAgICAg
IGlmIChbZm0gd2VpZ2h0T2ZGb250OmZvbnRdID49IE1JTl9CT0xEX1dFSUdIVCkKKyAgICAgICAg
ICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAiYm9sZCJdOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpAIm5vcm1hbCJdOworICAgICAgICBpZiAoW2ZtIHRy
YWl0c09mRm9udDpmb250XSAmIE5TSXRhbGljRm9udE1hc2spCisgICAgICAgICAgICBbc3R5bGUg
c2V0Rm9udFN0eWxlOkAiaXRhbGljIl07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtzdHls
ZSBzZXRGb250U3R5bGU6QCJub3JtYWwiXTsKKyAgICB9CisKKyAgICBjb2xvciA9IFtkaWN0aW9u
YXJ5IG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIFtz
dHlsZSBzZXRDb2xvcjpjb2xvciA/IFtzZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXSA6IChOU1N0
cmluZyAqKUAiYmxhY2siXTsKKworICAgIE5TU2hhZG93ICpzaGFkb3cgPSBbZGljdGlvbmFyeSBv
YmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKKyAgICBbc3R5bGUgc2V0VGV4dFNo
YWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6c2hhZG93XV07CisKKyAgICBpbnQgc3RyaWtldGhy
b3VnaEludCA9IFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVB
dHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisKKyAgICBpbnQgc3VwZXJzY3JpcHRJbnQgPSBbW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1
ZV07CisgICAgaWYgKHN1cGVyc2NyaXB0SW50ID4gMCkKKyAgICAgICAgW3N0eWxlIHNldFZlcnRp
Y2FsQWxpZ246QCJzdXBlciJdOworICAgIGVsc2UgaWYgKHN1cGVyc2NyaXB0SW50IDwgMCkKKyAg
ICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdWIiXTsKKyAgICBlbHNlCisgICAgICAg
IFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAiYmFzZWxpbmUiXTsKKyAgICBpbnQgdW5kZXJsaW5l
SW50ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRl
TmFtZV0gaW50VmFsdWVdOworICAgIC8vIEZJWE1FOiBVbmRlcmxpbmUgd2lucyBoZXJlIGlmIHdl
IGhhdmUgYm90aCAoc2VlIGJ1ZyAzNzkwNDQzKS4KKyAgICBpZiAoc3RyaWtldGhyb3VnaEludCA9
PSBOU1VuZGVybGluZVN0eWxlTm9uZSAmJiB1bmRlcmxpbmVJbnQgPT0gTlNVbmRlcmxpbmVTdHls
ZU5vbmUpCisgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRp
b25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOworICAgIGVsc2UgaWYg
KHVuZGVybGluZUludCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKKyAgICAgICAgW3N0eWxlIHNl
dFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAImxp
bmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsKKyAgICBlbHNlCisgICAgICAgIFtzdHlsZSBzZXRQ
cm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRl
cmxpbmUiIHByaW9yaXR5OkAiIl07CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKKy0gKHZvaWQp
X2FwcGx5U3R5bGVUb1NlbGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdp
dGhVbmRvQWN0aW9uOihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KK3sKKyAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9y
KCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7Cit9CisK
Ky0gKHZvaWQpX2FwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KK3sK
KyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAg
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihjb3Jl
KHN0eWxlKSwgdW5kb0FjdGlvbik7Cit9CisKKy0gKEJPT0wpX2hhbmRsZVN0eWxlS2V5RXF1aXZh
bGVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgQVNTRVJUKFtzZWxmIF93ZWJWaWV3XSk7Cisg
ICAgaWYgKCFbW1tzZWxmIF93ZWJWaWV3XSBwcmVmZXJlbmNlc10gcmVzcGVjdFN0YW5kYXJkU3R5
bGVLZXlFcXVpdmFsZW50c10pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoIVtz
ZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIGlmICgoW2V2ZW50
IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJbmRlcGVuZGVudE1vZGlmaWVyRmxhZ3NNYXNrKSAh
PSBOU0NvbW1hbmRLZXlNYXNrKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgTlNTdHJp
bmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0ZXJzXTsKKyAgICBpZiAoW3N0cmluZyBjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlOkAiYiJdID09IE5TT3JkZXJlZFNhbWUpIHsKKyAgICAgICAgW3NlbGYg
ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOiJUb2dnbGVCb2xkIl07CisgICAgICAgIHJldHVybiBZ
RVM7CisgICAgfQorICAgIGlmIChbc3RyaW5nIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJpIl0g
PT0gTlNPcmRlcmVkU2FtZSkgeworICAgICAgICBbc2VsZiBleGVjdXRlQ29yZUNvbW1hbmRCeU5h
bWU6IlRvZ2dsZUl0YWxpYyJdOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpcGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQg
KilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRo
aXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hp
bmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0
aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0
IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAg
ICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgaWYgKFtzZWxmIF9oYW5kbGVT
dHlsZUtleUVxdWl2YWxlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAg
IEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0g
ZXZlbnQpOworICAgIEJPT0wgcmV0ID0gTk87CisKKyAgICBbX3ByaXZhdGUtPmtleURvd25FdmVu
dCByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07
CisgICAgCisgICAgW3NlbGYgcmV0YWluXTsKKworICAgIC8vIFBhc3MgY29tbWFuZC1rZXkgY29t
Ym9zIHRocm91Z2ggV2ViQ29yZSBpZiB0aGVyZSBpcyBhIGtleSBiaW5kaW5nIGF2YWlsYWJsZSBm
b3IKKyAgICAvLyB0aGlzIGV2ZW50LiBUaGlzIGxldHMgd2ViIHBhZ2VzIGhhdmUgYSBjcmFjayBh
dCBpbnRlcmNlcHRpbmcgY29tbWFuZC1tb2RpZmllZCBrZXlwcmVzc2VzLgorICAgIC8vIEJ1dCBk
b24ndCBkbyBpdCBpZiB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZXZlbnQuCisgICAgLy8g
UHJlc3NpbmcgRXNjIHJlc3VsdHMgaW4gYSBmYWtlIGV2ZW50IGJlaW5nIHNlbnQgLSBkb24ndCBw
YXNzIGl0IHRvIFdlYkNvcmUuCisgICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgZXZl
bnQgPT0gW05TQXBwIGN1cnJlbnRFdmVudF0gJiYgc2VsZiA9PSBbW3NlbGYgd2luZG93XSBmaXJz
dFJlc3BvbmRlcl0pCisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pKQorICAgICAgICAgICAgcmV0ID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChl
dmVudCk7CisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0ID0gW3N1cGVyIHBlcmZvcm1LZXlF
cXVpdmFsZW50OmV2ZW50XTsKKworICAgIFtzZWxmIHJlbGVhc2VdOworICAgIAorICAgIHJldHVy
biByZXQ7Cit9CisKKy0gKHZvaWQpY29weUZvbnQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRf
UFJPTE9HVUUKKworICAgIC8vIFB1dCBSVEYgd2l0aCBmb250IGF0dHJpYnV0ZXMgb24gdGhlIHBh
c3RlYm9hcmQuCisgICAgLy8gTWF5YmUgbGF0ZXIgd2Ugc2hvdWxkIGFkZCBhIHBhc3RlYm9hcmQg
dHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0IGZvciAibmF0aXZlIiBjb3B5IGFuZCBwYXN0ZSBm
b250LgorICAgIE5TUGFzdGVib2FyZCAqZm9udFBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBh
c3RlYm9hcmRXaXRoTmFtZTpOU0ZvbnRQYm9hcmRdOworICAgIFtmb250UGFzdGVib2FyZCBkZWNs
YXJlVHlwZXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0Ok5TRm9udFBib2FyZFR5cGVdIG93bmVy
Om5pbF07CisgICAgW2ZvbnRQYXN0ZWJvYXJkIHNldERhdGE6W3NlbGYgX3NlbGVjdGlvblN0YXJ0
Rm9udEF0dHJpYnV0ZXNBc1JURl0gZm9yVHlwZTpOU0ZvbnRQYm9hcmRUeXBlXTsKK30KKworLSAo
dm9pZClwYXN0ZUZvbnQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAg
IC8vIFJlYWQgUlRGIHdpdGggZm9udCBhdHRyaWJ1dGVzIGZyb20gdGhlIHBhc3RlYm9hcmQuCisg
ICAgLy8gTWF5YmUgbGF0ZXIgd2Ugc2hvdWxkIGFkZCBhIHBhc3RlYm9hcmQgdHlwZSB0aGF0IGNv
bnRhaW5zIENTUyB0ZXh0IGZvciAibmF0aXZlIiBjb3B5IGFuZCBwYXN0ZSBmb250LgorICAgIFtz
ZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVz
OltzZWxmIF9mb250QXR0cmlidXRlc0Zyb21Gb250UGFzdGVib2FyZF1dIHdpdGhVbmRvQWN0aW9u
OkVkaXRBY3Rpb25QYXN0ZUZvbnRdOworfQorCistICh2b2lkKXBhc3RlQXNSaWNoVGV4dDooaWQp
c2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gU2luY2UgcmljaCB0ZXh0
IGFsd2F5cyBiZWF0cyBwbGFpbiB0ZXh0IHdoZW4gYm90aCBhcmUgb24gdGhlIHBhc3RlYm9hcmQs
IGl0J3Mgbm90CisgICAgLy8gY2xlYXIgaG93IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gcGxhaW4g
b2xkIHBhc3RlLgorICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQg
Z2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93UGxhaW5UZXh0Ok5PXTsKK30KKworLSAoTlNGb250ICop
X29yaWdpbmFsRm9udEEKK3sKKyAgICByZXR1cm4gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRN
YW5hZ2VyXSBmb250V2l0aEZhbWlseTpAIkhlbHZldGljYSIgdHJhaXRzOjAgd2VpZ2h0OlNUQU5E
QVJEX1dFSUdIVCBzaXplOjEwLjBmXTsKK30KKworLSAoTlNGb250ICopX29yaWdpbmFsRm9udEIK
K3sKKyAgICByZXR1cm4gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0
aEZhbWlseTpAIlRpbWVzIiB0cmFpdHM6TlNGb250SXRhbGljVHJhaXQgd2VpZ2h0OlNUQU5EQVJE
X0JPTERfV0VJR0hUIHNpemU6MTIuMGZdOworfQorCistICh2b2lkKV9hZGRUb1N0eWxlOihET01D
U1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgZm9udEE6KE5TRm9udCAqKWEgZm9udEI6KE5TRm9u
dCAqKWIKK3sKKyAgICAvLyBTaW5jZSB0aGVyZSdzIG5vIHdheSB0byBkaXJlY3RseSBhc2sgTlNG
b250TWFuYWdlciB3aGF0IHN0eWxlIGNoYW5nZSBpdCdzIGdvaW5nIHRvIGRvCisgICAgLy8gd2Ug
aW5zdGVhZCBwYXNzIHR3byAic3BlY2ltZW4iIGZvbnRzIHRvIGl0IGFuZCBsZXQgaXQgY2hhbmdl
IHRoZW0uIFdlIHRoZW4gZGVkdWNlIHdoYXQKKyAgICAvLyBzdHlsZSBjaGFuZ2UgaXQgd2FzIGRv
aW5nIGJ5IGxvb2tpbmcgYXQgd2hhdCBoYXBwZW5lZCB0byBlYWNoIG9mIHRoZSB0d28gZm9udHMu
CisgICAgLy8gU28gaWYgaXQgd2FzIG1ha2luZyB0aGUgdGV4dCBib2xkLCBib3RoIGZvbnRzIHdp
bGwgYmUgYm9sZCBhZnRlciB0aGUgZmFjdC4KKworICAgIGlmIChhID09IG5pbCB8fCBiID09IG5p
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl07CisKKyAgICBOU0ZvbnQgKm9hID0gW3NlbGYgX29yaWdp
bmFsRm9udEFdOworCisgICAgTlNTdHJpbmcgKmFGYW1pbHlOYW1lID0gW2EgZmFtaWx5TmFtZV07
CisgICAgTlNTdHJpbmcgKmJGYW1pbHlOYW1lID0gW2IgZmFtaWx5TmFtZV07CisKKyAgICBpbnQg
YVBvaW50U2l6ZSA9IChpbnQpW2EgcG9pbnRTaXplXTsKKyAgICBpbnQgYlBvaW50U2l6ZSA9IChp
bnQpW2IgcG9pbnRTaXplXTsKKworICAgIGludCBhV2VpZ2h0ID0gW2ZtIHdlaWdodE9mRm9udDph
XTsKKyAgICBpbnQgYldlaWdodCA9IFtmbSB3ZWlnaHRPZkZvbnQ6Yl07CisKKyAgICBCT09MIGFJ
c0l0YWxpYyA9IChbZm0gdHJhaXRzT2ZGb250OmFdICYgTlNJdGFsaWNGb250TWFzaykgIT0gMDsK
KyAgICBCT09MIGJJc0l0YWxpYyA9IChbZm0gdHJhaXRzT2ZGb250OmJdICYgTlNJdGFsaWNGb250
TWFzaykgIT0gMDsKKworICAgIGlmIChbYUZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOmJGYW1p
bHlOYW1lXSkgeworICAgICAgICBOU1N0cmluZyAqZmFtaWx5TmFtZUZvckNTUyA9IGFGYW1pbHlO
YW1lOworCisgICAgICAgIC8vIFRoZSBmYW1pbHkgbmFtZSBtYXkgbm90IGJlIHNwZWNpZmljIGVu
b3VnaCB0byBnZXQgdXMgdGhlIGZvbnQgc3BlY2lmaWVkLgorICAgICAgICAvLyBJbiBzb21lIGNh
c2VzLCB0aGUgb25seSB3YXkgdG8gZ2V0IGV4YWN0bHkgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3Ig
aXMgdG8gdXNlCisgICAgICAgIC8vIHRoZSBQb3N0c2NyaXB0IG5hbWUuCisgICAgICAgIAorICAg
ICAgICAvLyBGaW5kIHRoZSBmb250IHRoZSBzYW1lIHdheSB0aGUgcmVuZGVyaW5nIGNvZGUgd291
bGQgbGF0ZXIgaWYgaXQgZW5jb3VudGVyZWQgdGhpcyBDU1MuCisgICAgICAgIE5TRm9udFRyYWl0
TWFzayB0cmFpdHMgPSBhSXNJdGFsaWMgPyBOU0ZvbnRJdGFsaWNUcmFpdCA6IDA7CisgICAgICAg
IE5TRm9udCAqZm91bmRGb250ID0gV2ViQ29yZUZpbmRGb250KGFGYW1pbHlOYW1lLCB0cmFpdHMs
IGFXZWlnaHQsIGFQb2ludFNpemUpOworCisgICAgICAgIC8vIElmIHdlIGRvbid0IGZpbmQgYSBm
b250IHdpdGggdGhlIHNhbWUgUG9zdHNjcmlwdCBuYW1lLCB0aGVuIHdlJ2xsIGhhdmUgdG8gdXNl
IHRoZQorICAgICAgICAvLyBQb3N0c2NyaXB0IG5hbWUgdG8gbWFrZSB0aGUgQ1NTIHNwZWNpZmlj
IGVub3VnaC4KKyAgICAgICAgaWYgKCFbW2ZvdW5kRm9udCBmb250TmFtZV0gaXNFcXVhbFRvU3Ry
aW5nOlthIGZvbnROYW1lXV0pCisgICAgICAgICAgICBmYW1pbHlOYW1lRm9yQ1NTID0gW2EgZm9u
dE5hbWVdOworCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIG1vcmUgc29waGlzdGljYXRlZCBlc2Nh
cGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxlIGZhbWlseSBuYW1lcworICAgICAgICAvLyB3
aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUgcXVvdGUgb3IgYmFja3NsYXNoIGluIHRoZWlyIG5h
bWVzLgorICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWlseTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiclQCciLCBmYW1pbHlOYW1lRm9yQ1NTXV07CisgICAgfQorCisgICAgaW50IHNvYSA9
IChpbnQpW29hIHBvaW50U2l6ZV07CisgICAgaWYgKGFQb2ludFNpemUgPT0gYlBvaW50U2l6ZSkK
KyAgICAgICAgW3N0eWxlIHNldEZvbnRTaXplOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JWRweCIsIGFQb2ludFNpemVdXTsKKyAgICBlbHNlIGlmIChhUG9pbnRTaXplIDwgc29hKQorICAg
ICAgICBbc3R5bGUgX3NldEZvbnRTaXplRGVsdGE6QCItMXB4Il07CisgICAgZWxzZSBpZiAoYVBv
aW50U2l6ZSA+IHNvYSkKKyAgICAgICAgW3N0eWxlIF9zZXRGb250U2l6ZURlbHRhOkAiMXB4Il07
CisKKyAgICBpZiAoYVdlaWdodCA9PSBiV2VpZ2h0KQorICAgICAgICBbc3R5bGUgc2V0Rm9udFdl
aWdodDphV2VpZ2h0ID4gTUlOX0JPTERfV0VJR0hUID8gQCJib2xkIiA6IEAibm9ybWFsIl07CisK
KyAgICBpZiAoYUlzSXRhbGljID09IGJJc0l0YWxpYykKKyAgICAgICAgW3N0eWxlIHNldEZvbnRT
dHlsZTphSXNJdGFsaWMgPyBAIml0YWxpYyIgOiAgQCJub3JtYWwiXTsKK30KKworLSAoRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21Gb250TWFuYWdlck9wZXJhdGlvbgoreworICAg
IERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOworCisg
ICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07
CisKKyAgICBOU0ZvbnQgKm9hID0gW3NlbGYgX29yaWdpbmFsRm9udEFdOworICAgIE5TRm9udCAq
b2IgPSBbc2VsZiBfb3JpZ2luYWxGb250Ql07ICAgIAorICAgIFtzZWxmIF9hZGRUb1N0eWxlOnN0
eWxlIGZvbnRBOltmbSBjb252ZXJ0Rm9udDpvYV0gZm9udEI6W2ZtIGNvbnZlcnRGb250Om9iXV07
CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKKy0gKHZvaWQpY2hhbmdlRm9udDooaWQpc2VuZGVy
Cit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVj
dGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udE1hbmFnZXJPcGVyYXRpb25dIHdpdGhVbmRvQWN0aW9u
OkVkaXRBY3Rpb25TZXRGb250XTsKK30KKworLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9z
dHlsZUZvckF0dHJpYnV0ZUNoYW5nZTooaWQpc2VuZGVyCit7CisgICAgRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07CisKKyAgICBOU1NoYWRvdyAqc2hh
ZG93ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5pdF07CisgICAgW3NoYWRvdyBzZXRTaGFkb3dPZmZz
ZXQ6TlNNYWtlU2l6ZSgxLCAxKV07CisKKyAgICBOU0RpY3Rpb25hcnkgKm9hID0gW05TRGljdGlv
bmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICBbc2VsZiBfb3JpZ2lu
YWxGb250QV0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsCisgICAgICAgIG5pbF07CisgICAgTlNEaWN0
aW9uYXJ5ICpvYiA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoK
KyAgICAgICAgW05TQ29sb3IgYmxhY2tDb2xvcl0sIE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZSwKKyAgICAgICAgW3NlbGYgX29yaWdpbmFsRm9udEJdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1l
LAorICAgICAgICBbTlNDb2xvciB3aGl0ZUNvbG9yXSwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lLAorICAgICAgICBzaGFkb3csIE5TU2hhZG93QXR0cmlidXRlTmFtZSwKKyAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0sIE5TU3RyaWtl
dGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6MV0sIE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lLAorICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSwgTlNVbmRlcmxpbmVTdHlsZUF0dHJp
YnV0ZU5hbWUsCisgICAgICAgIG5pbF07CisKKyAgICBbc2hhZG93IHJlbGVhc2VdOworCisjaWYg
MAorCitOU09ibGlxdWVuZXNzQXR0cmlidXRlTmFtZSAgICAgICAgLyogZmxvYXQ7IHNrZXcgdG8g
YmUgYXBwbGllZCB0byBnbHlwaHMsIGRlZmF1bHQgMDogbm8gc2tldyAqLworICAgIC8vIGZvbnQt
c3R5bGUsIGJ1dCB0aGF0IGlzIGp1c3QgYW4gb24tb2ZmIHN3aXRjaAorCitOU0V4cGFuc2lvbkF0
dHJpYnV0ZU5hbWUgICAgICAgICAgLyogZmxvYXQ7IGxvZyBvZiBleHBhbnNpb24gZmFjdG9yIHRv
IGJlIGFwcGxpZWQgdG8gZ2x5cGhzLCBkZWZhdWx0IDA6IG5vIGV4cGFuc2lvbiAqLworICAgIC8v
IGZvbnQtc3RyZXRjaD8KKworTlNLZXJuQXR0cmlidXRlTmFtZSAgICAgICAgICAgICAgIC8qIGZs
b2F0LCBhbW91bnQgdG8gbW9kaWZ5IGRlZmF1bHQga2VybmluZywgaWYgMCwga2VybmluZyBvZmYg
Ki8KKyAgICAvLyBsZXR0ZXItc3BhY2luZz8gcHJvYmFibHkgbm90IGdvb2QgZW5vdWdoCisKK05T
VW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDog
c2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCitOU1N0cmlrZXRocm91Z2hDb2xvckF0dHJpYnV0
ZU5hbWUgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAq
LworICAgIC8vIHRleHQtZGVjb3JhdGlvbi1jb2xvcj8KKworTlNMaWdhdHVyZUF0dHJpYnV0ZU5h
bWUgICAgICAgICAgIC8qIGludCwgZGVmYXVsdCAxOiBkZWZhdWx0IGxpZ2F0dXJlcywgMDogbm8g
bGlnYXR1cmVzLCAyOiBhbGwgbGlnYXR1cmVzICovCitOU0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRl
TmFtZSAgICAgLyogZmxvYXQsIGluIHBvaW50czsgb2Zmc2V0IGZyb20gYmFzZWxpbmUsIGRlZmF1
bHQgMCAqLworTlNTdHJva2VXaWR0aEF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIGZsb2F0LCBpbiBw
ZXJjZW50IG9mIGZvbnQgcG9pbnQgc2l6ZSwgZGVmYXVsdCAwOiBubyBzdHJva2U7IHBvc2l0aXZl
IGZvciBzdHJva2UgYWxvbmUsIG5lZ2F0aXZlIGZvciBzdHJva2UgYW5kIGZpbGwgKGEgdHlwaWNh
bCB2YWx1ZSBmb3Igb3V0bGluZWQgdGV4dCB3b3VsZCBiZSAzLjApICovCitOU1N0cm9rZUNvbG9y
QXR0cmlidXRlTmFtZSAgICAgICAgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6IHNhbWUgYXMgZm9y
ZWdyb3VuZCBjb2xvciAqLworICAgIC8vIG5lZWQgZXh0ZW5zaW9ucz8KKworI2VuZGlmCisgICAg
CisgICAgTlNEaWN0aW9uYXJ5ICphID0gW3NlbmRlciBjb252ZXJ0QXR0cmlidXRlczpvYV07Cisg
ICAgTlNEaWN0aW9uYXJ5ICpiID0gW3NlbmRlciBjb252ZXJ0QXR0cmlidXRlczpvYl07CisKKyAg
ICBOU0NvbG9yICpjYSA9IFthIG9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWVdOworICAgIE5TQ29sb3IgKmNiID0gW2Igb2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CisgICAgaWYgKGNhID09IGNiKSB7CisgICAgICAgIFtzdHlsZSBz
ZXRCYWNrZ3JvdW5kQ29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y2FdXTsKKyAgICB9CisKKyAg
ICBbc2VsZiBfYWRkVG9TdHlsZTpzdHlsZSBmb250QTpbYSBvYmplY3RGb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV0gZm9udEI6W2Igb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdXTsK
KworICAgIGNhID0gW2Egb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV07CisgICAgY2IgPSBbYiBvYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXTsKKyAgICBpZiAoY2EgPT0gY2IpIHsKKyAgICAgICAgW3N0eWxlIHNldENvbG9yOltzZWxm
IF9jb2xvckFzU3RyaW5nOmNhXV07CisgICAgfQorCisgICAgTlNTaGFkb3cgKnNoYSA9IFthIG9i
amVjdEZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOworICAgIGlmIChzaGEpCisgICAgICAg
IFtzdHlsZSBzZXRUZXh0U2hhZG93OltzZWxmIF9zaGFkb3dBc1N0cmluZzpzaGFdXTsKKyAgICBl
bHNlIGlmIChbYiBvYmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXSA9PSBuaWwpCisg
ICAgICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OkAibm9uZSJdOworCisgICAgaW50IHNhID0gW1th
IG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVl
XTsKKyAgICBpbnQgc2IgPSBbW2Igb2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0
cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGlmIChzYSA9PSBzYikgeworICAgICAgICBpZiAo
c2EgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCisgICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVy
dHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJp
b3JpdHk6QCIiXTsgCisgICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAibm8gbGluZS10aHJv
dWdoIiByYXRoZXIgdGhhbiAibm9uZSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0eWxl
IHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpA
ImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsKKyAgICAgICAgICAgIC8vIHdlIHJlYWxseSBt
ZWFuICJhZGQgbGluZS10aHJvdWdoIiByYXRoZXIgdGhhbiAibGluZS10aHJvdWdoIgorICAgIH0K
KworICAgIHNhID0gW1thIG9iamVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0g
aW50VmFsdWVdOworICAgIHNiID0gW1tiIG9iamVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmli
dXRlTmFtZV0gaW50VmFsdWVdOworICAgIGlmIChzYSA9PSBzYikgeworICAgICAgICBpZiAoc2Eg
PiAwKQorICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdXBlciJdOworICAg
ICAgICBlbHNlIGlmIChzYSA8IDApCisgICAgICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGln
bjpAInN1YiJdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxB
bGlnbjpAImJhc2VsaW5lIl07CisgICAgfQorCisgICAgaW50IHVhID0gW1thIG9iamVjdEZvcktl
eTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGludCB1YiA9
IFtbYiBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVl
XTsKKyAgICBpZiAodWEgPT0gdWIpIHsKKyAgICAgICAgaWYgKHVhID09IE5TVW5kZXJsaW5lU3R5
bGVOb25lKQorICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVj
b3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHByaW9yaXR5OkAiIl07CisgICAgICAg
ICAgICAvLyB3ZSByZWFsbHkgbWVhbiAibm8gdW5kZXJsaW5lIiByYXRoZXIgdGhhbiAibm9uZSIK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRl
eHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6QCIi
XTsKKyAgICAgICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJhZGQgdW5kZXJsaW5lIiByYXRoZXIg
dGhhbiAidW5kZXJsaW5lIgorICAgIH0KKworICAgIHJldHVybiBzdHlsZTsKK30KKworLSAodm9p
ZCljaGFuZ2VBdHRyaWJ1dGVzOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisK
KyAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZvckF0dHJpYnV0
ZUNoYW5nZTpzZW5kZXJdIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVz
XTsKK30KKworLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21Db2xvclBhbmVs
V2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBET01DU1NTdHlsZURlY2xhcmF0aW9u
ICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKKworICAgIEFTU0VSVChbc3R5bGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSk7CisgICAgW3N0eWxlIHBlcmZvcm1TZWxlY3RvcjpzZWxl
Y3RvciB3aXRoT2JqZWN0OltzZWxmIF9jb2xvckFzU3RyaW5nOltbTlNDb2xvclBhbmVsIHNoYXJl
ZENvbG9yUGFuZWxdIGNvbG9yXV1dOworICAgIAorICAgIHJldHVybiBzdHlsZTsKK30KKworLSAo
RWRpdEFjdGlvbilfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOihTRUwpc2Vs
ZWN0b3IKK3sKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xv
cjopKQorICAgICAgICByZXR1cm4gRWRpdEFjdGlvblNldEJhY2tncm91bmRDb2xvcjsgICAgCisg
ICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRDb2xvcjsKK30KKworLSAodm9pZClfY2hhbmdlQ1NTQ29s
b3JVc2luZ1NlbGVjdG9yOihTRUwpc2VsZWN0b3IgaW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQor
eworICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX3N0eWxlRnJvbUNv
bG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdOworICAgIFdlYlZpZXcgKndlYlZpZXcgPSBb
c2VsZiBfd2ViVmlld107CisgICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5E
T01SYW5nZTpyYW5nZV0pCisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUo
Y29yZShzdHlsZSksIFtzZWxmIF91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6
c2VsZWN0b3JdKTsKK30KKworLSAodm9pZCljaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjoo
aWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gTWltaWNraW5nIE5T
VGV4dFZpZXcsIHRoaXMgbWV0aG9kIHNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZQor
ICAgIC8vIGVudGlyZSBkb2N1bWVudC4gVGhlcmUgaXMgbm8gTlNUZXh0VmlldyBBUEkgZm9yIHNl
dHRpbmcgdGhlIGJhY2tncm91bmQKKyAgICAvLyBjb2xvciBvbiB0aGUgc2VsZWN0ZWQgcmFuZ2Ug
b25seS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseQorICAgIC8vIG5ldmVyIGNh
bGxlZCBmcm9tIHRoZSBVSSAoc2VlIGNvbW1lbnQgaW4gY2hhbmdlQ29sb3I6KS4KKyAgICAvLyBG
SVhNRTogdGhpcyBhY3R1YWxseSBoYXMgbm8gZWZmZWN0IHdoZW4gY2FsbGVkLCBwcm9iYWJseSBk
dWUgdG8gMzY1NDg1MC4gX2RvY3VtZW50UmFuZ2Ugc2VlbXMKKyAgICAvLyB0byBkbyB0aGUgcmln
aHQgdGhpbmcgYmVjYXVzZSBpdCB3b3JrcyBpbiBzdGFydFNwZWFraW5nOiwgYW5kIEkga25vdyBz
ZXRCYWNrZ3JvdW5kQ29sb3I6IGRvZXMgdGhlCisgICAgLy8gcmlnaHQgdGhpbmcgYmVjYXVzZSBJ
IHRlc3RlZCBpdCB3aXRoIFtzZWxmIF9zZWxlY3RlZFJhbmdlXS4KKyAgICAvLyBGSVhNRTogVGhp
cyB3b24ndCBhY3R1YWxseSBhcHBseSB0aGUgc3R5bGUgdG8gdGhlIGVudGlyZSByYW5nZSBoZXJl
LCBiZWNhdXNlIGl0IGVuZHMgdXAgY2FsbGluZworICAgIC8vIFtmcmFtZSBfYXBwbHlTdHlsZTpd
LCB3aGljaCBvcGVyYXRlcyBvbiB0aGUgY3VycmVudCBzZWxlY3Rpb24uIFRvIG1ha2UgdGhpcyB3
b3JrIHJpZ2h0LCB3ZSdsbAorICAgIC8vIG5lZWQgdG8gc2F2ZSBvZmYgdGhlIHNlbGVjdGlvbiwg
dGVtcG9yYXJpbHkgc2V0IGl0IHRvIHRoZSBlbnRpcmUgcmFuZ2UsIG1ha2UgdGhlIGNoYW5nZSwg
dGhlbgorICAgIC8vIHJlc3RvcmUgdGhlIG9sZCBzZWxlY3Rpb24uCisgICAgW3NlbGYgX2NoYW5n
ZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0QmFja2dyb3VuZENvbG9yOikgaW5S
YW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1dOworfQorCistICh2b2lkKWNoYW5nZUNvbG9yOihp
ZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICAvLyBGSVhNRTogaW4gTlNU
ZXh0VmlldywgdGhpcyBtZXRob2QgY2FsbHMgY2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6
IHdoZW4gYQorICAgIC8vIHByaXZhdGUgY2FsbCBoYXMgZWFybGllciBiZWVuIG1hZGUgYnkgW05T
Rm9udEZvbnRFZmZlY3RzQm94IGNoYW5nZUNvbG9yOl0sIHNlZSAzNjc0NDkzLiAKKyAgICAvLyBB
cHBLaXQgd2lsbCBoYXZlIHRvIGJlIHJldmlzZWQgdG8gYWxsb3cgdGhpcyB0byB3b3JrIHdpdGgg
YW55dGhpbmcgdGhhdCBpc24ndCBhbiAKKyAgICAvLyBOU1RleHRWaWV3LiBIb3dldmVyLCB0aGlz
IG1pZ2h0IG5vdCBiZSByZXF1aXJlZCBmb3IgVGlnZXIsIHNpbmNlIHRoZSBiYWNrZ3JvdW5kLWNv
bG9yIAorICAgIC8vIGNoYW5naW5nIGJveCBpbiB0aGUgZm9udCBwYW5lbCBkb2Vzbid0IHdvcmsg
aW4gTWFpbCAoMzY3NDQ4MSksIHRob3VnaCBpdCBkb2VzIGluIFRleHRFZGl0LgorICAgIFtzZWxm
IF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2Vs
ZWN0b3I6QHNlbGVjdG9yKHNldENvbG9yOildIAorICAgICAgICAgICAgICAgICAgd2l0aFVuZG9B
Y3Rpb246RWRpdEFjdGlvblNldENvbG9yXTsKK30KKworLSAodm9pZClfY2hhbmdlV29yZENhc2VX
aXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwor
ICAgIFtzZWxmIHNlbGVjdFdvcmQ6bmlsXTsKKyAgICBOU1N0cmluZyAqd29yZCA9IFtbZnJhbWUg
X3NlbGVjdGVkU3RyaW5nXSBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3JdOworICAgIC8vIEZJWE1F
OiBEb2VzIHRoaXMgbmVlZCBhIGRpZmZlcmVudCBhY3Rpb24gY29udGV4dCBvdGhlciB0aGFuICJ0
eXBlZCI/CisgICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6d29y
ZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWRdKQorICAgICAgICBbZnJhbWUg
X3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3b3JkIHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0
UmVwbGFjZTpOT107Cit9CisKKy0gKHZvaWQpdXBwZXJjYXNlV29yZDooaWQpc2VuZGVyCit7Cisg
ICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVj
dG9yOkBzZWxlY3Rvcih1cHBlcmNhc2VTdHJpbmcpXTsKK30KKworLSAodm9pZClsb3dlcmNhc2VX
b3JkOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBbc2VsZiBfY2hh
bmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKGxvd2VyY2FzZVN0cmluZyldOworfQor
CistICh2b2lkKWNhcGl0YWxpemVXb3JkOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xP
R1VFCisKKyAgICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKGNh
cGl0YWxpemVkU3RyaW5nKV07Cit9CisKKy0gKHZvaWQpY29tcGxldGU6KGlkKXNlbmRlcgorewor
ICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIpCisgICAgICAgIF9w
cml2YXRlLT5jb21wQ29udHJvbGxlciA9IFtbV2ViVGV4dENvbXBsZXRlQ29udHJvbGxlciBhbGxv
Y10gaW5pdFdpdGhIVE1MVmlldzpzZWxmXTsKKyAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVy
IGRvQ29tcGxldGlvbl07Cit9CisKKy0gKHZvaWQpY2hlY2tTcGVsbGluZzooaWQpc2VuZGVyCit7
CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hZHZhbmNlVG9O
ZXh0TWlzc3BlbGxpbmcoKTsKK30KKworLSAodm9pZClzaG93R3Vlc3NQYW5lbDooaWQpc2VuZGVy
Cit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIg
PSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKKyAgICBpZiAoIWNoZWNrZXIp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIE5TUGFuZWwgKnNwZWxsaW5nUGFuZWwgPSBbY2hlY2tlciBz
cGVsbGluZ1BhbmVsXTsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBQb3N0LVRp
Z2VyLCB0aGlzIG1lbnUgaXRlbSBpcyBhIHNob3cvaGlkZSB0b2dnbGUsIHRvIG1hdGNoIEFwcEtp
dC4gTGVhdmUgVGlnZXIgYmVoYXZpb3IgYWxvbmUKKyAgICAvLyB0byBtYXRjaCByZXN0IG9mIE9T
IFguCisgICAgaWYgKFtzcGVsbGluZ1BhbmVsIGlzVmlzaWJsZV0pIHsKKyAgICAgICAgW3NwZWxs
aW5nUGFuZWwgb3JkZXJPdXQ6c2VuZGVyXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorICAgIAorICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkK
KyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHRy
dWUpOworICAgIFtzcGVsbGluZ1BhbmVsIG9yZGVyRnJvbnQ6c2VuZGVyXTsKK30KKworLSAodm9p
ZClfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6KE5TU3RyaW5nICopbmV3V29yZAoreworICAgIGlmICgh
W3NlbGYgX2NhbkVkaXRdKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEb24ndCBjb3JyZWN0
IHRvIGVtcHR5IHN0cmluZy4gIChBcHBLaXQgY2hlY2tlZCB0aGlzLCB3ZSBtaWdodCBhcyB3ZWxs
IHRvby4pCisgICAgaWYgKCFbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSkgewor
ICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKFtuZXdXb3JkIGlzRXF1YWxUb1N0cmluZzpAIiJdKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dDpuZXdXb3JkIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQorICAg
ICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgc2Vs
ZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Cit9CisKKy0gKHZvaWQpY2hhbmdl
U3BlbGxpbmc6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxm
IF9jaGFuZ2VTcGVsbGluZ1RvV29yZDpbW3NlbmRlciBzZWxlY3RlZENlbGxdIHN0cmluZ1ZhbHVl
XV07Cit9CisKKy0gKHZvaWQpcGVyZm9ybUZpbmRQYW5lbEFjdGlvbjooaWQpc2VuZGVyCit7Cisg
ICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gSW1wbGVtZW50aW5nIHRoaXMgd2lsbCBwcm9i
YWJseSByZXF1aXJlIGNvcHlpbmcgYWxsIG9mIE5TRmluZFBhbmVsLmggYW5kIC5tLgorICAgIC8v
IFdlIG5lZWQgKmFsbW9zdCogdGhlIHNhbWUgdGhpbmcgYXMgQXBwS2l0LCBidXQgbm90IHF1aXRl
LgorICAgIExPR19FUlJPUigidW5pbXBsZW1lbnRlZCIpOworfQorCistICh2b2lkKXN0YXJ0U3Bl
YWtpbmc6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFdlYkZyYW1l
ICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CisgICAgRE9NUmFuZ2UgKnJhbmdlID0gW3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdOworICAgIGlmICghcmFuZ2UgfHwgW3JhbmdlIGNvbGxhcHNlZF0pCisgICAg
ICAgIHJhbmdlID0gW3NlbGYgX2RvY3VtZW50UmFuZ2VdOworICAgIFtOU0FwcCBzcGVha1N0cmlu
ZzpbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnJhbmdlXV07Cit9CisKKy0gKHZvaWQpc3RvcFNwZWFr
aW5nOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBbTlNBcHAgc3Rv
cFNwZWFraW5nOnNlbmRlcl07Cit9CisKKy0gKHZvaWQpdG9nZ2xlQmFzZVdyaXRpbmdEaXJlY3Rp
b246KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICghW3NlbGYg
X2NhbkVkaXRdKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uID0gUmlnaHRUb0xlZnRXcml0aW5n
RGlyZWN0aW9uOworICAgIHN3aXRjaCAoY29yZUZyYW1lLT5iYXNlV3JpdGluZ0RpcmVjdGlvbkZv
clNlbGVjdGlvblN0YXJ0KCkpIHsKKyAgICAgICAgY2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0OgorICAgICAgICAgICAgZGlyZWN0aW9uID0gTGVmdFRvUmlnaHRXcml0
aW5nRGlyZWN0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoZSB3cml0aW5n
RGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgbWV0aG9kIHdpbGwgbmV2ZXIgcmV0dXJuICJuYXR1
cmFsIi4gSXQKKyAgICAgICAgLy8gd2lsbCBhbHdheXMgcmV0dXJuIGEgY29uY3JldGUgZGlyZWN0
aW9uLiBTbywga2VlcCB0aGUgY29tcGlsZXIgaGFwcHksIGFuZCBhc3NlcnQgbm90IHJlYWNoZWQu
CisgICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihkaXJlY3Rpb24pOworfQorCist
ICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBDT01N
QU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gc3RhdGlj
X2Nhc3Q8TlNXcml0aW5nRGlyZWN0aW9uPihbc2VuZGVyIHRhZ10pOworICAgIAorICAgIC8vIFdl
IGRpc2FibGUgdGhlIG1lbnUgaXRlbSB0aGF0IHBlcmZvcm1zIHRoaXMgYWN0aW9uIGJlY2F1c2Ug
d2UgY2FuJ3QgaW1wbGVtZW50CisgICAgLy8gTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCdzIGJl
aGF2aW9yIHVzaW5nIENTUy4KKyAgICBBU1NFUlQod3JpdGluZ0RpcmVjdGlvbiAhPSBOU1dyaXRp
bmdEaXJlY3Rpb25OYXR1cmFsKTsKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRp
bmdEaXJlY3Rpb24od3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9S
aWdodCA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0Rp
cmVjdGlvbik7Cit9CisKK3N0YXRpYyBCT09MIHdyaXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5nc0Vu
YWJsZWQoKQoreworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKQorICAgIHJldHVybiBZRVM7CisjZWxzZQorICAgIE5TVXNlckRl
ZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107
CisgICAgcmV0dXJuIFtkZWZhdWx0cyBib29sRm9yS2V5OkAiTlNBbGxvd3NCYXNlV3JpdGluZ0Rp
cmVjdGlvbktleUJpbmRpbmdzIl0gfHwgW2RlZmF1bHRzIGJvb2xGb3JLZXk6QCJBcHBsZVRleHRE
aXJlY3Rpb24iXTsKKyNlbmRpZgorfQorCistICh2b2lkKV9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVj
dGlvblRvOihOU1dyaXRpbmdEaXJlY3Rpb24pZGlyZWN0aW9uCit7CisgICAgaWYgKCFbc2VsZiBf
Y2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBCT09MIGJpbmRpbmdzRW5h
YmxlZCA9IHdyaXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5nc0VuYWJsZWQoKTsKKworICAgIGlmICgh
YmluZGluZ3NFbmFibGVkKSB7CisgICAgICAgIE5TQmVlcCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQor
ICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihkaXJl
Y3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyBMZWZ0VG9SaWdodFdyaXRp
bmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb24pOworfQorCistICh2b2lk
KW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OihpZClzZW5kZXIKK3sKKyAgICBD
T01NQU5EX1BST0xPR1VFCisKKyAgICBbc2VsZiBfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25U
bzpOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodF07Cit9CisKKy0gKHZvaWQpbWFrZUJhc2VX
cml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJP
TE9HVUUKKworICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGlu
Z0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKK30KKworI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKy0gKHZvaWQpY2hhbmdlQmFzZVdy
aXRpbmdEaXJlY3Rpb25Ub0xUUjooaWQpc2VuZGVyCit7CisgICAgW3NlbGYgbWFrZUJhc2VXcml0
aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6c2VuZGVyXTsKK30KKworLSAodm9pZCljaGFuZ2VCYXNl
V3JpdGluZ0RpcmVjdGlvblRvUlRMOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZiBtYWtlQmFzZVdy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDpzZW5kZXJdOworfQorI2VuZGlmCisKKy0gKHZvaWQp
bWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDooaWQpc2VuZGVyCit7CisgICAgTE9HX0VS
Uk9SKCJTZW50IGZyb20gJUAuIiwgc2VuZGVyKTsKK30KKworI2lmIDAKKworLy8gQ1NTIGRvZXMg
bm90IGhhdmUgYSB3YXkgdG8gc3BlY2lmeSBhbiBvdXRsaW5lIGZvbnQsIHdoaWNoIG1heSBtYWtl
IHRoaXMgZGlmZmljdWx0IHRvIGltcGxlbWVudC4KKy8vIE1heWJlIGEgc3BlY2lhbCBjYXNlIG9m
IHRleHQtc2hhZG93PworLSAodm9pZClvdXRsaW5lOihpZClzZW5kZXI7CisKKy8vIFRoaXMgaXMg
cGFydCBvZiB0YWJsZSBzdXBwb3J0LCB3aGljaCBtYXkgYmUgaW4gTlNUZXh0VmlldyBmb3IgVGln
ZXIuCisvLyBJdCdzIHByb2JhYmx5IHNpbXBsZSB0byBkbyB0aGUgZXF1aXZhbGVudCB0aGluZyBm
b3IgV2ViS2l0LgorLSAodm9pZClpbnNlcnRUYWJsZTooaWQpc2VuZGVyOworCisvLyBUaGlzIGNv
dWxkIGJlIGltcG9ydGFudC4KKy0gKHZvaWQpdG9nZ2xlVHJhZGl0aW9uYWxDaGFyYWN0ZXJTaGFw
ZTooaWQpc2VuZGVyOworCisvLyBJJ20gbm90IHN1cmUgd2hhdCB0aGUgZXF1aXZhbGVudHMgb2Yg
dGhlc2UgaW4gdGhlIHdlYiB3b3JsZCBhcmUuCistICh2b2lkKWluc2VydExpbmVTZXBhcmF0b3I6
KGlkKXNlbmRlcjsKKy0gKHZvaWQpaW5zZXJ0UGFnZUJyZWFrOihpZClzZW5kZXI7CisKKy8vIFRo
ZXNlIG1ldGhvZHMgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBOU1RleHRWaWV3IHlldCBhdCB0aGUg
dGltZSBvZiB0aGlzIHdyaXRpbmcuCistICh2b2lkKWNoYW5nZUNhc2VPZkxldHRlcjooaWQpc2Vu
ZGVyOworLSAodm9pZCl0cmFuc3Bvc2VXb3JkczooaWQpc2VuZGVyOworCisjZW5kaWYKKworI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgorCisvLyBPdmVycmlkZSB0aGlzIHNvIHRoYXQgQXBwS2l0
IHdpbGwgc2VuZCB1cyBhcnJvdyBrZXlzIGFzIGtleSBkb3duIGV2ZW50cyBzbyB3ZSBjYW4KKy8v
IHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBiaW5kaW5ncyBtZWNoYW5pc20uCistIChCT09MKV93
YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgYm9vbCBoYXZlV2Vi
Q29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKworICAgIC8vIElmIHdlIGhhdmUgYSBm
cmFtZSwgb3VyIGtleURvd24gbWV0aG9kIHdpbGwgaGFuZGxlIGtleSBiaW5kaW5ncyBhZnRlciBz
ZW5kaW5nCisgICAgLy8gdGhlIGV2ZW50IHRocm91Z2ggdGhlIERPTSwgc28gYXNrIEFwcEtpdCBu
b3QgdG8gZG8gaXRzIGVhcmx5IHNwZWNpYWwga2V5IGJpbmRpbmcKKyAgICAvLyBtYXBwaW5nLiBJ
ZiB3ZSBkb24ndCBoYXZlIGEgZnJhbWUsIGp1c3QgbGV0IHRoaW5ncyB3b3JrIHRoZSBub3JtYWwg
d2F5IHdpdGhvdXQKKyAgICAvLyBhIGtleURvd24uCisgICAgcmV0dXJuIGhhdmVXZWJDb3JlRnJh
bWU7Cit9CisKKyNlbHNlCisKKy8vIFN1cGVyLWhhY2sgYWxlcnQuCisvLyBBbGwgdGhpcyBjb2Rl
IGFjY29tcGxpc2hlcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgX3dhbnRzS2V5RG93bkZvckV2ZW50
IG1ldGhvZCBhYm92ZS4KKworLy8gUmV0dXJucyBhIHNlbGVjdG9yIG9ubHkgaWYgY2FsbGVkIHdo
aWxlOgorLy8gICAxKSBmaXJzdCByZXNwb25kZXIgaXMgc2VsZgorLy8gICAyKSBoYW5kbGluZyBh
IGtleSBkb3duIGV2ZW50CisvLyAgIDMpIG5vdCB5ZXQgaW5zaWRlIGtleURvd246IG1ldGhvZAor
Ly8gICA0KSBrZXkgaXMgYW4gYXJyb3cga2V5CisvLyBUaGUgc2VsZWN0b3IgaXMgdGhlIG9uZSB0
aGF0IGdldHMgc2VudCBieSAtW05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0gZm9yIHRo
aXMga2V5LgorLSAoU0VMKV9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5n
Cit7CisgICAgTlNXaW5kb3cgKncgPSBbc2VsZiB3aW5kb3ddOworICAgIGlmIChbdyBmaXJzdFJl
c3BvbmRlcl0gIT0gc2VsZikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgTlNFdmVudCAqZSA9
IFt3IGN1cnJlbnRFdmVudF07CisgICAgaWYgKFtlIHR5cGVdICE9IE5TS2V5RG93bikKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGUgPT0gX3ByaXZhdGUtPmtleURvd25FdmVudCkKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgTlNTdHJpbmcgKnMgPSBbZSBjaGFyYWN0ZXJzSWdub3Jp
bmdNb2RpZmllcnNdOworICAgIGlmIChbcyBsZW5ndGhdID09IDApCisgICAgICAgIHJldHVybiBO
VUxMOworICAgIHN3aXRjaCAoW3MgY2hhcmFjdGVyQXRJbmRleDowXSkgeworICAgICAgICBjYXNl
IE5TRG93bkFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1v
dmVEb3duOik7CisgICAgICAgIGNhc2UgTlNMZWZ0QXJyb3dGdW5jdGlvbktleToKKyAgICAgICAg
ICAgIHJldHVybiBAc2VsZWN0b3IobW92ZUxlZnQ6KTsKKyAgICAgICAgY2FzZSBOU1JpZ2h0QXJy
b3dGdW5jdGlvbktleToKKyAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZVJpZ2h0Oik7
CisgICAgICAgIGNhc2UgTlNVcEFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICByZXR1cm4g
QHNlbGVjdG9yKG1vdmVVcDopOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorfQorCisvLyBSZXR1cm5zIE5PIGluc3RlYWQgb2YgWUVTIGlmIGNhbGxl
ZCBvbiB0aGUgc2VsZWN0b3IgdGhhdCB0aGUKKy8vIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9y
SWZQcmVwcm9jZXNzaW5nIG1ldGhvZCByZXR1cm5zLgorLy8gVGhpcyBzaG91bGQgb25seSBoYXBw
ZW4gaW5zaWRlIC1bTlNXaW5kb3cgX3Byb2Nlc3NLZXlib2FyZFVJS2V5XSwKKy8vIGFuZCB0b2dl
dGhlciB3aXRoIHRoZSBjaGFuZ2UgYmVsb3cgc2hvdWxkIGNhdXNlIHRoYXQgbWV0aG9kCisvLyB0
byByZXR1cm4gTk8gcmF0aGVyIHRoYW4gaGFuZGxpbmcgdGhlIGtleS4KKy8vIEFsc28gc2V0IGEg
MS1zaG90IGZsYWcgZm9yIHRoZSBuZXh0UmVzcG9uZGVyIGNoZWNrIGJlbG93LgorLSAoQk9PTCly
ZXNwb25kc1RvU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIGlmICghW3N1cGVyIHJlc3Bv
bmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBTRUwgYXJy
b3dLZXlTZWxlY3RvciA9IFtzZWxmIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9j
ZXNzaW5nXTsKKyAgICBpZiAoc2VsZWN0b3IgIT0gYXJyb3dLZXlTZWxlY3RvcikKKyAgICAgICAg
cmV0dXJuIFlFUzsKKyAgICBfcHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZSA9IFlF
UzsKKyAgICByZXR1cm4gTk87Cit9CisKKy8vIFJldHVybnMgbmlsIGluc3RlYWQgb2YgdGhlIG5l
eHQgcmVzcG9uZGVyIGlmIGNhbGxlZCB3aGVuIHRoZQorLy8gb25lLXNob3QgZmxhZyBpcyBzZXQs
IGFuZCBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZworLy8gcmV0dXJu
cyBzb21ldGhpbmcgb3RoZXIgdGhhbiBOVUxMLiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpbnNp
ZGUKKy8vIC1bTlNXaW5kb3cgX3Byb2Nlc3NLZXlib2FyZFVJS2V5XSBhbmQgdG9nZXRoZXIgd2l0
aCB0aGUgY2hhbmdlIGFib3ZlCisvLyBzaG91bGQgY2F1c2UgdGhhdCBtZXRob2QgdG8gcmV0dXJu
IE5PIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBrZXkuCistIChOU1Jlc3BvbmRlciAqKW5leHRS
ZXNwb25kZXIKK3sKKyAgICBCT09MIGRpc2FibGVkID0gX3ByaXZhdGUtPm5leHRSZXNwb25kZXJE
aXNhYmxlZE9uY2U7CisgICAgX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2UgPSBO
TzsKKyAgICBpZiAoZGlzYWJsZWQgJiYgW3NlbGYgX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJ
ZlByZXByb2Nlc3NpbmddICE9IE5VTEwpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IFtzdXBlciBuZXh0UmVzcG9uZGVyXTsKK30KKworI2VuZGlmCisKKy0gKHZvaWQpX3VwZGF0ZUNv
bnRyb2xUaW50cworeworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IGZy
YW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgdmlldy0+
dXBkYXRlQ29udHJvbFRpbnRzKCk7Cit9CisKKy8vIERlc3BpdGUgaXRzIG5hbWUsIHRoaXMgaXMg
Y2FsbGVkIGF0IGRpZmZlcmVudCB0aW1lcyB0aGFuIHdpbmRvd0RpZEJlY29tZUtleSBpcy4KKy8v
IEl0IHRha2VzIGludG8gYWNjb3VudCBhbGwgdGhlIG90aGVyIGZhY3RvcnMgdGhhdCBkZXRlcm1p
bmUgd2hlbiBOU0NlbGwgZHJhd3MKKy8vIHdpdGggZGlmZmVyZW50IHRpbnRzLCBzbyBpdCdzIHRo
ZSByaWdodCBjYWxsIHRvIHVzZSBmb3IgY29udHJvbCB0aW50cy4gV2UnZCBwcmVmZXIKKy8vIHRv
IGRvIHRoaXMgd2l0aCBBUEkuIDxyZGFyOi8vcHJvYmxlbS81MTM2NzYwPgorLSAodm9pZClfd2lu
ZG93Q2hhbmdlZEtleVN0YXRlCit7CisgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAg
ICBbc2VsZiBfdXBkYXRlQ29udHJvbFRpbnRzXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHBl
cmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoX3VwZGF0ZUNvbnRyb2xUaW50cykg
d2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107CisKKyAgICBbc3VwZXIgX3dpbmRvd0No
YW5nZWRLZXlTdGF0ZV07Cit9CisKKy0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKill
dmVudAoreworICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQorICAgICAgICBbc2Vs
ZiBtb3VzZURvd246ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAgW3N1cGVyIG90aGVyTW91c2VE
b3duOmV2ZW50XTsKK30KKworLSAodm9pZClvdGhlck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2
ZW50Cit7CisgICAgaWYgKFtldmVudCBidXR0b25OdW1iZXJdID09IDIpCisgICAgICAgIFtzZWxm
IG1vdXNlRHJhZ2dlZDpldmVudF07CisgICAgZWxzZQorICAgICAgICBbc3VwZXIgb3RoZXJNb3Vz
ZURyYWdnZWQ6ZXZlbnRdOworfQorCistICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2
ZW50Cit7CisgICAgaWYgKFtldmVudCBidXR0b25OdW1iZXJdID09IDIpCisgICAgICAgIFtzZWxm
IG1vdXNlVXA6ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAgW3N1cGVyIG90aGVyTW91c2VVcDpl
dmVudF07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TQXJyYXkgKFdlYkhUTUxWaWV3
KQorCistICh2b2lkKV93ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2Vs
ZWN0b3Igd2l0aE9iamVjdDooaWQpb2JqZWN0Cit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCisgICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3NlbGYgb2JqZWN0RW51bWVy
YXRvcl07CisgICAgV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICp2aWV3OworICAgIHdoaWxlICgodmll
dyA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpCisgICAgICAgIGlmIChbdmlldyBp
c0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pCisgICAgICAg
ICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVjdDpvYmplY3RdOwor
I2VuZGlmCit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJJbnRl
cm5hbCkKKworLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAoreworICAgIFtzZWxmIF91cGRhdGVT
ZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdOworICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwor
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAg
Y29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwor
fQorCistICh2b2lkKV91cGRhdGVGb250UGFuZWwKK3sKKyAgICAvLyBGSVhNRTogTlNUZXh0Vmll
dyBiYWlscyBvdXQgaWYgYmVjb21pbmcgb3IgcmVzaWduaW5nIGZpcnN0IHJlc3BvbmRlciwgZm9y
IHdoaWNoIGl0IGhhcyBpdmFyIGZsYWdzLiBOb3QKKyAgICAvLyBzdXJlIGlmIHdlIG5lZWQgdG8g
ZG8gc29tZXRoaW5nIHNpbWlsYXIuCisgICAgCisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93
XTsKKyAgICAvLyBGSVhNRTogaXMgdGhpcyBmaXJzdC1yZXNwb25kZXIgY2hlY2sgY29ycmVjdD8g
V2hhdCBoYXBwZW5zIGlmIGEgc3ViZnJhbWUgaXMgZWRpdGFibGUgYW5kIGlzIGZpcnN0IHJlc3Bv
bmRlcj8KKyAgICBpZiAoW05TQXBwIGtleVdpbmRvd10gIT0gd2luZG93IHx8IFt3aW5kb3cgZmly
c3RSZXNwb25kZXJdICE9IHNlbGYpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIG11
bHRpcGxlRm9udHMgPSBmYWxzZTsKKyAgICBOU0ZvbnQgKmZvbnQgPSBuaWw7CisgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGlmIChjb25z
dCBTaW1wbGVGb250RGF0YSogZmQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5mb250Rm9yU2VsZWN0
aW9uKG11bHRpcGxlRm9udHMpKQorICAgICAgICAgICAgZm9udCA9IGZkLT5nZXROU0ZvbnQoKTsK
KyAgICB9CisgICAgCisKKyAgICAvLyBGSVhNRTogZm9yIG5vdywgcmV0dXJuIGEgYm9ndXMgZm9u
dCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlIGVtcHR5IHNlbGVjdGlvbiBmcm9tIHRoZSBub24tZW1w
dHkKKyAgICAvLyBzZWxlY3Rpb24uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIG9u
Y2UgdGhlIHJlc3Qgb2YgdGhpcyBjb2RlIHdvcmtzIHByb3Blcmx5LgorICAgIGlmIChmb250ID09
IG5pbCkKKyAgICAgICAgZm9udCA9IFtzZWxmIF9oYXNTZWxlY3Rpb25dID8gW05TRm9udCBtZW51
Rm9udE9mU2l6ZToyM10gOiBbTlNGb250IHRvb2xUaXBzRm9udE9mU2l6ZToxN107CisgICAgQVNT
RVJUKGZvbnQgIT0gbmlsKTsKKworICAgIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl0gc2V0U2VsZWN0ZWRGb250OmZvbnQgaXNNdWx0aXBsZTptdWx0aXBsZUZvbnRzXTsKKworICAg
IC8vIEZJWE1FOiB3ZSBkb24ndCBrZWVwIHRyYWNrIG9mIHNlbGVjdGVkIGF0dHJpYnV0ZXMsIG9y
IHNldCB0aGVtIG9uIHRoZSBmb250IHBhbmVsLiBUaGlzCisgICAgLy8gYXBwZWFycyB0byBoYXZl
IG5vIGVmZmVjdCBvbiB0aGUgVUkuIEUuZy4sIHVuZGVybGluZWQgdGV4dCBpbiBNYWlsIG9yIFRl
eHRFZGl0IGlzCisgICAgLy8gbm90IHJlZmxlY3RlZCBpbiB0aGUgZm9udCBwYW5lbC4gTWF5YmUg
c29tZWRheSB0aGlzIHdpbGwgY2hhbmdlLgorfQorCistIChCT09MKV9jYW5TbWFydENvcHlPckRl
bGV0ZQoreworICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJs
ZWRdKQorICAgICAgICByZXR1cm4gTk87CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlv
bkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5OworfQorCistIChOU0V2ZW50ICopX21v
dXNlRG93bkV2ZW50Cit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5tb3VzZURvd25FdmVudDsKK30K
KworLSAoaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPilfaGlnaGxpZ2h0ZXJGb3JUeXBlOihOU1N0cmlu
ZyopdHlwZQoreworICAgIHJldHVybiBbX3ByaXZhdGUtPmhpZ2hsaWdodGVycyBvYmplY3RGb3JL
ZXk6dHlwZV07Cit9CisKKy0gKFdlYkZyYW1lICopX2ZyYW1lCit7CisgICAgcmV0dXJuIFtfcHJp
dmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV07Cit9CisKKy0gKHZvaWQpcGFzdGU6KGlkKXNlbmRl
cgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4g
c2VsZlByb3RlY3RvciA9IHNlbGY7CisgICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPnRyeURIVE1MUGFzdGUoKSkKKyAgICAgICAgcmV0
dXJuOyAvLyBESFRNTCBkaWQgdGhlIHdob2xlIG9wZXJhdGlvbgorICAgIGlmICghY29yZUZyYW1l
LT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgICAgICBbc2Vs
ZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBh
bGxvd1BsYWluVGV4dDpZRVNdOworICAgIGVsc2UKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+cGFzdGVBc1BsYWluVGV4dCgpOworfQorCistICh2b2lkKXBhc3RlQXNQbGFpblRleHQ6KGlk
KXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICghW3NlbGYgX2NhbkVk
aXRdKQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFz
dGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXV07Cit9CisKKy0gKHZvaWQp
Y2xvc2VJZk5vdEN1cnJlbnRWaWV3Cit7CisgICAgaWYgKFtbW3NlbGYgX2ZyYW1lXSBmcmFtZVZp
ZXddIGRvY3VtZW50Vmlld10gIT0gc2VsZikKKyAgICAgICAgW3NlbGYgY2xvc2VdOworfQorCist
IChET01Eb2N1bWVudEZyYWdtZW50KilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZy
YWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBpbkNvbnRleHQ6bmlsIGFsbG93UGxhaW5U
ZXh0Ok5PXTsKK30KKworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorCistIChCT09MKWlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZAoreworICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMg
dGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11
c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhlIEFwcEtpdCBj
b2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIHJldHVybiBbW3NlbGYgX3dlYlZp
ZXddIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0R3JhbW1hckNo
ZWNraW5nRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmll
dyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQg
d2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBoZXJlIGJlY2F1c2UKKyAgICAvLyB0aGUgQXBw
S2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisgICAgW1tzZWxmIF93ZWJWaWV3
XSBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2dsZUdy
YW1tYXJDaGVja2luZzooaWQpc2VuZGVyCit7CisgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmll
dyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQg
d2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBoZXJlIGJlY2F1c2UKKyAgICAvLyB0aGUgQXBw
S2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisgICAgW1tzZWxmIF93ZWJWaWV3
XSB0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6c2VuZGVyXTsKK30KKworCitzdGF0aWMgQ0dQb2ludCBj
b3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvckFwcEtpdFNjcmVlblBvaW50KE5TUG9pbnQgcG9pbnQp
Cit7CisgICAgTlNBcnJheSAqc2NyZWVucyA9IFtOU1NjcmVlbiBzY3JlZW5zXTsKKyAgICAKKyAg
ICBpZiAoW3NjcmVlbnMgY291bnRdID09IDApIHsKKyAgICAgICAgLy8gWW91IGNvdWxkIHRoZW9y
ZXRpY2FsbHkgZ2V0IGhlcmUgaWYgcnVubmluZyB3aXRoIG5vIG1vbml0b3IsIGluIHdoaWNoIGNh
c2UgaXQgZG9lc24ndCBtYXR0ZXIKKyAgICAgICAgLy8gbXVjaCB3aGVyZSB0aGUgIm9uLXNjcmVl
biIgcG9pbnQgaXMuCisgICAgICAgIHJldHVybiBDR1BvaW50TWFrZShwb2ludC54LCBwb2ludC55
KTsKKyAgICB9CisgICAgCisgICAgLy8gRmxpcCB0aGUgeSBjb29yZGluYXRlIGZyb20gdGhlIHRv
cCBvZiB0aGUgbWVudSBiYXIgc2NyZWVuIC0tIHNlZSA0NjM2MzkwCisgICAgcmV0dXJuIENHUG9p
bnRNYWtlKHBvaW50LngsIE5TTWF4WShbW3NjcmVlbnMgb2JqZWN0QXRJbmRleDowXSBmcmFtZV0p
IC0gcG9pbnQueSk7Cit9CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisKKy0gKHZvaWQpb3JkZXJGcm9u
dFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQor
CisgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXTsKKyAgICBpZiAoIWNoZWNrZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJObyBO
U1NwZWxsQ2hlY2tlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIE5TUGFu
ZWwgKnN1YnN0aXR1dGlvbnNQYW5lbCA9IFtjaGVja2VyIHN1YnN0aXR1dGlvbnNQYW5lbF07Cisg
ICAgaWYgKFtzdWJzdGl0dXRpb25zUGFuZWwgaXNWaXNpYmxlXSkgeworICAgICAgICBbc3Vic3Rp
dHV0aW9uc1BhbmVsIG9yZGVyT3V0OnNlbmRlcl07CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgW3N1YnN0aXR1dGlvbnNQYW5lbCBvcmRlckZyb250OnNlbmRlcl07Cit9CisKKy8vIEZJWE1F
IDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgbG9naWMsIGJ1dCB3
ZSBtdXN0IGltcGxlbWVudCB0aGVzZSBtZXRob2RzIGhlcmUgYmVjYXVzZQorLy8gdGhlIEFwcEtp
dCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorCistIChCT09MKXNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVk
OihCT09MKWZsYWcKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVTbWFydEluc2VydERlbGV0ZTooaWQp
c2VuZGVyCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVTbWFydEluc2VydERlbGV0ZTpz
ZW5kZXJdOworfQorCistIChCT09MKWlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVk
Cit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1
dGlvbkVuYWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
RW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNR
dW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6ZmxhZ107Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21h
dGljUXVvdGVTdWJzdGl0dXRpb246KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmlld10g
dG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246c2VuZGVyXTsKK30KKworLSAoQk9PTClp
c0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2Vi
Vmlld10gaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBf
d2ViVmlld10gc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6ZmxhZ107Cit9CisKKy0g
KHZvaWQpdG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjooaWQpc2VuZGVyCit7CisgICAgW1tz
ZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOnNlbmRlcl07Cit9CisK
Ky0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZAoreworICAgIHJldHVy
biBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWRdOwor
fQorCistICh2b2lkKXNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZs
YWcKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25F
bmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRp
b246KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljRGFz
aFN1YnN0aXR1dGlvbjpzZW5kZXJdOworfQorCistIChCT09MKWlzQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50RW5hYmxlZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGlj
VGV4dFJlcGxhY2VtZW50RW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0QXV0b21hdGljVGV4dFJl
cGxhY2VtZW50RW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRB
dXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2ds
ZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDooaWQpc2VuZGVyCit7CisgICAgW1tzZWxmIF93ZWJW
aWV3XSB0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6c2VuZGVyXTsKK30KKworLSAoQk9P
TClpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQKK3sKKyAgICByZXR1cm4gW1tz
ZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWRdOworfQor
CistICh2b2lkKXNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxh
ZworeworICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9u
RW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb246KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uOnNlbmRlcl07Cit9CisKKyNlbmRpZgorCistICh2b2lkKV9sb29r
VXBJbkRpY3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyCit7CisgICAgLy8gRGljdGlvbmFyeSBB
UEkgd2lsbCBhY2NlcHQgYSB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5nIGFuZCBkaXNwbGF5IFVJIGFz
IGlmIGl0IHdlcmUgcmVhbCB0ZXh0LAorICAgIC8vIHNvIGJhaWwgb3V0IGVhcmx5IHRvIGF2b2lk
IHRoYXQuCisgICAgaWYgKFtbW3NlbGYgc2VsZWN0ZWRTdHJpbmddIF93ZWJraXRfc3RyaW5nQnlU
cmltbWluZ1doaXRlc3BhY2VdIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVk
U3RyaW5nXTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwor
ICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1JlY3QgcmVjdCA9
IGNvcmVGcmFtZS0+c2VsZWN0aW9uQm91bmRzKCk7CisKKyNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKKyAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbYXR0clN0cmluZyBmb250QXR0cmli
dXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwxKV07CisgICAgTlNGb250ICpmb250ID0gW2F0dHJp
YnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChmb250KQor
ICAgICAgICByZWN0Lm9yaWdpbi55ICs9IFtmb250IGFzY2VuZGVyXTsKKyNlbmRpZgorCisjaWYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCisgICAgW3NlbGYgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOmF0dHJTdHJp
bmcgYXRQb2ludDpyZWN0Lm9yaWdpbl07CisgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICAvLyBX
ZSBzb2Z0IGxpbmsgdG8gZ2V0IHRoZSBmdW5jdGlvbiB0aGF0IGRpc3BsYXlzIHRoZSBkaWN0aW9u
YXJ5IChlaXRoZXIgcG9wLXVwIHdpbmRvdyBvciBhcHApIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5j
ZQorICAgIC8vIHBlbmFsdHkgb2YgbGlua2luZyB0byBhbm90aGVyIGZyYW1ld29yay4gVGhpcyBm
dW5jdGlvbiBjaGFuZ2VkIHNpZ25hdHVyZSBhcyB3ZWxsIGFzIGZyYW1ld29yayBiZXR3ZWVuIFRp
Z2VyIGFuZCBMZW9wYXJkLAorICAgIC8vIHNvIHRoZSB0d28gY2FzZXMgYXJlIGhhbmRsZWQgc2Vw
YXJhdGVseS4KKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgdHlwZWRlZiBPU1N0YXR1
cyAoKlNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pKGlkIGluV29yZFN0cmluZywgTlNSZWN0IGlu
V29yZEJvdW5kYXJ5LCBVSW50MTYgaW5MaW5lRGlyZWN0aW9uKTsKKyAgICBjb25zdCBjaGFyICpm
cmFtZXdvcmtQYXRoID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGFuZ0FuYWx5c2lzLmZyYW1ld29yay9MYW5nQW5h
bHlzaXMiOworICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uTmFtZSA9ICJEQ01EaWN0aW9uYXJ5U2Vy
dmljZVdpbmRvd1Nob3ciOworI2Vsc2UKKyAgICB0eXBlZGVmIHZvaWQgKCpTZXJ2aWNlV2luZG93
U2hvd0Z1bmN0aW9uKShpZCB1bnVzZWREaWN0aW9uYXJ5UmVmLCBpZCBpbldvcmRTdHJpbmcsIENG
UmFuZ2Ugc2VsZWN0aW9uUmFuZ2UsIGlkIHVudXNlZEZvbnQsIENHUG9pbnQgdGV4dE9yaWdpbiwg
Qm9vbGVhbiB2ZXJ0aWNhbFRleHQsIGlkIHVudXNlZFRyYW5zZm9ybSk7CisgICAgY29uc3QgY2hh
ciAqZnJhbWV3b3JrUGF0aCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJh
bWV3b3JrL0ZyYW1ld29ya3MvSElUb29sYm94LmZyYW1ld29yay9ISVRvb2xib3giOworICAgIGNv
bnN0IGNoYXIgKmZ1bmN0aW9uTmFtZSA9ICJISURpY3Rpb25hcnlXaW5kb3dTaG93IjsKKyNlbmRp
ZgorCisgICAgc3RhdGljIGJvb2wgbG9va2VkRm9yRnVuY3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0
aWMgU2VydmljZVdpbmRvd1Nob3dGdW5jdGlvbiBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cg
PSBOVUxMOworCisgICAgaWYgKCFsb29rZWRGb3JGdW5jdGlvbikgeworICAgICAgICB2b2lkKiBs
YW5nQW5hbHlzaXNGcmFtZXdvcmsgPSBkbG9wZW4oZnJhbWV3b3JrUGF0aCwgUlRMRF9MQVpZKTsK
KyAgICAgICAgQVNTRVJUKGxhbmdBbmFseXNpc0ZyYW1ld29yayk7CisgICAgICAgIGlmIChsYW5n
QW5hbHlzaXNGcmFtZXdvcmspCisgICAgICAgICAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1No
b3cgPSAoU2VydmljZVdpbmRvd1Nob3dGdW5jdGlvbilkbHN5bShsYW5nQW5hbHlzaXNGcmFtZXdv
cmssIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIGxvb2tlZEZvckZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBBU1NFUlQoZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KTsKKyAgICBpZiAo
IWRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdykgeworICAgICAgICBOU0xvZyhAIkNvdWxkbid0
IGZpbmQgdGhlICVzIGZ1bmN0aW9uIGluICVzIiwgZnVuY3Rpb25OYW1lLCBmcmFtZXdvcmtQYXRo
KTsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgor
ICAgIC8vIEZJWE1FOiBtdXN0IGNoZWNrIGZvciByaWdodC10by1sZWZ0IGhlcmUKKyAgICBOU1dy
aXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRU
b1JpZ2h0OworCisgICAgLy8gRklYTUU6IHRoZSBkaWN0aW9uYXJ5IEFQSSBleHBlY3RzIHRoZSBy
ZWN0IGZvciB0aGUgZmlyc3QgbGluZSBvZiBzZWxlY3Rpb24uIFBhc3NpbmcKKyAgICAvLyB0aGUg
cmVjdCBmb3IgdGhlIGVudGlyZSBzZWxlY3Rpb24sIGFzIHdlIGRvIGhlcmUsIHBvc2l0aW9ucyB0
aGUgcG9wLXVwIHdpbmRvdyBuZWFyCisgICAgLy8gdGhlIGJvdHRvbSBvZiB0aGUgc2VsZWN0aW9u
IHJhdGhlciB0aGFuIGF0IHRoZSBzZWxlY3RlZCB3b3JkLgorICAgIHJlY3QgPSBbc2VsZiBjb252
ZXJ0UmVjdDpyZWN0IHRvVmlldzpuaWxdOworICAgIHJlY3Qub3JpZ2luID0gW1tzZWxmIHdpbmRv
d10gY29udmVydEJhc2VUb1NjcmVlbjpyZWN0Lm9yaWdpbl07CisgICAgTlNEYXRhICpkYXRhID0g
W2F0dHJTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyU3RyaW5nIGxlbmd0
aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOworICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93
U2hvdyhkYXRhLCByZWN0LCAod3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25S
aWdodFRvTGVmdCkgPyAxIDogMCk7CisjZWxzZQorICAgIC8vIFRoZSBISURpY3Rpb25hcnlXaW5k
b3dTaG93IGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBvcmlnaW4sIGluIENHIHNjcmVlbiBjb29yZGlu
YXRlcywgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0ZXh0IGluIHRoZSBzZWxlY3Rpb24uCisg
ICAgLy8gRklYTUUgNDk0NTgwODogV2UgYXBwcm94aW1hdGUgdGhpcyBpbiBhIHdheSB0aGF0IHdv
cmtzIHdlbGwgd2hlbiBhIHNpbmdsZSB3b3JkIGlzIHNlbGVjdGVkLCBhbmQgbGVzcyB3ZWxsIGlu
IHNvbWUgb3RoZXIgY2FzZXMKKyAgICAvLyAoYnV0IG5vIHdvcnNlIHRoYW4gd2UgZGlkIGluIFRp
Z2VyKQorICAgIE5TUG9pbnQgd2luZG93UG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6cmVjdC5v
cmlnaW4gdG9WaWV3Om5pbF07CisgICAgTlNQb2ludCBzY3JlZW5Qb2ludCA9IFtbc2VsZiB3aW5k
b3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2luZG93UG9pbnRdOworCisgICAgZGljdGlvbmFyeVNl
cnZpY2VXaW5kb3dTaG93KG5pbCwgYXR0clN0cmluZywgQ0ZSYW5nZU1ha2UoMCwgW2F0dHJTdHJp
bmcgbGVuZ3RoXSksIG5pbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVH
cmFwaGljc1NjcmVlblBvaW50Rm9yQXBwS2l0U2NyZWVuUG9pbnQoc2NyZWVuUG9pbnQpLCBmYWxz
ZSwgbmlsKTsKKyNlbmRpZgorfQorCistICh2b2lkKV9ob3ZlckZlZWRiYWNrU3VzcGVuZGVkQ2hh
bmdlZAoreworICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKK30KKwor
LSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihLZXlib2FyZEV2ZW50KilldmVudCBz
aG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91bGRTYXZlCit7CisgICAgLy8gQXNrIEFwcEtpdCB0
byBwcm9jZXNzIHRoZSBrZXkgZXZlbnQgLS0gaXQgd2lsbCBjYWxsIGJhY2sgd2l0aCBlaXRoZXIg
aW5zZXJ0VGV4dCBvciBkb0NvbW1hbmRCeVNlbGVjdG9yLgorICAgIFdlYkhUTUxWaWV3SW50ZXJw
cmV0S2V5RXZlbnRzUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMuZXZlbnRX
YXNIYW5kbGVkID0gZmFsc2U7CisgICAgcGFyYW1ldGVycy5zaG91bGRTYXZlQ29tbWFuZCA9IHNo
b3VsZFNhdmU7CisgICAgLy8gSWYgd2UncmUgaW50ZXJjZXB0aW5nIHRoZSBpbml0aWFsIElNIGNh
bGwgd2UgYXNzdW1lIHRoYXQgdGhlIElNIGhhcyBjb25zdW1lZCB0aGUgZXZlbnQsIAorICAgIC8v
IGFuZCBvbmx5IGNoYW5nZSB0aGlzIGFzc3VtcHRpb24gaWYgb25lIG9mIHRoZSBOU1RleHRJbnB1
dC9SZXNwb25kZXIgY2FsbGJhY2tzIGlzIHVzZWQuCisgICAgLy8gV2UgYXNzdW1lIHRoZSBJTSB3
aWxsICpub3QqIGNvbnN1bWUgaG90a2V5IHNlcXVlbmNlcworICAgIHBhcmFtZXRlcnMuY29uc3Vt
ZWRCeUlNID0gIWV2ZW50LT5tZXRhS2V5KCkgJiYgc2hvdWxkU2F2ZTsKKworICAgIGlmIChjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRmb3JtRXZlbnQgPSBldmVudC0+a2V5RXZlbnQo
KSkgeworICAgICAgICBOU0V2ZW50ICptYWNFdmVudCA9IHBsYXRmb3JtRXZlbnQtPm1hY0V2ZW50
KCk7CisgICAgICAgIGlmIChbbWFjRXZlbnQgdHlwZV0gPT0gTlNLZXlEb3duICYmIFtfcHJpdmF0
ZS0+Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5RG93bjptYWNFdmVudF0pCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChbbWFjRXZlbnQgdHlwZV0gPT0gTlNG
bGFnc0NoYW5nZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBwYXJhbWV0ZXJzLmV2ZW50ID0gZXZlbnQ7CisgICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRL
ZXlFdmVudHNQYXJhbWV0ZXJzID0gJnBhcmFtZXRlcnM7CisgICAgICAgIF9wcml2YXRlLT5yZWNl
aXZlZE5PT1AgPSBOTzsKKyAgICAgICAgY29uc3QgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNv
bW1hbmRzID0gZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKTsKKyAgICAgICAgYm9vbCBoYXNLZXlw
cmVzc0NvbW1hbmQgPSAhY29tbWFuZHMuaXNFbXB0eSgpOworCisgICAgICAgIC8vIEZJWE1FOiBp
bnRlcnByZXRLZXlFdmVudHMgZG9lc24ndCBtYXRjaCBhcHBsaWNhdGlvbiBrZXkgZXF1aXZhbGVu
dHMgKHN1Y2ggYXMgQ21kK0EpLAorICAgICAgICAvLyBhbmQgc2VuZHMgbm9vcDogZm9yIHRob3Nl
LiBBcyBhIHJlc3VsdCwgd2UgZG9uJ3QgaGFuZGxlIHRob3NlIGZyb20gd2l0aGluIFdlYkNvcmUs
CisgICAgICAgIC8vIGJ1dCBzZW5kIGEgZnVsbCBzZXF1ZW5jZSBvZiBET00gZXZlbnRzLCBpbmNs
dWRpbmcgYW4gdW5uZWVkZWQga2V5cHJlc3MuCisgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3Vs
ZFNhdmVDb21tYW5kIHx8ICFoYXNLZXlwcmVzc0NvbW1hbmQpCisgICAgICAgICAgICBbc2VsZiBp
bnRlcnByZXRLZXlFdmVudHM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0Om1hY0V2ZW50XV07Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBjb21tYW5kcy5zaXplKCk7
CisgICAgICAgICAgICAvLyBBcmUgdGhlcmUgY29tbWFuZHMgdGhhdCB3b3VsZCBqdXN0IGNhdXNl
IHRleHQgaW5zZXJ0aW9uIGlmIGV4ZWN1dGVkIHZpYSBFZGl0b3I/CisgICAgICAgICAgICAvLyBX
ZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lk
ZSBob3cgdGhleSBzaG91bGQgYmUgdHJlYXRlZCwgc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3Jl
CisgICAgICAgICAgICAvLyB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1tZWRpYXRlbHkgKGUuZy4g
VGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3MgZXZlbnQgYmUgZ2VuZXJh
dGVkCisgICAgICAgICAgICAvLyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRzIGEgVGFiIGNoYXJhY3Rl
ciwgb3IgRW50ZXIpLgorICAgICAgICAgICAgYm9vbCBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRz
ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAgICAgICAgIGlmIChbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxl
Y3RvckZyb21TdHJpbmcoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpXS5pc1RleHRJbnNlcnRpb24o
KSkKKyAgICAgICAgICAgICAgICAgICAgaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFu
ZHMgfHwgcGxhdGZvcm1FdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hh
cikgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kc1tpXS5jb21tYW5kTmFtZSA9PSAiaW5z
ZXJ0VGV4dDoiKQorICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYgaW5zZXJ0VGV4dDpjb21t
YW5kc1tpXS50ZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgW3NlbGYgZG9Db21tYW5kQnlTZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhj
b21tYW5kc1tpXS5jb21tYW5kTmFtZSldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyA9IDA7CisgICAgfQorICAgIHJldHVybiAoIV9wcml2YXRlLT5yZWNlaXZlZE5PT1AgJiYg
cGFyYW1ldGVycy5ldmVudFdhc0hhbmRsZWQpIHx8IHBhcmFtZXRlcnMuY29uc3VtZWRCeUlNOwor
fQorCistIChXZWJDb3JlOjpDYWNoZWRJbWFnZSopcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UK
K3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOworfQor
CistICh2b2lkKXNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOihXZWJDb3JlOjpDYWNoZWRJ
bWFnZSopc291cmNlCit7CisgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgc291cmNlLT5hZGRDbGll
bnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOworICAgIAorICAgIGlmIChfcHJpdmF0ZS0+cHJvbWlz
ZWREcmFnVElGRkRhdGFTb3VyY2UpCisgICAgICAgIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKKyAgICBfcHJp
dmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSBzb3VyY2U7Cit9CisKKyN1bmRlZiBD
T01NQU5EX1BST0xPR1VFCisKKy0gKHZvaWQpX2xheW91dElmTmVlZGVkCit7CisgICAgQVNTRVJU
KCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CisKKyAgICBpZiAoX3ByaXZhdGUtPm5lZWRz
VG9BcHBseVN0eWxlcyB8fCBbc2VsZiBfbmVlZHNMYXlvdXRdKQorICAgICAgICBbc2VsZiBsYXlv
dXRdOworfQorCistICh2b2lkKV93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUKK3sKKyAgICBb
c2VsZiBfbGF5b3V0SWZOZWVkZWRdOworCisjaWZuZGVmIE5ERUJVRworICAgIF9wcml2YXRlLT5l
bnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOworI2VuZGlmCisKKyAgICBOU011dGFibGVBcnJheSAq
ZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwor
CisgICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5k
YW50V2ViSFRNTFZpZXdzXTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJI
VE1MVmlld3MgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfbGF5
b3V0SWZOZWVkZWRdOworCisgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgcmVsZWFzZV07CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsK
KyNlbmRpZgorfQorCistICh2b2lkKSBfZGVzdHJveUFsbFdlYlBsdWdpbnMKK3sKKyAgICBbW3Nl
bGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lBbGxQbHVnaW5zXTsKK30KKworLSAoQk9PTClf
aXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcgoreworICAgIHJldHVybiBfcHJpdmF0ZS0+cmVzaWdu
aW5nRmlyc3RSZXNwb25kZXI7Cit9CisKKy0gKEJPT0wpX25lZWRzTGF5b3V0Cit7CisgICAgcmV0
dXJuIFtbc2VsZiBfZnJhbWVdIF9uZWVkc0xheW91dF07Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCistICh2b2lkKWF0dGFjaFJvb3RMYXllcjooQ0FMYXllciopbGF5ZXIK
K3sKKyAgICBpZiAoIV9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7CisgICAgICAgIFdlYkxh
eWVySG9zdGluZ1ZpZXcqIGhvc3RpbmdWaWV3ID0gW1tXZWJMYXllckhvc3RpbmdWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOltzZWxmIGJvdW5kc11dOworICAgICAgICBbaG9zdGluZ1ZpZXcgc2V0
QXV0b3Jlc2l6aW5nTWFzazooTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJs
ZSldOworICAgICAgICBbc2VsZiBhZGRTdWJ2aWV3Omhvc3RpbmdWaWV3XTsKKyAgICAgICAgW2hv
c3RpbmdWaWV3IHJlbGVhc2VdOworICAgICAgICAvLyBob3N0aW5nVmlldyBpcyBvd25lZCBieSBi
ZWluZyBhIHN1YnZpZXcgb2Ygc2VsZgorICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmll
dyA9IGhvc3RpbmdWaWV3OworICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9zdGFydGVkQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxmIF9mcmFtZV1dOworICAgIH0KKworICAgIC8v
IE1ha2UgYSBjb250YWluZXIgbGF5ZXIsIHdoaWNoIHdpbGwgZ2V0IHNpemVkL3Bvc2l0aW9uZWQg
YnkgQXBwS2l0IGFuZCBDQQorICAgIENBTGF5ZXIqIHZpZXdMYXllciA9IFtDQUxheWVyIGxheWVy
XTsKKyAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0TGF5ZXI6dmlld0xheWVyXTsK
KyAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0V2FudHNMYXllcjpZRVNdOworICAg
IAorICAgIC8vIFBhcmVudCBvdXIgcm9vdCBsYXllciBpbiB0aGUgY29udGFpbmVyIGxheWVyCisg
ICAgW3ZpZXdMYXllciBhZGRTdWJsYXllcjpsYXllcl07Cit9CisKKy0gKHZvaWQpZGV0YWNoUm9v
dExheWVyCit7CisgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7CisgICAgICAg
IFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRMYXllcjpuaWxdOworICAgICAgICBbX3By
aXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0V2FudHNMYXllcjpOT107CisgICAgICAgIFtfcHJp
dmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgX3By
aXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgPSBuaWw7CisgICAgICAgIFtbc2VsZiBfd2ViVmlld10g
X3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Cisg
ICAgfQorfQorI2VuZGlmCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChX
ZWJOU1RleHRJbnB1dFN1cHBvcnQpCisKKy0gKE5TQXJyYXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JN
YXJrZWRUZXh0Cit7CisgICAgc3RhdGljIE5TQXJyYXkgKnZhbGlkQXR0cmlidXRlczsKKyAgICBp
ZiAoIXZhbGlkQXR0cmlidXRlcykgeworICAgICAgICB2YWxpZEF0dHJpYnV0ZXMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKKyAgICAgICAgICAgIE5TVW5kZXJsaW5lU3R5bGVB
dHRyaWJ1dGVOYW1lLCBOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZSwKKyAgICAgICAgICAg
IE5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWUsIE5TVGV4dElucHV0UmVwbGFjZW1l
bnRSYW5nZUF0dHJpYnV0ZU5hbWUsIG5pbF07CisgICAgICAgIC8vIE5TVGV4dCBhbHNvIHN1cHBv
cnRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcywgYnV0IGl0J3MKKyAgICAgICAgLy8gaGFyZCB0
byB0ZWxsIHdoaWNoIGFyZSByZWFsbHkgcmVxdWlyZWQgZm9yIHRleHQgaW5wdXQgdG8KKyAgICAg
ICAgLy8gd29yayB3ZWxsOyBJIGhhdmUgbm90IHNlZW4gYW55IGlucHV0IG1ldGhvZCBtYWtlIHVz
ZSBvZiB0aGVtIHlldC4KKyAgICAgICAgLy8gICAgIE5TRm9udEF0dHJpYnV0ZU5hbWUsIE5TRm9y
ZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKKyAgICAgICAgLy8gICAgIE5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZSwgTlNMYW5ndWFnZUF0dHJpYnV0ZU5hbWUuCisgICAgICAgIENGUmV0
YWluKHZhbGlkQXR0cmlidXRlcyk7CisgICAgfQorICAgIExPRyhUZXh0SW5wdXQsICJ2YWxpZEF0
dHJpYnV0ZXNGb3JNYXJrZWRUZXh0IC0+ICguLi4pIik7CisgICAgcmV0dXJuIHZhbGlkQXR0cmli
dXRlczsKK30KKworLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0Cit7CisgICAg
cmV0dXJuIF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQgPyBbc3VwZXIgaW5wdXRDb250ZXh0
XSA6IG5pbDsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopdGV4dFN0b3JhZ2UKK3sKKyAg
ICBpZiAoIV9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKKyAgICAgICAgTE9HKFRleHRJ
bnB1dCwgInRleHRTdG9yYWdlIC0+IG5pbCIpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0K
KyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IFtzZWxmIGF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgVUlOVF9NQVgpXTsKKyAgICAKKyAgICBMT0coVGV4
dElucHV0LCAidGV4dFN0b3JhZ2UgLT4gXCIlQFwiIiwgcmVzdWx0ID8gW3Jlc3VsdCBzdHJpbmdd
IDogQCIiKTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIHJldHVybiBhbiBlbXB0eSBzdHJpbmcg
cmF0aGVyIHRoYW4gbnVsbCB0byBwcmV2ZW50IFRTTSBmcm9tIGNhbGxpbmcgLXN0cmluZworICAg
IHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOworfQorCistIChOU1VJbnRlZ2VyKWNoYXJh
Y3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQpdGhlUG9pbnQKK3sKKyAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVd
OworCisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgdGhlUG9pbnQgPSBbd2luZG93IGNvbnZlcnRT
Y3JlZW5Ub0Jhc2U6dGhlUG9pbnRdOworICAgIHRoZVBvaW50ID0gW3NlbGYgY29udmVydFBvaW50
OnRoZVBvaW50IGZyb21WaWV3Om5pbF07CisKKyAgICBET01SYW5nZSAqcmFuZ2UgPSBbZnJhbWUg
X2NoYXJhY3RlclJhbmdlQXRQb2ludDp0aGVQb2ludF07CisgICAgaWYgKCFyYW5nZSkgeworICAg
ICAgICBMT0coVGV4dElucHV0LCAiY2hhcmFjdGVySW5kZXhGb3JQb2ludDooJWYsICVmKSAtPiBO
U05vdEZvdW5kIiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSk7CisgICAgICAgIHJldHVybiBOU05v
dEZvdW5kOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBbZnJhbWUgX2NvbnZl
cnRET01SYW5nZVRvTlNSYW5nZTpyYW5nZV0ubG9jYXRpb247CisgICAgTE9HKFRleHRJbnB1dCwg
ImNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KCVmLCAlZikgLT4gJXUiLCB0aGVQb2ludC54LCB0aGVQ
b2ludC55LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5TUmVjdClmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlNSYW5nZSl0aGVSYW5nZQoreyAgICAKKyAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAgIAorICAgIC8vIEp1c3QgdG8gbWF0Y2gg
TlNUZXh0VmlldydzIGJlaGF2aW9yLiBSZWdyZXNzaW9uIHRlc3RzIGNhbm5vdCBkZXRlY3QgdGhp
czsKKyAgICAvLyB0byByZXByb2R1Y2UsIHVzZSBhIHRlc3QgYXBwbGljYXRpb24gZnJvbSBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjgyCisgICAgLy8gKHR5cGUgc29t
ZXRoaW5nOyB0cnkgcmFuZ2VzICgxLCAtMSkgYW5kICgyLCAtMSkuCisgICAgaWYgKCh0aGVSYW5n
ZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCA8IHRoZVJhbmdlLmxvY2F0aW9uKSAmJiAodGhl
UmFuZ2UubG9jYXRpb24gKyB0aGVSYW5nZS5sZW5ndGggIT0gMCkpCisgICAgICAgIHRoZVJhbmdl
Lmxlbmd0aCA9IDA7CisgICAgCisgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0
TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2VdOworICAgIGlmICghcmFuZ2UpIHsKKyAgICAgICAg
TE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICgw
LCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5ndGgpOworICAgICAg
ICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJU
KFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOworICAgIEFTU0VSVChbcmFuZ2UgZW5kQ29udGFpbmVy
XSk7CisgICAgCisgICAgTlNSZWN0IHJlc3VsdFJlY3QgPSBbZnJhbWUgX2ZpcnN0UmVjdEZvckRP
TVJhbmdlOnJhbmdlXTsKKyAgICByZXN1bHRSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6cmVzdWx0
UmVjdCB0b1ZpZXc6bmlsXTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3dd
OworICAgIGlmICh3aW5kb3cpCisgICAgICAgIHJlc3VsdFJlY3Qub3JpZ2luID0gW3dpbmRvdyBj
b252ZXJ0QmFzZVRvU2NyZWVuOnJlc3VsdFJlY3Qub3JpZ2luXTsKKyAgICAKKyAgICBMT0coVGV4
dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkgLT4gKCVmLCAlZiwg
JWYsICVmKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5ndGgsIHJlc3VsdFJlY3Qu
b3JpZ2luLngsIHJlc3VsdFJlY3Qub3JpZ2luLnksIHJlc3VsdFJlY3Quc2l6ZS53aWR0aCwgcmVz
dWx0UmVjdC5zaXplLmhlaWdodCk7CisgICAgcmV0dXJuIHJlc3VsdFJlY3Q7Cit9CisKKy0gKE5T
UmFuZ2Upc2VsZWN0ZWRSYW5nZQoreworICAgIGlmICghaXNUZXh0SW5wdXQoY29yZShbc2VsZiBf
ZnJhbWVdKSkpIHsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgInNlbGVjdGVkUmFuZ2UgLT4gKE5T
Tm90Rm91bmQsIDApIik7CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKKyAgICB9CisgICAgTlNSYW5nZSByZXN1bHQgPSBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0ZWRO
U1JhbmdlXTsKKworICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+ICgldSwgJXUp
IiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCistIChOU1JhbmdlKW1hcmtlZFJhbmdlCit7CisgICAgV2ViRnJhbWUgKndlYkZyYW1lID0g
W3NlbGYgX2ZyYW1lXTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3ZWJGcmFtZSk7Cisg
ICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZSgwLCAwKTsKKyAg
ICBOU1JhbmdlIHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpjb3JlRnJhbWUt
PmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCldOworCisgICAgTE9HKFRleHRJbnB1
dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVu
Z3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilh
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOihOU1JhbmdlKW5zUmFuZ2UKK3sKKyAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KGZyYW1lKTsKKyAgICBpZiAoIWlzVGV4dElucHV0KGNvcmVGcmFtZSkgfHwgaXNJblBhc3N3b3Jk
RmllbGQoY29yZUZyYW1lKSkgeworICAgICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1
YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1Jh
bmdlLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIERPTVJhbmdlICpk
b21SYW5nZSA9IFtmcmFtZSBfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOm5zUmFuZ2VdOworICAg
IGlmICghZG9tUmFuZ2UpIHsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJz
dHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5n
ZS5sZW5ndGgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqcmVzdWx0ID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2U6Y29yZShkb21SYW5nZSldOworICAgIAorICAgIC8vIFtOU0F0dHJpYnV0ZWRT
dHJpbmcoV2ViS2l0RXh0cmFzKSBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6XSAgaW5z
aXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGluZyAKKyAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBl
bmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJk
YXI6Ly9wcm9ibGVtLzU0MDA1NTE+CisgICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVu
Y2F0ZSB0aGUgcmVzdWx0YW50IHN0cmluZyB0byB0aGUgY29ycmVjdCBsZW5ndGguCisgICAgaWYg
KFtyZXN1bHQgbGVuZ3RoXSA+IG5zUmFuZ2UubGVuZ3RoKSB7CisgICAgICAgIEFTU0VSVChbcmVz
dWx0IGxlbmd0aF0gPT0gbnNSYW5nZS5sZW5ndGggKyAxKTsKKyAgICAgICAgQVNTRVJUKFtbcmVz
dWx0IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpuc1JhbmdlLmxlbmd0aF0gPT0gJ1xuJyB8fCBb
W3Jlc3VsdCBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6bnNSYW5nZS5sZW5ndGhdID09ICcgJyk7
CisgICAgICAgIHJlc3VsdCA9IFtyZXN1bHQgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpO
U01ha2VSYW5nZSgwLCBuc1JhbmdlLmxlbmd0aCldOworICAgIH0KKyAgICBMT0coVGV4dElucHV0
LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBuc1Jh
bmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3VsdCBzdHJpbmddKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCisvLyB0ZXN0IGZvciAxMC40IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9i
bGVtLzQyNDM0NjM+CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKy0gKGxvbmcpY29udmVyc2F0
aW9uSWRlbnRpZmllcgoreworICAgIHJldHVybiAobG9uZylzZWxmOworfQorI2Vsc2UKKy0gKE5T
SW50ZWdlciljb252ZXJzYXRpb25JZGVudGlmaWVyCit7CisgICAgcmV0dXJuIChOU0ludGVnZXIp
c2VsZjsKK30KKyNlbmRpZgorCistIChCT09MKWhhc01hcmtlZFRleHQKK3sKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBCT09MIHJlc3VsdCA9IGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOworICAgIExPRyhU
ZXh0SW5wdXQsICJoYXNNYXJrZWRUZXh0IC0+ICV1IiwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCistICh2b2lkKXVubWFya1RleHQKK3sKKyAgICBMT0coVGV4dElucHV0LCAidW5t
YXJrVGV4dCIpOworCisgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2Vk
IHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgorICAgIFdlYkhUTUxW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzID0gMDsKKworICAgIGlmIChwYXJhbWV0ZXJzKSB7CisgICAgICAgIHBh
cmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IFlFUzsKKyAgICAgICAgcGFyYW1ldGVycy0+Y29u
c3VtZWRCeUlNID0gTk87CisgICAgfQorICAgIAorICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmly
bUNvbXBvc2l0aW9uKCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiByZXN1
bHQpCit7CisgICAgaW50IGxlbmd0aCA9IFtbc3RyaW5nIHN0cmluZ10gbGVuZ3RoXTsKKworICAg
IGludCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAgICBOU1JhbmdlIHJh
bmdlOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJ
bmRleDppIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTomcmFuZ2UgaW5SYW5nZTpOU01ha2VSYW5nZShp
LCBsZW5ndGggLSBpKV07CisKKyAgICAgICAgaWYgKE5TTnVtYmVyICpzdHlsZSA9IFthdHRycyBv
YmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdKSB7CisgICAgICAgICAg
ICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKKyAgICAgICAgICAgIGlmIChOU0NvbG9yICpj
b2xvckF0dHIgPSBbYXR0cnMgb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVO
YW1lXSkKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW2NvbG9yQXR0
ciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSk7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKHJhbmdlLmxvY2F0aW9u
LCBOU01heFJhbmdlKHJhbmdlKSwgY29sb3IsIFtzdHlsZSBpbnRWYWx1ZV0gPiAxKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpID0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGg7CisgICAg
fQorfQorCistICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihO
U1JhbmdlKW5ld1NlbFJhbmdlCit7CisgICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3Ry
aW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOyAvLyBPdGhlcndp
c2UsIE5TU3RyaW5nCisKKyAgICBMT0coVGV4dElucHV0LCAic2V0TWFya2VkVGV4dDpcIiVAXCIg
c2VsZWN0ZWRSYW5nZTooJXUsICV1KSIsIGlzQXR0cmlidXRlZFN0cmluZyA/IFtzdHJpbmcgc3Ry
aW5nXSA6IHN0cmluZywgbmV3U2VsUmFuZ2UubG9jYXRpb24sIG5ld1NlbFJhbmdlLmxlbmd0aCk7
CisKKyAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkg
dGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCisgICAgV2ViSFRNTFZpZXdJbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnM7CisgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFt
ZXRlcnMgPSAwOworCisgICAgaWYgKHBhcmFtZXRlcnMpIHsKKyAgICAgICAgcGFyYW1ldGVycy0+
ZXZlbnRXYXNIYW5kbGVkID0gWUVTOworICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0g
PSBOTzsKKyAgICB9CisgICAgCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
W3NlbGYgX2lzRWRpdGFibGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgTlNTdHJpbmcgKnRleHQgPSBzdHJpbmc7
CisKKyAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CisgICAgICAgIHVuc2lnbmVkIG1hcmtl
ZFRleHRMZW5ndGggPSBbKE5TU3RyaW5nICopc3RyaW5nIGxlbmd0aF07CisgICAgICAgIE5TU3Ry
aW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcgYXR0cmlidXRlOk5TVGV4dElucHV0UmVwbGFjZW1l
bnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDowIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTpOVUxM
IGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbWFya2VkVGV4dExlbmd0aCldOworICAgICAgICBMT0co
VGV4dElucHV0LCAiICAgIFJlcGxhY2VtZW50UmFuZ2U6ICVAIiwgcmFuZ2VTdHJpbmcpOworICAg
ICAgICAvLyBUaGUgQXBwS2l0IGFkZHMgYSAnc2VjcmV0JyBwcm9wZXJ0eSB0byB0aGUgc3RyaW5n
IHRoYXQgY29udGFpbnMgdGhlIHJlcGxhY2VtZW50IHJhbmdlLgorICAgICAgICAvLyBUaGUgcmVw
bGFjZW1lbnQgcmFuZ2UgaXMgdGhlIHJhbmdlIG9mIHRoZSB0aGUgdGV4dCB0aGF0IHNob3VsZCBi
ZSByZXBsYWNlZCB3aXRoIHRoZSBuZXcgc3RyaW5nLgorICAgICAgICBpZiAocmFuZ2VTdHJpbmcp
CisgICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0
cmluZyhyYW5nZVN0cmluZyldOworCisgICAgICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107Cisg
ICAgICAgIGV4dHJhY3RVbmRlcmxpbmVzKHN0cmluZywgdW5kZXJsaW5lcyk7CisgICAgfQorCisg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywg
bmV3U2VsUmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpKTsKK30KKworLSAo
dm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBMT0coVGV4dElu
cHV0LCAiZG9Db21tYW5kQnlTZWxlY3RvcjpcIiVzXCIiLCBzZWxfZ2V0TmFtZShzZWxlY3Rvcikp
OworCisgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5
IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgorICAgIC8vIFRoZSBzYW1lIGNhbGwg
dG8gaW50ZXJwcmV0S2V5RXZlbnRzIGNhbiBkbyBtb3JlIHRoYW4gb25lIGNvbW1hbmQuCisgICAg
V2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3By
aXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgaWYgKHBhcmFtZXRlcnMp
CisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POworCisgICAgaWYgKHNlbGVj
dG9yID09IEBzZWxlY3Rvcihub29wOikpIHsKKyAgICAgICAgX3ByaXZhdGUtPnJlY2VpdmVkTk9P
UCA9IFlFUzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEtleWJvYXJkRXZlbnQqIGV2
ZW50ID0gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMtPmV2ZW50IDogMDsKKyAgICBib29sIHNob3Vs
ZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5zaG91bGRTYXZlQ29tbWFu
ZDsKKworICAgIGlmIChldmVudCAmJiBzaG91bGRTYXZlQ29tbWFuZCkKKyAgICAgICAgZXZlbnQt
PmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKE5TU3RyaW5nRnJvbVNl
bGVjdG9yKHNlbGVjdG9yKSkpOworICAgIGVsc2UgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBvbmx5IGRpcmVjdCBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yOiBzZWUgdGhlIHBhcmFt
ZXRlcnMgYnkgc2V0dGluZyB0byAwLgorICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycyA9IDA7CisKKyAgICAgICAgYm9vbCBldmVudFdhc0hhbmRsZWQ7CisKKyAg
ICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICAgICAgaWYgKFtb
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21t
YW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSB0
cnVlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5k
ID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICAgICAgICAgIGlm
IChjb21tYW5kLmlzU3VwcG9ydGVkKCkpCisgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVk
ID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIElmIFdlYktpdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgY29tbWFuZCwgd2UgbmVl
ZCB0byBwYXNzIHRoZSBzZWxlY3RvciB0byBzdXBlci4KKyAgICAgICAgICAgICAgICBfcHJpdmF0
ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gc2VsZWN0b3I7CisKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgc2luayBkb2VzIHR3byB0aGluZ3M6IDEpIFRlbGxzIHVzIGlmIHRoZSBy
ZXNwb25kZXIgd2VudCB1bmhhbmRsZWQsIGFuZAorICAgICAgICAgICAgICAgIC8vIDIpIHByZXZl
bnRzIGFueSBOU0JlZXA7IHdlIGRvbid0IGV2ZXIgd2FudCB0byBiZWVwIGhlcmUuCisgICAgICAg
ICAgICAgICAgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rICpzaW5rID0gW1tXZWJSZXNwb25kZXJDaGFp
blNpbmsgYWxsb2NdIGluaXRXaXRoUmVzcG9uZGVyQ2hhaW46c2VsZl07CisgICAgICAgICAgICAg
ICAgW3N1cGVyIGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOworICAgICAgICAgICAgICAg
IGV2ZW50V2FzSGFuZGxlZCA9ICFbc2luayByZWNlaXZlZFVuaGFuZGxlZENvbW1hbmRdOworICAg
ICAgICAgICAgICAgIFtzaW5rIGRldGFjaF07CisgICAgICAgICAgICAgICAgW3NpbmsgcmVsZWFz
ZV07CisKKyAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNl
bGVjdG9yID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJh
bWV0ZXJzKQorICAgICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gZXZlbnRX
YXNIYW5kbGVkOworCisgICAgICAgIC8vIFJlc3RvcmUgdGhlIHBhcmFtZXRlcnMgc28gdGhhdCBv
dGhlciBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yOiBzZWUgdGhlbSwKKyAgICAgICAgLy8g
YW5kIG90aGVyIGNvbW1hbmRzIGNhbiBwYXJ0aWNpcGF0ZSBpbiBzZXR0aW5nIHRoZSAiZXZlbnRX
YXNIYW5kbGVkIiBmbGFnLgorICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgfQorfQorCistICh2b2lkKWluc2VydFRleHQ6KGlk
KXN0cmluZworeworICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRP
ZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsgLy8gT3RoZXJ3aXNlLCBOU1N0cmlu
ZworCisgICAgTE9HKFRleHRJbnB1dCwgImluc2VydFRleHQ6XCIlQFwiIiwgaXNBdHRyaWJ1dGVk
U3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nKTsKKworICAgIFdlYkhUTUxWaWV3SW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQ
YXJhbWV0ZXJzID0gMDsKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgcGFyYW1ldGVycy0+
Y29uc3VtZWRCeUlNID0gTk87CisKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGluc2VydGluZyBh
biBhdHRyaWJ1dGVkIHN0cmluZyBidXQgaW5wdXQgbWV0aG9kcyBkb24ndCBhcHBlYXIgdG8gcmVx
dWlyZSB0aGlzLgorICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKKyAgICBOU1N0cmluZyAqdGV4dDsKKyAgICBib29sIGlzRnJvbUlucHV0TWV0aG9kID0g
Y29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7CisgICAg
aWYgKGlzQXR0cmlidXRlZFN0cmluZykgeworICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmdd
OworICAgICAgICAvLyBXZSBkZWFsIHdpdGggdGhlIE5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5n
ZUF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIGZyb20gTlNBdHRyaWJ1dGVkU3RyaW5nIGhlcmUKKyAg
ICAgICAgLy8gc2ltcGx5IGJlY2F1c2UgaXQgaXMgdXNlZCBieSBhdCBsZWFzdCBvbmUgSW5wdXQg
TWV0aG9kIC0tIGl0IGNvcnJlc29uZHMgdG8gdGhlIGtFdmVudFBhcmFtVGV4dElucHV0U2VuZFJl
cGxhY2VSYW5nZQorICAgICAgICAvLyBldmVudCBpbiBUU00uICBUaGlzIGJlaGF2aW91ciBtYXRj
aGVzIHRoYXQgb2YgLVtXZWJIVE1MVmlldyBzZXRNYXJrZWRUZXh0OnNlbGVjdGVkUmFuZ2U6XSB3
aGVuIGl0IHJlY2VpdmVzIGFuCisgICAgICAgIC8vIE5TQXR0cmlidXRlZFN0cmluZworICAgICAg
ICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJbnB1dFJl
cGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0aXZlUmFu
Z2U6TlVMTCBpblJhbmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0IGxlbmd0aF0pXTsKKyAgICAgICAg
TE9HKFRleHRJbnB1dCwgIiAgICBSZXBsYWNlbWVudFJhbmdlOiAlQCIsIHJhbmdlU3RyaW5nKTsK
KyAgICAgICAgaWYgKHJhbmdlU3RyaW5nKSB7CisgICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBf
c2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0cmluZyhyYW5nZVN0cmluZyldOworICAgICAgICAg
ICAgaXNGcm9tSW5wdXRNZXRob2QgPSBZRVM7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAg
ICAgdGV4dCA9IHN0cmluZzsKKworICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZmFsc2U7CisgICAg
aWYgKFt0ZXh0IGxlbmd0aF0pIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJh
bWV0ZXJzID8gcGFyYW1ldGVycy0+ZXZlbnQgOiAwOworCisgICAgICAgIC8vIGluc2VydFRleHQg
Y2FuIGJlIGNhbGxlZCBmcm9tIGFuIGlucHV0IG1ldGhvZCBvciBmcm9tIG5vcm1hbCBrZXkgZXZl
bnQgcHJvY2Vzc2luZworICAgICAgICAvLyBJZiBpdHMgZnJvbSBub3JtYWwga2V5IGV2ZW50IHBy
b2Nlc3NpbmcsIHdlIG1heSBuZWVkIHRvIHNhdmUgdGhlIGFjdGlvbiB0byBwZXJmb3JtIGl0IGxh
dGVyLgorICAgICAgICAvLyBJZiBpdHMgZnJvbSBhbiBpbnB1dCBtZXRob2QsIHRoZW4gd2Ugc2hv
dWxkIGdvIGFoZWFkIGFuZCBpbnNlcnQgdGhlIHRleHQgbm93LiAgCisgICAgICAgIC8vIFdlIGFz
c3VtZSBpdCdzIGZyb20gdGhlIGlucHV0IG1ldGhvZCBpZiB3ZSBoYXZlIG1hcmtlZCB0ZXh0Lgor
ICAgICAgICAvLyBGSVhNRTogSW4gdGhlb3J5LCB0aGlzIGNvdWxkIGJlIHdyb25nIGZvciBzb21l
IGlucHV0IG1ldGhvZHMsIHNvIHdlIHNob3VsZCB0cnkgdG8gZmluZAorICAgICAgICAvLyBhbm90
aGVyIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIGNhbGwgaXMgZnJvbSB0aGUgaW5wdXQgbWV0aG9k
CisgICAgICAgIGJvb2wgc2hvdWxkU2F2ZUNvbW1hbmQgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRl
cnMtPnNob3VsZFNhdmVDb21tYW5kOworICAgICAgICBpZiAoZXZlbnQgJiYgc2hvdWxkU2F2ZUNv
bW1hbmQgJiYgIWlzRnJvbUlucHV0TWV0aG9kKSB7CisgICAgICAgICAgICBldmVudC0+a2V5cHJl
c3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoImluc2VydFRleHQ6IiwgdGV4dCkp
OworICAgICAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJzOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBTdHJpbmcgZXZlbnRUZXh0ID0gdGV4dDsKKyAgICAgICAgZXZlbnRUZXh0LnJlcGxhY2Uo
TlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUgdGhpbmcgaXMgZG9u
ZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJDb3JlCisgICAgICAgIGlmIChjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKSB7CisgICAgICAgICAgICBpZiAoIWNvcmVG
cmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgICAgICAgICAgZXZlbnRI
YW5kbGVkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChldmVudFRleHQsIGV2ZW50
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0
aW9uKGV2ZW50VGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKCFwYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGlzRnJv
bUlucHV0TWV0aG9kKSB7CisgICAgICAgIC8vIEFsbG93IGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHRv
IGJlIGNhbGxlZCBhZnRlciBpbnNlcnRUZXh0OiBieSByZXNldHRpbmcgaW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycworICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IFlF
UzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBwYXJhbWV0ZXJzLT5ldmVudFdh
c0hhbmRsZWQgPSBldmVudEhhbmRsZWQ7Cit9CisKKy0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZv
cklucHV0TWFuYWdlcgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBCT09MIGV4
cG9zZUlucHV0Q29udGV4dCA9IGlzVGV4dElucHV0KGNvcmVGcmFtZSkgJiYgIWlzSW5QYXNzd29y
ZEZpZWxkKGNvcmVGcmFtZSk7CisgICAgaWYgKGV4cG9zZUlucHV0Q29udGV4dCAhPSBfcHJpdmF0
ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7CisgICAgICAgIF9wcml2YXRlLT5leHBvc2VJbnB1dENv
bnRleHQgPSBleHBvc2VJbnB1dENvbnRleHQ7CisgICAgICAgIC8vIExldCBBcHBLaXQgY2FjaGUg
YSBwb3RlbnRpYWxseSBjaGFuZ2VkIGlucHV0IGNvbnRleHQuCisgICAgICAgIC8vIFdlYkNvcmUg
cm91dGluZWx5IHNldHMgdGhlIHNlbGVjdGlvbiB0byBOb25lIHdoZW4gZWRpdGluZywgYW5kIElN
cyBiZWNvbWUgdW5oYXBweSB3aGVuIGFuIGlucHV0IGNvbnRleHQgc3VkZGVubHkgdHVybnMgbmls
LCBzZWUgYnVnIDI2MDA5LgorICAgICAgICBpZiAoIWNvcmVGcmFtZSB8fCAhY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNOb25lKCkpCisgICAgICAgICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107
CisgICAgfQorCisgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+aWdub3Jl
Q29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgc3RhcnQ7CisgICAgdW5zaWduZWQgZW5kOworICAgIGlmIChjb3JlRnJhbWUtPmVkaXRv
cigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlvbihzdGFydCwgZW5kKSkKKyAgICAgICAgW1tOU0lu
cHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdl
ZDpOU01ha2VSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpIGNsaWVudDpzZWxmXTsKKyAgICBlbHNl
IHsKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uV2l0aG91
dERpc3R1cmJpbmdTZWxlY3Rpb24oKTsKKyAgICAgICAgW1tOU0lucHV0TWFuYWdlciBjdXJyZW50
SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0QWJhbmRvbmVkOnNlbGZdOworICAgIH0KK30KKworQGVu
ZAorCisvKgorICAgIFRoaXMgY2xhc3MgcnVucyB0aGUgc2hvdyBmb3IgaGFuZGluZyB0aGUgY29t
cGxldGU6IE5TVGV4dFZpZXcgb3BlcmF0aW9uLiAgSXQgY291bnRzIG9uIGl0cyBIVE1MIHZpZXcK
KyAgICB0byBjYWxsIGVuZFJldmVydGluZ0NoYW5nZTogd2hlbmV2ZXIgdGhlIGN1cnJlbnQgY29t
cGxldGlvbiBuZWVkcyB0byBiZSBhYm9ydGVkLgorIAorICAgIFRoZSBjbGFzcyBpcyBpbiBvbmUg
b2YgdHdvIG1vZGVzOiAgUG9wdXBXaW5kb3cgc2hvd2luZywgb3Igbm90LiAgSXQgaXMgc2hvd24g
d2hlbiBhIGNvbXBsZXRpb24geWllbGRzCisgICAgbW9yZSB0aGFuIG9uZSBtYXRjaC4gIElmIGEg
Y29tcGxldGlvbiB5aWVsZHMgb25lIG9yIHplcm8gbWF0Y2hlcywgaXQgaXMgbm90IHNob3duLCBh
bmQgKip0aGVyZSBpcyBubworICAgIHN0YXRlIGNhcnJpZWQgYWNyb3NzIHRvIHRoZSBuZXh0IGNv
bXBsZXRpb24qKi4KKyAqLworCitAaW1wbGVtZW50YXRpb24gV2ViVGV4dENvbXBsZXRlQ29udHJv
bGxlcgorCistIChpZClpbml0V2l0aEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKXZpZXcKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBfdmlldyA9IHZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtfcG9wdXBXaW5kb3cgcmVsZWFzZV07CisgICAgW19jb21wbGV0aW9ucyBy
ZWxlYXNlXTsKKyAgICBbX29yaWdpbmFsU3RyaW5nIHJlbGVhc2VdOworICAgIAorICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworLSAodm9pZClfaW5zZXJ0TWF0Y2g6KE5TU3RyaW5nICopbWF0Y2gK
K3sKKyAgICAvLyBGSVhNRTogMzc2OTY1NCAtIFdlIHNob3VsZCBwcmVzZXJ2ZSBjYXNlIG9mIHN0
cmluZyBiZWluZyBpbnNlcnRlZCwgZXZlbiBpbiBwcmVmaXggKGJ1dCB0aGVuIGFsc28gYmUKKyAg
ICAvLyBhYmxlIHRvIHJldmVydCB0aGF0KS4gIE1pbWljIE5TVGV4dC4KKyAgICBXZWJGcmFtZSAq
ZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKKyAgICBOU1N0cmluZyAqbmV3VGV4dCA9IFttYXRjaCBz
dWJzdHJpbmdGcm9tSW5kZXg6cHJlZml4TGVuZ3RoXTsKKyAgICBbZnJhbWUgX3JlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6
Tk9dOworfQorCisvLyBtb3N0bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0K
Ky0gKHZvaWQpX2J1aWxkVUkKK3sKKyAgICBOU1JlY3Qgc2Nyb2xsRnJhbWUgPSBOU01ha2VSZWN0
KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBOU1JlY3QgdGFibGVGcmFtZSA9IE5TWmVyb1JlY3Q7ICAg
IAorICAgIHRhYmxlRnJhbWUuc2l6ZSA9IFtOU1Njcm9sbFZpZXcgY29udGVudFNpemVGb3JGcmFt
ZVNpemU6c2Nyb2xsRnJhbWUuc2l6ZSBoYXNIb3Jpem9udGFsU2Nyb2xsZXI6Tk8gaGFzVmVydGlj
YWxTY3JvbGxlcjpZRVMgYm9yZGVyVHlwZTpOU05vQm9yZGVyXTsKKyAgICAvLyBBZGRlZCBjYXN0
IHRvIHdvcmsgYXJvdW5kIHByb2JsZW0gd2l0aCBtdWx0aXBsZSBGb3VuZGF0aW9uIGluaXRXaXRo
SWRlbnRpZmllcjogbWV0aG9kcyB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXIgdHlwZXMuCisgICAg
TlNUYWJsZUNvbHVtbiAqY29sdW1uID0gWyhOU1RhYmxlQ29sdW1uICopW05TVGFibGVDb2x1bW4g
YWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDowXV07Cisg
ICAgW2NvbHVtbiBzZXRXaWR0aDp0YWJsZUZyYW1lLnNpemUud2lkdGhdOworICAgIFtjb2x1bW4g
c2V0RWRpdGFibGU6Tk9dOworICAgIAorICAgIF90YWJsZVZpZXcgPSBbW05TVGFibGVWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOnRhYmxlRnJhbWVdOworICAgIFtfdGFibGVWaWV3IHNldEF1dG9y
ZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlXTsKKyAgICBbX3RhYmxlVmlldyBhZGRUYWJs
ZUNvbHVtbjpjb2x1bW5dOworICAgIFtjb2x1bW4gcmVsZWFzZV07CisgICAgW190YWJsZVZpZXcg
c2V0R3JpZFN0eWxlTWFzazpOU1RhYmxlVmlld0dyaWROb25lXTsKKyAgICBbX3RhYmxlVmlldyBz
ZXRDb3JuZXJWaWV3Om5pbF07CisgICAgW190YWJsZVZpZXcgc2V0SGVhZGVyVmlldzpuaWxdOwor
ICAgIFtfdGFibGVWaWV3IHNldENvbHVtbkF1dG9yZXNpemluZ1N0eWxlOk5TVGFibGVWaWV3VW5p
Zm9ybUNvbHVtbkF1dG9yZXNpemluZ1N0eWxlXTsKKyAgICBbX3RhYmxlVmlldyBzZXREZWxlZ2F0
ZTpzZWxmXTsKKyAgICBbX3RhYmxlVmlldyBzZXREYXRhU291cmNlOnNlbGZdOworICAgIFtfdGFi
bGVWaWV3IHNldFRhcmdldDpzZWxmXTsKKyAgICBbX3RhYmxlVmlldyBzZXREb3VibGVBY3Rpb246
QHNlbGVjdG9yKHRhYmxlQWN0aW9uOildOworICAgIAorICAgIE5TU2Nyb2xsVmlldyAqc2Nyb2xs
VmlldyA9IFtbTlNTY3JvbGxWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnNjcm9sbEZyYW1lXTsK
KyAgICBbc2Nyb2xsVmlldyBzZXRCb3JkZXJUeXBlOk5TTm9Cb3JkZXJdOworICAgIFtzY3JvbGxW
aWV3IHNldEhhc1ZlcnRpY2FsU2Nyb2xsZXI6WUVTXTsKKyAgICBbc2Nyb2xsVmlldyBzZXRBdXRv
cmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwor
ICAgIFtzY3JvbGxWaWV3IHNldERvY3VtZW50VmlldzpfdGFibGVWaWV3XTsKKyAgICBbX3RhYmxl
VmlldyByZWxlYXNlXTsKKyAgICAKKyAgICBfcG9wdXBXaW5kb3cgPSBbW05TV2luZG93IGFsbG9j
XSBpbml0V2l0aENvbnRlbnRSZWN0OnNjcm9sbEZyYW1lIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NX
aW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAg
W19wb3B1cFdpbmRvdyBzZXRBbHBoYVZhbHVlOjAuODhmXTsKKyAgICBbX3BvcHVwV2luZG93IHNl
dENvbnRlbnRWaWV3OnNjcm9sbFZpZXddOworICAgIFtzY3JvbGxWaWV3IHJlbGVhc2VdOworICAg
IFtfcG9wdXBXaW5kb3cgc2V0SGFzU2hhZG93OllFU107CisgICAgW19wb3B1cFdpbmRvdyBzZXRP
bmVTaG90OllFU107CisgICAgW19wb3B1cFdpbmRvdyBfc2V0Rm9yY2VBY3RpdmVDb250cm9sczpZ
RVNdOworICAgIFtfcG9wdXBXaW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKK30KKwor
Ly8gbW9zdGx5IGxpZnRlZCBmcm9tIE5TVGV4dFZpZXdfS2V5QmluZGluZy5tCistICh2b2lkKV9w
bGFjZVBvcHVwV2luZG93OihOU1BvaW50KXRvcExlZnQKK3sKKyAgICBpbnQgbnVtYmVyVG9TaG93
ID0gW19jb21wbGV0aW9ucyBjb3VudF07CisgICAgaWYgKG51bWJlclRvU2hvdyA+IDIwKSB7Cisg
ICAgICAgIG51bWJlclRvU2hvdyA9IDIwOworICAgIH0KKworICAgIE5TUmVjdCB3aW5kb3dGcmFt
ZTsKKyAgICBOU1BvaW50IHdvcmRTdGFydCA9IHRvcExlZnQ7CisgICAgd2luZG93RnJhbWUub3Jp
Z2luID0gW1tfdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W192aWV3IGNvbnZlcnRQ
b2ludDp3b3JkU3RhcnQgdG9WaWV3Om5pbF1dOworICAgIHdpbmRvd0ZyYW1lLnNpemUuaGVpZ2h0
ID0gbnVtYmVyVG9TaG93ICogW190YWJsZVZpZXcgcm93SGVpZ2h0XSArIChudW1iZXJUb1Nob3cg
KyAxKSAqIFtfdGFibGVWaWV3IGludGVyY2VsbFNwYWNpbmddLmhlaWdodDsKKyAgICB3aW5kb3dG
cmFtZS5vcmlnaW4ueSAtPSB3aW5kb3dGcmFtZS5zaXplLmhlaWdodDsKKyAgICBOU0RpY3Rpb25h
cnkgKmF0dHJpYnV0ZXMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtl
eXM6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEyLjBmXSwgTlNGb250QXR0cmlidXRlTmFtZSwg
bmlsXTsKKyAgICBmbG9hdCBtYXhXaWR0aCA9IDAuMGY7CisgICAgaW50IG1heEluZGV4ID0gLTE7
CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bWJlclRvU2hvdzsgaSsrKSB7Cisg
ICAgICAgIGZsb2F0IHdpZHRoID0gY2VpbGYoW1tfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDpp
XSBzaXplV2l0aEF0dHJpYnV0ZXM6YXR0cmlidXRlc10ud2lkdGgpOworICAgICAgICBpZiAod2lk
dGggPiBtYXhXaWR0aCkgeworICAgICAgICAgICAgbWF4V2lkdGggPSB3aWR0aDsKKyAgICAgICAg
ICAgIG1heEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aW5kb3dGcmFtZS5zaXpl
LndpZHRoID0gMTAwOworICAgIGlmIChtYXhJbmRleCA+PSAwKSB7CisgICAgICAgIG1heFdpZHRo
ID0gY2VpbGYoW05TU2Nyb2xsVmlldyBmcmFtZVNpemVGb3JDb250ZW50U2l6ZTpOU01ha2VTaXpl
KG1heFdpZHRoLCAxMDAuMGYpIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNhbFNj
cm9sbGVyOllFUyBib3JkZXJUeXBlOk5TTm9Cb3JkZXJdLndpZHRoKTsKKyAgICAgICAgbWF4V2lk
dGggPSBjZWlsZihbTlNXaW5kb3cgZnJhbWVSZWN0Rm9yQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgw
LjBmLCAwLjBmLCBtYXhXaWR0aCwgMTAwLjBmKSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93
TWFza10uc2l6ZS53aWR0aCk7CisgICAgICAgIG1heFdpZHRoICs9IDUuMGY7CisgICAgICAgIHdp
bmRvd0ZyYW1lLnNpemUud2lkdGggPSBNQVgobWF4V2lkdGgsIHdpbmRvd0ZyYW1lLnNpemUud2lk
dGgpOworICAgICAgICBtYXhXaWR0aCA9IE1JTig0MDAuMGYsIHdpbmRvd0ZyYW1lLnNpemUud2lk
dGgpOworICAgIH0KKyAgICBbX3BvcHVwV2luZG93IHNldEZyYW1lOndpbmRvd0ZyYW1lIGRpc3Bs
YXk6Tk9dOworICAgIAorICAgIFtfdGFibGVWaWV3IHJlbG9hZERhdGFdOworICAgIFtfdGFibGVW
aWV3IHNlbGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6MF0gYnlF
eHRlbmRpbmdTZWxlY3Rpb246Tk9dOworICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJs
ZTowXTsKKyAgICBbc2VsZiBfcmVmbGVjdFNlbGVjdGlvbl07CisgICAgW19wb3B1cFdpbmRvdyBz
ZXRMZXZlbDpOU1BvcFVwTWVudVdpbmRvd0xldmVsXTsKKyAgICBbX3BvcHVwV2luZG93IG9yZGVy
RnJvbnQ6bmlsXTsgICAgCisgICAgW1tfdmlldyB3aW5kb3ddIGFkZENoaWxkV2luZG93Ol9wb3B1
cFdpbmRvdyBvcmRlcmVkOk5TV2luZG93QWJvdmVdOworfQorCistICh2b2lkKWRvQ29tcGxldGlv
bgoreworICAgIGlmICghX3BvcHVwV2luZG93KSB7CisgICAgICAgIE5TU3BlbGxDaGVja2VyICpj
aGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CisgICAgICAgIGlm
ICghY2hlY2tlcikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHByZWNl
ZWRpbmcgd29yZCBzdGVtCisgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVd
OworICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rp
b24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIERPTVJhbmdlICp3aG9s
ZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246U2VsZWN0aW9u
Q29udHJvbGxlcjo6RVhURU5ECisgICAgICAgICAgICBkaXJlY3Rpb246U2VsZWN0aW9uQ29udHJv
bGxlcjo6QkFDS1dBUkQgZ3JhbnVsYXJpdHk6V29yZEdyYW51bGFyaXR5XTsKKyAgICAgICAgRE9N
UmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CisgICAgICAgIFtwcmVmaXgg
c2V0RW5kOltzZWxlY3Rpb24gc3RhcnRDb250YWluZXJdIG9mZnNldDpbc2VsZWN0aW9uIHN0YXJ0
T2Zmc2V0XV07CisKKyAgICAgICAgLy8gUmVqZWN0IHNvbWUgTk9QIGNhc2VzCisgICAgICAgIGlm
IChbcHJlZml4IGNvbGxhcHNlZF0pIHsKKyAgICAgICAgICAgIE5TQmVlcCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE5TU3RyaW5nICpwcmVmaXhTdHIgPSBbZnJh
bWUgX3N0cmluZ0ZvclJhbmdlOnByZWZpeF07CisgICAgICAgIE5TU3RyaW5nICp0cmltbWVkUHJl
Zml4ID0gW3ByZWZpeFN0ciBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJh
Y3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dOworICAgICAgICBpZiAo
W3RyaW1tZWRQcmVmaXggbGVuZ3RoXSA9PSAwKSB7CisgICAgICAgICAgICBOU0JlZXAoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwcmVmaXhMZW5ndGggPSBbcHJl
Zml4U3RyIGxlbmd0aF07CisKKyAgICAgICAgLy8gTG9va3VwIG1hdGNoZXMKKyAgICAgICAgW19j
b21wbGV0aW9ucyByZWxlYXNlXTsKKyAgICAgICAgX2NvbXBsZXRpb25zID0gW2NoZWNrZXIgY29t
cGxldGlvbnNGb3JQYXJ0aWFsV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIFtwcmVmaXhTdHIgbGVu
Z3RoXSkgaW5TdHJpbmc6cHJlZml4U3RyIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRo
VGFnOltbX3ZpZXcgX3dlYlZpZXddIHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXV07CisgICAgICAg
IFtfY29tcGxldGlvbnMgcmV0YWluXTsKKyAgICAKKyAgICAgICAgaWYgKCFfY29tcGxldGlvbnMg
fHwgW19jb21wbGV0aW9ucyBjb3VudF0gPT0gMCkgeworICAgICAgICAgICAgTlNCZWVwKCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoW19jb21wbGV0aW9ucyBjb3VudF0gPT0gMSkgeworICAgICAgICAg
ICAgW3NlbGYgX2luc2VydE1hdGNoOltfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDowXV07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoIV9vcmlnaW5hbFN0cmluZyk7ICAg
ICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IElGRiB3ZSBoYXZlIGEgcG9wdXAgd2luZG93
CisgICAgICAgICAgICBfb3JpZ2luYWxTdHJpbmcgPSBbW2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpz
ZWxlY3Rpb25dIHJldGFpbl07CisgICAgICAgICAgICBbc2VsZiBfYnVpbGRVSV07CisgICAgICAg
ICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJhbWUgX2NhcmV0UmVjdEF0Tm9kZTpbd2hvbGVXb3Jk
IHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3dob2xlV29yZCBzdGFydE9mZnNldF0gYWZmaW5pdHk6
TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dOworICAgICAgICAgICAgLy8gKzEgdG8gYmUg
dW5kZXIgdGhlIHdvcmQsIG5vdCB0aGUgY2FyZXQKKyAgICAgICAgICAgIC8vIEZJWE1FIC0gMzc2
OTY1MiAtIFdyb25nIHBvc2l0aW9uaW5nIGZvciByaWdodCB0byBsZWZ0IGxhbmd1YWdlcy4gIFdl
IHNob3VsZCBsaW5lIHVwIHRoZSB1cHBlcgorICAgICAgICAgICAgLy8gcmlnaHQgY29ybmVyIHdp
dGggdGhlIGNhcmV0IGluc3RlYWQgb2YgdXBwZXIgbGVmdCwgYW5kIHRoZSArMSB3b3VsZCBiZSBh
IC0xLgorICAgICAgICAgICAgTlNQb2ludCB3b3JkTG93ZXJMZWZ0ID0geyBOU01pblgod29yZFJl
Y3QpKzEsIE5TTWF4WSh3b3JkUmVjdCkgfTsKKyAgICAgICAgICAgIFtzZWxmIF9wbGFjZVBvcHVw
V2luZG93OndvcmRMb3dlckxlZnRdOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
W3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CisgICAgfQorfQorCist
ICh2b2lkKWVuZFJldmVydGluZ0NoYW5nZTooQk9PTClyZXZlcnRDaGFuZ2UgbW92ZUxlZnQ6KEJP
T0wpZ29MZWZ0Cit7CisgICAgaWYgKF9wb3B1cFdpbmRvdykgeworICAgICAgICAvLyB0ZWFyIGRv
d24gVUkKKyAgICAgICAgW1tfdmlldyB3aW5kb3ddIHJlbW92ZUNoaWxkV2luZG93Ol9wb3B1cFdp
bmRvd107CisgICAgICAgIFtfcG9wdXBXaW5kb3cgb3JkZXJPdXQ6c2VsZl07CisgICAgICAgIC8v
IE11c3QgYXV0b3JlbGVhc2UgYmVjYXVzZSBldmVudCB0cmFja2luZyBjb2RlIG1heSBiZSBvbiB0
aGUgc3RhY2sgdG91Y2hpbmcgVUkKKyAgICAgICAgW19wb3B1cFdpbmRvdyBhdXRvcmVsZWFzZV07
CisgICAgICAgIF9wb3B1cFdpbmRvdyA9IG5pbDsKKworICAgICAgICBpZiAocmV2ZXJ0Q2hhbmdl
KSB7CisgICAgICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKKyAgICAg
ICAgICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBz
ZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKKyAgICAgICAgfSBlbHNlIGlm
IChbX3ZpZXcgX2hhc1NlbGVjdGlvbl0pIHsKKyAgICAgICAgICAgIGlmIChnb0xlZnQpCisgICAg
ICAgICAgICAgICAgW192aWV3IG1vdmVCYWNrd2FyZDpuaWxdOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIFtfdmlldyBtb3ZlRm9yd2FyZDpuaWxdOworICAgICAgICB9CisgICAg
ICAgIFtfb3JpZ2luYWxTdHJpbmcgcmVsZWFzZV07CisgICAgICAgIF9vcmlnaW5hbFN0cmluZyA9
IG5pbDsKKyAgICB9CisgICAgLy8gZWxzZSB0aGVyZSBpcyBubyBzdGF0ZSB0byBhYm9ydCBpZiB0
aGUgd2luZG93IHdhcyBub3QgdXAKK30KKworLSAoQk9PTClwb3B1cFdpbmRvd0lzT3Blbgorewor
ICAgIHJldHVybiBfcG9wdXBXaW5kb3cgIT0gbmlsOworfQorCisvLyBXZWJIVE1MVmlldyBnaXZl
cyB1cyBhIGNyYWNrIGF0IGtleSBldmVudHMgaXQgc2Vlcy4gUmV0dXJuIHdoZXRoZXIgd2UgY29u
c3VtZWQgdGhlIGV2ZW50LgorLy8gVGhlIGZlYXR1cmVzIGZvciB0aGUgdmFyaW91cyBrZXlzIG1p
bWljIE5TVGV4dFZpZXcuCistIChCT09MKWZpbHRlcktleURvd246KE5TRXZlbnQgKilldmVudAor
eworICAgIGlmICghX3BvcHVwV2luZG93KQorICAgICAgICByZXR1cm4gTk87CisgICAgTlNTdHJp
bmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOworICAgIGlm
ICghW3N0cmluZyBsZW5ndGhdKQorICAgICAgICByZXR1cm4gTk87CisgICAgdW5pY2hhciBjID0g
W3N0cmluZyBjaGFyYWN0ZXJBdEluZGV4OjBdOworICAgIGlmIChjID09IE5TVXBBcnJvd0Z1bmN0
aW9uS2V5KSB7CisgICAgICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVk
Um93XTsKKyAgICAgICAgaWYgKDAgPCBzZWxlY3RlZFJvdykgeworICAgICAgICAgICAgW190YWJs
ZVZpZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDpzZWxl
Y3RlZFJvdyAtIDFdIGJ5RXh0ZW5kaW5nU2VsZWN0aW9uOk5PXTsKKyAgICAgICAgICAgIFtfdGFi
bGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTpzZWxlY3RlZFJvdyAtIDFdOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIGlmIChjID09IE5TRG93bkFycm93RnVuY3Rp
b25LZXkpIHsKKyAgICAgICAgaW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRS
b3ddOworICAgICAgICBpZiAoc2VsZWN0ZWRSb3cgPCAoaW50KVtfY29tcGxldGlvbnMgY291bnRd
IC0gMSkgeworICAgICAgICAgICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJbmRl
eFNldCBpbmRleFNldFdpdGhJbmRleDpzZWxlY3RlZFJvdyArIDFdIGJ5RXh0ZW5kaW5nU2VsZWN0
aW9uOk5PXTsKKyAgICAgICAgICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTpzZWxl
Y3RlZFJvdyArIDFdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAg
IGlmIChjID09IE5TUmlnaHRBcnJvd0Z1bmN0aW9uS2V5IHx8IGMgPT0gJ1xuJyB8fCBjID09ICdc
cicgfHwgYyA9PSAnXHQnKSB7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IGJhY2t0YWI/
CisgICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAg
ICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIGlmIChjID09IE5TTGVmdEFycm93RnVuY3Rpb25L
ZXkpIHsKKyAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0OllFU107
CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIGlmIChjID09IDB4MUIgfHwgYyA9PSBO
U0Y1RnVuY3Rpb25LZXkpIHsKKyAgICAgICAgLy8gRklYTUU6IEY1PworICAgICAgICBbc2VsZiBl
bmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgcmV0dXJuIFlFUzsK
KyAgICB9CisgICAgaWYgKGMgPT0gJyAnIHx8IGMgPj0gMHgyMSAmJiBjIDw9IDB4MkYgfHwgYyA+
PSAweDNBICYmIGMgPD0gMHg0MCB8fCBjID49IDB4NUIgJiYgYyA8PSAweDYwIHx8IGMgPj0gMHg3
QiAmJiBjIDw9IDB4N0QpIHsKKyAgICAgICAgLy8gRklYTUU6IElzIHRoZSBhYm92ZSBsaXN0IG9m
IGtleXMgcmVhbGx5IGRlZmluaXRpdmU/CisgICAgICAgIC8vIE9yaWdpbmFsbHkgdGhpcyBjb2Rl
IGNhbGxlZCBpc3B1bmN0OyBhcmVuJ3QgdGhlcmUgb3RoZXIgcHVuY3R1YXRpb24ga2V5cyBvbiBp
bnRlcm5hdGlvbmFsIGtleWJvYXJkcz8KKyAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdl
Ok5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgcmV0dXJuIE5POyAvLyBsZXQgdGhlIGNoYXIgZ2V0
IGluc2VydGVkCisgICAgfQorICAgIHJldHVybiBOTzsKK30KKworLSAodm9pZClfcmVmbGVjdFNl
bGVjdGlvbgoreworICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVkUm93
XTsKKyAgICBBU1NFUlQoc2VsZWN0ZWRSb3cgPj0gMCAmJiBzZWxlY3RlZFJvdyA8IChpbnQpW19j
b21wbGV0aW9ucyBjb3VudF0pOworICAgIFtzZWxmIF9pbnNlcnRNYXRjaDpbX2NvbXBsZXRpb25z
IG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRSb3ddXTsKK30KKworLSAodm9pZCl0YWJsZUFjdGlvbjoo
aWQpc2VuZGVyCit7CisgICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOworICAgIFtzZWxmIGVu
ZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Cit9CisKKy0gKE5TSW50ZWdlciludW1i
ZXJPZlJvd3NJblRhYmxlVmlldzooTlNUYWJsZVZpZXcgKil0YWJsZVZpZXcKK3sKKyAgICByZXR1
cm4gW19jb21wbGV0aW9ucyBjb3VudF07Cit9CisKKy0gKGlkKXRhYmxlVmlldzooTlNUYWJsZVZp
ZXcgKil0YWJsZVZpZXcgb2JqZWN0VmFsdWVGb3JUYWJsZUNvbHVtbjooTlNUYWJsZUNvbHVtbiAq
KXRhYmxlQ29sdW1uIHJvdzooTlNJbnRlZ2VyKXJvdworeworICAgIHJldHVybiBbX2NvbXBsZXRp
b25zIG9iamVjdEF0SW5kZXg6cm93XTsKK30KKworLSAodm9pZCl0YWJsZVZpZXdTZWxlY3Rpb25E
aWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgW3NlbGYgX3Jl
ZmxlY3RTZWxlY3Rpb25dOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmll
dyAoV2ViRG9jdW1lbnRQcml2YXRlUHJvdG9jb2xzKQorCistIChOU1JlY3Qpc2VsZWN0aW9uUmVj
dAoreworICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKKyAgICAgICAgcmV0dXJuIGNvcmUo
W3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJvdW5kcygpOworICAgIHJldHVybiBOU1plcm9SZWN0
OworfQorCistIChOU0FycmF5ICopc2VsZWN0aW9uVGV4dFJlY3RzCit7CisgICAgaWYgKCFbc2Vs
ZiBfaGFzU2VsZWN0aW9uXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBWZWN0b3I8
RmxvYXRSZWN0PiBsaXN0OworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb25UZXh0UmVjdHMobGlzdCk7CisK
KyAgICB1bnNpZ25lZCBzaXplID0gbGlzdC5zaXplKCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKnJl
c3VsdCA9IFtbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVdIGF1
dG9yZWxlYXNlXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0Omxpc3RbaV1dXTsK
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU1ZpZXcgKilzZWxlY3Rpb25WaWV3
Cit7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TSW1hZ2UgKilzZWxlY3Rpb25JbWFnZUZv
cmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKK3sKKyAgICBpZiAoW3NlbGYgX2hh
c1NlbGVjdGlvbl0pCisgICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rp
b25JbWFnZShmb3JjZUJsYWNrVGV4dCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNSZWN0
KXNlbGVjdGlvbkltYWdlUmVjdAoreworICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKKyAg
ICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJvdW5kcygpOworICAg
IHJldHVybiBOU1plcm9SZWN0OworfQorCistIChOU0FycmF5ICopcGFzdGVib2FyZFR5cGVzRm9y
U2VsZWN0aW9uCit7CisgICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlPckRlbGV0ZV0pIHsKKyAg
ICAgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVzID0gW1tbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25Q
YXN0ZWJvYXJkVHlwZXNdIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFt0eXBl
cyBhZGRPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOworICAgICAgICByZXR1cm4gdHlw
ZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBjbGFzc10gX3NlbGVjdGlv
blBhc3RlYm9hcmRUeXBlc107CisgICAgfQorfQorCistICh2b2lkKXdyaXRlU2VsZWN0aW9uV2l0
aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAoreworICAgIFtzZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJv
YXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0
cmluZzpuaWxdOworfQorCistICh2b2lkKXNlbGVjdEFsbAoreworICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUpCisgICAgICAgIGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdEFsbCgpOworfQorCistICh2b2lkKWRlc2VsZWN0
QWxsCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAg
aWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLT5jbGVhcigpOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBb
W3NlbGYgX2ZyYW1lXSBfc3RyaW5nRm9yUmFuZ2U6W3NlbGYgX2RvY3VtZW50UmFuZ2VdXTsKK30K
KworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZVN0cmluZ0Zyb21ET01SYW5nZToo
RE9NUmFuZ2UgKilyYW5nZQoreworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0
cmluZzsKKyNpZiAhTE9HX0RJU0FCTEVEICAgICAgICAKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFi
c29sdXRlVGltZUdldEN1cnJlbnQoKTsKKyNlbmRpZiAgICAKKyAgICBhdHRyaWJ1dGVkU3RyaW5n
ID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01SYW5nZTpyYW5nZV0g
YXV0b3JlbGVhc2VdOworI2lmICFMT0dfRElTQUJMRUQKKyAgICBkb3VibGUgZHVyYXRpb24gPSBD
RkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhUaW1pbmcsICJjcmVh
dGluZyBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHNlbGVjdGlvbiB0b29rICVmIHNlY29uZHMuIiwg
ZHVyYXRpb24pOworI2VuZGlmCisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Cit9CisKKy0g
KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBET01Eb2N1bWVu
dCAqZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07CisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZVN0cmluZ0Zyb21E
T01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXTsKKyAgICBpZiAoIWF0dHJpYnV0ZWRT
dHJpbmcpIHsKKyAgICAgICAgRG9jdW1lbnQqIGNvcmVEb2N1bWVudCA9IGNvcmUoZG9jdW1lbnQp
OworICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6UmFuZ2U6OmNyZWF0ZShjb3JlRG9jdW1lbnQsIGNvcmVE
b2N1bWVudCwgMCwgY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQtPmNoaWxkTm9kZUNvdW50KCkp
LmdldCgpXTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Cit9CisKKy0gKE5T
U3RyaW5nICopc2VsZWN0ZWRTdHJpbmcKK3sKKyAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX3Nl
bGVjdGVkU3RyaW5nXTsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopc2VsZWN0ZWRBdHRy
aWJ1dGVkU3RyaW5nCit7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
ID0gW3NlbGYgX2F0dHJpYnV0ZVN0cmluZ0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5n
ZV1dOworICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgeworICAgICAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICAgICAgaWYgKGNvcmVGcmFtZSkgeworICAg
ICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgICAgICBhdHRyaWJ1dGVkU3Ry
aW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6
cmFuZ2UuZ2V0KCldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhdHRyaWJ1dGVkU3Ry
aW5nOworfQorCistIChCT09MKXN1cHBvcnRzVGV4dEVuY29kaW5nCit7CisgICAgcmV0dXJuIFlF
UzsKK30KKworLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjoo
Qk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFw
RmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KK3sKKyAgICBpZiAo
IVtzdHJpbmcgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZy
YW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9yd2FyZCwgY2FzZUZsYWcsIHdyYXBGbGFnLCBzdGFy
dEluU2VsZWN0aW9uKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcg
KFdlYkRvY3VtZW50SW50ZXJuYWxQcm90b2NvbHMpCisKKy0gKE5TRGljdGlvbmFyeSAqKWVsZW1l
bnRBdFBvaW50OihOU1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIFtzZWxmIGVsZW1lbnRBdFBv
aW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDpOT107Cit9CisKKy0gKE5TRGljdGlvbmFyeSAq
KWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBvaW50IGFsbG93U2hhZG93Q29udGVudDooQk9PTClh
bGxvdworeworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1tXZWJF
bGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OmNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KEludFBvaW50KHBvaW50KSwgYWxs
b3cpXSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKE5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JU
ZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGxpbWl0
OihOU1VJbnRlZ2VyKWxpbWl0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBjb3JlRnJhbWUtPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNhc2VGbGFnLCBs
aW1pdCk7Cit9CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZDoo
Qk9PTCluZXdWYWx1ZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZyYW1l
LT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKG5ld1ZhbHVlKTsKK30KKworLSAo
Qk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkCit7CisgICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3Jl
RnJhbWUtPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsKK30KKworLSAodm9pZCl1
bm1hcmtBbGxUZXh0TWF0Y2hlcworeworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1l
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBkb2N1bWVudC0+cmVtb3ZlTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6VGV4dE1hdGNoKTsKK30KKworLSAoTlNBcnJheSAqKXJlY3RzRm9yVGV4dE1hdGNo
ZXMKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBp
ZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVu
dCkKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKworICAgIFZlY3RvcjxJbnRSZWN0
PiByZWN0cyA9IGRvY3VtZW50LT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtl
cjo6VGV4dE1hdGNoKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IHJlY3RzLnNpemUoKTsKKyAgICBO
U011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
OmNvdW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytp
bmRleCkKKyAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpy
ZWN0c1tpbmRleF1dXTsgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQGVuZAorCisvLyBU
aGlzIGlzIHVzZWQgYnkgQXBwS2l0IGFuZCBpcyBpbmNsdWRlZCBoZXJlIHNvIHRoYXQgV2ViRGF0
YVByb3RvY29sU2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBvbmNlLgorQGltcGxlbWVudGF0aW9uIE5T
VVJMIChXZWJEYXRhVVJMKQorCisrIChOU1VSTCAqKV93ZWJfdW5pcXVlV2ViRGF0YVVSTAorewor
ICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQp
OworICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOworICAgIENGUmVsZWFzZShVVUlEUmVm
KTsKKyAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQDovLyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5n
XV07CisgICAgQ0ZSZWxlYXNlKFVVSURTdHJpbmcpOworICAgIHJldHVybiBVUkw7Cit9CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdlYlJlc3BvbmRlckNoYWluU2luaworCistIChpZClpbml0
V2l0aFJlc3BvbmRlckNoYWluOihOU1Jlc3BvbmRlciAqKWNoYWluCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4gPSBjaGFpbjsKKyAgICB3aGls
ZSAoTlNSZXNwb25kZXIgKm5leHQgPSBbX2xhc3RSZXNwb25kZXJJbkNoYWluIG5leHRSZXNwb25k
ZXJdKQorICAgICAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4gPSBuZXh0OworICAgIFtfbGFzdFJl
c3BvbmRlckluQ2hhaW4gc2V0TmV4dFJlc3BvbmRlcjpzZWxmXTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZXRhY2gKK3sKKyAgICBbX2xhc3RSZXNwb25kZXJJbkNoYWluIHNldE5l
eHRSZXNwb25kZXI6bmlsXTsKKyAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4gPSBuaWw7Cit9CisK
Ky0gKEJPT0wpcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kCit7CisgICAgcmV0dXJuIF9yZWNlaXZl
ZFVuaGFuZGxlZENvbW1hbmQ7Cit9CisKKy0gKHZvaWQpbm9SZXNwb25kZXJGb3I6KFNFTClzZWxl
Y3RvcgoreworICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQgPSBZRVM7Cit9CisKKy0gKHZv
aWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgX3JlY2VpdmVkVW5o
YW5kbGVkQ29tbWFuZCA9IFlFUzsKK30KKworLSAoQk9PTCl0cnlUb1BlcmZvcm06KFNFTClhY3Rp
b24gd2l0aDooaWQpb2JqZWN0Cit7CisgICAgX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZCA9IFlF
UzsKKyAgICByZXR1cm4gWUVTOworfQorCitAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiA0NDI5MikKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2NDMzICsxLDQ1IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
ICAgICAgICAgICAoQykgMjAwNiwgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdt
YWlsLmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2ltcG9ydCAiV2ViSFRNTFZpZXcuaCIKLQotI2ltcG9ydCAiRE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bkludGVybmFsLmgiCi0jaW1wb3J0ICJET01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCIKLSNp
bXBvcnQgIkRPTURvY3VtZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5o
IgotI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViQXJjaGl2ZS5oIgot
I2ltcG9ydCAiV2ViQ2xpcFZpZXcuaCIKLSNpbXBvcnQgIldlYkRPTU9wZXJhdGlvbnNJbnRlcm5h
bC5oIgotI2ltcG9ydCAiV2ViRGF0YVNvdXJjZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJEZWZh
dWx0VUlEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViRG9jdW1lbnRJbnRlcm5hbC5oIgotI2ltcG9y
dCAiV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3LmgiCi0jaW1wb3J0ICJXZWJFZGl0aW5nRGVsZWdh
dGUuaCIKLSNpbXBvcnQgIldlYkVsZW1lbnREaWN0aW9uYXJ5LmgiCi0jaW1wb3J0ICJXZWJGcmFt
ZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJGcmFtZVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYkZy
YW1lVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRl
LmgiCi0jaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJLaXRMb2dn
aW5nLmgiCi0jaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViS2l0
VmVyc2lvbkNoZWNrcy5oIgotI2ltcG9ydCAiV2ViTG9jYWxpemFibGVTdHJpbmdzLmgiCi0jaW1w
b3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TRXZlbnRF
eHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TRmlsZU1hbmFnZXJFeHRyYXMuaCIKLSNpbXBvcnQgIldl
Yk5TSW1hZ2VFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCi0jaW1wb3J0
ICJXZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TUHJpbnRPcGVyYXRpb25F
eHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1ZpZXdF
eHRyYXMuaCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCAiV2Vi
Tm9kZUhpZ2hsaWdodC5oIgotI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgotI2ltcG9y
dCAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgot
I2ltcG9ydCAiV2ViUmVzb3VyY2VQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0
b3IuaCIKLSNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdh
dGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgPEFwcEtp
dC9OU0FjY2Vzc2liaWxpdHkuaD4KLSNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGlj
YXRpb25TZXJ2aWNlcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9DU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRWRp
dG9yRGVsZXRlQWN0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlvbkhhbmRs
ZXJzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
b2N1c0NvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJk
RXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtTW91c2VFdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgotI2ltcG9y
dCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NoYXJl
ZEJ1ZmZlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9UZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUZXh0UmVuZGVyZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
bWFya3VwLmg+Ci0jaW1wb3J0IDxXZWJLaXQvRE9NLmg+Ci0jaW1wb3J0IDxXZWJLaXQvRE9NRXh0
ZW5zaW9ucy5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTVByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktp
dFN5c3RlbUludGVyZmFjZS5oPgotI2ltcG9ydCA8ZGxmY24uaD4KLSNpbXBvcnQgPGxpbWl0cz4K
LSNpbXBvcnQgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0j
ZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotQGludGVyZmFjZSBOU1dpbmRvdyAoQm9yZGVy
Vmlld0FjY2VzcykKLS0gKE5TVmlldyopX3dlYl9ib3JkZXJWaWV3OwotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gTlNXaW5kb3cgKEJvcmRlclZpZXdBY2Nlc3MpCi0tIChOU1ZpZXcqKV93ZWJfYm9y
ZGVyVmlldwotewotICAgIHJldHVybiBfYm9yZGVyVmlldzsKLX0KLUBlbmQKLQotQGludGVyZmFj
ZSBXZWJSZXNwb25kZXJDaGFpblNpbmsgOiBOU1Jlc3BvbmRlciB7Ci0gICAgTlNSZXNwb25kZXIq
IF9sYXN0UmVzcG9uZGVySW5DaGFpbjsKLSAgICBCT09MIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1h
bmQ7Ci19Ci0tIChpZClpbml0V2l0aFJlc3BvbmRlckNoYWluOihOU1Jlc3BvbmRlciAqKWNoYWlu
OwotLSAodm9pZClkZXRhY2g7Ci0tIChCT09MKXJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsKLUBl
bmQKLQotc3RhdGljIElNUCBvbGRTZXRDdXJzb3JJTVAgPSBOVUxMOwotCi0jaWZkZWYgQlVJTERJ
TkdfT05fVElHRVIKLQotc3RhdGljIElNUCBvbGRSZXNldEN1cnNvclJlY3RzSU1QID0gTlVMTDsK
LXN0YXRpYyBCT09MIGNhblNldEN1cnNvciA9IFlFUzsKLQotc3RhdGljIHZvaWQgcmVzZXRDdXJz
b3JSZWN0cyhOU1dpbmRvdyogc2VsZiwgU0VMIGNtZCkKLXsKLSAgICBOU1BvaW50IHBvaW50ID0g
W3NlbGYgbW91c2VMb2NhdGlvbk91dHNpZGVPZkV2ZW50U3RyZWFtXTsKLSAgICBOU1ZpZXcqIHZp
ZXcgPSBbW3NlbGYgX3dlYl9ib3JkZXJWaWV3XSBoaXRUZXN0OnBvaW50XTsKLSAgICBpZiAoW3Zp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewotICAgICAgICBXZWJIVE1M
VmlldyAqaHRtbFZpZXcgPSAoV2ViSFRNTFZpZXcqKXZpZXc7Ci0gICAgICAgIE5TUG9pbnQgbG9j
YWxQb2ludCA9IFtodG1sVmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXTsKLSAg
ICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW2h0bWxWaWV3IGVsZW1lbnRBdFBvaW50OmxvY2Fs
UG9pbnQgYWxsb3dTaGFkb3dDb250ZW50Ok5PXTsKLSAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVu
dCA9IFtkaWN0IG9iamVjdEZvcktleTpXZWJFbGVtZW50RE9NTm9kZUtleV07Ci0gICAgICAgIGlm
ICghW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEFwcGxldEVsZW1lbnQgY2xhc3NdXSAm
JiAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdXSAm
JgotICAgICAgICAgICAgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxFbWJlZEVsZW1l
bnQgY2xhc3NdXSkKLSAgICAgICAgICAgIGNhblNldEN1cnNvciA9IE5POwotICAgIH0KLSAgICBv
bGRSZXNldEN1cnNvclJlY3RzSU1QKHNlbGYsIGNtZCk7Ci0gICAgY2FuU2V0Q3Vyc29yID0gWUVT
OwotfQotCi1zdGF0aWMgdm9pZCBzZXRDdXJzb3IoTlNDdXJzb3IqIHNlbGYsIFNFTCBjbWQpCi17
Ci0gICAgaWYgKGNhblNldEN1cnNvcikKLSAgICAgICAgb2xkU2V0Q3Vyc29ySU1QKHNlbGYsIGNt
ZCk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyB2b2lkIHNldEN1cnNvcihOU1dpbmRvdyogc2VsZiwg
U0VMIGNtZCwgTlNQb2ludCBwb2ludCkKLXsKLSAgICBOU1ZpZXcqIHZpZXcgPSBbW3NlbGYgX3dl
Yl9ib3JkZXJWaWV3XSBoaXRUZXN0OnBvaW50XTsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFz
czpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewotICAgICAgICBXZWJIVE1MVmlldyAqaHRtbFZpZXcg
PSAoV2ViSFRNTFZpZXcqKXZpZXc7Ci0gICAgICAgIE5TUG9pbnQgbG9jYWxQb2ludCA9IFtodG1s
VmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXTsKLSAgICAgICAgTlNEaWN0aW9u
YXJ5ICpkaWN0ID0gW2h0bWxWaWV3IGVsZW1lbnRBdFBvaW50OmxvY2FsUG9pbnQgYWxsb3dTaGFk
b3dDb250ZW50Ok5PXTsKLSAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtkaWN0IG9iamVj
dEZvcktleTpXZWJFbGVtZW50RE9NTm9kZUtleV07Ci0gICAgICAgIGlmICghW2VsZW1lbnQgaXNL
aW5kT2ZDbGFzczpbRE9NSFRNTEFwcGxldEVsZW1lbnQgY2xhc3NdXSAmJiAhW2VsZW1lbnQgaXNL
aW5kT2ZDbGFzczpbRE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdXSAmJgotICAgICAgICAgICAg
IVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxFbWJlZEVsZW1lbnQgY2xhc3NdXSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb2xkU2V0Q3Vyc29ySU1QKHNlbGYsIGNtZCwg
cG9pbnQpOwotfQotCi0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LQotQGludGVyZmFjZSBXZWJMYXllckhvc3RpbmdWaWV3IDogTlNWaWV3Ci1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBXZWJMYXllckhvc3RpbmdWaWV3Ci0KLS8vIEVtcHR5IE5TVmlld3MgaW50ZXJj
ZXB0IHJpZ2h0TW91c2VEb3duOiB0byBkbyBjb250ZXh0IG1lbnUgaGFuZGxpbmcsIGJ1dCB3ZSBu
ZWVkIHRoZSBXZWJMYXllckhvc3RpbmdWaWV3IHRvCi0vLyBsZXQgcmlnaHQgbW91c2UgY2xpY2tz
IHRocm91Z2guCi0tICh2b2lkKXJpZ2h0TW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAg
ICBbW3NlbGYgbmV4dFJlc3BvbmRlcl0gcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpl
dmVudF07Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLQotZXh0ZXJuICJDIiB7Ci0KLS8vIE5lZWQgdG8gZGVjbGFyZSB0aGVzZSBhdHRyaWJ1dGUg
bmFtZXMgYmVjYXVzZSBBcHBLaXQgZXhwb3J0cyB0aGVtIGJ1dCBkb2VzIG5vdCBtYWtlIHRoZW0g
YXZhaWxhYmxlIGluIEFQSSBvciBTUEkgaGVhZGVycy4KLQotZXh0ZXJuIE5TU3RyaW5nICpOU01h
cmtlZENsYXVzZVNlZ21lbnRBdHRyaWJ1dGVOYW1lOwotZXh0ZXJuIE5TU3RyaW5nICpOU1RleHRJ
bnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lOwotCi19Ci0KLUBpbnRlcmZhY2UgTlNW
aWV3IChXZWJOU1ZpZXdEZXRhaWxzKQotLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5l
ZWRlZElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zp
c2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcg
dG9wVmlldzooQk9PTCl0b3BWaWV3OwotLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5
V2l0aExvY2tGb2N1czooQk9PTCluZWVkc0xvY2tGb2N1cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVj
dDsKLS0gKHZvaWQpX3JlY3Vyc2l2ZTooQk9PTClyZWN1cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdP
cGFjaXR5OihOU1JlY3QpZGlzcGxheVJlY3QgaW5Db250ZXh0OihOU0dyYXBoaWNzQ29udGV4dCAq
KWNvbnRleHQgdG9wVmlldzooQk9PTCl0b3BWaWV3OwotLSAoTlNSZWN0KV9kaXJ0eVJlY3Q7Ci0t
ICh2b2lkKV9zZXREcmF3c093bkRlc2NlbmRhbnRzOihCT09MKWRyYXdzT3duRGVzY2VuZGFudHM7
Ci0tICh2b2lkKV9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnM7Ci0tICh2b2lk
KV93aW5kb3dDaGFuZ2VkS2V5U3RhdGU7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNBcHBsaWNhdGlv
biAoV2ViTlNBcHBsaWNhdGlvbkRldGFpbHMpCi0tICh2b2lkKXNwZWFrU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZzsKLUBlbmQKLQotQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRh
aWxzKQotLSAoaWQpX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmc7Ci0tICh2b2lkKV9z
ZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNB
dHRyaWJ1dGVkU3RyaW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQotLSAoaWQpX2lu
aXRXaXRoRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7Ci0tIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01Eb2N1bWVu
dCAqKWRvY3VtZW50IGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdCBzdWJy
ZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOwotQGVuZAotCi1AaW50ZXJmYWNlIE5T
U3BlbGxDaGVja2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFpbHMpCi0tICh2b2lkKWxlYXJuV29y
ZDooTlNTdHJpbmcgKil3b3JkOwotQGVuZAotCi0vLyBCeSBpbWFnaW5nIHRvIGEgd2lkdGggYSBs
aXR0bGUgd2lkZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHBpeGVscywKLS8vIHRoaW4gcGFnZXMgd2ls
bCBiZSBzY2FsZWQgZG93biBhIGxpdHRsZSwgbWF0Y2hpbmcgdGhlIHdheSB0aGV5Ci0vLyBwcmlu
dCBpbiBJRSBhbmQgQ2FtaW5vLiBUaGlzIGxldHMgdGhlbSB1c2UgZmV3ZXIgc2hlZXRzIHRoYW4g
dGhleQotLy8gd291bGQgb3RoZXJ3aXNlLCB3aGljaCBpcyBwcmVzdW1hYmx5IHdoeSBvdGhlciBi
cm93c2VycyBkbyB0aGlzLgotLy8gV2lkZSBwYWdlcyB3aWxsIGJlIHNjYWxlZCBkb3duIG1vcmUg
dGhhbiB0aGlzLgotI2RlZmluZSBQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IgICAgIDEuMjVm
Ci0KLS8vIFRoaXMgbnVtYmVyIGRldGVybWluZXMgaG93IHNtYWxsIHdlIGFyZSB3aWxsaW5nIHRv
IHJlZHVjZSB0aGUgcGFnZSBjb250ZW50Ci0vLyBpbiBvcmRlciB0byBhY2NvbW1vZGF0ZSB0aGUg
d2lkZXN0IGxpbmUuIElmIHRoZSBwYWdlIHdvdWxkIGhhdmUgdG8gYmUKLS8vIHJlZHVjZWQgc21h
bGxlciB0byBtYWtlIHRoZSB3aWRlc3QgbGluZSBmaXQsIHdlIGp1c3QgY2xpcCBpbnN0ZWFkICh0
aGlzCi0vLyBiZWhhdmlvciBtYXRjaGVzIE1hY0lFIGFuZCBNb3ppbGxhLCBhdCBsZWFzdCkKLSNk
ZWZpbmUgUHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yICAgICAyLjBmCi0KLS8vIFRoaXMgbnVt
YmVyIGRldGVybWluZXMgaG93IHNob3J0IHRoZSBsYXN0IHByaW50ZWQgcGFnZSBvZiBhIG11bHRp
LXBhZ2UgcHJpbnQgc2Vzc2lvbgotLy8gY2FuIGJlIGJlZm9yZSB3ZSB0cnkgdG8gc2hyaW5rIHRo
ZSBzY2FsZSBpbiBvcmRlciB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBwYWdlcywgYW5kCi0vLyB0
aHVzIGVsaW1pbmF0ZSB0aGUgb3JwaGFuLgotI2RlZmluZSBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5S
YXRpbyAgICAgIDAuMWYKLQotLy8gVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyB0aGUgYW1vdW50IHRo
ZSBzY2FsZSBmYWN0b3IgaXMgYWRqdXN0ZWQgdG8gdHJ5IHRvIGVsaW1pbmF0ZSBvcnBoYW5zLgot
Ly8gSXQgaGFzIG5vIGRpcmVjdCBtYXRoZW1hdGljYWwgcmVsYXRpb25zaGlwIHRvIExhc3RQcmlu
dGVkUGFnZU9ycGhhblJhdGlvLCBkdWUgdG8gdmFyaWFibGUKLS8vIG51bWJlcnMgb2YgcGFnZXMs
IGxvZ2ljIHRvIGF2b2lkIGJyZWFraW5nIGVsZW1lbnRzLCBhbmQgQ1NTLXN1cHBsaWVkIGhhcmQg
cGFnZSBicmVha3MuCi0jZGVmaW5lIFByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0bWVudCAgMS4x
ZgotCi0jZGVmaW5lIEFVVE9TQ1JPTExfSU5URVJWQUwgICAgICAgICAgICAgMC4xZgotCi0jZGVm
aW5lIERSQUdfTEFCRUxfQk9SREVSX1ggICAgICAgICAgICAgNC4wZgotLy9LZWVwIGJvcmRlcl95
IGluIHN5bmNoIHdpdGggRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQKLSNkZWZp
bmUgRFJBR19MQUJFTF9CT1JERVJfWSAgICAgICAgICAgICAyLjBmCi0jZGVmaW5lIERSQUdfTEFC
RUxfUkFESVVTICAgICAgICAgICAgICAgNS4wZgotI2RlZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9Z
X09GRlNFVCAgICAgICAgICAgICAgMi4wZgotCi0jZGVmaW5lIE1JTl9EUkFHX0xBQkVMX1dJRFRI
X0JFRk9SRV9DTElQICAgICAgICAxMjAuMGYKLSNkZWZpbmUgTUFYX0RSQUdfTEFCRUxfV0lEVEgg
ICAgICAgICAgICAgICAgICAgIDMyMC4wZgotCi0jZGVmaW5lIERSQUdfTElOS19MQUJFTF9GT05U
X1NJWkUgICAxMS4wZgotI2RlZmluZSBEUkFHX0xJTktfVVJMX0ZPTlRfU0laRSAgIDEwLjBmCi0K
LS8vIEFueSBub24temVybyB2YWx1ZSB3aWxsIGRvLCBidXQgdXNpbmcgc29tZXRoaW5nIHJlY29n
bml6YWJsZSBtaWdodCBoZWxwIHVzIGRlYnVnIHNvbWUgZGF5LgotI2RlZmluZSBUUkFDS0lOR19S
RUNUX1RBRyAweEJBREZBQ0UKLQotLy8gRklYTUU6IFRoaXMgY29uc3RhbnQgaXMgY29waWVkIGZy
b20gQXBwS2l0J3MgX05YU21hcnRQYXN0ZSBjb25zdGFudC4KLSNkZWZpbmUgV2ViU21hcnRQYXN0
ZVBib2FyZFR5cGUgQCJOZVhUIHNtYXJ0IHBhc3RlIHBhc3RlYm9hcmQgdHlwZSIKLQotI2RlZmlu
ZSBTVEFOREFSRF9XRUlHSFQgNQotI2RlZmluZSBNSU5fQk9MRF9XRUlHSFQgNwotI2RlZmluZSBT
VEFOREFSRF9CT0xEX1dFSUdIVCA5Ci0KLS8vIEZha2UgVVJMIHNjaGVtZS4KLSNkZWZpbmUgV2Vi
RGF0YVByb3RvY29sU2NoZW1lIEAid2Via2l0LWZha2UtdXJsIgotCi0vLyA8cmRhcjovL3Byb2Js
ZW0vNDk4NTUyND4gUmVmZXJlbmNlcyB0byBXZWJDb3JlU2Nyb2xsVmlldyBhcyBhIHN1YnZpZXcg
b2YgYSBXZWJIVE1MVmlldyBtYXkgYmUgcHJlc2VudAotLy8gaW4gc29tZSBOSUIgZmlsZXMsIHNv
IE5TVW5hcmNoaXZlciBtdXN0IGJlIHN0aWxsIGFibGUgdG8gbG9vayB1cCB0aGlzIG5vdy11bnVz
ZWQgY2xhc3MuCi1AaW50ZXJmYWNlIFdlYkNvcmVTY3JvbGxWaWV3IDogTlNTY3JvbGxWaWV3Ci1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlU2Nyb2xsVmlldwotQGVuZAotCi0vLyBpZiBZ
RVMsIGRvIHRoZSBzdGFuZGFyZCBOU1ZpZXcgaGl0IHRlc3QgKHdoaWNoIGNhbid0IGdpdmUgdGhl
IHJpZ2h0IHJlc3VsdCB3aGVuIEhUTUwgb3ZlcmxhcHMgYSB2aWV3KQotc3RhdGljIEJPT0wgZm9y
Y2VOU1ZpZXdIaXRUZXN0OworQGNsYXNzIFdlYlZpZXc7CitAY2xhc3MgV2ViSFRNTFZpZXc7CiAK
LS8vIGlmIFlFUywgZG8gdGhlICJ0b3AgV2ViSFRNTFZpZXciIGhpdCB0ZXN0ICh3aGljaCB3ZSdk
IGxpa2UgdG8gZG8gYWxsIHRoZSB0aW1lIGJ1dCBjYW4ndCBiZWNhdXNlIG9mIEphdmEgcmVxdWly
ZW1lbnRzIFtzZWUgYnVnIDQzNDk3MjFdKQotc3RhdGljIEJPT0wgZm9yY2VXZWJIVE1MVmlld0hp
dFRlc3Q7Ci0KLXN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXc7Ci0KLS8vIFdlIG5lZWQg
dGhpcyB0byBiZSBhYmxlIHRvIHNhZmVseSByZWZlcmVuY2UgdGhlIENhY2hlZEltYWdlIGZvciB0
aGUgcHJvbWlzZWQgZHJhZyBkYXRhCi1zdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHByb21p
c2VkRGF0YUNsaWVudCgpCi17Ci0gICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBzdGF0
aWNDYWNoZWRSZXNvdXJjZUNsaWVudCA9IG5ldyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKLSAgICBy
ZXR1cm4gc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQ7Ci19Ci0KLUBpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAoQk9PTClfaW1hZ2VFeGlzdHNBdFBh
dGhzOihOU0FycmF5ICopcGF0aHM7Ci0tIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBpbkNvbnRl
eHQ6KERPTVJhbmdlICopY29udGV4dCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4
dDsKLS0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQg
KilwYXN0ZWJvYXJkOwotLSAodm9pZClfcGFzdGVXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJk
ICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dDsKLS0gKHZv
aWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZDsKLS0gKHZvaWQpX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseTsK
LS0gKHZvaWQpX3JlbW92ZVN1cGVydmlld09ic2VydmVyczsKLS0gKHZvaWQpX3JlbW92ZVdpbmRv
d09ic2VydmVyczsKLS0gKEJPT0wpX3Nob3VsZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVudEZy
YWdtZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2
ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uOwotLSAoQk9PTClfc2hvdWxkSW5z
ZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJh
bmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKLS0gKEJPT0wpX3No
b3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9u
OihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKLS0gKGZsb2F0KV9jYWxjdWxhdGVQcmludEhl
aWdodDsKLS0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2U7Ci0tIChCT09MKV9zaG91bGREZWxl
dGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKLS0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZlbnQ6
KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRU
eXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1
dGVkU3RyaW5nOwotLSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRSYW5nZTsKLS0gKHZvaWQpX3NldE1v
dXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQ7Ci0tIChXZWJIVE1MVmlldyAqKV90b3BIVE1M
VmlldzsKLS0gKEJPT0wpX2lzVG9wSFRNTFZpZXc7Ci0tICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdN
b2RlUmVjdXJzaXZlOwotLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFk
anVzdFZpZXdTaXplOwotLSAodm9pZClfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlOwot
QGVuZAotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0KLUBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3VGV4
dENoZWNraW5nSW50ZXJuYWwpCi0tICh2b2lkKW9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6
KGlkKXNlbmRlcjsKLS0gKEJPT0wpc21hcnRJbnNlcnREZWxldGVFbmFibGVkOwotLSAodm9pZClz
ZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKHZvaWQpdG9nZ2xlU21h
cnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcjsKLS0gKEJPT0wpaXNBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkVuYWJsZWQ7Ci0tICh2b2lkKXNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bjooaWQpc2VuZGVyOwotLSAoQk9PTClpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOwot
LSAodm9pZClzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnOwotLSAo
dm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihpZClzZW5kZXI7Ci0tIChCT09MKWlz
QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ7Ci0tICh2b2lkKXNldEF1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZUF1dG9tYXRp
Y0Rhc2hTdWJzdGl0dXRpb246KGlkKXNlbmRlcjsKLS0gKEJPT0wpaXNBdXRvbWF0aWNUZXh0UmVw
bGFjZW1lbnRFbmFibGVkOwotLSAodm9pZClzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFi
bGVkOihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDoo
aWQpc2VuZGVyOwotLSAoQk9PTClpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ7
Ci0tICh2b2lkKXNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxh
ZzsKLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOihpZClzZW5kZXI7
Ci1AZW5kCi0KLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJGb3J3YXJkRGVj
bGFyYXRpb24pIC8vIEZJWE1FOiBQdXQgdGhpcyBpbiBhIG5vcm1hbCBjYXRlZ29yeSBhbmQgc3Rv
cCBkb2luZyB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbiB0cmljay4KLS0gKHZvaWQpX3NldFByaW50
aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBt
YXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6KEJPT0wp
YWRqdXN0Vmlld1NpemU7Ci1AZW5kCi0KLUBjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7Ci1AaW50
ZXJmYWNlIE5TUmVzcG9uZGVyIChBcHBLaXREZXRhaWxzKQotLSAoTlNUZXh0SW5wdXRDb250ZXh0
ICopaW5wdXRDb250ZXh0OwotQGVuZAotCi1AaW50ZXJmYWNlIE5TT2JqZWN0IChOU1RleHRJbnB1
dENvbnRleHREZXRhaWxzKQotLSAoQk9PTCl3YW50c1RvSGFuZGxlTW91c2VFdmVudHM7Ci0tIChC
T09MKWhhbmRsZU1vdXNlRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKLUBlbmQKLQotQGludGVyZmFj
ZSBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KSA8TlNUZXh0SW5wdXQ+Ci0tICh2
b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXI7Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
V2ViSFRNTFZpZXcgKFdlYkVkaXRpbmdTdHlsZVN1cHBvcnQpCi0tIChET01DU1NTdHlsZURlY2xh
cmF0aW9uICopX2VtcHR5U3R5bGU7Ci0tIChOU1N0cmluZyAqKV9jb2xvckFzU3RyaW5nOihOU0Nv
bG9yICopY29sb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNWaWV3IChXZWJIVE1MVmlld0ZpbGVJ
bnRlcm5hbCkKLS0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheToo
TlNNdXRhYmxlQXJyYXkgKikgYXJyYXk7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNNdXRhYmxlRGlj
dGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0tICh2b2lkKV93ZWJfc2V0T2JqZWN0
SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleTsKLUBlbmQKLQotLy8gSGFuZGxlcyB0
aGUgY29tcGxldGU6IHRleHQgY29tbWFuZAotQGludGVyZmFjZSBXZWJUZXh0Q29tcGxldGVDb250
cm9sbGVyIDogTlNPYmplY3QgPE5TVGFibGVWaWV3RGVsZWdhdGUsIE5TVGFibGVWaWV3RGF0YVNv
dXJjZT4geworQGludGVyZmFjZSBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgOiBOU09iamVj
dCA8TlNUYWJsZVZpZXdEZWxlZ2F0ZSwgTlNUYWJsZVZpZXdEYXRhU291cmNlPiB7CiBAcHJpdmF0
ZQotICAgIFdlYkhUTUxWaWV3ICpfdmlldzsKKyAgICBXZWJWaWV3ICpfdmlldzsKKyAgICBXZWJI
VE1MVmlldyAqX2h0bWxWaWV3OwogICAgIE5TV2luZG93ICpfcG9wdXBXaW5kb3c7CiAgICAgTlNU
YWJsZVZpZXcgKl90YWJsZVZpZXc7CiAgICAgTlNBcnJheSAqX2NvbXBsZXRpb25zOwogICAgIE5T
U3RyaW5nICpfb3JpZ2luYWxTdHJpbmc7CiAgICAgaW50IHByZWZpeExlbmd0aDsKIH0KLS0gKGlk
KWluaXRXaXRoSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopdmlldzsKKy0gKGlkKWluaXRXaXRoV2Vi
VmlldzooV2ViVmlldyAqKXZpZXcgSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopaHRtbFZpZXc7CiAt
ICh2b2lkKWRvQ29tcGxldGlvbjsKIC0gKHZvaWQpZW5kUmV2ZXJ0aW5nQ2hhbmdlOihCT09MKXJl
dmVydENoYW5nZSBtb3ZlTGVmdDooQk9PTClnb0xlZnQ7CiAtIChCT09MKXBvcHVwV2luZG93SXNP
cGVuOwogLSAoQk9PTClmaWx0ZXJLZXlEb3duOihOU0V2ZW50ICopZXZlbnQ7CiAtICh2b2lkKV9y
ZWZsZWN0U2VsZWN0aW9uOwogQGVuZAotCi1zdHJ1Y3QgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzIHsKLSAgICBLZXlib2FyZEV2ZW50KiBldmVudDsKLSAgICBCT09MIGV2
ZW50V2FzSGFuZGxlZDsKLSAgICBCT09MIHNob3VsZFNhdmVDb21tYW5kOwotICAgIC8vIFRoZSBJ
bnB1dCBNZXRob2QgbWF5IGNvbnN1bWUgYW4gZXZlbnQgYW5kIG5vdCB0ZWxsIHVzLCBpbgotICAg
IC8vIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSBET00K
LSAgICBCT09MIGNvbnN1bWVkQnlJTTsKLX07Ci0KLUBpbnRlcmZhY2UgV2ViSFRNTFZpZXdQcml2
YXRlIDogTlNPYmplY3QgewotQHB1YmxpYwotICAgIEJPT0wgY2xvc2VkOwotICAgIEJPT0wgbmVl
ZHNUb0FwcGx5U3R5bGVzOwotICAgIEJPT0wgaWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHM7Ci0g
ICAgQk9PTCBwcmludGluZzsKLSAgICBCT09MIGF2b2lkaW5nUHJpbnRPcnBoYW47Ci0gICAgQk9P
TCBvYnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9uczsKLSAgICBCT09MIG9ic2VydmluZ1N1
cGVydmlld05vdGlmaWNhdGlvbnM7Ci0gICAgQk9PTCBvYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRp
b25zOwotICAgIEJPT0wgcmVzaWduaW5nRmlyc3RSZXNwb25kZXI7Ci0gICAgCi0gICAgaWQgc2F2
ZWRTdWJ2aWV3czsKLSAgICBCT09MIHN1YnZpZXdzU2V0QXNpZGU7Ci0gICAgCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIE5TVmlldyAqbGF5ZXJIb3N0aW5nVmlldzsKLSNl
bmRpZgotCi0gICAgTlNFdmVudCAqbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxp
bmcgdGhlIGV2ZW50LgotICAgIEJPT0wgaGFuZGxpbmdNb3VzZURvd25FdmVudDsKLSAgICBOU0V2
ZW50ICprZXlEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgotCi0g
ICAgLy8gQSBXZWJIVE1MVmlldyBoYXMgYSBzaW5nbGUgaW5wdXQgY29udGV4dCwgYnV0IHdlIHJl
dHVybiBuaWwgd2hlbiBpbiBub24tZWRpdGFibGUgY29udGVudCB0byBhdm9pZCBtYWtpbmcgaW5w
dXQgbWV0aG9kcyBkbyB0aGVpciB3b3JrLgotICAgIC8vIFRoaXMgc3RhdGUgaXMgc2F2ZWQgZWFj
aCB0aW1lIHNlbGVjdGlvbiBjaGFuZ2VzLCBiZWNhdXNlIGNvbXB1dGluZyBpdCBjYXVzZXMgc3R5
bGUgcmVjYWxjLCB3aGljaCBpcyBub3QgYWx3YXlzIHNhZmUgdG8gZG8uCi0gICAgQk9PTCBleHBv
c2VJbnB1dENvbnRleHQ7Ci0KLSAgICBOU1BvaW50IGxhc3RTY3JvbGxQb3NpdGlvbjsKLQotICAg
IFdlYlBsdWdpbkNvbnRyb2xsZXIgKnBsdWdpbkNvbnRyb2xsZXI7Ci0gICAgCi0gICAgTlNTdHJp
bmcgKnRvb2xUaXA7Ci0gICAgTlNUb29sVGlwVGFnIGxhc3RUb29sVGlwVGFnOwotICAgIGlkIHRy
YWNraW5nUmVjdE93bmVyOwotICAgIHZvaWQgKnRyYWNraW5nUmVjdFVzZXJEYXRhOwotICAgIAot
ICAgIE5TVGltZXIgKmF1dG9zY3JvbGxUaW1lcjsKLSAgICBOU0V2ZW50ICphdXRvc2Nyb2xsVHJp
Z2dlckV2ZW50OwotICAgIAotICAgIE5TQXJyYXkgKnBhZ2VSZWN0czsKLQotICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkgKmhpZ2hsaWdodGVyczsKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0g
ICAgQk9PTCBuZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlOwotI2VuZGlmCi0gICAgCi0gICAgV2Vi
VGV4dENvbXBsZXRlQ29udHJvbGxlciAqY29tcENvbnRyb2xsZXI7Ci0gICAgCi0gICAgQk9PTCB0
cmFuc3BhcmVudEJhY2tncm91bmQ7Ci0KLSAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50
c1BhcmFtZXRlcnMqIGludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgQk9PTCByZWNl
aXZlZE5PT1A7Ci0gICAgCi0gICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZTsKLSAgICBXZWJD
b3JlOjpDYWNoZWRJbWFnZSogcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U7Ci0gICAgCi0gICAg
Q0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXI7Ci0gICAg
Q0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlTW91c2VvdmVyVGltZXI7Ci0KLSAgICBTRUwgc2VsZWN0
b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIEJPT0wgZW51
bWVyYXRpbmdTdWJ2aWV3czsKLSNlbmRpZgotfQotLSAodm9pZCljbGVhcjsKLUBlbmQKLQotc3Rh
dGljIE5TQ2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0YXRlIHN0YXRlKQotewotICAgIHN3aXRjaCAo
c3RhdGUpIHsKLSAgICAgICAgY2FzZSBGYWxzZVRyaVN0YXRlOgotICAgICAgICAgICAgcmV0dXJu
IE5TT2ZmU3RhdGU7Ci0gICAgICAgIGNhc2UgVHJ1ZVRyaVN0YXRlOgotICAgICAgICAgICAgcmV0
dXJuIE5TT25TdGF0ZTsKLSAgICAgICAgY2FzZSBNaXhlZFRyaVN0YXRlOgotICAgICAgICAgICAg
cmV0dXJuIE5TTWl4ZWRTdGF0ZTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIE5TT2ZmU3RhdGU7Ci19Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlld1By
aXZhdGUKLQotKyAodm9pZClpbml0aWFsaXplCi17Ci0gICAgSlNDOjppbml0aWFsaXplVGhyZWFk
aW5nKCk7Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgV2ViQ29yZU9iakNGaW5hbGl6
ZU9uTWFpblRocmVhZChzZWxmKTsKLSNlbmRpZgotCi0gICAgaWYgKCFvbGRTZXRDdXJzb3JJTVAp
IHsKLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICBNZXRob2Qgc2V0Q3Vyc29yTWV0
aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TQ3Vyc29yIGNsYXNzXSwgQHNlbGVjdG9y
KHNldCkpOwotI2Vsc2UKLSAgICAgICAgTWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNzX2dl
dEluc3RhbmNlTWV0aG9kKFtOU1dpbmRvdyBjbGFzc10sIEBzZWxlY3Rvcihfc2V0Q3Vyc29yRm9y
TW91c2VMb2NhdGlvbjopKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoc2V0Q3Vyc29yTWV0aG9k
KTsKLQotICAgICAgICBvbGRTZXRDdXJzb3JJTVAgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24o
c2V0Q3Vyc29yTWV0aG9kLCAoSU1QKXNldEN1cnNvcik7Ci0gICAgICAgIEFTU0VSVChvbGRTZXRD
dXJzb3JJTVApOwotICAgIH0KLSAgICAKLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIGlm
ICghb2xkUmVzZXRDdXJzb3JSZWN0c0lNUCkgewotICAgICAgICBNZXRob2QgcmVzZXRDdXJzb3JS
ZWN0c01ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU1dpbmRvdyBjbGFzc10sIEBz
ZWxlY3RvcihyZXNldEN1cnNvclJlY3RzKSk7Ci0gICAgICAgIEFTU0VSVChyZXNldEN1cnNvclJl
Y3RzTWV0aG9kKTsKLSAgICAgICAgb2xkUmVzZXRDdXJzb3JSZWN0c0lNUCA9IG1ldGhvZF9zZXRJ
bXBsZW1lbnRhdGlvbihyZXNldEN1cnNvclJlY3RzTWV0aG9kLCAoSU1QKXJlc2V0Q3Vyc29yUmVj
dHMpOwotICAgICAgICBBU1NFUlQob2xkUmVzZXRDdXJzb3JSZWN0c0lNUCk7Ci0gICAgfQotI2Vu
ZGlmCi0KLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1
bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXZWJIVE1MVmlld1ByaXZhdGUgY2xhc3NdLCBzZWxm
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFhdXRvc2Nyb2xsVGltZXIpOwotICAg
IEFTU0VSVCghYXV0b3Njcm9sbFRyaWdnZXJFdmVudCk7Ci0gICAgQVNTRVJUKCF1cGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGVUaW1lcik7Ci0gICAgQVNTRVJUKCF1cGRhdGVNb3VzZW92ZXJUaW1l
cik7Ci0gICAgCi0gICAgW21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOwotICAgIFtrZXlEb3duRXZl
bnQgcmVsZWFzZV07Ci0gICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07Ci0gICAgW3Rvb2xU
aXAgcmVsZWFzZV07Ci0gICAgW2NvbXBDb250cm9sbGVyIHJlbGVhc2VdOwotICAgIFtkYXRhU291
cmNlIHJlbGVhc2VdOwotICAgIFtoaWdobGlnaHRlcnMgcmVsZWFzZV07Ci0gICAgaWYgKHByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlKQotICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKLQotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQotewotICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgp
OwotCi0gICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQotICAgICAgICBwcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsK
LQotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKHZvaWQpY2xlYXIKLXsKLSAgICBbbW91
c2VEb3duRXZlbnQgcmVsZWFzZV07Ci0gICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBb
cGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKLSAgICBbdG9vbFRpcCByZWxlYXNlXTsKLSAgICBb
Y29tcENvbnRyb2xsZXIgcmVsZWFzZV07Ci0gICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07Ci0gICAg
W2hpZ2hsaWdodGVycyByZWxlYXNlXTsKLSAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UpCi0gICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJv
bWlzZWREYXRhQ2xpZW50KCkpOwotCi0gICAgbW91c2VEb3duRXZlbnQgPSBuaWw7Ci0gICAga2V5
RG93bkV2ZW50ID0gbmlsOwotICAgIHBsdWdpbkNvbnRyb2xsZXIgPSBuaWw7Ci0gICAgdG9vbFRp
cCA9IG5pbDsKLSAgICBjb21wQ29udHJvbGxlciA9IG5pbDsKLSAgICBkYXRhU291cmNlID0gbmls
OwotICAgIGhpZ2hsaWdodGVycyA9IG5pbDsKLSAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZSA9IDA7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgbGF5ZXJIb3N0
aW5nVmlldyA9IG5pbDsKLSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJI
VE1MVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0KLS0gKERPTVJhbmdlICopX2RvY3Vt
ZW50UmFuZ2UKLXsKLSAgICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBfZG9j
dW1lbnRSYW5nZV07Ci19Ci0KLS0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAq
KXBhdGhzCi17Ci0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVu
dW1lcmF0b3JdOwotICAgIE5TU3RyaW5nICpwYXRoOwotICAgIAotICAgIHdoaWxlICgocGF0aCA9
IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKLSAgICAgICAgTlNTdHJpbmcgKk1J
TUVUeXBlID0gV0tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbihbcGF0aCBwYXRoRXh0ZW5zaW9uXSk7
Ci0gICAgICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VN
SU1FVHlwZShNSU1FVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKFdlYkRhdGFTb3VyY2UgKilfZGF0YVNvdXJjZQotewot
ICAgIHJldHVybiBfcHJpdmF0ZS0+ZGF0YVNvdXJjZTsKLX0KLQotLSAoV2ViVmlldyAqKV93ZWJW
aWV3Ci17Ci0gICAgcmV0dXJuIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSBfd2ViVmlld107Ci19Ci0K
LS0gKFdlYkZyYW1lVmlldyAqKV9mcmFtZVZpZXcKLXsKLSAgICByZXR1cm4gW1tfcHJpdmF0ZS0+
ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XTsKLX0KLQotLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aFBhdGhzOihOU0FycmF5ICopcGF0aHMKLXsKLSAg
ICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudDsKLSAgICBOU0VudW1lcmF0b3IgKmVudW1l
cmF0b3IgPSBbcGF0aHMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmRv
bU5vZGVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNTdHJpbmcgKnBh
dGg7Ci0gICAgCi0gICAgd2hpbGUgKChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9
IG5pbCkgewotICAgICAgICAvLyBOb24taW1hZ2UgZmlsZSB0eXBlczsgX3dlYl91c2VyVmlzaWJs
ZVN0cmluZyBpcyBhcHByb3ByaWF0ZSBoZXJlIGJlY2F1c2UgdGhpcyB3aWxsCi0gICAgICAgIC8v
IGJlIHBhc3RlZCBhcyB2aXNpYmxlIHRleHQuCi0gICAgICAgIE5TU3RyaW5nICp1cmwgPSBbW1tO
U1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aF0gX3dlYmtpdF9jYW5vbmljYWxpemVdIF93ZWJfdXNl
clZpc2libGVTdHJpbmddOwotICAgICAgICBbZG9tTm9kZXMgYWRkT2JqZWN0OltbW3NlbGYgX2Zy
YW1lXSBET01Eb2N1bWVudF0gY3JlYXRlVGV4dE5vZGU6IHVybF1dOwotICAgIH0KLSAgICAKLSAg
ICBmcmFnbWVudCA9IFtbc2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQ
YXJhZ3JhcGhzOmRvbU5vZGVzXTsgCi0gICAgCi0gICAgW2RvbU5vZGVzIHJlbGVhc2VdOwotICAg
IAotICAgIHJldHVybiBbZnJhZ21lbnQgZmlyc3RDaGlsZF0gIT0gbmlsID8gZnJhZ21lbnQgOiBu
aWw7Ci19Ci0KLSsgKE5TQXJyYXkgKilfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJp
bmdDb252ZXJzaW9uCi17Ci0gICAgc3RhdGljIE5TQXJyYXkgKmVsZW1lbnRzID0gbmlsOwotICAg
IGlmIChlbGVtZW50cyA9PSBuaWwpIHsKLSAgICAgICAgZWxlbWVudHMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czoKLSAgICAgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ug
d2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkgaW5z
ZXJ0ZWQuCi0gICAgICAgICAgICBAInN0eWxlIiwKLSAgICAgICAgICAgIC8vIE9taXQgeG1sIHNv
IHRoZSByZXN1bHQgaXMgbm90IFhIVE1MLgotICAgICAgICAgICAgQCJ4bWwiLCAKLSAgICAgICAg
ICAgIC8vIE9taXQgdGFncyB0aGF0IHdpbGwgZ2V0IHN0cmlwcGVkIHdoZW4gY29udmVydGVkIHRv
IGEgZnJhZ21lbnQgYW55d2F5LgotICAgICAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJo
ZWFkIiwgQCJib2R5IiwKLSAgICAgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgotICAg
ICAgICAgICAgQCJhcHBsZXQiLCBAImJhc2Vmb250IiwgQCJjZW50ZXIiLCBAImRpciIsIEAiZm9u
dCIsIEAiaXNpbmRleCIsIEAibWVudSIsIEAicyIsIEAic3RyaWtlIiwgQCJ1IiwKLSAgICAgICAg
ICAgIC8vIE9taXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0YWNobWVudHMgYXJlIHBhcnQgb2YgdGhl
IGZyYWdtZW50LgotICAgICAgICAgICAgQCJvYmplY3QiLCBuaWxdOwotICAgICAgICBDRlJldGFp
bihlbGVtZW50cyk7Ci0gICAgfQotICAgIHJldHVybiBlbGVtZW50czsKLX0KLQotc3RhdGljIE5T
VVJMKiB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCi17
Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCk7Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Ci0gICAgQ0ZSZWxlYXNlKFVVSURS
ZWYpOwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAvJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURT
dHJpbmcsIHJlbGF0aXZlUGFydF1dOwotICAgIENGUmVsZWFzZShVVUlEU3RyaW5nKTsKLQotICAg
IHJldHVybiBVUkw7Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFn
bWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2Ug
Kiljb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxv
d1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dAotewotICAgIE5TQXJyYXkgKnR5cGVzID0g
W3Bhc3RlYm9hcmQgdHlwZXNdOwotICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0g
bmlsOwotCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBd
KSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFt
ZXNQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFn
bWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6
Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vi
cmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIAotICAgIGlmIChb
dHlwZXMgY29udGFpbnNPYmplY3Q6TlNIVE1MUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdt
ZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBl
Ok5TSFRNTFBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21l
bnQ7Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVd
ICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yVHlwZTpOU1JURlBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAg
ICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5T
UlRGRFBib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZy
YWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29u
dGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVz
b3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotCi0gICAgaWYgKFt0eXBlcyBj
b250YWluc09iamVjdDpOU1RJRkZQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBb
c2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNUSUZG
UGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLQot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNQREZQYm9hcmRUeXBlXSAmJgotICAgICAg
ICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvclR5cGU6TlNQREZQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJu
IGZyYWdtZW50OwotCi0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKQotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNQSUNU
UGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21l
bnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUElDVFBib2FyZFR5cGUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJj
ZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0jZW5kaWYKLQotICAgIC8vIE9ubHkg
MTAuNSBhbmQgaGlnaGVyIHN1cHBvcnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBwYXN0ZWJvYXJk
IHR5cGVzIHdpdGggVVRJcywgYnV0IHdlIGRvbid0IGJlbGlldmUKLSAgICAvLyB0aGF0IGFueSBh
cHBsaWNhdGlvbnMgb24gVGlnZXIgcHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBV
VEksIGxpa2UgUE5HLCBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0OihOU1N0cmluZyopa1VUVHlwZVBOR10gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3Nl
bGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmlu
Zyopa1VUVHlwZVBORwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsK
LSAgICAgICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1VSTFBib2FyZFR5cGVd
ICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yVHlwZTpOU1VSTFBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAg
ICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgICAgIAotICAgIGlmIChhbGxvd1BsYWluVGV4dCAm
JiBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAmJgotICAgICAgICAo
ZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9h
cmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
VHlwZTpOU1N0cmluZ1Bib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKSB7Ci0gICAgICAgIHJldHVy
biBmcmFnbWVudDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNTdHJp
bmcgKilfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQK
LXsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKLSAgICAKLSAgICBp
ZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCi0gICAgICAgIHJl
dHVybiBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNv
bXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwotICAgIAotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IG5pbDsKLSAgICBOU1N0cmluZyAqc3RyaW5nOwot
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkKLSAgICAg
ICAgYXR0cmlidXRlZFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRB
dHRyaWJ1dGVzOk5VTExdOwotICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCAmJiBbdHlw
ZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSkKLSAgICAgICAgYXR0cmlidXRlZFN0
cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTpOU1JURlBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsK
LSAgICBpZiAoYXR0cmlidXRlZFN0cmluZyAhPSBuaWwpIHsKLSAgICAgICAgc3RyaW5nID0gW1th
dHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gY29weV07Ci0gICAgICAgIFthdHRyaWJ1dGVkU3RyaW5n
IHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gW3N0cmluZyBhdXRvcmVsZWFzZV07Ci0gICAgfQot
ICAgIAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBl
XSkgewotICAgICAgICBzdHJpbmcgPSBbW3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpO
U0ZpbGVuYW1lc1Bib2FyZFR5cGVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl07Ci0g
ICAgICAgIGlmIChzdHJpbmcgIT0gbmlsKQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAg
ICB9Ci0gICAgCi0gICAgTlNVUkwgKlVSTDsKLSAgICAKLSAgICBpZiAoKFVSTCA9IFtOU1VSTCBV
UkxGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSkpIHsKLSAgICAgICAgc3RyaW5nID0gW1VSTCBf
d2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKLSAgICAgICAgaWYgKFtzdHJpbmcgbGVuZ3RoXSA+IDAp
Ci0gICAgICAgICAgICByZXR1cm4gc3RyaW5nOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmls
OwotfQotCi0tICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0Ci17Ci0gICAgV2ViVmll
dyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsKLSAgICBbd2ViVmlldyBfc2V0
SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLQotICAgIERPTVJhbmdlICpyYW5nZSA9
IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVu
dCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBpbkNv
bnRleHQ6cmFuZ2UgYWxsb3dQbGFpblRleHQ6YWxsb3dQbGFpblRleHRdOwotICAgIGlmIChmcmFn
bWVudCAmJiBbc2VsZiBfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9N
UmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAg
ICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50
IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNl
V2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF0gbWF0Y2hTdHlsZTpOT107Ci0KLSAgICBbd2ViVmll
dyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpuaWxdOwotICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwot
fQotCi0tICh2b2lkKV9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3
XSByZXRhaW5dOwotICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9h
cmRdOwotCi0gICAgTlNTdHJpbmcgKnRleHQgPSBbc2VsZiBfcGxhaW5UZXh0RnJvbVBhc3RlYm9h
cmQ6cGFzdGVib2FyZF07Ci0gICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQ6dGV4dCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKLSAgICAg
ICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0ZXh0IHNlbGVjdFJl
cGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZF1dOwotCi0gICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9h
cmQ6bmlsXTsKLSAgICBbd2ViVmlldyByZWxlYXNlXTsKLX0KLQotLSAodm9pZClfcmVtb3ZlTW91
c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5Ci17Ci0gICAgaWYgKCFfcHJpdmF0ZSB8fCAh
X3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om5p
bF07Ci0gICAgX3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zID0gZmFs
c2U7Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZVN1cGVydmlld09ic2VydmVycwotewotICAgIGlmICgh
X3ByaXZhdGUgfHwgIV9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBl
cnZpZXddOwotICAgIGlmICghc3VwZXJ2aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRl
ciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0
aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5v
dGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1ZpZXdCb3VuZHNEaWRDaGFuZ2VOb3RpZmljYXRpb24g
b2JqZWN0OnN1cGVydmlld107Ci0gICAgCi0gICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmll
d05vdGlmaWNhdGlvbnMgPSBmYWxzZTsKLX0KLQotLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2
ZXJzCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5k
b3ddOwotICAgIGlmICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNOb3Rp
ZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsK
LSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRv
d0RpZFJlc2lnbktleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9u
Q2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNh
dGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2Vy
dmVyOnNlbGYgbmFtZTpXS1dpbmRvd1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0aW9uKCkgb2Jq
ZWN0OndpbmRvd107Ci0gICAgCi0gICAgX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNh
dGlvbnMgPSBmYWxzZTsKLX0KLQotLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURv
Y3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKily
YW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KLXsKLSAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIERPTU5vZGUgKmNoaWxkID0gW2Zy
YWdtZW50IGZpcnN0Q2hpbGRdOwotICAgIGlmIChbZnJhZ21lbnQgbGFzdENoaWxkXSA9PSBjaGls
ZCAmJiBbY2hpbGQgaXNLaW5kT2ZDbGFzczpbRE9NQ2hhcmFjdGVyRGF0YSBjbGFzc11dKQotICAg
ICAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OlsoRE9NQ2hhcmFjdGVyRGF0YSAqKWNoaWxkIGRhdGFd
IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Ci0gICAgcmV0dXJu
IFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hv
dWxkSW5zZXJ0Tm9kZTpmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlv
bjphY3Rpb25dOwotfQotCi0tIChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRl
eHQgcmVwbGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZp
ZXdJbnNlcnRBY3Rpb24pYWN0aW9uCi17Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93
ZWJWaWV3XTsKLSAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6
cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKLX0KLQotLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNl
cnRBY3Rpb24pYWN0aW9uCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9zaG91bGRJbnNlcnRUZXh0OnRl
eHQgcmVwbGFjaW5nRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIGdpdmVuQWN0aW9uOmFj
dGlvbl07Ci19Ci0KLS8vIENhbGN1bGF0ZSB0aGUgdmVydGljYWwgc2l6ZSBvZiB0aGUgdmlldyB0
aGF0IGZpdHMgb24gYSBzaW5nbGUgcGFnZQotLSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0
Ci17Ci0gICAgLy8gT2J0YWluIHRoZSBwcmludCBpbmZvIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQg
b3BlcmF0aW9uCi0gICAgTlNQcmludEluZm8gKnBpID0gW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJl
bnRPcGVyYXRpb25dIHByaW50SW5mb107Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBwYWdl
IGhlaWdodCBpbiBwb2ludHMKLSAgICBOU1NpemUgcGFwZXJTaXplID0gW3BpIHBhcGVyU2l6ZV07
Ci0gICAgcmV0dXJuIHBhcGVyU2l6ZS5oZWlnaHQgLSBbcGkgdG9wTWFyZ2luXSAtIFtwaSBib3R0
b21NYXJnaW5dOwotfQotCi0tIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCi17Ci0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFt
ZSA/IGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KSA6IG5pbDsKLX0KLQotLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFu
Z2UKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBy
ZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNob3VsZERlbGV0ZVJhbmdl
KGNvcmUocmFuZ2UpKTsKLX0KLQotLSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgLy8gVXN1YWxseSwgd2UgaGFjayBBSydzIGhpdFRlc3QgbWV0aG9k
IHRvIGNhdGNoIGFsbCBldmVudHMgYXQgdGhlIHRvcG1vc3QgV2ViSFRNTFZpZXcuICAKLSAgICAv
LyBDYWxsZXJzIG9mIHRoaXMgbWV0aG9kLCBob3dldmVyLCB3YW50IHRvIHF1ZXJ5IHRoZSBkZWVw
ZXN0IHZpZXcgaW5zdGVhZC4KLSAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBZRVM7Ci0gICAgTlNW
aWV3ICpoaXRWaWV3ID0gW1tbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBoaXRUZXN0OltldmVu
dCBsb2NhdGlvbkluV2luZG93XV07Ci0gICAgZm9yY2VOU1ZpZXdIaXRUZXN0ID0gTk87ICAgIAot
ICAgIHJldHVybiBoaXRWaWV3OwotfQotCi0tICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0
ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAq
KXBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICop
YXR0cmlidXRlZFN0cmluZwotewotICAgIC8vIFB1dCBIVE1MIG9uIHRoZSBwYXN0ZWJvYXJkLgot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lX
ZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKGNvcmUoW3NlbGYgX2ZyYW1lXSkpKSB7Ci0g
ICAgICAgICAgICBpZiAoUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGNvcmVBcmNoaXZlID8g
Y29yZUFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpIDogMCkKLSAgICAgICAgICAgICAg
ICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilkYXRhLmdldCgpIGZvclR5cGU6V2ViQXJj
aGl2ZVBib2FyZFR5cGVdOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFB1dCB0aGUg
YXR0cmlidXRlZCBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQgKFJURi9SVEZEIGZvcm1hdCkuCi0g
ICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkgewotICAgICAg
ICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBuaWwpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRT
dHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOwotICAgICAgICB9ICAgICAg
ICAKLSAgICAgICAgTlNEYXRhICpSVEZERGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkRGcm9t
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRB
dHRyaWJ1dGVzOm5pbF07Ci0gICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRGRERhdGEgZm9y
VHlwZTpOU1JURkRQYm9hcmRUeXBlXTsKLSAgICB9ICAgICAgICAKLSAgICBpZiAoW3R5cGVzIGNv
bnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZWRT
dHJpbmcgPT0gbmlsKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2Vs
ZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW2F0dHJpYnV0
ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRT
dHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGlu
Z0F0dGFjaG1lbnRDaGFyYWN0ZXJzXTsKLSAgICAgICAgfQotICAgICAgICBOU0RhdGEgKlJURkRh
dGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJp
YnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgICAgIFtw
YXN0ZWJvYXJkIHNldERhdGE6UlRGRGF0YSBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV07Ci0gICAg
fQotICAgIAotICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7Ci0gICAgICAg
IC8vIE1hcCAmbmJzcDsgdG8gYSBwbGFpbiBvbGQgc3BhY2UgYmVjYXVzZSB0aGlzIGlzIGJldHRl
ciBmb3Igc291cmNlIGNvZGUsIG90aGVyIGJyb3dzZXJzIGRvIGl0LAotICAgICAgICAvLyBhbmQg
YmVjYXVzZSBIVE1MIGZvcmNlcyB5b3UgdG8gZG8gdGhpcyBhbnkgdGltZSB5b3Ugd2FudCB0d28g
c3BhY2VzIGluIGEgcm93LgotICAgICAgICBOU011dGFibGVTdHJpbmcgKnMgPSBbW3NlbGYgc2Vs
ZWN0ZWRTdHJpbmddIG11dGFibGVDb3B5XTsKLSAgICAgICAgY29uc3QgdW5pY2hhciBOb25CcmVh
a2luZ1NwYWNlQ2hhcmFjdGVyID0gMHhBMDsKLSAgICAgICAgTlNTdHJpbmcgKk5vbkJyZWFraW5n
U3BhY2VTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6Jk5vbkJyZWFraW5n
U3BhY2VDaGFyYWN0ZXIgbGVuZ3RoOjFdOwotICAgICAgICBbcyByZXBsYWNlT2NjdXJyZW5jZXNP
ZlN0cmluZzpOb25CcmVha2luZ1NwYWNlU3RyaW5nIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOjAg
cmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3MgbGVuZ3RoXSldOwotICAgICAgICBbcGFzdGVib2FyZCBz
ZXRTdHJpbmc6cyBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07Ci0gICAgICAgIFtzIHJlbGVh
c2VdOwotICAgIH0KLSAgICAKLSAgICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSAm
JiBbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdKSB7Ci0gICAg
ICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6bmlsIGZvclR5cGU6V2ViU21hcnRQYXN0ZVBib2FyZFR5
cGVdOwotICAgIH0KLX0KLQotLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKill
dmVudAotewotICAgIEFTU0VSVCghZXZlbnQgfHwgW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNl
RG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNSaWdodE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0g
PT0gTlNPdGhlck1vdXNlRG93bik7Ci0KLSAgICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNl
RG93bkV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbZXZlbnQgcmV0YWluXTsKLSAgICBb
X3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50IHJlbGVhc2VdOwotICAgIF9wcml2YXRlLT5tb3VzZURv
d25FdmVudCA9IGV2ZW50OwotfQotCi0tICh2b2lkKV9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0
aXZlU3RhdGVUaW1lcgotewotICAgIGlmIChfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlVGltZXIpIHsKLSAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2YXRl
LT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcik7Ci0gICAgICAgIENGUmVsZWFzZShf
cHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOwotICAgICAgICBfcHJp
dmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIgPSBOVUxMOwotICAgIH0KLX0K
LQotLSAodm9pZClfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXIKLXsKLSAgICBpZiAoX3ByaXZh
dGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyKSB7Ci0gICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxp
ZGF0ZShfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpOwotICAgICAgICBDRlJlbGVhc2Uo
X3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyKTsKLSAgICAgICAgX3ByaXZhdGUtPnVwZGF0
ZU1vdXNlb3ZlclRpbWVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLS0gKFdlYkhUTUxWaWV3ICopX3Rv
cEhUTUxWaWV3Ci17Ci0gICAgLy8gRklYTUU6IHRoaXMgY2FuIGZhaWwgaWYgdGhlIGRhdGFTb3Vy
Y2UgaXMgbmlsLCB3aGljaCBoYXBwZW5zIHdoZW4gdGhlIFdlYlZpZXcgaXMgdGVhcmluZyBkb3du
IGZyb20gdGhlIHdpbmRvdyBjbG9zaW5nLgotICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhU
TUxWaWV3ICopW1tbW19wcml2YXRlLT5kYXRhU291cmNlIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZy
YW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgQVNTRVJUKFt2
aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOwotICAgIHJldHVybiB2aWV3
OwotfQotCi0tIChCT09MKV9pc1RvcEhUTUxWaWV3Ci17Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hv
dWxkIGJlIGEgY2FjaGVkIGJvb2xlYW4gdGhhdCBkb2Vzbid0IHJlbHkgb24gX3RvcEhUTUxWaWV3
IHNpbmNlIHRoYXQgY2FuIGZhaWwgKHNlZSBfdG9wSFRNTFZpZXcpLgotICAgIHJldHVybiBzZWxm
ID09IFtzZWxmIF90b3BIVE1MVmlld107Ci19Ci0KLS0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01v
ZGVSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lk
dGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0jaWZu
ZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwotI2Vu
ZGlmCi0KLSAgICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotCi0gICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50
V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKLQotICAgIHVuc2ln
bmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1M
Vmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6
MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0gICAgW2Rl
c2NlbmRhbnRXZWJIVE1MVmlld3MgcmVsZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3By
aXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKV93
ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6
Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3
U2l6ZTpOT107Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vi
dmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2Vi
SFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBf
d2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmll
d3NdOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3Vu
dF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtb
ZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpOTyBt
aW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXpl
Ok5PXTsKLQotICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOwotCi0jaWZuZGVm
IE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87Ci0jZW5kaWYK
LX0KLQotLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdT
aXplCi17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYg
bWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllFU107Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQot
ICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1M
Vmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBv
YmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1h
eGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpZRVNdOwotCi0gICAgW2Rlc2NlbmRh
bnRXZWJIVE1MVmlld3MgcmVsZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUt
PmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsKLSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViUHJpdmF0ZSkKLQotKyAoTlNBcnJheSAqKXN1cHBvcnRl
ZE1JTUVUeXBlcwotewotICAgIHJldHVybiBbV2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRl
ZE1JTUVUeXBlc107Ci19Ci0KLSsgKE5TQXJyYXkgKilzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlcwot
ewotICAgIHJldHVybiBbV2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZEltYWdlTUlNRVR5
cGVzXTsKLX0KLQotKyAoTlNBcnJheSAqKXN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzCi17Ci0g
ICAgcmV0dXJuIFtXZWJIVE1MUmVwcmVzZW50YXRpb24gc3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlw
ZXNdOwotfQotCi0rIChOU0FycmF5ICopdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzCi17Ci0gICAg
cmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgIEAidGV4dC9jYWxlbmRh
ciIsICAgICAgIC8vIGlDYWwKLSAgICAgICAgQCJ0ZXh0L3gtY2FsZW5kYXIiLAotICAgICAgICBA
InRleHQveC12Y2FsZW5kYXIiLAotICAgICAgICBAInRleHQvdmNhbGVuZGFyIiwKLSAgICAgICAg
QCJ0ZXh0L3ZjYXJkIiwgICAgICAgICAgLy8gdkNhcmQKLSAgICAgICAgQCJ0ZXh0L3gtdmNhcmQi
LAotICAgICAgICBAInRleHQvZGlyZWN0b3J5IiwKLSAgICAgICAgQCJ0ZXh0L2xkaWYiLCAgICAg
ICAgICAgLy8gTmV0c2NhcGUgQWRkcmVzcyBCb29rCi0gICAgICAgIEAidGV4dC9xaWYiLCAgICAg
ICAgICAgIC8vIFF1aWNrZW4KLSAgICAgICAgQCJ0ZXh0L3gtcWlmIiwKLSAgICAgICAgQCJ0ZXh0
L3gtY3N2IiwgICAgICAgICAgLy8gQ1NWIChmb3IgQWRkcmVzcyBCb29rIGFuZCBNaWNyb3NvZnQg
T3V0bG9vaykKLSAgICAgICAgQCJ0ZXh0L3gtdmNmIiwgICAgICAgICAgLy8gdkNhcmQgdHlwZSB1
c2VkIGluIFN1biBhZmZpbml0eSBhcHAKLSAgICAgICAgQCJ0ZXh0L3J0ZiIsICAgICAgICAgICAg
Ly8gUmljaCBUZXh0IEZvcm1hdAotICAgICAgICBuaWxdOwotfQotCi0rICh2b2lkKV9wb3N0Rmxh
Z3NDaGFuZ2VkRXZlbnQ6KE5TRXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudAotewotICAgIC8vIFRo
aXMgaXMgYSB3b3JrYXJvdW5kIGZvcjogPHJkYXI6Ly9wcm9ibGVtLzI5ODE2MTk+IE5TUmVzcG9u
ZGVyX1ByaXZhdGUgc2hvdWxkIGluY2x1ZGUgbm90aWZpY2F0aW9uIGZvciBGbGFnc0NoYW5nZWQK
LSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNN
b3VzZU1vdmVkCi0gICAgICAgIGxvY2F0aW9uOltbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93XSBj
b252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQotICAgICAgICBtb2Rp
ZmllckZsYWdzOltmbGFnc0NoYW5nZWRFdmVudCBtb2RpZmllckZsYWdzXQotICAgICAgICB0aW1l
c3RhbXA6W2ZsYWdzQ2hhbmdlZEV2ZW50IHRpbWVzdGFtcF0KLSAgICAgICAgd2luZG93TnVtYmVy
OltmbGFnc0NoYW5nZWRFdmVudCB3aW5kb3dOdW1iZXJdCi0gICAgICAgIGNvbnRleHQ6W2ZsYWdz
Q2hhbmdlZEV2ZW50IGNvbnRleHRdCi0gICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDow
IHByZXNzdXJlOjBdOwotCi0gICAgLy8gUHJldGVuZCBpdCdzIGEgbW91c2UgbW92ZS4KLSAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCi0gICAgICAgIHBvc3ROb3RpZmlj
YXRpb25OYW1lOldLTW91c2VNb3ZlZE5vdGlmaWNhdGlvbigpIG9iamVjdDpzZWxmCi0gICAgICAg
IHVzZXJJbmZvOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6ZmFrZUV2ZW50IGZv
cktleTpAIk5TRXZlbnQiXV07Ci19Ci0KLS0gKGlkKV9icmlkZ2UKLXsKLSAgICAvLyBUaGlzIG1l
dGhvZCBleGlzdHMgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIExlb3BhcmQncyBEaWN0
aW9uYXJ5LmFwcCwgc2luY2UgaXQKLSAgICAvLyBjYWxscyBfYnJpZGdlIHRvIGdldCBhY2Nlc3Mg
dG8gY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOiBhbmQgY29udmVydERPTVJhbmdlVG9OU1Jhbmdl
Oi4KLSAgICAvLyBSZXR1cm4gdGhlIFdlYkZyYW1lLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBjb21w
YXRpYmlsaXR5IG1ldGhvZHMuIDxyZGFyOi8vcHJvYmxlbS82MDAyMTYwPgotICAgIHJldHVybiBb
c2VsZiBfZnJhbWVdOwotfQotCi0tICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50
Ci17Ci0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKLSAgICAKLSAgICBO
U0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1v
dmVkCi0gICAgICAgIGxvY2F0aW9uOltbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6
W05TRXZlbnQgbW91c2VMb2NhdGlvbl1dCi0gICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBj
dXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdCi0gICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRp
bWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KLSAgICAgICAgd2luZG93TnVtYmVyOltbc2Vs
ZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KLSAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRF
dmVudF0gY29udGV4dF0KLSAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1
cmU6MF07Ci0gICAgCi0gICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpmYWtlRXZl
bnRdOwotfQotCi1zdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjayhDRlJ1
bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCAqaW5mbykKLXsKLSAgICBXZWJIVE1MVmlldyAqdmll
dyA9IChXZWJIVE1MVmlldyAqKWluZm87Ci0gICAgCi0gICAgW3ZpZXcgX3VwZGF0ZU1vdXNlb3Zl
cldpdGhGYWtlRXZlbnRdOwotfQotCi0tICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAotewot
ICAgIE5TUG9pbnQgb3JpZ2luID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmlnaW47Ci0g
ICAgaWYgKCFOU0VxdWFsUG9pbnRzKF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24sIG9yaWdp
bikpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
KQotICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZFNjcm9sbEV2ZW50
KCk7Ci0gICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdl
Ok5PIG1vdmVMZWZ0Ok5PXTsKLSAgICAgICAgCi0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBb
c2VsZiBfd2ViVmlld107Ci0gICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzp3ZWJWaWV3IGRpZFNjcm9sbERvY3VtZW50SW5GcmFtZVZpZXc6W3NlbGYgX2ZyYW1l
Vmlld11dOwotICAgIH0KLSAgICBfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gb3JpZ2lu
OwotCi0gICAgaWYgKFtzZWxmIHdpbmRvd10gJiYgIV9wcml2YXRlLT5jbG9zZWQgJiYgIV9wcml2
YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcikgewotICAgICAgICBDRlJ1bkxvb3BUaW1lckNvbnRl
eHQgY29udGV4dCA9IHsgMCwgc2VsZiwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICAgICAgICAKLSAg
ICAgICAgLy8gVXNlIGEgMTAwbXMgZGVsYXkgc28gdGhhdCB0aGUgc3ludGhldGljIG1vdXNlIG92
ZXIgdXBkYXRlIGRvZXNuJ3QgY2F1c2UgY3Vyc29yIHRocmFzaGluZyB3aGVuIHBhZ2VzIGFyZSBs
b2FkaW5nCi0gICAgICAgIC8vIGFuZCBzY3JvbGxpbmcgcmFwaWRseSBiYWNrIHRvIGJhY2suCi0g
ICAgICAgIF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lciA9IENGUnVuTG9vcFRpbWVyQ3Jl
YXRlKE5VTEwsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgMC4xLCAwLCAwLCAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjaywgJmNvbnRleHQpOwotICAgICAgICBDRlJ1
bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT51cGRhdGVNb3Vz
ZW92ZXJUaW1lciwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQp
X3NldEFzaWRlU3Vidmlld3MKLXsKLSAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFz
aWRlKTsKLSAgICBBU1NFUlQoX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPT0gbmlsKTsKLSAgICBf
cHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3cyA9IF9zdWJ2aWV3czsKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRoZSBsYXllci1ob3N0aW5nIHZp
ZXcgaW4gdGhlIHN1YnZpZXdzLCBvdGhlcndpc2UgdGhlIGxheWVycyBmbGFzaC4KLSAgICBpZiAo
X3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKLSAgICAgICAgTlNBcnJheSogbmV3U3Vidmll
d3MgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpfcHJpdmF0ZS0+bGF5ZXJIb3N0
aW5nVmlldywgbmlsXTsKLSAgICAgICAgX3N1YnZpZXdzID0gbmV3U3Vidmlld3M7Ci0gICAgfSBl
bHNlCi0gICAgICAgIF9zdWJ2aWV3cyA9IG5pbDsKLSNlbHNlCi0gICAgX3N1YnZpZXdzID0gbmls
OwotI2VuZGlmICAgIAotICAgIF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlID0gWUVTOwotIH0K
LSAKLSAtICh2b2lkKV9yZXN0b3JlU3Vidmlld3MKLSB7Ci0gICAgQVNTRVJUKF9wcml2YXRlLT5z
dWJ2aWV3c1NldEFzaWRlKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
aWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7Ci0gICAgICAgIFtfc3Vidmlld3MgcmVs
ZWFzZV07Ci0gICAgICAgIF9zdWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChfc3Vidmlld3MgPT0gbmlsKTsKLSAgICAgICAgX3N1
YnZpZXdzID0gX3ByaXZhdGUtPnNhdmVkU3Vidmlld3M7Ci0gICAgfQotI2Vsc2UKLSAgICBBU1NF
UlQoX3N1YnZpZXdzID09IG5pbCk7Ci0gICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNhdmVkU3Vi
dmlld3M7Ci0jZW5kaWYgICAgCi0gICAgX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPSBuaWw7Ci0g
ICAgX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUgPSBOTzsKLX0KLQotI2lmbmRlZiBOREVCVUcK
LQotLSAodm9pZClkaWRBZGRTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Ci17Ci0gICAgaWYgKF9w
cml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzKQotICAgICAgICBMT0coVmlldywgIkEgdmlldyBv
ZiBjbGFzcyAlcyB3YXMgYWRkZWQgZHVyaW5nIHN1YnZpZXcgZW51bWVyYXRpb24gZm9yIGxheW91
dCBvciBwcmludGluZyBtb2RlIGNoYW5nZS4gVGhpcyB2aWV3IG1pZ2h0IHBhaW50IHdpdGhvdXQg
Zmlyc3QgcmVjZWl2aW5nIGxheW91dC4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNs
YXNzXSkpOwotfQotCi0tICh2b2lkKXdpbGxSZW1vdmVTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3
Ci17Ci0gICAgLy8gSGF2ZSB0byBudWxsLWNoZWNrIF9wcml2YXRlLCBzaW5jZSB0aGlzIGNhbiBi
ZSBjYWxsZWQgdmlhIC1kZWFsbG9jIHdoZW4KLSAgICAvLyBjbGVhbmluZyB1cCB0aGUgdGhlIGxh
eWVySG9zdGluZ1ZpZXcuCi0gICAgaWYgKF9wcml2YXRlICYmIF9wcml2YXRlLT5lbnVtZXJhdGlu
Z1N1YnZpZXdzKQotICAgICAgICBMT0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAlcyB3YXMgcmVt
b3ZlZCBkdXJpbmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1v
ZGUgY2hhbmdlLiBXZSB3aWxsIHN0aWxsIGRvIGxheW91dCBvciB0aGUgcHJpbnRpbmcgbW9kZSBj
aGFuZ2UgZXZlbiB0aG91Z2ggdGhpcyB2aWV3IGlzIG5vIGxvbmdlciBpbiB0aGUgdmlldyBoaWVy
YXJjaHkuIiwgb2JqZWN0X2dldENsYXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKLX0KLQotI2Vu
ZGlmCi0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0vLyBUaGlzIGlzIGNhbGxlZCB3aGVu
IHdlIGFyZSBhYm91dCB0byBkcmF3LCBidXQgYmVmb3JlIG91ciBkaXJ0eSByZWN0IGlzIHByb3Bh
Z2F0ZWQgdG8gb3VyIGFuY2VzdG9ycy4KLS8vIFRoYXQncyB0aGUgcGVyZmVjdCB0aW1lIHRvIGRv
IGEgbGF5b3V0LCBleGNlcHQgdGhhdCBpZGVhbGx5IHdlJ2Qgd2FudCB0byBiZSBzdXJlIHRoYXQg
d2UncmUgZGlydHkKLS8vIGJlZm9yZSBkb2luZyBpdC4gQXMgYSBjb21wcm9taXNlLCB3aGVuIHdl
J3JlIG9wYXF1ZSB3ZSBkbyB0aGUgbGF5b3V0IG9ubHkgd2hlbiBhY3R1YWxseSBhc2tlZCB0bwot
Ly8gZHJhdywgYnV0IHdoZW4gd2UncmUgdHJhbnNwYXJlbnQgd2UgZG8gdGhlIGxheW91dCBhdCB0
aGlzIHN0YWdlIHNvIHZpZXdzIGJlaGluZCB1cyBrbm93IHRoYXQgdGhleQotLy8gbmVlZCB0byBi
ZSByZWRyYXduIChpbiBjYXNlIHRoZSBsYXlvdXQgY2F1c2VzIHNvbWUgdGhpbmdzIHRvIGdldCBk
aXJ0aWVkKS4KLS0gKHZvaWQpX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9ycwot
ewotICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdKQotICAgICAgICBb
c2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKLSAgICBbc3VwZXIgX3Byb3BhZ2F0
ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9yc107Ci19Ci0KLSNlbHNlCi0KLS0gKHZvaWQpdmll
d1dpbGxEcmF3Ci17Ci0gICAgLy8gT24gd2luZG93IGNsb3NlIHdlIHdpbGwgYmUgY2FsbGVkIHdo
ZW4gdGhlIGRhdGFzb3VyY2UgaXMgbmlsLCB0aGVuIGhpdCBhbiBhc3NlcnQgaW4gX3RvcEhUTUxW
aWV3Ci0gICAgLy8gU28gY2hlY2sgaWYgdGhlIGRhdGFTb3VyY2UgaXMgbmlsIGJlZm9yZSBjYWxs
aW5nIFtzZWxmIF9pc1RvcEhUTUxWaWV3XSwgdGhpcyBjYW4gYmUgcmVtb3ZlZAotICAgIC8vIG9u
Y2UgdGhlIEZJWE1FIGluIF9pc1RvcEhUTUxWaWV3IGlzIGZpeGVkLgotICAgIGlmIChfcHJpdmF0
ZS0+ZGF0YVNvdXJjZSAmJiBbc2VsZiBfaXNUb3BIVE1MVmlld10pCi0gICAgICAgIFtzZWxmIF93
ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotICAgIFtzdXBlciB2aWV3V2lsbERyYXddOwot
fQotCi0jZW5kaWYKLQotLy8gRG9uJ3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdl
IHRha2UgY2FyZSBvZiB0aGF0LgotLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRl
ZElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2li
bGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9w
VmlldzooQk9PTCl0b3BWaWV3Ci17Ci0gICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50IGFz
IHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4KLSAgICAvLyBJZiB0aGUgV2ViSFRNTFZp
ZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZlciBoYXZl
IHRvIGRvIHRoaXMuCi0gICAgQk9PTCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmlu
dGluZzsKLSAgICBCT09MIGlzUHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0RHJhd2luZ1RvU2NyZWVuXTsKLSAgICBpZiAoaXNQcmludGluZykgewotICAgICAgICBp
ZiAoIXdhc0luUHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGlu
Z01vZGVSZWN1cnNpdmVdOwotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKLSNlbmRp
ZgotICAgIH0gZWxzZSBpZiAod2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgIFtzZWxmIF93ZWJf
Y2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwotCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIK
LQotICAgIC8vIEJlY2F1c2UgVGlnZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVl
ZCB0byBkbyBsYXlvdXQgaGVyZS4KLSAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJz
aXZlXTsKLSAgICBbX3N1YnZpZXdzIG1ha2VPYmplY3RzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rv
cihfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3JzKV07Ci0KLSNlbmRpZgotCi0g
ICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3NdOwotICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxh
eVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTpyZWN0IGlzVmlzaWJsZVJlY3Q6aXNWaXNpYmxl
UmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6dmlzaWJsZVZpZXcgdG9wVmlldzp0b3BWaWV3
XTsKLSAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsKLQotICAgIGlmICh3YXNJblByaW50aW5n
TW9kZSAhPSBpc1ByaW50aW5nKSB7Ci0gICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSkKLSAg
ICAgICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07
Ci0gICAgfQotfQotCi0vLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2Ug
dGFrZSBjYXJlIG9mIHRoYXQuCi0tICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRo
TG9ja0ZvY3VzOihCT09MKW5lZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6KE5TUmVjdCl2aXNSZWN0Ci17
Ci0gICAgQk9PTCBuZWVkVG9TZXRBc2lkZVN1YnZpZXdzID0gIV9wcml2YXRlLT5zdWJ2aWV3c1Nl
dEFzaWRlOwotCi0gICAgQk9PTCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGlu
ZzsKLSAgICBCT09MIGlzUHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0RHJhd2luZ1RvU2NyZWVuXTsKLQotICAgIGlmIChuZWVkVG9TZXRBc2lkZVN1YnZpZXdzKSB7
Ci0gICAgICAgIC8vIFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2Vy
IHByaW50IHByb2Nlc3MuCi0gICAgICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMg
d2hhdCB3ZSdyZSBwcmludGluZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4K
LSAgICAgICAgaWYgKGlzUHJpbnRpbmcpIHsKLSAgICAgICAgICAgIGlmICghd2FzSW5QcmludGlu
Z01vZGUpCi0gICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNp
dmVdOwotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotI2VuZGlmCi0g
ICAgICAgIH0gZWxzZSBpZiAod2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgICAgICBbc2VsZiBf
d2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJ
R0VSCi0KLSAgICAgICAgLy8gQmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZpZXdXaWxsRHJh
dyB3ZSBuZWVkIHRvIGRvIGxheW91dCBoZXJlLgotICAgICAgICBOU1JlY3QgYm91bmRzQmVmb3Jl
TGF5b3V0ID0gW3NlbGYgYm91bmRzXTsKLSAgICAgICAgaWYgKCFOU0lzRW1wdHlSZWN0KHZpc1Jl
Y3QpKQotICAgICAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0K
LSAgICAgICAgLy8gSWYgbGF5b3V0IGNoYW5nZXMgdGhlIHZpZXcncyBib3VuZHMsIHRoZW4gd2Ug
bmVlZCB0byByZWNvbXB1dGUgdGhlIHZpc1JlY3QuCi0gICAgICAgIC8vIFRoYXQncyBiZWNhdXNl
IHRoZSB2aXNSZWN0IHBhc3NlZCB0byB1cyB3YXMgYmFzZWQgb24gdGhlIGJvdW5kcyBhdCB0aGUg
dGltZQotICAgICAgICAvLyB3ZSB3ZXJlIGNhbGxlZC4gVGhpcyBtZXRob2QgaXMgb25seSBkaXNw
bGF5ZWQgdG8gZHJhdyAiYWxsIiwgc28gaXQncyBzYWZlCi0gICAgICAgIC8vIHRvIGp1c3QgY2Fs
bCB2aXNpYmxlUmVjdCB0byBjb21wdXRlIHRoZSBlbnRpcmUgcmVjdGFuZ2xlLgotICAgICAgICBp
ZiAoIU5TRXF1YWxSZWN0cyhib3VuZHNCZWZvcmVMYXlvdXQsIFtzZWxmIGJvdW5kc10pKQotICAg
ICAgICAgICAgdmlzUmVjdCA9IFtzZWxmIHZpc2libGVSZWN0XTsKLQotI2VuZGlmCi0KLSAgICAg
ICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3NdOwotICAgIH0KLQotICAgIFtzdXBlciBfcmVjdXJz
aXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czpuZWVkc0xvY2tGb2N1cyB2aXNSZWN0OnZp
c1JlY3RdOwotCi0gICAgaWYgKG5lZWRUb1NldEFzaWRlU3Vidmlld3MpIHsKLSAgICAgICAgaWYg
KHdhc0luUHJpbnRpbmdNb2RlICE9IGlzUHJpbnRpbmcpIHsKLSAgICAgICAgICAgIGlmICh3YXNJ
blByaW50aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9k
ZVJlY3Vyc2l2ZV07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgW3NlbGYgX3dl
Yl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0gICAgICAgIH0KLQotICAgICAgICBbc2Vs
ZiBfcmVzdG9yZVN1YnZpZXdzXTsKLSAgICB9Ci19Ci0KLS8vIERvbid0IGxldCBBcHBLaXQgZXZl
biBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KLS0gKHZvaWQpX3JlY3Vyc2l2
ZTooQk9PTClyZWN1cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxh
eVJlY3QgaW5Db250ZXh0OihOU0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQgdG9wVmlldzooQk9P
TCl0b3BWaWV3Ci17Ci0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIgCi0gICAgLy8gQmVjYXVzZSBU
aWdlciBkb2VzIG5vdCBoYXZlIHZpZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxheW91dCBoZXJl
LgotICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotI2VuZGlmCi0KLSAg
ICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107Ci0gICAgW3N1cGVyIF9yZWN1cnNpdmU6cmVjdXJz
ZSBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpkaXNwbGF5UmVjdCBpbkNvbnRleHQ6Y29udGV4
dCB0b3BWaWV3OnRvcFZpZXddOwotICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOwotfQotCi0t
IChCT09MKV9pbnNpZGVBbm90aGVySFRNTFZpZXcKLXsKLSAgICByZXR1cm4gc2VsZiAhPSBbc2Vs
ZiBfdG9wSFRNTFZpZXddOwotfQotCi0tIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50
Ci17Ci0gICAgLy8gV2ViSFRNTFZpZXcgb2JqZWN0cyBoYW5kbGUgYWxsIGV2ZW50cyBmb3Igb2Jq
ZWN0cyBpbnNpZGUgdGhlbS4KLSAgICAvLyBUbyBnZXQgdGhvc2UgZXZlbnRzLCB3ZSBwcmV2ZW50
IGhpdCB0ZXN0aW5nIGZyb20gQXBwS2l0LgotCi0gICAgLy8gQnV0IHRoZXJlIGFyZSB0aHJlZSBl
eGNlcHRpb25zIHRvIHRoaXM6Ci0gICAgLy8gICAxKSBGb3IgcmlnaHQgbW91c2UgY2xpY2tzIGFu
ZCBjb250cm9sIGNsaWNrcyB3ZSBkb24ndCB5ZXQgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbgotICAg
IC8vICAgICAgdGhhdCB3b3JrcyBmb3IgbmVzdGVkIHZpZXdzLCBzbyB3ZSBsZXQgdGhlIGhpdCB0
ZXN0aW5nIGdvIHRocm91Z2ggdGhlCi0gICAgLy8gICAgICBzdGFuZGFyZCBOU1ZpZXcgY29kZSBw
YXRoIChuZWVkcyB0byBiZSBmaXhlZCwgc2VlIGJ1ZyA0MzYxNjE4KS4KLSAgICAvLyAgIDIpIEph
dmEgZGVwZW5kcyBvbiBkb2luZyBhIGhpdCB0ZXN0IGluc2lkZSBpdCdzIG1vdXNlIG1vdmVkIGhh
bmRsaW5nLAotICAgIC8vICAgICAgc28gd2UgbGV0IHRoZSBoaXQgdGVzdGluZyBnbyB0aHJvdWdo
IHRoZSBzdGFuZGFyZCBOU1ZpZXcgY29kZSBwYXRoCi0gICAgLy8gICAgICB3aGVuIHRoZSBjdXJy
ZW50IGV2ZW50IGlzIGEgbW91c2UgbW92ZSAoZXhjZXB0IHdoZW4gd2UgYXJlIGNhbGxpbmcKLSAg
ICAvLyAgICAgIGZyb20gX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudCwgc28gd2UgaGF2ZSB0byB1
c2UgYSBnbG9iYWwsCi0gICAgLy8gICAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCwgZm9yIHRo
YXQpCi0gICAgLy8gICAzKSBUaGUgYWNjZXB0c0ZpcnN0TW91c2U6IGFuZCBzaG91bGREZWxheVdp
bmRvd09yZGVyaW5nRm9yRXZlbnQ6IG1ldGhvZHMKLSAgICAvLyAgICAgIGJvdGggbmVlZCB0byBm
aWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gY2hlY2sgd2l0aCBpbnNpZGUgdGhlIFdlYkhUTUxWaWV3
LgotICAgIC8vICAgICAgVGhleSB1c2UgYSBnbG9iYWwgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBv
ZiBoaXRUZXN0OiBzbyB0aGV5IGNhbiBnZXQgdGhlCi0gICAgLy8gICAgICByaWdodCB2aWV3LiBU
aGUgZ2xvYmFsIGlzIGZvcmNlTlNWaWV3SGl0VGVzdCBhbmQgdGhlIG1ldGhvZCB0aGV5IHVzZSB0
bwotICAgIC8vICAgICAgZG8gdGhlIGhpdCB0ZXN0aW5nIGlzIF9oaXRWaWV3Rm9yRXZlbnQ6LiAo
QnV0IHRoaXMgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkKLSAgICAvLyAgICAgIHdoZW4gdGhlcmUg
aXMgSFRNTCBvdmVybGFwcGluZyB0aGUgdmlldywgc2VlIGJ1ZyA0MzYxNjI2KQotICAgIC8vICAg
NCkgTlNBY2Nlc3NpYmlsaXR5SGl0VGVzdCByZWxpZXMgb24gdGhpcyBmb3IgY2hlY2tpbmcgdGhl
IGN1cnNvciBwb3NpdGlvbi4KLSAgICAvLyAgICAgIE91ciBjaGVjayBmb3IgdGhhdCBpcyB3aGV0
aGVyIHRoZSBldmVudCBpcyBOU0ZsYWdzQ2hhbmdlZC4gIFRoaXMgd29ya3MKLSAgICAvLyAgICAg
IGZvciBWb2ljZU92ZXIncyBjbnRsLW9wdC1mNSBjb21tYW5kIChtb3ZlIGZvY3VzIHRvIGl0ZW0g
dW5kZXIgY3Vyc29yKQotICAgIC8vICAgICAgYW5kIERpY3Rpb25hcnkncyBjbWQtY250bC1EIChv
cGVuIGRpY3Rpb25hcnkgcG9wdXAgZm9yIGl0ZW0gdW5kZXIgY3Vyc29yKS4KLSAgICAvLyAgICAg
IFRoaXMgaXMgb2YgY291cnNlIGEgaGFjay4KLQotICAgIEJPT0wgY2FwdHVyZUhpdHNPblN1YnZp
ZXdzOwotICAgIGlmIChmb3JjZU5TVmlld0hpdFRlc3QpCi0gICAgICAgIGNhcHR1cmVIaXRzT25T
dWJ2aWV3cyA9IE5POwotICAgIGVsc2UgaWYgKGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0KQotICAg
ICAgICBjYXB0dXJlSGl0c09uU3Vidmlld3MgPSBZRVM7Ci0gICAgZWxzZSB7Ci0gICAgICAgIE5T
RXZlbnQgKmV2ZW50ID0gW1tzZWxmIHdpbmRvd10gY3VycmVudEV2ZW50XTsKLSAgICAgICAgY2Fw
dHVyZUhpdHNPblN1YnZpZXdzID0gIShbZXZlbnQgdHlwZV0gPT0gTlNNb3VzZU1vdmVkCi0gICAg
ICAgICAgICB8fCBbZXZlbnQgdHlwZV0gPT0gTlNSaWdodE1vdXNlRG93bgotICAgICAgICAgICAg
fHwgKFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gJiYgKFtldmVudCBtb2RpZmllckZs
YWdzXSAmIE5TQ29udHJvbEtleU1hc2spICE9IDApCi0gICAgICAgICAgICB8fCBbZXZlbnQgdHlw
ZV0gPT0gTlNGbGFnc0NoYW5nZWQpOwotICAgIH0KLQotICAgIGlmICghY2FwdHVyZUhpdHNPblN1
YnZpZXdzKQotICAgICAgICByZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOwotICAgIGlmIChb
W3NlbGYgc3VwZXJ2aWV3XSBtb3VzZTpwb2ludCBpblJlY3Q6W3NlbGYgZnJhbWVdXSkKLSAgICAg
ICAgcmV0dXJuIHNlbGY7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClfY2xlYXJMYXN0
SGl0Vmlld0lmU2VsZgotewotICAgIGlmIChsYXN0SGl0VmlldyA9PSBzZWxmKQotICAgICAgICBs
YXN0SGl0VmlldyA9IG5pbDsKLX0KLQotLSAoTlNUcmFja2luZ1JlY3RUYWcpYWRkVHJhY2tpbmdS
ZWN0OihOU1JlY3QpcmVjdCBvd25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilkYXRhIGFz
c3VtZUluc2lkZTooQk9PTClhc3N1bWVJbnNpZGUKLXsKLSAgICBBU1NFUlQoX3ByaXZhdGUtPnRy
YWNraW5nUmVjdE93bmVyID09IG5pbCk7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVy
ID0gb3duZXI7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gZGF0YTsKLSAg
ICByZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7Ci19Ci0KLS0gKE5TVHJhY2tpbmdSZWN0VGFnKV9h
ZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9p
ZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZSB1c2VUcmFja2luZ051bToo
aW50KXRhZwotewotICAgIEFTU0VSVCh0YWcgPT0gMCB8fCB0YWcgPT0gVFJBQ0tJTkdfUkVDVF9U
QUcpOwotICAgIEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKLSAg
ICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsKLSAgICBfcHJpdmF0ZS0+dHJh
Y2tpbmdSZWN0VXNlckRhdGEgPSBkYXRhOwotICAgIHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsK
LX0KLQotLSAodm9pZClfYWRkVHJhY2tpbmdSZWN0czooTlNSZWN0ICopcmVjdHMgb3duZXI6KGlk
KW93bmVyIHVzZXJEYXRhTGlzdDoodm9pZCAqKil1c2VyRGF0YUxpc3QgYXNzdW1lSW5zaWRlTGlz
dDooQk9PTCAqKWFzc3VtZUluc2lkZUxpc3QgdHJhY2tpbmdOdW1zOihOU1RyYWNraW5nUmVjdFRh
ZyAqKXRyYWNraW5nTnVtcyBjb3VudDooaW50KWNvdW50Ci17Ci0gICAgQVNTRVJUKGNvdW50ID09
IDEpOwotICAgIEFTU0VSVCh0cmFja2luZ051bXNbMF0gPT0gMCB8fCB0cmFja2luZ051bXNbMF0g
PT0gVFJBQ0tJTkdfUkVDVF9UQUcpOwotICAgIEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0
T3duZXIgPT0gbmlsKTsKLSAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsK
LSAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGEgPSB1c2VyRGF0YUxpc3RbMF07Ci0g
ICAgdHJhY2tpbmdOdW1zWzBdID0gVFJBQ0tJTkdfUkVDVF9UQUc7Ci19Ci0KLS0gKHZvaWQpcmVt
b3ZlVHJhY2tpbmdSZWN0OihOU1RyYWNraW5nUmVjdFRhZyl0YWcKLXsKLSAgICBpZiAodGFnID09
IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX3ByaXZhdGUgJiYgKHRhZyA9PSBU
UkFDS0lOR19SRUNUX1RBRykpIHsKLSAgICAgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVy
ID0gbmlsOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChfcHJpdmF0ZSAm
JiAodGFnID09IF9wcml2YXRlLT5sYXN0VG9vbFRpcFRhZykpIHsKLSAgICAgICAgW3N1cGVyIHJl
bW92ZVRyYWNraW5nUmVjdDp0YWddOwotICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcg
PSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIElmIGFueSBvdGhlciB0
cmFja2luZyByZWN0IGlzIGJlaW5nIHJlbW92ZWQsIHdlIGRvbid0IGtub3cgaG93IGl0IHdhcyBj
cmVhdGVkCi0gICAgLy8gYW5kIGl0J3MgcG9zc2libGUgdGhlcmUncyBhIGxlYWsgaW52b2x2ZWQg
KHNlZSAzNTAwMjE3KQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi0tICh2b2lkKV9y
ZW1vdmVUcmFja2luZ1JlY3RzOihOU1RyYWNraW5nUmVjdFRhZyAqKXRhZ3MgY291bnQ6KGludClj
b3VudAotewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgIGludCB0YWcgPSB0YWdzW2ldOwotICAgICAgICBpZiAodGFnID09IDApCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgQVNTRVJUKHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRyk7
Ci0gICAgICAgIGlmIChfcHJpdmF0ZSAhPSBuaWwpIHsKLSAgICAgICAgICAgIF9wcml2YXRlLT50
cmFja2luZ1JlY3RPd25lciA9IG5pbDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLSAodm9pZClf
c2VuZFRvb2xUaXBNb3VzZUV4aXRlZAotewotICAgIC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQg
d2luZG93LCB0cmFja2luZ051bWJlciwgYW5kIHVzZXJEYXRhLgotICAgIE5TRXZlbnQgKmZha2VF
dmVudCA9IFtOU0V2ZW50IGVudGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUV4aXRlZAotICAg
ICAgICBsb2NhdGlvbjpOU01ha2VQb2ludCgwLCAwKQotICAgICAgICBtb2RpZmllckZsYWdzOjAK
LSAgICAgICAgdGltZXN0YW1wOjAKLSAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3dd
IHdpbmRvd051bWJlcl0KLSAgICAgICAgY29udGV4dDpOVUxMCi0gICAgICAgIGV2ZW50TnVtYmVy
OjAKLSAgICAgICAgdHJhY2tpbmdOdW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKLSAgICAgICAgdXNl
ckRhdGE6X3ByaXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhXTsKLSAgICBbX3ByaXZhdGUtPnRy
YWNraW5nUmVjdE93bmVyIG1vdXNlRXhpdGVkOmZha2VFdmVudF07Ci19Ci0KLS0gKHZvaWQpX3Nl
bmRUb29sVGlwTW91c2VFbnRlcmVkCi17Ci0gICAgLy8gTm90aGluZyBtYXR0ZXJzIGV4Y2VwdCB3
aW5kb3csIHRyYWNraW5nTnVtYmVyLCBhbmQgdXNlckRhdGEuCi0gICAgTlNFdmVudCAqZmFrZUV2
ZW50ID0gW05TRXZlbnQgZW50ZXJFeGl0RXZlbnRXaXRoVHlwZTpOU01vdXNlRW50ZXJlZAotICAg
ICAgICBsb2NhdGlvbjpOU01ha2VQb2ludCgwLCAwKQotICAgICAgICBtb2RpZmllckZsYWdzOjAK
LSAgICAgICAgdGltZXN0YW1wOjAKLSAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3dd
IHdpbmRvd051bWJlcl0KLSAgICAgICAgY29udGV4dDpOVUxMCi0gICAgICAgIGV2ZW50TnVtYmVy
OjAKLSAgICAgICAgdHJhY2tpbmdOdW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKLSAgICAgICAgdXNl
ckRhdGE6X3ByaXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhXTsKLSAgICBbX3ByaXZhdGUtPnRy
YWNraW5nUmVjdE93bmVyIG1vdXNlRW50ZXJlZDpmYWtlRXZlbnRdOwotfQotCi0tICh2b2lkKV9z
ZXRUb29sVGlwOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIE5TU3RyaW5nICp0b29sVGlwID0g
W3N0cmluZyBsZW5ndGhdID09IDAgPyBuaWwgOiBzdHJpbmc7Ci0gICAgTlNTdHJpbmcgKm9sZFRv
b2xUaXAgPSBfcHJpdmF0ZS0+dG9vbFRpcDsKLSAgICBpZiAoKHRvb2xUaXAgPT0gbmlsIHx8IG9s
ZFRvb2xUaXAgPT0gbmlsKSA/IHRvb2xUaXAgPT0gb2xkVG9vbFRpcCA6IFt0b29sVGlwIGlzRXF1
YWxUb1N0cmluZzpvbGRUb29sVGlwXSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChvbGRUb29sVGlwKSB7Ci0gICAgICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXTsK
LSAgICAgICAgW29sZFRvb2xUaXAgcmVsZWFzZV07Ci0gICAgfQotICAgIF9wcml2YXRlLT50b29s
VGlwID0gW3Rvb2xUaXAgY29weV07Ci0gICAgaWYgKHRvb2xUaXApIHsKLSAgICAgICAgLy8gU2Vl
IHJhZGFyIDM1MDAyMTcgZm9yIHdoeSB3ZSByZW1vdmUgYWxsIHRvb2x0aXBzIHJhdGhlciB0aGFu
IGp1c3QgdGhlIHNpbmdsZSBvbmUgd2UgY3JlYXRlZC4KLSAgICAgICAgW3NlbGYgcmVtb3ZlQWxs
VG9vbFRpcHNdOwotICAgICAgICBOU1JlY3Qgd2lkZU9wZW5SZWN0ID0gTlNNYWtlUmVjdCgtMTAw
MDAwLCAtMTAwMDAwLCAyMDAwMDAsIDIwMDAwMCk7Ci0gICAgICAgIF9wcml2YXRlLT5sYXN0VG9v
bFRpcFRhZyA9IFtzZWxmIGFkZFRvb2xUaXBSZWN0OndpZGVPcGVuUmVjdCBvd25lcjpzZWxmIHVz
ZXJEYXRhOk5VTExdOwotICAgICAgICBbc2VsZiBfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWRdOwot
ICAgIH0KLX0KLQotLSAoTlNTdHJpbmcgKil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRv
b2xUaXA6KE5TVG9vbFRpcFRhZyl0YWcgcG9pbnQ6KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZv
aWQgKilkYXRhCi17Ci0gICAgcmV0dXJuIFtbX3ByaXZhdGUtPnRvb2xUaXAgY29weV0gYXV0b3Jl
bGVhc2VdOwotfQotCi0tICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6KE5TRXZlbnQg
KilldmVudAotewotICAgIGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBOU1ZpZXcgKmNvbnRlbnRWaWV3ID0gW1tldmVudCB3aW5kb3ddIGNvbnRlbnRWaWV3XTsK
LSAgICBOU1BvaW50IGxvY2F0aW9uRm9ySGl0VGVzdCA9IFtbY29udGVudFZpZXcgc3VwZXJ2aWV3
XSBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07Ci0g
ICAgCi0gICAgZm9yY2VXZWJIVE1MVmlld0hpdFRlc3QgPSBZRVM7Ci0gICAgTlNWaWV3ICpoaXRW
aWV3ID0gW2NvbnRlbnRWaWV3IGhpdFRlc3Q6bG9jYXRpb25Gb3JIaXRUZXN0XTsKLSAgICBmb3Jj
ZVdlYkhUTUxWaWV3SGl0VGVzdCA9IE5POwotICAgIAotICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0g
bmlsOwotICAgIGlmIChbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
ICYmICFbWyhXZWJIVE1MVmlldyAqKWhpdFZpZXcgX3dlYlZpZXddIGlzSG92ZXJGZWVkYmFja1N1
c3BlbmRlZF0pCi0gICAgICAgIHZpZXcgPSAoV2ViSFRNTFZpZXcgKiloaXRWaWV3OyAgICAKLQot
ICAgIGlmICh2aWV3KQotICAgICAgICBbdmlldyByZXRhaW5dOwotCi0gICAgaWYgKGxhc3RIaXRW
aWV3ICE9IHZpZXcgJiYgbGFzdEhpdFZpZXcgJiYgW2xhc3RIaXRWaWV3IF9mcmFtZV0pIHsKLSAg
ICAgICAgLy8gSWYgd2UgYXJlIG1vdmluZyBvdXQgb2YgYSB2aWV3IChvciBmcmFtZSksIGxldCdz
IHByZXRlbmQgdGhlIG1vdXNlIG1vdmVkCi0gICAgICAgIC8vIGFsbCB0aGUgd2F5IG91dCBvZiB0
aGF0IHZpZXcuIEJ1dCB3ZSBoYXZlIHRvIGFjY291bnQgZm9yIHNjcm9sbGluZywgYmVjYXVzZQot
ICAgICAgICAvLyBraHRtbCBkb2Vzbid0IHVuZGVyc3RhbmQgb3VyIGNsaXBwaW5nLgotICAgICAg
ICBOU1JlY3QgdmlzaWJsZVJlY3QgPSBbW1tbbGFzdEhpdFZpZXcgX2ZyYW1lXSBmcmFtZVZpZXdd
IF9zY3JvbGxWaWV3XSBkb2N1bWVudFZpc2libGVSZWN0XTsKLSAgICAgICAgZmxvYXQgeVNjcm9s
bCA9IHZpc2libGVSZWN0Lm9yaWdpbi55OwotICAgICAgICBmbG9hdCB4U2Nyb2xsID0gdmlzaWJs
ZVJlY3Qub3JpZ2luLng7Ci0KLSAgICAgICAgZXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0
aFR5cGU6TlNNb3VzZU1vdmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246TlNN
YWtlUG9pbnQoLTEgLSB4U2Nyb2xsLCAtMSAtIHlTY3JvbGwgKQotICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3Nd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFs
U2luY2VSZWZlcmVuY2VEYXRlXQotICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJl
cjpbW3ZpZXcgd2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKLSAgICAgICAg
aWYgKEZyYW1lKiBsYXN0SGl0Q29yZUZyYW1lID0gY29yZShbbGFzdEhpdFZpZXcgX2ZyYW1lXSkp
Ci0gICAgICAgICAgICBsYXN0SGl0Q29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3Zl
ZChldmVudCk7Ci0gICAgfQotCi0gICAgbGFzdEhpdFZpZXcgPSB2aWV3OwotCi0gICAgaWYgKHZp
ZXcpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFt2aWV3IF9mcmFtZV0p
KQotICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVu
dCk7Ci0KLSAgICAgICAgW3ZpZXcgcmVsZWFzZV07Ci0gICAgfQotfQotCi0vLyBrZWVwIGluIHN5
bmMgd2l0aCBXZWJQYXN0ZWJvYXJkSGVscGVyOjppbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzCi0r
IChOU0FycmF5ICopX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXMKLXsKLSAgICBzdGF0aWMgTlNB
cnJheSAqdHlwZXMgPSBuaWw7Ci0gICAgaWYgKCF0eXBlcykgewotICAgICAgICB0eXBlcyA9IFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hU
TUxQYm9hcmRUeXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5T
UERGUGJvYXJkVHlwZSwKLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBOU1BJQ1RQYm9hcmRUeXBlLAotI2Vu
ZGlmCi0gICAgICAgICAgICBOU1VSTFBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRG
UGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBOU0NvbG9yUGJvYXJkVHlwZSwga1VUVHlw
ZVBORywgbmlsXTsKLSAgICAgICAgQ0ZSZXRhaW4odHlwZXMpOwotICAgIH0KLSAgICByZXR1cm4g
dHlwZXM7Ci19Ci0KLSsgKE5TQXJyYXkgKilfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzCi17Ci0g
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBwdXQgZGF0YSBmb3IgTlNIVE1MUGJvYXJkVHlwZSBvbiB0
aGUgcGFzdGVib2FyZCBidXQgTWljcm9zb2Z0IEV4Y2VsIGRvZXNuJ3QgbGlrZSBvdXIgZm9ybWF0
IG9mIEhUTUwgKDM2NDA0MjMpLgotICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Rz
OldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUs
IE5TU3RyaW5nUGJvYXJkVHlwZSwgbmlsXTsKLX0KLQotLSAoTlNJbWFnZSAqKV9kcmFnSW1hZ2VG
b3JVUkw6KE5TU3RyaW5nKil1cmxTdHJpbmcgd2l0aExhYmVsOihOU1N0cmluZyopbGFiZWwKLXsK
LSAgICBCT09MIGRyYXdVUkxTdHJpbmcgPSBZRVM7Ci0gICAgQk9PTCBjbGlwVVJMU3RyaW5nID0g
Tk8sIGNsaXBMYWJlbFN0cmluZyA9IE5POwotICAgIAotICAgIGlmICghbGFiZWwpIHsKLSAgICAg
ICAgZHJhd1VSTFN0cmluZyA9IE5POwotICAgICAgICBsYWJlbCA9IHVybFN0cmluZzsKLSAgICB9
Ci0gICAgCi0gICAgTlNGb250ICpsYWJlbEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9u
dE1hbmFnZXJdIGNvbnZlcnRGb250OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEUkFHX0xJTktf
TEFCRUxfRk9OVF9TSVpFXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b0hhdmVUcmFpdDpOU0JvbGRGb250TWFza107Ci0gICAgTlNG
b250ICp1cmxGb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOiBEUkFHX0xJTktfVVJMX0ZP
TlRfU0laRV07Ci0gICAgTlNTaXplIGxhYmVsU2l6ZTsKLSAgICBsYWJlbFNpemUud2lkdGggPSBb
bGFiZWwgX3dlYl93aWR0aFdpdGhGb250OiBsYWJlbEZvbnRdOwotICAgIGxhYmVsU2l6ZS5oZWln
aHQgPSBbbGFiZWxGb250IGFzY2VuZGVyXSAtIFtsYWJlbEZvbnQgZGVzY2VuZGVyXTsKLSAgICBp
ZiAobGFiZWxTaXplLndpZHRoID4gTUFYX0RSQUdfTEFCRUxfV0lEVEgpewotICAgICAgICBsYWJl
bFNpemUud2lkdGggPSBNQVhfRFJBR19MQUJFTF9XSURUSDsKLSAgICAgICAgY2xpcExhYmVsU3Ry
aW5nID0gWUVTOwotICAgIH0KLSAgICAKLSAgICBOU1NpemUgaW1hZ2VTaXplLCB1cmxTdHJpbmdT
aXplOwotICAgIGltYWdlU2l6ZS53aWR0aCA9IGxhYmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxf
Qk9SREVSX1ggKiAyLjBmOwotICAgIGltYWdlU2l6ZS5oZWlnaHQgPSBsYWJlbFNpemUuaGVpZ2h0
ICsgRFJBR19MQUJFTF9CT1JERVJfWSAqIDIuMGY7Ci0gICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsK
LSAgICAgICAgdXJsU3RyaW5nU2l6ZS53aWR0aCA9IFt1cmxTdHJpbmcgX3dlYl93aWR0aFdpdGhG
b250OiB1cmxGb250XTsKLSAgICAgICAgdXJsU3RyaW5nU2l6ZS5oZWlnaHQgPSBbdXJsRm9udCBh
c2NlbmRlcl0gLSBbdXJsRm9udCBkZXNjZW5kZXJdOwotICAgICAgICBpbWFnZVNpemUuaGVpZ2h0
ICs9IHVybFN0cmluZ1NpemUuaGVpZ2h0OwotICAgICAgICBpZiAodXJsU3RyaW5nU2l6ZS53aWR0
aCA+IE1BWF9EUkFHX0xBQkVMX1dJRFRIKSB7Ci0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGgg
PSBNQVgoTUFYX0RSQUdfTEFCRUxfV0lEVEggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwg
TUlOX0RSQUdfTEFCRUxfV0lEVEhfQkVGT1JFX0NMSVApOwotICAgICAgICAgICAgY2xpcFVSTFN0
cmluZyA9IFlFUzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0
aCA9IE1BWChsYWJlbFNpemUud2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwgdXJs
U3RyaW5nU2l6ZS53aWR0aCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBOU0ltYWdlICpkcmFnSW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0
V2l0aFNpemU6IGltYWdlU2l6ZV0gYXV0b3JlbGVhc2VdOwotICAgIFtkcmFnSW1hZ2UgbG9ja0Zv
Y3VzXTsKLSAgICAKLSAgICBbW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOiAwLjdmIGdyZWVu
OiAwLjdmIGJsdWU6IDAuN2YgYWxwaGE6IDAuOGZdIHNldF07Ci0gICAgCi0gICAgLy8gRHJhZyBh
IHJlY3RhbmdsZSB3aXRoIHJvdW5kZWQgY29ybmVycy8KLSAgICBOU0JlemllclBhdGggKnBhdGgg
PSBbTlNCZXppZXJQYXRoIGJlemllclBhdGhdOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhX
aXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdCgwLjBmLCAwLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAq
IDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZildOwotICAgIFtwYXRoIGFwcGVuZEJlemll
clBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdCgwLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJB
R19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFC
RUxfUkFESVVTICogMi4wZildOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbElu
UmVjdDogTlNNYWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIu
MGYsIGltYWdlU2l6ZS5oZWlnaHQgLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFC
RUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07Ci0gICAgW3BhdGgg
YXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0
aCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgMC4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAy
LjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKLSAgICAKLSAgICBbcGF0aCBhcHBlbmRC
ZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoRFJBR19MQUJFTF9SQURJVVMsIDAuMGYsIGlt
YWdlU2l6ZS53aWR0aCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgaW1hZ2VTaXplLmhlaWdo
dCldOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdCgwLjBm
LCBEUkFHX0xBQkVMX1JBRElVUywgRFJBR19MQUJFTF9SQURJVVMgKyAxMC4wZiwgaW1hZ2VTaXpl
LmhlaWdodCAtIDIuMGYgKiBEUkFHX0xBQkVMX1JBRElVUyldOwotICAgIFtwYXRoIGFwcGVuZEJl
emllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVM
X1JBRElVUyAtIDIwLjBmLCBEUkFHX0xBQkVMX1JBRElVUywgRFJBR19MQUJFTF9SQURJVVMgKyAy
MC4wZiwgaW1hZ2VTaXplLmhlaWdodCAtIDIuMGYgKiBEUkFHX0xBQkVMX1JBRElVUyldOwotICAg
IFtwYXRoIGZpbGxdOwotICAgIAotICAgIE5TQ29sb3IgKnRvcENvbG9yID0gW05TQ29sb3IgY29s
b3JXaXRoRGV2aWNlV2hpdGU6MC4wZiBhbHBoYTowLjc1Zl07Ci0gICAgTlNDb2xvciAqYm90dG9t
Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZToxLjBmIGFscGhhOjAuNWZdOwot
ICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7Ci0gICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQotICAg
ICAgICAgICAgdXJsU3RyaW5nID0gW1dlYlN0cmluZ1RydW5jYXRvciBjZW50ZXJUcnVuY2F0ZVN0
cmluZzogdXJsU3RyaW5nIHRvV2lkdGg6aW1hZ2VTaXplLndpZHRoIC0gKERSQUdfTEFCRUxfQk9S
REVSX1ggKiAyLjBmKSB3aXRoRm9udDp1cmxGb250XTsKLSAgICAgICAgCi0gICAgICAgIFt1cmxT
dHJpbmcgX3dlYl9kcmF3RG91YmxlZEF0UG9pbnQ6TlNNYWtlUG9pbnQoRFJBR19MQUJFTF9CT1JE
RVJfWCwgRFJBR19MQUJFTF9CT1JERVJfWSAtIFt1cmxGb250IGRlc2NlbmRlcl0pIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9y
OmJvdHRvbUNvbG9yIGZvbnQ6dXJsRm9udF07Ci0gICAgfQotICAgIAotICAgIGlmIChjbGlwTGFi
ZWxTdHJpbmcpCi0gICAgICAgIGxhYmVsID0gW1dlYlN0cmluZ1RydW5jYXRvciByaWdodFRydW5j
YXRlU3RyaW5nOiBsYWJlbCB0b1dpZHRoOmltYWdlU2l6ZS53aWR0aCAtIChEUkFHX0xBQkVMX0JP
UkRFUl9YICogMi4wZikgd2l0aEZvbnQ6bGFiZWxGb250XTsKLSAgICBbbGFiZWwgX3dlYl9kcmF3
RG91YmxlZEF0UG9pbnQ6TlNNYWtlUG9pbnQgKERSQUdfTEFCRUxfQk9SREVSX1gsIGltYWdlU2l6
ZS5oZWlnaHQgLSBEUkFHX0xBQkVMX0JPUkRFUl9ZX09GRlNFVCAtIFtsYWJlbEZvbnQgcG9pbnRT
aXplXSkKLSAgICAgICAgICAgICAgICAgICAgICB3aXRoVG9wQ29sb3I6dG9wQ29sb3IgYm90dG9t
Q29sb3I6Ym90dG9tQ29sb3IgZm9udDpsYWJlbEZvbnRdOwotICAgIAotICAgIFtkcmFnSW1hZ2Ug
dW5sb2NrRm9jdXNdOwotICAgIAotICAgIHJldHVybiBkcmFnSW1hZ2U7Ci19Ci0KLS0gKE5TSW1h
Z2UgKilfZHJhZ0ltYWdlRm9yTGlua0VsZW1lbnQ6KE5TRGljdGlvbmFyeSAqKWVsZW1lbnQKLXsK
LSAgICBOU1VSTCAqbGlua1VSTCA9IFtlbGVtZW50IG9iamVjdEZvcktleTogV2ViRWxlbWVudExp
bmtVUkxLZXldOwotICAgIAotICAgIE5TU3RyaW5nICpsYWJlbCA9IFtlbGVtZW50IG9iamVjdEZv
cktleTogV2ViRWxlbWVudExpbmtMYWJlbEtleV07Ci0gICAgTlNTdHJpbmcgKnVybFN0cmluZyA9
IFtsaW5rVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwotICAgIHJldHVybiBbc2VsZiBfZHJh
Z0ltYWdlRm9yVVJMOnVybFN0cmluZyB3aXRoTGFiZWw6bGFiZWxdOwotfQotCi0tICh2b2lkKXBh
c3RlYm9hcmRDaGFuZ2VkT3duZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBb
c2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTowXTsKLX0KLQotLSAodm9pZClwYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNT
dHJpbmcgKil0eXBlCi17Ci0gICAgaWYgKFt0eXBlIGlzRXF1YWw6TlNSVEZEUGJvYXJkVHlwZV0g
JiYgW1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV0pIHsKLSAgICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10g
aW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBl
XV07Ci0gICAgICAgIFtwYXN0ZWJvYXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2
ZTphcmNoaXZlIGNvbnRhaW5zSW1hZ2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVj
dDpOU1RJRkZQYm9hcmRUeXBlXV07Ci0gICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOwotICAgIH0g
ZWxzZSBpZiAoW3R5cGUgaXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBlXSAmJiBbc2VsZiBwcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZV0pIHsKLSAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IFtzZWxm
IHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXS0+aW1hZ2UoKSkKLSAgICAgICAgICAgIFtwYXN0
ZWJvYXJkIHNldERhdGE6KE5TRGF0YSAqKWltYWdlLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKSBm
b3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOwotICAgICAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZTowXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX2hhbmRsZUF1dG9zY3JvbGxG
b3JNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudCAKLXsgCi0gICAgW3NlbGYgYXV0b3Njcm9s
bDpldmVudF07IAotICAgIFtzZWxmIF9zdGFydEF1dG9zY3JvbGxUaW1lcjpldmVudF07IAotfSAK
LQotLSAoV2ViUGx1Z2luQ29udHJvbGxlciAqKV9wbHVnaW5Db250cm9sbGVyCi17Ci0gICAgcmV0
dXJuIF9wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyOwotfQotCi0tICh2b2lkKV9sYXlvdXRGb3JQ
cmludGluZwotewotICAgIC8vIFNldCBwcmludGluZyBtb2RlIHRlbXBvcmFyaWx5IHNvIHdlIGNh
biBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIHZpZXcuIFRoaXMgd2lsbCBhbGxvdwotICAgIC8vIEFw
cEtpdCdzIHBhZ2luYXRpb24gY29kZSB0byB1c2UgdGhlIGNvcnJlY3QgaGVpZ2h0IGZvciB0aGUg
cGFnZSBjb250ZW50LiBMZWF2aW5nIHByaW50aW5nCi0gICAgLy8gbW9kZSBvbiBpbmRlZmluaXRl
bHkgd291bGQgaW50ZXJmZXJlIHdpdGggTWFpbCdzIHByaW50aW5nIG1lY2hhbmlzbSAoYXQgbGVh
c3QpLCBzbyB3ZSBqdXN0Ci0gICAgLy8gdHVybiBpdCBvZmYgYWdhaW4gYWZ0ZXIgYWRqdXN0aW5n
IHRoZSBzaXplLgotICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRq
dXN0Vmlld1NpemVdOwotICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVd
OwotfQotCi0tICh2b2lkKV9zbWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0
cmluZyByZXBsYWNpbmdSYW5nZTooRE9NUmFuZ2UgKilyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJp
bmc6KE5TU3RyaW5nICoqKWJlZm9yZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiopYWZ0
ZXJTdHJpbmcKLXsKLSAgICBpZiAoIXBhc3RlU3RyaW5nIHx8ICFyYW5nZVRvUmVwbGFjZSB8fCAh
W1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdKSB7Ci0gICAgICAgIGlm
IChiZWZvcmVTdHJpbmcpCi0gICAgICAgICAgICAqYmVmb3JlU3RyaW5nID0gbmlsOwotICAgICAg
ICBpZiAoYWZ0ZXJTdHJpbmcpCi0gICAgICAgICAgICAqYWZ0ZXJTdHJpbmcgPSBuaWw7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgW1tzZWxmIF9mcmFtZV0gX3NtYXJ0SW5zZXJ0
Rm9yU3RyaW5nOnBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOnJhbmdlVG9SZXBsYWNlIGJlZm9y
ZVN0cmluZzpiZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6YWZ0ZXJTdHJpbmddOwotfQotCi0tIChC
T09MKV9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZAotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZF0gJiYgW1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3Rl
UGJvYXJkVHlwZV07Ci19Ci0KLS0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOiAoTlNFdmVu
dCAqKXRyaWdnZXJFdmVudAotewotICAgIGlmIChfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID09
IG5pbCkgewotICAgICAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gW1tOU1RpbWVyIHNj
aGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZhbDpBVVRPU0NST0xMX0lOVEVSVkFMCi0gICAgICAg
ICAgICB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2F1dG9zY3JvbGwpIHVzZXJJbmZv
Om5pbCByZXBlYXRzOllFU10gcmV0YWluXTsKLSAgICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxU
cmlnZ2VyRXZlbnQgPSBbdHJpZ2dlckV2ZW50IHJldGFpbl07Ci0gICAgfQotfQotCi0vLyBGSVhN
RTogX3NlbGVjdGlvblJlY3QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzZWxlY3Rpb25SZWN0
LCB3aGljaCBpcyBpbiBwcm90b2NvbCBXZWJEb2N1bWVudFNlbGVjdGlvbi4KLS8vIFdlIGNhbid0
IHJlbW92ZSB0aGlzIHlldCBiZWNhdXNlIGl0J3Mgc3RpbGwgaW4gdXNlIGJ5IE1haWwuCi0tIChO
U1JlY3QpX3NlbGVjdGlvblJlY3QKLXsKLSAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07
Ci19Ci0KLS0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKLXsKLSAgICBOU1RpbWVyICp0aW1l
ciA9IF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXI7Ci0gICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxU
aW1lciA9IG5pbDsKLSAgICBbX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgcmVsZWFz
ZV07Ci0gICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7Ci0gICAgW3Rp
bWVyIGludmFsaWRhdGVdOwotICAgIFt0aW1lciByZWxlYXNlXTsKLX0KLQotLSAodm9pZClfYXV0
b3Njcm9sbAotewotICAgIC8vIEd1YXJhbnRlZSB0aGF0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlz
IGludmFsaWRhdGVkLCBldmVuIGlmIHdlIGRvbid0IHJlY2VpdmUKLSAgICAvLyBhIG1vdXNlIHVw
IGV2ZW50LgotICAgIEJPT0wgaXNTdGlsbERvd24gPSBDR0V2ZW50U291cmNlQnV0dG9uU3RhdGUo
a0NHRXZlbnRTb3VyY2VTdGF0ZUNvbWJpbmVkU2Vzc2lvblN0YXRlLCBrQ0dNb3VzZUJ1dHRvbkxl
ZnQpOyAgIAotICAgIGlmICghaXNTdGlsbERvd24pewotICAgICAgICBbc2VsZiBfc3RvcEF1dG9z
Y3JvbGxUaW1lcl07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU0V2ZW50ICpmYWtl
RXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VEcmFnZ2VkCi0g
ICAgICAgIGxvY2F0aW9uOltbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZl
bnQgbW91c2VMb2NhdGlvbl1dCi0gICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50
RXZlbnRdIG1vZGlmaWVyRmxhZ3NdCi0gICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRl
cnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KLSAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5k
b3ddIHdpbmRvd051bWJlcl0KLSAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0g
Y29udGV4dF0KLSAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07
Ci0gICAgW3NlbGYgbW91c2VEcmFnZ2VkOmZha2VFdmVudF07Ci19Ci0KLS0gKEJPT0wpX2NhbkVk
aXQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBy
ZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLX0KLQot
LSAoQk9PTClfY2FuRWRpdFJpY2hseQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3Io
KS0+Y2FuRWRpdFJpY2hseSgpOwotfQotCi0tIChCT09MKV9jYW5BbHRlckN1cnJlbnRTZWxlY3Rp
b24KLXsKLSAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnRdICYm
IFtzZWxmIF9pc0VkaXRhYmxlXTsKLX0KLQotLSAoQk9PTClfaGFzU2VsZWN0aW9uCi17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7Ci19Ci0KLS0gKEJPT0wp
X2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCktPmlzQ2FyZXRPclJhbmdlKCk7Ci19Ci0KLS0gKEJPT0wpX2hhc0luc2VydGlv
blBvaW50Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0g
ICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0KCk7
Ci19Ci0KLS0gKEJPT0wpX2lzRWRpdGFibGUKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCk7Ci19Ci0KLS0gKEJPT0wpX3RyYW5zcGFyZW50
QmFja2dyb3VuZAotewotICAgIHJldHVybiBfcHJpdmF0ZS0+dHJhbnNwYXJlbnRCYWNrZ3JvdW5k
OwotfQotCi0tICh2b2lkKV9zZXRUcmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wpZgotewotICAg
IF9wcml2YXRlLT50cmFuc3BhcmVudEJhY2tncm91bmQgPSBmOwotfQotCi0tIChOU0ltYWdlICop
X3NlbGVjdGlvbkRyYWdnaW5nSW1hZ2UKLXsKLSAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0p
IHsKLSAgICAgICAgTlNJbWFnZSAqZHJhZ0ltYWdlID0gY29yZShbc2VsZiBfZnJhbWVdKS0+c2Vs
ZWN0aW9uSW1hZ2UoKTsKLSAgICAgICAgW2RyYWdJbWFnZSBfd2ViX2Rpc3NvbHZlVG9GcmFjdGlv
bjpXZWJEcmFnSW1hZ2VBbHBoYV07Ci0gICAgICAgIHJldHVybiBkcmFnSW1hZ2U7Ci0gICAgfQot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TUmVjdClfc2VsZWN0aW9uRHJhZ2dpbmdSZWN0Ci17
Ci0gICAgLy8gTWFpbCBjdXJyZW50bHkgY2FsbHMgdGhpcyBtZXRob2QuIFdlIGNhbiBlbGltaW5h
dGUgaXQgd2hlbiBNYWlsIG5vIGxvbmdlciBjYWxscyBpdC4KLSAgICByZXR1cm4gW3NlbGYgc2Vs
ZWN0aW9uUmVjdF07Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5zZXJ0T3JkZXJlZExpc3QKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydE9yZGVyZWRMaXN0KCkuZ2V0
KCkpIDogbmlsOwotfQotCi0tIChET01Ob2RlICopX2luc2VydFVub3JkZXJlZExpc3QKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydFVub3JkZXJlZExpc3QoKS5n
ZXQoKSkgOiBuaWw7Ci19Ci0KLS0gKEJPT0wpX2NhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5JbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbCgpOwotfQotCi0tIChCT09MKV9jYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJl
dHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVjcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWwoKTsKLX0KLQotLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAg
IHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWwoKS5nZXQoKSkgOiBuaWw7Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUt
PmVkaXRvcigpLT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKS5nZXQoKSkgOiBu
aWw7Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVy
ZWQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBy
ZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsVW5vcmRlcmVkKCkuZ2V0KCkpIDogbmlsOwotfQotCi0tICh2b2lkKV9kZWNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIGlmIChjb3JlRnJhbWUpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRp
dG9yKCktPmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEhp
Z2hsaWdodGVyOihpZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+KWhpZ2hsaWdodGVyIG9mVHlwZTooTlNT
dHJpbmcqKXR5cGUKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5oaWdobGlnaHRlcnMpCi0gICAgICAg
IF9wcml2YXRlLT5oaWdobGlnaHRlcnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRdOwotICAgIFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIHNldE9iamVjdDpoaWdobGlnaHRlciBm
b3JLZXk6dHlwZV07Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZUhpZ2hsaWdodGVyT2ZUeXBlOihOU1N0
cmluZyopdHlwZQotewotICAgIFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIHJlbW92ZU9iamVjdEZv
cktleTp0eXBlXTsKLX0KLQotLSAodm9pZClfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCi17
Ci0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsKLQot
ICAgIFtbc2VsZiBfd2ViVmlld10gX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1l
OltzZWxmIF9mcmFtZV1dOwotfQotCi0tICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIEFTU0VSVChbc2VsZiBfaGFzU2Vs
ZWN0aW9uXSk7Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBbc2VsZiBwYXN0ZWJvYXJkVHlwZXNGb3JT
ZWxlY3Rpb25dOwotCi0gICAgLy8gRG9uJ3Qgd3JpdGUgUlRGRCB0byB0aGUgcGFzdGVib2FyZCB3
aGVuIHRoZSBjb3BpZWQgYXR0cmlidXRlZCBzdHJpbmcgaGFzIG5vIGF0dGFjaG1lbnRzLgotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0
cmlidXRlZFN0cmluZ107Ci0gICAgTlNNdXRhYmxlQXJyYXkgKm11dGFibGVUeXBlcyA9IG5pbDsK
LSAgICBpZiAoIVthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKSB7Ci0gICAg
ICAgIG11dGFibGVUeXBlcyA9IFt0eXBlcyBtdXRhYmxlQ29weV07Ci0gICAgICAgIFttdXRhYmxl
VHlwZXMgcmVtb3ZlT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdOwotICAgICAgICB0eXBlcyA9IG11
dGFibGVUeXBlczsKLSAgICB9Ci0KLSAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMg
b3duZXI6W3NlbGYgX3RvcEhUTUxWaWV3XV07Ci0gICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0
aFBhc3RlYm9hcmRUeXBlczp0eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRy
aWJ1dGVkU3RyaW5nOmF0dHJpYnV0ZWRTdHJpbmddOwotICAgIFttdXRhYmxlVHlwZXMgcmVsZWFz
ZV07Ci19Ci0KLS0gKHZvaWQpY2xvc2UKLXsKLSAgICAvLyBDaGVjayBmb3IgYSBuaWwgX3ByaXZh
dGUgaGVyZSBpbiBjYXNlIHdlIHdlcmUgY3JlYXRlZCB3aXRoIGluaXRXaXRoQ29kZXIuIEluIHRo
YXQgY2FzZSwgdGhlIFdlYlZpZXcgaXMganVzdCB0aHJvd2luZwotICAgIC8vIG91dCB0aGUgYXJj
aGl2ZWQgV2ViSFRNTFZpZXcgYW5kIHJlY3JlYXRpbmcgYSBuZXcgb25lIGlmIG5lZWRlZC4gU28g
Y2xvc2UgZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGluIHRoYXQgY2FzZS4KLSAgICBpZiAo
IV9wcml2YXRlIHx8IF9wcml2YXRlLT5jbG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9w
cml2YXRlLT5jbG9zZWQgPSBZRVM7Ci0KLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVy
VGltZXJdOwotICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1l
cl07Ci0gICAgW3NlbGYgX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGZdOwotICAgIFtzZWxmIF9yZW1v
dmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHldOwotICAgIFtzZWxmIF9yZW1vdmVX
aW5kb3dPYnNlcnZlcnNdOwotICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwot
ICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBkZXN0cm95QWxsUGx1Z2luc107Ci0gICAg
W19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIHNldERhdGFTb3VyY2U6bmlsXTsKLSAgICAvLyBy
ZW1vdmUgdG9vbHRpcHMgYmVmb3JlIGNsZWFyaW5nIF9wcml2YXRlIHNvIHJlbW92ZVRyYWNraW5n
UmVjdDogd2lsbCB3b3JrIGNvcnJlY3RseQotICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoX3ByaXZhdGUtPmxh
eWVySG9zdGluZ1ZpZXcpCi0gICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0b3BwZWRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci0jZW5kaWYKLQotICAgIFtf
cHJpdmF0ZSBjbGVhcl07Ci0KLSAgICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10p
OwotICAgIGlmIChwYWdlKQotICAgICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zZXREcmFn
Z2luZ0ltYWdlVVJMKEtVUkwoKSk7Ci19Ci0KLS0gKEJPT0wpX2hhc0hUTUxEb2N1bWVudAotewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29y
ZUZyYW1lKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29y
ZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNI
VE1MRG9jdW1lbnQoKTsKLX0KLQotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmlu
ZyAqKXBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291
cmNlcwotewotICAgIGlmIChwYm9hcmRUeXBlID09IFdlYkFyY2hpdmVQYm9hcmRUeXBlKSB7Ci0g
ICAgICAgIFdlYkFyY2hpdmUgKmFyY2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRo
RGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOwotICAg
ICAgICBpZiAoc3VicmVzb3VyY2VzKQotICAgICAgICAgICAgKnN1YnJlc291cmNlcyA9IFthcmNo
aXZlIHN1YnJlc291cmNlc107Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50
ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNoaXZlOmFyY2hp
dmVdOwotICAgICAgICBbYXJjaGl2ZSByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50
OwotICAgIH0KLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpCi0g
ICAgICAgIHJldHVybiBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczpbcGFzdGVib2Fy
ZCBwcm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV1dOwotICAgICAgICAK
LSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU0hUTUxQYm9hcmRUeXBlKSB7Ci0gICAgICAgIE5TU3Ry
aW5nICpIVE1MU3RyaW5nID0gW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU0hUTUxQYm9hcmRU
eXBlXTsKLSAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBNaWNyb3NvZnQncyBIVE1M
IHBhc3RlYm9hcmQgZGF0YSB3b3JrLiBTZWUgMzc3ODc4NS4KLSAgICAgICAgaWYgKFtIVE1MU3Ry
aW5nIGhhc1ByZWZpeDpAIlZlcnNpb246Il0pIHsKLSAgICAgICAgICAgIE5TUmFuZ2UgcmFuZ2Ug
PSBbSFRNTFN0cmluZyByYW5nZU9mU3RyaW5nOkAiPGh0bWwiIG9wdGlvbnM6TlNDYXNlSW5zZW5z
aXRpdmVTZWFyY2hdOwotICAgICAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91
bmQpCi0gICAgICAgICAgICAgICAgSFRNTFN0cmluZyA9IFtIVE1MU3RyaW5nIHN1YnN0cmluZ0Zy
b21JbmRleDpyYW5nZS5sb2NhdGlvbl07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFtIVE1MU3Ry
aW5nIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3Ry
aW5nOkhUTUxTdHJpbmcgYmFzZVVSTFN0cmluZzpuaWxdOwotICAgIH0KLQotICAgIC8vIFRoZSBf
aGFzSFRNTERvY3VtZW50IGNsYXVzZSBoZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4g
TlNBdHRyaWJ1dGVkU3RyaW5nOiBSYWRhciA1MDUyMzY5LgotICAgIC8vIElmIHdlIGNhbGwgX2Rv
Y3VtZW50RnJvbVJhbmdlIG9uIGFuIFhNTCBkb2N1bWVudCB3ZSdsbCBnZXQgInNldElubmVySFRN
TDogbWV0aG9kIG5vdCBmb3VuZCIuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgYnVn
IDUwNTIzNjkgaXMgZml4ZWQuCi0gICAgaWYgKFtzZWxmIF9oYXNIVE1MRG9jdW1lbnRdICYmIHBi
b2FyZFR5cGUgPT0gTlNSVEZQYm9hcmRUeXBlIHx8IHBib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJk
VHlwZSkgewotICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsKLSAgICAg
ICAgaWYgKHBib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkKLSAgICAgICAgICAgIHN0cmlu
ZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQg
ZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwot
ICAgICAgICBpZiAoc3RyaW5nID09IG5pbCkKLSAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpO
U1JURlBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKLSAgICAgICAgaWYgKHN0
cmluZyA9PSBuaWwpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAg
ICAgIE5TRGljdGlvbmFyeSAqZG9jdW1lbnRBdHRyaWJ1dGVzID0gW1tOU0RpY3Rpb25hcnkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICBbW3NlbGYgY2xhc3NdIF9l
eGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb25dLCBOU0V4Y2x1ZGVk
RWxlbWVudHNEb2N1bWVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgIHNlbGYsIEAiV2ViUmVzb3Vy
Y2VIYW5kbGVyIiwgbmlsXTsKLSAgICAgICAgTlNBcnJheSAqczsKLSAgICAgICAgCi0gICAgICAg
IEJPT0wgd2FzRGVmZXJyaW5nQ2FsbGJhY2tzID0gW1tzZWxmIF93ZWJWaWV3XSBkZWZlcnNDYWxs
YmFja3NdOwotICAgICAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKLSAgICAgICAgICAg
IFtbc2VsZiBfd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOllFU107Ci0gICAgICAgICAgICAK
LSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVu
dEZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Oltb
c2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50QXR0cmlidXRlczpkb2N1bWVudEF0dHJpYnV0ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
YnJlc291cmNlczomc107Ci0gICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCi0gICAgICAgICAgICAq
c3VicmVzb3VyY2VzID0gczsKLSAgICAgICAgCi0gICAgICAgIE5TRW51bWVyYXRvciAqZSA9IFtz
IG9iamVjdEVudW1lcmF0b3JdOwotICAgICAgICBXZWJSZXNvdXJjZSAqcjsKLSAgICAgICAgd2hp
bGUgKChyID0gW2UgbmV4dE9iamVjdF0pKQotICAgICAgICAgICAgW1tzZWxmIF9kYXRhU291cmNl
XSBhZGRTdWJyZXNvdXJjZTpyXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghd2FzRGVmZXJyaW5n
Q2FsbGJhY2tzKQotICAgICAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFj
a3M6Tk9dOwotICAgICAgICAKLSAgICAgICAgW2RvY3VtZW50QXR0cmlidXRlcyByZWxlYXNlXTsK
LSAgICAgICAgW3N0cmluZyByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAg
IH0KLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1RJRkZQYm9hcmRUeXBlKSB7Ci0gICAgICAgIFdl
YlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpb
cGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVl
VVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnRpZmYiKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS90aWZm
IiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
RW5jb2RpbmdOYW1lOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFn
bWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0
aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0g
ICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQ
REZQYm9hcmRUeXBlKSB7Ci0gICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVz
b3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BERlBi
b2FyZFR5cGVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiYXBwbGljYXRp
b24ucGRmIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFt
ZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3Nl
bGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3Vy
Y2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVu
dDsKLSAgICB9Ci0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TUElDVFBib2FyZFR5cGUp
IHsKLSAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10g
aW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUElDVFBib2FyZFR5cGVdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucGljdCIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlw
ZTpAImltYWdlL3BpY3QiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBE
T01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3Vt
ZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJj
ZSByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSNlbmRpZgotICAg
IC8vIE9ubHkgMTAuNSBhbmQgaGlnaGVyIHN1cHBvcnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBw
YXN0ZWJvYXJkIHR5cGVzIHdpdGggVVRJcywgYnV0IHdlIGRvbid0IGJlbGlldmUKLSAgICAvLyB0
aGF0IGFueSBhcHBsaWNhdGlvbnMgb24gVGlnZXIgcHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5
IGhhdmUgYSBVVEksIGxpa2UgUE5HLCBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3Bib2Fy
ZFR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVBOR10pIHsKLSAgICAgICAg
V2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRh
OltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
OnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5wbmciKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFn
ZS9wbmciIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHRFbmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBET01Eb2N1bWVu
dEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21l
bnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJjZSByZWxlYXNl
XTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAocGJvYXJkVHlwZSA9
PSBOU1VSTFBib2FyZFR5cGUpIHsKLSAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxGcm9t
UGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLSAgICAgICAgRE9NRG9jdW1lbnQqIGRvY3VtZW50ID0g
W1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwotICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwot
ICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAg
RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hvciA9IChET01IVE1MQW5jaG9yRWxlbWVudCAqKVtk
b2N1bWVudCBjcmVhdGVFbGVtZW50OkAiYSJdOwotICAgICAgICBOU1N0cmluZyAqVVJMU3RyaW5n
ID0gW1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXTsgLy8gT3JpZ2luYWwgZGF0YSBpcyBB
U0NJSS1vbmx5LCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByZWNvbXBvc2UuCi0gICAgICAgIGlm
IChbVVJMU3RyaW5nIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
ICAgIE5TU3RyaW5nICpVUkxUaXRsZVN0cmluZyA9IFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBl
OldlYlVSTE5hbWVQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBw
aW5nXTsKLSAgICAgICAgRE9NVGV4dCAqdGV4dCA9IFtkb2N1bWVudCBjcmVhdGVUZXh0Tm9kZTpV
UkxUaXRsZVN0cmluZ107Ci0gICAgICAgIFthbmNob3Igc2V0SHJlZjpVUkxTdHJpbmddOwotICAg
ICAgICBbYW5jaG9yIGFwcGVuZENoaWxkOnRleHRdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdt
ZW50ICpmcmFnbWVudCA9IFtkb2N1bWVudCBjcmVhdGVEb2N1bWVudEZyYWdtZW50XTsKLSAgICAg
ICAgW2ZyYWdtZW50IGFwcGVuZENoaWxkOmFuY2hvcl07Ci0gICAgICAgIHJldHVybiBmcmFnbWVu
dDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNTdHJpbmdQYm9hcmRUeXBlKQotICAg
ICAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29yZShjb250ZXh0KSwgW1tw
YXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0
cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkuZ2V0KCkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgCi0tICh2b2lkKV9wYXVzZU51bGxFdmVu
dHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMgCi17IAotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3Nl
bGYgc3Vidmlld3NdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdz
IGNvdW50XTsgCi0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdJbmRleDsgCi0gICAgCi0gICAgZm9y
IChzdWJ2aWV3SW5kZXggPSAwOyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJ
bmRleCsrKSB7IAotICAgICAgICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJ
bmRleDpzdWJ2aWV3SW5kZXhdOyAKLSAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6
W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkgCi0gICAgICAgICAgICBbKFdlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgKilzdWJ2aWV3IHN0b3BUaW1lcnNdOwotICAgIH0gCi19IAot
I2VuZGlmIAotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIAotLSAodm9pZClfcmVz
dW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAKLXsgCi0gICAgTlNBcnJheSAqc3Vi
dmlld3MgPSBbc2VsZiBzdWJ2aWV3c107IAotICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3Q291bnQg
PSBbc3Vidmlld3MgY291bnRdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4OyAKLSAg
ICAKLSAgICBmb3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZpZXdDb3Vu
dDsgc3Vidmlld0luZGV4KyspIHsgCi0gICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtzdWJ2aWV3
cyBvYmplY3RBdEluZGV4OnN1YnZpZXdJbmRleF07IAotICAgICAgICBpZiAoW3N1YnZpZXcgaXNL
aW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKLSAgICAgICAg
ICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgcmVzdGFydFRpbWVyc107
IAotICAgIH0gCi19IAotI2VuZGlmIAotCi0tIChCT09MKV9pc1VzaW5nQWNjZWxlcmF0ZWRDb21w
b3NpdGluZwotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICByZXR1cm4g
X3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgIT0gbmlsOwotI2Vsc2UKLSAgICByZXR1cm4gTk87
Ci0jZW5kaWYKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNWaWV3IChXZWJIVE1MVmll
d0ZpbGVJbnRlcm5hbCkKLQotLSAodm9pZClfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NU
b0FycmF5OihOU011dGFibGVBcnJheSAqKWFycmF5Ci17Ci0gICAgdW5zaWduZWQgY291bnQgPSBb
X3N1YnZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBOU1ZpZXcgKmNoaWxkID0gW19zdWJ2aWV3cyBvYmplY3RBdEluZGV4Omld
OwotICAgICAgICBpZiAoW2NoaWxkIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0p
Ci0gICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OmNoaWxkXTsKLSAgICAgICAgW2NoaWxkIF93
ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6YXJyYXldOwotICAgIH0KLX0KLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNNdXRhYmxlRGljdGlvbmFyeSAoV2ViSFRNTFZpZXdG
aWxlSW50ZXJuYWwpCi0KLS0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0
IGZvcktleTooaWQpa2V5Ci17Ci0gICAgaWYgKG9iamVjdCA9PSBuaWwpIHsKLSAgICAgICAgW3Nl
bGYgcmVtb3ZlT2JqZWN0Rm9yS2V5OmtleV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW3NlbGYg
c2V0T2JqZWN0Om9iamVjdCBmb3JLZXk6a2V5XTsKLSAgICB9Ci19Ci0KLUBlbmQKLQotQGludGVy
ZmFjZSBOU1N0cmluZyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0tIChCT09MKW1hdGNoZXNF
eHRlbnNpb25FcXVpdmFsZW50OihOU1N0cmluZyAqKWV4dGVuc2lvbjsKLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIE5TU3RyaW5nIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQotLSAoQk9PTClt
YXRjaGVzRXh0ZW5zaW9uRXF1aXZhbGVudDooTlNTdHJpbmcgKilleHRlbnNpb24KLXsKLSAgICBp
ZiAoW3NlbGYgaGFzU3VmZml4OmV4dGVuc2lvbl0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAg
ZWxzZSBpZiAoW2V4dGVuc2lvbiBpc0VxdWFsVG9TdHJpbmc6QCJqcGVnIl0gJiYgW3NlbGYgaGFz
U3VmZml4OkAianBnIl0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgcmV0dXJuIE5POwotfQot
Ci1AZW5kCi0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0vLyBUaGUgZm9sbG93aW5nIGlz
IGEgd29ya2Fyb3VuZCBmb3IKLS8vIDxyZGFyOi8vcHJvYmxlbS8zNDI5NjMxPiB3aW5kb3cgc3Rv
cHMgZ2V0dGluZyBtb3VzZSBtb3ZlZCBldmVudHMgYWZ0ZXIgZmlyc3QgdG9vbHRpcCBhcHBlYXJz
Ci0vLyBUaGUgdHJpY2sgaXMgdG8gZGVmaW5lIGEgY2F0ZWdvcnkgb24gTlNUb29sVGlwUGFuZWwg
dGhhdCBpbXBsZW1lbnRzIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOi4KLS8vIFNpbmNlIHRo
ZSBjYXRlZ29yeSB3aWxsIGJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgcmVhbCBjbGFzcywgd2UnbGwg
cHJldmVudCB0aGUgZmxhZyBmcm9tIGJlaW5nCi0vLyBzZXQgb24gdGhlIHRvb2wgdGlwIHBhbmVs
LgotCi1AaW50ZXJmYWNlIE5TVG9vbFRpcFBhbmVsIDogTlNQYW5lbAotQGVuZAotCi1AaW50ZXJm
YWNlIE5TVG9vbFRpcFBhbmVsIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIE5TVG9vbFRpcFBhbmVsIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQot
LSAodm9pZClzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czooQk9PTClmbGFnCi17Ci0gICAgLy8g
RG8gbm90aGluZywgcHJldmVudGluZyB0aGUgdG9vbCB0aXAgcGFuZWwgZnJvbSB0cnlpbmcgdG8g
YWNjZXB0IG1vdXNlLW1vdmVkIGV2ZW50cy4KLX0KLQotQGVuZAotCi0jZW5kaWYKLQotQGludGVy
ZmFjZSBOU0FycmF5IChXZWJIVE1MVmlldykKLS0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luVmlld3NQ
ZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3Q7Ci1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldwotCi0rICh2b2lkKWluaXRpYWxpemUKLXsK
LSAgICBbTlNBcHAgcmVnaXN0ZXJTZXJ2aWNlc01lbnVTZW5kVHlwZXM6W1tzZWxmIGNsYXNzXSBf
c2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuVHlwZXM6W1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc11dOwot
ICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgotICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7Ci0jZW5kaWYKLX0K
LQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEZyYW1lOmZyYW1lXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgCi0gICAgW3NlbGYgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVOb25l
XTsKLSAgICAKLSAgICAvLyBNYWtlIGFsbCBkcmF3aW5nIGdvIHRocm91Z2ggdXMgaW5zdGVhZCBv
ZiBzdWJ2aWV3cy4KLSAgICBbc2VsZiBfc2V0RHJhd3NPd25EZXNjZW5kYW50czpZRVNdOwotICAg
IAotICAgIF9wcml2YXRlID0gW1tXZWJIVE1MVmlld1ByaXZhdGUgYWxsb2NdIGluaXRdOwotCi0g
ICAgX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgPSBbW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoRG9jdW1lbnRWaWV3OnNlbGZdOwotICAgIAotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxs
b2NhdGVPbk1haW5UaHJlYWQoW1dlYkhUTUxWaWV3IGNsYXNzXSwgc2VsZikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdlIGNhbid0IGFzc2VydCB0aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJl
ZW4gY2FsbGVkIGJlY2F1c2UKLSAgICAvLyB0aGlzIHZpZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBp
dCdzIHN1cGVydmlldywgZXZlbiB0aG91Z2gKLSAgICAvLyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0
ZXIsIHNvIGNsb3NlIGlmIG5lZWRlZC4KLSAgICBbc2VsZiBjbG9zZV07Ci0gICAgW19wcml2YXRl
IHJlbGVhc2VdOwotICAgIF9wcml2YXRlID0gbmlsOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAodm9pZClmaW5hbGl6ZQotewotICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwotICAgIC8v
IFdlIGNhbid0IGFzc2VydCB0aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGJlY2F1
c2UKLSAgICAvLyB0aGlzIHZpZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldywg
ZXZlbiB0aG91Z2gKLSAgICAvLyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNsb3NlIGlm
IG5lZWRlZC4KLSAgICBbc2VsZiBjbG9zZV07Ci0gICAgW3N1cGVyIGZpbmFsaXplXTsKLX0KLQot
Ly8gUmV0dXJucyBZRVMgaWYgdGhlIGRlbGVnYXRlIHJldHVybnMgWUVTIChzbyB3ZSBzaG91bGQg
ZG8gbm8gbW9yZSB3b3JrKS4KLS0gKEJPT0wpY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3Rv
cklmTmVlZGVkOihTRUwpc2VsZWN0b3IKLXsKLSAgICBCT09MIGNhbGxlckFscmVhZHlDYWxsZWRE
ZWxlZ2F0ZSA9IF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPT0gc2Vs
ZWN0b3I7Ci0gICAgX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IDA7
Ci0gICAgaWYgKGNhbGxlckFscmVhZHlDYWxsZWREZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJuIE5P
OwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgcmV0dXJuIFtb
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21t
YW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVG
b3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCi17Ci0gICAgLy8gQ2hhbmdlIGEgZmV3IGNvbW1hbmQg
bmFtZXMgaW50byBvbmVzIHN1cHBvcnRlZCBieSBXZWJDb3JlOjpFZGl0b3IuCi0gICAgLy8gSWYg
dGhpcyBsaXN0IGdldHMgdG9vIGxvbmcgd2UgbWlnaHQgZGVjaWRlIHdlIG5lZWQgdG8gdXNlIGEg
aGFzaCB0YWJsZS4KLSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydFBhcmFncmFw
aFNlcGFyYXRvcjopIHx8IHNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNlcnROZXdsaW5lSWdub3Jp
bmdGaWVsZEVkaXRvcjopKQotICAgICAgICByZXR1cm4gIkluc2VydE5ld2xpbmUiOwotICAgIGlm
IChzZWxlY3RvciA9PSBAc2VsZWN0b3IoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjopKQot
ICAgICAgICByZXR1cm4gIkluc2VydFRhYiI7Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rv
cihwYWdlRG93bjopKQotICAgICAgICByZXR1cm4gIk1vdmVQYWdlRG93biI7Ci0gICAgaWYgKHNl
bGVjdG9yID09IEBzZWxlY3RvcihwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbjopKQotICAgICAg
ICByZXR1cm4gIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiI7Ci0gICAgaWYgKHNlbGVj
dG9yID09IEBzZWxlY3RvcihwYWdlVXA6KSkKLSAgICAgICAgcmV0dXJuICJNb3ZlUGFnZVVwIjsK
LSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjop
KQotICAgICAgICByZXR1cm4gIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iOwotCi0gICAg
Ly8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KLSAgICBjb25zdCBjaGFyKiBzZWxlY3Rvck5h
bWUgPSBzZWxfZ2V0TmFtZShzZWxlY3Rvcik7Ci0gICAgc2l6ZV90IHNlbGVjdG9yTmFtZUxlbmd0
aCA9IHN0cmxlbihzZWxlY3Rvck5hbWUpOwotICAgIGlmIChzZWxlY3Rvck5hbWVMZW5ndGggPCAy
IHx8IHNlbGVjdG9yTmFtZVtzZWxlY3Rvck5hbWVMZW5ndGggLSAxXSAhPSAnOicpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gU3RyaW5nKHNlbGVjdG9yTmFtZSwgc2VsZWN0
b3JOYW1lTGVuZ3RoIC0gMSk7Ci19Ci0KLS0gKEVkaXRvcjo6Q29tbWFuZCljb3JlQ29tbWFuZEJ5
U2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gRWRpdG9y
OjpDb21tYW5kKCk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29t
bWFuZE5hbWVGb3JTZWxlY3RvcihzZWxlY3RvcikpOwotfQotCi0tIChFZGl0b3I6OkNvbW1hbmQp
Y29yZUNvbW1hbmRCeU5hbWU6KGNvbnN0IGNoYXIqKW5hbWUKLXsKLSAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAg
cmV0dXJuIEVkaXRvcjo6Q29tbWFuZCgpOwotICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigp
LT5jb21tYW5kKG5hbWUpOwotfQotCi0tICh2b2lkKWV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0
b3I6KFNFTClzZWxlY3RvcgotewotICAgIGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRC
eVNlbGVjdG9ySWZOZWVkZWQ6c2VsZWN0b3JdKQotICAgICAgICByZXR1cm47Ci0gICAgW3NlbGYg
Y29yZUNvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXS5leGVjdXRlKCk7Ci19Ci0KLS0gKHZvaWQp
ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOihjb25zdCBjaGFyKiluYW1lCi17Ci0gICAgW3NlbGYg
Y29yZUNvbW1hbmRCeU5hbWU6bmFtZV0uZXhlY3V0ZSgpOwotfQotCi0vLyBUaGVzZSBjb21tYW5k
cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBFZGl0b3Igb2JqZWN0IGluIFdlYkNvcmUuCi0vLyBJZGVh
bGx5IHdlJ2QgZG8gdGhpcyBmb3IgYWxsIGVkaXRpbmcgY29tbWFuZHM7IG1vcmUgb2YgdGhlIGNv
ZGUKLS8vIHNob3VsZCBiZSBtb3ZlZCBmcm9tIGhlcmUgdG8gdGhlcmUsIGFuZCBtb3JlIGNvbW1h
bmRzIHNob3VsZCBiZQotLy8gYWRkZWQgdG8gdGhpcyBsaXN0LgotCi0vLyBGSVhNRTogTWF5YmUg
d2Ugc2hvdWxkIHNldCB0aGluZ3MgdXAgc28gdGhhdCBhbGwgdGhlc2Ugc2hhcmUgYSBzaW5nbGUg
bWV0aG9kIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9uLgotLy8gVGhlIGZ1bmN0aW9ucyBhcmUgaWRl
bnRpY2FsLgotCi0jZGVmaW5lIFdFQkNPUkVfQ09NTUFORChjb21tYW5kKSAtICh2b2lkKWNvbW1h
bmQ6KGlkKXNlbmRlciB7IFtzZWxmIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0b3I6X2NtZF07
IH0KLQotV0VCQ09SRV9DT01NQU5EKGFsaWduQ2VudGVyKQotV0VCQ09SRV9DT01NQU5EKGFsaWdu
SnVzdGlmaWVkKQotV0VCQ09SRV9DT01NQU5EKGFsaWduTGVmdCkKLVdFQkNPUkVfQ09NTUFORChh
bGlnblJpZ2h0KQotV0VCQ09SRV9DT01NQU5EKGNvcHkpCi1XRUJDT1JFX0NPTU1BTkQoY3V0KQot
V0VCQ09SRV9DT01NQU5EKGRlbGV0ZSkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVCYWNrd2FyZCkK
LVdFQkNPUkVfQ09NTUFORChkZWxldGVCYWNrd2FyZEJ5RGVjb21wb3NpbmdQcmV2aW91c0NoYXJh
Y3RlcikKLVdFQkNPUkVfQ09NTUFORChkZWxldGVGb3J3YXJkKQotV0VCQ09SRV9DT01NQU5EKGRl
bGV0ZVRvQmVnaW5uaW5nT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVnaW5uaW5n
T2ZQYXJhZ3JhcGgpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9FbmRPZkxpbmUpCi1XRUJDT1JF
X0NPTU1BTkQoZGVsZXRlVG9FbmRPZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVU
b01hcmspCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlV29yZEJhY2t3YXJkKQotV0VCQ09SRV9DT01N
QU5EKGRlbGV0ZVdvcmRGb3J3YXJkKQotV0VCQ09SRV9DT01NQU5EKGlnbm9yZVNwZWxsaW5nKQot
V0VCQ09SRV9DT01NQU5EKGluZGVudCkKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRCYWNrdGFiKQot
V0VCQ09SRV9DT01NQU5EKGluc2VydExpbmVCcmVhaykKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRO
ZXdsaW5lKQotV0VCQ09SRV9DT01NQU5EKGluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9y
KQotV0VCQ09SRV9DT01NQU5EKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcikKLVdFQkNPUkVfQ09N
TUFORChpbnNlcnRUYWIpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVk
aXRvcikKLVdFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdo
dCkKLVdFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQotV0VC
Q09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KQotV0VCQ09S
RV9DT01NQU5EKG1vdmVCYWNrd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmRBbmRN
b2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZURvd24pCi1XRUJDT1JFX0NPTU1B
TkQobW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZUZvcndh
cmQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJD
T1JFX0NPTU1BTkQobW92ZUxlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUxlZnRBbmRNb2RpZnlT
ZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5
U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5
U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVSaWdodCkKLVdFQkNPUkVfQ09NTUFORCht
b3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5u
aW5nT2ZEb2N1bWVudCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50
QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGlu
ZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpCi1XRUJDT1JF
X0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCi1X
RUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZSkKLVdFQkNPUkVfQ09NTUFO
RChtb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9D
T01NQU5EKG1vdmVUb0VuZE9mRG9jdW1lbnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZE
b2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxp
bmUpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQot
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mUGFyYWdyYXBoKQotV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0VuZE9mU2VudGVuY2UpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50ZW5jZUFu
ZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5kT2ZMaW5lKQot
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0xlZnRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCi1X
RUJDT1JFX0NPTU1BTkQobW92ZVRvUmlnaHRFbmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQobW92
ZVRvUmlnaHRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92
ZVVwKQotV0VCQ09SRV9DT01NQU5EKG1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVf
Q09NTUFORChtb3ZlV29yZEJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkQmFja3dh
cmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkKQot
V0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNP
UkVfQ09NTUFORChtb3ZlV29yZExlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0QW5k
TW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHQpCi1XRUJDT1JF
X0NPTU1BTkQobW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFO
RChvdXRkZW50KQotV0VCQ09SRV9DT01NQU5EKHBhZ2VEb3duKQotV0VCQ09SRV9DT01NQU5EKHBh
Z2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKHBhZ2VVcCkKLVdFQkNP
UkVfQ09NTUFORChwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQoc2Vs
ZWN0QWxsKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdExpbmUpCi1XRUJDT1JFX0NPTU1BTkQoc2Vs
ZWN0UGFyYWdyYXBoKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdFNlbnRlbmNlKQotV0VCQ09SRV9D
T01NQU5EKHNlbGVjdFRvTWFyaykKLVdFQkNPUkVfQ09NTUFORChzZWxlY3RXb3JkKQotV0VCQ09S
RV9DT01NQU5EKHNldE1hcmspCi1XRUJDT1JFX0NPTU1BTkQoc3Vic2NyaXB0KQotV0VCQ09SRV9D
T01NQU5EKHN1cGVyc2NyaXB0KQotV0VCQ09SRV9DT01NQU5EKHN3YXBXaXRoTWFyaykKLVdFQkNP
UkVfQ09NTUFORCh0cmFuc3Bvc2UpCi1XRUJDT1JFX0NPTU1BTkQodW5kZXJsaW5lKQotV0VCQ09S
RV9DT01NQU5EKHVuc2NyaXB0KQotV0VCQ09SRV9DT01NQU5EKHlhbmspCi1XRUJDT1JFX0NPTU1B
TkQoeWFua0FuZFNlbGVjdCkKLQotI3VuZGVmIFdFQkNPUkVfQ09NTUFORAotCi0jZGVmaW5lIENP
TU1BTkRfUFJPTE9HVUUgaWYgKFtzZWxmIGNhbGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJ
Zk5lZWRlZDpfY21kXSkgcmV0dXJuOwotCi0tIChJQkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21T
ZWxlY3Rpb246KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIGlmICgh
W3NlbGYgX2hhc1NlbGVjdGlvbl0pIHsKLSAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBbTlNQYXN0ZWJvYXJkIF93ZWJfc2V0RmluZFBhc3RlYm9hcmRTdHJp
bmc6W3NlbGYgc2VsZWN0ZWRTdHJpbmddIHdpdGhPd25lcjpzZWxmXTsKLX0KLQotLSAoQk9PTCl3
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCB0eXBl
czooTlNBcnJheSAqKXR5cGVzCi17Ci0gICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVz
IG93bmVyOltzZWxmIF90b3BIVE1MVmlld11dOwotICAgIFtzZWxmIHdyaXRlU2VsZWN0aW9uV2l0
aFBhc3RlYm9hcmRUeXBlczp0eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0gICAgcmV0
dXJuIFlFUzsKLX0KLQotLSAoQk9PTClyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6KE5TUGFz
dGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAg
IGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQot
ICAgICAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGFsbG93UGxhaW5U
ZXh0OllFU107Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQ
YXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKGlkKXZhbGlk
UmVxdWVzdG9yRm9yU2VuZFR5cGU6KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNT
dHJpbmcgKilyZXR1cm5UeXBlCi17Ci0gICAgQk9PTCBpc1NlbmRUeXBlT0sgPSAhc2VuZFR5cGUg
fHwgKFtbc2VsZiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb25dIGNvbnRhaW5zT2JqZWN0OnNl
bmRUeXBlXSAmJiBbc2VsZiBfaGFzU2VsZWN0aW9uXSk7Ci0gICAgQk9PTCBpc1JldHVyblR5cGVP
SyA9ICFyZXR1cm5UeXBlIHx8IChbW1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRU
eXBlc10gY29udGFpbnNPYmplY3Q6cmV0dXJuVHlwZV0gJiYgW3NlbGYgX2lzRWRpdGFibGVdKTsK
LSAgICBpZiAoaXNTZW5kVHlwZU9LICYmIGlzUmV0dXJuVHlwZU9LKQotICAgICAgICByZXR1cm4g
c2VsZjsKLSAgICByZXR1cm4gW1tzZWxmIG5leHRSZXNwb25kZXJdIHZhbGlkUmVxdWVzdG9yRm9y
U2VuZFR5cGU6c2VuZFR5cGUgcmV0dXJuVHlwZTpyZXR1cm5UeXBlXTsKLX0KLQotLy8ganVtcFRv
U2VsZWN0aW9uIGlzIHRoZSBvbGQgbmFtZSBmb3Igd2hhdCBBcHBLaXQgbm93IGNhbGxzIGNlbnRl
clNlbGVjdGlvbkluVmlzaWJsZUFyZWEuIFNhZmFyaQotLy8gd2FzIHVzaW5nIHRoZSBvbGQganVt
cFRvU2VsZWN0aW9uIHNlbGVjdG9yIGluIGl0cyBtZW51LiBOZXdlciB2ZXJzaW9ucyBvZiBTYWZh
cmkgd2lsbCB1c2UgdGhlCi0vLyBzZWxlY3RvciBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVh
LiBXZSdsbCBsZWF2ZSB0aGUgb2xkIHNlbGVjdG9yIGluIHBsYWNlIGZvciB0d28gcmVhc29uczoK
LS8vICgxKSBDb21wYXRpYmlsaXR5IGJldHdlZW4gb2xkZXIgU2FmYXJpIGFuZCBuZXdlciBXZWJL
aXQ7ICgyKSBvdGhlciBXZWJLaXQtYmFzZWQgYXBwbGljYXRpb25zCi0vLyBtaWdodCBiZSB1c2lu
ZyB0aGUgc2VsZWN0b3IsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZW0uCi0tICh2b2lk
KWp1bXBUb1NlbGVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0g
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBj
b3JlRnJhbWUtPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3
YXlzKTsKLX0KLQotLSAoTlNDZWxsU3RhdGVWYWx1ZSlzZWxlY3Rpb25IYXNTdHlsZTooQ1NTU3R5
bGVEZWNsYXJhdGlvbiopc3R5bGUKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5TT2ZmU3Rh
dGU7Ci0gICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHls
ZShzdHlsZSkpOwotfQotCi0tIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0
RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCi17Ci0gICAg
U0VMIGFjdGlvbiA9IFtpdGVtIGFjdGlvbl07Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7Ci0KLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gTk87
Ci0gICAgCi0gICAgaWYgKERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgewotICAg
ICAgICBpZiAoZG9jLT5pc1BsdWdpbkRvY3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgICAgIGlmIChkb2MtPmlzSW1hZ2VEb2N1bWVudCgpKSB7ICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihjb3B5OikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+aXNDb21wbGV0ZSgpOwotICAgICAgICAgICAgcmV0dXJu
IE5POwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hh
bmdlU3BlbGxpbmc6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfY2hhbmdl
U3BlbGxpbmdGcm9tTWVudTopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNo
ZWNrU3BlbGxpbmc6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihjb21wbGV0
ZTopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlRm9udDopKQotICAg
ICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3Ioc2hvd0d1ZXNzUGFuZWw6KSkgewotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAg
ICAvLyBNYXRjaCBPUyBYIEFwcEtpdCBiZWhhdmlvciBmb3IgcG9zdC1UaWdlci4gRG9uJ3QgY2hh
bmdlIFRpZ2VyIGJlaGF2aW9yLgotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01l
bnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01l
bnVJdGVtIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNT
cGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVd
OwotICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOnBhbmVsU2hvd2luZwotICAgICAgICAg
ICAgICAgID8gVUlfU1RSSU5HKCJIaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIiwgIm1lbnUgaXRl
bSB0aXRsZSIpCi0gICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlNob3cgU3BlbGxpbmcgYW5k
IEdyYW1tYXIiLCAibWVudSBpdGVtIHRpdGxlIildOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAg
ICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IoY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb246KQotICAgICAgICAgICAgfHwg
YWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDop
Ci0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0OikpIHsKLSAgICAgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdE
aXJlY3Rpb247Ci0KLSAgICAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQmFzZVdy
aXRpbmdEaXJlY3Rpb246KSkgewotICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IHN0YXRp
Y19jYXN0PE5TV3JpdGluZ0RpcmVjdGlvbj4oW2l0ZW0gdGFnXSk7Ci0gICAgICAgICAgICBpZiAo
d3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQotICAgICAgICAg
ICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9y
KG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OikpCi0gICAgICAgICAgICB3cml0
aW5nRGlyZWN0aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdo
dFRvTGVmdDsKLQotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICop
aXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNs
YXNzXV0pIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoImRpcmVjdGlvbiIs
IHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyAiTFRS
IiA6ICJSVEwiLCBlYyk7Ci0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6ZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSldOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBA
c2VsZWN0b3IobWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDopKSB7Ci0gICAgICAgIE5T
TWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21l
bnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFtt
ZW51SXRlbSBzZXRTdGF0ZTpOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIE5POwotICAgIH0K
LQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0aW9u
OikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07
Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11d
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGVjOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCAiUlRM
IiwgZWMpOwotICAgICAgICAgICAgLy8gVGFrZSBjb250cm9sIG9mIHRoZSB0aXRsZSBvZiB0aGUg
bWVudSBpdGVtIGluc3RlYWQgb2YganVzdCBjaGVja2luZy91bmNoZWNraW5nIGl0IGJlY2F1c2UK
LSAgICAgICAgICAgIC8vIGEgY2hlY2sgd291bGQgYmUgYW1iaWd1b3VzLgotICAgICAgICAgICAg
W21lbnVJdGVtIHNldFRpdGxlOmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5
bGUuZ2V0KCkpCi0gICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkxlZnQgdG8gUmlnaHQiLCAi
TGVmdCB0byBSaWdodCBjb250ZXh0IG1lbnUgaXRlbSIpCi0gICAgICAgICAgICAgICAgOiBVSV9T
VFJJTkcoIlJpZ2h0IHRvIExlZnQiLCAiUmlnaHQgdG8gTGVmdCBjb250ZXh0IG1lbnUgaXRlbSIp
XTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0gCi0g
ICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQXR0cmlidXRlczopCi0gICAg
ICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUNvbG9yOikgICAgICAgIAotICAg
ICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VGb250OikpCi0gICAgICAgIHJl
dHVybiBbc2VsZiBfY2FuRWRpdFJpY2hseV07Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2Vs
ZWN0b3IoY2FwaXRhbGl6ZVdvcmQ6KQotICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxl
Y3Rvcihsb3dlcmNhc2VXb3JkOikKLSAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IodXBwZXJjYXNlV29yZDopKQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl0g
JiYgW3NlbGYgX2lzRWRpdGFibGVdOwotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2Vu
dGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTopCi0gICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0g
QHNlbGVjdG9yKGp1bXBUb1NlbGVjdGlvbjopCi0gICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0g
QHNlbGVjdG9yKGNvcHlGb250OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9u
XSB8fCAoW3NlbGYgX2lzRWRpdGFibGVdICYmIFtzZWxmIF9oYXNJbnNlcnRpb25Qb2ludF0pOwot
ICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZURvY3VtZW50QmFja2dyb3Vu
ZENvbG9yOikpCi0gICAgICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzRWRpdGFibGVdICYm
IFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cihfaWdub3JlU3BlbGxpbmdGcm9tTWVudTopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNl
bGVjdG9yKF9sZWFyblNwZWxsaW5nRnJvbU1lbnU6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09
IEBzZWxlY3Rvcih0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KSkKLSAgICAgICAgcmV0dXJu
IFtzZWxmIF9oYXNTZWxlY3Rpb25dOwotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9y
KHBhc3RlOikgfHwgYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZUFzUGxhaW5UZXh0OikpCi0gICAg
ICAgIHJldHVybiBmcmFtZSAmJiAoZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwg
ZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpKTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3RvcihwYXN0ZUFzUmljaFRleHQ6KSkKLSAgICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFt
ZS0+ZWRpdG9yKCktPmNhbkRIVE1MUGFzdGUoKQotICAgICAgICAgICAgfHwgKGZyYW1lLT5lZGl0
b3IoKS0+Y2FuUGFzdGUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVk
aXRhYmxlKCkpKTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmlu
ZFBhbmVsQWN0aW9uOikpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KSkKLSAgICAgICAgcmV0
dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25dOwotICAgIAotI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUdyYW1tYXJDaGVja2luZzopKSB7
Ci0gICAgICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9y
IHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCi0gICAg
ICAgIC8vIHRoZSBzZWxlY3RvciBoZXJlIGJlY2F1c2Ugd2UgaW1wbGVtZW50IGl0IGhlcmUsIGFu
ZCB3ZSBtdXN0IGltcGxlbWVudCBpdCBoZXJlIGJlY2F1c2UgdGhlIEFwcEtpdCAKLSAgICAgICAg
Ly8gY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICAgICAgTlNNZW51SXRlbSAq
bWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNL
aW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFN0YXRlOltzZWxmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09m
ZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0jZW5kaWYKLQotI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQot
ICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6
KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsK
LSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0p
IHsKLSAgICAgICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hh
cmVkU3BlbGxDaGVja2VyXSBzdWJzdGl0dXRpb25zUGFuZWxdIGlzVmlzaWJsZV07Ci0gICAgICAg
ICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6cGFuZWxTaG93aW5nCi0gICAgICAgICAgICAgICAgPyBV
SV9TVFJJTkcoIkhpZGUgU3Vic3RpdHV0aW9ucyIsICJtZW51IGl0ZW0gdGl0bGUiKQotICAgICAg
ICAgICAgICAgIDogVUlfU1RSSU5HKCJTaG93IFN1YnN0aXR1dGlvbnMiLCAibWVudSBpdGVtIHRp
dGxlIildOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAg
fQotICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRo
aXMgbG9naWMsIGJ1dCB3ZSBtdXN0IHZhbGlkYXRlIAotICAgIC8vIHRoZSBzZWxlY3RvciBoZXJl
IGJlY2F1c2Ugd2UgaW1wbGVtZW50IGl0IGhlcmUsIGFuZCB3ZSBtdXN0IGltcGxlbWVudCBpdCBo
ZXJlIGJlY2F1c2UgdGhlIEFwcEtpdCAKLSAgICAvLyBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVz
cG9uZGVyLgotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZVNtYXJ0SW5zZXJ0RGVs
ZXRlOikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0
ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFz
c11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIHNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xl
QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51
SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRP
ZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3Rh
dGU6W3NlbGYgaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0YXRl
IDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQot
ICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246
KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsK
LSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0p
Ci0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJu
IFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9n
Z2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1l
bnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2lu
ZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRT
dGF0ZTpbc2VsZiBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXSA/IE5TT25TdGF0
ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0K
LSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1l
bnQ6KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRl
bTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNz
XV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnRFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICBy
ZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cih0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246KSkgewotICAgICAgICBOU01lbnVJ
dGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRl
bSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0
ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkXSA/
IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRd
OwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gW3Nl
bGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOmFjdGlvbl07Ci0gICAgaWYgKGNvbW1hbmQuaXNTdXBw
b3J0ZWQoKSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICop
aXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNs
YXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6a2l0KGNvbW1hbmQuc3RhdGUo
KSldOwotICAgICAgICByZXR1cm4gY29tbWFuZC5pc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gWUVTOwotfQotCi0tIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxO
U1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCi17Ci0gICAgLy8gVGhpcyBjYW4gYmUg
Y2FsbGVkIGR1cmluZyB0ZWFyZG93biB3aGVuIF93ZWJWaWV3IGlzIG5pbC4gUmV0dXJuIE5PIHdo
ZW4gdGhpcyBoYXBwZW5zLCBiZWNhdXNlIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbgot
ICAgIC8vIGFzc3VtZXMgdGhlIFdlYlZJZXcgaXMgbm9uLW5pbC4KLSAgICBpZiAoIVtzZWxmIF93
ZWJWaWV3XSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgdmFs
aWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTppdGVtXTsKLSAgICByZXR1cm4g
Q2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKHJlc3VsdCwgW3NlbGYgX3dlYlZpZXddLCBA
c2VsZWN0b3Iod2ViVmlldzp2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOmRlZmF1bHRWYWxpZGF0
aW9uOiksIGl0ZW0sIHJlc3VsdCk7Ci19Ci0KLS0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVy
Ci17Ci0gICAgLy8gRG9uJ3QgYWNjZXB0IGZpcnN0IHJlc3BvbmRlciB3aGVuIHdlIGZpcnN0IGNs
aWNrIG9uIHRoaXMgdmlldy4KLSAgICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIGV2ZW50IGRvd24g
dGhyb3VnaCBXZWJDb3JlIGZpcnN0IHRvIGJlIHN1cmUgd2UgZG9uJ3QgaGl0IGEgc3Vidmlldy4K
LSAgICAvLyBEbyBhY2NlcHQgZmlyc3QgcmVzcG9uZGVyIGF0IGFueSBvdGhlciB0aW1lLCBmb3Ig
ZXhhbXBsZSBmcm9tIGtleWJvYXJkIGV2ZW50cywKLSAgICAvLyBvciBmcm9tIGNhbGxzIGJhY2sg
ZnJvbSBXZWJDb3JlIG9uY2Ugd2UgYmVnaW4gbW91c2UtZG93biBldmVudCBoYW5kbGluZy4KLSAg
ICBOU0V2ZW50ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAgIGlmIChbZXZlbnQg
dHlwZV0gPT0gTlNMZWZ0TW91c2VEb3duCi0gICAgICAgICAgICAmJiAhX3ByaXZhdGUtPmhhbmRs
aW5nTW91c2VEb3duRXZlbnQKLSAgICAgICAgICAgICYmIE5TUG9pbnRJblJlY3QoW2V2ZW50IGxv
Y2F0aW9uSW5XaW5kb3ddLCBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiB2aXNpYmxlUmVjdF0gdG9W
aWV3Om5pbF0pKSB7Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0gICAgcmV0dXJuIFlFUzsK
LX0KLQotLSAoQk9PTCltYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbgotewotICAgIC8vIFRoaXMg
bWV0aG9kIGhlbHBzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBXZWJIVE1MVmlldyBzaG91bGQg
bWFpbnRhaW4KLSAgICAvLyBhbiBpbmFjdGl2ZSBzZWxlY3Rpb24gd2hlbiBpdCdzIG5vdCBmaXJz
dCByZXNwb25kZXIuCi0gICAgLy8gVHJhZGl0aW9uYWxseSwgdGhlc2Ugdmlld3MgaGF2ZSBub3Qg
bWFpbnRhaW5lZCBzdWNoIHNlbGVjdGlvbnMsCi0gICAgLy8gY2xlYXJpbmcgdGhlbSB3aGVuIHRo
ZSB2aWV3IHdhcyBub3QgZmlyc3QgcmVzcG9uZGVyLiBIb3dldmVyLAotICAgIC8vIHRvIGZpeCBi
dWdzIGxpa2UgdGhpcyBvbmU6Ci0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM2NzIwODg+OiAiRWRp
dGFibGUgV2ViVmlld3Mgc2hvdWxkIG1haW50YWluIGEgc2VsZWN0aW9uIGV2ZW4gCi0gICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGV5J3JlIG5vdCBmaXJzdFJlc3BvbmRl
ciIKLSAgICAvLyBpdCB3YXMgZGVjaWRlZCB0byBhZGQgYSBzd2l0Y2ggdG8gYWN0IG1vcmUgbGlr
ZSBhbiBOU1RleHRWaWV3LgotCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10gbWFpbnRhaW5zSW5h
Y3RpdmVTZWxlY3Rpb25dKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgLy8gUHJlZGljdCB0
aGUgY2FzZSB3aGVyZSB3ZSBhcmUgbG9zaW5nIGZpcnN0IHJlc3BvbmRlciBzdGF0dXMgb25seSB0
bwotICAgIC8vIGdhaW4gaXQgYmFjayBhZ2Fpbi4gV2FudCB0byBrZWVwIHRoZSBzZWxlY3Rpb24g
aW4gdGhhdCBjYXNlLgotICAgIGlkIG5leHRSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBfbmV3
Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZ107Ci0gICAgaWYgKFtuZXh0UmVzcG9uZGVyIGlz
S2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKSB7Ci0gICAgICAgIGlkIGNvbnRlbnRW
aWV3ID0gW25leHRSZXNwb25kZXIgY29udGVudFZpZXddOwotICAgICAgICBpZiAoY29udGVudFZp
ZXcpCi0gICAgICAgICAgICBuZXh0UmVzcG9uZGVyID0gY29udGVudFZpZXc7Ci0gICAgfQotICAg
IGlmIChbbmV4dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU0NsaXBWaWV3IGNsYXNzXV0pIHsK
LSAgICAgICAgaWQgZG9jdW1lbnRWaWV3ID0gW25leHRSZXNwb25kZXIgZG9jdW1lbnRWaWV3XTsK
LSAgICAgICAgaWYgKGRvY3VtZW50VmlldykKLSAgICAgICAgICAgIG5leHRSZXNwb25kZXIgPSBk
b2N1bWVudFZpZXc7Ci0gICAgfQotICAgIGlmIChuZXh0UmVzcG9uZGVyID09IHNlbGYpCi0gICAg
ICAgIHJldHVybiBZRVM7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBib29sIHNlbGVjdGlvbklzRWRpdGFibGUgPSBjb3JlRnJhbWUgJiYgY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKLSAgICBib29sIG5leHRSZXNw
b25kZXJJc0luV2ViVmlldyA9IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBj
bGFzc11dCi0gICAgICAgICYmIFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYg
X3dlYlZpZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XV07Ci0KLSAgICByZXR1cm4gc2VsZWN0aW9u
SXNFZGl0YWJsZSAmJiBuZXh0UmVzcG9uZGVySXNJbldlYlZpZXc7Ci19Ci0KLS0gKHZvaWQpYWRk
TW91c2VNb3ZlZE9ic2VydmVyCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB8fCAh
W3NlbGYgX2lzVG9wSFRNTFZpZXddIHx8IF9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90
aWZpY2F0aW9ucykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVW5sZXNzIHRoZSBEYXNoYm9h
cmQgYXNrcyB1cyB0byBkbyB0aGlzIGZvciBhbGwgd2luZG93cywga2VlcCBhbiBvYnNlcnZlciBn
b2luZyBvbmx5IGZvciB0aGUga2V5IHdpbmRvdy4KLSAgICBpZiAoIShbW3NlbGYgd2luZG93XSBp
c0tleVdpbmRvd10gCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgICAgICAgICAg
fHwgW1tzZWxmIF93ZWJWaWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZp
b3JBbHdheXNTZW5kTW91c2VFdmVudHNUb0FsbFdpbmRvd3NdCi0jZW5kaWYKLSAgICAgICAgKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihtb3VzZU1vdmVkTm90aWZp
Y2F0aW9uOikKLSAgICAgICAgbmFtZTpXS01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6
bmlsXTsKLSAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwotICAgIF9wcml2YXRlLT5v
YnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9ucyA9IHRydWU7Ci19Ci0KLS0gKHZvaWQpcmVt
b3ZlTW91c2VNb3ZlZE9ic2VydmVyCi17Ci0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQot
ICAgIC8vIERvbid0IHJlbW92ZSB0aGUgb2JzZXJ2ZXIgaWYgd2UncmUgcnVubmluZyB0aGUgRGFz
aGJvYXJkLgotICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJE
YXNoYm9hcmRCZWhhdmlvckFsd2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10pCi0gICAg
ICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBfbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQ6bmlsIG1vZGlmaWVyRmxhZ3M6MF07Ci0gICAgW3NlbGYgX3JlbW92ZU1vdXNl
TW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07Ci19Ci0KLS0gKHZvaWQpYWRkU3VwZXJ2aWV3
T2JzZXJ2ZXJzCi17Ci0gICAgaWYgKF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmlj
YXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1ZpZXcgKnN1cGVydmlldyA9IFtzZWxm
IHN1cGVydmlld107Ci0gICAgaWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdpbmRvd10pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9u
Q2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3Rp
ZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2ZyYW1l
T3JCb3VuZHNDaGFuZ2VkKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9i
amVjdDpzdXBlcnZpZXddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2Vs
ZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkKSBuYW1lOk5TVmlld0Jv
dW5kc0RpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICAKLSAgICAv
LyBJbiBhZGRpdGlvbiB0byByZWdpc3RlcmluZyBmb3IgZnJhbWUvYm91bmRzIGNoYW5nZSBub3Rp
ZmljYXRpb25zLCBjYWxsIC1fZnJhbWVPckJvdW5kc0NoYW5nZWQuCi0gICAgLy8gSXQgd2lsbCBj
aGVjayB0aGUgY3VycmVudCBzY3JvbGwgYWdhaW5zdCB0aGUgcHJldmlvdXMgbGF5b3V0J3Mgc2Ny
b2xsLiAgV2UgbmVlZCB0bwotICAgIC8vIGRvIHRoaXMgaGVyZSB0byBjYXRjaCB0aGUgY2FzZSB3
aGVyZSB0aGUgV2ViVmlldyBpcyBsYWlkIG91dCBhdCBvbmUgc2l6ZSwgcmVtb3ZlZCBmcm9tIGl0
cwotICAgIC8vIHdpbmRvdywgcmVzaXplZCwgYW5kIGluc2VydGVkIGludG8gYW5vdGhlciB3aW5k
b3cuICBPdXIgZnJhbWUvYm91bmRzIGNoYW5nZWQgbm90aWZpY2F0aW9ucwotICAgIC8vIHdpbGwg
bm90IGJlIHNlbnQgaW4gdGhhdCBzaXR1YXRpb24sIHNpbmNlIHdlIG9ubHkgd2F0Y2ggZm9yIGNo
YW5nZXMgd2hpbGUgaW4gdGhlIHZpZXcgaGllcmFyY2h5LgotICAgIFtzZWxmIF9mcmFtZU9yQm91
bmRzQ2hhbmdlZF07Ci0gICAgCi0gICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlm
aWNhdGlvbnMgPSB0cnVlOwotfQotCi0tICh2b2lkKWFkZFdpbmRvd09ic2VydmVycwotewotICAg
IGlmIChfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIGlm
ICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNOb3RpZmljYXRpb25DZW50
ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKHdpbmRvd0RpZEJlY29tZUtleTopIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlO
b3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWRSZXNpZ25LZXk6KSBuYW1lOk5T
V2luZG93RGlkUmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmlj
YXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2ls
bENsb3NlOikgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93
XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKHdpbmRvd1dpbGxPcmRlck9uU2NyZWVuOikgbmFtZTpXS1dpbmRvd1dpbGxPcmRlck9u
U2NyZWVuTm90aWZpY2F0aW9uKCkgb2JqZWN0OndpbmRvd107Ci0gICAgCi0gICAgX3ByaXZhdGUt
Pm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMgPSB0cnVlOwotfQotCi0tICh2b2lkKXZpZXdX
aWxsTW92ZVRvU3VwZXJ2aWV3OihOU1ZpZXcgKiluZXdTdXBlcnZpZXcKLXsKLSAgICBbc2VsZiBf
cmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvU3Vw
ZXJ2aWV3Ci17Ci0gICAgaWYgKFtzZWxmIHN1cGVydmlld10gIT0gbmlsKQotICAgICAgICBbc2Vs
ZiBhZGRTdXBlcnZpZXdPYnNlcnZlcnNdOwotfQotCi1zdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNl
ZEFuZEFjdGl2ZVN0YXRlVGltZXJDYWxsYmFjayhDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9p
ZCAqaW5mbykKLXsKLSAgICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKWluZm87
Ci0gICAgW3ZpZXcgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci19Ci0KLS0gKHZvaWQp
dmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UgYXJlbid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBwZW5zCi0gICAg
Ly8gd2hlbiBkZWNvZGluZyBhIFdlYlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBkZWNvZGVkIHRo
ZWlyIHN1YnZpZXdzCi0gICAgLy8gYXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2RlcjogYW5kIHNv
IHdvbid0IGJlIG5vcm1hbGx5Ci0gICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1YiB2aWV3cyBh
cmUgZGlzY2FyZGVkIGJ5IFdlYlZpZXcuCi0gICAgaWYgKCFfcHJpdmF0ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRklYTUU6IFNvbWUgb2YgdGhlc2UgY2FsbHMgbWF5IG5vdCB3b3JrIGJl
Y2F1c2UgdGhpcyB2aWV3IG1heSBiZSBhbHJlYWR5IHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmll
dy4KLSAgICBbc2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsK
LSAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKLSAgICBbc2VsZiBfcmVtb3ZlU3Vw
ZXJ2aWV3T2JzZXJ2ZXJzXTsKLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJd
OwotICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07Ci0g
ICAgCi0gICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBzdG9wQWxsUGx1Z2luc107Ci19Ci0K
LS0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwotewotICAgIC8vIERvbid0IGRvIGFueXRoaW5n
IGlmIHdlIGFyZW4ndCBpbml0aWFsaXplZC4gIFRoaXMgaGFwcGVucwotICAgIC8vIHdoZW4gZGVj
b2RpbmcgYSBXZWJWaWV3LiAgV2hlbiBXZWJWaWV3cyBhcmUgZGVjb2RlZCB0aGVpciBzdWJ2aWV3
cwotICAgIC8vIGFyZSBjcmVhdGVkIGJ5IGluaXRXaXRoQ29kZXI6IGFuZCBzbyB3b24ndCBiZSBu
b3JtYWxseQotICAgIC8vIGluaXRpYWxpemVkLiAgVGhlIHN0dWIgdmlld3MgYXJlIGRpc2NhcmRl
ZCBieSBXZWJWaWV3LgotICAgIGlmICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07
Ci0gICAgaWYgKFtzZWxmIHdpbmRvd10pIHsKLSAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQ
b3NpdGlvbiA9IFtbc2VsZiBzdXBlcnZpZXddIGJvdW5kc10ub3JpZ2luOwotICAgICAgICBbc2Vs
ZiBhZGRXaW5kb3dPYnNlcnZlcnNdOwotICAgICAgICBbc2VsZiBhZGRTdXBlcnZpZXdPYnNlcnZl
cnNdOwotICAgICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOwotCi0gICAgICAgIC8v
IFNjaGVkdWxlIHRoaXMgdXBkYXRlLCByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGNhbGwgcmlnaHQg
bm93LgotICAgICAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgcGxhY2luZyB0aGUgY2FyZXQgaW4g
dGhlIGp1c3QtaW5zdGFsbGVkIHZpZXcgcmVxdWlyZXMKLSAgICAgICAgLy8gdGhlIEhUTUwvWE1M
IGRvY3VtZW50IHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgV2ViQ29yZSBzaWRlLCBidXQgaXQgaXMg
bm90Ci0gICAgICAgIC8vIGF0IHRoZSB0aW1lIHRoaXMgY29kZSBpcyBydW5uaW5nLiBIb3dldmVy
LCBpdCB3aWxsIGJlIHRoZXJlIG9uIHRoZSBuZXh0Ci0gICAgICAgIC8vIGNyYW5rIG9mIHRoZSBy
dW4gbG9vcC4gRG9pbmcgdGhpcyBoZWxwcyB0byBtYWtlIGEgYmxpbmtpbmcgY2FyZXQgYXBwZWFy
IAotICAgICAgICAvLyBpbiBhIG5ldywgZW1wdHkgd2luZG93ICJhdXRvbWF0aWMiLgotICAgICAg
ICBpZiAoIV9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcikgewotICAg
ICAgICAgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIE5VTEws
IE5VTEwsIE5VTEwgfTsKLSAgICAgICAgICAgIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0
aXZlU3RhdGVUaW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKE5VTEwsIENGQWJzb2x1dGVUaW1l
R2V0Q3VycmVudCgpLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlVGltZXJDYWxsYmFjaywgJmNvbnRleHQpOwotICAgICAgICAgICAgQ0ZSdW5Mb29wQWRk
VGltZXIoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFj
dGl2ZVN0YXRlVGltZXIsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gc3RhcnRBbGxQbHVnaW5zXTsK
LQotICAgICAgICBfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gTlNaZXJvUG9pbnQ7Ci0g
ICAgfQotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilo
b3N0V2luZG93Ci17Ci0gICAgW1tzZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVnaW5WaWV3c1Bl
cmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iodmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93Oikgd2l0aE9i
amVjdDpob3N0V2luZG93XTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdwot
ewotICAgIFtbc2VsZiBzdWJ2aWV3c10gX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0
b3I6QHNlbGVjdG9yKHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93KSB3aXRoT2JqZWN0Om5pbF07Ci19
Ci0KLQotLSAodm9pZClhZGRTdWJ2aWV3OihOU1ZpZXcgKil2aWV3Ci17Ci0gICAgW3N1cGVyIGFk
ZFN1YnZpZXc6dmlld107Ci0KLSAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5W
aWV3OnZpZXddKQotICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGFkZFBsdWdpbjp2
aWV3XTsKLX0KLQotLSAodm9pZCl3aWxsUmVtb3ZlU3VidmlldzooTlNWaWV3ICopc3Vidmlldwot
ewotICAgIGlmIChbV2ViUGx1Z2luQ29udHJvbGxlciBpc1BsdWdJblZpZXc6c3Vidmlld10pCi0g
ICAgICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gZGVzdHJveVBsdWdpbjpzdWJ2aWV3XTsK
LQotICAgIFtzdXBlciB3aWxsUmVtb3ZlU3VidmlldzpzdWJ2aWV3XTsKLX0KLQotLSAodm9pZCly
ZWFwcGx5U3R5bGVzCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0jaWZkZWYgTE9HX1RJTUVTCi0gICAgZG91YmxlIHN0YXJ0
ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0jZW5kaWYKLQotICAgIGlmIChGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3
KiBjb3JlVmlldyA9IGNvcmVGcmFtZS0+dmlldygpKQotICAgICAgICAgICAgY29yZVZpZXctPnNl
dE1lZGlhVHlwZShfcHJpdmF0ZS0+cHJpbnRpbmcgPyAicHJpbnQiIDogInNjcmVlbiIpOwotICAg
ICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpKQotICAg
ICAgICAgICAgZG9jdW1lbnQtPnNldFByaW50aW5nKF9wcml2YXRlLT5wcmludGluZyk7Ci0gICAg
ICAgIGNvcmVGcmFtZS0+cmVhcHBseVN0eWxlcygpOwotICAgIH0KLSAgICAKLSNpZmRlZiBMT0df
VElNRVMgICAgICAgIAotICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3Vy
cmVudCgpIC0gc3RhcnQ7Ci0gICAgTE9HKFRpbWluZywgIiVzIGFwcGx5IHN0eWxlIHNlY29uZHMg
PSAlZiIsIFtzZWxmIFVSTF0sIHRoaXNUaW1lKTsKLSNlbmRpZgotCi0gICAgX3ByaXZhdGUtPm5l
ZWRzVG9BcHBseVN0eWxlcyA9IE5POwotfQotCi0vLyBEbyBhIGxheW91dCwgYnV0IHNldCB1cCBh
IG5ldyBmaXhlZCB3aWR0aCBmb3IgdGhlIHB1cnBvc2VzIG9mIGRvaW5nIHByaW50aW5nIGxheW91
dC4KLS8vIG1pblBhZ2VXaWR0aD09MCBpbXBsaWVzIGEgbm9uLXByaW50aW5nIGxheW91dAotLSAo
dm9pZClsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVt
UGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6KEJPT0wpYWRq
dXN0Vmlld1NpemUKLXsKLSAgICBbc2VsZiByZWFwcGx5U3R5bGVzXTsKLSAgICAKLSAgICBpZiAo
IVtzZWxmIF9uZWVkc0xheW91dF0pCi0gICAgICAgIHJldHVybjsKLQotI2lmZGVmIExPR19USU1F
UyAgICAgICAgCi0gICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7
Ci0jZW5kaWYKLQotICAgIExPRyhWaWV3LCAiJUAgZG9pbmcgbGF5b3V0Iiwgc2VsZik7Ci0KLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVG
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBj
b3JlRnJhbWUtPnZpZXcoKSkgewotICAgICAgICBpZiAobWluUGFnZVdpZHRoID4gMC4wKQotICAg
ICAgICAgICAgY29yZVZpZXctPmZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlKG1pblBhZ2VX
aWR0aCwgbWF4UGFnZVdpZHRoLCBhZGp1c3RWaWV3U2l6ZSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgY29yZVZpZXctPmZvcmNlTGF5b3V0KCFhZGp1c3RWaWV3U2l6ZSk7Ci0gICAgICAg
ICAgICBpZiAoYWRqdXN0Vmlld1NpemUpCi0gICAgICAgICAgICAgICAgY29yZVZpZXctPmFkanVz
dFZpZXdTaXplKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0jaWZkZWYgTE9HX1RJTUVTICAg
ICAgICAKLSAgICBkb3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAt
IHN0YXJ0OwotICAgIExPRyhUaW1pbmcsICIlcyBsYXlvdXQgc2Vjb25kcyA9ICVmIiwgW3NlbGYg
VVJMXSwgdGhpc1RpbWUpOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpbGF5b3V0Ci17Ci0gICAgW3Nl
bGYgbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFk
anVzdGluZ1ZpZXdTaXplOk5PXTsKLX0KLQotLy8gRGVsaXZlciBtb3VzZXVwIGV2ZW50cyB0byB0
aGUgRE9NIGZvciBidXR0b24gMi4KLS0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgd2UgcnVuIGEgbmVzdGVkIGV2
ZW50IGxvb3AgdGhlIGV2ZW50IHdpbGwgYmUgcmVsZWFzZWQuCi0gICAgLy8gUmV0YWluaW5nIGFu
ZCB0aGVuIGF1dG9yZWxlYXNpbmcgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVt
IGxhdGVyIGhlcmUgb3IKLSAgICAvLyBpbnNpZGUgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCBy
ZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIFtzdXBlciByaWdodE1vdXNlVXA6ZXZlbnRdOwot
Ci0gICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAg
ICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZVVwKGV2ZW50KTsKLX0KLQotLSAoTlNN
ZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEg
Y2hhbmNlIHRoYXQgaWYgd2UgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AgdGhlIGV2ZW50IHdpbGwg
YmUgcmVsZWFzZWQuCi0gICAgLy8gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcgcHJl
dmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGxhdGVyIGhlcmUgb3IKLSAgICAvLyBp
bnNpZGUgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQot
ICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVM
ZWZ0Ok5PXTsKLQotICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFBh
Z2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICAvLyBNYXRjaCBiZWhhdmlvciBvZiBvdGhlciBicm93c2VycyBieSBz
ZW5kaW5nIGEgbW91c2Vkb3duIGV2ZW50IGZvciByaWdodCBjbGlja3MuCi0gICAgX3ByaXZhdGUt
PmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBZRVM7Ci0gICAgcGFnZS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCktPmNsZWFyQ29udGV4dE1lbnUoKTsKLSAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5tb3VzZURvd24oZXZlbnQpOwotICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29yZUZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50
KGV2ZW50KSk7Ci0gICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBOTzsKLQot
ICAgIGlmICghaGFuZGxlZEV2ZW50KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gUmUt
Z2V0IHBhZ2UsIHNpbmNlIGl0IG1pZ2h0IGhhdmUgZ29uZSBhd2F5IGR1cmluZyBldmVudCBoYW5k
bGluZy4KLSAgICBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gcGFnZS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCk7Ci0gICAgaWYgKCFjb3JlTWVudSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TQXJyYXkqIG1lbnVJdGVtcyA9IGNvcmVNZW51
LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKCFtZW51SXRlbXMpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW21lbnVJdGVtcyBjb3VudF07Ci0g
ICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TTWVudSogbWVudSA9
IFtbW05TTWVudSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIFttZW51IGFkZEl0ZW06W21lbnVJdGVt
cyBvYmplY3RBdEluZGV4OmldXTsKLSAgICByZXR1cm4gbWVudTsKLX0KLQotLSAoQk9PTClzZWFy
Y2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5z
aXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZwotewotICAgIHJldHVybiBb
c2VsZiBzZWFyY2hGb3I6c3RyaW5nIGRpcmVjdGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2Fz
ZUZsYWcgd3JhcDp3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOk5PXTsKLX0KLQotLSAodm9pZClj
bGVhckZvY3VzCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKLX0KLQot
LSAoQk9PTClpc09wYXF1ZQotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFj
a2dyb3VuZF07Ci19Ci0KLS0gKHZvaWQpc2V0TmVlZHNEaXNwbGF5OihCT09MKWZsYWcKLXsKLSAg
ICBMT0coVmlldywgIiVAIHNldE5lZWRzRGlzcGxheTolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIg
OiBAIk5PIik7Ci0gICAgW3N1cGVyIHNldE5lZWRzRGlzcGxheTpmbGFnXTsKLX0KLQotLSAodm9p
ZClzZXROZWVkc0xheW91dDogKEJPT0wpZmxhZwotewotICAgIExPRyhWaWV3LCAiJUAgc2V0TmVl
ZHNMYXlvdXQ6JUAiLCBzZWxmLCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOwotICAgIGlmICghZmxh
ZykKLSAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSdzIG5vIHdheSB0byBzYXkgeW91IGRvbid0IG5l
ZWQgYSBsYXlvdXQuCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
IHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5p
blBhZ2VDYWNoZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoRnJhbWVWaWV3
KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0
KCk7Ci0gICAgfQotfQotCi0tICh2b2lkKXNldE5lZWRzVG9BcHBseVN0eWxlczogKEJPT0wpZmxh
ZwotewotICAgIExPRyhWaWV3LCAiJUAgc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiVAIiwgc2VsZiwg
ZmxhZyA/IEAiWUVTIiA6IEAiTk8iKTsKLSAgICBfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVz
ID0gZmxhZzsKLX0KLQotLSAodm9pZClkcmF3U2luZ2xlUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAg
ICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwotICAgIE5TUmVjdENsaXAo
cmVjdCk7Ci0gICAgICAgIAotICAgIEFTU0VSVChbW3NlbGYgc3VwZXJ2aWV3XSBpc0tpbmRPZkNs
YXNzOltXZWJDbGlwVmlldyBjbGFzc11dKTsKLQotICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBz
dXBlcnZpZXddIHNldEFkZGl0aW9uYWxDbGlwOnJlY3RdOwotCi0gICAgQHRyeSB7Ci0gICAgICAg
IGlmIChbc2VsZiBfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kXSkgewotICAgICAgICAgICAgW1tOU0Nv
bG9yIGNsZWFyQ29sb3JdIHNldF07Ci0gICAgICAgICAgICBOU1JlY3RGaWxsIChyZWN0KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFtbc2VsZiBfZnJhbWVdIF9kcmF3UmVjdDpyZWN0IGNvbnRlbnRz
T25seTpZRVNdOwotCi0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107
Ci0KLSAgICAgICAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUw
MjM1NDU+LiBXZSBjYW4gaGl0IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgZHJhd1JlY3Qgd2lsbCBi
ZQotICAgICAgICAvLyBjYWxsZWQgYWZ0ZXIgdGhlIFdlYlZpZXcgaGFzIGNsb3NlZC4gSWYgdGhl
IGNsaWVudCBkaWQgbm90IHByb3Blcmx5IGNsb3NlIHRoZSBXZWJWaWV3IGFuZCBzZXQgdGhlIAot
ICAgICAgICAvLyBVSURlbGVnYXRlIHRvIG5pbCwgdGhlbiB0aGUgVUlEZWxlZ2F0ZSB3aWxsIGJl
IHN0YWxlIGFuZCB0aGlzIGNvZGUgd2lsbCBjcmFzaC4gCi0gICAgICAgIHN0YXRpYyBCT09MIHZl
cnNpb24zT3JMYXRlckNsaWVudCA9IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1Rf
VkVSU0lPTl9XSVRIT1VUX1FVSUNLQk9PS1NfUVVJUkspOwotICAgICAgICBpZiAodmVyc2lvbjNP
ckxhdGVyQ2xpZW50KQotICAgICAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3OndlYlZpZXcgZGlkRHJhd1JlY3Q6W3dlYlZpZXcgY29udmVydFJlY3Q6cmVjdCBm
cm9tVmlldzpzZWxmXV07Ci0KLSAgICAgICAgaWYgKFdlYk5vZGVIaWdobGlnaHQgKmN1cnJlbnRI
aWdobGlnaHQgPSBbd2ViVmlldyBjdXJyZW50Tm9kZUhpZ2hsaWdodF0pCi0gICAgICAgICAgICBb
Y3VycmVudEhpZ2hsaWdodCBzZXROZWVkc1VwZGF0ZUluVGFyZ2V0Vmlld1JlY3Q6W3NlbGYgY29u
dmVydFJlY3Q6cmVjdCB0b1ZpZXc6W2N1cnJlbnRIaWdobGlnaHQgdGFyZ2V0Vmlld11dXTsKLQot
ICAgICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxD
bGlwXTsKLQotICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVd
OwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAg
WyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07Ci0g
ICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07Ci0gICAgICAg
IExPR19FUlJPUigiRXhjZXB0aW9uIGNhdWdodCB3aGlsZSBkcmF3aW5nOiAlQCIsIGxvY2FsRXhj
ZXB0aW9uKTsKLSAgICAgICAgW2xvY2FsRXhjZXB0aW9uIHJhaXNlXTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7
Ci0gICAgTE9HKFZpZXcsICIlQCBkcmF3aW5nIiwgc2VsZik7Ci0KLSAgICBjb25zdCBOU1JlY3Qg
KnJlY3RzOwotICAgIE5TSW50ZWdlciBjb3VudDsKLSAgICBbc2VsZiBnZXRSZWN0c0JlaW5nRHJh
d246JnJlY3RzIGNvdW50OiZjb3VudF07Ci0KLSAgICBCT09MIHN1YnZpZXdzV2VyZVNldEFzaWRl
ID0gX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGU7Ci0gICAgaWYgKHN1YnZpZXdzV2VyZVNldEFz
aWRlKQotICAgICAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsKLQotI2lmZGVmIExPR19USU1F
UwotICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlm
Ci0KLSAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfbXVzdERyYXdVbmlvbmVkUmVjdDpyZWN0IHNp
bmdsZVJlY3RzOnJlY3RzIGNvdW50OmNvdW50XSkKLSAgICAgICAgW3NlbGYgZHJhd1NpbmdsZVJl
Y3Q6cmVjdF07Ci0gICAgZWxzZQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgICAgICBbc2VsZiBkcmF3U2luZ2xlUmVjdDpyZWN0c1tpXV07Ci0KLSNpZmRl
ZiBMT0dfVElNRVMKLSAgICBkb3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKSAtIHN0YXJ0OwotICAgIExPRyhUaW1pbmcsICIlcyBkcmF3IHNlY29uZHMgPSAlZiIsIHdp
ZGdldC0+cGFydCgpLT5iYXNlVVJMKCkuVVJMKCkubGF0aW4xKCksIHRoaXNUaW1lKTsKLSNlbmRp
ZgotCi0gICAgaWYgKHN1YnZpZXdzV2VyZVNldEFzaWRlKQotICAgICAgICBbc2VsZiBfc2V0QXNp
ZGVTdWJ2aWV3c107Ci0gICAgICAgIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXph
dGlvbl0pIHsKLSAgICAgICAgLy8gRGlzYWJsZSBzY3JlZW4gdXBkYXRlcyBzbyB0aGF0IGRyYXdp
bmcgaW50byB0aGUgTlNWaWV3IGFuZAotICAgICAgICAvLyBDQUxheWVyIHVwZGF0ZXMgYXBwZWFy
IG9uIHRoZSBzY3JlZW4gYXQgdGhlIHNhbWUgdGltZS4KLSAgICAgICAgW1tzZWxmIHdpbmRvd10g
ZGlzYWJsZVNjcmVlblVwZGF0ZXNVbnRpbEZsdXNoXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24g
Zmx1c2hdOwotICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9zZXROZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uOk5PXTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotLy8gVHVybiBvZmYgdGhl
IGFkZGl0aW9uYWwgY2xpcCB3aGlsZSBjb21wdXRpbmcgb3VyIHZpc2libGVSZWN0LgotLSAoTlNS
ZWN0KXZpc2libGVSZWN0Ci17Ci0gICAgaWYgKCEoW1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZD
bGFzczpbV2ViQ2xpcFZpZXcgY2xhc3NdXSkpCi0gICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJs
ZVJlY3RdOwotICAgICAgICAKLSAgICBXZWJDbGlwVmlldyAqY2xpcFZpZXcgPSAoV2ViQ2xpcFZp
ZXcgKilbc2VsZiBzdXBlcnZpZXddOwotCi0gICAgQk9PTCBoYXNBZGRpdGlvbmFsQ2xpcCA9IFtj
bGlwVmlldyBoYXNBZGRpdGlvbmFsQ2xpcF07Ci0gICAgaWYgKCFoYXNBZGRpdGlvbmFsQ2xpcCkg
ewotICAgICAgICByZXR1cm4gW3N1cGVyIHZpc2libGVSZWN0XTsKLSAgICB9Ci0gICAgCi0gICAg
TlNSZWN0IGFkZGl0aW9uYWxDbGlwID0gW2NsaXBWaWV3IGFkZGl0aW9uYWxDbGlwXTsKLSAgICBb
Y2xpcFZpZXcgcmVzZXRBZGRpdGlvbmFsQ2xpcF07Ci0gICAgTlNSZWN0IHZpc2libGVSZWN0ID0g
W3N1cGVyIHZpc2libGVSZWN0XTsKLSAgICBbY2xpcFZpZXcgc2V0QWRkaXRpb25hbENsaXA6YWRk
aXRpb25hbENsaXBdOwotICAgIHJldHVybiB2aXNpYmxlUmVjdDsKLX0KLQotLSAoQk9PTClpc0Zs
aXBwZWQgCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRCZWNvbWVL
ZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFwdGhyZWFkX21h
aW5fbnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2Nt
ZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIE5TV2luZG93ICprZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9uIG9i
amVjdF07Ci0KLSAgICBpZiAoa2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10pCi0gICAgICAgIFtz
ZWxmIGFkZE1vdXNlTW92ZWRPYnNlcnZlcl07Ci0KLSAgICBpZiAoa2V5V2luZG93ID09IFtzZWxm
IHdpbmRvd10gfHwga2V5V2luZG93ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKQot
ICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKLX0KLQotLSAodm9p
ZCl3aW5kb3dEaWRSZXNpZ25LZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0g
ICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0
b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25l
Ok5PXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5TV2luZG93ICpmb3JtZXJLZXlX
aW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07Ci0KLSAgICBpZiAoZm9ybWVyS2V5V2luZG93
ID09IFtzZWxmIHdpbmRvd10pCi0gICAgICAgIFtzZWxmIHJlbW92ZU1vdXNlTW92ZWRPYnNlcnZl
cl07Ci0KLSAgICBpZiAoZm9ybWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwgZm9ybWVy
S2V5V2luZG93ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKSB7Ci0gICAgICAgIFtz
ZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOwotICAgICAgICBbX3ByaXZhdGUtPmNv
bXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgfQot
fQotCi0tICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KLXsKLSAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7Ci0gICAgICAgIFtzZWxmIHBlcmZv
cm1TZWxlY3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRV
bnRpbERvbmU6Tk9dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW19wcml2YXRlLT5j
b21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotICAgIFtb
c2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gZGVzdHJveUFsbFBsdWdpbnNdOwotfQotCi0tICh2b2lk
KXdpbmRvd1dpbGxPcmRlck9uU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgot
ewotICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbl0p
Ci0gICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpZRVNdOwotfQotCi0tICh2b2lkKXNjcm9s
bFdoZWVsOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQg
cmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFu
ZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUu
IFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZl
bnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3Ig
QXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIEZy
YW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT53aGVlbEV2ZW50KGV2ZW50KSkKLSAgICAgICAgW3N1cGVyIHNj
cm9sbFdoZWVsOmV2ZW50XTsKLX0KLQotLSAoQk9PTClfaXNTZWxlY3Rpb25FdmVudDooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpbZXZl
bnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsKLSAgICByZXR1cm4gW1tbc2VsZiBl
bGVtZW50QXRQb2ludDpwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6WUVTXSBvYmplY3RGb3JLZXk6
V2ViRWxlbWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07Ci19Ci0KLS0gKEJPT0wpYWNjZXB0
c0ZpcnN0TW91c2U6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2Ug
dGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9v
cCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xk
IG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVu
dCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktp
dCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0g
ICAgTlNWaWV3ICpoaXRWaWV3ID0gW3NlbGYgX2hpdFZpZXdGb3JFdmVudDpldmVudF07Ci0gICAg
V2ViSFRNTFZpZXcgKmhpdEhUTUxWaWV3ID0gW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBj
bGFzc11dID8gKFdlYkhUTUxWaWV3ICopaGl0VmlldyA6IG5pbDsKLSAgICAKLSNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJl
aGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzQWNjZXB0c0ZpcnN0TW91c2VdKQotICAg
ICAgICByZXR1cm4gWUVTOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKGhpdEhUTUxWaWV3KSB7Ci0g
ICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbaGl0SFRNTFZpZXcgX2ZyYW1lXSkpIHsKLSAgICAgICAgICAgIGNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnNldEFjdGl2YXRpb25FdmVudE51bWJlcihbZXZlbnQgZXZlbnROdW1i
ZXJdKTsKLSAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRd
OwotICAgICAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVudDpldmVudF0p
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZl
bnRNYXlTdGFydERyYWcoZXZlbnQpOwotICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3Vz
ZURvd25FdmVudDpuaWxdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIHJldHVybiBbaGl0VmlldyBhY2NlcHRzRmlyc3RNb3VzZTpldmVudF07Ci19Ci0KLS0g
KEJPT0wpc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
LXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIE5TVmlldyAqaGl0VmlldyA9IFtzZWxmIF9o
aXRWaWV3Rm9yRXZlbnQ6ZXZlbnRdOwotICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFto
aXRWaWV3IGlzS2luZE9mQ2xhc3M6W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZp
ZXcgOiBuaWw7Ci0gICAgaWYgKGhpdEhUTUxWaWV3KSB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRd
KQotICAgICAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBf
ZnJhbWVdKSkgewotICAgICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZl
bnQ6ZXZlbnRdOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmV2ZW50TWF5U3RhcnREcmFnKGV2ZW50KTsKLSAgICAgICAgICAgICAgICBbaGl0SFRN
TFZpZXcgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBbaGl0VmlldyBzaG91bGREZWxheVdpbmRv
d09yZGVyaW5nRm9yRXZlbnQ6ZXZlbnRdOwotfQotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8g
dGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRj
aGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5k
IHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRo
YXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgot
ICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBSZXRhaW5QdHI8V2ViSFRN
TFZpZXc+IHByb3RlY3RvciA9IHNlbGY7Ci0gICAgaWYgKFtbc2VsZiBpbnB1dENvbnRleHRdIHdh
bnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW1tzZWxmIGlucHV0Q29udGV4dF0gaGFuZGxlTW91
c2VFdmVudDpldmVudF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wcml2YXRlLT5oYW5kbGlu
Z01vdXNlRG93bkV2ZW50ID0gWUVTOwotCi0gICAgLy8gUmVjb3JkIHRoZSBtb3VzZSBkb3duIHBv
c2l0aW9uIHNvIHdlIGNhbiBkZXRlcm1pbmUgZHJhZyBoeXN0ZXJlc2lzLgotICAgIFtzZWxmIF9z
ZXRNb3VzZURvd25FdmVudDpldmVudF07Ci0KLSAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElu
cHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKLSAgICBp
ZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3Vy
cmVudElucHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgZ290byBk
b25lOwotCi0gICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6
Tk8gbW92ZUxlZnQ6Tk9dOwotCi0gICAgLy8gSWYgdGhlIHdlYiBwYWdlIGhhbmRsZXMgdGhlIGNv
bnRleHQgbWVudSBldmVudCBhbmQgbWVudUZvckV2ZW50OiByZXR1cm5zIG5pbCwgd2UnbGwgZ2V0
IGNvbnRyb2wgY2xpY2sgZXZlbnRzIGhlcmUuCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXNz
IHRoZW0gYWxvbmcgdG8gS0hUTUwgYSBzZWNvbmQgdGltZS4KLSAgICBpZiAoIShbZXZlbnQgbW9k
aWZpZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNrKSkgewotICAgICAgICBfcHJpdmF0ZS0+aWdu
b3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBOTzsKLQotICAgICAgICAvLyBEb24ndCBkbyBhbnkg
bW91c2VvdmVyIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgotICAgICAgICBbc2VsZiBfY2FuY2Vs
VXBkYXRlTW91c2VvdmVyVGltZXJdOwotCi0gICAgICAgIC8vIExldCBXZWJDb3JlIGdldCBhIGNo
YW5jZSB0byBkZWFsIHdpdGggdGhlIGV2ZW50LiBUaGlzIHdpbGwgY2FsbCBiYWNrIHRvIHVzCi0g
ICAgICAgIC8vIHRvIHN0YXJ0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlmIGFwcHJvcHJpYXRlLgot
ICAgICAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAg
ICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZURvd24oZXZlbnQpOwotICAg
IH0KLQotZG9uZToKLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POwot
fQotCi0tICh2b2lkKWRyYWdJbWFnZTooTlNJbWFnZSAqKWRyYWdJbWFnZQotICAgICAgICAgICAg
ICAgYXQ6KE5TUG9pbnQpYXQKLSAgICAgICAgICAgb2Zmc2V0OihOU1NpemUpb2Zmc2V0Ci0gICAg
ICAgICAgICBldmVudDooTlNFdmVudCAqKWV2ZW50Ci0gICAgICAgcGFzdGVib2FyZDooTlNQYXN0
ZWJvYXJkICopcGFzdGVib2FyZAotICAgICAgICAgICBzb3VyY2U6KGlkKXNvdXJjZQotICAgICAg
ICBzbGlkZUJhY2s6KEJPT0wpc2xpZGVCYWNrCi17Ci0gICAgQVNTRVJUKHNlbGYgPT0gW3NlbGYg
X3RvcEhUTUxWaWV3XSk7Ci0gICAgW3N1cGVyIGRyYWdJbWFnZTpkcmFnSW1hZ2UgYXQ6YXQgb2Zm
c2V0Om9mZnNldCBldmVudDpldmVudCBwYXN0ZWJvYXJkOnBhc3RlYm9hcmQgc291cmNlOnNvdXJj
ZSBzbGlkZUJhY2s6c2xpZGVCYWNrXTsKLX0KLQotLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZl
bnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRv
IHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0
Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFu
ZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0
aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4K
LSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgTlNJbnB1dE1hbmFnZXIg
KmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdl
cl07Ci0gICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50
c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFtzZWxmIHJldGFpbl07Ci0KLSAgICBpZiAoIV9wcml2YXRlLT5p
Z25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cykgewotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFt
ZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+bW91c2VEcmFnZ2VkKGV2ZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFtzZWxm
IHJlbGVhc2VdOwotfQotCi0tIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdTb3VyY2VPcGVyYXRp
b25NYXNrRm9yTG9jYWw6KEJPT0wpaXNMb2NhbAotewotICAgIEFTU0VSVCghW3NlbGYgX3dlYlZp
ZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7Ci0gICAgCi0gICAgUGFnZSogcGFnZSA9IGNv
cmUoW3NlbGYgX3dlYlZpZXddKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBOU0Ry
YWdPcGVyYXRpb25Ob25lOwotCi0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBvdmVycmlkZSB0aGUg
c291cmNlIHByb3ZpZGVkIG9wZXJhdGlvbiBoZXJlPyAgV2h5IG5vdCBpbiBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnCi0gICAgaWYgKHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNvdXJjZURyYWdP
cGVyYXRpb24oKSA9PSBEcmFnT3BlcmF0aW9uTm9uZSkKLSAgICAgICAgcmV0dXJuIE5TRHJhZ09w
ZXJhdGlvbkdlbmVyaWMgfCBOU0RyYWdPcGVyYXRpb25Db3B5OwotCi0gICAgcmV0dXJuIChOU0Ry
YWdPcGVyYXRpb24pcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+c291cmNlRHJhZ09wZXJhdGlvbigp
OwotfQotCi0tICh2b2lkKWRyYWdnZWRJbWFnZTooTlNJbWFnZSAqKWltYWdlIG1vdmVkVG86KE5T
UG9pbnQpc2NyZWVuTG9jCi17Ci0gICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYg
X2lzVG9wSFRNTFZpZXddKTsKLSAgICAKLSAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tz
ZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzY3JlZW5Mb2NdOwotICAgIE5TUG9pbnQg
d2luZG93TW91c2VMb2MgPSB3aW5kb3dJbWFnZUxvYzsKLSAgICAKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKSkgewotICAgICAgICBEcmFnQ29udHJvbGxlciogZHJh
Z0NvbnRyb2xsZXIgPSBwYWdlLT5kcmFnQ29udHJvbGxlcigpOwotICAgICAgICBOU1BvaW50IHdp
bmRvd01vdXNlTG9jID0gTlNNYWtlUG9pbnQod2luZG93SW1hZ2VMb2MueCArIGRyYWdDb250cm9s
bGVyLT5kcmFnT2Zmc2V0KCkueCgpLCB3aW5kb3dJbWFnZUxvYy55ICsgZHJhZ0NvbnRyb2xsZXIt
PmRyYWdPZmZzZXQoKS55KCkpOwotICAgIH0KLSAgICAKLSAgICBbW3NlbGYgX2ZyYW1lXSBfZHJh
Z1NvdXJjZU1vdmVkVG86d2luZG93TW91c2VMb2NdOwotfQotCi0tICh2b2lkKWRyYWdnZWRJbWFn
ZTooTlNJbWFnZSAqKWFuSW1hZ2UgZW5kZWRBdDooTlNQb2ludClhUG9pbnQgb3BlcmF0aW9uOihO
U0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCi17Ci0gICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10g
fHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKLSAgICAKLSAgICBOU1BvaW50IHdpbmRvd0ltYWdl
TG9jID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTphUG9pbnRdOwotICAgIE5T
UG9pbnQgd2luZG93TW91c2VMb2MgPSB3aW5kb3dJbWFnZUxvYzsKLSAgICAKLSAgICBpZiAoUGFn
ZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKSkgewotICAgICAgICBEcmFnQ29udHJvbGxl
ciogZHJhZ0NvbnRyb2xsZXIgPSBwYWdlLT5kcmFnQ29udHJvbGxlcigpOwotICAgICAgICB3aW5k
b3dNb3VzZUxvYyA9IE5TTWFrZVBvaW50KHdpbmRvd0ltYWdlTG9jLnggKyBkcmFnQ29udHJvbGxl
ci0+ZHJhZ09mZnNldCgpLngoKSwgd2luZG93SW1hZ2VMb2MueSArIGRyYWdDb250cm9sbGVyLT5k
cmFnT2Zmc2V0KCkueSgpKTsKLSAgICAgICAgZHJhZ0NvbnRyb2xsZXItPmRyYWdFbmRlZCgpOwot
ICAgIH0KLSAgICAKLSAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhZ1NvdXJjZUVuZGVkQXQ6d2luZG93
TW91c2VMb2Mgb3BlcmF0aW9uOm9wZXJhdGlvbl07Ci0gICAgCi0gICAgLy8gUHJldmVudCBxdWV1
ZWQgbW91c2VEcmFnZ2VkIGV2ZW50cyBmcm9tIGNvbWluZyBhZnRlciB0aGUgZHJhZyBhbmQgZmFr
ZSBtb3VzZVVwIGV2ZW50LgotICAgIF9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50
cyA9IFlFUzsKLSAgICAKLSAgICAvLyBPbmNlIHRoZSBkcmFnZ2luZyBtYWNoaW5lcnkga2lja3Mg
aW4sIHdlIG5vIGxvbmdlciBnZXQgbW91c2UgZHJhZ3Mgb3IgdGhlIHVwIGV2ZW50LgotICAgIC8v
IFdlYkNvcmUgZXhwZWN0cyB0byBnZXQgYmFsYW5jZWQgZG93bi91cCdzLCBzbyB3ZSBtdXN0IGZh
a2UgdXAgYSBtb3VzZXVwLgotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNl
RXZlbnRXaXRoVHlwZTpOU0xlZnRNb3VzZVVwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uOndpbmRvd01vdXNlTG9jCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50
XSBtb2RpZmllckZsYWdzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxm
IHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0Nv
dW50OjAgcHJlc3N1cmU6MF07Ci0gICAgW3NlbGYgbW91c2VVcDpmYWtlRXZlbnRdOyAvLyBUaGlz
IHdpbGwgYWxzbyB1cGRhdGUgdGhlIG1vdXNlb3ZlciBzdGF0ZS4KLX0KLQotLSAoTlNBcnJheSAq
KW5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERl
c3RpbmF0aW9uCi17Ci0gICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKLSAgICBOU1VS
TCAqZHJhZ2dpbmdJbWFnZVVSTCA9IG5pbDsKLSAgICAKLSAgICBpZiAoV2ViQ29yZTo6Q2FjaGVk
SW1hZ2UqIHRpZmZSZXNvdXJjZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXSkg
ewotICAgICAgICAKLSAgICAgICAgU2hhcmVkQnVmZmVyICpidWZmZXIgPSBzdGF0aWNfY2FzdDxD
YWNoZWRSZXNvdXJjZSo+KHRpZmZSZXNvdXJjZSktPmRhdGEoKTsKLSAgICAgICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgICAgICBnb3RvIG5vUHJvbWlzZWREYXRhOwotICAgICAgICAKLSAgICAgICAg
TlNEYXRhICpkYXRhID0gYnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsKLSAgICAgICAgTlNVUkxSZXNw
b25zZSAqcmVzcG9uc2UgPSB0aWZmUmVzb3VyY2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgp
OwotICAgICAgICBkcmFnZ2luZ0ltYWdlVVJMID0gW3Jlc3BvbnNlIFVSTF07Ci0gICAgICAgIHdy
YXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVu
dHM6ZGF0YV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBOU1N0cmluZyogZmlsZW5hbWUgPSBbcmVz
cG9uc2Ugc3VnZ2VzdGVkRmlsZW5hbWVdOwotICAgICAgICBOU1N0cmluZyogdHJ1ZUV4dGVuc2lv
bih0aWZmUmVzb3VyY2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9uKCkpOwotICAgICAgICBp
ZiAoIVtmaWxlbmFtZSBtYXRjaGVzRXh0ZW5zaW9uRXF1aXZhbGVudDp0cnVlRXh0ZW5zaW9uXSkK
LSAgICAgICAgICAgIGZpbGVuYW1lID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
ZzpAIi4iXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0cnVlRXh0ZW5zaW9uXTsKLSAgICAgICAg
W3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwotICAgIH0KLSAgICAKLW5v
UHJvbWlzZWREYXRhOgotICAgIAotICAgIGlmICghd3JhcHBlcikgewotICAgICAgICBBU1NFUlQo
IVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOwotICAgICAgICBQYWdl
KiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOwotICAgICAgICAKLSAgICAgICAgLy9JZiBh
IGxvYWQgb2NjdXJzIG1pZHdheSB0aHJvdWdoIGEgZHJhZywgdGhlIHZpZXcgbWF5IGJlIGRldGFj
aGVkLCB3aGljaCBnaXZlcwotICAgICAgICAvL3VzIG5vIGFiaWxpdHkgdG8gZ2V0IHRvIHRoZSBv
cmlnaW5hbCBQYWdlLCBzbyB3ZSBjYW5ub3QgYWNjZXNzIGFueSBkcmFnIHN0YXRlCi0gICAgICAg
IC8vRklYTUU6IGlzIHRoZXJlIGEgd2F5IHRvIHJlY292ZXI/Ci0gICAgICAgIGlmICghcGFnZSkg
Ci0gICAgICAgICAgICByZXR1cm4gbmlsOyAKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IEtVUkwm
IGltYWdlVVJMID0gcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ2dpbmdJbWFnZVVSTCgpOwot
ICAgICAgICBBU1NFUlQoIWltYWdlVVJMLmlzRW1wdHkoKSk7Ci0gICAgICAgIGRyYWdnaW5nSW1h
Z2VVUkwgPSBpbWFnZVVSTDsKLQotICAgICAgICB3cmFwcGVyID0gW1tzZWxmIF9kYXRhU291cmNl
XSBfZmlsZVdyYXBwZXJGb3JVUkw6ZHJhZ2dpbmdJbWFnZVVSTF07Ci0gICAgfQotICAgIAotICAg
IGlmICh3cmFwcGVyID09IG5pbCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgaW1hZ2UgZmlsZS4iKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICAvLyBG
SVhNRTogUmVwb3J0IGFuIGVycm9yIGlmIHdlIGZhaWwgdG8gY3JlYXRlIGEgZmlsZS4KLSAgICBO
U1N0cmluZyAqcGF0aCA9IFtbZHJvcERlc3RpbmF0aW9uIHBhdGhdIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpbd3JhcHBlciBwcmVmZXJyZWRGaWxlbmFtZV1dOwotICAgIHBhdGggPSBb
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJraXRfcGF0aFdpdGhVbmlxdWVGaWxl
bmFtZUZvclBhdGg6cGF0aF07Ci0gICAgaWYgKCFbd3JhcHBlciB3cml0ZVRvRmlsZTpwYXRoIGF0
b21pY2FsbHk6Tk8gdXBkYXRlRmlsZW5hbWVzOllFU10pCi0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGNyZWF0ZSBpbWFnZSBmaWxlIHZpYSAtW05TRmlsZVdyYXBwZXIgd3JpdGVUb0ZpbGU6
YXRvbWljYWxseTp1cGRhdGVGaWxlbmFtZXM6XSIpOwotICAgIAotICAgIGlmIChkcmFnZ2luZ0lt
YWdlVVJMKQotICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJraXRf
c2V0TWV0YWRhdGFVUkw6W2RyYWdnaW5nSW1hZ2VVUkwgYWJzb2x1dGVTdHJpbmddIHJlZmVycmVy
Om5pbCBhdFBhdGg6cGF0aF07Ci0gICAgCi0gICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9i
amVjdDpbcGF0aCBsYXN0UGF0aENvbXBvbmVudF1dOwotfQotCi0tICh2b2lkKW1vdXNlVXA6KE5T
RXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5n
IHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8g
ZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5n
IGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50
cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29k
ZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgW3NlbGYgX3NldE1v
dXNlRG93bkV2ZW50Om5pbF07Ci0KLSAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFu
YWdlciA9IFtOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKLSAgICBpZiAoW2N1
cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElu
cHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW3NlbGYgcmV0YWluXTsKLQotICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKLSAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAo
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlVXAoZXZlbnQpOwotICAgIH0KLSAgICBbc2VsZiBfdXBk
YXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07Ci0KLSAgICBbc2VsZiByZWxlYXNlXTsKLX0KLQot
LSAodm9pZCltb3VzZU1vdmVkTm90aWZpY2F0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgotewotICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6W1tub3RpZmljYXRp
b24gdXNlckluZm9dIG9iamVjdEZvcktleTpAIk5TRXZlbnQiXV07Ci19Ci0KLS8vIHJldHVybmlu
ZyBZRVMgZnJvbSB0aGlzIG1ldGhvZCBpcyB0aGUgd2F5IHdlIHRlbGwgQXBwS2l0IHRoYXQgaXQg
aXMgb2sgZm9yIHRoaXMgdmlldwotLy8gdG8gYmUgaW4gdGhlIGtleSBsb29wIGV2ZW4gd2hlbiAi
dGFiIHRvIGFsbCBjb250cm9scyIgaXMgbm90IG9uLgotLSAoQk9PTCluZWVkc1BhbmVsVG9CZWNv
bWVLZXkKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0vLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIG1h
a2Ugc3VyZSB3ZSBkb24ndCByZXR1cm4gYW55dGhpbmcgdGhyb3VnaCB0aGUgTlNUZXh0SW5wdXQK
LS8vIEFQSSB3aGVuIGFuIGVkaXRhYmxlIHJlZ2lvbiBpcyBub3QgY3VycmVudGx5IGZvY3VzZWQu
Ci1zdGF0aWMgQk9PTCBpc1RleHRJbnB1dChGcmFtZSogY29yZUZyYW1lKQotewotICAgIHJldHVy
biBjb3JlRnJhbWUgJiYgIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpICYmIGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCk7Ci19Ci0KLXN0YXRpYyBCT09M
IGlzSW5QYXNzd29yZEZpZWxkKEZyYW1lKiBjb3JlRnJhbWUpCi17Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOwotfQot
Ci0tIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCi17Ci0gICAgTlNTZWxlY3Rpb25EaXJlY3Rp
b24gZGlyZWN0aW9uID0gTlNEaXJlY3RTZWxlY3Rpb247Ci0gICAgaWYgKCFbW3NlbGYgX3dlYlZp
ZXddIF9pc1BlcmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1c10pCi0gICAgICAgIGRpcmVjdGlvbiA9
IFtbc2VsZiB3aW5kb3ddIGtleVZpZXdTZWxlY3Rpb25EaXJlY3Rpb25dOwotCi0gICAgW3NlbGYg
X3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci0gICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5l
bF07Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgQk9PTCBleHBvc2VJbnB1dENv
bnRleHQgPSBpc1RleHRJbnB1dChmcmFtZSkgJiYgIWlzSW5QYXNzd29yZEZpZWxkKGZyYW1lKTsK
LSAgICBpZiAoZXhwb3NlSW5wdXRDb250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRl
eHQpIHsKLSAgICAgICAgX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0
Q29udGV4dDsKLSAgICAgICAgW05TQXBwIHVwZGF0ZVdpbmRvd3NdOwotICAgIH0KLQotICAgIGZy
YW1lLT5lZGl0b3IoKS0+c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwotCi0gICAg
aWYgKGRpcmVjdGlvbiA9PSBOU0RpcmVjdFNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuIFlFUzsK
LQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAg
ICAgcmV0dXJuIFlFUzsKLQotICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2Vk
RnJhbWUoZnJhbWUpOwotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgZG9jdW1lbnQtPnNldEZvY3VzZWROb2RlKDApOwotICAgIHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5zZXRJbml0aWFsRm9jdXMoZGlyZWN0aW9uID09IE5TU2VsZWN0aW5n
TmV4dCA/IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCA6IEZvY3VzRGlyZWN0aW9uQmFja3dhcmQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmN1cnJlbnRLZXlib2FyZEV2ZW50KCkuZ2V0KCkpOwotICAgIHJldHVybiBZRVM7
Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICBCT09MIHJlc2lnbiA9
IFtzdXBlciByZXNpZ25GaXJzdFJlc3BvbmRlcl07Ci0gICAgaWYgKHJlc2lnbikgewotICAgICAg
ICBfcHJpdmF0ZS0+cmVzaWduaW5nRmlyc3RSZXNwb25kZXIgPSBZRVM7Ci0gICAgICAgIFtfcHJp
dmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsK
LSAgICAgICAgaWYgKCFbc2VsZiBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pIHsgCi0gICAg
ICAgICAgICBbc2VsZiBkZXNlbGVjdEFsbF07Ci0gICAgICAgICAgICBpZiAoIVtbc2VsZiBfd2Vi
Vmlld10gX2lzUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKLSAgICAgICAgICAgICAgICBb
c2VsZiBjbGVhckZvY3VzXTsKLSAgICAgICAgfQotICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNl
ZEFuZEFjdGl2ZVN0YXRlXTsKLSAgICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVzcG9u
ZGVyID0gTk87Ci0gICAgfQotICAgIHJldHVybiByZXNpZ247Ci19Ci0KLS0gKHZvaWQpc2V0RGF0
YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UgCi17Ci0gICAgQVNTRVJUKGRhdGFT
b3VyY2UpOwotICAgIGlmIChfcHJpdmF0ZS0+ZGF0YVNvdXJjZSAhPSBkYXRhU291cmNlKSB7Ci0g
ICAgICAgIEFTU0VSVCghX3ByaXZhdGUtPmNsb3NlZCk7Ci0gICAgICAgIEJPT0wgaGFkRGF0YVNv
dXJjZSA9IF9wcml2YXRlLT5kYXRhU291cmNlICE9IG5pbDsKLQotICAgICAgICBbZGF0YVNvdXJj
ZSByZXRhaW5dOwotICAgICAgICBbX3ByaXZhdGUtPmRhdGFTb3VyY2UgcmVsZWFzZV07Ci0gICAg
ICAgIF9wcml2YXRlLT5kYXRhU291cmNlID0gZGF0YVNvdXJjZTsKLSAgICAgICAgW19wcml2YXRl
LT5wbHVnaW5Db250cm9sbGVyIHNldERhdGFTb3VyY2U6ZGF0YVNvdXJjZV07Ci0KLSAgICAgICAg
aWYgKCFoYWREYXRhU291cmNlKQotICAgICAgICAgICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2Vy
dmVyXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGF0YVNvdXJjZVVwZGF0ZWQ6KFdlYkRhdGFTb3Vy
Y2UgKilkYXRhU291cmNlCi17Ci19Ci0KLS8vIFRoaXMgaXMgYW4gb3ZlcnJpZGUgb2YgYW4gTlND
b250cm9sIG1ldGhvZCB0aGF0IHdhbnRzIHRvIHJlcGFpbnQgdGhlIGVudGlyZSB2aWV3IHdoZW4g
dGhlIHdpbmRvdyByZXNpZ25zL2JlY29tZXMKLS8vIGtleS4gIFdlYkhUTUxWaWV3IGlzIGFuIE5T
Q29udHJvbCBvbmx5IGJlY2F1c2UgaXQgaG9zdHMgTlNDZWxscyB0aGF0IGFyZSBwYWludGVkIGJ5
IFdlYkNvcmUncyBBcXVhIHRoZW1lCi0vLyByZW5kZXJlciAoYW5kIHRob3NlIGNlbGxzIG11c3Qg
YmUgaG9zdGVkIGJ5IGFuIGVuY2xvc2luZyBOU0NvbnRyb2wgaW4gb3JkZXIgdG8gcGFpbnQgcHJv
cGVybHkpLgotLSAodm9pZCl1cGRhdGVDZWxsOihOU0NlbGwqKWNlbGwKLXsKLX0KLQotLy8gRG9l
cyBzZXROZWVkc0Rpc3BsYXk6Tk8gYXMgYSBzaWRlIGVmZmVjdCB3aGVuIHByaW50aW5nIGlzIGVu
ZGluZy4KLS8vIHBhZ2VXaWR0aCAhPSAwIGltcGxpZXMgd2Ugd2lsbCByZWxheW91dCB0byBhIG5l
dyB3aWR0aAotLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBhZ2VX
aWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VX
aWR0aCBhZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZQotewotICAgIFdlYkZyYW1l
ICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgTlNBcnJheSAqc3ViZnJhbWVzID0gW2ZyYW1l
IGNoaWxkRnJhbWVzXTsKLSAgICB1bnNpZ25lZCBuID0gW3N1YmZyYW1lcyBjb3VudF07Ci0gICAg
dW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpICE9IG47ICsraSkgewotICAgICAgICBXZWJG
cmFtZSAqc3ViZnJhbWUgPSBbc3ViZnJhbWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFdl
YkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gW3N1YmZyYW1lIGZyYW1lVmlld107Ci0gICAgICAgIGlm
IChbW3N1YmZyYW1lIF9kYXRhU291cmNlXSBfaXNEb2N1bWVudEhUTUxdKSB7Ci0gICAgICAgICAg
ICBbKFdlYkhUTUxWaWV3ICopW2ZyYW1lVmlldyBkb2N1bWVudFZpZXddIF9zZXRQcmludGluZzpw
cmludGluZyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVz
dFZpZXdTaXplOmFkanVzdFZpZXdTaXplXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChw
cmludGluZyAhPSBfcHJpdmF0ZS0+cHJpbnRpbmcpIHsKLSAgICAgICAgW19wcml2YXRlLT5wYWdl
UmVjdHMgcmVsZWFzZV07Ci0gICAgICAgIF9wcml2YXRlLT5wYWdlUmVjdHMgPSBuaWw7Ci0gICAg
ICAgIF9wcml2YXRlLT5wcmludGluZyA9IHByaW50aW5nOwotICAgICAgICBpZiAoIXByaW50aW5n
KQotICAgICAgICAgICAgX3ByaXZhdGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4gPSBOTzsKLSAgICAg
ICAgW3NlbGYgc2V0TmVlZHNUb0FwcGx5U3R5bGVzOllFU107Ci0gICAgICAgIFtzZWxmIHNldE5l
ZWRzTGF5b3V0OllFU107Ci0gICAgICAgIFtzZWxmIGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDpt
aW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDptYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1Np
emU6YWRqdXN0Vmlld1NpemVdOwotICAgICAgICBpZiAoIXByaW50aW5nKSB7Ci0gICAgICAgICAg
ICAvLyBDYW4ndCBkbyB0aGlzIHdoZW4gc3RhcnRpbmcgcHJpbnRpbmcgb3IgbmVzdGVkIHByaW50
aW5nIHdvbid0IHdvcmssIHNlZSAzNDkxNDI3LgotICAgICAgICAgICAgW3NlbGYgc2V0TmVlZHNE
aXNwbGF5Ok5PXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLSAoQk9PTCljYW5QcmludEhlYWRl
cnNBbmRGb290ZXJzCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLy8gVGhpcyBpcyBuZWVkZWQg
Zm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB3ZWJ2aWV3IGlzIGVtYmVkZGVkIGluIHRoZSB2aWV3IHRo
YXQncyBiZWluZyBwcmludGVkLgotLy8gSXQgc2hvdWxkbid0IGJlIGNhbGxlZCB3aGVuIHRoZSB3
ZWJ2aWV3IGlzIGJlaW5nIHByaW50ZWQgZGlyZWN0bHkuCi0tICh2b2lkKWFkanVzdFBhZ2VIZWln
aHROZXc6KENHRmxvYXQgKiluZXdCb3R0b20gdG9wOihDR0Zsb2F0KW9sZFRvcCBib3R0b206KENH
RmxvYXQpb2xkQm90dG9tIGxpbWl0OihDR0Zsb2F0KWJvdHRvbUxpbWl0Ci17Ci0gICAgLy8gVGhp
cyBoZWxwcyB3aGVuIHdlIHByaW50IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4K
LSAgICAvLyBJZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcs
IHRoZW4gd2Ugd2lsbCBuZXZlciBoYXZlIHRvIGRvIHRoaXMuCi0gICAgQk9PTCB3YXNJblByaW50
aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGluZzsKLSAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2Rl
KQotICAgICAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBt
YXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0gICAgZmxvYXQgbmV3
Qm90dG9tRmxvYXQgPSAqbmV3Qm90dG9tOwotICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pLT52aWV3KCkpCi0gICAgICAgIHZpZXctPmFkanVzdFBhZ2VIZWlnaHQo
Jm5ld0JvdHRvbUZsb2F0LCBvbGRUb3AsIG9sZEJvdHRvbSwgYm90dG9tTGltaXQpOwotCi0jaWZk
ZWYgX19MUDY0X18KLSAgICAvLyBJZiB0aGUgbmV3IGJvdHRvbSBpcyBlcXVhbCB0byB0aGUgb2xk
IGJvdHRvbSAod2hlbiBib3RoIGFyZSB0cmVhdGVkIGFzIGZsb2F0cyksIHdlIGp1c3QgY29weQot
ICAgIC8vIG9sZEJvdHRvbSBvdmVyIHRvIG5ld0JvdHRvbS4gVGhpcyBwcmV2ZW50cyByb3VuZGlu
ZyBlcnJvcnMgdGhhdCBjYW4gb2NjdXIgd2hlbiBjb252ZXJ0aW5nIG5ld0JvdHRvbUZsb2F0IHRv
IGEgZG91YmxlLgotICAgIGlmIChmYWJzKChmbG9hdClvbGRCb3R0b20gLSBuZXdCb3R0b21GbG9h
dCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSkgCi0gICAgICAgICpu
ZXdCb3R0b20gPSBvbGRCb3R0b207Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgICpuZXdCb3R0
b20gPSBuZXdCb3R0b21GbG9hdDsKLSAgICAKLSAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKSB7
Ci0gICAgICAgIE5TUHJpbnRPcGVyYXRpb24gKmN1cnJlblByaW50T3BlcmF0aW9uID0gW05TUHJp
bnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl07Ci0gICAgICAgIGlmIChjdXJyZW5QcmludE9w
ZXJhdGlvbikKLSAgICAgICAgICAgIC8vIGRlbGF5IF9zZXRQcmludGluZzpOTyB1bnRpbCBiYWNr
IHRvIG1haW4gbG9vcCBhcyB0aGlzIG1ldGhvZCBtYXkgZ2V0IGNhbGxlZCByZXBlYXRlZGx5Ci0g
ICAgICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJp
bnRNb2RlOikgd2l0aE9iamVjdDpjdXJyZW5QcmludE9wZXJhdGlvbiBhZnRlckRlbGF5OjBdOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5
IGV2ZXIgaW52b2tlZCwgaXQgcHJvYmFibHkgc2hvdWxkbid0IGJlCi0gICAgICAgICAgICBbc2Vs
ZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6
MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107Ci0gICAgfQotfQotCi0tIChmbG9hdClfYXZhaWxhYmxl
UGFwZXJXaWR0aEZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVy
YXRpb24KLXsKLSAgICBOU1ByaW50SW5mbyAqcHJpbnRJbmZvID0gW3ByaW50T3BlcmF0aW9uIHBy
aW50SW5mb107Ci0gICAgcmV0dXJuIFtwcmludEluZm8gcGFwZXJTaXplXS53aWR0aCAtIFtwcmlu
dEluZm8gbGVmdE1hcmdpbl0gLSBbcHJpbnRJbmZvIHJpZ2h0TWFyZ2luXTsKLX0KLQotLSAoZmxv
YXQpX3NjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmlu
dE9wZXJhdGlvbgotewotICAgIGZsb2F0IHZpZXdXaWR0aCA9IE5TV2lkdGgoW3NlbGYgYm91bmRz
XSk7Ci0gICAgaWYgKHZpZXdXaWR0aCA8IDEpIHsKLSAgICAgICAgTE9HX0VSUk9SKCIlQCBoYXMg
bm8gd2lkdGggd2hlbiBwcmludGluZyIsIHNlbGYpOwotICAgICAgICByZXR1cm4gMS4wZjsKLSAg
ICB9Ci0KLSAgICBmbG9hdCB1c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9w
YWdlU2V0dXBTY2FsZUZhY3Rvcl07Ci0gICAgZmxvYXQgbWF4U2hyaW5rVG9GaXRTY2FsZUZhY3Rv
ciA9IDEuMGYgLyBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7Ci0gICAgZmxvYXQgc2hyaW5r
VG9GaXRTY2FsZUZhY3RvciA9IFtzZWxmIF9hdmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVy
YXRpb246cHJpbnRPcGVyYXRpb25dL3ZpZXdXaWR0aDsKLSAgICBmbG9hdCBzaHJpbmtUb0F2b2lk
T3JwaGFuID0gX3ByaXZhdGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4gPyAoMS4wZiAvIFByaW50aW5n
T3JwaGFuU2hyaW5rQWRqdXN0bWVudCkgOiAxLjBmOwotICAgIHJldHVybiB1c2VyU2NhbGVGYWN0
b3IgKiBNQVgobWF4U2hyaW5rVG9GaXRTY2FsZUZhY3Rvciwgc2hyaW5rVG9GaXRTY2FsZUZhY3Rv
cikgKiBzaHJpbmtUb0F2b2lkT3JwaGFuOwotfQotCi0vLyBGSVhNRSAzNDkxMzQ0OiBUaGlzIGlz
IGEgc2VjcmV0IEFwcEtpdC1pbnRlcm5hbCBtZXRob2QgdGhhdCB3ZSBuZWVkIHRvIG92ZXJyaWRl
IGluIG9yZGVyCi0vLyB0byBnZXQgb3VyIHNocmluay10by1maXQgdG8gd29yayB3aXRoIGEgY3Vz
dG9tIHBhZ2luYXRpb24gc2NoZW1lLiBXZSBjYW4gZG8gdGhpcyBiZXR0ZXIKLS8vIGlmIEFwcEtp
dCBtYWtlcyBpdCBTUEkvQVBJLgotLSAoQ0dGbG9hdClfcHJvdmlkZVRvdGFsU2NhbGVGYWN0b3JG
b3JQcmludE9wZXJhdGlvbjooTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uIAotewot
ICAgIHJldHVybiBbc2VsZiBfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJh
dGlvbl07Ci19Ci0KLS8vIFRoaXMgaXMgdXNlZCBmb3IgQ2FyYm9uIHByaW50aW5nLiBBdCBzb21l
IHBvaW50IHdlIG1pZ2h0IHdhbnQgdG8gbWFrZSB0aGlzIHB1YmxpYyBBUEkuCi0tICh2b2lkKXNl
dFBhZ2VXaWR0aEZvclByaW50aW5nOihmbG9hdClwYWdlV2lkdGgKLXsKLSAgICBbc2VsZiBfc2V0
UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBh
ZGp1c3RWaWV3U2l6ZTpOT107Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFn
ZVdpZHRoOnBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOnBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6
ZTpZRVNdOwotfQotCi0tICh2b2lkKV9lbmRQcmludE1vZGUKLXsKLSAgICBbc2VsZiBfc2V0UHJp
bnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1
c3RWaWV3U2l6ZTpZRVNdOwotICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5OllFU107
Ci19Ci0KLS0gKHZvaWQpX2RlbGF5ZWRFbmRQcmludE1vZGU6KE5TUHJpbnRPcGVyYXRpb24gKilp
bml0aWF0aW5nT3BlcmF0aW9uCi17Ci0gICAgQVNTRVJUX0FSRyhpbml0aWF0aW5nT3BlcmF0aW9u
LCBpbml0aWF0aW5nT3BlcmF0aW9uICE9IG5pbCk7Ci0gICAgTlNQcmludE9wZXJhdGlvbiAqY3Vy
cmVudE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dOwotICAg
IGlmIChpbml0aWF0aW5nT3BlcmF0aW9uID09IGN1cnJlbnRPcGVyYXRpb24pIHsKLSAgICAgICAg
Ly8gVGhlIHByaW50IG9wZXJhdGlvbiBpcyBzdGlsbCB1bmRlcndheS4gV2UgZG9uJ3QgZXhwZWN0
IHRoaXMgdG8gZXZlciBoYXBwZW4sIGhlbmNlIHRoZSBhc3NlcnQsIGJ1dCB3ZSdyZQotICAgICAg
ICAvLyBiZWluZyBleHRyYSBwYXJhbm9pZCBoZXJlIHNpbmNlIHRoZSBwcmludGluZyBjb2RlIGlz
IHNvIGZyYWdpbGUuIERlbGF5IHRoZSBjbGVhbnVwCi0gICAgICAgIC8vIGZ1cnRoZXIuCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDppbml0aWF0aW5nT3Bl
cmF0aW9uIGFmdGVyRGVsYXk6MF07Ci0gICAgfSBlbHNlIGlmIChbY3VycmVudE9wZXJhdGlvbiB2
aWV3XSA9PSBzZWxmKSB7Ci0gICAgICAgIC8vIEEgbmV3IHByaW50IGpvYiBoYXMgc3RhcnRlZCwg
YnV0IGl0IGlzIHByaW50aW5nIHRoZSBzYW1lIFdlYkhUTUxWaWV3IGFnYWluLiBXZSBkb24ndCBl
eHBlY3QKLSAgICAgICAgLy8gdGhpcyB0byBldmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2VydCwg
YnV0IHdlJ3JlIGJlaW5nIGV4dHJhIHBhcmFub2lkIGhlcmUgc2luY2UgdGhlIHByaW50aW5nIGNv
ZGUgaXMgc28KLSAgICAgICAgLy8gZnJhZ2lsZS4gRG8gbm90aGluZywgYmVjYXVzZSB3ZSBkb24n
dCB3YW50IHRvIGJyZWFrIHRoZSBwcmludCBqb2IgY3VycmVudGx5IGluIHByb2dyZXNzLCBhbmQK
LSAgICAgICAgLy8gdGhlIHByaW50IGpvYiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgaXMgcmVzcG9u
c2libGUgZm9yIGl0cyBvd24gY2xlYW51cC4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIHByaW50IGpvYiB0aGF0IGtpY2tlZCBvZmYg
dGhpcyBkZWxheWVkIGNhbGwgaGFzIGZpbmlzaGVkLCBhbmQgdGhpcyB2aWV3IGlzIG5vdCBiZWlu
ZwotICAgICAgICAvLyBwcmludGVkIGFnYWluLiBXZSBleHBlY3QgdGhhdCBubyBvdGhlciBwcmlu
dCBqb2IgaGFzIHN0YXJ0ZWQuIFNpbmNlIHRoaXMgZGVsYXllZCBjYWxsIHdhc24ndAotICAgICAg
ICAvLyBjYW5jZWxsZWQsIGJlZ2luRG9jdW1lbnQgYW5kIGVuZERvY3VtZW50IG11c3Qgbm90IGhh
dmUgYmVlbiBjYWxsZWQsIGFuZCB3ZSBuZWVkIHRvIGNsZWFuIHVwCi0gICAgICAgIC8vIHRoZSBw
cmludCBtb2RlIGhlcmUuCi0gICAgICAgIEFTU0VSVChjdXJyZW50T3BlcmF0aW9uID09IG5pbCk7
Ci0gICAgICAgIFtzZWxmIF9lbmRQcmludE1vZGVdOwotICAgIH0KLX0KLQotLy8gUmV0dXJuIHRo
ZSBudW1iZXIgb2YgcGFnZXMgYXZhaWxhYmxlIGZvciBwcmludGluZwotLSAoQk9PTClrbm93c1Bh
Z2VSYW5nZTooTlNSYW5nZVBvaW50ZXIpcmFuZ2UKLXsKLSAgICAvLyBNdXN0IGRvIHRoaXMgZXhw
bGljaXQgZGlzcGxheSBoZXJlLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgdmlldyBtaWdodCByZWRp
c3BsYXkgd2hpbGUgdGhlIHByaW50Ci0gICAgLy8gc2hlZXQgd2FzIHVwLCB1c2luZyBwcmludGVy
IGZvbnRzIChhbmQgbG9va2luZyBkaWZmZXJlbnQpLgotICAgIFtzZWxmIGRpc3BsYXlJZk5lZWRl
ZF07Ci0gICAgW1tzZWxmIHdpbmRvd10gc2V0QXV0b2Rpc3BsYXk6Tk9dOwotICAgIAotICAgIC8v
IElmIHdlIGFyZSBhIGZyYW1lc2V0IGp1c3QgcHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUg
b25zY3JlZW4sIG90aGVyd2lzZSByZWxheW91dAotICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFw
ZXIgc2l6ZQotICAgIGZsb2F0IG1pbkxheW91dFdpZHRoID0gMC4wZjsKLSAgICBmbG9hdCBtYXhM
YXlvdXRXaWR0aCA9IDAuMGY7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKCFmcmFtZS0+
ZG9jdW1lbnQoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmlzRnJhbWVTZXQoKSkgewotICAgICAg
ICBmbG9hdCBwYXBlcldpZHRoID0gW3NlbGYgX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9w
ZXJhdGlvbjpbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXV07Ci0gICAgICAgIG1p
bkxheW91dFdpZHRoID0gcGFwZXJXaWR0aCAqIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcjsK
LSAgICAgICAgbWF4TGF5b3V0V2lkdGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdNYXhpbXVtU2hy
aW5rRmFjdG9yOwotICAgIH0KLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdl
V2lkdGg6bWluTGF5b3V0V2lkdGggbWF4aW11bVBhZ2VXaWR0aDptYXhMYXlvdXRXaWR0aCBhZGp1
c3RWaWV3U2l6ZTpZRVNdOyAvLyB3aWxsIHJlbGF5b3V0Ci0gICAgTlNQcmludE9wZXJhdGlvbiAq
cHJpbnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKLSAg
ICAvLyBDZXJ0YWluIHR5cGVzIG9mIGVycm9ycywgaW5jbHVkaW5nIGludmFsaWQgcGFnZSByYW5n
ZXMsIGNhbiBjYXVzZSBiZWdpbkRvY3VtZW50IGFuZAotICAgIC8vIGVuZERvY3VtZW50IHRvIGJl
IHNraXBwZWQgYWZ0ZXIgd2UndmUgcHV0IG91cnNlbHZlcyBpbiBwcmludCBtb2RlIChzZWUgNDE0
NTkwNSkuIEluIHRob3NlIGNhc2VzCi0gICAgLy8gd2UgbmVlZCB0byBnZXQgb3V0IG9mIHByaW50
IG1vZGUgd2l0aG91dCByZWx5aW5nIG9uIGFueSBtb3JlIGNhbGxiYWNrcyBmcm9tIHRoZSBwcmlu
dGluZyBtZWNoYW5pc20uCi0gICAgLy8gSWYgd2UgZ2V0IGFzIGZhciBhcyBiZWdpbkRvY3VtZW50
IHdpdGhvdXQgdHJvdWJsZSwgdGhlbiB0aGlzIGRlbGF5ZWQgcmVxdWVzdCB3aWxsIGJlIGNhbmNl
bGxlZC4KLSAgICAvLyBJZiBub3QgY2FuY2VsbGVkLCB0aGlzIGRlbGF5ZWQgY2FsbCB3aWxsIGJl
IGludm9rZWQgaW4gdGhlIG5leHQgcGFzcyB0aHJvdWdoIHRoZSBtYWluIGV2ZW50IGxvb3AsCi0g
ICAgLy8gd2hpY2ggaXMgYWZ0ZXIgYmVnaW5Eb2N1bWVudCBhbmQgZW5kRG9jdW1lbnQgd291bGQg
YmUgY2FsbGVkLgotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRF
bmRQcmludE1vZGU6KSB3aXRoT2JqZWN0OnByaW50T3BlcmF0aW9uIGFmdGVyRGVsYXk6MF07Ci0g
ICAgW1tzZWxmIF93ZWJWaWV3XSBfYWRqdXN0UHJpbnRpbmdNYXJnaW5zRm9ySGVhZGVyQW5kRm9v
dGVyXTsKLSAgICAKLSAgICAvLyBUaGVyZSBpcyBhIHRoZW9yZXRpY2FsIGNoYW5jZSB0aGF0IHNv
bWVvbmUgY291bGQgZG8gc29tZSBkcmF3aW5nIGJldHdlZW4gaGVyZSBhbmQgZW5kRG9jdW1lbnQs
Ci0gICAgLy8gaWYgc29tZXRoaW5nIGNhdXNlZCBzZXROZWVkc0Rpc3BsYXkgYWZ0ZXIgdGhpcyBw
b2ludC4gSWYgc28sIGl0J3Mgbm90IGEgYmlnIHRyYWdlZHksIGJlY2F1c2UKLSAgICAvLyB5b3Un
ZCBzaW1wbHkgc2VlIHRoZSBwcmludGVyIGZvbnRzIG9uIHNjcmVlbi4gQXMgb2YgdGhpcyB3cml0
aW5nLCB0aGlzIGRvZXMgbm90IGhhcHBlbiB3aXRoIFNhZmFyaS4KLQotICAgIHJhbmdlLT5sb2Nh
dGlvbiA9IDE7Ci0gICAgZmxvYXQgdG90YWxTY2FsZUZhY3RvciA9IFtzZWxmIF9zY2FsZUZhY3Rv
ckZvclByaW50T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXTsKLSAgICBmbG9hdCB1c2VyU2NhbGVG
YWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rvcl07Ci0gICAg
W19wcml2YXRlLT5wYWdlUmVjdHMgcmVsZWFzZV07Ci0gICAgZmxvYXQgZnVsbFBhZ2VIZWlnaHQg
PSBmbG9vcmYoW3NlbGYgX2NhbGN1bGF0ZVByaW50SGVpZ2h0XS90b3RhbFNjYWxlRmFjdG9yKTsK
LSAgICBOU0FycmF5ICpuZXdQYWdlUmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBfY29tcHV0ZVBhZ2VS
ZWN0c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9yCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW50SGVpZ2h0OmZ1bGxQYWdlSGVpZ2h0XTsKLSAgICAKLSAgICAvLyBBcHBLaXQg
Z2V0cyBhbGwgbWVzc2VkIHVwIGlmIHlvdSBnaXZlIGl0IGEgemVyby1sZW5ndGggcGFnZSBjb3Vu
dCAoc2VlIDM1NzYzMzQpLCBzbyBpZiB3ZQotICAgIC8vIGhpdCB0aGF0IGNhc2Ugd2UnbGwgcGFz
cyBhbG9uZyBhIGRlZ2VuZXJhdGUgMSBwaXhlbCBzcXVhcmUgdG8gcHJpbnQuIFRoaXMgd2lsbCBw
cmludAotICAgIC8vIGEgYmxhbmsgcGFnZSAod2l0aCBjb3JyZWN0LWxvb2tpbmcgaGVhZGVyIGFu
ZCBmb290ZXIgaWYgdGhhdCBvcHRpb24gaXMgb24pLCB3aGljaCBtYXRjaGVzCi0gICAgLy8gdGhl
IGJlaGF2aW9yIG9mIElFIGFuZCBDYW1pbm8gYXQgbGVhc3QuCi0gICAgaWYgKFtuZXdQYWdlUmVj
dHMgY291bnRdID09IDApCi0gICAgICAgIG5ld1BhZ2VSZWN0cyA9IFtOU0FycmF5IGFycmF5V2l0
aE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSldXTsK
LSAgICBlbHNlIGlmIChbbmV3UGFnZVJlY3RzIGNvdW50XSA+IDEpIHsKLSAgICAgICAgLy8gSWYg
dGhlIGxhc3QgcGFnZSBpcyBhIHNob3J0IG9ycGhhbiwgdHJ5IGFkanVzdGluZyB0aGUgcHJpbnQg
aGVpZ2h0IHNsaWdodGx5IHRvIHNlZSBpZiB0aGlzIHdpbGwgc3F1ZWV6ZSB0aGUKLSAgICAgICAg
Ly8gY29udGVudCBvbnRvIG9uZSBmZXdlciBwYWdlLiBJZiBpdCBkb2VzLCB1c2UgdGhlIGFkanVz
dGVkIHNjYWxlLiBJZiBub3QsIHVzZSB0aGUgb3JpZ2luYWwgc2NhbGUuCi0gICAgICAgIGZsb2F0
IGxhc3RQYWdlSGVpZ2h0ID0gTlNIZWlnaHQoW1tuZXdQYWdlUmVjdHMgbGFzdE9iamVjdF0gcmVj
dFZhbHVlXSk7Ci0gICAgICAgIGlmIChsYXN0UGFnZUhlaWdodC9mdWxsUGFnZUhlaWdodCA8IExh
c3RQcmludGVkUGFnZU9ycGhhblJhdGlvKSB7Ci0gICAgICAgICAgICBOU0FycmF5ICphZGp1c3Rl
ZFBhZ2VSZWN0cyA9IFtbc2VsZiBfZnJhbWVdIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lk
dGhTY2FsZUZhY3Rvcjp1c2VyU2NhbGVGYWN0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW50SGVpZ2h0OmZ1bGxQYWdlSGVpZ2h0KlByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0
bWVudF07Ci0gICAgICAgICAgICAvLyBVc2UgdGhlIGFkanVzdGVkIHJlY3RzIG9ubHkgaWYgdGhl
IHBhZ2UgY291bnQgd2VudCBkb3duCi0gICAgICAgICAgICBpZiAoW2FkanVzdGVkUGFnZVJlY3Rz
IGNvdW50XSA8IFtuZXdQYWdlUmVjdHMgY291bnRdKSB7Ci0gICAgICAgICAgICAgICAgbmV3UGFn
ZVJlY3RzID0gYWRqdXN0ZWRQYWdlUmVjdHM7Ci0gICAgICAgICAgICAgICAgX3ByaXZhdGUtPmF2
b2lkaW5nUHJpbnRPcnBoYW4gPSBZRVM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgX3ByaXZhdGUtPnBhZ2VSZWN0cyA9IFtuZXdQYWdlUmVjdHMgcmV0YWluXTsK
LSAgICAKLSAgICByYW5nZS0+bGVuZ3RoID0gW19wcml2YXRlLT5wYWdlUmVjdHMgY291bnRdOwot
ICAgIAotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8vIFJldHVybiB0aGUgZHJhd2luZyByZWN0YW5n
bGUgZm9yIGEgcGFydGljdWxhciBwYWdlIG51bWJlcgotLSAoTlNSZWN0KXJlY3RGb3JQYWdlOihO
U0ludGVnZXIpcGFnZQotewotICAgIHJldHVybiBbW19wcml2YXRlLT5wYWdlUmVjdHMgb2JqZWN0
QXRJbmRleDpwYWdlIC0gMV0gcmVjdFZhbHVlXTsKLX0KLQotLSAodm9pZClkcmF3UGFnZUJvcmRl
cldpdGhTaXplOihOU1NpemUpYm9yZGVyU2l6ZQotewotICAgIEFTU0VSVChOU0VxdWFsU2l6ZXMo
Ym9yZGVyU2l6ZSwgW1tbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludElu
Zm9dIHBhcGVyU2l6ZV0pKTsgICAgCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBfZHJhd0hlYWRlckFu
ZEZvb3Rlcl07Ci19Ci0KLS0gKHZvaWQpYmVnaW5Eb2N1bWVudAotewotICAgIEB0cnkgewotICAg
ICAgICAvLyBGcm9tIG5vdyBvbiB3ZSdsbCBnZXQgYSBjaGFuY2UgdG8gY2FsbCBfZW5kUHJpbnRN
b2RlIGluIGVpdGhlciBiZWdpbkRvY3VtZW50IG9yCi0gICAgICAgIC8vIGVuZERvY3VtZW50LCBz
byB3ZSBjYW4gY2FuY2VsIHRoZSAianVzdCBpbiBjYXNlIiBwZW5kaW5nIGNhbGwuCi0gICAgICAg
IFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9y
OkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9kZTopCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6W05TUHJpbnRPcGVyYXRpb24gY3Vy
cmVudE9wZXJhdGlvbl1dOwotICAgICAgICBbc3VwZXIgYmVnaW5Eb2N1bWVudF07Ci0gICAgfSBA
Y2F0Y2ggKE5TRXhjZXB0aW9uICpsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICAvLyBFeGNlcHRp
b24gZHVyaW5nIFtzdXBlciBiZWdpbkRvY3VtZW50XSBtZWFucyB0aGF0IGVuZERvY3VtZW50IHdp
bGwgbm90IGdldCBjYWxsZWQsCi0gICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gY2xlYW4gdXAgb3Vy
ICJwcmludCBtb2RlIiBoZXJlLgotICAgICAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKLSAgICB9
Ci19Ci0KLS0gKHZvaWQpZW5kRG9jdW1lbnQKLXsKLSAgICBbc3VwZXIgZW5kRG9jdW1lbnRdOwot
ICAgIC8vIE5vdGUgc2FkbHkgYXQgdGhpcyBwb2ludCBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHREcmF3aW5nVG9TY3JlZW5dIGlzIHN0aWxsIE5PIAotICAgIFtzZWxmIF9lbmRQcmlu
dE1vZGVdOwotfQotCi0tICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAotewotICAgIC8v
IFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4g
YSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWln
aHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcK
LSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHBy
b2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0g
YXV0b3JlbGVhc2VdOwotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9y
ID0gc2VsZjsKLSAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5
RG93bkV2ZW50ID09IGV2ZW50KTsKLQotICAgIEJPT0wgY2FsbFN1cGVyID0gTk87Ci0KLSAgICBb
X3ByaXZhdGUtPmtleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+a2V5RG93bkV2
ZW50ID0gW2V2ZW50IHJldGFpbl07Ci0KLSAgICBCT09MIGNvbXBsZXRpb25Qb3B1cFdhc09wZW4g
PSBfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBw
b3B1cFdpbmRvd0lzT3Blbl07Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7Ci0gICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgY29yZUZyYW1lICYmIGNv
cmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkgewotICAgICAgICAvLyBX
ZWJDb3JlIHByb2Nlc3NlZCBhIGtleSBldmVudCwgYmFpbCBvbiBhbnkgcHJlZXhpc3RpbmcgY29t
cGxldGU6IFVJCi0gICAgICAgIGlmIChjb21wbGV0aW9uUG9wdXBXYXNPcGVuKQotICAgICAgICAg
ICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVM
ZWZ0Ok5PXTsKLSAgICB9IGVsc2UgaWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgfHwgIVtf
cHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5RG93bjpldmVudF0pIHsKLSAgICAgICAg
Ly8gTm90IGNvbnN1bWVkIGJ5IGNvbXBsZXRlOiBwb3B1cCB3aW5kb3cKLSAgICAgICAgW19wcml2
YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsK
LSAgICAgICAgY2FsbFN1cGVyID0gWUVTOwotICAgIH0KLSAgICBpZiAoY2FsbFN1cGVyKQotICAg
ICAgICBbc3VwZXIga2V5RG93bjpldmVudF07Ci0gICAgZWxzZQotICAgICAgICBbTlNDdXJzb3Ig
c2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOllFU107Ci19Ci0KLS0gKHZvaWQpa2V5VXA6KE5TRXZl
bnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRv
IHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0
Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFu
ZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0
aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4K
LSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgQk9PTCBldmVudFdhc1Nl
bnRUb1dlYkNvcmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7Ci0KLSAgICBS
ZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmIChjb3JlRnJhbWUgJiYgIWV2
ZW50V2FzU2VudFRvV2ViQ29yZSkKLSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
a2V5RXZlbnQoZXZlbnQpOwotICAgIGVsc2UKLSAgICAgICAgW3N1cGVyIGtleVVwOmV2ZW50XTsK
LX0KLQotLSAodm9pZClmbGFnc0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRo
ZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBu
ZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQg
cmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAg
ICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2Js
ZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0
b3JlbGVhc2VdOwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
Ci0gICAgaWYgKGNvcmVGcmFtZSkKLSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgUmV0YWluUHRyPFdlYkhU
TUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKLQotICAgIHVuc2lnbmVkIHNob3J0IGtleUNv
ZGUgPSBbZXZlbnQga2V5Q29kZV07Ci0KLSAgICAvL0Rvbid0IG1ha2UgYW4gZXZlbnQgZnJvbSB0
aGUgbnVtIGxvY2sgYW5kIGZ1bmN0aW9uIGtleXMKLSAgICBpZiAoY29yZUZyYW1lICYmIGtleUNv
ZGUgIT0gMCAmJiBrZXlDb2RlICE9IDEwICYmIGtleUNvZGUgIT0gNjMpIHsKLSAgICAgICAgY29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2
ZW50KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIFtzdXBlciBmbGFn
c0NoYW5nZWQ6ZXZlbnRdOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCi17Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAg
IGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOwotICAgICAg
ICBpZiAoYWNjVHJlZSkKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3Q6YWNjVHJlZV07Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIHJldHVybiBbc3Vw
ZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOwotfQotCi0tIChp
ZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAotewotICAgIGlkIGFjY1RyZWUgPSBbW3Nl
bGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOwotICAgIGlmIChhY2NUcmVlKQotICAgICAg
ICByZXR1cm4gW2FjY1RyZWUgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2lu
dAotewotICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVd
OwotICAgIGlmIChhY2NUcmVlKSB7Ci0gICAgICAgIE5TUG9pbnQgd2luZG93Q29vcmQgPSBbW3Nl
bGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKLSAgICAgICAgcmV0dXJuIFth
Y2NUcmVlIGFjY2Vzc2liaWxpdHlIaXRUZXN0OltzZWxmIGNvbnZlcnRQb2ludDp3aW5kb3dDb29y
ZCBmcm9tVmlldzpuaWxdXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkKV9h
Y2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3VidmlldzooTlNWaWV3ICopc3VidmlldwotewotICAgIGlk
IGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOwotICAgIGlmICgh
YWNjVHJlZSkKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgaWQgcGFyZW50ID0gW2FjY1RyZWUg
X2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OnN1YnZpZXddOwotICAgIGlmICghcGFyZW50
KQotICAgICAgICByZXR1cm4gc2VsZjsKLSAgICByZXR1cm4gcGFyZW50OwotfQotCi0tICh2b2lk
KWNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRf
UFJPTE9HVUUKLQotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KSkKLSAgICAgICAgY29yZUZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50Ojph
bGlnbkNlbnRlckFsd2F5cyk7Ci19Ci0KLS0gKE5TRGF0YSAqKV9zZWxlY3Rpb25TdGFydEZvbnRB
dHRyaWJ1dGVzQXNSVEYKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIngiCi0gICAgICAgIGF0dHJpYnV0ZXM6Y29yZUZy
YW1lID8gY29yZUZyYW1lLT5mb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgOiBuaWxd
OwotICAgIE5TRGF0YSAqZGF0YSA9IFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAs
IFtzdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgW3N0cmluZyBy
ZWxlYXNlXTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2ZvbnRB
dHRyaWJ1dGVzRnJvbUZvbnRQYXN0ZWJvYXJkCi17Ci0gICAgTlNQYXN0ZWJvYXJkICpmb250UGFz
dGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRm9udFBib2FyZF07
Ci0gICAgaWYgKGZvbnRQYXN0ZWJvYXJkID09IG5pbCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBOU0RhdGEgKmRhdGEgPSBbZm9udFBhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNGb250UGJvYXJk
VHlwZV07Ci0gICAgaWYgKGRhdGEgPT0gbmlsIHx8IFtkYXRhIGxlbmd0aF0gPT0gMCkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAvLyBOU1RleHRWaWV3IGRvZXMgc29tZXRoaW5nIG1vcmUgZWZm
aWNpZW50IGJ5IHBhcnNpbmcgdGhlIGF0dHJpYnV0ZXMgb25seSwgYnV0IHRoYXQncyBub3QgYXZh
aWxhYmxlIGluIEFQSS4KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6ZGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6
TlVMTF0gYXV0b3JlbGVhc2VdOwotICAgIGlmIChzdHJpbmcgPT0gbmlsIHx8IFtzdHJpbmcgbGVu
Z3RoXSA9PSAwKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbc3RyaW5nIGZvbnRB
dHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCAxKV07Ci19Ci0KLS0gKERPTUNTU1N0eWxl
RGVjbGFyYXRpb24gKilfZW1wdHlTdHlsZQotewotICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0g
RE9NRG9jdW1lbnRdIGNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb25dOwotfQotCi0tIChOU1N0cmlu
ZyAqKV9jb2xvckFzU3RyaW5nOihOU0NvbG9yICopY29sb3IKLXsKLSAgICBOU0NvbG9yICpyZ2JD
b2xvciA9IFtjb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNw
YWNlXTsKLSAgICAvLyBGSVhNRTogSWYgY29sb3IgaXMgbm9uLW5pbCBhbmQgcmdiQ29sb3IgaXMg
bmlsLCB0aGF0IG1lYW5zIHdlIGdvdCBzb21lIGtpbmQKLSAgICAvLyBvZiBmYW5jeSBjb2xvciB0
aGF0IGNhbid0IGJlIGNvbnZlcnRlZCB0byBSR0IuIENoYW5naW5nIHRoYXQgdG8gInRyYW5zcGFy
ZW50IgotICAgIC8vIG1pZ2h0IG5vdCBiZSBncmVhdCwgYnV0IGl0J3MgcHJvYmFibHkgT0suCi0g
ICAgaWYgKHJnYkNvbG9yID09IG5pbCkKLSAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJlbnQiOwot
ICAgIGZsb2F0IHIgPSBbcmdiQ29sb3IgcmVkQ29tcG9uZW50XTsKLSAgICBmbG9hdCBnID0gW3Jn
YkNvbG9yIGdyZWVuQ29tcG9uZW50XTsKLSAgICBmbG9hdCBiID0gW3JnYkNvbG9yIGJsdWVDb21w
b25lbnRdOwotICAgIGZsb2F0IGEgPSBbcmdiQ29sb3IgYWxwaGFDb21wb25lbnRdOwotICAgIGlm
IChhID09IDApCi0gICAgICAgIHJldHVybiBAInRyYW5zcGFyZW50IjsKLSAgICBpZiAociA9PSAw
ICYmIGcgPT0gMCAmJiBiID09IDAgJiYgYSA9PSAxKQotICAgICAgICByZXR1cm4gQCJibGFjayI7
Ci0gICAgaWYgKHIgPT0gMSAmJiBnID09IDEgJiYgYiA9PSAxICYmIGEgPT0gMSkKLSAgICAgICAg
cmV0dXJuIEAid2hpdGUiOwotICAgIC8vIEZJWE1FOiBMb3RzIG1vcmUgbmFtZWQgY29sb3JzLiBN
YXliZSB3ZSBjb3VsZCB1c2UgdGhlIHRhYmxlIGluIFdlYkNvcmU/Ci0gICAgaWYgKGEgPT0gMSkK
LSAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiKCUuMGYsJS4w
ZiwlLjBmKSIsIHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdOwotICAgIHJldHVybiBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYmEoJS4wZiwlLjBmLCUuMGYsJWYpIiwgciAqIDI1NSwg
ZyAqIDI1NSwgYiAqIDI1NSwgYV07Ci19Ci0KLS0gKE5TU3RyaW5nICopX3NoYWRvd0FzU3RyaW5n
OihOU1NoYWRvdyAqKXNoYWRvdwotewotICAgIGlmIChzaGFkb3cgPT0gbmlsKQotICAgICAgICBy
ZXR1cm4gQCJub25lIjsKLSAgICBOU1NpemUgb2Zmc2V0ID0gW3NoYWRvdyBzaGFkb3dPZmZzZXRd
OwotICAgIGZsb2F0IGJsdXJSYWRpdXMgPSBbc2hhZG93IHNoYWRvd0JsdXJSYWRpdXNdOwotICAg
IGlmIChvZmZzZXQud2lkdGggPT0gMCAmJiBvZmZzZXQuaGVpZ2h0ID09IDAgJiYgYmx1clJhZGl1
cyA9PSAwKQotICAgICAgICByZXR1cm4gQCJub25lIjsKLSAgICBOU0NvbG9yICpjb2xvciA9IFtz
aGFkb3cgc2hhZG93Q29sb3JdOwotICAgIGlmIChjb2xvciA9PSBuaWwpCi0gICAgICAgIHJldHVy
biBAIm5vbmUiOwotICAgIC8vIEZJWE1FOiBIYW5kbGUgbm9uLWludGVncmFsIHZhbHVlcyBoZXJl
PwotICAgIGlmIChibHVyUmFkaXVzID09IDApCi0gICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVAICUuMGZweCAlLjBmcHgiLCBbc2VsZiBfY29sb3JBc1N0cmluZzpj
b2xvcl0sIG9mZnNldC53aWR0aCwgb2Zmc2V0LmhlaWdodF07Ci0gICAgcmV0dXJuIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJS4wZnB4ICUuMGZweCAlLjBmcHgiLCBbc2VsZiBfY29s
b3JBc1N0cmluZzpjb2xvcl0sIG9mZnNldC53aWR0aCwgb2Zmc2V0LmhlaWdodCwgYmx1clJhZGl1
c107Ci19Ci0KLS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udEF0dHJp
YnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkKLXsKLSAgICBET01DU1NTdHlsZURlY2xh
cmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKLQotICAgIE5TQ29sb3IgKmNvbG9y
ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV07Ci0gICAgW3N0eWxlIHNldEJhY2tncm91bmRDb2xvcjpbc2VsZiBfY29sb3JBc1N0cmluZzpj
b2xvcl1dOwotCi0gICAgTlNGb250ICpmb250ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5T
Rm9udEF0dHJpYnV0ZU5hbWVdOwotICAgIGlmICghZm9udCkgewotICAgICAgICBbc3R5bGUgc2V0
Rm9udEZhbWlseTpAIkhlbHZldGljYSJdOwotICAgICAgICBbc3R5bGUgc2V0Rm9udFNpemU6QCIx
MnB4Il07Ci0gICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAibm9ybWFsIl07Ci0gICAgICAg
IFtzdHlsZSBzZXRGb250U3R5bGU6QCJub3JtYWwiXTsKLSAgICB9IGVsc2UgewotICAgICAgICBO
U0ZvbnRNYW5hZ2VyICpmbSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAg
ICAgICAgLy8gRklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYg
d2Ugd2FudCB0byBoYW5kbGUgZmFtaWx5IG5hbWVzCi0gICAgICAgIC8vIHdpdGggY2hhcmFjdGVy
cyBsaWtlIHNpbmdsZSBxdW90ZSBvciBiYWNrc2xhc2ggaW4gdGhlaXIgbmFtZXMuCi0gICAgICAg
IFtzdHlsZSBzZXRGb250RmFtaWx5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJyVAJyIs
IFtmb250IGZhbWlseU5hbWVdXV07Ci0gICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiUwLmZweCIsIFtmb250IHBvaW50U2l6ZV1dXTsKLSAgICAg
ICAgLy8gRklYTUU6IE1hcCB0byB0aGUgZW50aXJlIHJhbmdlIG9mIENTUyB3ZWlnaHQgdmFsdWVz
LgotICAgICAgICBpZiAoW2ZtIHdlaWdodE9mRm9udDpmb250XSA+PSBNSU5fQk9MRF9XRUlHSFQp
Ci0gICAgICAgICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpAImJvbGQiXTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6QCJub3JtYWwiXTsKLSAgICAgICAg
aWYgKFtmbSB0cmFpdHNPZkZvbnQ6Zm9udF0gJiBOU0l0YWxpY0ZvbnRNYXNrKQotICAgICAgICAg
ICAgW3N0eWxlIHNldEZvbnRTdHlsZTpAIml0YWxpYyJdOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOkAibm9ybWFsIl07Ci0gICAgfQotCi0gICAgY29sb3Ig
PSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1l
XTsKLSAgICBbc3R5bGUgc2V0Q29sb3I6Y29sb3IgPyBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xv
cl0gOiAoTlNTdHJpbmcgKilAImJsYWNrIl07Ci0KLSAgICBOU1NoYWRvdyAqc2hhZG93ID0gW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07Ci0gICAgW3N0eWxl
IHNldFRleHRTaGFkb3c6W3NlbGYgX3NoYWRvd0FzU3RyaW5nOnNoYWRvd11dOwotCi0gICAgaW50
IHN0cmlrZXRocm91Z2hJbnQgPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhy
b3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotCi0gICAgaW50IHN1cGVyc2NyaXB0
SW50ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFt
ZV0gaW50VmFsdWVdOwotICAgIGlmIChzdXBlcnNjcmlwdEludCA+IDApCi0gICAgICAgIFtzdHls
ZSBzZXRWZXJ0aWNhbEFsaWduOkAic3VwZXIiXTsKLSAgICBlbHNlIGlmIChzdXBlcnNjcmlwdElu
dCA8IDApCi0gICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3ViIl07Ci0gICAgZWxz
ZQotICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAImJhc2VsaW5lIl07Ci0gICAgaW50
IHVuZGVybGluZUludCA9IFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHls
ZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICAvLyBGSVhNRTogVW5kZXJsaW5lIHdpbnMg
aGVyZSBpZiB3ZSBoYXZlIGJvdGggKHNlZSBidWcgMzc5MDQ0MykuCi0gICAgaWYgKHN0cmlrZXRo
cm91Z2hJbnQgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUgJiYgdW5kZXJsaW5lSW50ID09IE5TVW5k
ZXJsaW5lU3R5bGVOb25lKQotICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKLSAg
ICBlbHNlIGlmICh1bmRlcmxpbmVJbnQgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCi0gICAgICAg
IFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIg
dmFsdWU6QCJsaW5lLXRocm91Z2giIHByaW9yaXR5OkAiIl07Ci0gICAgZWxzZQotICAgICAgICBb
c3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZh
bHVlOkAidW5kZXJsaW5lIiBwcmlvcml0eTpAIiJdOwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQot
Ci0tICh2b2lkKV9hcHBseVN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCi17Ci0gICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5hcHBseVN0eWxlVG9TZWxlY3Rpb24oY29yZShzdHlsZSksIHVuZG9BY3Rp
b24pOwotfQotCi0tICh2b2lkKV9hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb246KERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRv
QWN0aW9uCi17Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
KQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxl
Y3Rpb24oY29yZShzdHlsZSksIHVuZG9BY3Rpb24pOwotfQotCi0tIChCT09MKV9oYW5kbGVTdHls
ZUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIEFTU0VSVChbc2VsZiBfd2Vi
Vmlld10pOwotICAgIGlmICghW1tbc2VsZiBfd2ViVmlld10gcHJlZmVyZW5jZXNdIHJlc3BlY3RT
dGFuZGFyZFN0eWxlS2V5RXF1aXZhbGVudHNdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0g
ICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBp
ZiAoKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TRGV2aWNlSW5kZXBlbmRlbnRNb2RpZmllckZs
YWdzTWFzaykgIT0gTlNDb21tYW5kS2V5TWFzaykKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAot
ICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbZXZlbnQgY2hhcmFjdGVyc107Ci0gICAgaWYgKFtzdHJp
bmcgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImIiXSA9PSBOU09yZGVyZWRTYW1lKSB7Ci0gICAg
ICAgIFtzZWxmIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZToiVG9nZ2xlQm9sZCJdOwotICAgICAg
ICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlOkAiaSJdID09IE5TT3JkZXJlZFNhbWUpIHsKLSAgICAgICAgW3NlbGYgZXhlY3V0ZUNvcmVD
b21tYW5kQnlOYW1lOiJUb2dnbGVJdGFsaWMiXTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50
OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9u
ZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAg
IC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFp
bmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJl
dmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0
IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIGlmIChbc2Vs
ZiBfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuIFlFUzsK
LSAgICAKLSAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93
bkV2ZW50ID09IGV2ZW50KTsKLSAgICBCT09MIHJldCA9IE5POwotCi0gICAgW19wcml2YXRlLT5r
ZXlEb3duRXZlbnQgcmVsZWFzZV07Ci0gICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVu
dCByZXRhaW5dOwotICAgIAotICAgIFtzZWxmIHJldGFpbl07Ci0KLSAgICAvLyBQYXNzIGNvbW1h
bmQta2V5IGNvbWJvcyB0aHJvdWdoIFdlYkNvcmUgaWYgdGhlcmUgaXMgYSBrZXkgYmluZGluZyBh
dmFpbGFibGUgZm9yCi0gICAgLy8gdGhpcyBldmVudC4gVGhpcyBsZXRzIHdlYiBwYWdlcyBoYXZl
IGEgY3JhY2sgYXQgaW50ZXJjZXB0aW5nIGNvbW1hbmQtbW9kaWZpZWQga2V5cHJlc3Nlcy4KLSAg
ICAvLyBCdXQgZG9uJ3QgZG8gaXQgaWYgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGV2ZW50
LgotICAgIC8vIFByZXNzaW5nIEVzYyByZXN1bHRzIGluIGEgZmFrZSBldmVudCBiZWluZyBzZW50
IC0gZG9uJ3QgcGFzcyBpdCB0byBXZWJDb3JlLgotICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJD
b3JlICYmIGV2ZW50ID09IFtOU0FwcCBjdXJyZW50RXZlbnRdICYmIHNlbGYgPT0gW1tzZWxmIHdp
bmRvd10gZmlyc3RSZXNwb25kZXJdKQotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkKLSAgICAgICAgICAgIHJldCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
a2V5RXZlbnQoZXZlbnQpOwotCi0gICAgaWYgKCFyZXQpCi0gICAgICAgIHJldCA9IFtzdXBlciBw
ZXJmb3JtS2V5RXF1aXZhbGVudDpldmVudF07Ci0KLSAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAK
LSAgICByZXR1cm4gcmV0OwotfQotCi0tICh2b2lkKWNvcHlGb250OihpZClzZW5kZXIKLXsKLSAg
ICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICAvLyBQdXQgUlRGIHdpdGggZm9udCBhdHRyaWJ1dGVz
IG9uIHRoZSBwYXN0ZWJvYXJkLgotICAgIC8vIE1heWJlIGxhdGVyIHdlIHNob3VsZCBhZGQgYSBw
YXN0ZWJvYXJkIHR5cGUgdGhhdCBjb250YWlucyBDU1MgdGV4dCBmb3IgIm5hdGl2ZSIgY29weSBh
bmQgcGFzdGUgZm9udC4KLSAgICBOU1Bhc3RlYm9hcmQgKmZvbnRQYXN0ZWJvYXJkID0gW05TUGFz
dGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNGb250UGJvYXJkXTsKLSAgICBbZm9udFBhc3Rl
Ym9hcmQgZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU0ZvbnRQYm9hcmRU
eXBlXSBvd25lcjpuaWxdOwotICAgIFtmb250UGFzdGVib2FyZCBzZXREYXRhOltzZWxmIF9zZWxl
Y3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVzQXNSVEZdIGZvclR5cGU6TlNGb250UGJvYXJkVHlwZV07
Ci19Ci0KLS0gKHZvaWQpcGFzdGVGb250OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xP
R1VFCi0KLSAgICAvLyBSZWFkIFJURiB3aXRoIGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBwYXN0
ZWJvYXJkLgotICAgIC8vIE1heWJlIGxhdGVyIHdlIHNob3VsZCBhZGQgYSBwYXN0ZWJvYXJkIHR5
cGUgdGhhdCBjb250YWlucyBDU1MgdGV4dCBmb3IgIm5hdGl2ZSIgY29weSBhbmQgcGFzdGUgZm9u
dC4KLSAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Gb250
QXR0cmlidXRlczpbc2VsZiBfZm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmRdXSB3aXRo
VW5kb0FjdGlvbjpFZGl0QWN0aW9uUGFzdGVGb250XTsKLX0KLQotLSAodm9pZClwYXN0ZUFzUmlj
aFRleHQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIFNpbmNl
IHJpY2ggdGV4dCBhbHdheXMgYmVhdHMgcGxhaW4gdGV4dCB3aGVuIGJvdGggYXJlIG9uIHRoZSBw
YXN0ZWJvYXJkLCBpdCdzIG5vdAotICAgIC8vIGNsZWFyIGhvdyB0aGlzIGlzIGRpZmZlcmVudCBm
cm9tIHBsYWluIG9sZCBwYXN0ZS4KLSAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQ
YXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpOT107Ci19Ci0KLS0g
KE5TRm9udCAqKV9vcmlnaW5hbEZvbnRBCi17Ci0gICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl0gZm9udFdpdGhGYW1pbHk6QCJIZWx2ZXRpY2EiIHRyYWl0czowIHdl
aWdodDpTVEFOREFSRF9XRUlHSFQgc2l6ZToxMC4wZl07Ci19Ci0KLS0gKE5TRm9udCAqKV9vcmln
aW5hbEZvbnRCCi17Ci0gICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl0gZm9udFdpdGhGYW1pbHk6QCJUaW1lcyIgdHJhaXRzOk5TRm9udEl0YWxpY1RyYWl0IHdlaWdo
dDpTVEFOREFSRF9CT0xEX1dFSUdIVCBzaXplOjEyLjBmXTsKLX0KLQotLSAodm9pZClfYWRkVG9T
dHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZv
bnRCOihOU0ZvbnQgKiliCi17Ci0gICAgLy8gU2luY2UgdGhlcmUncyBubyB3YXkgdG8gZGlyZWN0
bHkgYXNrIE5TRm9udE1hbmFnZXIgd2hhdCBzdHlsZSBjaGFuZ2UgaXQncyBnb2luZyB0byBkbwot
ICAgIC8vIHdlIGluc3RlYWQgcGFzcyB0d28gInNwZWNpbWVuIiBmb250cyB0byBpdCBhbmQgbGV0
IGl0IGNoYW5nZSB0aGVtLiBXZSB0aGVuIGRlZHVjZSB3aGF0Ci0gICAgLy8gc3R5bGUgY2hhbmdl
IGl0IHdhcyBkb2luZyBieSBsb29raW5nIGF0IHdoYXQgaGFwcGVuZWQgdG8gZWFjaCBvZiB0aGUg
dHdvIGZvbnRzLgotICAgIC8vIFNvIGlmIGl0IHdhcyBtYWtpbmcgdGhlIHRleHQgYm9sZCwgYm90
aCBmb250cyB3aWxsIGJlIGJvbGQgYWZ0ZXIgdGhlIGZhY3QuCi0KLSAgICBpZiAoYSA9PSBuaWwg
fHwgYiA9PSBuaWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TRm9udE1hbmFnZXIgKmZtID0g
W05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotCi0gICAgTlNGb250ICpvYSA9IFtz
ZWxmIF9vcmlnaW5hbEZvbnRBXTsKLQotICAgIE5TU3RyaW5nICphRmFtaWx5TmFtZSA9IFthIGZh
bWlseU5hbWVdOwotICAgIE5TU3RyaW5nICpiRmFtaWx5TmFtZSA9IFtiIGZhbWlseU5hbWVdOwot
Ci0gICAgaW50IGFQb2ludFNpemUgPSAoaW50KVthIHBvaW50U2l6ZV07Ci0gICAgaW50IGJQb2lu
dFNpemUgPSAoaW50KVtiIHBvaW50U2l6ZV07Ci0KLSAgICBpbnQgYVdlaWdodCA9IFtmbSB3ZWln
aHRPZkZvbnQ6YV07Ci0gICAgaW50IGJXZWlnaHQgPSBbZm0gd2VpZ2h0T2ZGb250OmJdOwotCi0g
ICAgQk9PTCBhSXNJdGFsaWMgPSAoW2ZtIHRyYWl0c09mRm9udDphXSAmIE5TSXRhbGljRm9udE1h
c2spICE9IDA7Ci0gICAgQk9PTCBiSXNJdGFsaWMgPSAoW2ZtIHRyYWl0c09mRm9udDpiXSAmIE5T
SXRhbGljRm9udE1hc2spICE9IDA7Ci0KLSAgICBpZiAoW2FGYW1pbHlOYW1lIGlzRXF1YWxUb1N0
cmluZzpiRmFtaWx5TmFtZV0pIHsKLSAgICAgICAgTlNTdHJpbmcgKmZhbWlseU5hbWVGb3JDU1Mg
PSBhRmFtaWx5TmFtZTsKLQotICAgICAgICAvLyBUaGUgZmFtaWx5IG5hbWUgbWF5IG5vdCBiZSBz
cGVjaWZpYyBlbm91Z2ggdG8gZ2V0IHVzIHRoZSBmb250IHNwZWNpZmllZC4KLSAgICAgICAgLy8g
SW4gc29tZSBjYXNlcywgdGhlIG9ubHkgd2F5IHRvIGdldCBleGFjdGx5IHdoYXQgd2UgYXJlIGxv
b2tpbmcgZm9yIGlzIHRvIHVzZQotICAgICAgICAvLyB0aGUgUG9zdHNjcmlwdCBuYW1lLgotICAg
ICAgICAKLSAgICAgICAgLy8gRmluZCB0aGUgZm9udCB0aGUgc2FtZSB3YXkgdGhlIHJlbmRlcmlu
ZyBjb2RlIHdvdWxkIGxhdGVyIGlmIGl0IGVuY291bnRlcmVkIHRoaXMgQ1NTLgotICAgICAgICBO
U0ZvbnRUcmFpdE1hc2sgdHJhaXRzID0gYUlzSXRhbGljID8gTlNGb250SXRhbGljVHJhaXQgOiAw
OwotICAgICAgICBOU0ZvbnQgKmZvdW5kRm9udCA9IFdlYkNvcmVGaW5kRm9udChhRmFtaWx5TmFt
ZSwgdHJhaXRzLCBhV2VpZ2h0LCBhUG9pbnRTaXplKTsKLQotICAgICAgICAvLyBJZiB3ZSBkb24n
dCBmaW5kIGEgZm9udCB3aXRoIHRoZSBzYW1lIFBvc3RzY3JpcHQgbmFtZSwgdGhlbiB3ZSdsbCBo
YXZlIHRvIHVzZSB0aGUKLSAgICAgICAgLy8gUG9zdHNjcmlwdCBuYW1lIHRvIG1ha2UgdGhlIENT
UyBzcGVjaWZpYyBlbm91Z2guCi0gICAgICAgIGlmICghW1tmb3VuZEZvbnQgZm9udE5hbWVdIGlz
RXF1YWxUb1N0cmluZzpbYSBmb250TmFtZV1dKQotICAgICAgICAgICAgZmFtaWx5TmFtZUZvckNT
UyA9IFthIGZvbnROYW1lXTsKLQotICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3Rp
Y2F0ZWQgZXNjYXBpbmcgY29kZSBpZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKLSAg
ICAgICAgLy8gd2l0aCBjaGFyYWN0ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBp
biB0aGVpciBuYW1lcy4KLSAgICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCInJUAnIiwgZmFtaWx5TmFtZUZvckNTU11dOwotICAgIH0KLQotICAg
IGludCBzb2EgPSAoaW50KVtvYSBwb2ludFNpemVdOwotICAgIGlmIChhUG9pbnRTaXplID09IGJQ
b2ludFNpemUpCi0gICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVkcHgiLCBhUG9pbnRTaXplXV07Ci0gICAgZWxzZSBpZiAoYVBvaW50U2l6ZSA8
IHNvYSkKLSAgICAgICAgW3N0eWxlIF9zZXRGb250U2l6ZURlbHRhOkAiLTFweCJdOwotICAgIGVs
c2UgaWYgKGFQb2ludFNpemUgPiBzb2EpCi0gICAgICAgIFtzdHlsZSBfc2V0Rm9udFNpemVEZWx0
YTpAIjFweCJdOwotCi0gICAgaWYgKGFXZWlnaHQgPT0gYldlaWdodCkKLSAgICAgICAgW3N0eWxl
IHNldEZvbnRXZWlnaHQ6YVdlaWdodCA+IE1JTl9CT0xEX1dFSUdIVCA/IEAiYm9sZCIgOiBAIm5v
cm1hbCJdOwotCi0gICAgaWYgKGFJc0l0YWxpYyA9PSBiSXNJdGFsaWMpCi0gICAgICAgIFtzdHls
ZSBzZXRGb250U3R5bGU6YUlzSXRhbGljID8gQCJpdGFsaWMiIDogIEAibm9ybWFsIl07Ci19Ci0K
LS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udE1hbmFnZXJPcGVyYXRp
b24KLXsKLSAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0
eWxlXTsKLQotICAgIE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9u
dE1hbmFnZXJdOwotCi0gICAgTlNGb250ICpvYSA9IFtzZWxmIF9vcmlnaW5hbEZvbnRBXTsKLSAg
ICBOU0ZvbnQgKm9iID0gW3NlbGYgX29yaWdpbmFsRm9udEJdOyAgICAKLSAgICBbc2VsZiBfYWRk
VG9TdHlsZTpzdHlsZSBmb250QTpbZm0gY29udmVydEZvbnQ6b2FdIGZvbnRCOltmbSBjb252ZXJ0
Rm9udDpvYl1dOwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0tICh2b2lkKWNoYW5nZUZvbnQ6
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9hcHBseVN0
eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRnJvbUZvbnRNYW5hZ2VyT3BlcmF0aW9uXSB3aXRo
VW5kb0FjdGlvbjpFZGl0QWN0aW9uU2V0Rm9udF07Ci19Ci0KLS0gKERPTUNTU1N0eWxlRGVjbGFy
YXRpb24gKilfc3R5bGVGb3JBdHRyaWJ1dGVDaGFuZ2U6KGlkKXNlbmRlcgotewotICAgIERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOwotCi0gICAgTlNT
aGFkb3cgKnNoYWRvdyA9IFtbTlNTaGFkb3cgYWxsb2NdIGluaXRdOwotICAgIFtzaGFkb3cgc2V0
U2hhZG93T2Zmc2V0Ok5TTWFrZVNpemUoMSwgMSldOwotCi0gICAgTlNEaWN0aW9uYXJ5ICpvYSA9
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgW3Nl
bGYgX29yaWdpbmFsRm9udEFdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLAotICAgICAgICBuaWxdOwot
ICAgIE5TRGljdGlvbmFyeSAqb2IgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6Ci0gICAgICAgIFtOU0NvbG9yIGJsYWNrQ29sb3JdLCBOU0JhY2tncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRCXSwgTlNGb250QXR0
cmlidXRlTmFtZSwKLSAgICAgICAgW05TQ29sb3Igd2hpdGVDb2xvcl0sIE5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZSwKLSAgICAgICAgc2hhZG93LCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUs
Ci0gICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVd
LCBOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoSW50OjFdLCBOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZSwKLSAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0sIE5TVW5kZXJsaW5l
U3R5bGVBdHRyaWJ1dGVOYW1lLAotICAgICAgICBuaWxdOwotCi0gICAgW3NoYWRvdyByZWxlYXNl
XTsKLQotI2lmIDAKLQotTlNPYmxpcXVlbmVzc0F0dHJpYnV0ZU5hbWUgICAgICAgIC8qIGZsb2F0
OyBza2V3IHRvIGJlIGFwcGxpZWQgdG8gZ2x5cGhzLCBkZWZhdWx0IDA6IG5vIHNrZXcgKi8KLSAg
ICAvLyBmb250LXN0eWxlLCBidXQgdGhhdCBpcyBqdXN0IGFuIG9uLW9mZiBzd2l0Y2gKLQotTlNF
eHBhbnNpb25BdHRyaWJ1dGVOYW1lICAgICAgICAgIC8qIGZsb2F0OyBsb2cgb2YgZXhwYW5zaW9u
IGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIGdseXBocywgZGVmYXVsdCAwOiBubyBleHBhbnNpb24g
Ki8KLSAgICAvLyBmb250LXN0cmV0Y2g/Ci0KLU5TS2VybkF0dHJpYnV0ZU5hbWUgICAgICAgICAg
ICAgICAvKiBmbG9hdCwgYW1vdW50IHRvIG1vZGlmeSBkZWZhdWx0IGtlcm5pbmcsIGlmIDAsIGtl
cm5pbmcgb2ZmICovCi0gICAgLy8gbGV0dGVyLXNwYWNpbmc/IHByb2JhYmx5IG5vdCBnb29kIGVu
b3VnaAotCi1OU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgLyogTlNDb2xvciwgZGVm
YXVsdCBuaWw6IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAqLwotTlNTdHJpa2V0aHJvdWdoQ29s
b3JBdHRyaWJ1dGVOYW1lIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91
bmQgY29sb3IgKi8KLSAgICAvLyB0ZXh0LWRlY29yYXRpb24tY29sb3I/Ci0KLU5TTGlnYXR1cmVB
dHRyaWJ1dGVOYW1lICAgICAgICAgICAvKiBpbnQsIGRlZmF1bHQgMTogZGVmYXVsdCBsaWdhdHVy
ZXMsIDA6IG5vIGxpZ2F0dXJlcywgMjogYWxsIGxpZ2F0dXJlcyAqLwotTlNCYXNlbGluZU9mZnNl
dEF0dHJpYnV0ZU5hbWUgICAgIC8qIGZsb2F0LCBpbiBwb2ludHM7IG9mZnNldCBmcm9tIGJhc2Vs
aW5lLCBkZWZhdWx0IDAgKi8KLU5TU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBm
bG9hdCwgaW4gcGVyY2VudCBvZiBmb250IHBvaW50IHNpemUsIGRlZmF1bHQgMDogbm8gc3Ryb2tl
OyBwb3NpdGl2ZSBmb3Igc3Ryb2tlIGFsb25lLCBuZWdhdGl2ZSBmb3Igc3Ryb2tlIGFuZCBmaWxs
IChhIHR5cGljYWwgdmFsdWUgZm9yIG91dGxpbmVkIHRleHQgd291bGQgYmUgMy4wKSAqLwotTlNT
dHJva2VDb2xvckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBz
YW1lIGFzIGZvcmVncm91bmQgY29sb3IgKi8KLSAgICAvLyBuZWVkIGV4dGVuc2lvbnM/Ci0KLSNl
bmRpZgotICAgIAotICAgIE5TRGljdGlvbmFyeSAqYSA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0
ZXM6b2FdOwotICAgIE5TRGljdGlvbmFyeSAqYiA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0ZXM6
b2JdOwotCi0gICAgTlNDb2xvciAqY2EgPSBbYSBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBOU0NvbG9yICpjYiA9IFtiIG9iamVjdEZvcktleTpOU0Jh
Y2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIGlmIChjYSA9PSBjYikgewotICAgICAg
ICBbc3R5bGUgc2V0QmFja2dyb3VuZENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNhXV07Ci0g
ICAgfQotCi0gICAgW3NlbGYgX2FkZFRvU3R5bGU6c3R5bGUgZm9udEE6W2Egb2JqZWN0Rm9yS2V5
Ok5TRm9udEF0dHJpYnV0ZU5hbWVdIGZvbnRCOltiIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXV07Ci0KLSAgICBjYSA9IFthIG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0
dHJpYnV0ZU5hbWVdOwotICAgIGNiID0gW2Igb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKGNhID09IGNiKSB7Ci0gICAgICAgIFtzdHlsZSBzZXRD
b2xvcjpbc2VsZiBfY29sb3JBc1N0cmluZzpjYV1dOwotICAgIH0KLQotICAgIE5TU2hhZG93ICpz
aGEgPSBbYSBvYmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoc2hh
KQotICAgICAgICBbc3R5bGUgc2V0VGV4dFNoYWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6c2hh
XV07Ci0gICAgZWxzZSBpZiAoW2Igb2JqZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV0g
PT0gbmlsKQotICAgICAgICBbc3R5bGUgc2V0VGV4dFNoYWRvdzpAIm5vbmUiXTsKLQotICAgIGlu
dCBzYSA9IFtbYSBvYmplY3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1l
XSBpbnRWYWx1ZV07Ci0gICAgaW50IHNiID0gW1tiIG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91
Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpZiAoc2EgPT0gc2IpIHsKLSAg
ICAgICAgaWYgKHNhID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQotICAgICAgICAgICAgW3N0eWxl
IHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpA
Im5vbmUiIHByaW9yaXR5OkAiIl07IAotICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gIm5v
IGxpbmUtdGhyb3VnaCIgcmF0aGVyIHRoYW4gIm5vbmUiCi0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVj
dCIgdmFsdWU6QCJsaW5lLXRocm91Z2giIHByaW9yaXR5OkAiIl07Ci0gICAgICAgICAgICAvLyB3
ZSByZWFsbHkgbWVhbiAiYWRkIGxpbmUtdGhyb3VnaCIgcmF0aGVyIHRoYW4gImxpbmUtdGhyb3Vn
aCIKLSAgICB9Ci0KLSAgICBzYSA9IFtbYSBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJp
YnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBzYiA9IFtbYiBvYmplY3RGb3JLZXk6TlNTdXBlcnNj
cmlwdEF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpZiAoc2EgPT0gc2IpIHsKLSAgICAg
ICAgaWYgKHNhID4gMCkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3Vw
ZXIiXTsKLSAgICAgICAgZWxzZSBpZiAoc2EgPCAwKQotICAgICAgICAgICAgW3N0eWxlIHNldFZl
cnRpY2FsQWxpZ246QCJzdWIiXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3N0eWxlIHNl
dFZlcnRpY2FsQWxpZ246QCJiYXNlbGluZSJdOwotICAgIH0KLQotICAgIGludCB1YSA9IFtbYSBv
YmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAg
ICBpbnQgdWIgPSBbW2Igb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1l
XSBpbnRWYWx1ZV07Ci0gICAgaWYgKHVhID09IHViKSB7Ci0gICAgICAgIGlmICh1YSA9PSBOU1Vu
ZGVybGluZVN0eWxlTm9uZSkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRt
bC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJd
OwotICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gIm5vIHVuZGVybGluZSIgcmF0aGVyIHRo
YW4gIm5vbmUiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpA
Ii1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRlcmxpbmUiIHBy
aW9yaXR5OkAiIl07Ci0gICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAiYWRkIHVuZGVybGlu
ZSIgcmF0aGVyIHRoYW4gInVuZGVybGluZSIKLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGU7Ci19
Ci0KLS0gKHZvaWQpY2hhbmdlQXR0cmlidXRlczooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9Q
Uk9MT0dVRQotCi0gICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVG
b3JBdHRyaWJ1dGVDaGFuZ2U6c2VuZGVyXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uQ2hhbmdl
QXR0cmlidXRlc107Ci19Ci0KLS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9t
Q29sb3JQYW5lbFdpdGhTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07Ci0KLSAgICBBU1NFUlQoW3N0
eWxlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pOwotICAgIFtzdHlsZSBwZXJmb3JtU2Vs
ZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVjdDpbc2VsZiBfY29sb3JBc1N0cmluZzpbW05TQ29sb3JQ
YW5lbCBzaGFyZWRDb2xvclBhbmVsXSBjb2xvcl1dXTsKLSAgICAKLSAgICByZXR1cm4gc3R5bGU7
Ci19Ci0KLS0gKEVkaXRBY3Rpb24pX3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3Rv
cjooU0VMKXNlbGVjdG9yCi17Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihzZXRCYWNr
Z3JvdW5kQ29sb3I6KSkKLSAgICAgICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRCYWNrZ3JvdW5kQ29s
b3I7ICAgIAotICAgIHJldHVybiBFZGl0QWN0aW9uU2V0Q29sb3I7Ci19Ci0KLS0gKHZvaWQpX2No
YW5nZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjooU0VMKXNlbGVjdG9yIGluUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UKLXsKLSAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9z
dHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9yXTsKLSAgICBXZWJWaWV3ICp3
ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9F
bGVtZW50c0luRE9NUmFuZ2U6cmFuZ2VdKQotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5h
cHBseVN0eWxlKGNvcmUoc3R5bGUpLCBbc2VsZiBfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0
aFNlbGVjdG9yOnNlbGVjdG9yXSk7Ci19Ci0KLS0gKHZvaWQpY2hhbmdlRG9jdW1lbnRCYWNrZ3Jv
dW5kQ29sb3I6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIE1p
bWlja2luZyBOU1RleHRWaWV3LCB0aGlzIG1ldGhvZCBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9y
IGZvciB0aGUKLSAgICAvLyBlbnRpcmUgZG9jdW1lbnQuIFRoZXJlIGlzIG5vIE5TVGV4dFZpZXcg
QVBJIGZvciBzZXR0aW5nIHRoZSBiYWNrZ3JvdW5kCi0gICAgLy8gY29sb3Igb24gdGhlIHNlbGVj
dGVkIHJhbmdlIG9ubHkuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkKLSAgICAv
LyBuZXZlciBjYWxsZWQgZnJvbSB0aGUgVUkgKHNlZSBjb21tZW50IGluIGNoYW5nZUNvbG9yOiku
Ci0gICAgLy8gRklYTUU6IHRoaXMgYWN0dWFsbHkgaGFzIG5vIGVmZmVjdCB3aGVuIGNhbGxlZCwg
cHJvYmFibHkgZHVlIHRvIDM2NTQ4NTAuIF9kb2N1bWVudFJhbmdlIHNlZW1zCi0gICAgLy8gdG8g
ZG8gdGhlIHJpZ2h0IHRoaW5nIGJlY2F1c2UgaXQgd29ya3MgaW4gc3RhcnRTcGVha2luZzosIGFu
ZCBJIGtub3cgc2V0QmFja2dyb3VuZENvbG9yOiBkb2VzIHRoZQotICAgIC8vIHJpZ2h0IHRoaW5n
IGJlY2F1c2UgSSB0ZXN0ZWQgaXQgd2l0aCBbc2VsZiBfc2VsZWN0ZWRSYW5nZV0uCi0gICAgLy8g
RklYTUU6IFRoaXMgd29uJ3QgYWN0dWFsbHkgYXBwbHkgdGhlIHN0eWxlIHRvIHRoZSBlbnRpcmUg
cmFuZ2UgaGVyZSwgYmVjYXVzZSBpdCBlbmRzIHVwIGNhbGxpbmcKLSAgICAvLyBbZnJhbWUgX2Fw
cGx5U3R5bGU6XSwgd2hpY2ggb3BlcmF0ZXMgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBUbyBt
YWtlIHRoaXMgd29yayByaWdodCwgd2UnbGwKLSAgICAvLyBuZWVkIHRvIHNhdmUgb2ZmIHRoZSBz
ZWxlY3Rpb24sIHRlbXBvcmFyaWx5IHNldCBpdCB0byB0aGUgZW50aXJlIHJhbmdlLCBtYWtlIHRo
ZSBjaGFuZ2UsIHRoZW4KLSAgICAvLyByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uLgotICAgIFtz
ZWxmIF9jaGFuZ2VDU1NDb2xvclVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKHNldEJhY2tncm91bmRD
b2xvcjopIGluUmFuZ2U6W3NlbGYgX2RvY3VtZW50UmFuZ2VdXTsKLX0KLQotLSAodm9pZCljaGFu
Z2VDb2xvcjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgLy8gRklY
TUU6IGluIE5TVGV4dFZpZXcsIHRoaXMgbWV0aG9kIGNhbGxzIGNoYW5nZURvY3VtZW50QmFja2dy
b3VuZENvbG9yOiB3aGVuIGEKLSAgICAvLyBwcml2YXRlIGNhbGwgaGFzIGVhcmxpZXIgYmVlbiBt
YWRlIGJ5IFtOU0ZvbnRGb250RWZmZWN0c0JveCBjaGFuZ2VDb2xvcjpdLCBzZWUgMzY3NDQ5My4g
Ci0gICAgLy8gQXBwS2l0IHdpbGwgaGF2ZSB0byBiZSByZXZpc2VkIHRvIGFsbG93IHRoaXMgdG8g
d29yayB3aXRoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYW4gCi0gICAgLy8gTlNUZXh0Vmlldy4gSG93
ZXZlciwgdGhpcyBtaWdodCBub3QgYmUgcmVxdWlyZWQgZm9yIFRpZ2VyLCBzaW5jZSB0aGUgYmFj
a2dyb3VuZC1jb2xvciAKLSAgICAvLyBjaGFuZ2luZyBib3ggaW4gdGhlIGZvbnQgcGFuZWwgZG9l
c24ndCB3b3JrIGluIE1haWwgKDM2NzQ0ODEpLCB0aG91Z2ggaXQgZG9lcyBpbiBUZXh0RWRpdC4K
LSAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Db2xvclBh
bmVsV2l0aFNlbGVjdG9yOkBzZWxlY3RvcihzZXRDb2xvcjopXSAKLSAgICAgICAgICAgICAgICAg
IHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25TZXRDb2xvcl07Ci19Ci0KLS0gKHZvaWQpX2NoYW5n
ZVdvcmRDYXNlV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBpZiAoIVtzZWxmIF9j
YW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYg
X2ZyYW1lXTsKLSAgICBbc2VsZiBzZWxlY3RXb3JkOm5pbF07Ci0gICAgTlNTdHJpbmcgKndvcmQg
PSBbW2ZyYW1lIF9zZWxlY3RlZFN0cmluZ10gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKLSAg
ICAvLyBGSVhNRTogRG9lcyB0aGlzIG5lZWQgYSBkaWZmZXJlbnQgYWN0aW9uIGNvbnRleHQgb3Ro
ZXIgdGhhbiAidHlwZWQiPwotICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OndvcmQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblR5cGVkXSkKLSAgICAg
ICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6d29yZCBzZWxlY3RSZXBsYWNlbWVu
dDpOTyBzbWFydFJlcGxhY2U6Tk9dOwotfQotCi0tICh2b2lkKXVwcGVyY2FzZVdvcmQ6KGlkKXNl
bmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2Fz
ZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IodXBwZXJjYXNlU3RyaW5nKV07Ci19Ci0KLS0gKHZvaWQp
bG93ZXJjYXNlV29yZDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAg
W3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBzZWxlY3Rvcihsb3dlcmNhc2VTdHJp
bmcpXTsKLX0KLQotLSAodm9pZCljYXBpdGFsaXplV29yZDooaWQpc2VuZGVyCi17Ci0gICAgQ09N
TUFORF9QUk9MT0dVRQotCi0gICAgW3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBz
ZWxlY3RvcihjYXBpdGFsaXplZFN0cmluZyldOwotfQotCi0tICh2b2lkKWNvbXBsZXRlOihpZClz
ZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyKQot
ICAgICAgICBfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgPSBbW1dlYlRleHRDb21wbGV0ZUNvbnRy
b2xsZXIgYWxsb2NdIGluaXRXaXRoSFRNTFZpZXc6c2VsZl07Ci0gICAgW19wcml2YXRlLT5jb21w
Q29udHJvbGxlciBkb0NvbXBsZXRpb25dOwotfQotCi0tICh2b2lkKWNoZWNrU3BlbGxpbmc6KGlk
KXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKCk7Ci19Ci0KLS0gKHZvaWQpc2hvd0d1ZXNzUGFuZWw6
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIE5TU3BlbGxDaGVja2Vy
ICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgaWYg
KCFjaGVja2VyKSB7Ci0gICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBOU1BhbmVsICpzcGVsbGluZ1BhbmVsID0g
W2NoZWNrZXIgc3BlbGxpbmdQYW5lbF07Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAg
Ly8gUG9zdC1UaWdlciwgdGhpcyBtZW51IGl0ZW0gaXMgYSBzaG93L2hpZGUgdG9nZ2xlLCB0byBt
YXRjaCBBcHBLaXQuIExlYXZlIFRpZ2VyIGJlaGF2aW9yIGFsb25lCi0gICAgLy8gdG8gbWF0Y2gg
cmVzdCBvZiBPUyBYLgotICAgIGlmIChbc3BlbGxpbmdQYW5lbCBpc1Zpc2libGVdKSB7Ci0gICAg
ICAgIFtzcGVsbGluZ1BhbmVsIG9yZGVyT3V0OnNlbmRlcl07Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLSAgICAKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNz
cGVsbGluZyh0cnVlKTsKLSAgICBbc3BlbGxpbmdQYW5lbCBvcmRlckZyb250OnNlbmRlcl07Ci19
Ci0KLS0gKHZvaWQpX2NoYW5nZVNwZWxsaW5nVG9Xb3JkOihOU1N0cmluZyAqKW5ld1dvcmQKLXsK
LSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9u
J3QgY29ycmVjdCB0byBlbXB0eSBzdHJpbmcuICAoQXBwS2l0IGNoZWNrZWQgdGhpcywgd2UgbWln
aHQgYXMgd2VsbCB0b28uKQotICAgIGlmICghW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hl
Y2tlcl0pIHsKLSAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChbbmV3V29yZCBpc0VxdWFsVG9TdHJpbmc6
QCIiXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6bmV3V29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFz
dGVkXSkKLSAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpu
ZXdXb3JkIHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwotfQotCi0tICh2
b2lkKWNoYW5nZVNwZWxsaW5nOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0K
LSAgICBbc2VsZiBfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6W1tzZW5kZXIgc2VsZWN0ZWRDZWxsXSBz
dHJpbmdWYWx1ZV1dOwotfQotCi0tICh2b2lkKXBlcmZvcm1GaW5kUGFuZWxBY3Rpb246KGlkKXNl
bmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIEltcGxlbWVudGluZyB0aGlz
IHdpbGwgcHJvYmFibHkgcmVxdWlyZSBjb3B5aW5nIGFsbCBvZiBOU0ZpbmRQYW5lbC5oIGFuZCAu
bS4KLSAgICAvLyBXZSBuZWVkICphbG1vc3QqIHRoZSBzYW1lIHRoaW5nIGFzIEFwcEtpdCwgYnV0
IG5vdCBxdWl0ZS4KLSAgICBMT0dfRVJST1IoInVuaW1wbGVtZW50ZWQiKTsKLX0KLQotLSAodm9p
ZClzdGFydFNwZWFraW5nOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAg
ICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAgIERPTVJhbmdlICpyYW5nZSA9
IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsKLSAgICBpZiAoIXJhbmdlIHx8IFtyYW5nZSBjb2xsYXBz
ZWRdKQotICAgICAgICByYW5nZSA9IFtzZWxmIF9kb2N1bWVudFJhbmdlXTsKLSAgICBbTlNBcHAg
c3BlYWtTdHJpbmc6W2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpyYW5nZV1dOwotfQotCi0tICh2b2lk
KXN0b3BTcGVha2luZzooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAg
W05TQXBwIHN0b3BTcGVha2luZzpzZW5kZXJdOwotfQotCi0tICh2b2lkKXRvZ2dsZUJhc2VXcml0
aW5nRGlyZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBp
ZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IFJpZ2h0VG9M
ZWZ0V3JpdGluZ0RpcmVjdGlvbjsKLSAgICBzd2l0Y2ggKGNvcmVGcmFtZS0+YmFzZVdyaXRpbmdE
aXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpKSB7Ci0gICAgICAgIGNhc2UgTlNXcml0aW5nRGly
ZWN0aW9uTGVmdFRvUmlnaHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOU1dy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDoKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IExlZnRU
b1JpZ2h0V3JpdGluZ0RpcmVjdGlvbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBU
aGUgd3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IG1ldGhvZCB3aWxsIG5ldmVyIHJl
dHVybiAibmF0dXJhbCIuIEl0Ci0gICAgICAgIC8vIHdpbGwgYWx3YXlzIHJldHVybiBhIGNvbmNy
ZXRlIGRpcmVjdGlvbi4gU28sIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5LCBhbmQgYXNzZXJ0IG5v
dCByZWFjaGVkLgotICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6Ci0gICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9u
KTsKLX0KLQotLSAodm9pZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCi17
Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlv
biA9IHN0YXRpY19jYXN0PE5TV3JpdGluZ0RpcmVjdGlvbj4oW3NlbmRlciB0YWddKTsKLSAgICAK
LSAgICAvLyBXZSBkaXNhYmxlIHRoZSBtZW51IGl0ZW0gdGhhdCBwZXJmb3JtcyB0aGlzIGFjdGlv
biBiZWNhdXNlIHdlIGNhbid0IGltcGxlbWVudAotICAgIC8vIE5TV3JpdGluZ0RpcmVjdGlvbk5h
dHVyYWwncyBiZWhhdmlvciB1c2luZyBDU1MuCi0gICAgQVNTRVJUKHdyaXRpbmdEaXJlY3Rpb24g
IT0gTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCk7Ci0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNl
dEJhc2VXcml0aW5nRGlyZWN0aW9uKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVm
dFdyaXRpbmdEaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgQk9PTCB3cml0aW5nRGlyZWN0aW9uS2V5
QmluZGluZ3NFbmFibGVkKCkKLXsKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICByZXR1cm4gWUVTOwotI2Vsc2UKLSAg
ICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdOwotICAgIHJldHVybiBbZGVmYXVsdHMgYm9vbEZvcktleTpAIk5TQWxsb3dzQmFz
ZVdyaXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5ncyJdIHx8IFtkZWZhdWx0cyBib29sRm9yS2V5OkAi
QXBwbGVUZXh0RGlyZWN0aW9uIl07Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfY2hhbmdlQmFzZVdy
aXRpbmdEaXJlY3Rpb25UbzooTlNXcml0aW5nRGlyZWN0aW9uKWRpcmVjdGlvbgotewotICAgIGlm
ICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgQk9PTCBi
aW5kaW5nc0VuYWJsZWQgPSB3cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFbmFibGVkKCk7Ci0K
LSAgICBpZiAoIWJpbmRpbmdzRW5hYmxlZCkgewotICAgICAgICBOU0JlZXAoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJl
Y3Rpb24oZGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gTGVmdFRv
UmlnaHRXcml0aW5nRGlyZWN0aW9uIDogUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsKLX0K
LQotLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDooaWQpc2VuZGVy
Ci17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgW3NlbGYgX2NoYW5nZUJhc2VXcml0aW5n
RGlyZWN0aW9uVG86TlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHRdOwotfQotCi0tICh2b2lk
KW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OihpZClzZW5kZXIKLXsKLSAgICBD
T01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25U
bzpOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdF07Ci19Ci0KLSNpZiBkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0tICh2b2lkKWNo
YW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG9MVFI6KGlkKXNlbmRlcgotewotICAgIFtzZWxmIG1h
a2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OnNlbmRlcl07Ci19Ci0KLS0gKHZvaWQp
Y2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25Ub1JUTDooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYg
bWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6c2VuZGVyXTsKLX0KLSNlbmRpZgot
Ci0tICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6KGlkKXNlbmRlcgotewot
ICAgIExPR19FUlJPUigiU2VudCBmcm9tICVALiIsIHNlbmRlcik7Ci19Ci0KLSNpZiAwCi0KLS8v
IENTUyBkb2VzIG5vdCBoYXZlIGEgd2F5IHRvIHNwZWNpZnkgYW4gb3V0bGluZSBmb250LCB3aGlj
aCBtYXkgbWFrZSB0aGlzIGRpZmZpY3VsdCB0byBpbXBsZW1lbnQuCi0vLyBNYXliZSBhIHNwZWNp
YWwgY2FzZSBvZiB0ZXh0LXNoYWRvdz8KLS0gKHZvaWQpb3V0bGluZTooaWQpc2VuZGVyOwotCi0v
LyBUaGlzIGlzIHBhcnQgb2YgdGFibGUgc3VwcG9ydCwgd2hpY2ggbWF5IGJlIGluIE5TVGV4dFZp
ZXcgZm9yIFRpZ2VyLgotLy8gSXQncyBwcm9iYWJseSBzaW1wbGUgdG8gZG8gdGhlIGVxdWl2YWxl
bnQgdGhpbmcgZm9yIFdlYktpdC4KLS0gKHZvaWQpaW5zZXJ0VGFibGU6KGlkKXNlbmRlcjsKLQot
Ly8gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQuCi0tICh2b2lkKXRvZ2dsZVRyYWRpdGlvbmFsQ2hh
cmFjdGVyU2hhcGU6KGlkKXNlbmRlcjsKLQotLy8gSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGVxdWl2
YWxlbnRzIG9mIHRoZXNlIGluIHRoZSB3ZWIgd29ybGQgYXJlLgotLSAodm9pZClpbnNlcnRMaW5l
U2VwYXJhdG9yOihpZClzZW5kZXI7Ci0tICh2b2lkKWluc2VydFBhZ2VCcmVhazooaWQpc2VuZGVy
OwotCi0vLyBUaGVzZSBtZXRob2RzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gTlNUZXh0VmlldyB5
ZXQgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgotLSAodm9pZCljaGFuZ2VDYXNlT2ZMZXR0
ZXI6KGlkKXNlbmRlcjsKLS0gKHZvaWQpdHJhbnNwb3NlV29yZHM6KGlkKXNlbmRlcjsKLQotI2Vu
ZGlmCi0KLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLQotLy8gT3ZlcnJpZGUgdGhpcyBzbyB0
aGF0IEFwcEtpdCB3aWxsIHNlbmQgdXMgYXJyb3cga2V5cyBhcyBrZXkgZG93biBldmVudHMgc28g
d2UgY2FuCi0vLyBzdXBwb3J0IHRoZW0gdmlhIHRoZSBrZXkgYmluZGluZ3MgbWVjaGFuaXNtLgot
LSAoQk9PTClfd2FudHNLZXlEb3duRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIGJv
b2wgaGF2ZVdlYkNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0KLSAgICAvLyBJZiB3
ZSBoYXZlIGEgZnJhbWUsIG91ciBrZXlEb3duIG1ldGhvZCB3aWxsIGhhbmRsZSBrZXkgYmluZGlu
Z3MgYWZ0ZXIgc2VuZGluZwotICAgIC8vIHRoZSBldmVudCB0aHJvdWdoIHRoZSBET00sIHNvIGFz
ayBBcHBLaXQgbm90IHRvIGRvIGl0cyBlYXJseSBzcGVjaWFsIGtleSBiaW5kaW5nCi0gICAgLy8g
bWFwcGluZy4gSWYgd2UgZG9uJ3QgaGF2ZSBhIGZyYW1lLCBqdXN0IGxldCB0aGluZ3Mgd29yayB0
aGUgbm9ybWFsIHdheSB3aXRob3V0Ci0gICAgLy8gYSBrZXlEb3duLgotICAgIHJldHVybiBoYXZl
V2ViQ29yZUZyYW1lOwotfQotCi0jZWxzZQotCi0vLyBTdXBlci1oYWNrIGFsZXJ0LgotLy8gQWxs
IHRoaXMgY29kZSBhY2NvbXBsaXNoZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIF93YW50c0tleURv
d25Gb3JFdmVudCBtZXRob2QgYWJvdmUuCi0KLS8vIFJldHVybnMgYSBzZWxlY3RvciBvbmx5IGlm
IGNhbGxlZCB3aGlsZToKLS8vICAgMSkgZmlyc3QgcmVzcG9uZGVyIGlzIHNlbGYKLS8vICAgMikg
aGFuZGxpbmcgYSBrZXkgZG93biBldmVudAotLy8gICAzKSBub3QgeWV0IGluc2lkZSBrZXlEb3du
OiBtZXRob2QKLS8vICAgNCkga2V5IGlzIGFuIGFycm93IGtleQotLy8gVGhlIHNlbGVjdG9yIGlz
IHRoZSBvbmUgdGhhdCBnZXRzIHNlbnQgYnkgLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJkVUlL
ZXldIGZvciB0aGlzIGtleS4KLS0gKFNFTClfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJl
cHJvY2Vzc2luZwotewotICAgIE5TV2luZG93ICp3ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAo
W3cgZmlyc3RSZXNwb25kZXJdICE9IHNlbGYpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIE5T
RXZlbnQgKmUgPSBbdyBjdXJyZW50RXZlbnRdOwotICAgIGlmIChbZSB0eXBlXSAhPSBOU0tleURv
d24pCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChlID09IF9wcml2YXRlLT5rZXlEb3du
RXZlbnQpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIE5TU3RyaW5nICpzID0gW2UgY2hhcmFj
dGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKLSAgICBpZiAoW3MgbGVuZ3RoXSA9PSAwKQotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICBzd2l0Y2ggKFtzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKLSAg
ICAgICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5OgotICAgICAgICAgICAgcmV0dXJuIEBz
ZWxlY3Rvcihtb3ZlRG93bjopOwotICAgICAgICBjYXNlIE5TTGVmdEFycm93RnVuY3Rpb25LZXk6
Ci0gICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVMZWZ0Oik7Ci0gICAgICAgIGNhc2Ug
TlNSaWdodEFycm93RnVuY3Rpb25LZXk6Ci0gICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1v
dmVSaWdodDopOwotICAgICAgICBjYXNlIE5TVXBBcnJvd0Z1bmN0aW9uS2V5OgotICAgICAgICAg
ICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlVXA6KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyBOTyBpbnN0ZWFkIG9mIFlF
UyBpZiBjYWxsZWQgb24gdGhlIHNlbGVjdG9yIHRoYXQgdGhlCi0vLyBfYXJyb3dLZXlEb3duRXZl
bnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZyBtZXRob2QgcmV0dXJucy4KLS8vIFRoaXMgc2hvdWxk
IG9ubHkgaGFwcGVuIGluc2lkZSAtW05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0sCi0v
LyBhbmQgdG9nZXRoZXIgd2l0aCB0aGUgY2hhbmdlIGJlbG93IHNob3VsZCBjYXVzZSB0aGF0IG1l
dGhvZAotLy8gdG8gcmV0dXJuIE5PIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBrZXkuCi0vLyBB
bHNvIHNldCBhIDEtc2hvdCBmbGFnIGZvciB0aGUgbmV4dFJlc3BvbmRlciBjaGVjayBiZWxvdy4K
LS0gKEJPT0wpcmVzcG9uZHNUb1NlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBpZiAoIVtz
dXBlciByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQotICAgICAgICByZXR1cm4gTk87Ci0g
ICAgU0VMIGFycm93S2V5U2VsZWN0b3IgPSBbc2VsZiBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3Rv
cklmUHJlcHJvY2Vzc2luZ107Ci0gICAgaWYgKHNlbGVjdG9yICE9IGFycm93S2V5U2VsZWN0b3Ip
Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNhYmxl
ZE9uY2UgPSBZRVM7Ci0gICAgcmV0dXJuIE5POwotfQotCi0vLyBSZXR1cm5zIG5pbCBpbnN0ZWFk
IG9mIHRoZSBuZXh0IHJlc3BvbmRlciBpZiBjYWxsZWQgd2hlbiB0aGUKLS8vIG9uZS1zaG90IGZs
YWcgaXMgc2V0LCBhbmQgX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcK
LS8vIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gTlVMTC4gVGhpcyBzaG91bGQgb25seSBo
YXBwZW4gaW5zaWRlCi0vLyAtW05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0gYW5kIHRv
Z2V0aGVyIHdpdGggdGhlIGNoYW5nZSBhYm92ZQotLy8gc2hvdWxkIGNhdXNlIHRoYXQgbWV0aG9k
IHRvIHJldHVybiBOTyByYXRoZXIgdGhhbiBoYW5kbGluZyB0aGUga2V5LgotLSAoTlNSZXNwb25k
ZXIgKiluZXh0UmVzcG9uZGVyCi17Ci0gICAgQk9PTCBkaXNhYmxlZCA9IF9wcml2YXRlLT5uZXh0
UmVzcG9uZGVyRGlzYWJsZWRPbmNlOwotICAgIF9wcml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJs
ZWRPbmNlID0gTk87Ci0gICAgaWYgKGRpc2FibGVkICYmIFtzZWxmIF9hcnJvd0tleURvd25FdmVu
dFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nXSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBbc3VwZXIgbmV4dFJlc3BvbmRlcl07Ci19Ci0KLSNlbmRpZgotCi0tICh2b2lk
KV91cGRhdGVDb250cm9sVGludHMKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcq
IHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwot
ICAgIHZpZXctPnVwZGF0ZUNvbnRyb2xUaW50cygpOwotfQotCi0vLyBEZXNwaXRlIGl0cyBuYW1l
LCB0aGlzIGlzIGNhbGxlZCBhdCBkaWZmZXJlbnQgdGltZXMgdGhhbiB3aW5kb3dEaWRCZWNvbWVL
ZXkgaXMuCi0vLyBJdCB0YWtlcyBpbnRvIGFjY291bnQgYWxsIHRoZSBvdGhlciBmYWN0b3JzIHRo
YXQgZGV0ZXJtaW5lIHdoZW4gTlNDZWxsIGRyYXdzCi0vLyB3aXRoIGRpZmZlcmVudCB0aW50cywg
c28gaXQncyB0aGUgcmlnaHQgY2FsbCB0byB1c2UgZm9yIGNvbnRyb2wgdGludHMuIFdlJ2QgcHJl
ZmVyCi0vLyB0byBkbyB0aGlzIHdpdGggQVBJLiA8cmRhcjovL3Byb2JsZW0vNTEzNjc2MD4KLS0g
KHZvaWQpX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZQotewotICAgIGlmIChwdGhyZWFkX21haW5fbnAo
KSkKLSAgICAgICAgW3NlbGYgX3VwZGF0ZUNvbnRyb2xUaW50c107Ci0gICAgZWxzZQotICAgICAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKF91cGRhdGVDb250
cm9sVGludHMpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9dOwotCi0gICAgW3N1cGVy
IF93aW5kb3dDaGFuZ2VkS2V5U3RhdGVdOwotfQotCi0tICh2b2lkKW90aGVyTW91c2VEb3duOihO
U0V2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKLSAg
ICAgICAgW3NlbGYgbW91c2VEb3duOmV2ZW50XTsKLSAgICBlbHNlCi0gICAgICAgIFtzdXBlciBv
dGhlck1vdXNlRG93bjpldmVudF07Ci19Ci0KLS0gKHZvaWQpb3RoZXJNb3VzZURyYWdnZWQ6KE5T
RXZlbnQgKilldmVudAotewotICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQotICAg
ICAgICBbc2VsZiBtb3VzZURyYWdnZWQ6ZXZlbnRdOwotICAgIGVsc2UKLSAgICAgICAgW3N1cGVy
IG90aGVyTW91c2VEcmFnZ2VkOmV2ZW50XTsKLX0KLQotLSAodm9pZClvdGhlck1vdXNlVXA6KE5T
RXZlbnQgKilldmVudAotewotICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQotICAg
ICAgICBbc2VsZiBtb3VzZVVwOmV2ZW50XTsKLSAgICBlbHNlCi0gICAgICAgIFtzdXBlciBvdGhl
ck1vdXNlVXA6ZXZlbnRdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU0FycmF5IChX
ZWJIVE1MVmlldykKLQotLSAodm9pZClfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3Rv
cjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdAotewotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtzZWxmIG9i
amVjdEVudW1lcmF0b3JdOwotICAgIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqdmlldzsKLSAgICB3
aGlsZSAoKHZpZXcgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKQotICAgICAgICBp
ZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11d
KQotICAgICAgICAgICAgW3ZpZXcgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6
b2JqZWN0XTsKLSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmll
dyAoV2ViSW50ZXJuYWwpCi0KLS0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKLXsKLSAgICBbc2Vs
ZiBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXTsKLSAgICBbc2VsZiBfdXBkYXRlRm9u
dFBhbmVsXTsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
Ci0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5j
ZSh0cnVlKTsKLX0KLQotLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCi17Ci0gICAgLy8gRklYTUU6
IE5TVGV4dFZpZXcgYmFpbHMgb3V0IGlmIGJlY29taW5nIG9yIHJlc2lnbmluZyBmaXJzdCByZXNw
b25kZXIsIGZvciB3aGljaCBpdCBoYXMgaXZhciBmbGFncy4gTm90Ci0gICAgLy8gc3VyZSBpZiB3
ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyLgotICAgIAotICAgIGlmICghW3NlbGYgX2Nh
bkVkaXRdKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107Ci0gICAgLy8gRklYTUU6IGlzIHRoaXMgZmlyc3QtcmVzcG9uZGVyIGNoZWNr
IGNvcnJlY3Q/IFdoYXQgaGFwcGVucyBpZiBhIHN1YmZyYW1lIGlzIGVkaXRhYmxlIGFuZCBpcyBm
aXJzdCByZXNwb25kZXI/Ci0gICAgaWYgKFtOU0FwcCBrZXlXaW5kb3ddICE9IHdpbmRvdyB8fCBb
d2luZG93IGZpcnN0UmVzcG9uZGVyXSAhPSBzZWxmKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgYm9vbCBtdWx0aXBsZUZvbnRzID0gZmFsc2U7Ci0gICAgTlNGb250ICpmb250ID0gbmlsOwot
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAg
ICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+Zm9u
dEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKLSAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0
TlNGb250KCk7Ci0gICAgfQotICAgIAotCi0gICAgLy8gRklYTUU6IGZvciBub3csIHJldHVybiBh
IGJvZ3VzIGZvbnQgdGhhdCBkaXN0aW5ndWlzaGVzIHRoZSBlbXB0eSBzZWxlY3Rpb24gZnJvbSB0
aGUgbm9uLWVtcHR5Ci0gICAgLy8gc2VsZWN0aW9uLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1v
dmUgdGhpcyBvbmNlIHRoZSByZXN0IG9mIHRoaXMgY29kZSB3b3JrcyBwcm9wZXJseS4KLSAgICBp
ZiAoZm9udCA9PSBuaWwpCi0gICAgICAgIGZvbnQgPSBbc2VsZiBfaGFzU2VsZWN0aW9uXSA/IFtO
U0ZvbnQgbWVudUZvbnRPZlNpemU6MjNdIDogW05TRm9udCB0b29sVGlwc0ZvbnRPZlNpemU6MTdd
OwotICAgIEFTU0VSVChmb250ICE9IG5pbCk7Ci0KLSAgICBbW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdIHNldFNlbGVjdGVkRm9udDpmb250IGlzTXVsdGlwbGU6bXVsdGlwbGVGb250
c107Ci0KLSAgICAvLyBGSVhNRTogd2UgZG9uJ3Qga2VlcCB0cmFjayBvZiBzZWxlY3RlZCBhdHRy
aWJ1dGVzLCBvciBzZXQgdGhlbSBvbiB0aGUgZm9udCBwYW5lbC4gVGhpcwotICAgIC8vIGFwcGVh
cnMgdG8gaGF2ZSBubyBlZmZlY3Qgb24gdGhlIFVJLiBFLmcuLCB1bmRlcmxpbmVkIHRleHQgaW4g
TWFpbCBvciBUZXh0RWRpdCBpcwotICAgIC8vIG5vdCByZWZsZWN0ZWQgaW4gdGhlIGZvbnQgcGFu
ZWwuIE1heWJlIHNvbWVkYXkgdGhpcyB3aWxsIGNoYW5nZS4KLX0KLQotLSAoQk9PTClfY2FuU21h
cnRDb3B5T3JEZWxldGUKLXsKLSAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1l
LT5zZWxlY3Rpb25HcmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKLX0KLQotLSAoTlNF
dmVudCAqKV9tb3VzZURvd25FdmVudAotewotICAgIHJldHVybiBfcHJpdmF0ZS0+bW91c2VEb3du
RXZlbnQ7Ci19Ci0KLS0gKGlkPFdlYkhUTUxIaWdobGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlw
ZTooTlNTdHJpbmcqKXR5cGUKLXsKLSAgICByZXR1cm4gW19wcml2YXRlLT5oaWdobGlnaHRlcnMg
b2JqZWN0Rm9yS2V5OnR5cGVdOwotfQotCi0tIChXZWJGcmFtZSAqKV9mcmFtZQotewotICAgIHJl
dHVybiBbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdOwotfQotCi0tICh2b2lkKXBhc3Rl
OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBSZXRhaW5QdHI8V2Vi
SFRNTFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotICAgIFJlZlB0cjxGcmFtZT4gY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChjb3JlRnJhbWUtPmVkaXRvcigpLT50cnlESFRNTFBhc3RlKCkpCi0g
ICAgICAgIHJldHVybjsgLy8gREhUTUwgZGlkIHRoZSB3aG9sZSBvcGVyYXRpb24KLSAgICBpZiAo
IWNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKLSAg
ICAgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFz
dGVib2FyZF0gYWxsb3dQbGFpblRleHQ6WUVTXTsKLSAgICBlbHNlCi0gICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPnBhc3RlQXNQbGFpblRleHQoKTsKLX0KLQotLSAodm9pZClwYXN0ZUFzUGxh
aW5UZXh0OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtz
ZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtzZWxmIF9wYXN0ZUFzUGxhaW5U
ZXh0V2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF1dOwotfQot
Ci0tICh2b2lkKWNsb3NlSWZOb3RDdXJyZW50VmlldwotewotICAgIGlmIChbW1tzZWxmIF9mcmFt
ZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddICE9IHNlbGYpCi0gICAgICAgIFtzZWxmIGNsb3Nl
XTsKLX0KLQotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIHJldHVybiBbc2VsZiBf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0Om5pbCBh
bGxvd1BsYWluVGV4dDpOT107Ci19Ci0KLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLQotLSAo
Qk9PTClpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQKLXsKLSAgICAvLyBGSVhNRSA0Nzk5MTM0OiBX
ZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMs
IGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQotICAgIC8vIHRo
ZSBBcHBLaXQgY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICByZXR1cm4gW1tz
ZWxmIF93ZWJWaWV3XSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWRdOwotfQotCi0tICh2b2lkKXNl
dEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIC8vIEZJWE1FIDQ3OTkx
MzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBs
b2dpYywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCi0gICAg
Ly8gdGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgotICAgIFtbc2Vs
ZiBfd2ViVmlld10gc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9p
ZCl0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6KGlkKXNlbmRlcgotewotICAgIC8vIEZJWE1FIDQ3OTkx
MzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBs
b2dpYywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCi0gICAg
Ly8gdGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgotICAgIFtbc2Vs
ZiBfd2ViVmlld10gdG9nZ2xlR3JhbW1hckNoZWNraW5nOnNlbmRlcl07Ci19Ci0KLQotc3RhdGlj
IENHUG9pbnQgY29yZUdyYXBoaWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2ludChOU1Bv
aW50IHBvaW50KQotewotICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVuc107
Ci0gICAgCi0gICAgaWYgKFtzY3JlZW5zIGNvdW50XSA9PSAwKSB7Ci0gICAgICAgIC8vIFlvdSBj
b3VsZCB0aGVvcmV0aWNhbGx5IGdldCBoZXJlIGlmIHJ1bm5pbmcgd2l0aCBubyBtb25pdG9yLCBp
biB3aGljaCBjYXNlIGl0IGRvZXNuJ3QgbWF0dGVyCi0gICAgICAgIC8vIG11Y2ggd2hlcmUgdGhl
ICJvbi1zY3JlZW4iIHBvaW50IGlzLgotICAgICAgICByZXR1cm4gQ0dQb2ludE1ha2UocG9pbnQu
eCwgcG9pbnQueSk7Ci0gICAgfQotICAgIAotICAgIC8vIEZsaXAgdGhlIHkgY29vcmRpbmF0ZSBm
cm9tIHRoZSB0b3Agb2YgdGhlIG1lbnUgYmFyIHNjcmVlbiAtLSBzZWUgNDYzNjM5MAotICAgIHJl
dHVybiBDR1BvaW50TWFrZShwb2ludC54LCBOU01heFkoW1tzY3JlZW5zIG9iamVjdEF0SW5kZXg6
MF0gZnJhbWVdKSAtIHBvaW50LnkpOwotfQotCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotCi0tICh2b2lk
KW9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRf
UFJPTE9HVUUKLQotICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgaWYgKCFjaGVja2VyKSB7Ci0gICAgICAgIExPR19F
UlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBOU1BhbmVsICpzdWJzdGl0dXRpb25zUGFuZWwgPSBbY2hlY2tlciBzdWJzdGl0dXRpb25z
UGFuZWxdOwotICAgIGlmIChbc3Vic3RpdHV0aW9uc1BhbmVsIGlzVmlzaWJsZV0pIHsKLSAgICAg
ICAgW3N1YnN0aXR1dGlvbnNQYW5lbCBvcmRlck91dDpzZW5kZXJdOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIFtzdWJzdGl0dXRpb25zUGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOwotfQot
Ci0vLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxv
Z2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcyBoZXJlIGJlY2F1c2UKLS8v
IHRoZSBBcHBLaXQgY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLQotLSAoQk9PTClz
bWFydEluc2VydERlbGV0ZUVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBz
bWFydEluc2VydERlbGV0ZUVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRTbWFydElu
c2VydERlbGV0ZUVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlU21hcnRJbnNlcnRE
ZWxldGU6KGlkKXNlbmRlcgotewotICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlU21hcnRJbnNl
cnREZWxldGU6c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljUXVv
dGVTdWJzdGl0dXRpb25FbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0
QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOmZsYWddOwotfQotCi0tICh2b2lkKXRv
Z2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYg
X3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOnNlbmRlcl07Ci19Ci0K
LS0gKEJPT0wpaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBb
W3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRdOwotfQotCi0t
ICh2b2lkKXNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWcKLXsKLSAg
ICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOmZsYWdd
OwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KGlkKXNlbmRlcgot
ewotICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjpzZW5k
ZXJdOwotfQotCi0tIChCT09MKWlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQKLXsK
LSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25F
bmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxl
ZDooQk9PTClmbGFnCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNo
U3Vic3RpdHV0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1
dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudEVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBp
c0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldEF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2Vi
Vmlld10gc2V0QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDpmbGFnXTsKLX0KLQotLSAo
dm9pZCl0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KGlkKXNlbmRlcgotewotICAgIFtb
c2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OnNlbmRlcl07Ci19
Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkCi17Ci0gICAg
cmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkXTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
OihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1NwZWxsaW5n
Q29ycmVjdGlvbkVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2ds
ZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjpzZW5kZXJdOwotfQotCi0jZW5kaWYKLQotLSAo
dm9pZClfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcgotewotICAgIC8vIERp
Y3Rpb25hcnkgQVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlz
cGxheSBVSSBhcyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKLSAgICAvLyBzbyBiYWlsIG91dCBlYXJs
eSB0byBhdm9pZCB0aGF0LgotICAgIGlmIChbW1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBfd2Via2l0
X3N0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlXSBsZW5ndGhdID09IDApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZyA9IFtzZWxmIHNlbGVjdGVk
QXR0cmlidXRlZFN0cmluZ107Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNS
ZWN0IHJlY3QgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbkJvdW5kcygpOwotCi0jaWZuZGVmIEJVSUxE
SU5HX09OX1RJR0VSCi0gICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW2F0dHJTdHJpbmcg
Zm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsMSldOwotICAgIE5TRm9udCAqZm9u
dCA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICBp
ZiAoZm9udCkKLSAgICAgICAgcmVjdC5vcmlnaW4ueSArPSBbZm9udCBhc2NlbmRlcl07Ci0jZW5k
aWYKLQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKQotICAgIFtzZWxmIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmlu
ZzphdHRyU3RyaW5nIGF0UG9pbnQ6cmVjdC5vcmlnaW5dOwotICAgIHJldHVybjsKLSNlbmRpZgot
Ci0gICAgLy8gV2Ugc29mdCBsaW5rIHRvIGdldCB0aGUgZnVuY3Rpb24gdGhhdCBkaXNwbGF5cyB0
aGUgZGljdGlvbmFyeSAoZWl0aGVyIHBvcC11cCB3aW5kb3cgb3IgYXBwKSB0byBhdm9pZCB0aGUg
cGVyZm9ybWFuY2UKLSAgICAvLyBwZW5hbHR5IG9mIGxpbmtpbmcgdG8gYW5vdGhlciBmcmFtZXdv
cmsuIFRoaXMgZnVuY3Rpb24gY2hhbmdlZCBzaWduYXR1cmUgYXMgd2VsbCBhcyBmcmFtZXdvcmsg
YmV0d2VlbiBUaWdlciBhbmQgTGVvcGFyZCwKLSAgICAvLyBzbyB0aGUgdHdvIGNhc2VzIGFyZSBo
YW5kbGVkIHNlcGFyYXRlbHkuCi0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIHR5cGVk
ZWYgT1NTdGF0dXMgKCpTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uKShpZCBpbldvcmRTdHJpbmcs
IE5TUmVjdCBpbldvcmRCb3VuZGFyeSwgVUludDE2IGluTGluZURpcmVjdGlvbik7Ci0gICAgY29u
c3QgY2hhciAqZnJhbWV3b3JrUGF0aCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhbmdBbmFseXNpcy5mcmFtZXdv
cmsvTGFuZ0FuYWx5c2lzIjsKLSAgICBjb25zdCBjaGFyICpmdW5jdGlvbk5hbWUgPSAiRENNRGlj
dGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93IjsKLSNlbHNlCi0gICAgdHlwZWRlZiB2b2lkICgqU2Vy
dmljZVdpbmRvd1Nob3dGdW5jdGlvbikoaWQgdW51c2VkRGljdGlvbmFyeVJlZiwgaWQgaW5Xb3Jk
U3RyaW5nLCBDRlJhbmdlIHNlbGVjdGlvblJhbmdlLCBpZCB1bnVzZWRGb250LCBDR1BvaW50IHRl
eHRPcmlnaW4sIEJvb2xlYW4gdmVydGljYWxUZXh0LCBpZCB1bnVzZWRUcmFuc2Zvcm0pOwotICAg
IGNvbnN0IGNoYXIgKmZyYW1ld29ya1BhdGggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
Q2FyYm9uLmZyYW1ld29yay9GcmFtZXdvcmtzL0hJVG9vbGJveC5mcmFtZXdvcmsvSElUb29sYm94
IjsKLSAgICBjb25zdCBjaGFyICpmdW5jdGlvbk5hbWUgPSAiSElEaWN0aW9uYXJ5V2luZG93U2hv
dyI7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBib29sIGxvb2tlZEZvckZ1bmN0aW9uID0gZmFsc2U7
Ci0gICAgc3RhdGljIFNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24gZGljdGlvbmFyeVNlcnZpY2VX
aW5kb3dTaG93ID0gTlVMTDsKLQotICAgIGlmICghbG9va2VkRm9yRnVuY3Rpb24pIHsKLSAgICAg
ICAgdm9pZCogbGFuZ0FuYWx5c2lzRnJhbWV3b3JrID0gZGxvcGVuKGZyYW1ld29ya1BhdGgsIFJU
TERfTEFaWSk7Ci0gICAgICAgIEFTU0VSVChsYW5nQW5hbHlzaXNGcmFtZXdvcmspOwotICAgICAg
ICBpZiAobGFuZ0FuYWx5c2lzRnJhbWV3b3JrKQotICAgICAgICAgICAgZGljdGlvbmFyeVNlcnZp
Y2VXaW5kb3dTaG93ID0gKFNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pZGxzeW0obGFuZ0FuYWx5
c2lzRnJhbWV3b3JrLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICBsb29rZWRGb3JGdW5jdGlvbiA9
IHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUKGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyk7
Ci0gICAgaWYgKCFkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cpIHsKLSAgICAgICAgTlNMb2co
QCJDb3VsZG4ndCBmaW5kIHRoZSAlcyBmdW5jdGlvbiBpbiAlcyIsIGZ1bmN0aW9uTmFtZSwgZnJh
bWV3b3JrUGF0aCk7IAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWZkZWYgQlVJTERJTkdf
T05fVElHRVIKLSAgICAvLyBGSVhNRTogbXVzdCBjaGVjayBmb3IgcmlnaHQtdG8tbGVmdCBoZXJl
Ci0gICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJl
Y3Rpb25MZWZ0VG9SaWdodDsKLQotICAgIC8vIEZJWE1FOiB0aGUgZGljdGlvbmFyeSBBUEkgZXhw
ZWN0cyB0aGUgcmVjdCBmb3IgdGhlIGZpcnN0IGxpbmUgb2Ygc2VsZWN0aW9uLiBQYXNzaW5nCi0g
ICAgLy8gdGhlIHJlY3QgZm9yIHRoZSBlbnRpcmUgc2VsZWN0aW9uLCBhcyB3ZSBkbyBoZXJlLCBw
b3NpdGlvbnMgdGhlIHBvcC11cCB3aW5kb3cgbmVhcgotICAgIC8vIHRoZSBib3R0b20gb2YgdGhl
IHNlbGVjdGlvbiByYXRoZXIgdGhhbiBhdCB0aGUgc2VsZWN0ZWQgd29yZC4KLSAgICByZWN0ID0g
W3NlbGYgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6bmlsXTsKLSAgICByZWN0Lm9yaWdpbiA9IFtb
c2VsZiB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46cmVjdC5vcmlnaW5dOwotICAgIE5TRGF0
YSAqZGF0YSA9IFthdHRyU3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0clN0
cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICBkaWN0aW9uYXJ5U2Vy
dmljZVdpbmRvd1Nob3coZGF0YSwgcmVjdCwgKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5n
RGlyZWN0aW9uUmlnaHRUb0xlZnQpID8gMSA6IDApOwotI2Vsc2UKLSAgICAvLyBUaGUgSElEaWN0
aW9uYXJ5V2luZG93U2hvdyBmdW5jdGlvbiByZXF1aXJlcyB0aGUgb3JpZ2luLCBpbiBDRyBzY3Jl
ZW4gY29vcmRpbmF0ZXMsIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGV4dCBpbiB0aGUgc2Vs
ZWN0aW9uLgotICAgIC8vIEZJWE1FIDQ5NDU4MDg6IFdlIGFwcHJveGltYXRlIHRoaXMgaW4gYSB3
YXkgdGhhdCB3b3JrcyB3ZWxsIHdoZW4gYSBzaW5nbGUgd29yZCBpcyBzZWxlY3RlZCwgYW5kIGxl
c3Mgd2VsbCBpbiBzb21lIG90aGVyIGNhc2VzCi0gICAgLy8gKGJ1dCBubyB3b3JzZSB0aGFuIHdl
IGRpZCBpbiBUaWdlcikKLSAgICBOU1BvaW50IHdpbmRvd1BvaW50ID0gW3NlbGYgY29udmVydFBv
aW50OnJlY3Qub3JpZ2luIHRvVmlldzpuaWxdOwotICAgIE5TUG9pbnQgc2NyZWVuUG9pbnQgPSBb
W3NlbGYgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOndpbmRvd1BvaW50XTsKLQotICAgIGRp
Y3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyhuaWwsIGF0dHJTdHJpbmcsIENGUmFuZ2VNYWtlKDAs
IFthdHRyU3RyaW5nIGxlbmd0aF0pLCBuaWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvckFwcEtpdFNjcmVlblBvaW50KHNjcmVlblBv
aW50KSwgZmFsc2UsIG5pbCk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfaG92ZXJGZWVkYmFja1N1
c3BlbmRlZENoYW5nZWQKLXsKLSAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVu
dF07Ci19Ci0KLS0gKEJPT0wpX2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDooS2V5Ym9hcmRFdmVu
dCopZXZlbnQgc2hvdWxkU2F2ZUNvbW1hbmQ6KEJPT0wpc2hvdWxkU2F2ZQotewotICAgIC8vIEFz
ayBBcHBLaXQgdG8gcHJvY2VzcyB0aGUga2V5IGV2ZW50IC0tIGl0IHdpbGwgY2FsbCBiYWNrIHdp
dGggZWl0aGVyIGluc2VydFRleHQgb3IgZG9Db21tYW5kQnlTZWxlY3Rvci4KLSAgICBXZWJIVE1M
Vmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0
ZXJzLmV2ZW50V2FzSGFuZGxlZCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNv
bW1hbmQgPSBzaG91bGRTYXZlOwotICAgIC8vIElmIHdlJ3JlIGludGVyY2VwdGluZyB0aGUgaW5p
dGlhbCBJTSBjYWxsIHdlIGFzc3VtZSB0aGF0IHRoZSBJTSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50
LCAKLSAgICAvLyBhbmQgb25seSBjaGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0aGUg
TlNUZXh0SW5wdXQvUmVzcG9uZGVyIGNhbGxiYWNrcyBpcyB1c2VkLgotICAgIC8vIFdlIGFzc3Vt
ZSB0aGUgSU0gd2lsbCAqbm90KiBjb25zdW1lIGhvdGtleSBzZXF1ZW5jZXMKLSAgICBwYXJhbWV0
ZXJzLmNvbnN1bWVkQnlJTSA9ICFldmVudC0+bWV0YUtleSgpICYmIHNob3VsZFNhdmU7Ci0KLSAg
ICBpZiAoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQt
PmtleUV2ZW50KCkpIHsKLSAgICAgICAgTlNFdmVudCAqbWFjRXZlbnQgPSBwbGF0Zm9ybUV2ZW50
LT5tYWNFdmVudCgpOwotICAgICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TS2V5RG93biAm
JiBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGZpbHRlcktleURvd246bWFjRXZlbnRdKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoW21hY0V2ZW50IHR5
cGVdID09IE5TRmxhZ3NDaGFuZ2VkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgcGFyYW1ldGVycy5ldmVudCA9IGV2ZW50OwotICAgICAgICBfcHJpdmF0ZS0+
aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9ICZwYXJhbWV0ZXJzOwotICAgICAgICBfcHJp
dmF0ZS0+cmVjZWl2ZWROT09QID0gTk87Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxLZXlwcmVzc0Nv
bW1hbmQ+JiBjb21tYW5kcyA9IGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCk7Ci0gICAgICAgIGJv
b2wgaGFzS2V5cHJlc3NDb21tYW5kID0gIWNvbW1hbmRzLmlzRW1wdHkoKTsKLQotICAgICAgICAv
LyBGSVhNRTogaW50ZXJwcmV0S2V5RXZlbnRzIGRvZXNuJ3QgbWF0Y2ggYXBwbGljYXRpb24ga2V5
IGVxdWl2YWxlbnRzIChzdWNoIGFzIENtZCtBKSwKLSAgICAgICAgLy8gYW5kIHNlbmRzIG5vb3A6
IGZvciB0aG9zZS4gQXMgYSByZXN1bHQsIHdlIGRvbid0IGhhbmRsZSB0aG9zZSBmcm9tIHdpdGhp
biBXZWJDb3JlLAotICAgICAgICAvLyBidXQgc2VuZCBhIGZ1bGwgc2VxdWVuY2Ugb2YgRE9NIGV2
ZW50cywgaW5jbHVkaW5nIGFuIHVubmVlZGVkIGtleXByZXNzLgotICAgICAgICBpZiAocGFyYW1l
dGVycy5zaG91bGRTYXZlQ29tbWFuZCB8fCAhaGFzS2V5cHJlc3NDb21tYW5kKQotICAgICAgICAg
ICAgW3NlbGYgaW50ZXJwcmV0S2V5RXZlbnRzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDptYWNF
dmVudF1dOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gY29tbWFu
ZHMuc2l6ZSgpOwotICAgICAgICAgICAgLy8gQXJlIHRoZXJlIGNvbW1hbmRzIHRoYXQgd291bGQg
anVzdCBjYXVzZSB0ZXh0IGluc2VydGlvbiBpZiBleGVjdXRlZCB2aWEgRWRpdG9yPwotICAgICAg
ICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9k
ZSB0byBkZWNpZGUgaG93IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQsIHNvIHdlIGxlYXZlIGl0IHVw
b24gV2ViQ29yZQotICAgICAgICAgICAgLy8gdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0
ZWx5IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2ZW50
IGJlIGdlbmVyYXRlZAotICAgICAgICAgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRh
YiBjaGFyYWN0ZXIsIG9yIEVudGVyKS4KLSAgICAgICAgICAgIGJvb2wgaGF2ZVRleHRJbnNlcnRp
b25Db21tYW5kcyA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVj
dG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKV0uaXNUZXh0
SW5zZXJ0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFu
ZHMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFoYXZlVGV4dEluc2Vy
dGlvbkNvbW1hbmRzIHx8IHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OkNoYXIpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZHNbaV0uY29tbWFuZE5h
bWUgPT0gImluc2VydFRleHQ6IikKLSAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGluc2Vy
dFRleHQ6Y29tbWFuZHNbaV0udGV4dF07Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFtzZWxmIGRvQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3RvckZy
b21TdHJpbmcoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpXTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2
ZW50c1BhcmFtZXRlcnMgPSAwOwotICAgIH0KLSAgICByZXR1cm4gKCFfcHJpdmF0ZS0+cmVjZWl2
ZWROT09QICYmIHBhcmFtZXRlcnMuZXZlbnRXYXNIYW5kbGVkKSB8fCBwYXJhbWV0ZXJzLmNvbnN1
bWVkQnlJTTsKLX0KLQotLSAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZTsKLX0KLQotLSAodm9pZClzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTooV2ViQ29y
ZTo6Q2FjaGVkSW1hZ2UqKXNvdXJjZQotewotICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHNvdXJj
ZS0+YWRkQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKLSAgICAKLSAgICBpZiAoX3ByaXZh
dGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQotICAgICAgICBfcHJpdmF0ZS0+cHJvbWlz
ZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7
Ci0gICAgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlID0gc291cmNlOwotfQot
Ci0jdW5kZWYgQ09NTUFORF9QUk9MT0dVRQotCi0tICh2b2lkKV9sYXlvdXRJZk5lZWRlZAotewot
ICAgIEFTU0VSVCghX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwotCi0gICAgaWYgKF9wcml2
YXRlLT5uZWVkc1RvQXBwbHlTdHlsZXMgfHwgW3NlbGYgX25lZWRzTGF5b3V0XSkKLSAgICAgICAg
W3NlbGYgbGF5b3V0XTsKLX0KLQotLSAodm9pZClfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZl
Ci17Ci0gICAgW3NlbGYgX2xheW91dElmTmVlZGVkXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBf
cHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRh
YmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKLQotICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJy
YXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNj
ZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKLSAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5k
ZXg6aV0gX2xheW91dElmTmVlZGVkXTsKLQotICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJl
bGVhc2VdOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZp
ZXdzID0gTk87Ci0jZW5kaWYKLX0KLQotLSAodm9pZCkgX2Rlc3Ryb3lBbGxXZWJQbHVnaW5zCi17
Ci0gICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107Ci19Ci0K
LS0gKEJPT0wpX2lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gX3ByaXZh
dGUtPnJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyOwotfQotCi0tIChCT09MKV9uZWVkc0xheW91dAot
ewotICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfbmVlZHNMYXlvdXRdOwotfQotCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotLSAodm9pZClhdHRhY2hSb290TGF5ZXI6KENBTGF5
ZXIqKWxheWVyCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewotICAg
ICAgICBXZWJMYXllckhvc3RpbmdWaWV3KiBob3N0aW5nVmlldyA9IFtbV2ViTGF5ZXJIb3N0aW5n
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2VsZiBib3VuZHNdXTsKLSAgICAgICAgW2hvc3Rp
bmdWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hl
aWdodFNpemFibGUpXTsKLSAgICAgICAgW3NlbGYgYWRkU3Vidmlldzpob3N0aW5nVmlld107Ci0g
ICAgICAgIFtob3N0aW5nVmlldyByZWxlYXNlXTsKLSAgICAgICAgLy8gaG9zdGluZ1ZpZXcgaXMg
b3duZWQgYnkgYmVpbmcgYSBzdWJ2aWV3IG9mIHNlbGYKLSAgICAgICAgX3ByaXZhdGUtPmxheWVy
SG9zdGluZ1ZpZXcgPSBob3N0aW5nVmlldzsKLSAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3Rh
cnRlZEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKLSAgICB9
Ci0KLSAgICAvLyBNYWtlIGEgY29udGFpbmVyIGxheWVyLCB3aGljaCB3aWxsIGdldCBzaXplZC9w
b3NpdGlvbmVkIGJ5IEFwcEtpdCBhbmQgQ0EKLSAgICBDQUxheWVyKiB2aWV3TGF5ZXIgPSBbQ0FM
YXllciBsYXllcl07Ci0gICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldExheWVyOnZp
ZXdMYXllcl07Ci0gICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6
WUVTXTsKLSAgICAKLSAgICAvLyBQYXJlbnQgb3VyIHJvb3QgbGF5ZXIgaW4gdGhlIGNvbnRhaW5l
ciBsYXllcgotICAgIFt2aWV3TGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXJdOwotfQotCi0tICh2b2lk
KWRldGFjaFJvb3RMYXllcgotewotICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykg
ewotICAgICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0TGF5ZXI6bmlsXTsKLSAg
ICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6Tk9dOwotICAg
ICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0g
ICAgICAgIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gbmlsOwotICAgICAgICBbW3NlbGYg
X3dlYlZpZXddIF9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxmIF9m
cmFtZV1dOwotICAgIH0KLX0KLSNlbmRpZgotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJI
VE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KQotCi0tIChOU0FycmF5ICopdmFsaWRBdHRy
aWJ1dGVzRm9yTWFya2VkVGV4dAotewotICAgIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0
ZXM7Ci0gICAgaWYgKCF2YWxpZEF0dHJpYnV0ZXMpIHsKLSAgICAgICAgdmFsaWRBdHRyaWJ1dGVz
ID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICBOU1VuZGVy
bGluZVN0eWxlQXR0cmlidXRlTmFtZSwgTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWUsCi0g
ICAgICAgICAgICBOU01hcmtlZENsYXVzZVNlZ21lbnRBdHRyaWJ1dGVOYW1lLCBOU1RleHRJbnB1
dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lLCBuaWxdOwotICAgICAgICAvLyBOU1RleHQg
YWxzbyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMsIGJ1dCBpdCdzCi0gICAgICAg
IC8vIGhhcmQgdG8gdGVsbCB3aGljaCBhcmUgcmVhbGx5IHJlcXVpcmVkIGZvciB0ZXh0IGlucHV0
IHRvCi0gICAgICAgIC8vIHdvcmsgd2VsbDsgSSBoYXZlIG5vdCBzZWVuIGFueSBpbnB1dCBtZXRo
b2QgbWFrZSB1c2Ugb2YgdGhlbSB5ZXQuCi0gICAgICAgIC8vICAgICBOU0ZvbnRBdHRyaWJ1dGVO
YW1lLCBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIC8vICAgICBOU0Jh
Y2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsIE5TTGFuZ3VhZ2VBdHRyaWJ1dGVOYW1lLgotICAg
ICAgICBDRlJldGFpbih2YWxpZEF0dHJpYnV0ZXMpOwotICAgIH0KLSAgICBMT0coVGV4dElucHV0
LCAidmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dCAtPiAoLi4uKSIpOwotICAgIHJldHVybiB2
YWxpZEF0dHJpYnV0ZXM7Ci19Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4
dAotewotICAgIHJldHVybiBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID8gW3N1cGVyIGlu
cHV0Q29udGV4dF0gOiBuaWw7Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXRleHRTdG9y
YWdlCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7Ci0gICAgICAg
IExPRyhUZXh0SW5wdXQsICJ0ZXh0U3RvcmFnZSAtPiBuaWwiKTsKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICB9Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBbc2VsZiBhdHRyaWJ1
dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFVJTlRfTUFYKV07Ci0gICAgCi0g
ICAgTE9HKFRleHRJbnB1dCwgInRleHRTdG9yYWdlIC0+IFwiJUBcIiIsIHJlc3VsdCA/IFtyZXN1
bHQgc3RyaW5nXSA6IEAiIik7Ci0gICAgCi0gICAgLy8gV2UgaGF2ZSB0byByZXR1cm4gYW4gZW1w
dHkgc3RyaW5nIHJhdGhlciB0aGFuIG51bGwgdG8gcHJldmVudCBUU00gZnJvbSBjYWxsaW5nIC1z
dHJpbmcKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDogW1tbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoTlNVSW50
ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50KXRoZVBvaW50Ci17Ci0gICAgTlNX
aW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3Nl
bGYgX2ZyYW1lXTsKLQotICAgIGlmICh3aW5kb3cpCi0gICAgICAgIHRoZVBvaW50ID0gW3dpbmRv
dyBjb252ZXJ0U2NyZWVuVG9CYXNlOnRoZVBvaW50XTsKLSAgICB0aGVQb2ludCA9IFtzZWxmIGNv
bnZlcnRQb2ludDp0aGVQb2ludCBmcm9tVmlldzpuaWxdOwotCi0gICAgRE9NUmFuZ2UgKnJhbmdl
ID0gW2ZyYW1lIF9jaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6dGhlUG9pbnRdOwotICAgIGlmICghcmFu
Z2UpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgImNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KCVm
LCAlZikgLT4gTlNOb3RGb3VuZCIsIHRoZVBvaW50LngsIHRoZVBvaW50LnkpOwotICAgICAgICBy
ZXR1cm4gTlNOb3RGb3VuZDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgcmVzdWx0ID0gW2Zy
YW1lIF9jb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6cmFuZ2VdLmxvY2F0aW9uOwotICAgIExPRyhU
ZXh0SW5wdXQsICJjaGFyYWN0ZXJJbmRleEZvclBvaW50OiglZiwgJWYpIC0+ICV1IiwgdGhlUG9p
bnQueCwgdGhlUG9pbnQueSwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChO
U1JlY3QpZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UKLXsgICAg
Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICAKLSAgICAvLyBKdXN0
IHRvIG1hdGNoIE5TVGV4dFZpZXcncyBiZWhhdmlvci4gUmVncmVzc2lvbiB0ZXN0cyBjYW5ub3Qg
ZGV0ZWN0IHRoaXM7Ci0gICAgLy8gdG8gcmVwcm9kdWNlLCB1c2UgYSB0ZXN0IGFwcGxpY2F0aW9u
IGZyb20gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4MgotICAgIC8v
ICh0eXBlIHNvbWV0aGluZzsgdHJ5IHJhbmdlcyAoMSwgLTEpIGFuZCAoMiwgLTEpLgotICAgIGlm
ICgodGhlUmFuZ2UubG9jYXRpb24gKyB0aGVSYW5nZS5sZW5ndGggPCB0aGVSYW5nZS5sb2NhdGlv
bikgJiYgKHRoZVJhbmdlLmxvY2F0aW9uICsgdGhlUmFuZ2UubGVuZ3RoICE9IDApKQotICAgICAg
ICB0aGVSYW5nZS5sZW5ndGggPSAwOwotICAgIAotICAgIERPTVJhbmdlICpyYW5nZSA9IFtmcmFt
ZSBfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOnRoZVJhbmdlXTsKLSAgICBpZiAoIXJhbmdlKSB7
Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooJXUs
ICV1KSAtPiAoMCwgMCwgMCwgMCkiLCB0aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3Ro
KTsKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7Ci0gICAgfQotICAgIAot
ICAgIEFTU0VSVChbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsKLSAgICBBU1NFUlQoW3JhbmdlIGVu
ZENvbnRhaW5lcl0pOwotICAgIAotICAgIE5TUmVjdCByZXN1bHRSZWN0ID0gW2ZyYW1lIF9maXJz
dFJlY3RGb3JET01SYW5nZTpyYW5nZV07Ci0gICAgcmVzdWx0UmVjdCA9IFtzZWxmIGNvbnZlcnRS
ZWN0OnJlc3VsdFJlY3QgdG9WaWV3Om5pbF07Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3Nl
bGYgd2luZG93XTsKLSAgICBpZiAod2luZG93KQotICAgICAgICByZXN1bHRSZWN0Lm9yaWdpbiA9
IFt3aW5kb3cgY29udmVydEJhc2VUb1NjcmVlbjpyZXN1bHRSZWN0Lm9yaWdpbl07Ci0gICAgCi0g
ICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+
ICglZiwgJWYsICVmLCAlZikiLCB0aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3RoLCBy
ZXN1bHRSZWN0Lm9yaWdpbi54LCByZXN1bHRSZWN0Lm9yaWdpbi55LCByZXN1bHRSZWN0LnNpemUu
d2lkdGgsIHJlc3VsdFJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIHJldHVybiByZXN1bHRSZWN0Owot
fQotCi0tIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKLXsKLSAgICBpZiAoIWlzVGV4dElucHV0KGNv
cmUoW3NlbGYgX2ZyYW1lXSkpKSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJh
bmdlIC0+IChOU05vdEZvdW5kLCAwKSIpOwotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7Ci0gICAgfQotICAgIE5TUmFuZ2UgcmVzdWx0ID0gW1tzZWxmIF9mcmFtZV0g
X3NlbGVjdGVkTlNSYW5nZV07Ci0KLSAgICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRSYW5nZSAt
PiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotLSAoTlNSYW5nZSltYXJrZWRSYW5nZQotewotICAgIFdlYkZyYW1lICp3
ZWJGcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUod2Vi
RnJhbWUpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
MCwgMCk7Ci0gICAgTlNSYW5nZSByZXN1bHQgPSBbd2ViRnJhbWUgX2NvbnZlcnRUb05TUmFuZ2U6
Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tcG9zaXRpb25SYW5nZSgpLmdldCgpXTsKLQotICAgIExP
RyhUZXh0SW5wdXQsICJtYXJrZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwg
cmVzdWx0Lmxlbmd0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAoTlNBdHRyaWJ1dGVk
U3RyaW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooTlNSYW5nZSluc1JhbmdlCi17
Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShmcmFtZSk7Ci0gICAgaWYgKCFpc1RleHRJbnB1dChjb3JlRnJhbWUpIHx8IGlz
SW5QYXNzd29yZEZpZWxkKGNvcmVGcmFtZSkpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgImF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwgbnNSYW5nZS5sb2Nh
dGlvbiwgbnNSYW5nZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAgICBE
T01SYW5nZSAqZG9tUmFuZ2UgPSBbZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTpuc1Jh
bmdlXTsKLSAgICBpZiAoIWRvbVJhbmdlKSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRy
aWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRp
b24sIG5zUmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlOmNvcmUoZG9tUmFuZ2UpXTsKLSAgICAKLSAgICAvLyBbTlNB
dHRyaWJ1dGVkU3RyaW5nKFdlYktpdEV4dHJhcykgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlOl0gIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcgCi0gICAgLy8gd2hpdGVzcGFj
ZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2hpY2ggYnJlYWtzIHRoZSBBVE9LIGlucHV0IG1l
dGhvZC4gIDxyZGFyOi8vcHJvYmxlbS81NDAwNTUxPgotICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRo
aXMgd2UgdHJ1bmNhdGUgdGhlIHJlc3VsdGFudCBzdHJpbmcgdG8gdGhlIGNvcnJlY3QgbGVuZ3Ro
LgotICAgIGlmIChbcmVzdWx0IGxlbmd0aF0gPiBuc1JhbmdlLmxlbmd0aCkgewotICAgICAgICBB
U1NFUlQoW3Jlc3VsdCBsZW5ndGhdID09IG5zUmFuZ2UubGVuZ3RoICsgMSk7Ci0gICAgICAgIEFT
U0VSVChbW3Jlc3VsdCBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6bnNSYW5nZS5sZW5ndGhdID09
ICdcbicgfHwgW1tyZXN1bHQgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4Om5zUmFuZ2UubGVuZ3Ro
XSA9PSAnICcpOwotICAgICAgICByZXN1bHQgPSBbcmVzdWx0IGF0dHJpYnV0ZWRTdWJzdHJpbmdG
cm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbnNSYW5nZS5sZW5ndGgpXTsKLSAgICB9Ci0gICAgTE9H
KFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gXCIl
QFwiIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgsIFtyZXN1bHQgc3RyaW5nXSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gdGVzdCBmb3IgMTAuNCBiZWNhdXNlIG9mIDxy
ZGFyOi8vcHJvYmxlbS80MjQzNDYzPgotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0tIChsb25n
KWNvbnZlcnNhdGlvbklkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gKGxvbmcpc2VsZjsKLX0KLSNl
bHNlCi0tIChOU0ludGVnZXIpY29udmVyc2F0aW9uSWRlbnRpZmllcgotewotICAgIHJldHVybiAo
TlNJbnRlZ2VyKXNlbGY7Ci19Ci0jZW5kaWYKLQotLSAoQk9PTCloYXNNYXJrZWRUZXh0Ci17Ci0g
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgQk9PTCByZXN1
bHQgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsK
LSAgICBMT0coVGV4dElucHV0LCAiaGFzTWFya2VkVGV4dCAtPiAldSIsIHJlc3VsdCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl1bm1hcmtUZXh0Ci17Ci0gICAgTE9HKFRleHRJ
bnB1dCwgInVubWFya1RleHQiKTsKLQotICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0
ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KLSAg
ICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBf
cHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBfcHJpdmF0ZS0+aW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0KLSAgICBpZiAocGFyYW1ldGVycykgewot
ICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBZRVM7Ci0gICAgICAgIHBhcmFt
ZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POwotICAgIH0KLSAgICAKLSAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9y
KCktPmNvbmZpcm1Db21wb3NpdGlvbigpOwotfQotCi1zdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJs
aW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJs
aW5lPiYgcmVzdWx0KQotewotICAgIGludCBsZW5ndGggPSBbW3N0cmluZyBzdHJpbmddIGxlbmd0
aF07Ci0KLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKLSAgICAgICAg
TlNSYW5nZSByYW5nZTsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IFtzdHJpbmcgYXR0
cmlidXRlc0F0SW5kZXg6aSBsb25nZXN0RWZmZWN0aXZlUmFuZ2U6JnJhbmdlIGluUmFuZ2U6TlNN
YWtlUmFuZ2UoaSwgbGVuZ3RoIC0gaSldOwotCi0gICAgICAgIGlmIChOU051bWJlciAqc3R5bGUg
PSBbYXR0cnMgb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSkgewot
ICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6YmxhY2s7Ci0gICAgICAgICAgICBpZiAo
TlNDb2xvciAqY29sb3JBdHRyID0gW2F0dHJzIG9iamVjdEZvcktleTpOU1VuZGVybGluZUNvbG9y
QXR0cmlidXRlTmFtZV0pCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21OU0NvbG9y
KFtjb2xvckF0dHIgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFj
ZV0pOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZShyYW5n
ZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyYW5nZSksIGNvbG9yLCBbc3R5bGUgaW50VmFsdWVdID4g
MSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaSA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVu
Z3RoOwotICAgIH0KLX0KLQotLSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0
ZWRSYW5nZTooTlNSYW5nZSluZXdTZWxSYW5nZQotewotICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3Ry
aW5nID0gW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsg
Ly8gT3RoZXJ3aXNlLCBOU1N0cmluZwotCi0gICAgTE9HKFRleHRJbnB1dCwgInNldE1hcmtlZFRl
eHQ6XCIlQFwiIHNlbGVjdGVkUmFuZ2U6KCV1LCAldSkiLCBpc0F0dHJpYnV0ZWRTdHJpbmcgPyBb
c3RyaW5nIHN0cmluZ10gOiBzdHJpbmcsIG5ld1NlbFJhbmdlLmxvY2F0aW9uLCBuZXdTZWxSYW5n
ZS5sZW5ndGgpOwotCi0gICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2Vk
IHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgotICAgIFdlYkhUTUxW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzID0gMDsKLQotICAgIGlmIChwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHBh
cmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IFlFUzsKLSAgICAgICAgcGFyYW1ldGVycy0+Y29u
c3VtZWRCeUlNID0gTk87Ci0gICAgfQotICAgIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIVtzZWxmIF9pc0VkaXRhYmxlXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOwotICAgIE5TU3RyaW5nICp0ZXh0
ID0gc3RyaW5nOwotCi0gICAgaWYgKGlzQXR0cmlidXRlZFN0cmluZykgewotICAgICAgICB1bnNp
Z25lZCBtYXJrZWRUZXh0TGVuZ3RoID0gWyhOU1N0cmluZyAqKXN0cmluZyBsZW5ndGhdOwotICAg
ICAgICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJbnB1
dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0aXZl
UmFuZ2U6TlVMTCBpblJhbmdlOk5TTWFrZVJhbmdlKDAsIG1hcmtlZFRleHRMZW5ndGgpXTsKLSAg
ICAgICAgTE9HKFRleHRJbnB1dCwgIiAgICBSZXBsYWNlbWVudFJhbmdlOiAlQCIsIHJhbmdlU3Ry
aW5nKTsKLSAgICAgICAgLy8gVGhlIEFwcEtpdCBhZGRzIGEgJ3NlY3JldCcgcHJvcGVydHkgdG8g
dGhlIHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSByZXBsYWNlbWVudCByYW5nZS4KLSAgICAgICAg
Ly8gVGhlIHJlcGxhY2VtZW50IHJhbmdlIGlzIHRoZSByYW5nZSBvZiB0aGUgdGhlIHRleHQgdGhh
dCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IHN0cmluZy4KLSAgICAgICAgaWYgKHJh
bmdlU3RyaW5nKQotICAgICAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3NlbGVjdE5TUmFuZ2U6TlNS
YW5nZUZyb21TdHJpbmcocmFuZ2VTdHJpbmcpXTsKLQotICAgICAgICB0ZXh0ID0gW3N0cmluZyBz
dHJpbmddOwotICAgICAgICBleHRyYWN0VW5kZXJsaW5lcyhzdHJpbmcsIHVuZGVybGluZXMpOwot
ICAgIH0KLQotICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHRleHQsIHVu
ZGVybGluZXMsIG5ld1NlbFJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKG5ld1NlbFJhbmdlKSk7
Ci19Ci0KLS0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAg
TE9HKFRleHRJbnB1dCwgImRvQ29tbWFuZEJ5U2VsZWN0b3I6XCIlc1wiIiwgc2VsX2dldE5hbWUo
c2VsZWN0b3IpKTsKLQotICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3Nl
ZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KLSAgICAvLyBUaGUg
c2FtZSBjYWxsIHRvIGludGVycHJldEtleUV2ZW50cyBjYW4gZG8gbW9yZSB0aGFuIG9uZSBjb21t
YW5kLgotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1l
dGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIGlmIChw
YXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKLQotICAg
IGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3Iobm9vcDopKSB7Ci0gICAgICAgIF9wcml2YXRlLT5y
ZWNlaXZlZE5PT1AgPSBZRVM7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBLZXlib2Fy
ZEV2ZW50KiBldmVudCA9IHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7Ci0gICAg
Ym9vbCBzaG91bGRTYXZlQ29tbWFuZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+c2hvdWxk
U2F2ZUNvbW1hbmQ7Ci0KLSAgICBpZiAoZXZlbnQgJiYgc2hvdWxkU2F2ZUNvbW1hbmQpCi0gICAg
ICAgIGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuYXBwZW5kKEtleXByZXNzQ29tbWFuZChOU1N0
cmluZ0Zyb21TZWxlY3RvcihzZWxlY3RvcikpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgb25seSBkaXJlY3QgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3Rvcjogc2Vl
IHRoZSBwYXJhbWV0ZXJzIGJ5IHNldHRpbmcgdG8gMC4KLSAgICAgICAgX3ByaXZhdGUtPmludGVy
cHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOwotCi0gICAgICAgIGJvb2wgZXZlbnRXYXNIYW5k
bGVkOwotCi0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAg
ICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJW
aWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdKQotICAgICAgICAgICAgZXZlbnRXYXNI
YW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1h
bmQgY29tbWFuZCA9IFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07Ci0gICAg
ICAgICAgICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKQotICAgICAgICAgICAgICAgIGV2ZW50
V2FzSGFuZGxlZCA9IGNvbW1hbmQuZXhlY3V0ZShldmVudCk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBJZiBXZWJLaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGNvbW1h
bmQsIHdlIG5lZWQgdG8gcGFzcyB0aGUgc2VsZWN0b3IgdG8gc3VwZXIuCi0gICAgICAgICAgICAg
ICAgX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IHNlbGVjdG9yOwot
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHNpbmsgZG9lcyB0d28gdGhpbmdzOiAxKSBUZWxscyB1
cyBpZiB0aGUgcmVzcG9uZGVyIHdlbnQgdW5oYW5kbGVkLCBhbmQKLSAgICAgICAgICAgICAgICAv
LyAyKSBwcmV2ZW50cyBhbnkgTlNCZWVwOyB3ZSBkb24ndCBldmVyIHdhbnQgdG8gYmVlcCBoZXJl
LgotICAgICAgICAgICAgICAgIFdlYlJlc3BvbmRlckNoYWluU2luayAqc2luayA9IFtbV2ViUmVz
cG9uZGVyQ2hhaW5TaW5rIGFsbG9jXSBpbml0V2l0aFJlc3BvbmRlckNoYWluOnNlbGZdOwotICAg
ICAgICAgICAgICAgIFtzdXBlciBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKLSAgICAg
ICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSAhW3NpbmsgcmVjZWl2ZWRVbmhhbmRsZWRDb21t
YW5kXTsKLSAgICAgICAgICAgICAgICBbc2luayBkZXRhY2hdOwotICAgICAgICAgICAgICAgIFtz
aW5rIHJlbGVhc2VdOwotCi0gICAgICAgICAgICAgICAgX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9D
b21tYW5kQnlTZWxlY3RvciA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAocGFyYW1ldGVycykKLSAgICAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxl
ZCA9IGV2ZW50V2FzSGFuZGxlZDsKLQotICAgICAgICAvLyBSZXN0b3JlIHRoZSBwYXJhbWV0ZXJz
IHNvIHRoYXQgb3RoZXIgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3Rvcjogc2VlIHRoZW0sCi0g
ICAgICAgIC8vIGFuZCBvdGhlciBjb21tYW5kcyBjYW4gcGFydGljaXBhdGUgaW4gc2V0dGluZyB0
aGUgImV2ZW50V2FzSGFuZGxlZCIgZmxhZy4KLSAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgIH0KLX0KLQotLSAodm9pZClpbnNl
cnRUZXh0OihpZClzdHJpbmcKLXsKLSAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJp
bmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lz
ZSwgTlNTdHJpbmcKLQotICAgIExPRyhUZXh0SW5wdXQsICJpbnNlcnRUZXh0OlwiJUBcIiIsIGlz
QXR0cmlidXRlZFN0cmluZyA/IFtzdHJpbmcgc3RyaW5nXSA6IHN0cmluZyk7Ci0KLSAgICBXZWJI
VE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0
ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0
S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0gICAgaWYgKHBhcmFtZXRlcnMpCi0gICAgICAgIHBh
cmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POwotCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBp
bnNlcnRpbmcgYW4gYXR0cmlidXRlZCBzdHJpbmcgYnV0IGlucHV0IG1ldGhvZHMgZG9uJ3QgYXBw
ZWFyIHRvIHJlcXVpcmUgdGhpcy4KLSAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7Ci0gICAgTlNTdHJpbmcgKnRleHQ7Ci0gICAgYm9vbCBpc0Zyb21JbnB1
dE1ldGhvZCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlv
bigpOwotICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgdGV4dCA9IFtzdHJp
bmcgc3RyaW5nXTsKLSAgICAgICAgLy8gV2UgZGVhbCB3aXRoIHRoZSBOU1RleHRJbnB1dFJlcGxh
Y2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBmcm9tIE5TQXR0cmlidXRlZFN0cmlu
ZyBoZXJlCi0gICAgICAgIC8vIHNpbXBseSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgYXQgbGVhc3Qg
b25lIElucHV0IE1ldGhvZCAtLSBpdCBjb3JyZXNvbmRzIHRvIHRoZSBrRXZlbnRQYXJhbVRleHRJ
bnB1dFNlbmRSZXBsYWNlUmFuZ2UKLSAgICAgICAgLy8gZXZlbnQgaW4gVFNNLiAgVGhpcyBiZWhh
dmlvdXIgbWF0Y2hlcyB0aGF0IG9mIC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3Rl
ZFJhbmdlOl0gd2hlbiBpdCByZWNlaXZlcyBhbgotICAgICAgICAvLyBOU0F0dHJpYnV0ZWRTdHJp
bmcKLSAgICAgICAgTlNTdHJpbmcgKnJhbmdlU3RyaW5nID0gW3N0cmluZyBhdHRyaWJ1dGU6TlNU
ZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdEluZGV4OjAgbG9uZ2VzdEVm
ZmVjdGl2ZVJhbmdlOk5VTEwgaW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbdGV4dCBsZW5ndGhdKV07
Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgUmVwbGFjZW1lbnRSYW5nZTogJUAiLCByYW5n
ZVN0cmluZyk7Ci0gICAgICAgIGlmIChyYW5nZVN0cmluZykgewotICAgICAgICAgICAgW1tzZWxm
IF9mcmFtZV0gX3NlbGVjdE5TUmFuZ2U6TlNSYW5nZUZyb21TdHJpbmcocmFuZ2VTdHJpbmcpXTsK
LSAgICAgICAgICAgIGlzRnJvbUlucHV0TWV0aG9kID0gWUVTOwotICAgICAgICB9Ci0gICAgfSBl
bHNlCi0gICAgICAgIHRleHQgPSBzdHJpbmc7Ci0KLSAgICBib29sIGV2ZW50SGFuZGxlZCA9IGZh
bHNlOwotICAgIGlmIChbdGV4dCBsZW5ndGhdKSB7Ci0gICAgICAgIEtleWJvYXJkRXZlbnQqIGV2
ZW50ID0gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMtPmV2ZW50IDogMDsKLQotICAgICAgICAvLyBp
bnNlcnRUZXh0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbiBpbnB1dCBtZXRob2Qgb3IgZnJvbSBub3Jt
YWwga2V5IGV2ZW50IHByb2Nlc3NpbmcKLSAgICAgICAgLy8gSWYgaXRzIGZyb20gbm9ybWFsIGtl
eSBldmVudCBwcm9jZXNzaW5nLCB3ZSBtYXkgbmVlZCB0byBzYXZlIHRoZSBhY3Rpb24gdG8gcGVy
Zm9ybSBpdCBsYXRlci4KLSAgICAgICAgLy8gSWYgaXRzIGZyb20gYW4gaW5wdXQgbWV0aG9kLCB0
aGVuIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgaW5zZXJ0IHRoZSB0ZXh0IG5vdy4gIAotICAgICAg
ICAvLyBXZSBhc3N1bWUgaXQncyBmcm9tIHRoZSBpbnB1dCBtZXRob2QgaWYgd2UgaGF2ZSBtYXJr
ZWQgdGV4dC4KLSAgICAgICAgLy8gRklYTUU6IEluIHRoZW9yeSwgdGhpcyBjb3VsZCBiZSB3cm9u
ZyBmb3Igc29tZSBpbnB1dCBtZXRob2RzLCBzbyB3ZSBzaG91bGQgdHJ5IHRvIGZpbmQKLSAgICAg
ICAgLy8gYW5vdGhlciB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxsIGlzIGZyb20gdGhlIGlu
cHV0IG1ldGhvZAotICAgICAgICBib29sIHNob3VsZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAm
JiBwYXJhbWV0ZXJzLT5zaG91bGRTYXZlQ29tbWFuZDsKLSAgICAgICAgaWYgKGV2ZW50ICYmIHNo
b3VsZFNhdmVDb21tYW5kICYmICFpc0Zyb21JbnB1dE1ldGhvZCkgewotICAgICAgICAgICAgZXZl
bnQtPmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKCJpbnNlcnRUZXh0
OiIsIHRleHQpKTsKLSAgICAgICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgU3RyaW5nIGV2ZW50VGV4dCA9IHRleHQ7Ci0gICAgICAgIGV2ZW50VGV4
dC5yZXBsYWNlKE5TQmFja1RhYkNoYXJhY3RlciwgTlNUYWJDaGFyYWN0ZXIpOyAvLyBzYW1lIHRo
aW5nIGlzIGRvbmUgaW4gS2V5RXZlbnRNYWMubW0gaW4gV2ViQ29yZQotICAgICAgICBpZiAoY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKSkgewotICAgICAgICAgICAg
aWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKQotICAgICAgICAgICAg
ICAgIGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZlbnRU
ZXh0LCBldmVudCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBldmVudEhh
bmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZp
cm1Db21wb3NpdGlvbihldmVudFRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIGlmICghcGFyYW1ldGVycykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmIChpc0Zyb21JbnB1dE1ldGhvZCkgewotICAgICAgICAvLyBBbGxvdyBkb0NvbW1hbmRCeVNl
bGVjdG9yOiB0byBiZSBjYWxsZWQgYWZ0ZXIgaW5zZXJ0VGV4dDogYnkgcmVzZXR0aW5nIGludGVy
cHJldEtleUV2ZW50c1BhcmFtZXRlcnMKLSAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2
ZW50c1BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1l
ZEJ5SU0gPSBZRVM7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgcGFyYW1ldGVy
cy0+ZXZlbnRXYXNIYW5kbGVkID0gZXZlbnRIYW5kbGVkOwotfQotCi0tICh2b2lkKV91cGRhdGVT
ZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXIKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBpc1RleHRJbnB1dChjb3JlRnJhbWUpICYmICFp
c0luUGFzc3dvcmRGaWVsZChjb3JlRnJhbWUpOwotICAgIGlmIChleHBvc2VJbnB1dENvbnRleHQg
IT0gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCkgewotICAgICAgICBfcHJpdmF0ZS0+ZXhw
b3NlSW5wdXRDb250ZXh0ID0gZXhwb3NlSW5wdXRDb250ZXh0OwotICAgICAgICAvLyBMZXQgQXBw
S2l0IGNhY2hlIGEgcG90ZW50aWFsbHkgY2hhbmdlZCBpbnB1dCBjb250ZXh0LgotICAgICAgICAv
LyBXZWJDb3JlIHJvdXRpbmVseSBzZXRzIHRoZSBzZWxlY3Rpb24gdG8gTm9uZSB3aGVuIGVkaXRp
bmcsIGFuZCBJTXMgYmVjb21lIHVuaGFwcHkgd2hlbiBhbiBpbnB1dCBjb250ZXh0IHN1ZGRlbmx5
IHR1cm5zIG5pbCwgc2VlIGJ1ZyAyNjAwOS4KLSAgICAgICAgaWYgKCFjb3JlRnJhbWUgfHwgIWNv
cmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKQotICAgICAgICAgICAgW05TQXBwIHVwZGF0
ZVdpbmRvd3NdOwotICAgIH0KLQotICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29t
cG9zaXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9y
KCktPmlnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgIHVuc2lnbmVkIGVuZDsKLSAgICBpZiAoY29yZUZy
YW1lLT5lZGl0b3IoKS0+Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24oc3RhcnQsIGVuZCkpCi0gICAg
ICAgIFtbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl0gbWFya2VkVGV4dFNlbGVj
dGlvbkNoYW5nZWQ6TlNNYWtlUmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0KSBjbGllbnQ6c2VsZl07
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3Np
dGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9uKCk7Ci0gICAgICAgIFtbTlNJbnB1dE1hbmFn
ZXIgY3VycmVudElucHV0TWFuYWdlcl0gbWFya2VkVGV4dEFiYW5kb25lZDpzZWxmXTsKLSAgICB9
Ci19Ci0KLUBlbmQKLQotLyoKLSAgICBUaGlzIGNsYXNzIHJ1bnMgdGhlIHNob3cgZm9yIGhhbmRp
bmcgdGhlIGNvbXBsZXRlOiBOU1RleHRWaWV3IG9wZXJhdGlvbi4gIEl0IGNvdW50cyBvbiBpdHMg
SFRNTCB2aWV3Ci0gICAgdG8gY2FsbCBlbmRSZXZlcnRpbmdDaGFuZ2U6IHdoZW5ldmVyIHRoZSBj
dXJyZW50IGNvbXBsZXRpb24gbmVlZHMgdG8gYmUgYWJvcnRlZC4KLSAKLSAgICBUaGUgY2xhc3Mg
aXMgaW4gb25lIG9mIHR3byBtb2RlczogIFBvcHVwV2luZG93IHNob3dpbmcsIG9yIG5vdC4gIEl0
IGlzIHNob3duIHdoZW4gYSBjb21wbGV0aW9uIHlpZWxkcwotICAgIG1vcmUgdGhhbiBvbmUgbWF0
Y2guICBJZiBhIGNvbXBsZXRpb24geWllbGRzIG9uZSBvciB6ZXJvIG1hdGNoZXMsIGl0IGlzIG5v
dCBzaG93biwgYW5kICoqdGhlcmUgaXMgbm8KLSAgICBzdGF0ZSBjYXJyaWVkIGFjcm9zcyB0byB0
aGUgbmV4dCBjb21wbGV0aW9uKiouCi0gKi8KLQotQGltcGxlbWVudGF0aW9uIFdlYlRleHRDb21w
bGV0ZUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhIVE1MVmlldzooV2ViSFRNTFZpZXcgKil2
aWV3Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgX3ZpZXcgPSB2aWV3OwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX3BvcHVwV2luZG93IHJlbGVhc2VdOwotICAgIFtfY29t
cGxldGlvbnMgcmVsZWFzZV07Ci0gICAgW19vcmlnaW5hbFN0cmluZyByZWxlYXNlXTsKLSAgICAK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpX2luc2VydE1hdGNoOihOU1N0cmlu
ZyAqKW1hdGNoCi17Ci0gICAgLy8gRklYTUU6IDM3Njk2NTQgLSBXZSBzaG91bGQgcHJlc2VydmUg
Y2FzZSBvZiBzdHJpbmcgYmVpbmcgaW5zZXJ0ZWQsIGV2ZW4gaW4gcHJlZml4IChidXQgdGhlbiBh
bHNvIGJlCi0gICAgLy8gYWJsZSB0byByZXZlcnQgdGhhdCkuICBNaW1pYyBOU1RleHQuCi0gICAg
V2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07Ci0gICAgTlNTdHJpbmcgKm5ld1RleHQg
PSBbbWF0Y2ggc3Vic3RyaW5nRnJvbUluZGV4OnByZWZpeExlbmd0aF07Ci0gICAgW2ZyYW1lIF9y
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3VGV4dCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21h
cnRSZXBsYWNlOk5PXTsKLX0KLQotLy8gbW9zdGx5IGxpZnRlZCBmcm9tIE5TVGV4dFZpZXdfS2V5
QmluZGluZy5tCi0tICh2b2lkKV9idWlsZFVJCi17Ci0gICAgTlNSZWN0IHNjcm9sbEZyYW1lID0g
TlNNYWtlUmVjdCgwLCAwLCAxMDAsIDEwMCk7Ci0gICAgTlNSZWN0IHRhYmxlRnJhbWUgPSBOU1pl
cm9SZWN0OyAgICAKLSAgICB0YWJsZUZyYW1lLnNpemUgPSBbTlNTY3JvbGxWaWV3IGNvbnRlbnRT
aXplRm9yRnJhbWVTaXplOnNjcm9sbEZyYW1lLnNpemUgaGFzSG9yaXpvbnRhbFNjcm9sbGVyOk5P
IGhhc1ZlcnRpY2FsU2Nyb2xsZXI6WUVTIGJvcmRlclR5cGU6TlNOb0JvcmRlcl07Ci0gICAgLy8g
QWRkZWQgY2FzdCB0byB3b3JrIGFyb3VuZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgRm91bmRhdGlv
biBpbml0V2l0aElkZW50aWZpZXI6IG1ldGhvZHMgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIHR5
cGVzLgotICAgIE5TVGFibGVDb2x1bW4gKmNvbHVtbiA9IFsoTlNUYWJsZUNvbHVtbiAqKVtOU1Rh
YmxlQ29sdW1uIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6W05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6MF1dOwotICAgIFtjb2x1bW4gc2V0V2lkdGg6dGFibGVGcmFtZS5zaXplLndpZHRoXTsKLSAg
ICBbY29sdW1uIHNldEVkaXRhYmxlOk5PXTsKLSAgICAKLSAgICBfdGFibGVWaWV3ID0gW1tOU1Rh
YmxlVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTp0YWJsZUZyYW1lXTsKLSAgICBbX3RhYmxlVmll
dyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZV07Ci0gICAgW190YWJsZVZp
ZXcgYWRkVGFibGVDb2x1bW46Y29sdW1uXTsKLSAgICBbY29sdW1uIHJlbGVhc2VdOwotICAgIFtf
dGFibGVWaWV3IHNldEdyaWRTdHlsZU1hc2s6TlNUYWJsZVZpZXdHcmlkTm9uZV07Ci0gICAgW190
YWJsZVZpZXcgc2V0Q29ybmVyVmlldzpuaWxdOwotICAgIFtfdGFibGVWaWV3IHNldEhlYWRlclZp
ZXc6bmlsXTsKLSAgICBbX3RhYmxlVmlldyBzZXRDb2x1bW5BdXRvcmVzaXppbmdTdHlsZTpOU1Rh
YmxlVmlld1VuaWZvcm1Db2x1bW5BdXRvcmVzaXppbmdTdHlsZV07Ci0gICAgW190YWJsZVZpZXcg
c2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW190YWJsZVZpZXcgc2V0RGF0YVNvdXJjZTpzZWxmXTsK
LSAgICBbX3RhYmxlVmlldyBzZXRUYXJnZXQ6c2VsZl07Ci0gICAgW190YWJsZVZpZXcgc2V0RG91
YmxlQWN0aW9uOkBzZWxlY3Rvcih0YWJsZUFjdGlvbjopXTsKLSAgICAKLSAgICBOU1Njcm9sbFZp
ZXcgKnNjcm9sbFZpZXcgPSBbW05TU2Nyb2xsVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzY3Jv
bGxGcmFtZV07Ci0gICAgW3Njcm9sbFZpZXcgc2V0Qm9yZGVyVHlwZTpOU05vQm9yZGVyXTsKLSAg
ICBbc2Nyb2xsVmlldyBzZXRIYXNWZXJ0aWNhbFNjcm9sbGVyOllFU107Ci0gICAgW3Njcm9sbFZp
ZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRT
aXphYmxlXTsKLSAgICBbc2Nyb2xsVmlldyBzZXREb2N1bWVudFZpZXc6X3RhYmxlVmlld107Ci0g
ICAgW190YWJsZVZpZXcgcmVsZWFzZV07Ci0gICAgCi0gICAgX3BvcHVwV2luZG93ID0gW1tOU1dp
bmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpzY3JvbGxGcmFtZSBzdHlsZU1hc2s6TlNC
b3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6
Tk9dOwotICAgIFtfcG9wdXBXaW5kb3cgc2V0QWxwaGFWYWx1ZTowLjg4Zl07Ci0gICAgW19wb3B1
cFdpbmRvdyBzZXRDb250ZW50VmlldzpzY3JvbGxWaWV3XTsKLSAgICBbc2Nyb2xsVmlldyByZWxl
YXNlXTsKLSAgICBbX3BvcHVwV2luZG93IHNldEhhc1NoYWRvdzpZRVNdOwotICAgIFtfcG9wdXBX
aW5kb3cgc2V0T25lU2hvdDpZRVNdOwotICAgIFtfcG9wdXBXaW5kb3cgX3NldEZvcmNlQWN0aXZl
Q29udHJvbHM6WUVTXTsKLSAgICBbX3BvcHVwV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpO
T107Ci19Ci0KLS8vIG1vc3RseSBsaWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJpbmRpbmcubQot
LSAodm9pZClfcGxhY2VQb3B1cFdpbmRvdzooTlNQb2ludCl0b3BMZWZ0Ci17Ci0gICAgaW50IG51
bWJlclRvU2hvdyA9IFtfY29tcGxldGlvbnMgY291bnRdOwotICAgIGlmIChudW1iZXJUb1Nob3cg
PiAyMCkgewotICAgICAgICBudW1iZXJUb1Nob3cgPSAyMDsKLSAgICB9Ci0KLSAgICBOU1JlY3Qg
d2luZG93RnJhbWU7Ci0gICAgTlNQb2ludCB3b3JkU3RhcnQgPSB0b3BMZWZ0OwotICAgIHdpbmRv
d0ZyYW1lLm9yaWdpbiA9IFtbX3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOltfdmll
dyBjb252ZXJ0UG9pbnQ6d29yZFN0YXJ0IHRvVmlldzpuaWxdXTsKLSAgICB3aW5kb3dGcmFtZS5z
aXplLmhlaWdodCA9IG51bWJlclRvU2hvdyAqIFtfdGFibGVWaWV3IHJvd0hlaWdodF0gKyAobnVt
YmVyVG9TaG93ICsgMSkgKiBbX3RhYmxlVmlldyBpbnRlcmNlbGxTcGFjaW5nXS5oZWlnaHQ7Ci0g
ICAgd2luZG93RnJhbWUub3JpZ2luLnkgLT0gd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQ7Ci0gICAg
TlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxMi4wZl0sIE5TRm9udEF0dHJp
YnV0ZU5hbWUsIG5pbF07Ci0gICAgZmxvYXQgbWF4V2lkdGggPSAwLjBmOwotICAgIGludCBtYXhJ
bmRleCA9IC0xOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJUb1Nob3c7
IGkrKykgewotICAgICAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKFtbX2NvbXBsZXRpb25zIG9iamVj
dEF0SW5kZXg6aV0gc2l6ZVdpdGhBdHRyaWJ1dGVzOmF0dHJpYnV0ZXNdLndpZHRoKTsKLSAgICAg
ICAgaWYgKHdpZHRoID4gbWF4V2lkdGgpIHsKLSAgICAgICAgICAgIG1heFdpZHRoID0gd2lkdGg7
Ci0gICAgICAgICAgICBtYXhJbmRleCA9IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2luZG93
RnJhbWUuc2l6ZS53aWR0aCA9IDEwMDsKLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewotICAgICAg
ICBtYXhXaWR0aCA9IGNlaWxmKFtOU1Njcm9sbFZpZXcgZnJhbWVTaXplRm9yQ29udGVudFNpemU6
TlNNYWtlU2l6ZShtYXhXaWR0aCwgMTAwLjBmKSBoYXNIb3Jpem9udGFsU2Nyb2xsZXI6Tk8gaGFz
VmVydGljYWxTY3JvbGxlcjpZRVMgYm9yZGVyVHlwZTpOU05vQm9yZGVyXS53aWR0aCk7Ci0gICAg
ICAgIG1heFdpZHRoID0gY2VpbGYoW05TV2luZG93IGZyYW1lUmVjdEZvckNvbnRlbnRSZWN0Ok5T
TWFrZVJlY3QoMC4wZiwgMC4wZiwgbWF4V2lkdGgsIDEwMC4wZikgc3R5bGVNYXNrOk5TQm9yZGVy
bGVzc1dpbmRvd01hc2tdLnNpemUud2lkdGgpOwotICAgICAgICBtYXhXaWR0aCArPSA1LjBmOwot
ICAgICAgICB3aW5kb3dGcmFtZS5zaXplLndpZHRoID0gTUFYKG1heFdpZHRoLCB3aW5kb3dGcmFt
ZS5zaXplLndpZHRoKTsKLSAgICAgICAgbWF4V2lkdGggPSBNSU4oNDAwLjBmLCB3aW5kb3dGcmFt
ZS5zaXplLndpZHRoKTsKLSAgICB9Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRGcmFtZTp3aW5kb3dG
cmFtZSBkaXNwbGF5Ok5PXTsKLSAgICAKLSAgICBbX3RhYmxlVmlldyByZWxvYWREYXRhXTsKLSAg
ICBbX3RhYmxlVmlldyBzZWxlY3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aElu
ZGV4OjBdIGJ5RXh0ZW5kaW5nU2VsZWN0aW9uOk5PXTsKLSAgICBbX3RhYmxlVmlldyBzY3JvbGxS
b3dUb1Zpc2libGU6MF07Ci0gICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOwotICAgIFtfcG9w
dXBXaW5kb3cgc2V0TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07Ci0gICAgW19wb3B1cFdp
bmRvdyBvcmRlckZyb250Om5pbF07ICAgIAotICAgIFtbX3ZpZXcgd2luZG93XSBhZGRDaGlsZFdp
bmRvdzpfcG9wdXBXaW5kb3cgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKLX0KLQotLSAodm9pZClk
b0NvbXBsZXRpb24KLXsKLSAgICBpZiAoIV9wb3B1cFdpbmRvdykgewotICAgICAgICBOU1NwZWxs
Q2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOwot
ICAgICAgICBpZiAoIWNoZWNrZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVs
bENoZWNrZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IEdldCBwcmVjZWVkaW5nIHdvcmQgc3RlbQotICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3Zp
ZXcgX2ZyYW1lXTsKLSAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1l
KS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBET01S
YW5nZSAqd2hvbGVXb3JkID0gW2ZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9u
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORAotICAgICAgICAgICAgZGlyZWN0aW9uOlNlbGVj
dGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJEIGdyYW51bGFyaXR5OldvcmRHcmFudWxhcml0eV07Ci0g
ICAgICAgIERPTVJhbmdlICpwcmVmaXggPSBbd2hvbGVXb3JkIGNsb25lUmFuZ2VdOwotICAgICAg
ICBbcHJlZml4IHNldEVuZDpbc2VsZWN0aW9uIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3NlbGVj
dGlvbiBzdGFydE9mZnNldF1dOwotCi0gICAgICAgIC8vIFJlamVjdCBzb21lIE5PUCBjYXNlcwot
ICAgICAgICBpZiAoW3ByZWZpeCBjb2xsYXBzZWRdKSB7Ci0gICAgICAgICAgICBOU0JlZXAoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBOU1N0cmluZyAqcHJlZml4
U3RyID0gW2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpwcmVmaXhdOwotICAgICAgICBOU1N0cmluZyAq
dHJpbW1lZFByZWZpeCA9IFtwcmVmaXhTdHIgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNl
dDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKLSAg
ICAgICAgaWYgKFt0cmltbWVkUHJlZml4IGxlbmd0aF0gPT0gMCkgewotICAgICAgICAgICAgTlNC
ZWVwKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcHJlZml4TGVu
Z3RoID0gW3ByZWZpeFN0ciBsZW5ndGhdOwotCi0gICAgICAgIC8vIExvb2t1cCBtYXRjaGVzCi0g
ICAgICAgIFtfY29tcGxldGlvbnMgcmVsZWFzZV07Ci0gICAgICAgIF9jb21wbGV0aW9ucyA9IFtj
aGVja2VyIGNvbXBsZXRpb25zRm9yUGFydGlhbFdvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBbcHJl
Zml4U3RyIGxlbmd0aF0pIGluU3RyaW5nOnByZWZpeFN0ciBsYW5ndWFnZTpuaWwgaW5TcGVsbERv
Y3VtZW50V2l0aFRhZzpbW192aWV3IF93ZWJWaWV3XSBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11d
OwotICAgICAgICBbX2NvbXBsZXRpb25zIHJldGFpbl07Ci0gICAgCi0gICAgICAgIGlmICghX2Nv
bXBsZXRpb25zIHx8IFtfY29tcGxldGlvbnMgY291bnRdID09IDApIHsKLSAgICAgICAgICAgIE5T
QmVlcCgpOwotICAgICAgICB9IGVsc2UgaWYgKFtfY29tcGxldGlvbnMgY291bnRdID09IDEpIHsK
LSAgICAgICAgICAgIFtzZWxmIF9pbnNlcnRNYXRjaDpbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5k
ZXg6MF1dOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKCFfb3JpZ2luYWxT
dHJpbmcpOyAgICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGJlIHNldCBJRkYgd2UgaGF2ZSBhIHBv
cHVwIHdpbmRvdwotICAgICAgICAgICAgX29yaWdpbmFsU3RyaW5nID0gW1tmcmFtZSBfc3RyaW5n
Rm9yUmFuZ2U6c2VsZWN0aW9uXSByZXRhaW5dOwotICAgICAgICAgICAgW3NlbGYgX2J1aWxkVUld
OwotICAgICAgICAgICAgTlNSZWN0IHdvcmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdE5vZGU6
W3dob2xlV29yZCBzdGFydENvbnRhaW5lcl0gb2Zmc2V0Olt3aG9sZVdvcmQgc3RhcnRPZmZzZXRd
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsKLSAgICAgICAgICAgIC8v
ICsxIHRvIGJlIHVuZGVyIHRoZSB3b3JkLCBub3QgdGhlIGNhcmV0Ci0gICAgICAgICAgICAvLyBG
SVhNRSAtIDM3Njk2NTIgLSBXcm9uZyBwb3NpdGlvbmluZyBmb3IgcmlnaHQgdG8gbGVmdCBsYW5n
dWFnZXMuICBXZSBzaG91bGQgbGluZSB1cCB0aGUgdXBwZXIKLSAgICAgICAgICAgIC8vIHJpZ2h0
IGNvcm5lciB3aXRoIHRoZSBjYXJldCBpbnN0ZWFkIG9mIHVwcGVyIGxlZnQsIGFuZCB0aGUgKzEg
d291bGQgYmUgYSAtMS4KLSAgICAgICAgICAgIE5TUG9pbnQgd29yZExvd2VyTGVmdCA9IHsgTlNN
aW5YKHdvcmRSZWN0KSsxLCBOU01heFkod29yZFJlY3QpIH07Ci0gICAgICAgICAgICBbc2VsZiBf
cGxhY2VQb3B1cFdpbmRvdzp3b3JkTG93ZXJMZWZ0XTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwotICAg
IH0KLX0KLQotLSAodm9pZCllbmRSZXZlcnRpbmdDaGFuZ2U6KEJPT0wpcmV2ZXJ0Q2hhbmdlIG1v
dmVMZWZ0OihCT09MKWdvTGVmdAotewotICAgIGlmIChfcG9wdXBXaW5kb3cpIHsKLSAgICAgICAg
Ly8gdGVhciBkb3duIFVJCi0gICAgICAgIFtbX3ZpZXcgd2luZG93XSByZW1vdmVDaGlsZFdpbmRv
dzpfcG9wdXBXaW5kb3ddOwotICAgICAgICBbX3BvcHVwV2luZG93IG9yZGVyT3V0OnNlbGZdOwot
ICAgICAgICAvLyBNdXN0IGF1dG9yZWxlYXNlIGJlY2F1c2UgZXZlbnQgdHJhY2tpbmcgY29kZSBt
YXkgYmUgb24gdGhlIHN0YWNrIHRvdWNoaW5nIFVJCi0gICAgICAgIFtfcG9wdXBXaW5kb3cgYXV0
b3JlbGVhc2VdOwotICAgICAgICBfcG9wdXBXaW5kb3cgPSBuaWw7Ci0KLSAgICAgICAgaWYgKHJl
dmVydENoYW5nZSkgewotICAgICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFt
ZV07Ci0gICAgICAgICAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpfb3JpZ2lu
YWxTdHJpbmcgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Ci0gICAgICAg
IH0gZWxzZSBpZiAoW192aWV3IF9oYXNTZWxlY3Rpb25dKSB7Ci0gICAgICAgICAgICBpZiAoZ29M
ZWZ0KQotICAgICAgICAgICAgICAgIFtfdmlldyBtb3ZlQmFja3dhcmQ6bmlsXTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBbX3ZpZXcgbW92ZUZvcndhcmQ6bmlsXTsKLSAgICAg
ICAgfQotICAgICAgICBbX29yaWdpbmFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICBfb3JpZ2lu
YWxTdHJpbmcgPSBuaWw7Ci0gICAgfQotICAgIC8vIGVsc2UgdGhlcmUgaXMgbm8gc3RhdGUgdG8g
YWJvcnQgaWYgdGhlIHdpbmRvdyB3YXMgbm90IHVwCi19Ci0KLS0gKEJPT0wpcG9wdXBXaW5kb3dJ
c09wZW4KLXsKLSAgICByZXR1cm4gX3BvcHVwV2luZG93ICE9IG5pbDsKLX0KLQotLy8gV2ViSFRN
TFZpZXcgZ2l2ZXMgdXMgYSBjcmFjayBhdCBrZXkgZXZlbnRzIGl0IHNlZXMuIFJldHVybiB3aGV0
aGVyIHdlIGNvbnN1bWVkIHRoZSBldmVudC4KLS8vIFRoZSBmZWF0dXJlcyBmb3IgdGhlIHZhcmlv
dXMga2V5cyBtaW1pYyBOU1RleHRWaWV3LgotLSAoQk9PTClmaWx0ZXJLZXlEb3duOihOU0V2ZW50
ICopZXZlbnQKLXsKLSAgICBpZiAoIV9wb3B1cFdpbmRvdykKLSAgICAgICAgcmV0dXJuIE5POwot
ICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJz
XTsKLSAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHVu
aWNoYXIgYyA9IFtzdHJpbmcgY2hhcmFjdGVyQXRJbmRleDowXTsKLSAgICBpZiAoYyA9PSBOU1Vw
QXJyb3dGdW5jdGlvbktleSkgewotICAgICAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmll
dyBzZWxlY3RlZFJvd107Ci0gICAgICAgIGlmICgwIDwgc2VsZWN0ZWRSb3cpIHsKLSAgICAgICAg
ICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRo
SW5kZXg6c2VsZWN0ZWRSb3cgLSAxXSBieUV4dGVuZGluZ1NlbGVjdGlvbjpOT107Ci0gICAgICAg
ICAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dUb1Zpc2libGU6c2VsZWN0ZWRSb3cgLSAxXTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBpZiAoYyA9PSBOU0Rvd25B
cnJvd0Z1bmN0aW9uS2V5KSB7Ci0gICAgICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3
IHNlbGVjdGVkUm93XTsKLSAgICAgICAgaWYgKHNlbGVjdGVkUm93IDwgKGludClbX2NvbXBsZXRp
b25zIGNvdW50XSAtIDEpIHsKLSAgICAgICAgICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4
ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6c2VsZWN0ZWRSb3cgKyAxXSBieUV4dGVu
ZGluZ1NlbGVjdGlvbjpOT107Ci0gICAgICAgICAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dUb1Zp
c2libGU6c2VsZWN0ZWRSb3cgKyAxXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gWUVTOwot
ICAgIH0KLSAgICBpZiAoYyA9PSBOU1JpZ2h0QXJyb3dGdW5jdGlvbktleSB8fCBjID09ICdcbicg
fHwgYyA9PSAnXHInIHx8IGMgPT0gJ1x0JykgewotICAgICAgICAvLyBGSVhNRTogV2hhdCBhYm91
dCBiYWNrdGFiPwotICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6
Tk9dOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBpZiAoYyA9PSBOU0xlZnRBcnJv
d0Z1bmN0aW9uS2V5KSB7Ci0gICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3Zl
TGVmdDpZRVNdOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBpZiAoYyA9PSAweDFC
IHx8IGMgPT0gTlNGNUZ1bmN0aW9uS2V5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBGNT8KLSAgICAg
ICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIHJl
dHVybiBZRVM7Ci0gICAgfQotICAgIGlmIChjID09ICcgJyB8fCBjID49IDB4MjEgJiYgYyA8PSAw
eDJGIHx8IGMgPj0gMHgzQSAmJiBjIDw9IDB4NDAgfHwgYyA+PSAweDVCICYmIGMgPD0gMHg2MCB8
fCBjID49IDB4N0IgJiYgYyA8PSAweDdEKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgYWJv
dmUgbGlzdCBvZiBrZXlzIHJlYWxseSBkZWZpbml0aXZlPwotICAgICAgICAvLyBPcmlnaW5hbGx5
IHRoaXMgY29kZSBjYWxsZWQgaXNwdW5jdDsgYXJlbid0IHRoZXJlIG90aGVyIHB1bmN0dWF0aW9u
IGtleXMgb24gaW50ZXJuYXRpb25hbCBrZXlib2FyZHM/Ci0gICAgICAgIFtzZWxmIGVuZFJldmVy
dGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIHJldHVybiBOTzsgLy8gbGV0IHRo
ZSBjaGFyIGdldCBpbnNlcnRlZAotICAgIH0KLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQp
X3JlZmxlY3RTZWxlY3Rpb24KLXsKLSAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBz
ZWxlY3RlZFJvd107Ci0gICAgQVNTRVJUKHNlbGVjdGVkUm93ID49IDAgJiYgc2VsZWN0ZWRSb3cg
PCAoaW50KVtfY29tcGxldGlvbnMgY291bnRdKTsKLSAgICBbc2VsZiBfaW5zZXJ0TWF0Y2g6W19j
b21wbGV0aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkUm93XV07Ci19Ci0KLS0gKHZvaWQpdGFi
bGVBY3Rpb246KGlkKXNlbmRlcgotewotICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsKLSAg
ICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotfQotCi0tIChOU0lu
dGVnZXIpbnVtYmVyT2ZSb3dzSW5UYWJsZVZpZXc6KE5TVGFibGVWaWV3ICopdGFibGVWaWV3Ci17
Ci0gICAgcmV0dXJuIFtfY29tcGxldGlvbnMgY291bnRdOwotfQotCi0tIChpZCl0YWJsZVZpZXc6
KE5TVGFibGVWaWV3ICopdGFibGVWaWV3IG9iamVjdFZhbHVlRm9yVGFibGVDb2x1bW46KE5TVGFi
bGVDb2x1bW4gKil0YWJsZUNvbHVtbiByb3c6KE5TSW50ZWdlcilyb3cKLXsKLSAgICByZXR1cm4g
W19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OnJvd107Ci19Ci0KLS0gKHZvaWQpdGFibGVWaWV3
U2VsZWN0aW9uRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAg
IFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V2ViSFRNTFZpZXcgKFdlYkRvY3VtZW50UHJpdmF0ZVByb3RvY29scykKLQotLSAoTlNSZWN0KXNl
bGVjdGlvblJlY3QKLXsKLSAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCi0gICAgICAgIHJl
dHVybiBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25Cb3VuZHMoKTsKLSAgICByZXR1cm4g
TlNaZXJvUmVjdDsKLX0KLQotLSAoTlNBcnJheSAqKXNlbGVjdGlvblRleHRSZWN0cwotewotICAg
IGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0g
ICAgVmVjdG9yPEZsb2F0UmVjdD4gbGlzdDsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uVGV4dFJlY3Rz
KGxpc3QpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgIE5TTXV0YWJs
ZUFycmF5ICpyZXN1bHQgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0
eTpzaXplXSBhdXRvcmVsZWFzZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDps
aXN0W2ldXV07Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAoTlNWaWV3ICopc2Vs
ZWN0aW9uVmlldwotewotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU0ltYWdlICopc2VsZWN0
aW9uSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0Ci17Ci0gICAgaWYg
KFtzZWxmIF9oYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVd
KS0+c2VsZWN0aW9uSW1hZ2UoZm9yY2VCbGFja1RleHQpOwotICAgIHJldHVybiBuaWw7Ci19Ci0K
LS0gKE5TUmVjdClzZWxlY3Rpb25JbWFnZVJlY3QKLXsKLSAgICBpZiAoW3NlbGYgX2hhc1NlbGVj
dGlvbl0pCi0gICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25Cb3Vu
ZHMoKTsKLSAgICByZXR1cm4gTlNaZXJvUmVjdDsKLX0KLQotLSAoTlNBcnJheSAqKXBhc3RlYm9h
cmRUeXBlc0ZvclNlbGVjdGlvbgotewotICAgIGlmIChbc2VsZiBfY2FuU21hcnRDb3B5T3JEZWxl
dGVdKSB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5ICp0eXBlcyA9IFtbW1tzZWxmIGNsYXNzXSBf
c2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwotICAg
ICAgICBbdHlwZXMgYWRkT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKLSAgICAgICAg
cmV0dXJuIHR5cGVzOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBbW3NlbGYgY2xhc3Nd
IF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdOwotICAgIH0KLX0KLQotLSAodm9pZCl3cml0ZVNl
bGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6
KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBbc2VsZiBfd3JpdGVTZWxlY3Rpb25X
aXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hlZEF0
dHJpYnV0ZWRTdHJpbmc6bmlsXTsKLX0KLQotLSAodm9pZClzZWxlY3RBbGwKLXsKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoY29yZUZyYW1lKQot
ICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3RBbGwoKTsKLX0KLQotLSAodm9p
ZClkZXNlbGVjdEFsbAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKLX0KLQotLSAoTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAg
ICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX3N0cmluZ0ZvclJhbmdlOltzZWxmIF9kb2N1bWVudFJh
bmdlXV07Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9hdHRyaWJ1dGVTdHJpbmdGcm9t
RE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKLXsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTdHJpbmc7Ci0jaWYgIUxPR19ESVNBQkxFRCAgICAgICAgCi0gICAgZG91YmxlIHN0
YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0jZW5kaWYgICAgCi0gICAgYXR0cmli
dXRlZFN0cmluZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gX2luaXRXaXRoRE9NUmFu
Z2U6cmFuZ2VdIGF1dG9yZWxlYXNlXTsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgZG91YmxlIGR1
cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICBMT0coVGlt
aW5nLCAiY3JlYXRpbmcgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSBzZWxlY3Rpb24gdG9vayAlZiBz
ZWNvbmRzLiIsIGR1cmF0aW9uKTsKLSNlbmRpZgotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5n
OwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAg
RE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVT
dHJpbmdGcm9tRE9NUmFuZ2U6W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV07Ci0gICAgaWYgKCFh
dHRyaWJ1dGVkU3RyaW5nKSB7Ci0gICAgICAgIERvY3VtZW50KiBjb3JlRG9jdW1lbnQgPSBjb3Jl
KGRvY3VtZW50KTsKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJp
bmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOlJhbmdlOjpjcmVhdGUoY29yZURvY3Vt
ZW50LCBjb3JlRG9jdW1lbnQsIDAsIGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jaGlsZE5v
ZGVDb3VudCgpKS5nZXQoKV07Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOwot
fQotCi0tIChOU1N0cmluZyAqKXNlbGVjdGVkU3RyaW5nCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBf
ZnJhbWVdIF9zZWxlY3RlZFN0cmluZ107Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNl
bGVjdGVkQXR0cmlidXRlZFN0cmluZwotewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdXTsKLSAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgICAgIGlmIChjb3JlRnJh
bWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICAgICAgYXR0
cmlidXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5n
RnJvbVJhbmdlOnJhbmdlLmdldCgpXTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXR0
cmlidXRlZFN0cmluZzsKLX0KLQotLSAoQk9PTClzdXBwb3J0c1RleHRFbmNvZGluZwotewotICAg
IHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBk
aXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6
KEJPT0wpd3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uCi17
Ci0gICAgaWYgKCFbc3RyaW5nIGxlbmd0aF0pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+ZmluZFN0cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFw
RmxhZywgc3RhcnRJblNlbGVjdGlvbik7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdl
YkhUTUxWaWV3IChXZWJEb2N1bWVudEludGVybmFsUHJvdG9jb2xzKQotCi0tIChOU0RpY3Rpb25h
cnkgKillbGVtZW50QXRQb2ludDooTlNQb2ludClwb2ludAotewotICAgIHJldHVybiBbc2VsZiBl
bGVtZW50QXRQb2ludDpwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOwotfQotCi0tIChOU0Rp
Y3Rpb25hcnkgKillbGVtZW50QXRQb2ludDooTlNQb2ludClwb2ludCBhbGxvd1NoYWRvd0NvbnRl
bnQ6KEJPT0wpYWxsb3cKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1
cm4gW1tbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpj
b3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludChw
b2ludCksIGFsbG93KV0gYXV0b3JlbGVhc2VdOwotfQotCi0tIChOU1VJbnRlZ2VyKW1hcmtBbGxN
YXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNl
RmxhZyBsaW1pdDooTlNVSW50ZWdlcilsaW1pdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gY29yZUZyYW1lLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBj
YXNlRmxhZywgbGltaXQpOwotfQotCi0tICh2b2lkKXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGln
aGxpZ2h0ZWQ6KEJPT0wpbmV3VmFsdWUKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGNvcmVGcmFtZS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChuZXdWYWx1ZSk7
Ci19Ci0KLS0gKEJPT0wpbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAotewotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7Ci19Ci0K
LS0gKHZvaWQpdW5tYXJrQWxsVGV4dE1hdGNoZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBp
ZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPnJlbW92ZU1hcmtl
cnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7Ci19Ci0KLS0gKE5TQXJyYXkgKilyZWN0c0Zv
clRleHRNYXRjaGVzCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlm
ICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07Ci0KLSAgICBWZWN0
b3I8SW50UmVjdD4gcmVjdHMgPSBkb2N1bWVudC0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9j
dW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSByZWN0cy5zaXpl
KCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdp
dGhDYXBhY2l0eTpjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
Y291bnQ7ICsraW5kZXgpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVl
V2l0aFJlY3Q6cmVjdHNbaW5kZXhdXV07ICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUBl
bmQKLQotLy8gVGhpcyBpcyB1c2VkIGJ5IEFwcEtpdCBhbmQgaXMgaW5jbHVkZWQgaGVyZSBzbyB0
aGF0IFdlYkRhdGFQcm90b2NvbFNjaGVtZSBpcyBvbmx5IGRlZmluZWQgb25jZS4KLUBpbXBsZW1l
bnRhdGlvbiBOU1VSTCAoV2ViRGF0YVVSTCkKLQotKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRh
dGFVUkwKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNGVVVJ
RENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKLSAgICBDRlJlbGVh
c2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwg
VVVJRFN0cmluZ11dOwotICAgIENGUmVsZWFzZShVVUlEU3RyaW5nKTsKLSAgICByZXR1cm4gVVJM
OwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJSZXNwb25kZXJDaGFpblNpbmsKLQot
LSAoaWQpaW5pdFdpdGhSZXNwb25kZXJDaGFpbjooTlNSZXNwb25kZXIgKiljaGFpbgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gY2hhaW47
Ci0gICAgd2hpbGUgKE5TUmVzcG9uZGVyICpuZXh0ID0gW19sYXN0UmVzcG9uZGVySW5DaGFpbiBu
ZXh0UmVzcG9uZGVyXSkKLSAgICAgICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gbmV4dDsKLSAg
ICBbX2xhc3RSZXNwb25kZXJJbkNoYWluIHNldE5leHRSZXNwb25kZXI6c2VsZl07Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGV0YWNoCi17Ci0gICAgW19sYXN0UmVzcG9uZGVySW5D
aGFpbiBzZXROZXh0UmVzcG9uZGVyOm5pbF07Ci0gICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0g
bmlsOwotfQotCi0tIChCT09MKXJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZAotewotICAgIHJldHVy
biBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kOwotfQotCi0tICh2b2lkKW5vUmVzcG9uZGVyRm9y
OihTRUwpc2VsZWN0b3IKLXsKLSAgICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOwot
fQotCi0tICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIF9y
ZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQgPSBZRVM7Ci19Ci0KLS0gKEJPT0wpdHJ5VG9QZXJmb3Jt
OihTRUwpYWN0aW9uIHdpdGg6KGlkKW9iamVjdAotewotICAgIF9yZWNlaXZlZFVuaGFuZGxlZENv
bW1hbmQgPSBZRVM7Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotQGVuZApJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCShyZXZpc2lv
biA0NDI5MikJKGZyb20gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOjQ0MjkyKQor
KysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY0MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgIChDKSAyMDA2LCAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNA
Z21haWwuY29tKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgIldlYkhUTUxWaWV3LmgiCisKKyNpbXBvcnQgIkRPTUNTU1N0
eWxlRGVjbGFyYXRpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NRG9jdW1lbnRGcmFnbWVudElu
dGVybmFsLmgiCisjaW1wb3J0ICJET01Eb2N1bWVudEludGVybmFsLmgiCisjaW1wb3J0ICJET01O
b2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldl
YkFyY2hpdmUuaCIKKyNpbXBvcnQgIldlYkNsaXBWaWV3LmgiCisjaW1wb3J0ICJXZWJET01PcGVy
YXRpb25zSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgorI2lt
cG9ydCAiV2ViRGVmYXVsdFVJRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkRvY3VtZW50SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5oIgorI2ltcG9ydCAiV2Vi
RWRpdGluZ0RlbGVnYXRlLmgiCisjaW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5oIgorI2lt
cG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRnJhbWVQcml2YXRlLmgiCisj
aW1wb3J0ICJXZWJGcmFtZVZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV2ViS2l0TG9nZ2luZy5oIgorI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKKyNp
bXBvcnQgIldlYktpdFZlcnNpb25DaGVja3MuaCIKKyNpbXBvcnQgIldlYkxvY2FsaXphYmxlU3Ry
aW5ncy5oIgorI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCisjaW1wb3J0
ICJXZWJOU0V2ZW50RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLmgi
CisjaW1wb3J0ICJXZWJOU0ltYWdlRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU09iamVjdEV4dHJh
cy5oIgorI2ltcG9ydCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU1By
aW50T3BlcmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgorI2ltcG9y
dCAiV2ViTlNWaWV3RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIK
KyNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIKKyNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIldlYlByZWZlcmVuY2VzLmgiCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNl
c1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlJlc291cmNlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2Vi
U3RyaW5nVHJ1bmNhdG9yLmgiCisjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCisjaW1wb3J0
ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CisjaW1wb3J0IDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkSW1hZ2UuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
Q29sb3JNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRHJhZ0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0VkaXRvckRlbGV0ZUFjdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9F
eGNlcHRpb25IYW5kbGVycy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
SGl0VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFu
Z2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2Jq
Q0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGV4dFJlbmRlcmVyLmg+CisjaW1w
b3J0IDxXZWJDb3JlL21hcmt1cC5oPgorI2ltcG9ydCA8V2ViS2l0L0RPTS5oPgorI2ltcG9ydCA8
V2ViS2l0L0RPTUV4dGVuc2lvbnMuaD4KKyNpbXBvcnQgPFdlYktpdC9ET01Qcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPGRsZmNuLmg+CisjaW1w
b3J0IDxsaW1pdHM+CisjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK0BpbnRlcmZhY2UgTlNX
aW5kb3cgKEJvcmRlclZpZXdBY2Nlc3MpCistIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldzsKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIE5TV2luZG93IChCb3JkZXJWaWV3QWNjZXNzKQorLSAoTlNW
aWV3Kilfd2ViX2JvcmRlclZpZXcKK3sKKyAgICByZXR1cm4gX2JvcmRlclZpZXc7Cit9CitAZW5k
CisKK0BpbnRlcmZhY2UgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25kZXIgeworICAg
IE5TUmVzcG9uZGVyKiBfbGFzdFJlc3BvbmRlckluQ2hhaW47CisgICAgQk9PTCBfcmVjZWl2ZWRV
bmhhbmRsZWRDb21tYW5kOworfQorLSAoaWQpaW5pdFdpdGhSZXNwb25kZXJDaGFpbjooTlNSZXNw
b25kZXIgKiljaGFpbjsKKy0gKHZvaWQpZGV0YWNoOworLSAoQk9PTClyZWNlaXZlZFVuaGFuZGxl
ZENvbW1hbmQ7CitAZW5kCisKK3N0YXRpYyBJTVAgb2xkU2V0Q3Vyc29ySU1QID0gTlVMTDsKKwor
I2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisKK3N0YXRpYyBJTVAgb2xkUmVzZXRDdXJzb3JSZWN0
c0lNUCA9IE5VTEw7CitzdGF0aWMgQk9PTCBjYW5TZXRDdXJzb3IgPSBZRVM7CisKK3N0YXRpYyB2
b2lkIHJlc2V0Q3Vyc29yUmVjdHMoTlNXaW5kb3cqIHNlbGYsIFNFTCBjbWQpCit7CisgICAgTlNQ
b2ludCBwb2ludCA9IFtzZWxmIG1vdXNlTG9jYXRpb25PdXRzaWRlT2ZFdmVudFN0cmVhbV07Cisg
ICAgTlNWaWV3KiB2aWV3ID0gW1tzZWxmIF93ZWJfYm9yZGVyVmlld10gaGl0VGVzdDpwb2ludF07
CisgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAg
ICAgICAgV2ViSFRNTFZpZXcgKmh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3Kil2aWV3OworICAgICAg
ICBOU1BvaW50IGxvY2FsUG9pbnQgPSBbaHRtbFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21W
aWV3Om5pbF07CisgICAgICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IFtodG1sVmlldyBlbGVtZW50
QXRQb2ludDpsb2NhbFBvaW50IGFsbG93U2hhZG93Q29udGVudDpOT107CisgICAgICAgIERPTUVs
ZW1lbnQgKmVsZW1lbnQgPSBbZGljdCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudERPTU5vZGVLZXld
OworICAgICAgICBpZiAoIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxBcHBsZXRFbGVt
ZW50IGNsYXNzXV0gJiYgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxPYmplY3RFbGVt
ZW50IGNsYXNzXV0gJiYKKyAgICAgICAgICAgICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01I
VE1MRW1iZWRFbGVtZW50IGNsYXNzXV0pCisgICAgICAgICAgICBjYW5TZXRDdXJzb3IgPSBOTzsK
KyAgICB9CisgICAgb2xkUmVzZXRDdXJzb3JSZWN0c0lNUChzZWxmLCBjbWQpOworICAgIGNhblNl
dEN1cnNvciA9IFlFUzsKK30KKworc3RhdGljIHZvaWQgc2V0Q3Vyc29yKE5TQ3Vyc29yKiBzZWxm
LCBTRUwgY21kKQoreworICAgIGlmIChjYW5TZXRDdXJzb3IpCisgICAgICAgIG9sZFNldEN1cnNv
cklNUChzZWxmLCBjbWQpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBzZXRDdXJzb3IoTlNX
aW5kb3cqIHNlbGYsIFNFTCBjbWQsIE5TUG9pbnQgcG9pbnQpCit7CisgICAgTlNWaWV3KiB2aWV3
ID0gW1tzZWxmIF93ZWJfYm9yZGVyVmlld10gaGl0VGVzdDpwb2ludF07CisgICAgaWYgKFt2aWV3
IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgV2ViSFRNTFZp
ZXcgKmh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3Kil2aWV3OworICAgICAgICBOU1BvaW50IGxvY2Fs
UG9pbnQgPSBbaHRtbFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF07CisgICAg
ICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IFtodG1sVmlldyBlbGVtZW50QXRQb2ludDpsb2NhbFBv
aW50IGFsbG93U2hhZG93Q29udGVudDpOT107CisgICAgICAgIERPTUVsZW1lbnQgKmVsZW1lbnQg
PSBbZGljdCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudERPTU5vZGVLZXldOworICAgICAgICBpZiAo
IVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxBcHBsZXRFbGVtZW50IGNsYXNzXV0gJiYg
IVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxPYmplY3RFbGVtZW50IGNsYXNzXV0gJiYK
KyAgICAgICAgICAgICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MRW1iZWRFbGVtZW50
IGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG9sZFNldEN1cnNvcklN
UChzZWxmLCBjbWQsIHBvaW50KTsKK30KKworI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKK0BpbnRlcmZhY2UgV2ViTGF5ZXJIb3N0aW5nVmlldyA6IE5TVmlldwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViTGF5ZXJIb3N0aW5nVmlldworCisvLyBFbXB0eSBO
U1ZpZXdzIGludGVyY2VwdCByaWdodE1vdXNlRG93bjogdG8gZG8gY29udGV4dCBtZW51IGhhbmRs
aW5nLCBidXQgd2UgbmVlZCB0aGUgV2ViTGF5ZXJIb3N0aW5nVmlldyB0bworLy8gbGV0IHJpZ2h0
IG1vdXNlIGNsaWNrcyB0aHJvdWdoLgorLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAq
KWV2ZW50Cit7CisgICAgW1tzZWxmIG5leHRSZXNwb25kZXJdIHBlcmZvcm1TZWxlY3RvcjpfY21k
IHdpdGhPYmplY3Q6ZXZlbnRdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKK2V4dGVybiAiQyIgeworCisvLyBOZWVkIHRvIGRlY2xhcmUgdGhl
c2UgYXR0cmlidXRlIG5hbWVzIGJlY2F1c2UgQXBwS2l0IGV4cG9ydHMgdGhlbSBidXQgZG9lcyBu
b3QgbWFrZSB0aGVtIGF2YWlsYWJsZSBpbiBBUEkgb3IgU1BJIGhlYWRlcnMuCisKK2V4dGVybiBO
U1N0cmluZyAqTlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZTsKK2V4dGVybiBOU1N0
cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZTsKKworfQorCitA
aW50ZXJmYWNlIE5TVmlldyAoV2ViTlNWaWV3RGV0YWlscykKKy0gKHZvaWQpX3JlY3Vyc2l2ZURp
c3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJl
Y3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5TVmlldyAq
KXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKKy0gKHZvaWQpX3JlY3Vyc2l2ZURp
c3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDoo
TlNSZWN0KXZpc1JlY3Q7CistICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZSBkaXNwbGF5
UmVjdElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0IGluQ29udGV4dDooTlNHcmFw
aGljc0NvbnRleHQgKiljb250ZXh0IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKKy0gKE5TUmVjdClf
ZGlydHlSZWN0OworLSAodm9pZClfc2V0RHJhd3NPd25EZXNjZW5kYW50czooQk9PTClkcmF3c093
bkRlc2NlbmRhbnRzOworLSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0
b3JzOworLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlOworQGVuZAorCitAaW50ZXJmYWNl
IE5TQXBwbGljYXRpb24gKFdlYk5TQXBwbGljYXRpb25EZXRhaWxzKQorLSAodm9pZClzcGVha1N0
cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNXaW5kb3cgKFdl
Yk5TV2luZG93RGV0YWlscykKKy0gKGlkKV9uZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5n
OworLSAodm9pZClfc2V0Rm9yY2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOworQGVuZAorCitA
aW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWls
cykKKy0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOworLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVu
dDooRE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFy
eSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsKK0BlbmQKKwor
QGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoV2ViTlNTcGVsbENoZWNrZXJEZXRhaWxzKQorLSAo
dm9pZClsZWFybldvcmQ6KE5TU3RyaW5nICopd29yZDsKK0BlbmQKKworLy8gQnkgaW1hZ2luZyB0
byBhIHdpZHRoIGEgbGl0dGxlIHdpZGVyIHRoYW4gdGhlIGF2YWlsYWJsZSBwaXhlbHMsCisvLyB0
aGluIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIGRvd24gYSBsaXR0bGUsIG1hdGNoaW5nIHRoZSB3YXkg
dGhleQorLy8gcHJpbnQgaW4gSUUgYW5kIENhbWluby4gVGhpcyBsZXRzIHRoZW0gdXNlIGZld2Vy
IHNoZWV0cyB0aGFuIHRoZXkKKy8vIHdvdWxkIG90aGVyd2lzZSwgd2hpY2ggaXMgcHJlc3VtYWJs
eSB3aHkgb3RoZXIgYnJvd3NlcnMgZG8gdGhpcy4KKy8vIFdpZGUgcGFnZXMgd2lsbCBiZSBzY2Fs
ZWQgZG93biBtb3JlIHRoYW4gdGhpcy4KKyNkZWZpbmUgUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFj
dG9yICAgICAxLjI1ZgorCisvLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIGhvdyBzbWFsbCB3ZSBh
cmUgd2lsbGluZyB0byByZWR1Y2UgdGhlIHBhZ2UgY29udGVudAorLy8gaW4gb3JkZXIgdG8gYWNj
b21tb2RhdGUgdGhlIHdpZGVzdCBsaW5lLiBJZiB0aGUgcGFnZSB3b3VsZCBoYXZlIHRvIGJlCisv
LyByZWR1Y2VkIHNtYWxsZXIgdG8gbWFrZSB0aGUgd2lkZXN0IGxpbmUgZml0LCB3ZSBqdXN0IGNs
aXAgaW5zdGVhZCAodGhpcworLy8gYmVoYXZpb3IgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSwg
YXQgbGVhc3QpCisjZGVmaW5lIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvciAgICAgMi4wZgor
CisvLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIGhvdyBzaG9ydCB0aGUgbGFzdCBwcmludGVkIHBh
Z2Ugb2YgYSBtdWx0aS1wYWdlIHByaW50IHNlc3Npb24KKy8vIGNhbiBiZSBiZWZvcmUgd2UgdHJ5
IHRvIHNocmluayB0aGUgc2NhbGUgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcGFn
ZXMsIGFuZAorLy8gdGh1cyBlbGltaW5hdGUgdGhlIG9ycGhhbi4KKyNkZWZpbmUgTGFzdFByaW50
ZWRQYWdlT3JwaGFuUmF0aW8gICAgICAwLjFmCisKKy8vIFRoaXMgbnVtYmVyIGRldGVybWluZXMg
dGhlIGFtb3VudCB0aGUgc2NhbGUgZmFjdG9yIGlzIGFkanVzdGVkIHRvIHRyeSB0byBlbGltaW5h
dGUgb3JwaGFucy4KKy8vIEl0IGhhcyBubyBkaXJlY3QgbWF0aGVtYXRpY2FsIHJlbGF0aW9uc2hp
cCB0byBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbywgZHVlIHRvIHZhcmlhYmxlCisvLyBudW1i
ZXJzIG9mIHBhZ2VzLCBsb2dpYyB0byBhdm9pZCBicmVha2luZyBlbGVtZW50cywgYW5kIENTUy1z
dXBwbGllZCBoYXJkIHBhZ2UgYnJlYWtzLgorI2RlZmluZSBQcmludGluZ09ycGhhblNocmlua0Fk
anVzdG1lbnQgIDEuMWYKKworI2RlZmluZSBBVVRPU0NST0xMX0lOVEVSVkFMICAgICAgICAgICAg
IDAuMWYKKworI2RlZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9YICAgICAgICAgICAgIDQuMGYKKy8v
S2VlcCBib3JkZXJfeSBpbiBzeW5jaCB3aXRoIERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRl
ckluc2V0CisjZGVmaW5lIERSQUdfTEFCRUxfQk9SREVSX1kgICAgICAgICAgICAgMi4wZgorI2Rl
ZmluZSBEUkFHX0xBQkVMX1JBRElVUyAgICAgICAgICAgICAgIDUuMGYKKyNkZWZpbmUgRFJBR19M
QUJFTF9CT1JERVJfWV9PRkZTRVQgICAgICAgICAgICAgIDIuMGYKKworI2RlZmluZSBNSU5fRFJB
R19MQUJFTF9XSURUSF9CRUZPUkVfQ0xJUCAgICAgICAgMTIwLjBmCisjZGVmaW5lIE1BWF9EUkFH
X0xBQkVMX1dJRFRIICAgICAgICAgICAgICAgICAgICAzMjAuMGYKKworI2RlZmluZSBEUkFHX0xJ
TktfTEFCRUxfRk9OVF9TSVpFICAgMTEuMGYKKyNkZWZpbmUgRFJBR19MSU5LX1VSTF9GT05UX1NJ
WkUgICAxMC4wZgorCisvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNv
bWV0aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KKyNkZWZp
bmUgVFJBQ0tJTkdfUkVDVF9UQUcgMHhCQURGQUNFCisKKy8vIEZJWE1FOiBUaGlzIGNvbnN0YW50
IGlzIGNvcGllZCBmcm9tIEFwcEtpdCdzIF9OWFNtYXJ0UGFzdGUgY29uc3RhbnQuCisjZGVmaW5l
IFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlIEAiTmVYVCBzbWFydCBwYXN0ZSBwYXN0ZWJvYXJkIHR5
cGUiCisKKyNkZWZpbmUgU1RBTkRBUkRfV0VJR0hUIDUKKyNkZWZpbmUgTUlOX0JPTERfV0VJR0hU
IDcKKyNkZWZpbmUgU1RBTkRBUkRfQk9MRF9XRUlHSFQgOQorCisvLyBGYWtlIFVSTCBzY2hlbWUu
CisjZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNjaGVtZSBAIndlYmtpdC1mYWtlLXVybCIKKworLy8g
PHJkYXI6Ly9wcm9ibGVtLzQ5ODU1MjQ+IFJlZmVyZW5jZXMgdG8gV2ViQ29yZVNjcm9sbFZpZXcg
YXMgYSBzdWJ2aWV3IG9mIGEgV2ViSFRNTFZpZXcgbWF5IGJlIHByZXNlbnQKKy8vIGluIHNvbWUg
TklCIGZpbGVzLCBzbyBOU1VuYXJjaGl2ZXIgbXVzdCBiZSBzdGlsbCBhYmxlIHRvIGxvb2sgdXAg
dGhpcyBub3ctdW51c2VkIGNsYXNzLgorQGludGVyZmFjZSBXZWJDb3JlU2Nyb2xsVmlldyA6IE5T
U2Nyb2xsVmlldworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZVNjcm9sbFZpZXcKK0Bl
bmQKKworLy8gaWYgWUVTLCBkbyB0aGUgc3RhbmRhcmQgTlNWaWV3IGhpdCB0ZXN0ICh3aGljaCBj
YW4ndCBnaXZlIHRoZSByaWdodCByZXN1bHQgd2hlbiBIVE1MIG92ZXJsYXBzIGEgdmlldykKK3N0
YXRpYyBCT09MIGZvcmNlTlNWaWV3SGl0VGVzdDsKKworLy8gaWYgWUVTLCBkbyB0aGUgInRvcCBX
ZWJIVE1MVmlldyIgaGl0IHRlc3QgKHdoaWNoIHdlJ2QgbGlrZSB0byBkbyBhbGwgdGhlIHRpbWUg
YnV0IGNhbid0IGJlY2F1c2Ugb2YgSmF2YSByZXF1aXJlbWVudHMgW3NlZSBidWcgNDM0OTcyMV0p
CitzdGF0aWMgQk9PTCBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdDsKKworc3RhdGljIFdlYkhUTUxW
aWV3ICpsYXN0SGl0VmlldzsKKworLy8gV2UgbmVlZCB0aGlzIHRvIGJlIGFibGUgdG8gc2FmZWx5
IHJlZmVyZW5jZSB0aGUgQ2FjaGVkSW1hZ2UgZm9yIHRoZSBwcm9taXNlZCBkcmFnIGRhdGEKK3N0
YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkKK3sKKyAgICBz
dGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50ID0g
bmV3IENhY2hlZFJlc291cmNlQ2xpZW50OworICAgIHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJj
ZUNsaWVudDsKK30KKworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50
ZXJuYWwpCistIChCT09MKV9pbWFnZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRoczsKKy0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0IGFs
bG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0OworLSAoTlNTdHJpbmcgKilfcGxhaW5U
ZXh0RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CistICh2b2lkKV9w
YXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5U
ZXh0OihCT09MKWFsbG93UGxhaW5UZXh0OworLSAodm9pZClfcGFzdGVBc1BsYWluVGV4dFdpdGhQ
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOworLSAodm9pZClfcmVtb3ZlTW91
c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5OworLSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3
T2JzZXJ2ZXJzOworLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzOworLSAoQk9PTClfc2hv
dWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNp
bmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFj
dGlvbilhY3Rpb247CistIChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQg
cmVwbGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJ
bnNlcnRBY3Rpb24pYWN0aW9uOworLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0
aW9uOworLSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0OworLSAoRE9NUmFuZ2UgKilfc2Vs
ZWN0ZWRSYW5nZTsKKy0gKEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdl
OworLSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50OworLSAodm9p
ZClfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9Q
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJp
bmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmc7CistIChET01SYW5nZSAq
KV9kb2N1bWVudFJhbmdlOworLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKill
dmVudDsKKy0gKFdlYkhUTUxWaWV3ICopX3RvcEhUTUxWaWV3OworLSAoQk9PTClfaXNUb3BIVE1M
VmlldzsKKy0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmU7CistICh2b2lkKV93
ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemU7CistICh2b2lkKV93
ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmU7CitAZW5kCisKKyNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKworQGludGVy
ZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdUZXh0Q2hlY2tpbmdJbnRlcm5hbCkKKy0gKHZv
aWQpb3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyOworLSAoQk9PTClzbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQ7CistICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVTbWFydEluc2VydERlbGV0ZTooaWQpc2VuZGVy
OworLSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDsKKy0gKHZvaWQp
c2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7CistICh2b2lk
KXRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOihpZClzZW5kZXI7CistIChCT09MKWlz
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ7CistICh2b2lkKXNldEF1dG9tYXRpY0xpbmtE
ZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0xpbmtE
ZXRlY3Rpb246KGlkKXNlbmRlcjsKKy0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9u
RW5hYmxlZDsKKy0gKHZvaWQpc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJP
T0wpZmxhZzsKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjooaWQpc2Vu
ZGVyOworLSAoQk9PTClpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ7CistICh2b2lk
KXNldEF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ6KEJPT0wpZmxhZzsKKy0gKHZvaWQp
dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXI7CistIChCT09MKWlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKKy0gKHZvaWQpc2V0QXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcjsKK0BlbmQKKworI2VuZGlmCisKK0BpbnRl
cmZhY2UgV2ViSFRNTFZpZXcgKFdlYkZvcndhcmREZWNsYXJhdGlvbikgLy8gRklYTUU6IFB1dCB0
aGlzIGluIGEgbm9ybWFsIGNhdGVnb3J5IGFuZCBzdG9wIGRvaW5nIHRoZSBmb3J3YXJkIGRlY2xh
cmF0aW9uIHRyaWNrLgorLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11
bVBhZ2VXaWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1h
eFBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZTsKK0BlbmQKKwor
QGNsYXNzIE5TVGV4dElucHV0Q29udGV4dDsKK0BpbnRlcmZhY2UgTlNSZXNwb25kZXIgKEFwcEtp
dERldGFpbHMpCistIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQ7CitAZW5kCisK
K0BpbnRlcmZhY2UgTlNPYmplY3QgKE5TVGV4dElucHV0Q29udGV4dERldGFpbHMpCistIChCT09M
KXdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50czsKKy0gKEJPT0wpaGFuZGxlTW91c2VFdmVudDooTlNF
dmVudCAqKWV2ZW50OworQGVuZAorCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJOU1RleHRJ
bnB1dFN1cHBvcnQpIDxOU1RleHRJbnB1dD4KKy0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZvcklu
cHV0TWFuYWdlcjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRWRpdGluZ1N0
eWxlU3VwcG9ydCkKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlTdHlsZTsKKy0g
KE5TU3RyaW5nICopX2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcjsKK0BlbmQKKworQGlu
dGVyZmFjZSBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorLSAodm9pZClfd2ViX2Fk
ZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVBcnJheSAqKSBhcnJheTsK
K0BlbmQKKworQGludGVyZmFjZSBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmlld0ZpbGVJ
bnRlcm5hbCkKKy0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktl
eTooaWQpa2V5OworQGVuZAorCisvLyBIYW5kbGVzIHRoZSBjb21wbGV0ZTogdGV4dCBjb21tYW5k
CitAaW50ZXJmYWNlIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TlNUYWJs
ZVZpZXdEZWxlZ2F0ZSwgTlNUYWJsZVZpZXdEYXRhU291cmNlPiB7CitAcHJpdmF0ZQorICAgIFdl
YkhUTUxWaWV3ICpfdmlldzsKKyAgICBOU1dpbmRvdyAqX3BvcHVwV2luZG93OworICAgIE5TVGFi
bGVWaWV3ICpfdGFibGVWaWV3OworICAgIE5TQXJyYXkgKl9jb21wbGV0aW9uczsKKyAgICBOU1N0
cmluZyAqX29yaWdpbmFsU3RyaW5nOworICAgIGludCBwcmVmaXhMZW5ndGg7Cit9CistIChpZClp
bml0V2l0aEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKXZpZXc7CistICh2b2lkKWRvQ29tcGxldGlv
bjsKKy0gKHZvaWQpZW5kUmV2ZXJ0aW5nQ2hhbmdlOihCT09MKXJldmVydENoYW5nZSBtb3ZlTGVm
dDooQk9PTClnb0xlZnQ7CistIChCT09MKXBvcHVwV2luZG93SXNPcGVuOworLSAoQk9PTClmaWx0
ZXJLZXlEb3duOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKV9yZWZsZWN0U2VsZWN0aW9uOwor
QGVuZAorCitzdHJ1Y3QgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHsK
KyAgICBLZXlib2FyZEV2ZW50KiBldmVudDsKKyAgICBCT09MIGV2ZW50V2FzSGFuZGxlZDsKKyAg
ICBCT09MIHNob3VsZFNhdmVDb21tYW5kOworICAgIC8vIFRoZSBJbnB1dCBNZXRob2QgbWF5IGNv
bnN1bWUgYW4gZXZlbnQgYW5kIG5vdCB0ZWxsIHVzLCBpbgorICAgIC8vIHdoaWNoIGNhc2Ugd2Ug
c2hvdWxkIG5vdCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSBET00KKyAgICBCT09MIGNvbnN1bWVk
QnlJTTsKK307CisKK0BpbnRlcmZhY2UgV2ViSFRNTFZpZXdQcml2YXRlIDogTlNPYmplY3Qgewor
QHB1YmxpYworICAgIEJPT0wgY2xvc2VkOworICAgIEJPT0wgbmVlZHNUb0FwcGx5U3R5bGVzOwor
ICAgIEJPT0wgaWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHM7CisgICAgQk9PTCBwcmludGluZzsK
KyAgICBCT09MIGF2b2lkaW5nUHJpbnRPcnBoYW47CisgICAgQk9PTCBvYnNlcnZpbmdNb3VzZU1v
dmVkTm90aWZpY2F0aW9uczsKKyAgICBCT09MIG9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlv
bnM7CisgICAgQk9PTCBvYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zOworICAgIEJPT0wgcmVz
aWduaW5nRmlyc3RSZXNwb25kZXI7CisgICAgCisgICAgaWQgc2F2ZWRTdWJ2aWV3czsKKyAgICBC
T09MIHN1YnZpZXdzU2V0QXNpZGU7CisgICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgIE5TVmlldyAqbGF5ZXJIb3N0aW5nVmlldzsKKyNlbmRpZgorCisgICAgTlNFdmVu
dCAqbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgorICAg
IEJPT0wgaGFuZGxpbmdNb3VzZURvd25FdmVudDsKKyAgICBOU0V2ZW50ICprZXlEb3duRXZlbnQ7
IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgorCisgICAgLy8gQSBXZWJIVE1MVmll
dyBoYXMgYSBzaW5nbGUgaW5wdXQgY29udGV4dCwgYnV0IHdlIHJldHVybiBuaWwgd2hlbiBpbiBu
b24tZWRpdGFibGUgY29udGVudCB0byBhdm9pZCBtYWtpbmcgaW5wdXQgbWV0aG9kcyBkbyB0aGVp
ciB3b3JrLgorICAgIC8vIFRoaXMgc3RhdGUgaXMgc2F2ZWQgZWFjaCB0aW1lIHNlbGVjdGlvbiBj
aGFuZ2VzLCBiZWNhdXNlIGNvbXB1dGluZyBpdCBjYXVzZXMgc3R5bGUgcmVjYWxjLCB3aGljaCBp
cyBub3QgYWx3YXlzIHNhZmUgdG8gZG8uCisgICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQ7CisK
KyAgICBOU1BvaW50IGxhc3RTY3JvbGxQb3NpdGlvbjsKKworICAgIFdlYlBsdWdpbkNvbnRyb2xs
ZXIgKnBsdWdpbkNvbnRyb2xsZXI7CisgICAgCisgICAgTlNTdHJpbmcgKnRvb2xUaXA7CisgICAg
TlNUb29sVGlwVGFnIGxhc3RUb29sVGlwVGFnOworICAgIGlkIHRyYWNraW5nUmVjdE93bmVyOwor
ICAgIHZvaWQgKnRyYWNraW5nUmVjdFVzZXJEYXRhOworICAgIAorICAgIE5TVGltZXIgKmF1dG9z
Y3JvbGxUaW1lcjsKKyAgICBOU0V2ZW50ICphdXRvc2Nyb2xsVHJpZ2dlckV2ZW50OworICAgIAor
ICAgIE5TQXJyYXkgKnBhZ2VSZWN0czsKKworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmhpZ2hs
aWdodGVyczsKKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgQk9PTCBuZXh0UmVzcG9u
ZGVyRGlzYWJsZWRPbmNlOworI2VuZGlmCisgICAgCisgICAgV2ViVGV4dENvbXBsZXRlQ29udHJv
bGxlciAqY29tcENvbnRyb2xsZXI7CisgICAgCisgICAgQk9PTCB0cmFuc3BhcmVudEJhY2tncm91
bmQ7CisKKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIGludGVy
cHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgQk9PTCByZWNlaXZlZE5PT1A7CisgICAgCisg
ICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZTsKKyAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSog
cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U7CisgICAgCisgICAgQ0ZSdW5Mb29wVGltZXJSZWYg
dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXI7CisgICAgQ0ZSdW5Mb29wVGltZXJSZWYg
dXBkYXRlTW91c2VvdmVyVGltZXI7CisKKyAgICBTRUwgc2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNl
bGVjdG9yOworCisjaWZuZGVmIE5ERUJVRworICAgIEJPT0wgZW51bWVyYXRpbmdTdWJ2aWV3czsK
KyNlbmRpZgorfQorLSAodm9pZCljbGVhcjsKK0BlbmQKKworc3RhdGljIE5TQ2VsbFN0YXRlVmFs
dWUga2l0KFRyaVN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAg
Y2FzZSBGYWxzZVRyaVN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIE5TT2ZmU3RhdGU7CisgICAg
ICAgIGNhc2UgVHJ1ZVRyaVN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIE5TT25TdGF0ZTsKKyAg
ICAgICAgY2FzZSBNaXhlZFRyaVN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIE5TTWl4ZWRTdGF0
ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5TT2ZmU3Rh
dGU7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlld1ByaXZhdGUKKworKyAodm9pZClp
bml0aWFsaXplCit7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisjaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCisgICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRocmVhZChzZWxm
KTsKKyNlbmRpZgorCisgICAgaWYgKCFvbGRTZXRDdXJzb3JJTVApIHsKKyNpZmRlZiBCVUlMRElO
R19PTl9USUdFUgorICAgICAgICBNZXRob2Qgc2V0Q3Vyc29yTWV0aG9kID0gY2xhc3NfZ2V0SW5z
dGFuY2VNZXRob2QoW05TQ3Vyc29yIGNsYXNzXSwgQHNlbGVjdG9yKHNldCkpOworI2Vsc2UKKyAg
ICAgICAgTWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtO
U1dpbmRvdyBjbGFzc10sIEBzZWxlY3Rvcihfc2V0Q3Vyc29yRm9yTW91c2VMb2NhdGlvbjopKTsK
KyNlbmRpZgorICAgICAgICBBU1NFUlQoc2V0Q3Vyc29yTWV0aG9kKTsKKworICAgICAgICBvbGRT
ZXRDdXJzb3JJTVAgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24oc2V0Q3Vyc29yTWV0aG9kLCAo
SU1QKXNldEN1cnNvcik7CisgICAgICAgIEFTU0VSVChvbGRTZXRDdXJzb3JJTVApOworICAgIH0K
KyAgICAKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIGlmICghb2xkUmVzZXRDdXJzb3JS
ZWN0c0lNUCkgeworICAgICAgICBNZXRob2QgcmVzZXRDdXJzb3JSZWN0c01ldGhvZCA9IGNsYXNz
X2dldEluc3RhbmNlTWV0aG9kKFtOU1dpbmRvdyBjbGFzc10sIEBzZWxlY3RvcihyZXNldEN1cnNv
clJlY3RzKSk7CisgICAgICAgIEFTU0VSVChyZXNldEN1cnNvclJlY3RzTWV0aG9kKTsKKyAgICAg
ICAgb2xkUmVzZXRDdXJzb3JSZWN0c0lNUCA9IG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihyZXNl
dEN1cnNvclJlY3RzTWV0aG9kLCAoSU1QKXJlc2V0Q3Vyc29yUmVjdHMpOworICAgICAgICBBU1NF
UlQob2xkUmVzZXRDdXJzb3JSZWN0c0lNUCk7CisgICAgfQorI2VuZGlmCisKK30KKworLSAodm9p
ZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWlu
VGhyZWFkKFtXZWJIVE1MVmlld1ByaXZhdGUgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKCFhdXRvc2Nyb2xsVGltZXIpOworICAgIEFTU0VSVCghYXV0b3Njcm9s
bFRyaWdnZXJFdmVudCk7CisgICAgQVNTRVJUKCF1cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVU
aW1lcik7CisgICAgQVNTRVJUKCF1cGRhdGVNb3VzZW92ZXJUaW1lcik7CisgICAgCisgICAgW21v
dXNlRG93bkV2ZW50IHJlbGVhc2VdOworICAgIFtrZXlEb3duRXZlbnQgcmVsZWFzZV07CisgICAg
W3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgW3Rvb2xUaXAgcmVsZWFzZV07CisgICAg
W2NvbXBDb250cm9sbGVyIHJlbGVhc2VdOworICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOworICAg
IFtoaWdobGlnaHRlcnMgcmVsZWFzZV07CisgICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlKQorICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHBy
b21pc2VkRGF0YUNsaWVudCgpKTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9p
ZClmaW5hbGl6ZQoreworICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOworCisgICAgaWYgKHByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlKQorICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKKworICAgIFtzdXBlciBmaW5h
bGl6ZV07Cit9CisKKy0gKHZvaWQpY2xlYXIKK3sKKyAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFz
ZV07CisgICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKKyAgICBbcGx1Z2luQ29udHJvbGxlciBy
ZWxlYXNlXTsKKyAgICBbdG9vbFRpcCByZWxlYXNlXTsKKyAgICBbY29tcENvbnRyb2xsZXIgcmVs
ZWFzZV07CisgICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07CisgICAgW2hpZ2hsaWdodGVycyByZWxl
YXNlXTsKKyAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCisgICAgICAgIHByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkp
OworCisgICAgbW91c2VEb3duRXZlbnQgPSBuaWw7CisgICAga2V5RG93bkV2ZW50ID0gbmlsOwor
ICAgIHBsdWdpbkNvbnRyb2xsZXIgPSBuaWw7CisgICAgdG9vbFRpcCA9IG5pbDsKKyAgICBjb21w
Q29udHJvbGxlciA9IG5pbDsKKyAgICBkYXRhU291cmNlID0gbmlsOworICAgIGhpZ2hsaWdodGVy
cyA9IG5pbDsKKyAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IDA7CisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgbGF5ZXJIb3N0aW5nVmlldyA9IG5pbDsKKyNl
bmRpZgorfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViSFRNTFZp
ZXdGaWxlSW50ZXJuYWwpCisKKy0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2UKK3sKKyAgICBy
ZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBfZG9jdW1lbnRSYW5nZV07Cit9CisK
Ky0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAqKXBhdGhzCit7CisgICAgTlNF
bnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVudW1lcmF0b3JdOworICAgIE5T
U3RyaW5nICpwYXRoOworICAgIAorICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5leHRP
YmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAgTlNTdHJpbmcgKk1JTUVUeXBlID0gV0tHZXRNSU1F
VHlwZUZvckV4dGVuc2lvbihbcGF0aCBwYXRoRXh0ZW5zaW9uXSk7CisgICAgICAgIGlmIChNSU1F
VHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShNSU1FVHlwZSkp
CisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTk87Cit9
CisKKy0gKFdlYkRhdGFTb3VyY2UgKilfZGF0YVNvdXJjZQoreworICAgIHJldHVybiBfcHJpdmF0
ZS0+ZGF0YVNvdXJjZTsKK30KKworLSAoV2ViVmlldyAqKV93ZWJWaWV3Cit7CisgICAgcmV0dXJu
IFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSBfd2ViVmlld107Cit9CisKKy0gKFdlYkZyYW1lVmlldyAq
KV9mcmFtZVZpZXcKK3sKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFt
ZV0gZnJhbWVWaWV3XTsKK30KKworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50V2l0aFBhdGhzOihOU0FycmF5ICopcGF0aHMKK3sKKyAgICBET01Eb2N1bWVudEZyYWdt
ZW50ICpmcmFnbWVudDsKKyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbcGF0aHMgb2Jq
ZWN0RW51bWVyYXRvcl07CisgICAgTlNNdXRhYmxlQXJyYXkgKmRvbU5vZGVzID0gW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgTlNTdHJpbmcgKnBhdGg7CisgICAgCisgICAgd2hp
bGUgKChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgeworICAgICAgICAv
LyBOb24taW1hZ2UgZmlsZSB0eXBlczsgX3dlYl91c2VyVmlzaWJsZVN0cmluZyBpcyBhcHByb3By
aWF0ZSBoZXJlIGJlY2F1c2UgdGhpcyB3aWxsCisgICAgICAgIC8vIGJlIHBhc3RlZCBhcyB2aXNp
YmxlIHRleHQuCisgICAgICAgIE5TU3RyaW5nICp1cmwgPSBbW1tOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6cGF0aF0gX3dlYmtpdF9jYW5vbmljYWxpemVdIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwor
ICAgICAgICBbZG9tTm9kZXMgYWRkT2JqZWN0OltbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0g
Y3JlYXRlVGV4dE5vZGU6IHVybF1dOworICAgIH0KKyAgICAKKyAgICBmcmFnbWVudCA9IFtbc2Vs
ZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOmRvbU5vZGVz
XTsgCisgICAgCisgICAgW2RvbU5vZGVzIHJlbGVhc2VdOworICAgIAorICAgIHJldHVybiBbZnJh
Z21lbnQgZmlyc3RDaGlsZF0gIT0gbmlsID8gZnJhZ21lbnQgOiBuaWw7Cit9CisKKysgKE5TQXJy
YXkgKilfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uCit7Cisg
ICAgc3RhdGljIE5TQXJyYXkgKmVsZW1lbnRzID0gbmlsOworICAgIGlmIChlbGVtZW50cyA9PSBu
aWwpIHsKKyAgICAgICAgZWxlbWVudHMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0
czoKKyAgICAgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ugd2FudCBzdHlsZSB0byBiZSBp
bmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkgaW5zZXJ0ZWQuCisgICAgICAgICAg
ICBAInN0eWxlIiwKKyAgICAgICAgICAgIC8vIE9taXQgeG1sIHNvIHRoZSByZXN1bHQgaXMgbm90
IFhIVE1MLgorICAgICAgICAgICAgQCJ4bWwiLCAKKyAgICAgICAgICAgIC8vIE9taXQgdGFncyB0
aGF0IHdpbGwgZ2V0IHN0cmlwcGVkIHdoZW4gY29udmVydGVkIHRvIGEgZnJhZ21lbnQgYW55d2F5
LgorICAgICAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJib2R5IiwKKyAg
ICAgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgorICAgICAgICAgICAgQCJhcHBsZXQi
LCBAImJhc2Vmb250IiwgQCJjZW50ZXIiLCBAImRpciIsIEAiZm9udCIsIEAiaXNpbmRleCIsIEAi
bWVudSIsIEAicyIsIEAic3RyaWtlIiwgQCJ1IiwKKyAgICAgICAgICAgIC8vIE9taXQgb2JqZWN0
IHNvIG5vIGZpbGUgYXR0YWNobWVudHMgYXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAg
ICAgICAgQCJvYmplY3QiLCBuaWxdOworICAgICAgICBDRlJldGFpbihlbGVtZW50cyk7CisgICAg
fQorICAgIHJldHVybiBlbGVtZW50czsKK30KKworc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRo
UmVsYXRpdmVQYXJ0KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCit7CisgICAgQ0ZVVUlEUmVmIFVV
SURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CisgICAgTlNTdHJpbmcg
KlVVSURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgVVVJRFJlZik7CisgICAgQ0ZSZWxlYXNlKFVVSURSZWYpOworICAgIE5TVVJMICpV
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVA
Oi8vJUAvJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFy
dF1dOworICAgIENGUmVsZWFzZShVVUlEU3RyaW5nKTsKKworICAgIHJldHVybiBVUkw7Cit9CisK
Ky0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJk
OihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1BsYWluVGV4dDooQk9PTClh
bGxvd1BsYWluVGV4dAoreworICAgIE5TQXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9hcmQgdHlwZXNd
OworICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gbmlsOworCisgICAgaWYgKFt0
eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZy
YWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJk
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JU
eXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJu
IGZyYWdtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSAmJgor
ICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJk
OnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAg
ICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNIVE1MUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TSFRNTFBib2FyZFR5cGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4
dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgCisgICAgaWYg
KFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFn
bWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlw
ZTpOU1JURlBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21l
bnQ7CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdICYm
CisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9h
cmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OworCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1RJ
RkZQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFn
bWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRl
eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291
cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKworICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6TlNQREZQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNQREZQYm9h
cmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworCisjaWYg
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KQorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNQSUNUUGJvYXJkVHlwZV0gJiYKKyAg
ICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpw
YXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JUeXBlOk5TUElDVFBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQ7CisjZW5kaWYKKworICAgIC8vIE9ubHkgMTAuNSBhbmQgaGlnaGVyIHN1
cHBvcnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBwYXN0ZWJvYXJkIHR5cGVzIHdpdGggVVRJcywg
YnV0IHdlIGRvbid0IGJlbGlldmUKKyAgICAvLyB0aGF0IGFueSBhcHBsaWNhdGlvbnMgb24gVGln
ZXIgcHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBVVEksIGxpa2UgUE5HLCBvbiB0
aGUgcGFzdGVib2FyZC4KKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyop
a1VUVHlwZVBOR10gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21l
bnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBORworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNv
bnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgCisgICAgaWYg
KFt0eXBlcyBjb250YWluc09iamVjdDpOU1VSTFBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFn
bWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlw
ZTpOU1VSTFBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21l
bnQ7CisgICAgICAgIAorICAgIGlmIChhbGxvd1BsYWluVGV4dCAmJiBbdHlwZXMgY29udGFpbnNP
YmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1N0cmluZ1Bib2Fy
ZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Q29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdWJyZXNvdXJjZXM6MF0pKSB7CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNTdHJpbmcgKilfcGxhaW5UZXh0RnJv
bVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICBOU0FycmF5ICp0
eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKKyAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCisgICAgICAgIHJldHVybiBbW3Bhc3RlYm9hcmQg
c3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENh
bm9uaWNhbE1hcHBpbmddOworICAgIAorICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRl
ZFN0cmluZyA9IG5pbDsKKyAgICBOU1N0cmluZyAqc3RyaW5nOworCisgICAgaWYgKFt0eXBlcyBj
b250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkKKyAgICAgICAgYXR0cmlidXRlZFN0cmlu
ZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQg
ZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwor
ICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCAmJiBbdHlwZXMgY29udGFpbnNPYmplY3Q6
TlNSVEZQYm9hcmRUeXBlXSkKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbTlNBdHRyaWJ1
dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JU
RlBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICBpZiAoYXR0cmlidXRl
ZFN0cmluZyAhPSBuaWwpIHsKKyAgICAgICAgc3RyaW5nID0gW1thdHRyaWJ1dGVkU3RyaW5nIHN0
cmluZ10gY29weV07CisgICAgICAgIFthdHRyaWJ1dGVkU3RyaW5nIHJlbGVhc2VdOworICAgICAg
ICByZXR1cm4gW3N0cmluZyBhdXRvcmVsZWFzZV07CisgICAgfQorICAgIAorICAgIGlmIChbdHlw
ZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSkgeworICAgICAgICBzdHJp
bmcgPSBbW3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5
cGVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl07CisgICAgICAgIGlmIChzdHJpbmcg
IT0gbmlsKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9CisgICAgCisgICAgTlNV
UkwgKlVSTDsKKyAgICAKKyAgICBpZiAoKFVSTCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDpw
YXN0ZWJvYXJkXSkpIHsKKyAgICAgICAgc3RyaW5nID0gW1VSTCBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nXTsKKyAgICAgICAgaWYgKFtzdHJpbmcgbGVuZ3RoXSA+IDApCisgICAgICAgICAgICByZXR1
cm4gc3RyaW5nOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9w
YXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5U
ZXh0OihCT09MKWFsbG93UGxhaW5UZXh0Cit7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtbc2Vs
ZiBfd2ViVmlld10gcmV0YWluXTsKKyAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkXTsKKworICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9zZWxlY3RlZFJh
bmdlXTsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVu
dEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBpbkNvbnRleHQ6cmFuZ2UgYWxsb3dQ
bGFpblRleHQ6YWxsb3dQbGFpblRleHRdOworICAgIGlmIChmcmFnbWVudCAmJiBbc2VsZiBfc2hv
dWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5B
Y3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCisgICAgICAgIFtbc2VsZiBfZnJhbWVd
IF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50
Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFz
dGVib2FyZF0gbWF0Y2hTdHlsZTpOT107CisKKyAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFz
dGVib2FyZDpuaWxdOworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworfQorCistICh2b2lkKV9wYXN0
ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sK
KyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5dOworICAgIFt3
ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworCisgICAgTlNTdHJp
bmcgKnRleHQgPSBbc2VsZiBfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07Cisg
ICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dGV4dCBnaXZlbkFj
dGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKKyAgICAgICAgW1tzZWxmIF9mcmFtZV0g
X3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0ZXh0IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0
UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF1d
OworCisgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6bmlsXTsKKyAgICBbd2Vi
VmlldyByZWxlYXNlXTsKK30KKworLSAodm9pZClfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5j
b25kaXRpb25hbGx5Cit7CisgICAgaWYgKCFfcHJpdmF0ZSB8fCAhX3ByaXZhdGUtPm9ic2Vydmlu
Z01vdXNlTW92ZWROb3RpZmljYXRpb25zKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5h
bWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om5pbF07CisgICAgX3ByaXZhdGUt
Pm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zID0gZmFsc2U7Cit9CisKKy0gKHZvaWQp
X3JlbW92ZVN1cGVydmlld09ic2VydmVycworeworICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2
YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBlcnZpZXddOworICAgIGlmICgh
c3VwZXJ2aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
TlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9i
c2VydmVyOnNlbGYgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6
c3VwZXJ2aWV3XTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYg
bmFtZTpOU1ZpZXdCb3VuZHNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107
CisgICAgCisgICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMgPSBm
YWxzZTsKK30KKworLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCit7CisgICAgaWYgKCFf
cHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIGlmICghd2lu
ZG93KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5v
dGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsK
KyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRv
d0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICBbbm90aWZpY2F0aW9u
Q2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlm
aWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2Vy
dmVyOnNlbGYgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93
XTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXS1dp
bmRvd1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0aW9uKCkgb2JqZWN0OndpbmRvd107CisgICAg
CisgICAgX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMgPSBmYWxzZTsKK30K
KworLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilm
cmFnbWVudCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjoo
V2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3Nl
bGYgX3dlYlZpZXddOworICAgIERPTU5vZGUgKmNoaWxkID0gW2ZyYWdtZW50IGZpcnN0Q2hpbGRd
OworICAgIGlmIChbZnJhZ21lbnQgbGFzdENoaWxkXSA9PSBjaGlsZCAmJiBbY2hpbGQgaXNLaW5k
T2ZDbGFzczpbRE9NQ2hhcmFjdGVyRGF0YSBjbGFzc11dKQorICAgICAgICByZXR1cm4gW1t3ZWJW
aWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNl
cnRUZXh0OlsoRE9NQ2hhcmFjdGVyRGF0YSAqKWNoaWxkIGRhdGFdIHJlcGxhY2luZ0RPTVJhbmdl
OnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07CisgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGlu
Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTpmcmFn
bWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOworfQorCist
IChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQgcmVwbGFjaW5nRE9NUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0
aW9uCit7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICByZXR1
cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBz
aG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246
YWN0aW9uXTsKK30KKworLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihO
U1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7
CisgICAgcmV0dXJuIFtzZWxmIF9zaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFu
Z2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIGdpdmVuQWN0aW9uOmFjdGlvbl07Cit9CisKKy8vIENh
bGN1bGF0ZSB0aGUgdmVydGljYWwgc2l6ZSBvZiB0aGUgdmlldyB0aGF0IGZpdHMgb24gYSBzaW5n
bGUgcGFnZQorLSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0Cit7CisgICAgLy8gT2J0YWlu
IHRoZSBwcmludCBpbmZvIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uCisgICAgTlNQ
cmludEluZm8gKnBpID0gW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dIHByaW50
SW5mb107CisgICAgCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBwYWdlIGhlaWdodCBpbiBwb2ludHMK
KyAgICBOU1NpemUgcGFwZXJTaXplID0gW3BpIHBhcGVyU2l6ZV07CisgICAgcmV0dXJuIHBhcGVy
U2l6ZS5oZWlnaHQgLSBbcGkgdG9wTWFyZ2luXSAtIFtwaSBib3R0b21NYXJnaW5dOworfQorCist
IChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSA6IG5pbDsKK30KKworLSAo
Qk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKK3sKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYm
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNob3VsZERlbGV0ZVJhbmdlKGNvcmUocmFuZ2UpKTsKK30K
KworLSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
Ly8gVXN1YWxseSwgd2UgaGFjayBBSydzIGhpdFRlc3QgbWV0aG9kIHRvIGNhdGNoIGFsbCBldmVu
dHMgYXQgdGhlIHRvcG1vc3QgV2ViSFRNTFZpZXcuICAKKyAgICAvLyBDYWxsZXJzIG9mIHRoaXMg
bWV0aG9kLCBob3dldmVyLCB3YW50IHRvIHF1ZXJ5IHRoZSBkZWVwZXN0IHZpZXcgaW5zdGVhZC4K
KyAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBZRVM7CisgICAgTlNWaWV3ICpoaXRWaWV3ID0gW1tb
c2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBoaXRUZXN0OltldmVudCBsb2NhdGlvbkluV2luZG93
XV07CisgICAgZm9yY2VOU1ZpZXdIaXRUZXN0ID0gTk87ICAgIAorICAgIHJldHVybiBoaXRWaWV3
OworfQorCistICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJy
YXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVk
QXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwor
eworICAgIC8vIFB1dCBIVE1MIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7CisgICAgICAgIGlmIChSZWZQdHI8
TGVnYWN5V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVG
cm9tU2VsZWN0aW9uKGNvcmUoW3NlbGYgX2ZyYW1lXSkpKSB7CisgICAgICAgICAgICBpZiAoUmV0
YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGNvcmVBcmNoaXZlID8gY29yZUFyY2hpdmUtPnJhd0Rh
dGFSZXByZXNlbnRhdGlvbigpIDogMCkKKyAgICAgICAgICAgICAgICBbcGFzdGVib2FyZCBzZXRE
YXRhOihOU0RhdGEgKilkYXRhLmdldCgpIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFB1dCB0aGUgYXR0cmlidXRlZCBzdHJpbmcg
b24gdGhlIHBhc3RlYm9hcmQgKFJURi9SVEZEIGZvcm1hdCkuCisgICAgaWYgKFt0eXBlcyBjb250
YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkgeworICAgICAgICBpZiAoYXR0cmlidXRlZFN0
cmluZyA9PSBuaWwpIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBzZWxl
Y3RlZEF0dHJpYnV0ZWRTdHJpbmddOworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgTlNEYXRh
ICpSVEZERGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Cisg
ICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRGRERhdGEgZm9yVHlwZTpOU1JURkRQYm9hcmRU
eXBlXTsKKyAgICB9ICAgICAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRG
UGJvYXJkVHlwZV0pIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmlsKSB7Cisg
ICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3Ry
aW5nXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNB
dHRhY2htZW50c10pIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbYXR0cmlidXRl
ZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0
ZXJzXTsKKyAgICAgICAgfQorICAgICAgICBOU0RhdGEgKlJURkRhdGEgPSBbYXR0cmlidXRlZFN0
cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3Ro
XSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6
UlRGRGF0YSBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV07CisgICAgfQorICAgIAorICAgIC8vIFB1
dCBwbGFpbiBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQuCisgICAgaWYgKFt0eXBlcyBjb250YWlu
c09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7CisgICAgICAgIC8vIE1hcCAmbmJzcDsgdG8g
YSBwbGFpbiBvbGQgc3BhY2UgYmVjYXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291cmNlIGNvZGUs
IG90aGVyIGJyb3dzZXJzIGRvIGl0LAorICAgICAgICAvLyBhbmQgYmVjYXVzZSBIVE1MIGZvcmNl
cyB5b3UgdG8gZG8gdGhpcyBhbnkgdGltZSB5b3Ugd2FudCB0d28gc3BhY2VzIGluIGEgcm93Lgor
ICAgICAgICBOU011dGFibGVTdHJpbmcgKnMgPSBbW3NlbGYgc2VsZWN0ZWRTdHJpbmddIG11dGFi
bGVDb3B5XTsKKyAgICAgICAgY29uc3QgdW5pY2hhciBOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVy
ID0gMHhBMDsKKyAgICAgICAgTlNTdHJpbmcgKk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6Jk5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgbGVu
Z3RoOjFdOworICAgICAgICBbcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpOb25CcmVha2lu
Z1NwYWNlU3RyaW5nIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgW3MgbGVuZ3RoXSldOworICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6cyBmb3JUeXBl
Ok5TU3RyaW5nUGJvYXJkVHlwZV07CisgICAgICAgIFtzIHJlbGVhc2VdOworICAgIH0KKyAgICAK
KyAgICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSAmJiBbdHlwZXMgY29udGFpbnNP
YmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIHNl
dERhdGE6bmlsIGZvclR5cGU6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOworICAgIH0KK30KKwor
LSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIEFTU0VS
VCghZXZlbnQgfHwgW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biB8fCBbZXZlbnQgdHlw
ZV0gPT0gTlNSaWdodE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNPdGhlck1vdXNlRG93
bik7CisKKyAgICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBbZXZlbnQgcmV0YWluXTsKKyAgICBbX3ByaXZhdGUtPm1vdXNlRG93
bkV2ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5tb3VzZURvd25FdmVudCA9IGV2ZW50Owor
fQorCistICh2b2lkKV9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcgorewor
ICAgIGlmIChfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpIHsKKyAg
ICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGVUaW1lcik7CisgICAgICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+dXBkYXRlRm9j
dXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOworICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlRm9jdXNl
ZEFuZEFjdGl2ZVN0YXRlVGltZXIgPSBOVUxMOworICAgIH0KK30KKworLSAodm9pZClfY2FuY2Vs
VXBkYXRlTW91c2VvdmVyVGltZXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3Zl
clRpbWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShfcHJpdmF0ZS0+dXBk
YXRlTW91c2VvdmVyVGltZXIpOworICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUtPnVwZGF0ZU1v
dXNlb3ZlclRpbWVyKTsKKyAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyID0g
TlVMTDsKKyAgICB9Cit9CisKKy0gKFdlYkhUTUxWaWV3ICopX3RvcEhUTUxWaWV3Cit7CisgICAg
Ly8gRklYTUU6IHRoaXMgY2FuIGZhaWwgaWYgdGhlIGRhdGFTb3VyY2UgaXMgbmlsLCB3aGljaCBo
YXBwZW5zIHdoZW4gdGhlIFdlYlZpZXcgaXMgdGVhcmluZyBkb3duIGZyb20gdGhlIHdpbmRvdyBj
bG9zaW5nLgorICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICopW1tbW19wcml2
YXRlLT5kYXRhU291cmNlIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRW
aWV3XTsKKyAgICBBU1NFUlQodmlldyk7CisgICAgQVNTRVJUKFt2aWV3IGlzS2luZE9mQ2xhc3M6
W1dlYkhUTUxWaWV3IGNsYXNzXV0pOworICAgIHJldHVybiB2aWV3OworfQorCistIChCT09MKV9p
c1RvcEhUTUxWaWV3Cit7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGEgY2FjaGVkIGJv
b2xlYW4gdGhhdCBkb2Vzbid0IHJlbHkgb24gX3RvcEhUTUxWaWV3IHNpbmNlIHRoYXQgY2FuIGZh
aWwgKHNlZSBfdG9wSFRNTFZpZXcpLgorICAgIHJldHVybiBzZWxmID09IFtzZWxmIF90b3BIVE1M
Vmlld107Cit9CisKKy0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmUKK3sKKyAg
ICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFn
ZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworCisjaWZuZGVmIE5ERUJVRworICAgIF9w
cml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOworI2VuZGlmCisKKyAgICBOU011dGFi
bGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdOworCisgICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJh
eTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2Nl
bmRhbnRXZWJIVE1MVmlld3MgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRl
eDppXSBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdp
ZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworCisgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmll
d3MgcmVsZWFzZV07CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5n
U3Vidmlld3MgPSBOTzsKKyNlbmRpZgorfQorCistICh2b2lkKV93ZWJfY2xlYXJQcmludGluZ01v
ZGVSZWN1cnNpdmUKK3sKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0
aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7CisjZW5k
aWYKKworICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisKKyAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRX
ZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworCisgICAgdW5zaWdu
ZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxW
aWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAu
MGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKKworICAgIFtkZXNj
ZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOworCisjaWZuZGVmIE5ERUJVRworICAgIF9wcml2
YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87CisjZW5kaWYKK30KKworLSAodm9pZClfd2Vi
X3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplCit7CisgICAgW3NlbGYg
X3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDow
LjBmIGFkanVzdFZpZXdTaXplOllFU107CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUt
PmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7CisjZW5kaWYKKworICAgIE5TTXV0YWJsZUFycmF5
ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
CisKKyAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2Nl
bmRhbnRXZWJIVE1MVmlld3NdOworCisgICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdl
YkhUTUxWaWV3cyBjb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCisgICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9z
ZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4w
ZiBhZGp1c3RWaWV3U2l6ZTpZRVNdOworCisgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgcmVs
ZWFzZV07CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmll
d3MgPSBOTzsKKyNlbmRpZgorfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmll
dyAoV2ViUHJpdmF0ZSkKKworKyAoTlNBcnJheSAqKXN1cHBvcnRlZE1JTUVUeXBlcworeworICAg
IHJldHVybiBbV2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZE1JTUVUeXBlc107Cit9CisK
KysgKE5TQXJyYXkgKilzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlcworeworICAgIHJldHVybiBbV2Vi
SFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzXTsKK30KKworKyAoTlNB
cnJheSAqKXN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzCit7CisgICAgcmV0dXJuIFtXZWJIVE1M
UmVwcmVzZW50YXRpb24gc3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZXNdOworfQorCisrIChOU0Fy
cmF5ICopdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzCit7CisgICAgcmV0dXJuIFtOU0FycmF5IGFy
cmF5V2l0aE9iamVjdHM6CisgICAgICAgIEAidGV4dC9jYWxlbmRhciIsICAgICAgIC8vIGlDYWwK
KyAgICAgICAgQCJ0ZXh0L3gtY2FsZW5kYXIiLAorICAgICAgICBAInRleHQveC12Y2FsZW5kYXIi
LAorICAgICAgICBAInRleHQvdmNhbGVuZGFyIiwKKyAgICAgICAgQCJ0ZXh0L3ZjYXJkIiwgICAg
ICAgICAgLy8gdkNhcmQKKyAgICAgICAgQCJ0ZXh0L3gtdmNhcmQiLAorICAgICAgICBAInRleHQv
ZGlyZWN0b3J5IiwKKyAgICAgICAgQCJ0ZXh0L2xkaWYiLCAgICAgICAgICAgLy8gTmV0c2NhcGUg
QWRkcmVzcyBCb29rCisgICAgICAgIEAidGV4dC9xaWYiLCAgICAgICAgICAgIC8vIFF1aWNrZW4K
KyAgICAgICAgQCJ0ZXh0L3gtcWlmIiwKKyAgICAgICAgQCJ0ZXh0L3gtY3N2IiwgICAgICAgICAg
Ly8gQ1NWIChmb3IgQWRkcmVzcyBCb29rIGFuZCBNaWNyb3NvZnQgT3V0bG9vaykKKyAgICAgICAg
QCJ0ZXh0L3gtdmNmIiwgICAgICAgICAgLy8gdkNhcmQgdHlwZSB1c2VkIGluIFN1biBhZmZpbml0
eSBhcHAKKyAgICAgICAgQCJ0ZXh0L3J0ZiIsICAgICAgICAgICAgLy8gUmljaCBUZXh0IEZvcm1h
dAorICAgICAgICBuaWxdOworfQorCisrICh2b2lkKV9wb3N0RmxhZ3NDaGFuZ2VkRXZlbnQ6KE5T
RXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudAoreworICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5k
IGZvcjogPHJkYXI6Ly9wcm9ibGVtLzI5ODE2MTk+IE5TUmVzcG9uZGVyX1ByaXZhdGUgc2hvdWxk
IGluY2x1ZGUgbm90aWZpY2F0aW9uIGZvciBGbGFnc0NoYW5nZWQKKyAgICBOU0V2ZW50ICpmYWtl
RXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkCisgICAgICAg
IGxvY2F0aW9uOltbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNl
OltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQorICAgICAgICBtb2RpZmllckZsYWdzOltmbGFnc0No
YW5nZWRFdmVudCBtb2RpZmllckZsYWdzXQorICAgICAgICB0aW1lc3RhbXA6W2ZsYWdzQ2hhbmdl
ZEV2ZW50IHRpbWVzdGFtcF0KKyAgICAgICAgd2luZG93TnVtYmVyOltmbGFnc0NoYW5nZWRFdmVu
dCB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6W2ZsYWdzQ2hhbmdlZEV2ZW50IGNvbnRl
eHRdCisgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworCisg
ICAgLy8gUHJldGVuZCBpdCdzIGEgbW91c2UgbW92ZS4KKyAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdCisgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldLTW91c2VN
b3ZlZE5vdGlmaWNhdGlvbigpIG9iamVjdDpzZWxmCisgICAgICAgIHVzZXJJbmZvOltOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6ZmFrZUV2ZW50IGZvcktleTpAIk5TRXZlbnQiXV07
Cit9CisKKy0gKGlkKV9icmlkZ2UKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBleGlzdHMgdG8gbWFp
bnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIExlb3BhcmQncyBEaWN0aW9uYXJ5LmFwcCwgc2luY2Ug
aXQKKyAgICAvLyBjYWxscyBfYnJpZGdlIHRvIGdldCBhY2Nlc3MgdG8gY29udmVydE5TUmFuZ2VU
b0RPTVJhbmdlOiBhbmQgY29udmVydERPTVJhbmdlVG9OU1JhbmdlOi4KKyAgICAvLyBSZXR1cm4g
dGhlIFdlYkZyYW1lLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBjb21wYXRpYmlsaXR5IG1ldGhvZHMu
IDxyZGFyOi8vcHJvYmxlbS82MDAyMTYwPgorICAgIHJldHVybiBbc2VsZiBfZnJhbWVdOworfQor
CistICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50Cit7CisgICAgW3NlbGYgX2Nh
bmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKKyAgICAKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQg
PSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkCisgICAgICAgIGxvY2F0
aW9uOltbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2Nh
dGlvbl1dCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlm
aWVyRmxhZ3NdCisgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV0KKyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051
bWJlcl0KKyAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAg
ICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgCisgICAg
W3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpmYWtlRXZlbnRdOworfQorCitzdGF0aWMg
dm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjayhDRlJ1bkxvb3BUaW1lclJlZiB0aW1l
ciwgdm9pZCAqaW5mbykKK3sKKyAgICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAq
KWluZm87CisgICAgCisgICAgW3ZpZXcgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwor
fQorCistICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAoreworICAgIE5TUG9pbnQgb3JpZ2lu
ID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmlnaW47CisgICAgaWYgKCFOU0VxdWFsUG9p
bnRzKF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24sIG9yaWdpbikpIHsKKyAgICAgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICAgICAgY29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZFNjcm9sbEV2ZW50KCk7CisgICAgICAgIFtfcHJp
dmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsK
KyAgICAgICAgCisgICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Cisg
ICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRp
ZFNjcm9sbERvY3VtZW50SW5GcmFtZVZpZXc6W3NlbGYgX2ZyYW1lVmlld11dOworICAgIH0KKyAg
ICBfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gb3JpZ2luOworCisgICAgaWYgKFtzZWxm
IHdpbmRvd10gJiYgIV9wcml2YXRlLT5jbG9zZWQgJiYgIV9wcml2YXRlLT51cGRhdGVNb3VzZW92
ZXJUaW1lcikgeworICAgICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4dCA9IHsgMCwg
c2VsZiwgTlVMTCwgTlVMTCwgTlVMTCB9OworICAgICAgICAKKyAgICAgICAgLy8gVXNlIGEgMTAw
bXMgZGVsYXkgc28gdGhhdCB0aGUgc3ludGhldGljIG1vdXNlIG92ZXIgdXBkYXRlIGRvZXNuJ3Qg
Y2F1c2UgY3Vyc29yIHRocmFzaGluZyB3aGVuIHBhZ2VzIGFyZSBsb2FkaW5nCisgICAgICAgIC8v
IGFuZCBzY3JvbGxpbmcgcmFwaWRseSBiYWNrIHRvIGJhY2suCisgICAgICAgIF9wcml2YXRlLT51
cGRhdGVNb3VzZW92ZXJUaW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKE5VTEwsIENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpICsgMC4xLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRlTW91c2VvdmVy
VGltZXJDYWxsYmFjaywgJmNvbnRleHQpOworICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1
bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lciwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3NldEFzaWRlU3Vidmlld3MK
K3sKKyAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKKyAgICBBU1NFUlQo
X3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPT0gbmlsKTsKKyAgICBfcHJpdmF0ZS0+c2F2ZWRTdWJ2
aWV3cyA9IF9zdWJ2aWV3czsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
Ly8gV2UgbmVlZCB0byBrZWVwIHRoZSBsYXllci1ob3N0aW5nIHZpZXcgaW4gdGhlIHN1YnZpZXdz
LCBvdGhlcndpc2UgdGhlIGxheWVycyBmbGFzaC4KKyAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9z
dGluZ1ZpZXcpIHsKKyAgICAgICAgTlNBcnJheSogbmV3U3Vidmlld3MgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czpfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldywgbmlsXTsKKyAg
ICAgICAgX3N1YnZpZXdzID0gbmV3U3Vidmlld3M7CisgICAgfSBlbHNlCisgICAgICAgIF9zdWJ2
aWV3cyA9IG5pbDsKKyNlbHNlCisgICAgX3N1YnZpZXdzID0gbmlsOworI2VuZGlmICAgIAorICAg
IF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlID0gWUVTOworIH0KKyAKKyAtICh2b2lkKV9yZXN0
b3JlU3Vidmlld3MKKyB7CisgICAgQVNTRVJUKF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKF9wcml2YXRlLT5sYXll
ckhvc3RpbmdWaWV3KSB7CisgICAgICAgIFtfc3Vidmlld3MgcmVsZWFzZV07CisgICAgICAgIF9z
dWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOworICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVChfc3Vidmlld3MgPT0gbmlsKTsKKyAgICAgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUt
PnNhdmVkU3Vidmlld3M7CisgICAgfQorI2Vsc2UKKyAgICBBU1NFUlQoX3N1YnZpZXdzID09IG5p
bCk7CisgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNhdmVkU3Vidmlld3M7CisjZW5kaWYgICAg
CisgICAgX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPSBuaWw7CisgICAgX3ByaXZhdGUtPnN1YnZp
ZXdzU2V0QXNpZGUgPSBOTzsKK30KKworI2lmbmRlZiBOREVCVUcKKworLSAodm9pZClkaWRBZGRT
dWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Cit7CisgICAgaWYgKF9wcml2YXRlLT5lbnVtZXJhdGlu
Z1N1YnZpZXdzKQorICAgICAgICBMT0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAlcyB3YXMgYWRk
ZWQgZHVyaW5nIHN1YnZpZXcgZW51bWVyYXRpb24gZm9yIGxheW91dCBvciBwcmludGluZyBtb2Rl
IGNoYW5nZS4gVGhpcyB2aWV3IG1pZ2h0IHBhaW50IHdpdGhvdXQgZmlyc3QgcmVjZWl2aW5nIGxh
eW91dC4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNsYXNzXSkpOworfQorCistICh2
b2lkKXdpbGxSZW1vdmVTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Cit7CisgICAgLy8gSGF2ZSB0
byBudWxsLWNoZWNrIF9wcml2YXRlLCBzaW5jZSB0aGlzIGNhbiBiZSBjYWxsZWQgdmlhIC1kZWFs
bG9jIHdoZW4KKyAgICAvLyBjbGVhbmluZyB1cCB0aGUgdGhlIGxheWVySG9zdGluZ1ZpZXcuCisg
ICAgaWYgKF9wcml2YXRlICYmIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzKQorICAgICAg
ICBMT0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAlcyB3YXMgcmVtb3ZlZCBkdXJpbmcgc3Vidmll
dyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1vZGUgY2hhbmdlLiBXZSB3aWxs
IHN0aWxsIGRvIGxheW91dCBvciB0aGUgcHJpbnRpbmcgbW9kZSBjaGFuZ2UgZXZlbiB0aG91Z2gg
dGhpcyB2aWV3IGlzIG5vIGxvbmdlciBpbiB0aGUgdmlldyBoaWVyYXJjaHkuIiwgb2JqZWN0X2dl
dENsYXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKK30KKworI2VuZGlmCisKKyNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgorCisvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGFyZSBhYm91dCB0byBk
cmF3LCBidXQgYmVmb3JlIG91ciBkaXJ0eSByZWN0IGlzIHByb3BhZ2F0ZWQgdG8gb3VyIGFuY2Vz
dG9ycy4KKy8vIFRoYXQncyB0aGUgcGVyZmVjdCB0aW1lIHRvIGRvIGEgbGF5b3V0LCBleGNlcHQg
dGhhdCBpZGVhbGx5IHdlJ2Qgd2FudCB0byBiZSBzdXJlIHRoYXQgd2UncmUgZGlydHkKKy8vIGJl
Zm9yZSBkb2luZyBpdC4gQXMgYSBjb21wcm9taXNlLCB3aGVuIHdlJ3JlIG9wYXF1ZSB3ZSBkbyB0
aGUgbGF5b3V0IG9ubHkgd2hlbiBhY3R1YWxseSBhc2tlZCB0bworLy8gZHJhdywgYnV0IHdoZW4g
d2UncmUgdHJhbnNwYXJlbnQgd2UgZG8gdGhlIGxheW91dCBhdCB0aGlzIHN0YWdlIHNvIHZpZXdz
IGJlaGluZCB1cyBrbm93IHRoYXQgdGhleQorLy8gbmVlZCB0byBiZSByZWRyYXduIChpbiBjYXNl
IHRoZSBsYXlvdXQgY2F1c2VzIHNvbWUgdGhpbmdzIHRvIGdldCBkaXJ0aWVkKS4KKy0gKHZvaWQp
X3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9ycworeworICAgIGlmICghW1tzZWxm
IF93ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdKQorICAgICAgICBbc2VsZiBfd2ViX2xheW91dElm
TmVlZGVkUmVjdXJzaXZlXTsKKyAgICBbc3VwZXIgX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1
ZUFuY2VzdG9yc107Cit9CisKKyNlbHNlCisKKy0gKHZvaWQpdmlld1dpbGxEcmF3Cit7CisgICAg
Ly8gT24gd2luZG93IGNsb3NlIHdlIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGRhdGFzb3VyY2Ug
aXMgbmlsLCB0aGVuIGhpdCBhbiBhc3NlcnQgaW4gX3RvcEhUTUxWaWV3CisgICAgLy8gU28gY2hl
Y2sgaWYgdGhlIGRhdGFTb3VyY2UgaXMgbmlsIGJlZm9yZSBjYWxsaW5nIFtzZWxmIF9pc1RvcEhU
TUxWaWV3XSwgdGhpcyBjYW4gYmUgcmVtb3ZlZAorICAgIC8vIG9uY2UgdGhlIEZJWE1FIGluIF9p
c1RvcEhUTUxWaWV3IGlzIGZpeGVkLgorICAgIGlmIChfcHJpdmF0ZS0+ZGF0YVNvdXJjZSAmJiBb
c2VsZiBfaXNUb3BIVE1MVmlld10pCisgICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRS
ZWN1cnNpdmVdOworICAgIFtzdXBlciB2aWV3V2lsbERyYXddOworfQorCisjZW5kaWYKKworLy8g
RG9uJ3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0
LgorLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eToo
TlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2li
bGVSZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3
Cit7CisgICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50IGFzIHBhcnQgb2YgYSBsYXJnZXIg
cHJpbnQgcHJvY2Vzcy4KKyAgICAvLyBJZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQg
d2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZlciBoYXZlIHRvIGRvIHRoaXMuCisgICAg
Qk9PTCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGluZzsKKyAgICBCT09MIGlz
UHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2Ny
ZWVuXTsKKyAgICBpZiAoaXNQcmludGluZykgeworICAgICAgICBpZiAoIXdhc0luUHJpbnRpbmdN
b2RlKQorICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOwor
I2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgICAgICBlbHNlCisgICAgICAgICAgICBbc2Vs
ZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAo
d2FzSW5QcmludGluZ01vZGUpCisgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVS
ZWN1cnNpdmVdOworCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKworICAgIC8vIEJlY2F1c2Ug
VGlnZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVy
ZS4KKyAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKKyAgICBbX3N1YnZp
ZXdzIG1ha2VPYmplY3RzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcHJvcGFnYXRlRGlydHlS
ZWN0c1RvT3BhcXVlQW5jZXN0b3JzKV07CisKKyNlbmRpZgorCisgICAgW3NlbGYgX3NldEFzaWRl
U3Vidmlld3NdOworICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9y
aW5nT3BhY2l0eTpyZWN0IGlzVmlzaWJsZVJlY3Q6aXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxl
UmVjdEZvclZpZXc6dmlzaWJsZVZpZXcgdG9wVmlldzp0b3BWaWV3XTsKKyAgICBbc2VsZiBfcmVz
dG9yZVN1YnZpZXdzXTsKKworICAgIGlmICh3YXNJblByaW50aW5nTW9kZSAhPSBpc1ByaW50aW5n
KSB7CisgICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgICAgIFtzZWxmIF93
ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
W3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07CisgICAgfQorfQorCisvLyBE
b24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJlIG9mIHRoYXQu
CistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3VzOihCT09MKW5l
ZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6KE5TUmVjdCl2aXNSZWN0Cit7CisgICAgQk9PTCBuZWVkVG9T
ZXRBc2lkZVN1YnZpZXdzID0gIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlOworCisgICAgQk9P
TCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGluZzsKKyAgICBCT09MIGlzUHJp
bnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVu
XTsKKworICAgIGlmIChuZWVkVG9TZXRBc2lkZVN1YnZpZXdzKSB7CisgICAgICAgIC8vIFRoaXMg
aGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nlc3MuCisg
ICAgICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGlu
ZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KKyAgICAgICAgaWYgKGlzUHJp
bnRpbmcpIHsKKyAgICAgICAgICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpCisgICAgICAgICAg
ICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOworI2lmbmRlZiBCVUlM
RElOR19PTl9USUdFUgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtzZWxmIF93
ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworI2VuZGlmCisgICAgICAgIH0gZWxzZSBpZiAo
d2FzSW5QcmludGluZ01vZGUpCisgICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdN
b2RlUmVjdXJzaXZlXTsKKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKyAgICAgICAgLy8g
QmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZpZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxh
eW91dCBoZXJlLgorICAgICAgICBOU1JlY3QgYm91bmRzQmVmb3JlTGF5b3V0ID0gW3NlbGYgYm91
bmRzXTsKKyAgICAgICAgaWYgKCFOU0lzRW1wdHlSZWN0KHZpc1JlY3QpKQorICAgICAgICAgICAg
W3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisKKyAgICAgICAgLy8gSWYgbGF5
b3V0IGNoYW5nZXMgdGhlIHZpZXcncyBib3VuZHMsIHRoZW4gd2UgbmVlZCB0byByZWNvbXB1dGUg
dGhlIHZpc1JlY3QuCisgICAgICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSB2aXNSZWN0IHBhc3Nl
ZCB0byB1cyB3YXMgYmFzZWQgb24gdGhlIGJvdW5kcyBhdCB0aGUgdGltZQorICAgICAgICAvLyB3
ZSB3ZXJlIGNhbGxlZC4gVGhpcyBtZXRob2QgaXMgb25seSBkaXNwbGF5ZWQgdG8gZHJhdyAiYWxs
Iiwgc28gaXQncyBzYWZlCisgICAgICAgIC8vIHRvIGp1c3QgY2FsbCB2aXNpYmxlUmVjdCB0byBj
b21wdXRlIHRoZSBlbnRpcmUgcmVjdGFuZ2xlLgorICAgICAgICBpZiAoIU5TRXF1YWxSZWN0cyhi
b3VuZHNCZWZvcmVMYXlvdXQsIFtzZWxmIGJvdW5kc10pKQorICAgICAgICAgICAgdmlzUmVjdCA9
IFtzZWxmIHZpc2libGVSZWN0XTsKKworI2VuZGlmCisKKyAgICAgICAgW3NlbGYgX3NldEFzaWRl
U3Vidmlld3NdOworICAgIH0KKworICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5
V2l0aExvY2tGb2N1czpuZWVkc0xvY2tGb2N1cyB2aXNSZWN0OnZpc1JlY3RdOworCisgICAgaWYg
KG5lZWRUb1NldEFzaWRlU3Vidmlld3MpIHsKKyAgICAgICAgaWYgKHdhc0luUHJpbnRpbmdNb2Rl
ICE9IGlzUHJpbnRpbmcpIHsKKyAgICAgICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAg
ICAgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9k
ZVJlY3Vyc2l2ZV07CisgICAgICAgIH0KKworICAgICAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdz
XTsKKyAgICB9Cit9CisKKy8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBX
ZSB0YWtlIGNhcmUgb2YgdGhhdC4KKy0gKHZvaWQpX3JlY3Vyc2l2ZTooQk9PTClyZWN1cnNlIGRp
c3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxheVJlY3QgaW5Db250ZXh0OihO
U0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQgdG9wVmlldzooQk9PTCl0b3BWaWV3Cit7CisjaWZk
ZWYgQlVJTERJTkdfT05fVElHRVIgCisgICAgLy8gQmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZl
IHZpZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxheW91dCBoZXJlLgorICAgIFtzZWxmIF93ZWJf
bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworI2VuZGlmCisKKyAgICBbc2VsZiBfc2V0QXNpZGVT
dWJ2aWV3c107CisgICAgW3N1cGVyIF9yZWN1cnNpdmU6cmVjdXJzZSBkaXNwbGF5UmVjdElnbm9y
aW5nT3BhY2l0eTpkaXNwbGF5UmVjdCBpbkNvbnRleHQ6Y29udGV4dCB0b3BWaWV3OnRvcFZpZXdd
OworICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOworfQorCistIChCT09MKV9pbnNpZGVBbm90
aGVySFRNTFZpZXcKK3sKKyAgICByZXR1cm4gc2VsZiAhPSBbc2VsZiBfdG9wSFRNTFZpZXddOwor
fQorCistIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50Cit7CisgICAgLy8gV2ViSFRN
TFZpZXcgb2JqZWN0cyBoYW5kbGUgYWxsIGV2ZW50cyBmb3Igb2JqZWN0cyBpbnNpZGUgdGhlbS4K
KyAgICAvLyBUbyBnZXQgdGhvc2UgZXZlbnRzLCB3ZSBwcmV2ZW50IGhpdCB0ZXN0aW5nIGZyb20g
QXBwS2l0LgorCisgICAgLy8gQnV0IHRoZXJlIGFyZSB0aHJlZSBleGNlcHRpb25zIHRvIHRoaXM6
CisgICAgLy8gICAxKSBGb3IgcmlnaHQgbW91c2UgY2xpY2tzIGFuZCBjb250cm9sIGNsaWNrcyB3
ZSBkb24ndCB5ZXQgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbgorICAgIC8vICAgICAgdGhhdCB3b3Jr
cyBmb3IgbmVzdGVkIHZpZXdzLCBzbyB3ZSBsZXQgdGhlIGhpdCB0ZXN0aW5nIGdvIHRocm91Z2gg
dGhlCisgICAgLy8gICAgICBzdGFuZGFyZCBOU1ZpZXcgY29kZSBwYXRoIChuZWVkcyB0byBiZSBm
aXhlZCwgc2VlIGJ1ZyA0MzYxNjE4KS4KKyAgICAvLyAgIDIpIEphdmEgZGVwZW5kcyBvbiBkb2lu
ZyBhIGhpdCB0ZXN0IGluc2lkZSBpdCdzIG1vdXNlIG1vdmVkIGhhbmRsaW5nLAorICAgIC8vICAg
ICAgc28gd2UgbGV0IHRoZSBoaXQgdGVzdGluZyBnbyB0aHJvdWdoIHRoZSBzdGFuZGFyZCBOU1Zp
ZXcgY29kZSBwYXRoCisgICAgLy8gICAgICB3aGVuIHRoZSBjdXJyZW50IGV2ZW50IGlzIGEgbW91
c2UgbW92ZSAoZXhjZXB0IHdoZW4gd2UgYXJlIGNhbGxpbmcKKyAgICAvLyAgICAgIGZyb20gX3Vw
ZGF0ZU1vdXNlb3ZlcldpdGhFdmVudCwgc28gd2UgaGF2ZSB0byB1c2UgYSBnbG9iYWwsCisgICAg
Ly8gICAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCwgZm9yIHRoYXQpCisgICAgLy8gICAzKSBU
aGUgYWNjZXB0c0ZpcnN0TW91c2U6IGFuZCBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZl
bnQ6IG1ldGhvZHMKKyAgICAvLyAgICAgIGJvdGggbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHZp
ZXcgdG8gY2hlY2sgd2l0aCBpbnNpZGUgdGhlIFdlYkhUTUxWaWV3LgorICAgIC8vICAgICAgVGhl
eSB1c2UgYSBnbG9iYWwgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBoaXRUZXN0OiBzbyB0aGV5
IGNhbiBnZXQgdGhlCisgICAgLy8gICAgICByaWdodCB2aWV3LiBUaGUgZ2xvYmFsIGlzIGZvcmNl
TlNWaWV3SGl0VGVzdCBhbmQgdGhlIG1ldGhvZCB0aGV5IHVzZSB0bworICAgIC8vICAgICAgZG8g
dGhlIGhpdCB0ZXN0aW5nIGlzIF9oaXRWaWV3Rm9yRXZlbnQ6LiAoQnV0IHRoaXMgZG9lcyBub3Qg
d29yayBjb3JyZWN0bHkKKyAgICAvLyAgICAgIHdoZW4gdGhlcmUgaXMgSFRNTCBvdmVybGFwcGlu
ZyB0aGUgdmlldywgc2VlIGJ1ZyA0MzYxNjI2KQorICAgIC8vICAgNCkgTlNBY2Nlc3NpYmlsaXR5
SGl0VGVzdCByZWxpZXMgb24gdGhpcyBmb3IgY2hlY2tpbmcgdGhlIGN1cnNvciBwb3NpdGlvbi4K
KyAgICAvLyAgICAgIE91ciBjaGVjayBmb3IgdGhhdCBpcyB3aGV0aGVyIHRoZSBldmVudCBpcyBO
U0ZsYWdzQ2hhbmdlZC4gIFRoaXMgd29ya3MKKyAgICAvLyAgICAgIGZvciBWb2ljZU92ZXIncyBj
bnRsLW9wdC1mNSBjb21tYW5kIChtb3ZlIGZvY3VzIHRvIGl0ZW0gdW5kZXIgY3Vyc29yKQorICAg
IC8vICAgICAgYW5kIERpY3Rpb25hcnkncyBjbWQtY250bC1EIChvcGVuIGRpY3Rpb25hcnkgcG9w
dXAgZm9yIGl0ZW0gdW5kZXIgY3Vyc29yKS4KKyAgICAvLyAgICAgIFRoaXMgaXMgb2YgY291cnNl
IGEgaGFjay4KKworICAgIEJPT0wgY2FwdHVyZUhpdHNPblN1YnZpZXdzOworICAgIGlmIChmb3Jj
ZU5TVmlld0hpdFRlc3QpCisgICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9IE5POworICAg
IGVsc2UgaWYgKGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0KQorICAgICAgICBjYXB0dXJlSGl0c09u
U3Vidmlld3MgPSBZRVM7CisgICAgZWxzZSB7CisgICAgICAgIE5TRXZlbnQgKmV2ZW50ID0gW1tz
ZWxmIHdpbmRvd10gY3VycmVudEV2ZW50XTsKKyAgICAgICAgY2FwdHVyZUhpdHNPblN1YnZpZXdz
ID0gIShbZXZlbnQgdHlwZV0gPT0gTlNNb3VzZU1vdmVkCisgICAgICAgICAgICB8fCBbZXZlbnQg
dHlwZV0gPT0gTlNSaWdodE1vdXNlRG93bgorICAgICAgICAgICAgfHwgKFtldmVudCB0eXBlXSA9
PSBOU0xlZnRNb3VzZURvd24gJiYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtl
eU1hc2spICE9IDApCisgICAgICAgICAgICB8fCBbZXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5n
ZWQpOworICAgIH0KKworICAgIGlmICghY2FwdHVyZUhpdHNPblN1YnZpZXdzKQorICAgICAgICBy
ZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOworICAgIGlmIChbW3NlbGYgc3VwZXJ2aWV3XSBt
b3VzZTpwb2ludCBpblJlY3Q6W3NlbGYgZnJhbWVdXSkKKyAgICAgICAgcmV0dXJuIHNlbGY7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfY2xlYXJMYXN0SGl0Vmlld0lmU2VsZgorewor
ICAgIGlmIChsYXN0SGl0VmlldyA9PSBzZWxmKQorICAgICAgICBsYXN0SGl0VmlldyA9IG5pbDsK
K30KKworLSAoTlNUcmFja2luZ1JlY3RUYWcpYWRkVHJhY2tpbmdSZWN0OihOU1JlY3QpcmVjdCBv
d25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilkYXRhIGFzc3VtZUluc2lkZTooQk9PTClh
c3N1bWVJbnNpZGUKK3sKKyAgICBBU1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09
IG5pbCk7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7CisgICAgX3By
aXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gZGF0YTsKKyAgICByZXR1cm4gVFJBQ0tJTkdf
UkVDVF9UQUc7Cit9CisKKy0gKE5TVHJhY2tpbmdSZWN0VGFnKV9hZGRUcmFja2luZ1JlY3Q6KE5T
UmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5z
aWRlOihCT09MKWFzc3VtZUluc2lkZSB1c2VUcmFja2luZ051bTooaW50KXRhZworeworICAgIEFT
U0VSVCh0YWcgPT0gMCB8fCB0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpOworICAgIEFTU0VSVChf
cHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKKyAgICBfcHJpdmF0ZS0+dHJhY2tp
bmdSZWN0T3duZXIgPSBvd25lcjsKKyAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGEg
PSBkYXRhOworICAgIHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsKK30KKworLSAodm9pZClfYWRk
VHJhY2tpbmdSZWN0czooTlNSZWN0ICopcmVjdHMgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhTGlz
dDoodm9pZCAqKil1c2VyRGF0YUxpc3QgYXNzdW1lSW5zaWRlTGlzdDooQk9PTCAqKWFzc3VtZUlu
c2lkZUxpc3QgdHJhY2tpbmdOdW1zOihOU1RyYWNraW5nUmVjdFRhZyAqKXRyYWNraW5nTnVtcyBj
b3VudDooaW50KWNvdW50Cit7CisgICAgQVNTRVJUKGNvdW50ID09IDEpOworICAgIEFTU0VSVCh0
cmFja2luZ051bXNbMF0gPT0gMCB8fCB0cmFja2luZ051bXNbMF0gPT0gVFJBQ0tJTkdfUkVDVF9U
QUcpOworICAgIEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKKyAg
ICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsKKyAgICBfcHJpdmF0ZS0+dHJh
Y2tpbmdSZWN0VXNlckRhdGEgPSB1c2VyRGF0YUxpc3RbMF07CisgICAgdHJhY2tpbmdOdW1zWzBd
ID0gVFJBQ0tJTkdfUkVDVF9UQUc7Cit9CisKKy0gKHZvaWQpcmVtb3ZlVHJhY2tpbmdSZWN0OihO
U1RyYWNraW5nUmVjdFRhZyl0YWcKK3sKKyAgICBpZiAodGFnID09IDApCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoX3ByaXZhdGUgJiYgKHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRykp
IHsKKyAgICAgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gbmlsOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChfcHJpdmF0ZSAmJiAodGFnID09IF9wcml2YXRl
LT5sYXN0VG9vbFRpcFRhZykpIHsKKyAgICAgICAgW3N1cGVyIHJlbW92ZVRyYWNraW5nUmVjdDp0
YWddOworICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIC8vIElmIGFueSBvdGhlciB0cmFja2luZyByZWN0IGlzIGJl
aW5nIHJlbW92ZWQsIHdlIGRvbid0IGtub3cgaG93IGl0IHdhcyBjcmVhdGVkCisgICAgLy8gYW5k
IGl0J3MgcG9zc2libGUgdGhlcmUncyBhIGxlYWsgaW52b2x2ZWQgKHNlZSAzNTAwMjE3KQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCistICh2b2lkKV9yZW1vdmVUcmFja2luZ1JlY3Rz
OihOU1RyYWNraW5nUmVjdFRhZyAqKXRhZ3MgY291bnQ6KGludCljb3VudAoreworICAgIGludCBp
OworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGludCB0YWcgPSB0
YWdzW2ldOworICAgICAgICBpZiAodGFnID09IDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgQVNTRVJUKHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRyk7CisgICAgICAgIGlmIChfcHJp
dmF0ZSAhPSBuaWwpIHsKKyAgICAgICAgICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9
IG5pbDsKKyAgICAgICAgfQorICAgIH0KK30KKworLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUV4
aXRlZAoreworICAgIC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0cmFja2luZ051
bWJlciwgYW5kIHVzZXJEYXRhLgorICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGVu
dGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUV4aXRlZAorICAgICAgICBsb2NhdGlvbjpOU01h
a2VQb2ludCgwLCAwKQorICAgICAgICBtb2RpZmllckZsYWdzOjAKKyAgICAgICAgdGltZXN0YW1w
OjAKKyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAg
ICAgICAgY29udGV4dDpOVUxMCisgICAgICAgIGV2ZW50TnVtYmVyOjAKKyAgICAgICAgdHJhY2tp
bmdOdW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKKyAgICAgICAgdXNlckRhdGE6X3ByaXZhdGUtPnRy
YWNraW5nUmVjdFVzZXJEYXRhXTsKKyAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyIG1v
dXNlRXhpdGVkOmZha2VFdmVudF07Cit9CisKKy0gKHZvaWQpX3NlbmRUb29sVGlwTW91c2VFbnRl
cmVkCit7CisgICAgLy8gTm90aGluZyBtYXR0ZXJzIGV4Y2VwdCB3aW5kb3csIHRyYWNraW5nTnVt
YmVyLCBhbmQgdXNlckRhdGEuCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgZW50
ZXJFeGl0RXZlbnRXaXRoVHlwZTpOU01vdXNlRW50ZXJlZAorICAgICAgICBsb2NhdGlvbjpOU01h
a2VQb2ludCgwLCAwKQorICAgICAgICBtb2RpZmllckZsYWdzOjAKKyAgICAgICAgdGltZXN0YW1w
OjAKKyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAg
ICAgICAgY29udGV4dDpOVUxMCisgICAgICAgIGV2ZW50TnVtYmVyOjAKKyAgICAgICAgdHJhY2tp
bmdOdW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKKyAgICAgICAgdXNlckRhdGE6X3ByaXZhdGUtPnRy
YWNraW5nUmVjdFVzZXJEYXRhXTsKKyAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyIG1v
dXNlRW50ZXJlZDpmYWtlRXZlbnRdOworfQorCistICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmlu
ZyAqKXN0cmluZworeworICAgIE5TU3RyaW5nICp0b29sVGlwID0gW3N0cmluZyBsZW5ndGhdID09
IDAgPyBuaWwgOiBzdHJpbmc7CisgICAgTlNTdHJpbmcgKm9sZFRvb2xUaXAgPSBfcHJpdmF0ZS0+
dG9vbFRpcDsKKyAgICBpZiAoKHRvb2xUaXAgPT0gbmlsIHx8IG9sZFRvb2xUaXAgPT0gbmlsKSA/
IHRvb2xUaXAgPT0gb2xkVG9vbFRpcCA6IFt0b29sVGlwIGlzRXF1YWxUb1N0cmluZzpvbGRUb29s
VGlwXSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChvbGRUb29sVGlwKSB7Cisg
ICAgICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXTsKKyAgICAgICAgW29sZFRvb2xU
aXAgcmVsZWFzZV07CisgICAgfQorICAgIF9wcml2YXRlLT50b29sVGlwID0gW3Rvb2xUaXAgY29w
eV07CisgICAgaWYgKHRvb2xUaXApIHsKKyAgICAgICAgLy8gU2VlIHJhZGFyIDM1MDAyMTcgZm9y
IHdoeSB3ZSByZW1vdmUgYWxsIHRvb2x0aXBzIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNpbmdsZSBv
bmUgd2UgY3JlYXRlZC4KKyAgICAgICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRpcHNdOworICAgICAg
ICBOU1JlY3Qgd2lkZU9wZW5SZWN0ID0gTlNNYWtlUmVjdCgtMTAwMDAwLCAtMTAwMDAwLCAyMDAw
MDAsIDIwMDAwMCk7CisgICAgICAgIF9wcml2YXRlLT5sYXN0VG9vbFRpcFRhZyA9IFtzZWxmIGFk
ZFRvb2xUaXBSZWN0OndpZGVPcGVuUmVjdCBvd25lcjpzZWxmIHVzZXJEYXRhOk5VTExdOworICAg
ICAgICBbc2VsZiBfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWRdOworICAgIH0KK30KKworLSAoTlNT
dHJpbmcgKil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRvb2xUaXA6KE5TVG9vbFRpcFRh
Zyl0YWcgcG9pbnQ6KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZvaWQgKilkYXRhCit7CisgICAg
cmV0dXJuIFtbX3ByaXZhdGUtPnRvb2xUaXAgY29weV0gYXV0b3JlbGVhc2VdOworfQorCistICh2
b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlm
IChfcHJpdmF0ZS0+Y2xvc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1ZpZXcgKmNvbnRl
bnRWaWV3ID0gW1tldmVudCB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKKyAgICBOU1BvaW50IGxvY2F0
aW9uRm9ySGl0VGVzdCA9IFtbY29udGVudFZpZXcgc3VwZXJ2aWV3XSBjb252ZXJ0UG9pbnQ6W2V2
ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07CisgICAgCisgICAgZm9yY2VXZWJI
VE1MVmlld0hpdFRlc3QgPSBZRVM7CisgICAgTlNWaWV3ICpoaXRWaWV3ID0gW2NvbnRlbnRWaWV3
IGhpdFRlc3Q6bG9jYXRpb25Gb3JIaXRUZXN0XTsKKyAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVz
dCA9IE5POworICAgIAorICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gbmlsOworICAgIGlmIChbaGl0
VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dICYmICFbWyhXZWJIVE1MVmll
dyAqKWhpdFZpZXcgX3dlYlZpZXddIGlzSG92ZXJGZWVkYmFja1N1c3BlbmRlZF0pCisgICAgICAg
IHZpZXcgPSAoV2ViSFRNTFZpZXcgKiloaXRWaWV3OyAgICAKKworICAgIGlmICh2aWV3KQorICAg
ICAgICBbdmlldyByZXRhaW5dOworCisgICAgaWYgKGxhc3RIaXRWaWV3ICE9IHZpZXcgJiYgbGFz
dEhpdFZpZXcgJiYgW2xhc3RIaXRWaWV3IF9mcmFtZV0pIHsKKyAgICAgICAgLy8gSWYgd2UgYXJl
IG1vdmluZyBvdXQgb2YgYSB2aWV3IChvciBmcmFtZSksIGxldCdzIHByZXRlbmQgdGhlIG1vdXNl
IG1vdmVkCisgICAgICAgIC8vIGFsbCB0aGUgd2F5IG91dCBvZiB0aGF0IHZpZXcuIEJ1dCB3ZSBo
YXZlIHRvIGFjY291bnQgZm9yIHNjcm9sbGluZywgYmVjYXVzZQorICAgICAgICAvLyBraHRtbCBk
b2Vzbid0IHVuZGVyc3RhbmQgb3VyIGNsaXBwaW5nLgorICAgICAgICBOU1JlY3QgdmlzaWJsZVJl
Y3QgPSBbW1tbbGFzdEhpdFZpZXcgX2ZyYW1lXSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBkb2N1
bWVudFZpc2libGVSZWN0XTsKKyAgICAgICAgZmxvYXQgeVNjcm9sbCA9IHZpc2libGVSZWN0Lm9y
aWdpbi55OworICAgICAgICBmbG9hdCB4U2Nyb2xsID0gdmlzaWJsZVJlY3Qub3JpZ2luLng7CisK
KyAgICAgICAgZXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVk
CisgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoLTEgLSB4U2Ny
b2xsLCAtMSAtIHlTY3JvbGwgKQorICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxh
Z3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdCisgICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRl
XQorICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW3ZpZXcgd2luZG93XSB3
aW5kb3dOdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDpbW05TQXBwIGN1
cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJl
cjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKKyAgICAgICAgaWYgKEZyYW1lKiBsYXN0SGl0
Q29yZUZyYW1lID0gY29yZShbbGFzdEhpdFZpZXcgX2ZyYW1lXSkpCisgICAgICAgICAgICBsYXN0
SGl0Q29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CisgICAgfQor
CisgICAgbGFzdEhpdFZpZXcgPSB2aWV3OworCisgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFt2aWV3IF9mcmFtZV0pKQorICAgICAgICAgICAgY29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CisKKyAgICAgICAgW3Zp
ZXcgcmVsZWFzZV07CisgICAgfQorfQorCisvLyBrZWVwIGluIHN5bmMgd2l0aCBXZWJQYXN0ZWJv
YXJkSGVscGVyOjppbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzCisrIChOU0FycmF5ICopX2luc2Vy
dGFibGVQYXN0ZWJvYXJkVHlwZXMKK3sKKyAgICBzdGF0aWMgTlNBcnJheSAqdHlwZXMgPSBuaWw7
CisgICAgaWYgKCF0eXBlcykgeworICAgICAgICB0eXBlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBlLCBOU0Zp
bGVuYW1lc1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlwZSwKKyNp
ZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCisgICAgICAgICAgICBOU1BJQ1RQYm9hcmRUeXBlLAorI2VuZGlmCisgICAgICAgICAgICBO
U1VSTFBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJp
bmdQYm9hcmRUeXBlLCBOU0NvbG9yUGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmlsXTsKKyAgICAg
ICAgQ0ZSZXRhaW4odHlwZXMpOworICAgIH0KKyAgICByZXR1cm4gdHlwZXM7Cit9CisKKysgKE5T
QXJyYXkgKilfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzCit7CisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBwdXQgZGF0YSBmb3IgTlNIVE1MUGJvYXJkVHlwZSBvbiB0aGUgcGFzdGVib2FyZCBidXQg
TWljcm9zb2Z0IEV4Y2VsIGRvZXNuJ3QgbGlrZSBvdXIgZm9ybWF0IG9mIEhUTUwgKDM2NDA0MjMp
LgorICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRU
eXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlw
ZSwgbmlsXTsKK30KKworLSAoTlNJbWFnZSAqKV9kcmFnSW1hZ2VGb3JVUkw6KE5TU3RyaW5nKil1
cmxTdHJpbmcgd2l0aExhYmVsOihOU1N0cmluZyopbGFiZWwKK3sKKyAgICBCT09MIGRyYXdVUkxT
dHJpbmcgPSBZRVM7CisgICAgQk9PTCBjbGlwVVJMU3RyaW5nID0gTk8sIGNsaXBMYWJlbFN0cmlu
ZyA9IE5POworICAgIAorICAgIGlmICghbGFiZWwpIHsKKyAgICAgICAgZHJhd1VSTFN0cmluZyA9
IE5POworICAgICAgICBsYWJlbCA9IHVybFN0cmluZzsKKyAgICB9CisgICAgCisgICAgTlNGb250
ICpsYWJlbEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRG
b250OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEUkFHX0xJTktfTEFCRUxfRk9OVF9TSVpFXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b0hhdmVUcmFpdDpOU0JvbGRGb250TWFza107CisgICAgTlNGb250ICp1cmxGb250ID0gW05T
Rm9udCBzeXN0ZW1Gb250T2ZTaXplOiBEUkFHX0xJTktfVVJMX0ZPTlRfU0laRV07CisgICAgTlNT
aXplIGxhYmVsU2l6ZTsKKyAgICBsYWJlbFNpemUud2lkdGggPSBbbGFiZWwgX3dlYl93aWR0aFdp
dGhGb250OiBsYWJlbEZvbnRdOworICAgIGxhYmVsU2l6ZS5oZWlnaHQgPSBbbGFiZWxGb250IGFz
Y2VuZGVyXSAtIFtsYWJlbEZvbnQgZGVzY2VuZGVyXTsKKyAgICBpZiAobGFiZWxTaXplLndpZHRo
ID4gTUFYX0RSQUdfTEFCRUxfV0lEVEgpeworICAgICAgICBsYWJlbFNpemUud2lkdGggPSBNQVhf
RFJBR19MQUJFTF9XSURUSDsKKyAgICAgICAgY2xpcExhYmVsU3RyaW5nID0gWUVTOworICAgIH0K
KyAgICAKKyAgICBOU1NpemUgaW1hZ2VTaXplLCB1cmxTdHJpbmdTaXplOworICAgIGltYWdlU2l6
ZS53aWR0aCA9IGxhYmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmOwor
ICAgIGltYWdlU2l6ZS5oZWlnaHQgPSBsYWJlbFNpemUuaGVpZ2h0ICsgRFJBR19MQUJFTF9CT1JE
RVJfWSAqIDIuMGY7CisgICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKKyAgICAgICAgdXJsU3RyaW5n
U2l6ZS53aWR0aCA9IFt1cmxTdHJpbmcgX3dlYl93aWR0aFdpdGhGb250OiB1cmxGb250XTsKKyAg
ICAgICAgdXJsU3RyaW5nU2l6ZS5oZWlnaHQgPSBbdXJsRm9udCBhc2NlbmRlcl0gLSBbdXJsRm9u
dCBkZXNjZW5kZXJdOworICAgICAgICBpbWFnZVNpemUuaGVpZ2h0ICs9IHVybFN0cmluZ1NpemUu
aGVpZ2h0OworICAgICAgICBpZiAodXJsU3RyaW5nU2l6ZS53aWR0aCA+IE1BWF9EUkFHX0xBQkVM
X1dJRFRIKSB7CisgICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBNQVgoTUFYX0RSQUdfTEFC
RUxfV0lEVEggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwgTUlOX0RSQUdfTEFCRUxfV0lE
VEhfQkVGT1JFX0NMSVApOworICAgICAgICAgICAgY2xpcFVSTFN0cmluZyA9IFlFUzsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0aCA9IE1BWChsYWJlbFNpemUu
d2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwgdXJsU3RyaW5nU2l6ZS53aWR0aCAr
IERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBOU0lt
YWdlICpkcmFnSW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6IGltYWdlU2l6
ZV0gYXV0b3JlbGVhc2VdOworICAgIFtkcmFnSW1hZ2UgbG9ja0ZvY3VzXTsKKyAgICAKKyAgICBb
W05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOiAwLjdmIGdyZWVuOiAwLjdmIGJsdWU6IDAuN2Yg
YWxwaGE6IDAuOGZdIHNldF07CisgICAgCisgICAgLy8gRHJhZyBhIHJlY3RhbmdsZSB3aXRoIHJv
dW5kZWQgY29ybmVycy8KKyAgICBOU0JlemllclBhdGggKnBhdGggPSBbTlNCZXppZXJQYXRoIGJl
emllclBhdGhdOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNN
YWtlUmVjdCgwLjBmLCAwLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxf
UkFESVVTICogMi4wZildOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVj
dDogTlNNYWtlUmVjdCgwLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19MQUJFTF9SQURJVVMgKiAy
LjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZild
OworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdChp
bWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIGltYWdlU2l6ZS5oZWln
aHQgLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwg
RFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdp
dGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdfTEFCRUxfUkFE
SVVTICogMi4wZiwgMC4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JB
RElVUyAqIDIuMGYpXTsKKyAgICAKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6
IE5TTWFrZVJlY3QoRFJBR19MQUJFTF9SQURJVVMsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCAtIERS
QUdfTEFCRUxfUkFESVVTICogMi4wZiwgaW1hZ2VTaXplLmhlaWdodCldOworICAgIFtwYXRoIGFw
cGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdCgwLjBmLCBEUkFHX0xBQkVMX1JBRElV
UywgRFJBR19MQUJFTF9SQURJVVMgKyAxMC4wZiwgaW1hZ2VTaXplLmhlaWdodCAtIDIuMGYgKiBE
UkFHX0xBQkVMX1JBRElVUyldOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDog
TlNNYWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAtIDIwLjBmLCBE
UkFHX0xBQkVMX1JBRElVUywgRFJBR19MQUJFTF9SQURJVVMgKyAyMC4wZiwgaW1hZ2VTaXplLmhl
aWdodCAtIDIuMGYgKiBEUkFHX0xBQkVMX1JBRElVUyldOworICAgIFtwYXRoIGZpbGxdOworICAg
IAorICAgIE5TQ29sb3IgKnRvcENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6
MC4wZiBhbHBoYTowLjc1Zl07CisgICAgTlNDb2xvciAqYm90dG9tQ29sb3IgPSBbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VXaGl0ZToxLjBmIGFscGhhOjAuNWZdOworICAgIGlmIChkcmF3VVJMU3Ry
aW5nKSB7CisgICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQorICAgICAgICAgICAgdXJsU3RyaW5n
ID0gW1dlYlN0cmluZ1RydW5jYXRvciBjZW50ZXJUcnVuY2F0ZVN0cmluZzogdXJsU3RyaW5nIHRv
V2lkdGg6aW1hZ2VTaXplLndpZHRoIC0gKERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKSB3aXRo
Rm9udDp1cmxGb250XTsKKyAgICAgICAgCisgICAgICAgIFt1cmxTdHJpbmcgX3dlYl9kcmF3RG91
YmxlZEF0UG9pbnQ6TlNNYWtlUG9pbnQoRFJBR19MQUJFTF9CT1JERVJfWCwgRFJBR19MQUJFTF9C
T1JERVJfWSAtIFt1cmxGb250IGRlc2NlbmRlcl0pIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNvbG9yIGZvbnQ6
dXJsRm9udF07CisgICAgfQorICAgIAorICAgIGlmIChjbGlwTGFiZWxTdHJpbmcpCisgICAgICAg
IGxhYmVsID0gW1dlYlN0cmluZ1RydW5jYXRvciByaWdodFRydW5jYXRlU3RyaW5nOiBsYWJlbCB0
b1dpZHRoOmltYWdlU2l6ZS53aWR0aCAtIChEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZikgd2l0
aEZvbnQ6bGFiZWxGb250XTsKKyAgICBbbGFiZWwgX3dlYl9kcmF3RG91YmxlZEF0UG9pbnQ6TlNN
YWtlUG9pbnQgKERSQUdfTEFCRUxfQk9SREVSX1gsIGltYWdlU2l6ZS5oZWlnaHQgLSBEUkFHX0xB
QkVMX0JPUkRFUl9ZX09GRlNFVCAtIFtsYWJlbEZvbnQgcG9pbnRTaXplXSkKKyAgICAgICAgICAg
ICAgICAgICAgICB3aXRoVG9wQ29sb3I6dG9wQ29sb3IgYm90dG9tQ29sb3I6Ym90dG9tQ29sb3Ig
Zm9udDpsYWJlbEZvbnRdOworICAgIAorICAgIFtkcmFnSW1hZ2UgdW5sb2NrRm9jdXNdOworICAg
IAorICAgIHJldHVybiBkcmFnSW1hZ2U7Cit9CisKKy0gKE5TSW1hZ2UgKilfZHJhZ0ltYWdlRm9y
TGlua0VsZW1lbnQ6KE5TRGljdGlvbmFyeSAqKWVsZW1lbnQKK3sKKyAgICBOU1VSTCAqbGlua1VS
TCA9IFtlbGVtZW50IG9iamVjdEZvcktleTogV2ViRWxlbWVudExpbmtVUkxLZXldOworICAgIAor
ICAgIE5TU3RyaW5nICpsYWJlbCA9IFtlbGVtZW50IG9iamVjdEZvcktleTogV2ViRWxlbWVudExp
bmtMYWJlbEtleV07CisgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtsaW5rVVJMIF93ZWJfdXNl
clZpc2libGVTdHJpbmddOworICAgIHJldHVybiBbc2VsZiBfZHJhZ0ltYWdlRm9yVVJMOnVybFN0
cmluZyB3aXRoTGFiZWw6bGFiZWxdOworfQorCistICh2b2lkKXBhc3RlYm9hcmRDaGFuZ2VkT3du
ZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICBbc2VsZiBzZXRQcm9taXNlZERy
YWdUSUZGRGF0YVNvdXJjZTowXTsKK30KKworLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCit7Cisg
ICAgaWYgKFt0eXBlIGlzRXF1YWw6TlNSVEZEUGJvYXJkVHlwZV0gJiYgW1twYXN0ZWJvYXJkIHR5
cGVzXSBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgV2Vi
QXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0
ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV07CisgICAgICAgIFtwYXN0
ZWJvYXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2ZTphcmNoaXZlIGNvbnRhaW5z
SW1hZ2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpOU1RJRkZQYm9hcmRUeXBl
XV07CisgICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOworICAgIH0gZWxzZSBpZiAoW3R5cGUgaXNF
cXVhbDpOU1RJRkZQYm9hcmRUeXBlXSAmJiBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZV0pIHsKKyAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlXS0+aW1hZ2UoKSkKKyAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6KE5T
RGF0YSAqKWltYWdlLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKSBmb3JUeXBlOk5TVElGRlBib2Fy
ZFR5cGVdOworICAgICAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTowXTsK
KyAgICB9Cit9CisKKy0gKHZvaWQpX2hhbmRsZUF1dG9zY3JvbGxGb3JNb3VzZURyYWdnZWQ6KE5T
RXZlbnQgKilldmVudCAKK3sgCisgICAgW3NlbGYgYXV0b3Njcm9sbDpldmVudF07IAorICAgIFtz
ZWxmIF9zdGFydEF1dG9zY3JvbGxUaW1lcjpldmVudF07IAorfSAKKworLSAoV2ViUGx1Z2luQ29u
dHJvbGxlciAqKV9wbHVnaW5Db250cm9sbGVyCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5wbHVn
aW5Db250cm9sbGVyOworfQorCistICh2b2lkKV9sYXlvdXRGb3JQcmludGluZworeworICAgIC8v
IFNldCBwcmludGluZyBtb2RlIHRlbXBvcmFyaWx5IHNvIHdlIGNhbiBhZGp1c3QgdGhlIHNpemUg
b2YgdGhlIHZpZXcuIFRoaXMgd2lsbCBhbGxvdworICAgIC8vIEFwcEtpdCdzIHBhZ2luYXRpb24g
Y29kZSB0byB1c2UgdGhlIGNvcnJlY3QgaGVpZ2h0IGZvciB0aGUgcGFnZSBjb250ZW50LiBMZWF2
aW5nIHByaW50aW5nCisgICAgLy8gbW9kZSBvbiBpbmRlZmluaXRlbHkgd291bGQgaW50ZXJmZXJl
IHdpdGggTWFpbCdzIHByaW50aW5nIG1lY2hhbmlzbSAoYXQgbGVhc3QpLCBzbyB3ZSBqdXN0Cisg
ICAgLy8gdHVybiBpdCBvZmYgYWdhaW4gYWZ0ZXIgYWRqdXN0aW5nIHRoZSBzaXplLgorICAgIFtz
ZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemVdOworICAg
IFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOworfQorCistICh2b2lkKV9z
bWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBsYWNpbmdSYW5n
ZTooRE9NUmFuZ2UgKilyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6KE5TU3RyaW5nICoqKWJl
Zm9yZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiopYWZ0ZXJTdHJpbmcKK3sKKyAgICBp
ZiAoIXBhc3RlU3RyaW5nIHx8ICFyYW5nZVRvUmVwbGFjZSB8fCAhW1tzZWxmIF93ZWJWaWV3XSBz
bWFydEluc2VydERlbGV0ZUVuYWJsZWRdKSB7CisgICAgICAgIGlmIChiZWZvcmVTdHJpbmcpCisg
ICAgICAgICAgICAqYmVmb3JlU3RyaW5nID0gbmlsOworICAgICAgICBpZiAoYWZ0ZXJTdHJpbmcp
CisgICAgICAgICAgICAqYWZ0ZXJTdHJpbmcgPSBuaWw7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgW1tzZWxmIF9mcmFtZV0gX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOnBhc3RlU3Ry
aW5nIHJlcGxhY2luZ1JhbmdlOnJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzpiZWZvcmVTdHJp
bmcgYWZ0ZXJTdHJpbmc6YWZ0ZXJTdHJpbmddOworfQorCistIChCT09MKV9jYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAoreworICAgIHJldHVy
biBbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0gJiYgW1twYXN0ZWJv
YXJkIHR5cGVzXSBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07Cit9CisK
Ky0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOiAoTlNFdmVudCAqKXRyaWdnZXJFdmVudAor
eworICAgIGlmIChfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID09IG5pbCkgeworICAgICAgICBf
cHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gW1tOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRp
bWVJbnRlcnZhbDpBVVRPU0NST0xMX0lOVEVSVkFMCisgICAgICAgICAgICB0YXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX2F1dG9zY3JvbGwpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10g
cmV0YWluXTsKKyAgICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBbdHJp
Z2dlckV2ZW50IHJldGFpbl07CisgICAgfQorfQorCisvLyBGSVhNRTogX3NlbGVjdGlvblJlY3Qg
aXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzZWxlY3Rpb25SZWN0LCB3aGljaCBpcyBpbiBwcm90
b2NvbCBXZWJEb2N1bWVudFNlbGVjdGlvbi4KKy8vIFdlIGNhbid0IHJlbW92ZSB0aGlzIHlldCBi
ZWNhdXNlIGl0J3Mgc3RpbGwgaW4gdXNlIGJ5IE1haWwuCistIChOU1JlY3QpX3NlbGVjdGlvblJl
Y3QKK3sKKyAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07Cit9CisKKy0gKHZvaWQpX3N0
b3BBdXRvc2Nyb2xsVGltZXIKK3sKKyAgICBOU1RpbWVyICp0aW1lciA9IF9wcml2YXRlLT5hdXRv
c2Nyb2xsVGltZXI7CisgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IG5pbDsKKyAgICBb
X3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgcmVsZWFzZV07CisgICAgX3ByaXZhdGUt
PmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7CisgICAgW3RpbWVyIGludmFsaWRhdGVdOwor
ICAgIFt0aW1lciByZWxlYXNlXTsKK30KKworLSAodm9pZClfYXV0b3Njcm9sbAoreworICAgIC8v
IEd1YXJhbnRlZSB0aGF0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlzIGludmFsaWRhdGVkLCBldmVu
IGlmIHdlIGRvbid0IHJlY2VpdmUKKyAgICAvLyBhIG1vdXNlIHVwIGV2ZW50LgorICAgIEJPT0wg
aXNTdGlsbERvd24gPSBDR0V2ZW50U291cmNlQnV0dG9uU3RhdGUoa0NHRXZlbnRTb3VyY2VTdGF0
ZUNvbWJpbmVkU2Vzc2lvblN0YXRlLCBrQ0dNb3VzZUJ1dHRvbkxlZnQpOyAgIAorICAgIGlmICgh
aXNTdGlsbERvd24peworICAgICAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBt
b3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VEcmFnZ2VkCisgICAgICAgIGxvY2F0aW9uOltb
c2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlvbl1d
CisgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxh
Z3NdCisgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNl
RGF0ZV0KKyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0K
KyAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAgICAg
ZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgW3NlbGYgbW91c2VE
cmFnZ2VkOmZha2VFdmVudF07Cit9CisKKy0gKEJPT0wpX2NhbkVkaXQKK3sKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYm
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKK30KKworLSAoQk9PTClfY2FuRWRpdFJp
Y2hseQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgp
OworfQorCistIChCT09MKV9jYW5BbHRlckN1cnJlbnRTZWxlY3Rpb24KK3sKKyAgICByZXR1cm4g
W3NlbGYgX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnRdICYmIFtzZWxmIF9pc0VkaXRhYmxl
XTsKK30KKworLSAoQk9PTClfaGFzU2VsZWN0aW9uCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7Cit9CisKKy0gKEJPT0wpX2hhc1NlbGVjdGlvbk9ySW5z
ZXJ0aW9uUG9pbnQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ2Fy
ZXRPclJhbmdlKCk7Cit9CisKKy0gKEJPT0wpX2hhc0luc2VydGlvblBvaW50Cit7CisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFt
ZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0KCk7Cit9CisKKy0gKEJPT0wpX2lz
RWRpdGFibGUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
KyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVu
dEVkaXRhYmxlKCk7Cit9CisKKy0gKEJPT0wpX3RyYW5zcGFyZW50QmFja2dyb3VuZAoreworICAg
IHJldHVybiBfcHJpdmF0ZS0+dHJhbnNwYXJlbnRCYWNrZ3JvdW5kOworfQorCistICh2b2lkKV9z
ZXRUcmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wpZgoreworICAgIF9wcml2YXRlLT50cmFuc3Bh
cmVudEJhY2tncm91bmQgPSBmOworfQorCistIChOU0ltYWdlICopX3NlbGVjdGlvbkRyYWdnaW5n
SW1hZ2UKK3sKKyAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pIHsKKyAgICAgICAgTlNJbWFn
ZSAqZHJhZ0ltYWdlID0gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uSW1hZ2UoKTsKKyAg
ICAgICAgW2RyYWdJbWFnZSBfd2ViX2Rpc3NvbHZlVG9GcmFjdGlvbjpXZWJEcmFnSW1hZ2VBbHBo
YV07CisgICAgICAgIHJldHVybiBkcmFnSW1hZ2U7CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKE5TUmVjdClfc2VsZWN0aW9uRHJhZ2dpbmdSZWN0Cit7CisgICAgLy8gTWFpbCBjdXJy
ZW50bHkgY2FsbHMgdGhpcyBtZXRob2QuIFdlIGNhbiBlbGltaW5hdGUgaXQgd2hlbiBNYWlsIG5v
IGxvbmdlciBjYWxscyBpdC4KKyAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07Cit9CisK
Ky0gKERPTU5vZGUgKilfaW5zZXJ0T3JkZXJlZExpc3QKK3sKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmluc2VydE9yZGVyZWRMaXN0KCkuZ2V0KCkpIDogbmlsOworfQorCist
IChET01Ob2RlICopX2luc2VydFVub3JkZXJlZExpc3QKK3sKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmluc2VydFVub3JkZXJlZExpc3QoKS5nZXQoKSkgOiBuaWw7Cit9CisK
Ky0gKEJPT0wpX2NhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCit7CisgICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPmVkaXRvcigpLT5jYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOworfQor
CistIChCT09MKV9jYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAoreworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKK30K
KworLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAoreworICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUg
PyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKS5n
ZXQoKSkgOiBuaWw7Cit9CisKKy0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKS5nZXQoKSkgOiBuaWw7Cit9CisKKy0gKERPTU5v
ZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQKK3sKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8g
a2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRl
cmVkKCkuZ2V0KCkpIDogbmlsOworfQorCistICh2b2lkKV9kZWNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGlmIChjb3JlRnJhbWUpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmRlY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsKCk7Cit9CisKKy0gKHZvaWQpX3NldEhpZ2hsaWdodGVyOihpZDxXZWJI
VE1MSGlnaGxpZ2h0ZXI+KWhpZ2hsaWdodGVyIG9mVHlwZTooTlNTdHJpbmcqKXR5cGUKK3sKKyAg
ICBpZiAoIV9wcml2YXRlLT5oaWdobGlnaHRlcnMpCisgICAgICAgIF9wcml2YXRlLT5oaWdobGln
aHRlcnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgIFtfcHJpdmF0
ZS0+aGlnaGxpZ2h0ZXJzIHNldE9iamVjdDpoaWdobGlnaHRlciBmb3JLZXk6dHlwZV07Cit9CisK
Ky0gKHZvaWQpX3JlbW92ZUhpZ2hsaWdodGVyT2ZUeXBlOihOU1N0cmluZyopdHlwZQoreworICAg
IFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIHJlbW92ZU9iamVjdEZvcktleTp0eXBlXTsKK30KKwor
LSAodm9pZClfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCit7CisgICAgW3NlbGYgX2NhbmNl
bFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsKKworICAgIFtbc2VsZiBfd2ViVmll
d10gX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOltzZWxmIF9mcmFtZV1dOwor
fQorCistICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZAoreworICAgIEFTU0VSVChbc2VsZiBfaGFzU2VsZWN0aW9uXSk7CisgICAgTlNB
cnJheSAqdHlwZXMgPSBbc2VsZiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb25dOworCisgICAg
Ly8gRG9uJ3Qgd3JpdGUgUlRGRCB0byB0aGUgcGFzdGVib2FyZCB3aGVuIHRoZSBjb3BpZWQgYXR0
cmlidXRlZCBzdHJpbmcgaGFzIG5vIGF0dGFjaG1lbnRzLgorICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107Cisg
ICAgTlNNdXRhYmxlQXJyYXkgKm11dGFibGVUeXBlcyA9IG5pbDsKKyAgICBpZiAoIVthdHRyaWJ1
dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKSB7CisgICAgICAgIG11dGFibGVUeXBlcyA9
IFt0eXBlcyBtdXRhYmxlQ29weV07CisgICAgICAgIFttdXRhYmxlVHlwZXMgcmVtb3ZlT2JqZWN0
Ok5TUlRGRFBib2FyZFR5cGVdOworICAgICAgICB0eXBlcyA9IG11dGFibGVUeXBlczsKKyAgICB9
CisKKyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3NlbGYgX3RvcEhU
TUxWaWV3XV07CisgICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0
eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOmF0dHJp
YnV0ZWRTdHJpbmddOworICAgIFttdXRhYmxlVHlwZXMgcmVsZWFzZV07Cit9CisKKy0gKHZvaWQp
Y2xvc2UKK3sKKyAgICAvLyBDaGVjayBmb3IgYSBuaWwgX3ByaXZhdGUgaGVyZSBpbiBjYXNlIHdl
IHdlcmUgY3JlYXRlZCB3aXRoIGluaXRXaXRoQ29kZXIuIEluIHRoYXQgY2FzZSwgdGhlIFdlYlZp
ZXcgaXMganVzdCB0aHJvd2luZworICAgIC8vIG91dCB0aGUgYXJjaGl2ZWQgV2ViSFRNTFZpZXcg
YW5kIHJlY3JlYXRpbmcgYSBuZXcgb25lIGlmIG5lZWRlZC4gU28gY2xvc2UgZG9lc24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nIGluIHRoYXQgY2FzZS4KKyAgICBpZiAoIV9wcml2YXRlIHx8IF9wcml2
YXRlLT5jbG9zZWQpCisgICAgICAgIHJldHVybjsKKworICAgIF9wcml2YXRlLT5jbG9zZWQgPSBZ
RVM7CisKKyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOworICAgIFtzZWxm
IF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07CisgICAgW3NlbGYgX2Ns
ZWFyTGFzdEhpdFZpZXdJZlNlbGZdOworICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2
ZXJVbmNvbmRpdGlvbmFsbHldOworICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNlcnZlcnNdOwor
ICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOworICAgIFtfcHJpdmF0ZS0+cGx1
Z2luQ29udHJvbGxlciBkZXN0cm95QWxsUGx1Z2luc107CisgICAgW19wcml2YXRlLT5wbHVnaW5D
b250cm9sbGVyIHNldERhdGFTb3VyY2U6bmlsXTsKKyAgICAvLyByZW1vdmUgdG9vbHRpcHMgYmVm
b3JlIGNsZWFyaW5nIF9wcml2YXRlIHNvIHJlbW92ZVRyYWNraW5nUmVjdDogd2lsbCB3b3JrIGNv
cnJlY3RseQorICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpCisg
ICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
RnJhbWU6W3NlbGYgX2ZyYW1lXV07CisjZW5kaWYKKworICAgIFtfcHJpdmF0ZSBjbGVhcl07CisK
KyAgICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOworICAgIGlmIChwYWdlKQor
ICAgICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zZXREcmFnZ2luZ0ltYWdlVVJMKEtVUkwo
KSk7Cit9CisKKy0gKEJPT0wpX2hhc0hUTUxEb2N1bWVudAoreworICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICBy
ZXR1cm4gTk87CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgp
OworICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKTsKK30K
KworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9h
cmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmluZyAqKXBib2FyZFR5cGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OihE
T01SYW5nZSAqKWNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlcworeworICAgIGlmIChw
Ym9hcmRUeXBlID09IFdlYkFyY2hpdmVQYm9hcmRUeXBlKSB7CisgICAgICAgIFdlYkFyY2hpdmUg
KmFyY2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBk
YXRhRm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOworICAgICAgICBpZiAoc3VicmVzb3Vy
Y2VzKQorICAgICAgICAgICAgKnN1YnJlc291cmNlcyA9IFthcmNoaXZlIHN1YnJlc291cmNlc107
CisgICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291
cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNoaXZlOmFyY2hpdmVdOworICAgICAgICBbYXJj
aGl2ZSByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKyAgICBpZiAo
cGJvYXJkVHlwZSA9PSBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpCisgICAgICAgIHJldHVybiBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczpbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JU
eXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV1dOworICAgICAgICAKKyAgICBpZiAocGJvYXJkVHlw
ZSA9PSBOU0hUTUxQYm9hcmRUeXBlKSB7CisgICAgICAgIE5TU3RyaW5nICpIVE1MU3RyaW5nID0g
W3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlXTsKKyAgICAgICAgLy8g
VGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBNaWNyb3NvZnQncyBIVE1MIHBhc3RlYm9hcmQgZGF0YSB3
b3JrLiBTZWUgMzc3ODc4NS4KKyAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGhhc1ByZWZpeDpAIlZl
cnNpb246Il0pIHsKKyAgICAgICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBbSFRNTFN0cmluZyByYW5n
ZU9mU3RyaW5nOkAiPGh0bWwiIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdOworICAg
ICAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAgICAgICAg
ICAgSFRNTFN0cmluZyA9IFtIVE1MU3RyaW5nIHN1YnN0cmluZ0Zyb21JbmRleDpyYW5nZS5sb2Nh
dGlvbl07CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gPT0gMCkK
KyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICByZXR1cm4gW1tzZWxm
IF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOkhUTUxTdHJpbmcgYmFz
ZVVSTFN0cmluZzpuaWxdOworICAgIH0KKworICAgIC8vIFRoZSBfaGFzSFRNTERvY3VtZW50IGNs
YXVzZSBoZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gTlNBdHRyaWJ1dGVkU3RyaW5n
OiBSYWRhciA1MDUyMzY5LgorICAgIC8vIElmIHdlIGNhbGwgX2RvY3VtZW50RnJvbVJhbmdlIG9u
IGFuIFhNTCBkb2N1bWVudCB3ZSdsbCBnZXQgInNldElubmVySFRNTDogbWV0aG9kIG5vdCBmb3Vu
ZCIuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgYnVnIDUwNTIzNjkgaXMgZml4ZWQu
CisgICAgaWYgKFtzZWxmIF9oYXNIVE1MRG9jdW1lbnRdICYmIHBib2FyZFR5cGUgPT0gTlNSVEZQ
Ym9hcmRUeXBlIHx8IHBib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkgeworICAgICAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsKKyAgICAgICAgaWYgKHBib2FyZFR5cGUg
PT0gTlNSVEZEUGJvYXJkVHlwZSkKKyAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZE
UGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgICAgICBpZiAoc3RyaW5n
ID09IG5pbCkKKyAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBib2FyZFR5cGVdIGRv
Y3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICAgICAgaWYgKHN0cmluZyA9PSBuaWwpCisgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgIE5TRGljdGlvbmFyeSAq
ZG9jdW1lbnRBdHRyaWJ1dGVzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0
c0FuZEtleXM6CisgICAgICAgICAgICBbW3NlbGYgY2xhc3NdIF9leGNsdWRlZEVsZW1lbnRzRm9y
QXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb25dLCBOU0V4Y2x1ZGVkRWxlbWVudHNEb2N1bWVudEF0
dHJpYnV0ZSwKKyAgICAgICAgICAgIHNlbGYsIEAiV2ViUmVzb3VyY2VIYW5kbGVyIiwgbmlsXTsK
KyAgICAgICAgTlNBcnJheSAqczsKKyAgICAgICAgCisgICAgICAgIEJPT0wgd2FzRGVmZXJyaW5n
Q2FsbGJhY2tzID0gW1tzZWxmIF93ZWJWaWV3XSBkZWZlcnNDYWxsYmFja3NdOworICAgICAgICBp
ZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAgICAgIFtbc2VsZiBfd2ViVmlld10g
c2V0RGVmZXJzQ2FsbGJhY2tzOllFU107CisgICAgICAgICAgICAKKyAgICAgICAgRE9NRG9jdW1l
bnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVudEZyb21SYW5nZTpOU01ha2VS
YW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Oltbc2VsZiBfZnJhbWVdIERPTURv
Y3VtZW50XSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvY3VtZW50QXR0cmlidXRlczpkb2N1bWVudEF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczomc107Cisg
ICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCisgICAgICAgICAgICAqc3VicmVzb3VyY2VzID0gczsK
KyAgICAgICAgCisgICAgICAgIE5TRW51bWVyYXRvciAqZSA9IFtzIG9iamVjdEVudW1lcmF0b3Jd
OworICAgICAgICBXZWJSZXNvdXJjZSAqcjsKKyAgICAgICAgd2hpbGUgKChyID0gW2UgbmV4dE9i
amVjdF0pKQorICAgICAgICAgICAgW1tzZWxmIF9kYXRhU291cmNlXSBhZGRTdWJyZXNvdXJjZTpy
XTsKKyAgICAgICAgCisgICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQorICAgICAg
ICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6Tk9dOworICAgICAgICAK
KyAgICAgICAgW2RvY3VtZW50QXR0cmlidXRlcyByZWxlYXNlXTsKKyAgICAgICAgW3N0cmluZyBy
ZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKyAgICBpZiAocGJvYXJk
VHlwZSA9PSBOU1RJRkZQYm9hcmRUeXBlKSB7CisgICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJj
ZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9y
VHlwZTpOU1RJRkZQYm9hcmRUeXBlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFy
dChAImltYWdlLnRpZmYiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS90aWZmIiAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZU5hbWU6bmlsXTsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBb
W3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVz
b3VyY2VdOworICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFn
bWVudDsKKyAgICB9CisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQREZQYm9hcmRUeXBlKSB7Cisg
ICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRX
aXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BERlBib2FyZFR5cGVdCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiYXBwbGljYXRpb24ucGRmIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBl
OkAiYXBwbGljYXRpb24vcGRmIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKKyAgICAg
ICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9k
b2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOworICAgICAgICBbcmVz
b3VyY2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisjaWYgZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
ICAgIGlmIChwYm9hcmRUeXBlID09IE5TUElDVFBib2FyZFR5cGUpIHsKKyAgICAgICAgV2ViUmVz
b3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0
ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUElDVFBib2FyZFR5cGVdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxX
aXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucGljdCIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImltYWdlL3BpY3QiIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNv
ZGluZ05hbWU6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50
ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1h
Z2VSZXNvdXJjZTpyZXNvdXJjZV07CisgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKyNlbmRpZgorICAgIC8vIE9ubHkgMTAuNSBhbmQg
aGlnaGVyIHN1cHBvcnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBwYXN0ZWJvYXJkIHR5cGVzIHdp
dGggVVRJcywgYnV0IHdlIGRvbid0IGJlbGlldmUKKyAgICAvLyB0aGF0IGFueSBhcHBsaWNhdGlv
bnMgb24gVGlnZXIgcHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBVVEksIGxpa2Ug
UE5HLCBvbiB0aGUgcGFzdGVib2FyZC4KKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3Ry
aW5nOihOU1N0cmluZyopa1VUVHlwZVBOR10pIHsKKyAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291
cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFG
b3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxh
dGl2ZVBhcnQoQCJpbWFnZS5wbmciKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS9wbmciIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6
bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZyYW1lTmFtZTpuaWxdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVu
dCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJj
ZTpyZXNvdXJjZV07CisgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJu
IGZyYWdtZW50OworICAgIH0KKyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1VSTFBib2FyZFR5cGUp
IHsKKyAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDpwYXN0ZWJv
YXJkXTsKKyAgICAgICAgRE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9N
RG9jdW1lbnRdOworICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgICAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgRE9NSFRNTEFuY2hvckVsZW1l
bnQgKmFuY2hvciA9IChET01IVE1MQW5jaG9yRWxlbWVudCAqKVtkb2N1bWVudCBjcmVhdGVFbGVt
ZW50OkAiYSJdOworICAgICAgICBOU1N0cmluZyAqVVJMU3RyaW5nID0gW1VSTCBfd2ViX29yaWdp
bmFsRGF0YUFzU3RyaW5nXTsgLy8gT3JpZ2luYWwgZGF0YSBpcyBBU0NJSS1vbmx5LCBzbyB0aGVy
ZSBpcyBubyBuZWVkIHRvIHByZWNvbXBvc2UuCisgICAgICAgIGlmIChbVVJMU3RyaW5nIGxlbmd0
aF0gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIE5TU3RyaW5nICpVUkxU
aXRsZVN0cmluZyA9IFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOldlYlVSTE5hbWVQYm9hcmRU
eXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKKyAgICAgICAgRE9N
VGV4dCAqdGV4dCA9IFtkb2N1bWVudCBjcmVhdGVUZXh0Tm9kZTpVUkxUaXRsZVN0cmluZ107Cisg
ICAgICAgIFthbmNob3Igc2V0SHJlZjpVUkxTdHJpbmddOworICAgICAgICBbYW5jaG9yIGFwcGVu
ZENoaWxkOnRleHRdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtk
b2N1bWVudCBjcmVhdGVEb2N1bWVudEZyYWdtZW50XTsKKyAgICAgICAgW2ZyYWdtZW50IGFwcGVu
ZENoaWxkOmFuY2hvcl07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisgICAgaWYg
KHBib2FyZFR5cGUgPT0gTlNTdHJpbmdQYm9hcmRUeXBlKQorICAgICAgICByZXR1cm4ga2l0KGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoY29yZShjb250ZXh0KSwgW1twYXN0ZWJvYXJkIHN0cmluZ0Zv
clR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxN
YXBwaW5nXSkuZ2V0KCkpOworICAgIHJldHVybiBuaWw7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkgCistICh2b2lkKV9wYXVzZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBs
dWdpbnMgCit7IAorICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3NlbGYgc3Vidmlld3NdOyAKKyAg
ICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdzIGNvdW50XTsgCisgICAgdW5z
aWduZWQgaW50IHN1YnZpZXdJbmRleDsgCisgICAgCisgICAgZm9yIChzdWJ2aWV3SW5kZXggPSAw
OyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJbmRleCsrKSB7IAorICAgICAg
ICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpzdWJ2aWV3SW5kZXhd
OyAKKyAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcgY2xhc3NdXSkgCisgICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcgKilzdWJ2aWV3IHN0b3BUaW1lcnNdOworICAgIH0gCit9IAorI2VuZGlmIAorCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIAorLSAodm9pZClfcmVzdW1lTnVsbEV2ZW50c0ZvckFs
bE5ldHNjYXBlUGx1Z2lucyAKK3sgCisgICAgTlNBcnJheSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2
aWV3c107IAorICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3Q291bnQgPSBbc3Vidmlld3MgY291bnRd
OyAKKyAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4OyAKKyAgICAKKyAgICBmb3IgKHN1YnZp
ZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZpZXdDb3VudDsgc3Vidmlld0luZGV4Kysp
IHsgCisgICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtzdWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1
YnZpZXdJbmRleF07IAorICAgICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKKyAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgcmVzdGFydFRpbWVyc107IAorICAgIH0gCit9IAorI2Vu
ZGlmIAorCistIChCT09MKV9pc1VzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZworeworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICByZXR1cm4gX3ByaXZhdGUtPmxheWVySG9z
dGluZ1ZpZXcgIT0gbmlsOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKK30KKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gTlNWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKwor
LSAodm9pZClfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVB
cnJheSAqKWFycmF5Cit7CisgICAgdW5zaWduZWQgY291bnQgPSBbX3N1YnZpZXdzIGNvdW50XTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU1Zp
ZXcgKmNoaWxkID0gW19zdWJ2aWV3cyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBpZiAoW2No
aWxkIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAgICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OmNoaWxkXTsKKyAgICAgICAgW2NoaWxkIF93ZWJfYWRkRGVzY2VuZGFudFdl
YkhUTUxWaWV3c1RvQXJyYXk6YXJyYXldOworICAgIH0KK30KKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gTlNNdXRhYmxlRGljdGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCisKKy0g
KHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleTooaWQpa2V5Cit7
CisgICAgaWYgKG9iamVjdCA9PSBuaWwpIHsKKyAgICAgICAgW3NlbGYgcmVtb3ZlT2JqZWN0Rm9y
S2V5OmtleV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW3NlbGYgc2V0T2JqZWN0Om9iamVjdCBm
b3JLZXk6a2V5XTsKKyAgICB9Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBOU1N0cmluZyAoV2Vi
SFRNTFZpZXdGaWxlSW50ZXJuYWwpCistIChCT09MKW1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50
OihOU1N0cmluZyAqKWV4dGVuc2lvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TU3RyaW5n
IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKworLSAoQk9PTCltYXRjaGVzRXh0ZW5zaW9uRXF1
aXZhbGVudDooTlNTdHJpbmcgKilleHRlbnNpb24KK3sKKyAgICBpZiAoW3NlbGYgaGFzU3VmZml4
OmV4dGVuc2lvbl0pCisgICAgICAgIHJldHVybiBZRVM7CisgICAgZWxzZSBpZiAoW2V4dGVuc2lv
biBpc0VxdWFsVG9TdHJpbmc6QCJqcGVnIl0gJiYgW3NlbGYgaGFzU3VmZml4OkAianBnIl0pCisg
ICAgICAgIHJldHVybiBZRVM7CisgICAgcmV0dXJuIE5POworfQorCitAZW5kCisKKyNpZmRlZiBC
VUlMRElOR19PTl9USUdFUgorCisvLyBUaGUgZm9sbG93aW5nIGlzIGEgd29ya2Fyb3VuZCBmb3IK
Ky8vIDxyZGFyOi8vcHJvYmxlbS8zNDI5NjMxPiB3aW5kb3cgc3RvcHMgZ2V0dGluZyBtb3VzZSBt
b3ZlZCBldmVudHMgYWZ0ZXIgZmlyc3QgdG9vbHRpcCBhcHBlYXJzCisvLyBUaGUgdHJpY2sgaXMg
dG8gZGVmaW5lIGEgY2F0ZWdvcnkgb24gTlNUb29sVGlwUGFuZWwgdGhhdCBpbXBsZW1lbnRzIHNl
dEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOi4KKy8vIFNpbmNlIHRoZSBjYXRlZ29yeSB3aWxsIGJl
IHNlYXJjaGVkIGJlZm9yZSB0aGUgcmVhbCBjbGFzcywgd2UnbGwgcHJldmVudCB0aGUgZmxhZyBm
cm9tIGJlaW5nCisvLyBzZXQgb24gdGhlIHRvb2wgdGlwIHBhbmVsLgorCitAaW50ZXJmYWNlIE5T
VG9vbFRpcFBhbmVsIDogTlNQYW5lbAorQGVuZAorCitAaW50ZXJmYWNlIE5TVG9vbFRpcFBhbmVs
IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TVG9v
bFRpcFBhbmVsIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKworLSAodm9pZClzZXRBY2NlcHRz
TW91c2VNb3ZlZEV2ZW50czooQk9PTClmbGFnCit7CisgICAgLy8gRG8gbm90aGluZywgcHJldmVu
dGluZyB0aGUgdG9vbCB0aXAgcGFuZWwgZnJvbSB0cnlpbmcgdG8gYWNjZXB0IG1vdXNlLW1vdmVk
IGV2ZW50cy4KK30KKworQGVuZAorCisjZW5kaWYKKworQGludGVyZmFjZSBOU0FycmF5IChXZWJI
VE1MVmlldykKKy0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6KFNF
TClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3Q7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJIVE1MVmlldworCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbTlNBcHAgcmVnaXN0
ZXJTZXJ2aWNlc01lbnVTZW5kVHlwZXM6W1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2Fy
ZFR5cGVzXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZXM6W1tzZWxm
IGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc11dOworICAgIEpTQzo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIFdlYkNvcmVPYmpD
RmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7CisjZW5kaWYKK30KKworLSAoaWQpaW5pdFdpdGhG
cmFtZTooTlNSZWN0KWZyYW1lCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZy
YW1lXTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgW3Nl
bGYgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVOb25lXTsKKyAgICAKKyAgICAvLyBN
YWtlIGFsbCBkcmF3aW5nIGdvIHRocm91Z2ggdXMgaW5zdGVhZCBvZiBzdWJ2aWV3cy4KKyAgICBb
c2VsZiBfc2V0RHJhd3NPd25EZXNjZW5kYW50czpZRVNdOworICAgIAorICAgIF9wcml2YXRlID0g
W1tXZWJIVE1MVmlld1ByaXZhdGUgYWxsb2NdIGluaXRdOworCisgICAgX3ByaXZhdGUtPnBsdWdp
bkNvbnRyb2xsZXIgPSBbW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRG9jdW1l
bnRWaWV3OnNlbGZdOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQo
W1dlYkhUTUxWaWV3IGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdl
IGNhbid0IGFzc2VydCB0aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGJlY2F1c2UK
KyAgICAvLyB0aGlzIHZpZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldywgZXZl
biB0aG91Z2gKKyAgICAvLyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNsb3NlIGlmIG5l
ZWRlZC4KKyAgICBbc2VsZiBjbG9zZV07CisgICAgW19wcml2YXRlIHJlbGVhc2VdOworICAgIF9w
cml2YXRlID0gbmlsOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6
ZQoreworICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOworICAgIC8vIFdlIGNhbid0IGFzc2VydCB0
aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGJlY2F1c2UKKyAgICAvLyB0aGlzIHZp
ZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldywgZXZlbiB0aG91Z2gKKyAgICAv
LyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNsb3NlIGlmIG5lZWRlZC4KKyAgICBbc2Vs
ZiBjbG9zZV07CisgICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworLy8gUmV0dXJucyBZRVMgaWYg
dGhlIGRlbGVnYXRlIHJldHVybnMgWUVTIChzbyB3ZSBzaG91bGQgZG8gbm8gbW9yZSB3b3JrKS4K
Ky0gKEJPT0wpY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOihTRUwpc2Vs
ZWN0b3IKK3sKKyAgICBCT09MIGNhbGxlckFscmVhZHlDYWxsZWREZWxlZ2F0ZSA9IF9wcml2YXRl
LT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPT0gc2VsZWN0b3I7CisgICAgX3ByaXZh
dGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IDA7CisgICAgaWYgKGNhbGxlckFs
cmVhZHlDYWxsZWREZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIFdlYlZpZXcgKndl
YlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0Rl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxl
Y3Rvcl07Cit9CisKK3N0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2Vs
ZWN0b3IpCit7CisgICAgLy8gQ2hhbmdlIGEgZmV3IGNvbW1hbmQgbmFtZXMgaW50byBvbmVzIHN1
cHBvcnRlZCBieSBXZWJDb3JlOjpFZGl0b3IuCisgICAgLy8gSWYgdGhpcyBsaXN0IGdldHMgdG9v
IGxvbmcgd2UgbWlnaHQgZGVjaWRlIHdlIG5lZWQgdG8gdXNlIGEgaGFzaCB0YWJsZS4KKyAgICBp
ZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcjopIHx8IHNl
bGVjdG9yID09IEBzZWxlY3RvcihpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcjopKQor
ICAgICAgICByZXR1cm4gIkluc2VydE5ld2xpbmUiOworICAgIGlmIChzZWxlY3RvciA9PSBAc2Vs
ZWN0b3IoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjopKQorICAgICAgICByZXR1cm4gIklu
c2VydFRhYiI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihwYWdlRG93bjopKQorICAg
ICAgICByZXR1cm4gIk1vdmVQYWdlRG93biI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rv
cihwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbjopKQorICAgICAgICByZXR1cm4gIk1vdmVQYWdl
RG93bkFuZE1vZGlmeVNlbGVjdGlvbiI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rvcihw
YWdlVXA6KSkKKyAgICAgICAgcmV0dXJuICJNb3ZlUGFnZVVwIjsKKyAgICBpZiAoc2VsZWN0b3Ig
PT0gQHNlbGVjdG9yKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjopKQorICAgICAgICByZXR1cm4g
Ik1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iOworCisgICAgLy8gUmVtb3ZlIHRoZSB0cmFp
bGluZyBjb2xvbi4KKyAgICBjb25zdCBjaGFyKiBzZWxlY3Rvck5hbWUgPSBzZWxfZ2V0TmFtZShz
ZWxlY3Rvcik7CisgICAgc2l6ZV90IHNlbGVjdG9yTmFtZUxlbmd0aCA9IHN0cmxlbihzZWxlY3Rv
ck5hbWUpOworICAgIGlmIChzZWxlY3Rvck5hbWVMZW5ndGggPCAyIHx8IHNlbGVjdG9yTmFtZVtz
ZWxlY3Rvck5hbWVMZW5ndGggLSAxXSAhPSAnOicpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gU3RyaW5nKHNlbGVjdG9yTmFtZSwgc2VsZWN0b3JOYW1lTGVuZ3RoIC0gMSk7
Cit9CisKKy0gKEVkaXRvcjo6Q29tbWFuZCljb3JlQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxl
Y3RvcgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gRWRpdG9yOjpDb21tYW5kKCk7CisgICAg
cmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWVGb3JTZWxlY3Rv
cihzZWxlY3RvcikpOworfQorCistIChFZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1hbmRCeU5hbWU6
KGNvbnN0IGNoYXIqKW5hbWUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEVkaXRvcjo6Q29t
bWFuZCgpOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWUpOwor
fQorCistICh2b2lkKWV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3Rvcgor
eworICAgIGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6
c2VsZWN0b3JdKQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVj
dG9yOnNlbGVjdG9yXS5leGVjdXRlKCk7Cit9CisKKy0gKHZvaWQpZXhlY3V0ZUNvcmVDb21tYW5k
QnlOYW1lOihjb25zdCBjaGFyKiluYW1lCit7CisgICAgW3NlbGYgY29yZUNvbW1hbmRCeU5hbWU6
bmFtZV0uZXhlY3V0ZSgpOworfQorCisvLyBUaGVzZSBjb21tYW5kcyBhcmUgZm9yd2FyZGVkIHRv
IHRoZSBFZGl0b3Igb2JqZWN0IGluIFdlYkNvcmUuCisvLyBJZGVhbGx5IHdlJ2QgZG8gdGhpcyBm
b3IgYWxsIGVkaXRpbmcgY29tbWFuZHM7IG1vcmUgb2YgdGhlIGNvZGUKKy8vIHNob3VsZCBiZSBt
b3ZlZCBmcm9tIGhlcmUgdG8gdGhlcmUsIGFuZCBtb3JlIGNvbW1hbmRzIHNob3VsZCBiZQorLy8g
YWRkZWQgdG8gdGhpcyBsaXN0LgorCisvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIHNldCB0aGlu
Z3MgdXAgc28gdGhhdCBhbGwgdGhlc2Ugc2hhcmUgYSBzaW5nbGUgbWV0aG9kIGltcGxlbWVudGF0
aW9uIGZ1bmN0aW9uLgorLy8gVGhlIGZ1bmN0aW9ucyBhcmUgaWRlbnRpY2FsLgorCisjZGVmaW5l
IFdFQkNPUkVfQ09NTUFORChjb21tYW5kKSAtICh2b2lkKWNvbW1hbmQ6KGlkKXNlbmRlciB7IFtz
ZWxmIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0b3I6X2NtZF07IH0KKworV0VCQ09SRV9DT01N
QU5EKGFsaWduQ2VudGVyKQorV0VCQ09SRV9DT01NQU5EKGFsaWduSnVzdGlmaWVkKQorV0VCQ09S
RV9DT01NQU5EKGFsaWduTGVmdCkKK1dFQkNPUkVfQ09NTUFORChhbGlnblJpZ2h0KQorV0VCQ09S
RV9DT01NQU5EKGNvcHkpCitXRUJDT1JFX0NPTU1BTkQoY3V0KQorV0VCQ09SRV9DT01NQU5EKGRl
bGV0ZSkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVCYWNrd2FyZCkKK1dFQkNPUkVfQ09NTUFORChk
ZWxldGVCYWNrd2FyZEJ5RGVjb21wb3NpbmdQcmV2aW91c0NoYXJhY3RlcikKK1dFQkNPUkVfQ09N
TUFORChkZWxldGVGb3J3YXJkKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVnaW5uaW5nT2ZM
aW5lKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpCitXRUJD
T1JFX0NPTU1BTkQoZGVsZXRlVG9FbmRPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9F
bmRPZlBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb01hcmspCitXRUJDT1JFX0NP
TU1BTkQoZGVsZXRlV29yZEJhY2t3YXJkKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVdvcmRGb3J3
YXJkKQorV0VCQ09SRV9DT01NQU5EKGlnbm9yZVNwZWxsaW5nKQorV0VCQ09SRV9DT01NQU5EKGlu
ZGVudCkKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRCYWNrdGFiKQorV0VCQ09SRV9DT01NQU5EKGlu
c2VydExpbmVCcmVhaykKK1dFQkNPUkVfQ09NTUFORChpbnNlcnROZXdsaW5lKQorV0VCQ09SRV9D
T01NQU5EKGluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yKQorV0VCQ09SRV9DT01NQU5E
KGluc2VydFBhcmFncmFwaFNlcGFyYXRvcikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRUYWIpCitX
RUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcikKK1dFQkNPUkVfQ09N
TUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCkKK1dFQkNPUkVfQ09NTUFO
RChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQorV0VCQ09SRV9DT01NQU5EKG1ha2VU
ZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVCYWNr
d2FyZCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCitX
RUJDT1JFX0NPTU1BTkQobW92ZURvd24pCitXRUJDT1JFX0NPTU1BTkQobW92ZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZUZvcndhcmQpCitXRUJDT1JFX0NPTU1B
TkQobW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZUxl
ZnQpCitXRUJDT1JFX0NPTU1BTkQobW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JF
X0NPTU1BTkQobW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09S
RV9DT01NQU5EKG1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09S
RV9DT01NQU5EKG1vdmVSaWdodCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlUmlnaHRBbmRNb2RpZnlT
ZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCkKK1dF
QkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9u
KQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGluZSkKK1dFQkNPUkVfQ09NTUFO
RChtb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1B
TkQobW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVn
aW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92
ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdP
ZlNlbnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9m
RG9jdW1lbnQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNl
bGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmUpCitXRUJDT1JFX0NPTU1B
TkQobW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0VuZE9mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mUGFyYWdyYXBo
QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mU2VudGVuY2Up
CitXRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbikK
K1dFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0xlZnRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92
ZVRvUmlnaHRFbmRPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvUmlnaHRFbmRPZkxpbmVB
bmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVVwKQorV0VCQ09SRV9DT01N
QU5EKG1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEJh
Y2t3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rp
b24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29y
ZExlZnQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQor
V0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRS
aWdodEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChvdXRkZW50KQorV0VCQ09S
RV9DT01NQU5EKHBhZ2VEb3duKQorV0VCQ09SRV9DT01NQU5EKHBhZ2VEb3duQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKHBhZ2VVcCkKK1dFQkNPUkVfQ09NTUFORChwYWdlVXBB
bmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0QWxsKQorV0VCQ09SRV9D
T01NQU5EKHNlbGVjdExpbmUpCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0UGFyYWdyYXBoKQorV0VC
Q09SRV9DT01NQU5EKHNlbGVjdFNlbnRlbmNlKQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdFRvTWFy
aykKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RXb3JkKQorV0VCQ09SRV9DT01NQU5EKHNldE1hcmsp
CitXRUJDT1JFX0NPTU1BTkQoc3Vic2NyaXB0KQorV0VCQ09SRV9DT01NQU5EKHN1cGVyc2NyaXB0
KQorV0VCQ09SRV9DT01NQU5EKHN3YXBXaXRoTWFyaykKK1dFQkNPUkVfQ09NTUFORCh0cmFuc3Bv
c2UpCitXRUJDT1JFX0NPTU1BTkQodW5kZXJsaW5lKQorV0VCQ09SRV9DT01NQU5EKHVuc2NyaXB0
KQorV0VCQ09SRV9DT01NQU5EKHlhbmspCitXRUJDT1JFX0NPTU1BTkQoeWFua0FuZFNlbGVjdCkK
KworI3VuZGVmIFdFQkNPUkVfQ09NTUFORAorCisjZGVmaW5lIENPTU1BTkRfUFJPTE9HVUUgaWYg
KFtzZWxmIGNhbGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDpfY21kXSkgcmV0
dXJuOworCistIChJQkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlkKXNlbmRl
cgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICghW3NlbGYgX2hhc1NlbGVjdGlv
bl0pIHsKKyAgICAgICAgTlNCZWVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBb
TlNQYXN0ZWJvYXJkIF93ZWJfc2V0RmluZFBhc3RlYm9hcmRTdHJpbmc6W3NlbGYgc2VsZWN0ZWRT
dHJpbmddIHdpdGhPd25lcjpzZWxmXTsKK30KKworLSAoQk9PTCl3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCB0eXBlczooTlNBcnJheSAqKXR5cGVz
Cit7CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOltzZWxmIF90b3BI
VE1MVmlld11dOworICAgIFtzZWxmIHdyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0
eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAo
Qk9PTClyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9h
cmQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBp
ZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIGlmIChjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgICAgICBbc2VsZiBfcGFz
dGVXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OllFU107CisgICAgZWxz
ZQorICAgICAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9h
cmRdOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKGlkKXZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5
cGU6KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNTdHJpbmcgKilyZXR1cm5UeXBl
Cit7CisgICAgQk9PTCBpc1NlbmRUeXBlT0sgPSAhc2VuZFR5cGUgfHwgKFtbc2VsZiBwYXN0ZWJv
YXJkVHlwZXNGb3JTZWxlY3Rpb25dIGNvbnRhaW5zT2JqZWN0OnNlbmRUeXBlXSAmJiBbc2VsZiBf
aGFzU2VsZWN0aW9uXSk7CisgICAgQk9PTCBpc1JldHVyblR5cGVPSyA9ICFyZXR1cm5UeXBlIHx8
IChbW1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc10gY29udGFpbnNPYmpl
Y3Q6cmV0dXJuVHlwZV0gJiYgW3NlbGYgX2lzRWRpdGFibGVdKTsKKyAgICBpZiAoaXNTZW5kVHlw
ZU9LICYmIGlzUmV0dXJuVHlwZU9LKQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICByZXR1cm4g
W1tzZWxmIG5leHRSZXNwb25kZXJdIHZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6c2VuZFR5cGUg
cmV0dXJuVHlwZTpyZXR1cm5UeXBlXTsKK30KKworLy8ganVtcFRvU2VsZWN0aW9uIGlzIHRoZSBv
bGQgbmFtZSBmb3Igd2hhdCBBcHBLaXQgbm93IGNhbGxzIGNlbnRlclNlbGVjdGlvbkluVmlzaWJs
ZUFyZWEuIFNhZmFyaQorLy8gd2FzIHVzaW5nIHRoZSBvbGQganVtcFRvU2VsZWN0aW9uIHNlbGVj
dG9yIGluIGl0cyBtZW51LiBOZXdlciB2ZXJzaW9ucyBvZiBTYWZhcmkgd2lsbCB1c2UgdGhlCisv
LyBzZWxlY3RvciBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBXZSdsbCBsZWF2ZSB0aGUg
b2xkIHNlbGVjdG9yIGluIHBsYWNlIGZvciB0d28gcmVhc29uczoKKy8vICgxKSBDb21wYXRpYmls
aXR5IGJldHdlZW4gb2xkZXIgU2FmYXJpIGFuZCBuZXdlciBXZWJLaXQ7ICgyKSBvdGhlciBXZWJL
aXQtYmFzZWQgYXBwbGljYXRpb25zCisvLyBtaWdodCBiZSB1c2luZyB0aGUgc2VsZWN0b3IsIGFu
ZCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZW0uCistICh2b2lkKWp1bXBUb1NlbGVjdGlvbjoo
aWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPnJldmVhbFNl
bGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKK30KKworLSAoTlND
ZWxsU3RhdGVWYWx1ZSlzZWxlY3Rpb25IYXNTdHlsZTooQ1NTU3R5bGVEZWNsYXJhdGlvbiopc3R5
bGUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBp
ZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5TT2ZmU3RhdGU7CisgICAgcmV0dXJuIGtp
dChjb3JlRnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZSkpOworfQorCist
IChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1Zh
bGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCit7CisgICAgU0VMIGFjdGlvbiA9IFtpdGVt
IGFjdGlvbl07CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgaWYgKERv
Y3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoZG9jLT5pc1Bs
dWdpbkRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIGlmIChkb2Mt
PmlzSW1hZ2VEb2N1bWVudCgpKSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3Rvcihjb3B5OikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lLT5sb2Fk
ZXIoKS0+aXNDb21wbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlU3BlbGxpbmc6KQorICAg
ICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfY2hhbmdlU3BlbGxpbmdGcm9tTWVudTop
CisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoZWNrU3BlbGxpbmc6KQorICAg
ICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihjb21wbGV0ZTopCisgICAgICAgICAgICB8
fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlRm9udDopKQorICAgICAgICByZXR1cm4gW3NlbGYg
X2NhbkVkaXRdOworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc2hvd0d1ZXNzUGFuZWw6
KSkgeworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgICAgICAvLyBNYXRjaCBPUyBYIEFw
cEtpdCBiZWhhdmlvciBmb3IgcG9zdC1UaWdlci4gRG9uJ3QgY2hhbmdlIFRpZ2VyIGJlaGF2aW9y
LgorICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAg
ICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsK
KyAgICAgICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVk
U3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOworICAgICAgICAgICAgW21l
bnVJdGVtIHNldFRpdGxlOnBhbmVsU2hvd2luZworICAgICAgICAgICAgICAgID8gVUlfU1RSSU5H
KCJIaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIiwgIm1lbnUgaXRlbSB0aXRsZSIpCisgICAgICAg
ICAgICAgICAgOiBVSV9TVFJJTkcoIlNob3cgU3BlbGxpbmcgYW5kIEdyYW1tYXIiLCAibWVudSBp
dGVtIHRpdGxlIildOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9j
YW5FZGl0XTsKKyAgICB9CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdl
QmFzZVdyaXRpbmdEaXJlY3Rpb246KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rv
cihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDopCisgICAgICAgICAgICB8fCBh
Y3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0Oikp
IHsKKyAgICAgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb247CisKKyAgICAg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb246KSkg
eworICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PE5TV3JpdGluZ0Rp
cmVjdGlvbj4oW2l0ZW0gdGFnXSk7CisgICAgICAgICAgICBpZiAod3JpdGluZ0RpcmVjdGlvbiA9
PSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQorICAgICAgICAgICAgICAgIHJldHVybiBOTzsK
KyAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0OikpCisgICAgICAgICAgICB3cml0aW5nRGlyZWN0aW9uID0gTlNX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdy
aXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKworICAgICAg
ICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYg
KFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAg
ICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoImRpcmVjdGlvbiIsIHdyaXRpbmdEaXJlY3Rpb24g
PT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyAiTFRSIiA6ICJSVEwiLCBlYyk7Cisg
ICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25I
YXNTdHlsZShzdHlsZS5nZXQoKSldOworICAgICAgICB9CisgICAgICAgIHJldHVybiBbc2VsZiBf
Y2FuRWRpdF07CisgICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VX
cml0aW5nRGlyZWN0aW9uTmF0dXJhbDopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVt
ID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xh
c3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpO
U09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKHRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0aW9uOikpIHsKKyAgICAgICAgTlNN
ZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVu
dUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7CisgICAgICAgICAgICBS
ZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCAiUlRMIiwgZWMpOworICAgICAgICAg
ICAgLy8gVGFrZSBjb250cm9sIG9mIHRoZSB0aXRsZSBvZiB0aGUgbWVudSBpdGVtIGluc3RlYWQg
b2YganVzdCBjaGVja2luZy91bmNoZWNraW5nIGl0IGJlY2F1c2UKKyAgICAgICAgICAgIC8vIGEg
Y2hlY2sgd291bGQgYmUgYW1iaWd1b3VzLgorICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxl
OmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpCisgICAgICAg
ICAgICAgICAgPyBVSV9TVFJJTkcoIkxlZnQgdG8gUmlnaHQiLCAiTGVmdCB0byBSaWdodCBjb250
ZXh0IG1lbnUgaXRlbSIpCisgICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlJpZ2h0IHRvIExl
ZnQiLCAiUmlnaHQgdG8gTGVmdCBjb250ZXh0IG1lbnUgaXRlbSIpXTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0gCisgICAgCisgICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3IoY2hhbmdlQXR0cmlidXRlczopCisgICAgICAgICAgICB8fCBhY3Rpb24g
PT0gQHNlbGVjdG9yKGNoYW5nZUNvbG9yOikgICAgICAgIAorICAgICAgICAgICAgfHwgYWN0aW9u
ID09IEBzZWxlY3RvcihjaGFuZ2VGb250OikpCisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRp
dFJpY2hseV07CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2FwaXRhbGl6ZVdv
cmQ6KQorICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihsb3dlcmNhc2VXb3Jk
OikKKyAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodXBwZXJjYXNlV29yZDop
KQorICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl0gJiYgW3NlbGYgX2lzRWRpdGFi
bGVdOworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2VudGVyU2VsZWN0aW9uSW5WaXNp
YmxlQXJlYTopCisgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGp1bXBUb1Nl
bGVjdGlvbjopCisgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNvcHlGb250
OikpCisgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXSB8fCAoW3NlbGYgX2lzRWRp
dGFibGVdICYmIFtzZWxmIF9oYXNJbnNlcnRpb25Qb2ludF0pOworICAgIAorICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKGNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOikpCisgICAgICAg
IHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzRWRpdGFibGVdICYmIFtzZWxmIF9jYW5FZGl0Umlj
aGx5XTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfaWdub3JlU3BlbGxpbmdG
cm9tTWVudTopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKF9sZWFyblNwZWxs
aW5nRnJvbU1lbnU6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih0YWtlRmlu
ZFN0cmluZ0Zyb21TZWxlY3Rpb246KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rp
b25dOworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlOikgfHwgYWN0aW9u
ID09IEBzZWxlY3RvcihwYXN0ZUFzUGxhaW5UZXh0OikpCisgICAgICAgIHJldHVybiBmcmFtZSAm
JiAoZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5j
YW5QYXN0ZSgpKTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZUFzUmlj
aFRleHQ6KSkKKyAgICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCktPmNhbkRI
VE1MUGFzdGUoKQorICAgICAgICAgICAgfHwgKGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSAm
JiBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpKTsKKyAgICAK
KyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBhbmVsQWN0aW9uOikpCisg
ICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfbG9v
a1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxl
Y3Rpb25dOworICAgIAorI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKHRvZ2dsZUdyYW1tYXJDaGVja2luZzopKSB7CisgICAgICAgIC8vIEZJWE1F
IDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVj
a2luZyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCisgICAgICAgIC8vIHRoZSBzZWxlY3Rv
ciBoZXJlIGJlY2F1c2Ugd2UgaW1wbGVtZW50IGl0IGhlcmUsIGFuZCB3ZSBtdXN0IGltcGxlbWVu
dCBpdCBoZXJlIGJlY2F1c2UgdGhlIEFwcEtpdCAKKyAgICAgICAgLy8gY29kZSBjaGVja3MgdGhl
IGZpcnN0IHJlc3BvbmRlci4KKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51
SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51
SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAg
cmV0dXJuIFlFUzsKKyAgICB9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKG9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6KSkgeworICAgICAgICBOU01l
bnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51
SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIEJP
T0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBz
dWJzdGl0dXRpb25zUGFuZWxdIGlzVmlzaWJsZV07CisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0
VGl0bGU6cGFuZWxTaG93aW5nCisgICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkhpZGUgU3Vi
c3RpdHV0aW9ucyIsICJtZW51IGl0ZW0gdGl0bGUiKQorICAgICAgICAgICAgICAgIDogVUlfU1RS
SU5HKCJTaG93IFN1YnN0aXR1dGlvbnMiLCAibWVudSBpdGVtIHRpdGxlIildOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIC8vIEZJWE1FIDQ3
OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgbG9naWMsIGJ1dCB3ZSBt
dXN0IHZhbGlkYXRlIAorICAgIC8vIHRoZSBzZWxlY3RvciBoZXJlIGJlY2F1c2Ugd2UgaW1wbGVt
ZW50IGl0IGhlcmUsIGFuZCB3ZSBtdXN0IGltcGxlbWVudCBpdCBoZXJlIGJlY2F1c2UgdGhlIEFw
cEtpdCAKKyAgICAvLyBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOikpIHsKKyAgICAgICAg
TlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChb
bWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAg
W21lbnVJdGVtIHNldFN0YXRlOltzZWxmIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0gPyBOU09u
U3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAg
ICB9CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljUXVvdGVTdWJz
dGl0dXRpb246KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVt
ICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVt
IGNsYXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0
aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Cisg
ICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KSkgeworICAgICAgICBOU01l
bnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51
SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVu
dUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZF0gPyBO
U09uU3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsK
KyAgICB9CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljRGFzaFN1
YnN0aXR1dGlvbjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0
ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0
ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9t
YXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwor
ICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KSkgeworICAgICAgICBO
U01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFtt
ZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBb
bWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVk
XSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVk
aXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb246KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChO
U01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltO
U01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYg
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2Zm
U3RhdGVdOworICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyNlbmRpZgor
ICAgIAorICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNl
bGVjdG9yOmFjdGlvbl07CisgICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkgeworICAgICAg
ICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYg
KFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAg
ICBbbWVudUl0ZW0gc2V0U3RhdGU6a2l0KGNvbW1hbmQuc3RhdGUoKSldOworICAgICAgICByZXR1
cm4gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gWUVTOworfQorCist
IChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRl
cmZhY2VJdGVtPilpdGVtCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1cmluZyB0ZWFy
ZG93biB3aGVuIF93ZWJWaWV3IGlzIG5pbC4gUmV0dXJuIE5PIHdoZW4gdGhpcyBoYXBwZW5zLCBi
ZWNhdXNlIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbgorICAgIC8vIGFzc3VtZXMgdGhl
IFdlYlZJZXcgaXMgbm9uLW5pbC4KKyAgICBpZiAoIVtzZWxmIF93ZWJWaWV3XSkKKyAgICAgICAg
cmV0dXJuIE5POworICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgdmFsaWRhdGVVc2VySW50ZXJmYWNl
SXRlbVdpdGhvdXREZWxlZ2F0ZTppdGVtXTsKKyAgICByZXR1cm4gQ2FsbFVJRGVsZWdhdGVSZXR1
cm5pbmdCb29sZWFuKHJlc3VsdCwgW3NlbGYgX3dlYlZpZXddLCBAc2VsZWN0b3Iod2ViVmlldzp2
YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOmRlZmF1bHRWYWxpZGF0aW9uOiksIGl0ZW0sIHJlc3Vs
dCk7Cit9CisKKy0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCit7CisgICAgLy8gRG9uJ3Qg
YWNjZXB0IGZpcnN0IHJlc3BvbmRlciB3aGVuIHdlIGZpcnN0IGNsaWNrIG9uIHRoaXMgdmlldy4K
KyAgICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIGV2ZW50IGRvd24gdGhyb3VnaCBXZWJDb3JlIGZp
cnN0IHRvIGJlIHN1cmUgd2UgZG9uJ3QgaGl0IGEgc3Vidmlldy4KKyAgICAvLyBEbyBhY2NlcHQg
Zmlyc3QgcmVzcG9uZGVyIGF0IGFueSBvdGhlciB0aW1lLCBmb3IgZXhhbXBsZSBmcm9tIGtleWJv
YXJkIGV2ZW50cywKKyAgICAvLyBvciBmcm9tIGNhbGxzIGJhY2sgZnJvbSBXZWJDb3JlIG9uY2Ug
d2UgYmVnaW4gbW91c2UtZG93biBldmVudCBoYW5kbGluZy4KKyAgICBOU0V2ZW50ICpldmVudCA9
IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgIGlmIChbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91
c2VEb3duCisgICAgICAgICAgICAmJiAhX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQK
KyAgICAgICAgICAgICYmIE5TUG9pbnRJblJlY3QoW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddLCBb
c2VsZiBjb252ZXJ0UmVjdDpbc2VsZiB2aXNpYmxlUmVjdF0gdG9WaWV3Om5pbF0pKSB7CisgICAg
ICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTCltYWlu
dGFpbnNJbmFjdGl2ZVNlbGVjdGlvbgoreworICAgIC8vIFRoaXMgbWV0aG9kIGhlbHBzIHRvIGRl
dGVybWluZSB3aGV0aGVyIHRoZSBXZWJIVE1MVmlldyBzaG91bGQgbWFpbnRhaW4KKyAgICAvLyBh
biBpbmFjdGl2ZSBzZWxlY3Rpb24gd2hlbiBpdCdzIG5vdCBmaXJzdCByZXNwb25kZXIuCisgICAg
Ly8gVHJhZGl0aW9uYWxseSwgdGhlc2Ugdmlld3MgaGF2ZSBub3QgbWFpbnRhaW5lZCBzdWNoIHNl
bGVjdGlvbnMsCisgICAgLy8gY2xlYXJpbmcgdGhlbSB3aGVuIHRoZSB2aWV3IHdhcyBub3QgZmly
c3QgcmVzcG9uZGVyLiBIb3dldmVyLAorICAgIC8vIHRvIGZpeCBidWdzIGxpa2UgdGhpcyBvbmU6
CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM2NzIwODg+OiAiRWRpdGFibGUgV2ViVmlld3Mgc2hv
dWxkIG1haW50YWluIGEgc2VsZWN0aW9uIGV2ZW4gCisgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2hlbiB0aGV5J3JlIG5vdCBmaXJzdFJlc3BvbmRlciIKKyAgICAvLyBpdCB3YXMg
ZGVjaWRlZCB0byBhZGQgYSBzd2l0Y2ggdG8gYWN0IG1vcmUgbGlrZSBhbiBOU1RleHRWaWV3Lgor
CisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb25dKQor
ICAgICAgICByZXR1cm4gWUVTOworCisgICAgLy8gUHJlZGljdCB0aGUgY2FzZSB3aGVyZSB3ZSBh
cmUgbG9zaW5nIGZpcnN0IHJlc3BvbmRlciBzdGF0dXMgb25seSB0bworICAgIC8vIGdhaW4gaXQg
YmFjayBhZ2Fpbi4gV2FudCB0byBrZWVwIHRoZSBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlLgorICAg
IGlkIG5leHRSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBfbmV3Rmlyc3RSZXNwb25kZXJBZnRl
clJlc2lnbmluZ107CisgICAgaWYgKFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TU2Ny
b2xsVmlldyBjbGFzc11dKSB7CisgICAgICAgIGlkIGNvbnRlbnRWaWV3ID0gW25leHRSZXNwb25k
ZXIgY29udGVudFZpZXddOworICAgICAgICBpZiAoY29udGVudFZpZXcpCisgICAgICAgICAgICBu
ZXh0UmVzcG9uZGVyID0gY29udGVudFZpZXc7CisgICAgfQorICAgIGlmIChbbmV4dFJlc3BvbmRl
ciBpc0tpbmRPZkNsYXNzOltOU0NsaXBWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgaWQgZG9jdW1l
bnRWaWV3ID0gW25leHRSZXNwb25kZXIgZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgaWYgKGRvY3Vt
ZW50VmlldykKKyAgICAgICAgICAgIG5leHRSZXNwb25kZXIgPSBkb2N1bWVudFZpZXc7CisgICAg
fQorICAgIGlmIChuZXh0UmVzcG9uZGVyID09IHNlbGYpCisgICAgICAgIHJldHVybiBZRVM7CisK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBib29sIHNl
bGVjdGlvbklzRWRpdGFibGUgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICBib29sIG5leHRSZXNwb25kZXJJc0luV2ViVmlldyA9
IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dCisgICAgICAgICYm
IFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5GcmFt
ZV0gZnJhbWVWaWV3XV07CisKKyAgICByZXR1cm4gc2VsZWN0aW9uSXNFZGl0YWJsZSAmJiBuZXh0
UmVzcG9uZGVySXNJbldlYlZpZXc7Cit9CisKKy0gKHZvaWQpYWRkTW91c2VNb3ZlZE9ic2VydmVy
Cit7CisgICAgaWYgKCFfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB8fCAhW3NlbGYgX2lzVG9wSFRNTFZp
ZXddIHx8IF9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9ucykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gVW5sZXNzIHRoZSBEYXNoYm9hcmQgYXNrcyB1cyB0byBkbyB0
aGlzIGZvciBhbGwgd2luZG93cywga2VlcCBhbiBvYnNlcnZlciBnb2luZyBvbmx5IGZvciB0aGUg
a2V5IHdpbmRvdy4KKyAgICBpZiAoIShbW3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10gCisjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgICAgICAgICAgfHwgW1tzZWxmIF93ZWJWaWV3
XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNTZW5kTW91c2VF
dmVudHNUb0FsbFdpbmRvd3NdCisjZW5kaWYKKyAgICAgICAgKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihtb3VzZU1vdmVkTm90aWZpY2F0aW9uOikKKyAgICAgICAg
bmFtZTpXS01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6bmlsXTsKKyAgICBbc2VsZiBf
ZnJhbWVPckJvdW5kc0NoYW5nZWRdOworICAgIF9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVk
Tm90aWZpY2F0aW9ucyA9IHRydWU7Cit9CisKKy0gKHZvaWQpcmVtb3ZlTW91c2VNb3ZlZE9ic2Vy
dmVyCit7CisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIC8vIERvbid0IHJlbW92
ZSB0aGUgb2JzZXJ2ZXIgaWYgd2UncmUgcnVubmluZyB0aGUgRGFzaGJvYXJkLgorICAgIGlmIChb
W3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvckFs
d2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10pCisgICAgICAgIHJldHVybjsKKyNlbmRp
ZgorCisgICAgW1tzZWxmIF93ZWJWaWV3XSBfbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQ6bmlsIG1v
ZGlmaWVyRmxhZ3M6MF07CisgICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29u
ZGl0aW9uYWxseV07Cit9CisKKy0gKHZvaWQpYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzCit7CisgICAg
aWYgKF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBOU1ZpZXcgKnN1cGVydmlldyA9IFtzZWxmIHN1cGVydmlld107CisgICAg
aWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdpbmRvd10pCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRk
T2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkKSBu
YW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOwor
ICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0
b3IoX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkKSBuYW1lOk5TVmlld0JvdW5kc0RpZENoYW5nZU5vdGlm
aWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKKyAgICAKKyAgICAvLyBJbiBhZGRpdGlvbiB0byBy
ZWdpc3RlcmluZyBmb3IgZnJhbWUvYm91bmRzIGNoYW5nZSBub3RpZmljYXRpb25zLCBjYWxsIC1f
ZnJhbWVPckJvdW5kc0NoYW5nZWQuCisgICAgLy8gSXQgd2lsbCBjaGVjayB0aGUgY3VycmVudCBz
Y3JvbGwgYWdhaW5zdCB0aGUgcHJldmlvdXMgbGF5b3V0J3Mgc2Nyb2xsLiAgV2UgbmVlZCB0bwor
ICAgIC8vIGRvIHRoaXMgaGVyZSB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGUgV2ViVmlldyBp
cyBsYWlkIG91dCBhdCBvbmUgc2l6ZSwgcmVtb3ZlZCBmcm9tIGl0cworICAgIC8vIHdpbmRvdywg
cmVzaXplZCwgYW5kIGluc2VydGVkIGludG8gYW5vdGhlciB3aW5kb3cuICBPdXIgZnJhbWUvYm91
bmRzIGNoYW5nZWQgbm90aWZpY2F0aW9ucworICAgIC8vIHdpbGwgbm90IGJlIHNlbnQgaW4gdGhh
dCBzaXR1YXRpb24sIHNpbmNlIHdlIG9ubHkgd2F0Y2ggZm9yIGNoYW5nZXMgd2hpbGUgaW4gdGhl
IHZpZXcgaGllcmFyY2h5LgorICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07CisgICAg
CisgICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMgPSB0cnVlOwor
fQorCistICh2b2lkKWFkZFdpbmRvd09ic2VydmVycworeworICAgIGlmIChfcHJpdmF0ZS0+b2Jz
ZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIGlmICghd2luZG93KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNl
bnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKKyAgICBbbm90aWZp
Y2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0Rp
ZEJlY29tZUtleTopIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2JqZWN0
Om5pbF07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3Rvcih3aW5kb3dEaWRSZXNpZ25LZXk6KSBuYW1lOk5TV2luZG93RGlkUmVzaWduS2V5
Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbENsb3NlOikgbmFtZTpOU1dp
bmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKKyAgICBbbm90aWZpY2F0
aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd1dpbGxP
cmRlck9uU2NyZWVuOikgbmFtZTpXS1dpbmRvd1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0aW9u
KCkgb2JqZWN0OndpbmRvd107CisgICAgCisgICAgX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05v
dGlmaWNhdGlvbnMgPSB0cnVlOworfQorCistICh2b2lkKXZpZXdXaWxsTW92ZVRvU3VwZXJ2aWV3
OihOU1ZpZXcgKiluZXdTdXBlcnZpZXcKK3sKKyAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2Jz
ZXJ2ZXJzXTsKK30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3Cit7CisgICAgaWYg
KFtzZWxmIHN1cGVydmlld10gIT0gbmlsKQorICAgICAgICBbc2VsZiBhZGRTdXBlcnZpZXdPYnNl
cnZlcnNdOworfQorCitzdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGlt
ZXJDYWxsYmFjayhDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCAqaW5mbykKK3sKKyAgICBX
ZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKWluZm87CisgICAgW3ZpZXcgX3VwZGF0
ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5k
b3c6KE5TV2luZG93ICopd2luZG93Cit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2Ug
YXJlbid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBwZW5zCisgICAgLy8gd2hlbiBkZWNvZGluZyBh
IFdlYlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBkZWNvZGVkIHRoZWlyIHN1YnZpZXdzCisgICAg
Ly8gYXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2RlcjogYW5kIHNvIHdvbid0IGJlIG5vcm1hbGx5
CisgICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1YiB2aWV3cyBhcmUgZGlzY2FyZGVkIGJ5IFdl
YlZpZXcuCisgICAgaWYgKCFfcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklY
TUU6IFNvbWUgb2YgdGhlc2UgY2FsbHMgbWF5IG5vdCB3b3JrIGJlY2F1c2UgdGhpcyB2aWV3IG1h
eSBiZSBhbHJlYWR5IHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldy4KKyAgICBbc2VsZiBfcmVt
b3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKKyAgICBbc2VsZiBfcmVtb3Zl
V2luZG93T2JzZXJ2ZXJzXTsKKyAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsK
KyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOworICAgIFtzZWxmIF9jYW5j
ZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07CisgICAgCisgICAgW1tzZWxmIF9w
bHVnaW5Db250cm9sbGVyXSBzdG9wQWxsUGx1Z2luc107Cit9CisKKy0gKHZvaWQpdmlld0RpZE1v
dmVUb1dpbmRvdworeworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGFyZW4ndCBpbml0
aWFsaXplZC4gIFRoaXMgaGFwcGVucworICAgIC8vIHdoZW4gZGVjb2RpbmcgYSBXZWJWaWV3LiAg
V2hlbiBXZWJWaWV3cyBhcmUgZGVjb2RlZCB0aGVpciBzdWJ2aWV3cworICAgIC8vIGFyZSBjcmVh
dGVkIGJ5IGluaXRXaXRoQ29kZXI6IGFuZCBzbyB3b24ndCBiZSBub3JtYWxseQorICAgIC8vIGlu
aXRpYWxpemVkLiAgVGhlIHN0dWIgdmlld3MgYXJlIGRpc2NhcmRlZCBieSBXZWJWaWV3LgorICAg
IGlmICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CisgICAgaWYgKFtzZWxmIHdp
bmRvd10pIHsKKyAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9IFtbc2VsZiBz
dXBlcnZpZXddIGJvdW5kc10ub3JpZ2luOworICAgICAgICBbc2VsZiBhZGRXaW5kb3dPYnNlcnZl
cnNdOworICAgICAgICBbc2VsZiBhZGRTdXBlcnZpZXdPYnNlcnZlcnNdOworICAgICAgICBbc2Vs
ZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOworCisgICAgICAgIC8vIFNjaGVkdWxlIHRoaXMgdXBk
YXRlLCByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGNhbGwgcmlnaHQgbm93LgorICAgICAgICAvLyBU
aGUgcmVhc29uIGlzIHRoYXQgcGxhY2luZyB0aGUgY2FyZXQgaW4gdGhlIGp1c3QtaW5zdGFsbGVk
IHZpZXcgcmVxdWlyZXMKKyAgICAgICAgLy8gdGhlIEhUTUwvWE1MIGRvY3VtZW50IHRvIGJlIGF2
YWlsYWJsZSBvbiB0aGUgV2ViQ29yZSBzaWRlLCBidXQgaXQgaXMgbm90CisgICAgICAgIC8vIGF0
IHRoZSB0aW1lIHRoaXMgY29kZSBpcyBydW5uaW5nLiBIb3dldmVyLCBpdCB3aWxsIGJlIHRoZXJl
IG9uIHRoZSBuZXh0CisgICAgICAgIC8vIGNyYW5rIG9mIHRoZSBydW4gbG9vcC4gRG9pbmcgdGhp
cyBoZWxwcyB0byBtYWtlIGEgYmxpbmtpbmcgY2FyZXQgYXBwZWFyIAorICAgICAgICAvLyBpbiBh
IG5ldywgZW1wdHkgd2luZG93ICJhdXRvbWF0aWMiLgorICAgICAgICBpZiAoIV9wcml2YXRlLT51
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcikgeworICAgICAgICAgICAgQ0ZSdW5Mb29w
VGltZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAg
ICAgICAgICAgIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lciA9IENG
UnVuTG9vcFRpbWVyQ3JlYXRlKE5VTEwsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpLCAwLCAw
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJDYWxsYmFj
aywgJmNvbnRleHQpOworICAgICAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0
Q3VycmVudCgpLCBfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIsIGtD
RlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtbc2Vs
ZiBfcGx1Z2luQ29udHJvbGxlcl0gc3RhcnRBbGxQbHVnaW5zXTsKKworICAgICAgICBfcHJpdmF0
ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gTlNaZXJvUG9pbnQ7CisgICAgfQorfQorCistICh2b2lk
KXZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0V2luZG93Cit7CisgICAg
W1tzZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjpAc2Vs
ZWN0b3Iodmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93Oikgd2l0aE9iamVjdDpob3N0V2luZG93XTsK
K30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdworeworICAgIFtbc2VsZiBzdWJ2
aWV3c10gX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdE
aWRNb3ZlVG9Ib3N0V2luZG93KSB3aXRoT2JqZWN0Om5pbF07Cit9CisKKworLSAodm9pZClhZGRT
dWJ2aWV3OihOU1ZpZXcgKil2aWV3Cit7CisgICAgW3N1cGVyIGFkZFN1YnZpZXc6dmlld107CisK
KyAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5WaWV3OnZpZXddKQorICAgICAg
ICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGFkZFBsdWdpbjp2aWV3XTsKK30KKworLSAodm9p
ZCl3aWxsUmVtb3ZlU3VidmlldzooTlNWaWV3ICopc3VidmlldworeworICAgIGlmIChbV2ViUGx1
Z2luQ29udHJvbGxlciBpc1BsdWdJblZpZXc6c3Vidmlld10pCisgICAgICAgIFtbc2VsZiBfcGx1
Z2luQ29udHJvbGxlcl0gZGVzdHJveVBsdWdpbjpzdWJ2aWV3XTsKKworICAgIFtzdXBlciB3aWxs
UmVtb3ZlU3VidmlldzpzdWJ2aWV3XTsKK30KKworLSAodm9pZClyZWFwcGx5U3R5bGVzCit7Cisg
ICAgaWYgKCFfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzKQorICAgICAgICByZXR1cm47Cisg
ICAgCisjaWZkZWYgTE9HX1RJTUVTCisgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCk7CisjZW5kaWYKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBjb3JlVmlldyA9IGNvcmVG
cmFtZS0+dmlldygpKQorICAgICAgICAgICAgY29yZVZpZXctPnNldE1lZGlhVHlwZShfcHJpdmF0
ZS0+cHJpbnRpbmcgPyAicHJpbnQiIDogInNjcmVlbiIpOworICAgICAgICBpZiAoRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQt
PnNldFByaW50aW5nKF9wcml2YXRlLT5wcmludGluZyk7CisgICAgICAgIGNvcmVGcmFtZS0+cmVh
cHBseVN0eWxlcygpOworICAgIH0KKyAgICAKKyNpZmRlZiBMT0dfVElNRVMgICAgICAgIAorICAg
IGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Cisg
ICAgTE9HKFRpbWluZywgIiVzIGFwcGx5IHN0eWxlIHNlY29uZHMgPSAlZiIsIFtzZWxmIFVSTF0s
IHRoaXNUaW1lKTsKKyNlbmRpZgorCisgICAgX3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyA9
IE5POworfQorCisvLyBEbyBhIGxheW91dCwgYnV0IHNldCB1cCBhIG5ldyBmaXhlZCB3aWR0aCBm
b3IgdGhlIHB1cnBvc2VzIG9mIGRvaW5nIHByaW50aW5nIGxheW91dC4KKy8vIG1pblBhZ2VXaWR0
aD09MCBpbXBsaWVzIGEgbm9uLXByaW50aW5nIGxheW91dAorLSAodm9pZClsYXlvdXRUb01pbmlt
dW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOihmbG9hdClt
YXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemUKK3sKKyAg
ICBbc2VsZiByZWFwcGx5U3R5bGVzXTsKKyAgICAKKyAgICBpZiAoIVtzZWxmIF9uZWVkc0xheW91
dF0pCisgICAgICAgIHJldHVybjsKKworI2lmZGVmIExPR19USU1FUyAgICAgICAgCisgICAgZG91
YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CisjZW5kaWYKKworICAgIExP
RyhWaWV3LCAiJUAgZG9pbmcgbGF5b3V0Iiwgc2VsZik7CisKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkg
eworICAgICAgICBpZiAobWluUGFnZVdpZHRoID4gMC4wKQorICAgICAgICAgICAgY29yZVZpZXct
PmZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlKG1pblBhZ2VXaWR0aCwgbWF4UGFnZVdpZHRo
LCBhZGp1c3RWaWV3U2l6ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29yZVZpZXct
PmZvcmNlTGF5b3V0KCFhZGp1c3RWaWV3U2l6ZSk7CisgICAgICAgICAgICBpZiAoYWRqdXN0Vmll
d1NpemUpCisgICAgICAgICAgICAgICAgY29yZVZpZXctPmFkanVzdFZpZXdTaXplKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisjaWZkZWYgTE9HX1RJTUVTICAgICAgICAKKyAgICBkb3VibGUg
dGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhU
aW1pbmcsICIlcyBsYXlvdXQgc2Vjb25kcyA9ICVmIiwgW3NlbGYgVVJMXSwgdGhpc1RpbWUpOwor
I2VuZGlmCit9CisKKy0gKHZvaWQpbGF5b3V0Cit7CisgICAgW3NlbGYgbGF5b3V0VG9NaW5pbXVt
UGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdGluZ1ZpZXdTaXplOk5P
XTsKK30KKworLy8gRGVsaXZlciBtb3VzZXVwIGV2ZW50cyB0byB0aGUgRE9NIGZvciBidXR0b24g
Mi4KKy0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVy
ZSdzIGEgY2hhbmNlIHRoYXQgaWYgd2UgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AgdGhlIGV2ZW50
IHdpbGwgYmUgcmVsZWFzZWQuCisgICAgLy8gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNp
bmcgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGxhdGVyIGhlcmUgb3IKKyAg
ICAvLyBpbnNpZGUgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNl
XTsKKworICAgIFtzdXBlciByaWdodE1vdXNlVXA6ZXZlbnRdOworCisgICAgaWYgKEZyYW1lKiBj
b3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5tb3VzZVVwKGV2ZW50KTsKK30KKworLSAoTlNNZW51ICopbWVudUZvckV2ZW50
OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgd2Ug
cnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AgdGhlIGV2ZW50IHdpbGwgYmUgcmVsZWFzZWQuCisgICAg
Ly8gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGxhdGVyIGhlcmUgb3IKKyAgICAvLyBpbnNpZGUgQXBwS2l0IGNvZGUu
CisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFtfcHJpdmF0ZS0+Y29t
cENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKworICAgIFJl
ZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNv
cmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJh
bWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAv
LyBNYXRjaCBiZWhhdmlvciBvZiBvdGhlciBicm93c2VycyBieSBzZW5kaW5nIGEgbW91c2Vkb3du
IGV2ZW50IGZvciByaWdodCBjbGlja3MuCisgICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3du
RXZlbnQgPSBZRVM7CisgICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNsZWFyQ29u
dGV4dE1lbnUoKTsKKyAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZURvd24oZXZl
bnQpOworICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
c2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CisgICAgX3By
aXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBOTzsKKworICAgIGlmICghaGFuZGxlZEV2
ZW50KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gUmUtZ2V0IHBhZ2UsIHNpbmNlIGl0
IG1pZ2h0IGhhdmUgZ29uZSBhd2F5IGR1cmluZyBldmVudCBoYW5kbGluZy4KKyAgICBwYWdlID0g
Y29yZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVy
KCktPmNvbnRleHRNZW51KCk7CisgICAgaWYgKCFjb3JlTWVudSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIE5TQXJyYXkqIG1lbnVJdGVtcyA9IGNvcmVNZW51LT5wbGF0Zm9ybURlc2NyaXB0
aW9uKCk7CisgICAgaWYgKCFtZW51SXRlbXMpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW21lbnVJdGVtcyBjb3VudF07CisgICAgaWYgKCFjb3VudCkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TTWVudSogbWVudSA9IFtbW05TTWVudSBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgIFttZW51IGFkZEl0ZW06W21lbnVJdGVtcyBvYmplY3RBdEluZGV4Omld
XTsKKyAgICByZXR1cm4gbWVudTsKK30KKworLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICop
c3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZs
YWcgd3JhcDooQk9PTCl3cmFwRmxhZworeworICAgIHJldHVybiBbc2VsZiBzZWFyY2hGb3I6c3Ry
aW5nIGRpcmVjdGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3JhcDp3cmFwRmxh
ZyBzdGFydEluU2VsZWN0aW9uOk5PXTsKK30KKworLSAodm9pZCljbGVhckZvY3VzCit7CisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJh
bWUpCisgICAgICAgIHJldHVybjsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUt
PmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKK30KKworLSAoQk9PTClpc09wYXF1ZQor
eworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFja2dyb3VuZF07Cit9CisKKy0g
KHZvaWQpc2V0TmVlZHNEaXNwbGF5OihCT09MKWZsYWcKK3sKKyAgICBMT0coVmlldywgIiVAIHNl
dE5lZWRzRGlzcGxheTolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7CisgICAgW3N1
cGVyIHNldE5lZWRzRGlzcGxheTpmbGFnXTsKK30KKworLSAodm9pZClzZXROZWVkc0xheW91dDog
KEJPT0wpZmxhZworeworICAgIExPRyhWaWV3LCAiJUAgc2V0TmVlZHNMYXlvdXQ6JUAiLCBzZWxm
LCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOworICAgIGlmICghZmxhZykKKyAgICAgICAgcmV0dXJu
OyAvLyBUaGVyZSdzIG5vIHdheSB0byBzYXkgeW91IGRvbid0IG5lZWQgYSBsYXlvdXQuCisgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYgKGZy
YW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKSkKKyAgICAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQorfQorCist
ICh2b2lkKXNldE5lZWRzVG9BcHBseVN0eWxlczogKEJPT0wpZmxhZworeworICAgIExPRyhWaWV3
LCAiJUAgc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiVAIiwgc2VsZiwgZmxhZyA/IEAiWUVTIiA6IEAi
Tk8iKTsKKyAgICBfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzID0gZmxhZzsKK30KKworLSAo
dm9pZClkcmF3U2luZ2xlUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBbTlNHcmFwaGljc0NvbnRl
eHQgc2F2ZUdyYXBoaWNzU3RhdGVdOworICAgIE5TUmVjdENsaXAocmVjdCk7CisgICAgICAgIAor
ICAgIEFTU0VSVChbW3NlbGYgc3VwZXJ2aWV3XSBpc0tpbmRPZkNsYXNzOltXZWJDbGlwVmlldyBj
bGFzc11dKTsKKworICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHNldEFkZGl0
aW9uYWxDbGlwOnJlY3RdOworCisgICAgQHRyeSB7CisgICAgICAgIGlmIChbc2VsZiBfdHJhbnNw
YXJlbnRCYWNrZ3JvdW5kXSkgeworICAgICAgICAgICAgW1tOU0NvbG9yIGNsZWFyQ29sb3JdIHNl
dF07CisgICAgICAgICAgICBOU1JlY3RGaWxsIChyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAg
IFtbc2VsZiBfZnJhbWVdIF9kcmF3UmVjdDpyZWN0IGNvbnRlbnRzT25seTpZRVNdOworCisgICAg
ICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisKKyAgICAgICAgLy8gVGhp
cyBoYWNrIGlzIG5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMjM1NDU+LiBXZSBjYW4gaGl0
IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgZHJhd1JlY3Qgd2lsbCBiZQorICAgICAgICAvLyBjYWxs
ZWQgYWZ0ZXIgdGhlIFdlYlZpZXcgaGFzIGNsb3NlZC4gSWYgdGhlIGNsaWVudCBkaWQgbm90IHBy
b3Blcmx5IGNsb3NlIHRoZSBXZWJWaWV3IGFuZCBzZXQgdGhlIAorICAgICAgICAvLyBVSURlbGVn
YXRlIHRvIG5pbCwgdGhlbiB0aGUgVUlEZWxlZ2F0ZSB3aWxsIGJlIHN0YWxlIGFuZCB0aGlzIGNv
ZGUgd2lsbCBjcmFzaC4gCisgICAgICAgIHN0YXRpYyBCT09MIHZlcnNpb24zT3JMYXRlckNsaWVu
dCA9IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX1FV
SUNLQk9PS1NfUVVJUkspOworICAgICAgICBpZiAodmVyc2lvbjNPckxhdGVyQ2xpZW50KQorICAg
ICAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcg
ZGlkRHJhd1JlY3Q6W3dlYlZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpzZWxmXV07CisK
KyAgICAgICAgaWYgKFdlYk5vZGVIaWdobGlnaHQgKmN1cnJlbnRIaWdobGlnaHQgPSBbd2ViVmll
dyBjdXJyZW50Tm9kZUhpZ2hsaWdodF0pCisgICAgICAgICAgICBbY3VycmVudEhpZ2hsaWdodCBz
ZXROZWVkc1VwZGF0ZUluVGFyZ2V0Vmlld1JlY3Q6W3NlbGYgY29udmVydFJlY3Q6cmVjdCB0b1Zp
ZXc6W2N1cnJlbnRIaWdobGlnaHQgdGFyZ2V0Vmlld11dXTsKKworICAgICAgICBbKFdlYkNsaXBW
aWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlwXTsKKworICAgICAgICBb
TlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOworICAgIH0gQGNhdGNoIChO
U0V4Y2VwdGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKKyAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtz
ZWxmIHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07CisgICAgICAgIFtOU0dyYXBoaWNz
Q29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisgICAgICAgIExPR19FUlJPUigiRXhjZXB0
aW9uIGNhdWdodCB3aGlsZSBkcmF3aW5nOiAlQCIsIGxvY2FsRXhjZXB0aW9uKTsKKyAgICAgICAg
W2xvY2FsRXhjZXB0aW9uIHJhaXNlXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZHJhd1JlY3Q6KE5T
UmVjdClyZWN0Cit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CisgICAgTE9HKFZpZXcsICIl
QCBkcmF3aW5nIiwgc2VsZik7CisKKyAgICBjb25zdCBOU1JlY3QgKnJlY3RzOworICAgIE5TSW50
ZWdlciBjb3VudDsKKyAgICBbc2VsZiBnZXRSZWN0c0JlaW5nRHJhd246JnJlY3RzIGNvdW50OiZj
b3VudF07CisKKyAgICBCT09MIHN1YnZpZXdzV2VyZVNldEFzaWRlID0gX3ByaXZhdGUtPnN1YnZp
ZXdzU2V0QXNpZGU7CisgICAgaWYgKHN1YnZpZXdzV2VyZVNldEFzaWRlKQorICAgICAgICBbc2Vs
ZiBfcmVzdG9yZVN1YnZpZXdzXTsKKworI2lmZGVmIExPR19USU1FUworICAgIGRvdWJsZSBzdGFy
dCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOworI2VuZGlmCisKKyAgICBpZiAoW1tzZWxm
IF93ZWJWaWV3XSBfbXVzdERyYXdVbmlvbmVkUmVjdDpyZWN0IHNpbmdsZVJlY3RzOnJlY3RzIGNv
dW50OmNvdW50XSkKKyAgICAgICAgW3NlbGYgZHJhd1NpbmdsZVJlY3Q6cmVjdF07CisgICAgZWxz
ZQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBb
c2VsZiBkcmF3U2luZ2xlUmVjdDpyZWN0c1tpXV07CisKKyNpZmRlZiBMT0dfVElNRVMKKyAgICBk
b3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAg
IExPRyhUaW1pbmcsICIlcyBkcmF3IHNlY29uZHMgPSAlZiIsIHdpZGdldC0+cGFydCgpLT5iYXNl
VVJMKCkuVVJMKCkubGF0aW4xKCksIHRoaXNUaW1lKTsKKyNlbmRpZgorCisgICAgaWYgKHN1YnZp
ZXdzV2VyZVNldEFzaWRlKQorICAgICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107CisgICAg
ICAgIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoW1tzZWxmIF93
ZWJWaWV3XSBfbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbl0pIHsKKyAgICAgICAg
Ly8gRGlzYWJsZSBzY3JlZW4gdXBkYXRlcyBzbyB0aGF0IGRyYXdpbmcgaW50byB0aGUgTlNWaWV3
IGFuZAorICAgICAgICAvLyBDQUxheWVyIHVwZGF0ZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gYXQg
dGhlIHNhbWUgdGltZS4KKyAgICAgICAgW1tzZWxmIHdpbmRvd10gZGlzYWJsZVNjcmVlblVwZGF0
ZXNVbnRpbEZsdXNoXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hdOworICAgICAgICBb
W3NlbGYgX3dlYlZpZXddIF9zZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uOk5P
XTsKKyAgICB9CisjZW5kaWYKK30KKworLy8gVHVybiBvZmYgdGhlIGFkZGl0aW9uYWwgY2xpcCB3
aGlsZSBjb21wdXRpbmcgb3VyIHZpc2libGVSZWN0LgorLSAoTlNSZWN0KXZpc2libGVSZWN0Cit7
CisgICAgaWYgKCEoW1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViQ2xpcFZpZXcg
Y2xhc3NdXSkpCisgICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3RdOworICAgICAgICAK
KyAgICBXZWJDbGlwVmlldyAqY2xpcFZpZXcgPSAoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZp
ZXddOworCisgICAgQk9PTCBoYXNBZGRpdGlvbmFsQ2xpcCA9IFtjbGlwVmlldyBoYXNBZGRpdGlv
bmFsQ2xpcF07CisgICAgaWYgKCFoYXNBZGRpdGlvbmFsQ2xpcCkgeworICAgICAgICByZXR1cm4g
W3N1cGVyIHZpc2libGVSZWN0XTsKKyAgICB9CisgICAgCisgICAgTlNSZWN0IGFkZGl0aW9uYWxD
bGlwID0gW2NsaXBWaWV3IGFkZGl0aW9uYWxDbGlwXTsKKyAgICBbY2xpcFZpZXcgcmVzZXRBZGRp
dGlvbmFsQ2xpcF07CisgICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW3N1cGVyIHZpc2libGVSZWN0
XTsKKyAgICBbY2xpcFZpZXcgc2V0QWRkaXRpb25hbENsaXA6YWRkaXRpb25hbENsaXBdOworICAg
IHJldHVybiB2aXNpYmxlUmVjdDsKK30KKworLSAoQk9PTClpc0ZsaXBwZWQgCit7CisgICAgcmV0
dXJuIFlFUzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRCZWNvbWVLZXk6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkgeworICAgICAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlm
aWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IE5TV2luZG93ICprZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07CisKKyAgICBpZiAo
a2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10pCisgICAgICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRP
YnNlcnZlcl07CisKKyAgICBpZiAoa2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwga2V5V2lu
ZG93ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKQorICAgICAgICBbc2VsZiBfdXBk
YXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRSZXNpZ25L
ZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFwdGhyZWFkX21h
aW5fbnAoKSkgeworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2Nt
ZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIE5TV2luZG93ICpmb3JtZXJLZXlXaW5kb3cgPSBbbm90aWZpY2F0
aW9uIG9iamVjdF07CisKKyAgICBpZiAoZm9ybWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10p
CisgICAgICAgIFtzZWxmIHJlbW92ZU1vdXNlTW92ZWRPYnNlcnZlcl07CisKKyAgICBpZiAoZm9y
bWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwgZm9ybWVyS2V5V2luZG93ID09IFtbc2Vs
ZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKSB7CisgICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2Vk
QW5kQWN0aXZlU3RhdGVdOworICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJl
dmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgfQorfQorCistICh2b2lkKXdpbmRv
d1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIXB0
aHJlYWRfbWFpbl9ucCgpKSB7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRo
cmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRS
ZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgIFtbc2VsZiBfcGx1Z2luQ29udHJv
bGxlcl0gZGVzdHJveUFsbFBsdWdpbnNdOworfQorCistICh2b2lkKXdpbmRvd1dpbGxPcmRlck9u
U2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghW1tzZWxm
IF93ZWJWaWV3XSBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbl0pCisgICAgICAgIFtzZWxmIHNl
dE5lZWRzRGlzcGxheTpZRVNdOworfQorCistICh2b2lkKXNjcm9sbFdoZWVsOihOU0V2ZW50ICop
ZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlz
IGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5n
IGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhl
biBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBm
cm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAg
W1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT53aGVlbEV2ZW50KGV2ZW50KSkKKyAgICAgICAgW3N1cGVyIHNjcm9sbFdoZWVsOmV2ZW50XTsK
K30KKworLSAoQk9PTClfaXNTZWxlY3Rpb25FdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
TlNQb2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRv
d10gZnJvbVZpZXc6bmlsXTsKKyAgICByZXR1cm4gW1tbc2VsZiBlbGVtZW50QXRQb2ludDpwb2lu
dCBhbGxvd1NoYWRvd0NvbnRlbnQ6WUVTXSBvYmplY3RGb3JLZXk6V2ViRWxlbWVudElzU2VsZWN0
ZWRLZXldIGJvb2xWYWx1ZV07Cit9CisKKy0gKEJPT0wpYWNjZXB0c0ZpcnN0TW91c2U6KE5TRXZl
bnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRv
IHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0
Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFu
ZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0
aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4K
KyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgTlNWaWV3ICpoaXRWaWV3
ID0gW3NlbGYgX2hpdFZpZXdGb3JFdmVudDpldmVudF07CisgICAgV2ViSFRNTFZpZXcgKmhpdEhU
TUxWaWV3ID0gW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8gKFdlYkhUTUxW
aWV3ICopaGl0VmlldyA6IG5pbDsKKyAgICAKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2Fy
ZEJlaGF2aW9yQWx3YXlzQWNjZXB0c0ZpcnN0TW91c2VdKQorICAgICAgICByZXR1cm4gWUVTOwor
I2VuZGlmCisgICAgCisgICAgaWYgKGhpdEhUTUxWaWV3KSB7CisgICAgICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbaGl0SFRNTFZp
ZXcgX2ZyYW1lXSkpIHsKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNl
dEFjdGl2YXRpb25FdmVudE51bWJlcihbZXZlbnQgZXZlbnROdW1iZXJdKTsKKyAgICAgICAgICAg
IFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworICAgICAgICAgICAgaWYg
KFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVudDpldmVudF0pCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZlbnRNYXlTdGFydERyYWcoZXZl
bnQpOworICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpuaWxdOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBbaGl0
VmlldyBhY2NlcHRzRmlyc3RNb3VzZTpldmVudF07Cit9CisKKy0gKEJPT0wpc2hvdWxkRGVsYXlX
aW5kb3dPcmRlcmluZ0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVk
IGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVh
c2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8g
dGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGlu
c2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKKworICAgIE5TVmlldyAqaGl0VmlldyA9IFtzZWxmIF9oaXRWaWV3Rm9yRXZlbnQ6ZXZl
bnRdOworICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFtoaXRWaWV3IGlzS2luZE9mQ2xh
c3M6W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZpZXcgOiBuaWw7CisgICAgaWYg
KGhpdEhUTUxWaWV3KSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlm
IChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRdKQorICAgICAgICAgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkgeworICAgICAg
ICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmV2ZW50TWF5U3Rh
cnREcmFnKGV2ZW50KTsKKyAgICAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1vdXNlRG93
bkV2ZW50Om5pbF07CisgICAgICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIHJldHVybiBbaGl0VmlldyBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6
ZXZlbnRdOworfQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1
biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBt
aWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2lu
ZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEg
cHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWlu
XSBhdXRvcmVsZWFzZV07CisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHByb3RlY3RvciA9
IHNlbGY7CisgICAgaWYgKFtbc2VsZiBpbnB1dENvbnRleHRdIHdhbnRzVG9IYW5kbGVNb3VzZUV2
ZW50c10gJiYgW1tzZWxmIGlucHV0Q29udGV4dF0gaGFuZGxlTW91c2VFdmVudDpldmVudF0pCisg
ICAgICAgIHJldHVybjsKKworICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0g
WUVTOworCisgICAgLy8gUmVjb3JkIHRoZSBtb3VzZSBkb3duIHBvc2l0aW9uIHNvIHdlIGNhbiBk
ZXRlcm1pbmUgZHJhZyBoeXN0ZXJlc2lzLgorICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpl
dmVudF07CisKKyAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lu
cHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKKyAgICBpZiAoW2N1cnJlbnRJbnB1dE1h
bmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBo
YW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgZ290byBkb25lOworCisgICAgW19wcml2
YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwor
CisgICAgLy8gSWYgdGhlIHdlYiBwYWdlIGhhbmRsZXMgdGhlIGNvbnRleHQgbWVudSBldmVudCBh
bmQgbWVudUZvckV2ZW50OiByZXR1cm5zIG5pbCwgd2UnbGwgZ2V0IGNvbnRyb2wgY2xpY2sgZXZl
bnRzIGhlcmUuCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXNzIHRoZW0gYWxvbmcgdG8gS0hU
TUwgYSBzZWNvbmQgdGltZS4KKyAgICBpZiAoIShbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0Nv
bnRyb2xLZXlNYXNrKSkgeworICAgICAgICBfcHJpdmF0ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRF
dmVudHMgPSBOTzsKKworICAgICAgICAvLyBEb24ndCBkbyBhbnkgbW91c2VvdmVyIHdoaWxlIHRo
ZSBtb3VzZSBpcyBkb3duLgorICAgICAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGlt
ZXJdOworCisgICAgICAgIC8vIExldCBXZWJDb3JlIGdldCBhIGNoYW5jZSB0byBkZWFsIHdpdGgg
dGhlIGV2ZW50LiBUaGlzIHdpbGwgY2FsbCBiYWNrIHRvIHVzCisgICAgICAgIC8vIHRvIHN0YXJ0
IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBpZiAoRnJhbWUq
IGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgICAgICBjb3JlZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5tb3VzZURvd24oZXZlbnQpOworICAgIH0KKworZG9uZToKKyAgICBf
cHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POworfQorCistICh2b2lkKWRyYWdJ
bWFnZTooTlNJbWFnZSAqKWRyYWdJbWFnZQorICAgICAgICAgICAgICAgYXQ6KE5TUG9pbnQpYXQK
KyAgICAgICAgICAgb2Zmc2V0OihOU1NpemUpb2Zmc2V0CisgICAgICAgICAgICBldmVudDooTlNF
dmVudCAqKWV2ZW50CisgICAgICAgcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2Fy
ZAorICAgICAgICAgICBzb3VyY2U6KGlkKXNvdXJjZQorICAgICAgICBzbGlkZUJhY2s6KEJPT0wp
c2xpZGVCYWNrCit7CisgICAgQVNTRVJUKHNlbGYgPT0gW3NlbGYgX3RvcEhUTUxWaWV3XSk7Cisg
ICAgW3N1cGVyIGRyYWdJbWFnZTpkcmFnSW1hZ2UgYXQ6YXQgb2Zmc2V0Om9mZnNldCBldmVudDpl
dmVudCBwYXN0ZWJvYXJkOnBhc3RlYm9hcmQgc291cmNlOnNvdXJjZSBzbGlkZUJhY2s6c2xpZGVC
YWNrXTsKK30KKworLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAoreworICAg
IC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBy
dW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQg
bWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNp
bmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBh
IHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFp
bl0gYXV0b3JlbGVhc2VdOworCisgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFn
ZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CisgICAgaWYgKFtjdXJy
ZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1
dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybjsKKworICAg
IFtzZWxmIHJldGFpbl07CisKKyAgICBpZiAoIV9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dl
ZEV2ZW50cykgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KSkgeworICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAg
ICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VEcmFnZ2Vk
KGV2ZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFtzZWxmIHJlbGVhc2VdOworfQorCist
IChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrRm9yTG9jYWw6KEJP
T0wpaXNMb2NhbAoreworICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1Rv
cEhUTUxWaWV3XSk7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXdd
KTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25Ob25lOwor
CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBvdmVycmlkZSB0aGUgc291cmNlIHByb3ZpZGVkIG9w
ZXJhdGlvbiBoZXJlPyAgV2h5IG5vdCBpbiBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnCisgICAg
aWYgKHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNvdXJjZURyYWdPcGVyYXRpb24oKSA9PSBEcmFn
T3BlcmF0aW9uTm9uZSkKKyAgICAgICAgcmV0dXJuIE5TRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBO
U0RyYWdPcGVyYXRpb25Db3B5OworCisgICAgcmV0dXJuIChOU0RyYWdPcGVyYXRpb24pcGFnZS0+
ZHJhZ0NvbnRyb2xsZXIoKS0+c291cmNlRHJhZ09wZXJhdGlvbigpOworfQorCistICh2b2lkKWRy
YWdnZWRJbWFnZTooTlNJbWFnZSAqKWltYWdlIG1vdmVkVG86KE5TUG9pbnQpc2NyZWVuTG9jCit7
CisgICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsK
KyAgICAKKyAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tzZWxmIHdpbmRvd10gY29udmVy
dFNjcmVlblRvQmFzZTpzY3JlZW5Mb2NdOworICAgIE5TUG9pbnQgd2luZG93TW91c2VMb2MgPSB3
aW5kb3dJbWFnZUxvYzsKKyAgICAKKyAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dl
YlZpZXddKSkgeworICAgICAgICBEcmFnQ29udHJvbGxlciogZHJhZ0NvbnRyb2xsZXIgPSBwYWdl
LT5kcmFnQ29udHJvbGxlcigpOworICAgICAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gTlNN
YWtlUG9pbnQod2luZG93SW1hZ2VMb2MueCArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCku
eCgpLCB3aW5kb3dJbWFnZUxvYy55ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS55KCkp
OworICAgIH0KKyAgICAKKyAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhZ1NvdXJjZU1vdmVkVG86d2lu
ZG93TW91c2VMb2NdOworfQorCistICh2b2lkKWRyYWdnZWRJbWFnZTooTlNJbWFnZSAqKWFuSW1h
Z2UgZW5kZWRBdDooTlNQb2ludClhUG9pbnQgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRpb24pb3Bl
cmF0aW9uCit7CisgICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRN
TFZpZXddKTsKKyAgICAKKyAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tzZWxmIHdpbmRv
d10gY29udmVydFNjcmVlblRvQmFzZTphUG9pbnRdOworICAgIE5TUG9pbnQgd2luZG93TW91c2VM
b2MgPSB3aW5kb3dJbWFnZUxvYzsKKyAgICAKKyAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoW3Nl
bGYgX3dlYlZpZXddKSkgeworICAgICAgICBEcmFnQ29udHJvbGxlciogZHJhZ0NvbnRyb2xsZXIg
PSBwYWdlLT5kcmFnQ29udHJvbGxlcigpOworICAgICAgICB3aW5kb3dNb3VzZUxvYyA9IE5TTWFr
ZVBvaW50KHdpbmRvd0ltYWdlTG9jLnggKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLngo
KSwgd2luZG93SW1hZ2VMb2MueSArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueSgpKTsK
KyAgICAgICAgZHJhZ0NvbnRyb2xsZXItPmRyYWdFbmRlZCgpOworICAgIH0KKyAgICAKKyAgICBb
W3NlbGYgX2ZyYW1lXSBfZHJhZ1NvdXJjZUVuZGVkQXQ6d2luZG93TW91c2VMb2Mgb3BlcmF0aW9u
Om9wZXJhdGlvbl07CisgICAgCisgICAgLy8gUHJldmVudCBxdWV1ZWQgbW91c2VEcmFnZ2VkIGV2
ZW50cyBmcm9tIGNvbWluZyBhZnRlciB0aGUgZHJhZyBhbmQgZmFrZSBtb3VzZVVwIGV2ZW50Lgor
ICAgIF9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IFlFUzsKKyAgICAKKyAg
ICAvLyBPbmNlIHRoZSBkcmFnZ2luZyBtYWNoaW5lcnkga2lja3MgaW4sIHdlIG5vIGxvbmdlciBn
ZXQgbW91c2UgZHJhZ3Mgb3IgdGhlIHVwIGV2ZW50LgorICAgIC8vIFdlYkNvcmUgZXhwZWN0cyB0
byBnZXQgYmFsYW5jZWQgZG93bi91cCdzLCBzbyB3ZSBtdXN0IGZha2UgdXAgYSBtb3VzZXVwLgor
ICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xl
ZnRNb3VzZVVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uOndpbmRvd01vdXNlTG9jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNE
YXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVt
YmVyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07
CisgICAgW3NlbGYgbW91c2VVcDpmYWtlRXZlbnRdOyAvLyBUaGlzIHdpbGwgYWxzbyB1cGRhdGUg
dGhlIG1vdXNlb3ZlciBzdGF0ZS4KK30KKworLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZp
bGVzRHJvcHBlZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERlc3RpbmF0aW9uCit7CisgICAg
TlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKKyAgICBOU1VSTCAqZHJhZ2dpbmdJbWFnZVVS
TCA9IG5pbDsKKyAgICAKKyAgICBpZiAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIHRpZmZSZXNvdXJj
ZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXSkgeworICAgICAgICAKKyAgICAg
ICAgU2hhcmVkQnVmZmVyICpidWZmZXIgPSBzdGF0aWNfY2FzdDxDYWNoZWRSZXNvdXJjZSo+KHRp
ZmZSZXNvdXJjZSktPmRhdGEoKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBn
b3RvIG5vUHJvbWlzZWREYXRhOworICAgICAgICAKKyAgICAgICAgTlNEYXRhICpkYXRhID0gYnVm
ZmVyLT5jcmVhdGVOU0RhdGEoKTsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSB0
aWZmUmVzb3VyY2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpOworICAgICAgICBkcmFnZ2lu
Z0ltYWdlVVJMID0gW3Jlc3BvbnNlIFVSTF07CisgICAgICAgIHdyYXBwZXIgPSBbW1tOU0ZpbGVX
cmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0gYXV0b3JlbGVh
c2VdOworICAgICAgICBOU1N0cmluZyogZmlsZW5hbWUgPSBbcmVzcG9uc2Ugc3VnZ2VzdGVkRmls
ZW5hbWVdOworICAgICAgICBOU1N0cmluZyogdHJ1ZUV4dGVuc2lvbih0aWZmUmVzb3VyY2UtPmlt
YWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9uKCkpOworICAgICAgICBpZiAoIVtmaWxlbmFtZSBtYXRj
aGVzRXh0ZW5zaW9uRXF1aXZhbGVudDp0cnVlRXh0ZW5zaW9uXSkKKyAgICAgICAgICAgIGZpbGVu
YW1lID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi4iXSBzdHJpbmdCeUFw
cGVuZGluZ1N0cmluZzp0cnVlRXh0ZW5zaW9uXTsKKyAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVy
cmVkRmlsZW5hbWU6ZmlsZW5hbWVdOworICAgIH0KKyAgICAKK25vUHJvbWlzZWREYXRhOgorICAg
IAorICAgIGlmICghd3JhcHBlcikgeworICAgICAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8
fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOworICAgICAgICBQYWdlKiBwYWdlID0gY29yZShbc2Vs
ZiBfd2ViVmlld10pOworICAgICAgICAKKyAgICAgICAgLy9JZiBhIGxvYWQgb2NjdXJzIG1pZHdh
eSB0aHJvdWdoIGEgZHJhZywgdGhlIHZpZXcgbWF5IGJlIGRldGFjaGVkLCB3aGljaCBnaXZlcwor
ICAgICAgICAvL3VzIG5vIGFiaWxpdHkgdG8gZ2V0IHRvIHRoZSBvcmlnaW5hbCBQYWdlLCBzbyB3
ZSBjYW5ub3QgYWNjZXNzIGFueSBkcmFnIHN0YXRlCisgICAgICAgIC8vRklYTUU6IGlzIHRoZXJl
IGEgd2F5IHRvIHJlY292ZXI/CisgICAgICAgIGlmICghcGFnZSkgCisgICAgICAgICAgICByZXR1
cm4gbmlsOyAKKyAgICAgICAgCisgICAgICAgIGNvbnN0IEtVUkwmIGltYWdlVVJMID0gcGFnZS0+
ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ2dpbmdJbWFnZVVSTCgpOworICAgICAgICBBU1NFUlQoIWlt
YWdlVVJMLmlzRW1wdHkoKSk7CisgICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBpbWFnZVVSTDsK
KworICAgICAgICB3cmFwcGVyID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZmlsZVdyYXBwZXJGb3JV
Ukw6ZHJhZ2dpbmdJbWFnZVVSTF07CisgICAgfQorICAgIAorICAgIGlmICh3cmFwcGVyID09IG5p
bCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZS4iKTsK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVwb3J0IGFuIGVy
cm9yIGlmIHdlIGZhaWwgdG8gY3JlYXRlIGEgZmlsZS4KKyAgICBOU1N0cmluZyAqcGF0aCA9IFtb
ZHJvcERlc3RpbmF0aW9uIHBhdGhdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbd3Jh
cHBlciBwcmVmZXJyZWRGaWxlbmFtZV1dOworICAgIHBhdGggPSBbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIF93ZWJraXRfcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGg6cGF0aF07
CisgICAgaWYgKCFbd3JhcHBlciB3cml0ZVRvRmlsZTpwYXRoIGF0b21pY2FsbHk6Tk8gdXBkYXRl
RmlsZW5hbWVzOllFU10pCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFn
ZSBmaWxlIHZpYSAtW05TRmlsZVdyYXBwZXIgd3JpdGVUb0ZpbGU6YXRvbWljYWxseTp1cGRhdGVG
aWxlbmFtZXM6XSIpOworICAgIAorICAgIGlmIChkcmFnZ2luZ0ltYWdlVVJMKQorICAgICAgICBb
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJraXRfc2V0TWV0YWRhdGFVUkw6W2Ry
YWdnaW5nSW1hZ2VVUkwgYWJzb2x1dGVTdHJpbmddIHJlZmVycmVyOm5pbCBhdFBhdGg6cGF0aF07
CisgICAgCisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbcGF0aCBsYXN0UGF0
aENvbXBvbmVudF1dOworfQorCistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAorewor
ICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2ls
bCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZl
bnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxl
YXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2lu
ZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJl
dGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07
CisKKyAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFu
YWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKKyAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIg
d2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5kbGVN
b3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgcmV0YWluXTsK
KworICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKKyAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1l
LT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkt
Pm1vdXNlVXAoZXZlbnQpOworICAgIH0KKyAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEZh
a2VFdmVudF07CisKKyAgICBbc2VsZiByZWxlYXNlXTsKK30KKworLSAodm9pZCltb3VzZU1vdmVk
Tm90aWZpY2F0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIFtzZWxm
IF91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6W1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVj
dEZvcktleTpAIk5TRXZlbnQiXV07Cit9CisKKy8vIHJldHVybmluZyBZRVMgZnJvbSB0aGlzIG1l
dGhvZCBpcyB0aGUgd2F5IHdlIHRlbGwgQXBwS2l0IHRoYXQgaXQgaXMgb2sgZm9yIHRoaXMgdmll
dworLy8gdG8gYmUgaW4gdGhlIGtleSBsb29wIGV2ZW4gd2hlbiAidGFiIHRvIGFsbCBjb250cm9s
cyIgaXMgbm90IG9uLgorLSAoQk9PTCluZWVkc1BhbmVsVG9CZWNvbWVLZXkKK3sKKyAgICByZXR1
cm4gWUVTOworfQorCisvLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBy
ZXR1cm4gYW55dGhpbmcgdGhyb3VnaCB0aGUgTlNUZXh0SW5wdXQKKy8vIEFQSSB3aGVuIGFuIGVk
aXRhYmxlIHJlZ2lvbiBpcyBub3QgY3VycmVudGx5IGZvY3VzZWQuCitzdGF0aWMgQk9PTCBpc1Rl
eHRJbnB1dChGcmFtZSogY29yZUZyYW1lKQoreworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgIWNv
cmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkt
PmlzQ29udGVudEVkaXRhYmxlKCk7Cit9CisKK3N0YXRpYyBCT09MIGlzSW5QYXNzd29yZEZpZWxk
KEZyYW1lKiBjb3JlRnJhbWUpCit7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOworfQorCistIChCT09MKWJlY29tZUZp
cnN0UmVzcG9uZGVyCit7CisgICAgTlNTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gTlNE
aXJlY3RTZWxlY3Rpb247CisgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1pbmdQ
cm9ncmFtbWF0aWNGb2N1c10pCisgICAgICAgIGRpcmVjdGlvbiA9IFtbc2VsZiB3aW5kb3ddIGtl
eVZpZXdTZWxlY3Rpb25EaXJlY3Rpb25dOworCisgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZV07CisgICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07CisgICAgCisgICAgRnJh
bWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gWUVTOworCisgICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBpc1RleHRJbnB1
dChmcmFtZSkgJiYgIWlzSW5QYXNzd29yZEZpZWxkKGZyYW1lKTsKKyAgICBpZiAoZXhwb3NlSW5w
dXRDb250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKKyAgICAgICAgX3By
aXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKKyAgICAgICAg
W05TQXBwIHVwZGF0ZVdpbmRvd3NdOworICAgIH0KKworICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0
U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBO
U0RpcmVjdFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIFBhZ2UqIHBhZ2Ug
PSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKwor
ICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOworICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgZG9j
dW1lbnQtPnNldEZvY3VzZWROb2RlKDApOworICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5z
ZXRJbml0aWFsRm9jdXMoZGlyZWN0aW9uID09IE5TU2VsZWN0aW5nTmV4dCA/IEZvY3VzRGlyZWN0
aW9uRm9yd2FyZCA6IEZvY3VzRGlyZWN0aW9uQmFja3dhcmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRL
ZXlib2FyZEV2ZW50KCkuZ2V0KCkpOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpcmVz
aWduRmlyc3RSZXNwb25kZXIKK3sKKyAgICBCT09MIHJlc2lnbiA9IFtzdXBlciByZXNpZ25GaXJz
dFJlc3BvbmRlcl07CisgICAgaWYgKHJlc2lnbikgeworICAgICAgICBfcHJpdmF0ZS0+cmVzaWdu
aW5nRmlyc3RSZXNwb25kZXIgPSBZRVM7CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xs
ZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgaWYgKCFbc2Vs
ZiBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pIHsgCisgICAgICAgICAgICBbc2VsZiBkZXNl
bGVjdEFsbF07CisgICAgICAgICAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX2lzUGVyZm9ybWlu
Z1Byb2dyYW1tYXRpY0ZvY3VzXSkKKyAgICAgICAgICAgICAgICBbc2VsZiBjbGVhckZvY3VzXTsK
KyAgICAgICAgfQorICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsK
KyAgICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyID0gTk87CisgICAgfQor
ICAgIHJldHVybiByZXNpZ247Cit9CisKKy0gKHZvaWQpc2V0RGF0YVNvdXJjZTooV2ViRGF0YVNv
dXJjZSAqKWRhdGFTb3VyY2UgCit7CisgICAgQVNTRVJUKGRhdGFTb3VyY2UpOworICAgIGlmIChf
cHJpdmF0ZS0+ZGF0YVNvdXJjZSAhPSBkYXRhU291cmNlKSB7CisgICAgICAgIEFTU0VSVCghX3By
aXZhdGUtPmNsb3NlZCk7CisgICAgICAgIEJPT0wgaGFkRGF0YVNvdXJjZSA9IF9wcml2YXRlLT5k
YXRhU291cmNlICE9IG5pbDsKKworICAgICAgICBbZGF0YVNvdXJjZSByZXRhaW5dOworICAgICAg
ICBbX3ByaXZhdGUtPmRhdGFTb3VyY2UgcmVsZWFzZV07CisgICAgICAgIF9wcml2YXRlLT5kYXRh
U291cmNlID0gZGF0YVNvdXJjZTsKKyAgICAgICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVy
IHNldERhdGFTb3VyY2U6ZGF0YVNvdXJjZV07CisKKyAgICAgICAgaWYgKCFoYWREYXRhU291cmNl
KQorICAgICAgICAgICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpZGF0YVNvdXJjZVVwZGF0ZWQ6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCit7
Cit9CisKKy8vIFRoaXMgaXMgYW4gb3ZlcnJpZGUgb2YgYW4gTlNDb250cm9sIG1ldGhvZCB0aGF0
IHdhbnRzIHRvIHJlcGFpbnQgdGhlIGVudGlyZSB2aWV3IHdoZW4gdGhlIHdpbmRvdyByZXNpZ25z
L2JlY29tZXMKKy8vIGtleS4gIFdlYkhUTUxWaWV3IGlzIGFuIE5TQ29udHJvbCBvbmx5IGJlY2F1
c2UgaXQgaG9zdHMgTlNDZWxscyB0aGF0IGFyZSBwYWludGVkIGJ5IFdlYkNvcmUncyBBcXVhIHRo
ZW1lCisvLyByZW5kZXJlciAoYW5kIHRob3NlIGNlbGxzIG11c3QgYmUgaG9zdGVkIGJ5IGFuIGVu
Y2xvc2luZyBOU0NvbnRyb2wgaW4gb3JkZXIgdG8gcGFpbnQgcHJvcGVybHkpLgorLSAodm9pZCl1
cGRhdGVDZWxsOihOU0NlbGwqKWNlbGwKK3sKK30KKworLy8gRG9lcyBzZXROZWVkc0Rpc3BsYXk6
Tk8gYXMgYSBzaWRlIGVmZmVjdCB3aGVuIHByaW50aW5nIGlzIGVuZGluZy4KKy8vIHBhZ2VXaWR0
aCAhPSAwIGltcGxpZXMgd2Ugd2lsbCByZWxheW91dCB0byBhIG5ldyB3aWR0aAorLSAodm9pZClf
c2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDooZmxvYXQpbWluUGFn
ZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6
ZTooQk9PTClhZGp1c3RWaWV3U2l6ZQoreworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9m
cmFtZV07CisgICAgTlNBcnJheSAqc3ViZnJhbWVzID0gW2ZyYW1lIGNoaWxkRnJhbWVzXTsKKyAg
ICB1bnNpZ25lZCBuID0gW3N1YmZyYW1lcyBjb3VudF07CisgICAgdW5zaWduZWQgaTsKKyAgICBm
b3IgKGkgPSAwOyBpICE9IG47ICsraSkgeworICAgICAgICBXZWJGcmFtZSAqc3ViZnJhbWUgPSBb
c3ViZnJhbWVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIFdlYkZyYW1lVmlldyAqZnJhbWVW
aWV3ID0gW3N1YmZyYW1lIGZyYW1lVmlld107CisgICAgICAgIGlmIChbW3N1YmZyYW1lIF9kYXRh
U291cmNlXSBfaXNEb2N1bWVudEhUTUxdKSB7CisgICAgICAgICAgICBbKFdlYkhUTUxWaWV3ICop
W2ZyYW1lVmlldyBkb2N1bWVudFZpZXddIF9zZXRQcmludGluZzpwcmludGluZyBtaW5pbXVtUGFn
ZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOmFkanVzdFZp
ZXdTaXplXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwcmludGluZyAhPSBfcHJpdmF0
ZS0+cHJpbnRpbmcpIHsKKyAgICAgICAgW19wcml2YXRlLT5wYWdlUmVjdHMgcmVsZWFzZV07Cisg
ICAgICAgIF9wcml2YXRlLT5wYWdlUmVjdHMgPSBuaWw7CisgICAgICAgIF9wcml2YXRlLT5wcmlu
dGluZyA9IHByaW50aW5nOworICAgICAgICBpZiAoIXByaW50aW5nKQorICAgICAgICAgICAgX3By
aXZhdGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4gPSBOTzsKKyAgICAgICAgW3NlbGYgc2V0TmVlZHNU
b0FwcGx5U3R5bGVzOllFU107CisgICAgICAgIFtzZWxmIHNldE5lZWRzTGF5b3V0OllFU107Cisg
ICAgICAgIFtzZWxmIGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDptaW5QYWdlV2lkdGggbWF4aW11
bVBhZ2VXaWR0aDptYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6YWRqdXN0Vmlld1NpemVd
OworICAgICAgICBpZiAoIXByaW50aW5nKSB7CisgICAgICAgICAgICAvLyBDYW4ndCBkbyB0aGlz
IHdoZW4gc3RhcnRpbmcgcHJpbnRpbmcgb3IgbmVzdGVkIHByaW50aW5nIHdvbid0IHdvcmssIHNl
ZSAzNDkxNDI3LgorICAgICAgICAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5Ok5PXTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworLSAoQk9PTCljYW5QcmludEhlYWRlcnNBbmRGb290ZXJzCit7Cisg
ICAgcmV0dXJuIFlFUzsKK30KKworLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBjYXNlIHdoZXJl
IHRoZSB3ZWJ2aWV3IGlzIGVtYmVkZGVkIGluIHRoZSB2aWV3IHRoYXQncyBiZWluZyBwcmludGVk
LgorLy8gSXQgc2hvdWxkbid0IGJlIGNhbGxlZCB3aGVuIHRoZSB3ZWJ2aWV3IGlzIGJlaW5nIHBy
aW50ZWQgZGlyZWN0bHkuCistICh2b2lkKWFkanVzdFBhZ2VIZWlnaHROZXc6KENHRmxvYXQgKilu
ZXdCb3R0b20gdG9wOihDR0Zsb2F0KW9sZFRvcCBib3R0b206KENHRmxvYXQpb2xkQm90dG9tIGxp
bWl0OihDR0Zsb2F0KWJvdHRvbUxpbWl0Cit7CisgICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHBy
aW50IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4KKyAgICAvLyBJZiB0aGUgV2Vi
SFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZl
ciBoYXZlIHRvIGRvIHRoaXMuCisgICAgQk9PTCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRl
LT5wcmludGluZzsKKyAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKQorICAgICAgICBbc2VsZiBf
c2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAu
MGYgYWRqdXN0Vmlld1NpemU6Tk9dOworCisgICAgZmxvYXQgbmV3Qm90dG9tRmxvYXQgPSAqbmV3
Qm90dG9tOworICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBjb3JlKFtzZWxmIF9mcmFtZV0pLT52
aWV3KCkpCisgICAgICAgIHZpZXctPmFkanVzdFBhZ2VIZWlnaHQoJm5ld0JvdHRvbUZsb2F0LCBv
bGRUb3AsIG9sZEJvdHRvbSwgYm90dG9tTGltaXQpOworCisjaWZkZWYgX19MUDY0X18KKyAgICAv
LyBJZiB0aGUgbmV3IGJvdHRvbSBpcyBlcXVhbCB0byB0aGUgb2xkIGJvdHRvbSAod2hlbiBib3Ro
IGFyZSB0cmVhdGVkIGFzIGZsb2F0cyksIHdlIGp1c3QgY29weQorICAgIC8vIG9sZEJvdHRvbSBv
dmVyIHRvIG5ld0JvdHRvbS4gVGhpcyBwcmV2ZW50cyByb3VuZGluZyBlcnJvcnMgdGhhdCBjYW4g
b2NjdXIgd2hlbiBjb252ZXJ0aW5nIG5ld0JvdHRvbUZsb2F0IHRvIGEgZG91YmxlLgorICAgIGlm
IChmYWJzKChmbG9hdClvbGRCb3R0b20gLSBuZXdCb3R0b21GbG9hdCkgPD0gc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSkgCisgICAgICAgICpuZXdCb3R0b20gPSBvbGRCb3R0
b207CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgICpuZXdCb3R0b20gPSBuZXdCb3R0b21GbG9h
dDsKKyAgICAKKyAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKSB7CisgICAgICAgIE5TUHJpbnRP
cGVyYXRpb24gKmN1cnJlblByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3VycmVu
dE9wZXJhdGlvbl07CisgICAgICAgIGlmIChjdXJyZW5QcmludE9wZXJhdGlvbikKKyAgICAgICAg
ICAgIC8vIGRlbGF5IF9zZXRQcmludGluZzpOTyB1bnRpbCBiYWNrIHRvIG1haW4gbG9vcCBhcyB0
aGlzIG1ldGhvZCBtYXkgZ2V0IGNhbGxlZCByZXBlYXRlZGx5CisgICAgICAgICAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVj
dDpjdXJyZW5QcmludE9wZXJhdGlvbiBhZnRlckRlbGF5OjBdOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGV2ZXIgaW52b2tlZCwgaXQg
cHJvYmFibHkgc2hvdWxkbid0IGJlCisgICAgICAgICAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8g
bWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6
ZTpOT107CisgICAgfQorfQorCistIChmbG9hdClfYXZhaWxhYmxlUGFwZXJXaWR0aEZvclByaW50
T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24KK3sKKyAgICBOU1By
aW50SW5mbyAqcHJpbnRJbmZvID0gW3ByaW50T3BlcmF0aW9uIHByaW50SW5mb107CisgICAgcmV0
dXJuIFtwcmludEluZm8gcGFwZXJTaXplXS53aWR0aCAtIFtwcmludEluZm8gbGVmdE1hcmdpbl0g
LSBbcHJpbnRJbmZvIHJpZ2h0TWFyZ2luXTsKK30KKworLSAoZmxvYXQpX3NjYWxlRmFjdG9yRm9y
UHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJhdGlvbgoreworICAg
IGZsb2F0IHZpZXdXaWR0aCA9IE5TV2lkdGgoW3NlbGYgYm91bmRzXSk7CisgICAgaWYgKHZpZXdX
aWR0aCA8IDEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCIlQCBoYXMgbm8gd2lkdGggd2hlbiBwcmlu
dGluZyIsIHNlbGYpOworICAgICAgICByZXR1cm4gMS4wZjsKKyAgICB9CisKKyAgICBmbG9hdCB1
c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rv
cl07CisgICAgZmxvYXQgbWF4U2hyaW5rVG9GaXRTY2FsZUZhY3RvciA9IDEuMGYgLyBQcmludGlu
Z01heGltdW1TaHJpbmtGYWN0b3I7CisgICAgZmxvYXQgc2hyaW5rVG9GaXRTY2FsZUZhY3RvciA9
IFtzZWxmIF9hdmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRp
b25dL3ZpZXdXaWR0aDsKKyAgICBmbG9hdCBzaHJpbmtUb0F2b2lkT3JwaGFuID0gX3ByaXZhdGUt
PmF2b2lkaW5nUHJpbnRPcnBoYW4gPyAoMS4wZiAvIFByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0
bWVudCkgOiAxLjBmOworICAgIHJldHVybiB1c2VyU2NhbGVGYWN0b3IgKiBNQVgobWF4U2hyaW5r
VG9GaXRTY2FsZUZhY3Rvciwgc2hyaW5rVG9GaXRTY2FsZUZhY3RvcikgKiBzaHJpbmtUb0F2b2lk
T3JwaGFuOworfQorCisvLyBGSVhNRSAzNDkxMzQ0OiBUaGlzIGlzIGEgc2VjcmV0IEFwcEtpdC1p
bnRlcm5hbCBtZXRob2QgdGhhdCB3ZSBuZWVkIHRvIG92ZXJyaWRlIGluIG9yZGVyCisvLyB0byBn
ZXQgb3VyIHNocmluay10by1maXQgdG8gd29yayB3aXRoIGEgY3VzdG9tIHBhZ2luYXRpb24gc2No
ZW1lLiBXZSBjYW4gZG8gdGhpcyBiZXR0ZXIKKy8vIGlmIEFwcEtpdCBtYWtlcyBpdCBTUEkvQVBJ
LgorLSAoQ0dGbG9hdClfcHJvdmlkZVRvdGFsU2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjoo
TlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uIAoreworICAgIHJldHVybiBbc2VsZiBf
c2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJhdGlvbl07Cit9CisKKy8vIFRo
aXMgaXMgdXNlZCBmb3IgQ2FyYm9uIHByaW50aW5nLiBBdCBzb21lIHBvaW50IHdlIG1pZ2h0IHdh
bnQgdG8gbWFrZSB0aGlzIHB1YmxpYyBBUEkuCistICh2b2lkKXNldFBhZ2VXaWR0aEZvclByaW50
aW5nOihmbG9hdClwYWdlV2lkdGgKK3sKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11
bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107
CisgICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOnBhZ2VXaWR0aCBt
YXhpbXVtUGFnZVdpZHRoOnBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZTpZRVNdOworfQorCistICh2
b2lkKV9lbmRQcmludE1vZGUKK3sKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBh
Z2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpZRVNdOwor
ICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpX2Rl
bGF5ZWRFbmRQcmludE1vZGU6KE5TUHJpbnRPcGVyYXRpb24gKilpbml0aWF0aW5nT3BlcmF0aW9u
Cit7CisgICAgQVNTRVJUX0FSRyhpbml0aWF0aW5nT3BlcmF0aW9uLCBpbml0aWF0aW5nT3BlcmF0
aW9uICE9IG5pbCk7CisgICAgTlNQcmludE9wZXJhdGlvbiAqY3VycmVudE9wZXJhdGlvbiA9IFtO
U1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dOworICAgIGlmIChpbml0aWF0aW5nT3Bl
cmF0aW9uID09IGN1cnJlbnRPcGVyYXRpb24pIHsKKyAgICAgICAgLy8gVGhlIHByaW50IG9wZXJh
dGlvbiBpcyBzdGlsbCB1bmRlcndheS4gV2UgZG9uJ3QgZXhwZWN0IHRoaXMgdG8gZXZlciBoYXBw
ZW4sIGhlbmNlIHRoZSBhc3NlcnQsIGJ1dCB3ZSdyZQorICAgICAgICAvLyBiZWluZyBleHRyYSBw
YXJhbm9pZCBoZXJlIHNpbmNlIHRoZSBwcmludGluZyBjb2RlIGlzIHNvIGZyYWdpbGUuIERlbGF5
IHRoZSBjbGVhbnVwCisgICAgICAgIC8vIGZ1cnRoZXIuCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVk
RW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDppbml0aWF0aW5nT3BlcmF0aW9uIGFmdGVyRGVsYXk6
MF07CisgICAgfSBlbHNlIGlmIChbY3VycmVudE9wZXJhdGlvbiB2aWV3XSA9PSBzZWxmKSB7Cisg
ICAgICAgIC8vIEEgbmV3IHByaW50IGpvYiBoYXMgc3RhcnRlZCwgYnV0IGl0IGlzIHByaW50aW5n
IHRoZSBzYW1lIFdlYkhUTUxWaWV3IGFnYWluLiBXZSBkb24ndCBleHBlY3QKKyAgICAgICAgLy8g
dGhpcyB0byBldmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2VydCwgYnV0IHdlJ3JlIGJlaW5nIGV4
dHJhIHBhcmFub2lkIGhlcmUgc2luY2UgdGhlIHByaW50aW5nIGNvZGUgaXMgc28KKyAgICAgICAg
Ly8gZnJhZ2lsZS4gRG8gbm90aGluZywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHRo
ZSBwcmludCBqb2IgY3VycmVudGx5IGluIHByb2dyZXNzLCBhbmQKKyAgICAgICAgLy8gdGhlIHBy
aW50IGpvYiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBvd24g
Y2xlYW51cC4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gVGhlIHByaW50IGpvYiB0aGF0IGtpY2tlZCBvZmYgdGhpcyBkZWxheWVkIGNhbGwg
aGFzIGZpbmlzaGVkLCBhbmQgdGhpcyB2aWV3IGlzIG5vdCBiZWluZworICAgICAgICAvLyBwcmlu
dGVkIGFnYWluLiBXZSBleHBlY3QgdGhhdCBubyBvdGhlciBwcmludCBqb2IgaGFzIHN0YXJ0ZWQu
IFNpbmNlIHRoaXMgZGVsYXllZCBjYWxsIHdhc24ndAorICAgICAgICAvLyBjYW5jZWxsZWQsIGJl
Z2luRG9jdW1lbnQgYW5kIGVuZERvY3VtZW50IG11c3Qgbm90IGhhdmUgYmVlbiBjYWxsZWQsIGFu
ZCB3ZSBuZWVkIHRvIGNsZWFuIHVwCisgICAgICAgIC8vIHRoZSBwcmludCBtb2RlIGhlcmUuCisg
ICAgICAgIEFTU0VSVChjdXJyZW50T3BlcmF0aW9uID09IG5pbCk7CisgICAgICAgIFtzZWxmIF9l
bmRQcmludE1vZGVdOworICAgIH0KK30KKworLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMg
YXZhaWxhYmxlIGZvciBwcmludGluZworLSAoQk9PTClrbm93c1BhZ2VSYW5nZTooTlNSYW5nZVBv
aW50ZXIpcmFuZ2UKK3sKKyAgICAvLyBNdXN0IGRvIHRoaXMgZXhwbGljaXQgZGlzcGxheSBoZXJl
LCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgdmlldyBtaWdodCByZWRpc3BsYXkgd2hpbGUgdGhlIHBy
aW50CisgICAgLy8gc2hlZXQgd2FzIHVwLCB1c2luZyBwcmludGVyIGZvbnRzIChhbmQgbG9va2lu
ZyBkaWZmZXJlbnQpLgorICAgIFtzZWxmIGRpc3BsYXlJZk5lZWRlZF07CisgICAgW1tzZWxmIHdp
bmRvd10gc2V0QXV0b2Rpc3BsYXk6Tk9dOworICAgIAorICAgIC8vIElmIHdlIGFyZSBhIGZyYW1l
c2V0IGp1c3QgcHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUgb25zY3JlZW4sIG90aGVyd2lz
ZSByZWxheW91dAorICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFwZXIgc2l6ZQorICAgIGZsb2F0
IG1pbkxheW91dFdpZHRoID0gMC4wZjsKKyAgICBmbG9hdCBtYXhMYXlvdXRXaWR0aCA9IDAuMGY7
CisgICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gTk87CisgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJh
bWUtPmRvY3VtZW50KCktPmlzRnJhbWVTZXQoKSkgeworICAgICAgICBmbG9hdCBwYXBlcldpZHRo
ID0gW3NlbGYgX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjpbTlNQcmludE9w
ZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXV07CisgICAgICAgIG1pbkxheW91dFdpZHRoID0gcGFw
ZXJXaWR0aCAqIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcjsKKyAgICAgICAgbWF4TGF5b3V0
V2lkdGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOworICAgIH0K
KyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6bWluTGF5b3V0V2lk
dGggbWF4aW11bVBhZ2VXaWR0aDptYXhMYXlvdXRXaWR0aCBhZGp1c3RWaWV3U2l6ZTpZRVNdOyAv
LyB3aWxsIHJlbGF5b3V0CisgICAgTlNQcmludE9wZXJhdGlvbiAqcHJpbnRPcGVyYXRpb24gPSBb
TlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKKyAgICAvLyBDZXJ0YWluIHR5cGVz
IG9mIGVycm9ycywgaW5jbHVkaW5nIGludmFsaWQgcGFnZSByYW5nZXMsIGNhbiBjYXVzZSBiZWdp
bkRvY3VtZW50IGFuZAorICAgIC8vIGVuZERvY3VtZW50IHRvIGJlIHNraXBwZWQgYWZ0ZXIgd2Un
dmUgcHV0IG91cnNlbHZlcyBpbiBwcmludCBtb2RlIChzZWUgNDE0NTkwNSkuIEluIHRob3NlIGNh
c2VzCisgICAgLy8gd2UgbmVlZCB0byBnZXQgb3V0IG9mIHByaW50IG1vZGUgd2l0aG91dCByZWx5
aW5nIG9uIGFueSBtb3JlIGNhbGxiYWNrcyBmcm9tIHRoZSBwcmludGluZyBtZWNoYW5pc20uCisg
ICAgLy8gSWYgd2UgZ2V0IGFzIGZhciBhcyBiZWdpbkRvY3VtZW50IHdpdGhvdXQgdHJvdWJsZSwg
dGhlbiB0aGlzIGRlbGF5ZWQgcmVxdWVzdCB3aWxsIGJlIGNhbmNlbGxlZC4KKyAgICAvLyBJZiBu
b3QgY2FuY2VsbGVkLCB0aGlzIGRlbGF5ZWQgY2FsbCB3aWxsIGJlIGludm9rZWQgaW4gdGhlIG5l
eHQgcGFzcyB0aHJvdWdoIHRoZSBtYWluIGV2ZW50IGxvb3AsCisgICAgLy8gd2hpY2ggaXMgYWZ0
ZXIgYmVnaW5Eb2N1bWVudCBhbmQgZW5kRG9jdW1lbnQgd291bGQgYmUgY2FsbGVkLgorICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRo
T2JqZWN0OnByaW50T3BlcmF0aW9uIGFmdGVyRGVsYXk6MF07CisgICAgW1tzZWxmIF93ZWJWaWV3
XSBfYWRqdXN0UHJpbnRpbmdNYXJnaW5zRm9ySGVhZGVyQW5kRm9vdGVyXTsKKyAgICAKKyAgICAv
LyBUaGVyZSBpcyBhIHRoZW9yZXRpY2FsIGNoYW5jZSB0aGF0IHNvbWVvbmUgY291bGQgZG8gc29t
ZSBkcmF3aW5nIGJldHdlZW4gaGVyZSBhbmQgZW5kRG9jdW1lbnQsCisgICAgLy8gaWYgc29tZXRo
aW5nIGNhdXNlZCBzZXROZWVkc0Rpc3BsYXkgYWZ0ZXIgdGhpcyBwb2ludC4gSWYgc28sIGl0J3Mg
bm90IGEgYmlnIHRyYWdlZHksIGJlY2F1c2UKKyAgICAvLyB5b3UnZCBzaW1wbHkgc2VlIHRoZSBw
cmludGVyIGZvbnRzIG9uIHNjcmVlbi4gQXMgb2YgdGhpcyB3cml0aW5nLCB0aGlzIGRvZXMgbm90
IGhhcHBlbiB3aXRoIFNhZmFyaS4KKworICAgIHJhbmdlLT5sb2NhdGlvbiA9IDE7CisgICAgZmxv
YXQgdG90YWxTY2FsZUZhY3RvciA9IFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9u
OnByaW50T3BlcmF0aW9uXTsKKyAgICBmbG9hdCB1c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVy
YXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rvcl07CisgICAgW19wcml2YXRlLT5wYWdlUmVj
dHMgcmVsZWFzZV07CisgICAgZmxvYXQgZnVsbFBhZ2VIZWlnaHQgPSBmbG9vcmYoW3NlbGYgX2Nh
bGN1bGF0ZVByaW50SGVpZ2h0XS90b3RhbFNjYWxlRmFjdG9yKTsKKyAgICBOU0FycmF5ICpuZXdQ
YWdlUmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdpZHRo
U2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVpZ2h0
OmZ1bGxQYWdlSGVpZ2h0XTsKKyAgICAKKyAgICAvLyBBcHBLaXQgZ2V0cyBhbGwgbWVzc2VkIHVw
IGlmIHlvdSBnaXZlIGl0IGEgemVyby1sZW5ndGggcGFnZSBjb3VudCAoc2VlIDM1NzYzMzQpLCBz
byBpZiB3ZQorICAgIC8vIGhpdCB0aGF0IGNhc2Ugd2UnbGwgcGFzcyBhbG9uZyBhIGRlZ2VuZXJh
dGUgMSBwaXhlbCBzcXVhcmUgdG8gcHJpbnQuIFRoaXMgd2lsbCBwcmludAorICAgIC8vIGEgYmxh
bmsgcGFnZSAod2l0aCBjb3JyZWN0LWxvb2tpbmcgaGVhZGVyIGFuZCBmb290ZXIgaWYgdGhhdCBv
cHRpb24gaXMgb24pLCB3aGljaCBtYXRjaGVzCisgICAgLy8gdGhlIGJlaGF2aW9yIG9mIElFIGFu
ZCBDYW1pbm8gYXQgbGVhc3QuCisgICAgaWYgKFtuZXdQYWdlUmVjdHMgY291bnRdID09IDApCisg
ICAgICAgIG5ld1BhZ2VSZWN0cyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbTlNWYWx1ZSB2
YWx1ZVdpdGhSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSldXTsKKyAgICBlbHNlIGlmIChbbmV3
UGFnZVJlY3RzIGNvdW50XSA+IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxhc3QgcGFnZSBpcyBh
IHNob3J0IG9ycGhhbiwgdHJ5IGFkanVzdGluZyB0aGUgcHJpbnQgaGVpZ2h0IHNsaWdodGx5IHRv
IHNlZSBpZiB0aGlzIHdpbGwgc3F1ZWV6ZSB0aGUKKyAgICAgICAgLy8gY29udGVudCBvbnRvIG9u
ZSBmZXdlciBwYWdlLiBJZiBpdCBkb2VzLCB1c2UgdGhlIGFkanVzdGVkIHNjYWxlLiBJZiBub3Qs
IHVzZSB0aGUgb3JpZ2luYWwgc2NhbGUuCisgICAgICAgIGZsb2F0IGxhc3RQYWdlSGVpZ2h0ID0g
TlNIZWlnaHQoW1tuZXdQYWdlUmVjdHMgbGFzdE9iamVjdF0gcmVjdFZhbHVlXSk7CisgICAgICAg
IGlmIChsYXN0UGFnZUhlaWdodC9mdWxsUGFnZUhlaWdodCA8IExhc3RQcmludGVkUGFnZU9ycGhh
blJhdGlvKSB7CisgICAgICAgICAgICBOU0FycmF5ICphZGp1c3RlZFBhZ2VSZWN0cyA9IFtbc2Vs
ZiBfZnJhbWVdIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhTY2FsZUZhY3Rvcjp1c2Vy
U2NhbGVGYWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVpZ2h0OmZ1
bGxQYWdlSGVpZ2h0KlByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0bWVudF07CisgICAgICAgICAg
ICAvLyBVc2UgdGhlIGFkanVzdGVkIHJlY3RzIG9ubHkgaWYgdGhlIHBhZ2UgY291bnQgd2VudCBk
b3duCisgICAgICAgICAgICBpZiAoW2FkanVzdGVkUGFnZVJlY3RzIGNvdW50XSA8IFtuZXdQYWdl
UmVjdHMgY291bnRdKSB7CisgICAgICAgICAgICAgICAgbmV3UGFnZVJlY3RzID0gYWRqdXN0ZWRQ
YWdlUmVjdHM7CisgICAgICAgICAgICAgICAgX3ByaXZhdGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4g
PSBZRVM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgX3ByaXZh
dGUtPnBhZ2VSZWN0cyA9IFtuZXdQYWdlUmVjdHMgcmV0YWluXTsKKyAgICAKKyAgICByYW5nZS0+
bGVuZ3RoID0gW19wcml2YXRlLT5wYWdlUmVjdHMgY291bnRdOworICAgIAorICAgIHJldHVybiBZ
RVM7Cit9CisKKy8vIFJldHVybiB0aGUgZHJhd2luZyByZWN0YW5nbGUgZm9yIGEgcGFydGljdWxh
ciBwYWdlIG51bWJlcgorLSAoTlNSZWN0KXJlY3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQorewor
ICAgIHJldHVybiBbW19wcml2YXRlLT5wYWdlUmVjdHMgb2JqZWN0QXRJbmRleDpwYWdlIC0gMV0g
cmVjdFZhbHVlXTsKK30KKworLSAodm9pZClkcmF3UGFnZUJvcmRlcldpdGhTaXplOihOU1NpemUp
Ym9yZGVyU2l6ZQoreworICAgIEFTU0VSVChOU0VxdWFsU2l6ZXMoYm9yZGVyU2l6ZSwgW1tbTlNQ
cmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludEluZm9dIHBhcGVyU2l6ZV0pKTsg
ICAgCisgICAgW1tzZWxmIF93ZWJWaWV3XSBfZHJhd0hlYWRlckFuZEZvb3Rlcl07Cit9CisKKy0g
KHZvaWQpYmVnaW5Eb2N1bWVudAoreworICAgIEB0cnkgeworICAgICAgICAvLyBGcm9tIG5vdyBv
biB3ZSdsbCBnZXQgYSBjaGFuY2UgdG8gY2FsbCBfZW5kUHJpbnRNb2RlIGluIGVpdGhlciBiZWdp
bkRvY3VtZW50IG9yCisgICAgICAgIC8vIGVuZERvY3VtZW50LCBzbyB3ZSBjYW4gY2FuY2VsIHRo
ZSAianVzdCBpbiBjYXNlIiBwZW5kaW5nIGNhbGwuCisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQ
cmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXll
ZEVuZFByaW50TW9kZTopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3Q6W05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl1dOwor
ICAgICAgICBbc3VwZXIgYmVnaW5Eb2N1bWVudF07CisgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9u
ICpsb2NhbEV4Y2VwdGlvbikgeworICAgICAgICAvLyBFeGNlcHRpb24gZHVyaW5nIFtzdXBlciBi
ZWdpbkRvY3VtZW50XSBtZWFucyB0aGF0IGVuZERvY3VtZW50IHdpbGwgbm90IGdldCBjYWxsZWQs
CisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gY2xlYW4gdXAgb3VyICJwcmludCBtb2RlIiBoZXJl
LgorICAgICAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZW5k
RG9jdW1lbnQKK3sKKyAgICBbc3VwZXIgZW5kRG9jdW1lbnRdOworICAgIC8vIE5vdGUgc2FkbHkg
YXQgdGhpcyBwb2ludCBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9T
Y3JlZW5dIGlzIHN0aWxsIE5PIAorICAgIFtzZWxmIF9lbmRQcmludE1vZGVdOworfQorCistICh2
b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2Ug
dGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9v
cCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xk
IG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVu
dCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktp
dCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisg
ICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKKyAgICBCT09M
IGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50
KTsKKworICAgIEJPT0wgY2FsbFN1cGVyID0gTk87CisKKyAgICBbX3ByaXZhdGUtPmtleURvd25F
dmVudCByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFp
bl07CisKKyAgICBCT09MIGNvbXBsZXRpb25Qb3B1cFdhc09wZW4gPSBfcHJpdmF0ZS0+Y29tcENv
bnRyb2xsZXIgJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBwb3B1cFdpbmRvd0lzT3Blbl07
CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFl
dmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmtleUV2ZW50KGV2ZW50KSkgeworICAgICAgICAvLyBXZWJDb3JlIHByb2Nlc3NlZCBh
IGtleSBldmVudCwgYmFpbCBvbiBhbnkgcHJlZXhpc3RpbmcgY29tcGxldGU6IFVJCisgICAgICAg
IGlmIChjb21wbGV0aW9uUG9wdXBXYXNPcGVuKQorICAgICAgICAgICAgW19wcml2YXRlLT5jb21w
Q29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICB9IGVs
c2UgaWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgfHwgIVtfcHJpdmF0ZS0+Y29tcENvbnRy
b2xsZXIgZmlsdGVyS2V5RG93bjpldmVudF0pIHsKKyAgICAgICAgLy8gTm90IGNvbnN1bWVkIGJ5
IGNvbXBsZXRlOiBwb3B1cCB3aW5kb3cKKyAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxl
ciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgY2FsbFN1cGVy
ID0gWUVTOworICAgIH0KKyAgICBpZiAoY2FsbFN1cGVyKQorICAgICAgICBbc3VwZXIga2V5RG93
bjpldmVudF07CisgICAgZWxzZQorICAgICAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3Vz
ZU1vdmVzOllFU107Cit9CisKKy0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKilldmVudAoreworICAg
IC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBy
dW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQg
bWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNp
bmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBh
IHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFp
bl0gYXV0b3JlbGVhc2VdOworCisgICAgQk9PTCBldmVudFdhc1NlbnRUb1dlYkNvcmUgPSAoX3By
aXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7CisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZp
ZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUgJiYgIWV2ZW50V2FzU2VudFRvV2ViQ29y
ZSkKKyAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOwor
ICAgIGVsc2UKKyAgICAgICAgW3N1cGVyIGtleVVwOmV2ZW50XTsKK30KKworLSAodm9pZClmbGFn
c0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhh
dCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwg
YW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9u
ZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBl
dmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBv
ciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKGNvcmVGcmFt
ZSkKKyAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2Fwc0xvY2tTdGF0ZU1heUhh
dmVDaGFuZ2VkKCk7CisgICAgCisgICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVj
dG9yID0gc2VsZjsKKworICAgIHVuc2lnbmVkIHNob3J0IGtleUNvZGUgPSBbZXZlbnQga2V5Q29k
ZV07CisKKyAgICAvL0Rvbid0IG1ha2UgYW4gZXZlbnQgZnJvbSB0aGUgbnVtIGxvY2sgYW5kIGZ1
bmN0aW9uIGtleXMKKyAgICBpZiAoY29yZUZyYW1lICYmIGtleUNvZGUgIT0gMCAmJiBrZXlDb2Rl
ICE9IDEwICYmIGtleUNvZGUgIT0gNjMpIHsKKyAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgICAgIAorICAgIFtzdXBlciBmbGFnc0NoYW5nZWQ6ZXZlbnRdOwor
fQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1
dGVOYW1lCit7CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7CisgICAgICAgIGlkIGFjY1RyZWUgPSBbW3Nl
bGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgICAgICBpZiAoYWNjVHJlZSkKKyAg
ICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6YWNjVHJlZV07CisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5Rm9j
dXNlZFVJRWxlbWVudAoreworICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNz
aWJpbGl0eVRyZWVdOworICAgIGlmIChhY2NUcmVlKQorICAgICAgICByZXR1cm4gW2FjY1RyZWUg
YWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOworICAgIHJldHVybiBzZWxmOworfQorCist
IChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAgIGlkIGFjY1Ry
ZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlmIChhY2NUcmVl
KSB7CisgICAgICAgIE5TUG9pbnQgd2luZG93Q29vcmQgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0
U2NyZWVuVG9CYXNlOnBvaW50XTsKKyAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxp
dHlIaXRUZXN0OltzZWxmIGNvbnZlcnRQb2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdXTsK
KyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50
Rm9yU3VidmlldzooTlNWaWV3ICopc3VidmlldworeworICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYg
X2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlmICghYWNjVHJlZSkKKyAgICAgICAg
cmV0dXJuIHNlbGY7CisgICAgaWQgcGFyZW50ID0gW2FjY1RyZWUgX2FjY2Vzc2liaWxpdHlQYXJl
bnRGb3JTdWJ2aWV3OnN1YnZpZXddOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4g
c2VsZjsKKyAgICByZXR1cm4gcGFyZW50OworfQorCistICh2b2lkKWNlbnRlclNlbGVjdGlvbklu
VmlzaWJsZUFyZWE6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlm
IChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZy
YW1lLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7
Cit9CisKKy0gKE5TRGF0YSAqKV9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVzQXNSVEYKK3sK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFN0cmluZzpAIngiCisgICAgICAgIGF0dHJpYnV0ZXM6Y29yZUZyYW1lID8gY29yZUZyYW1lLT5m
b250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgOiBuaWxdOworICAgIE5TRGF0YSAqZGF0
YSA9IFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkg
ZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgW3N0cmluZyByZWxlYXNlXTsKKyAgICByZXR1
cm4gZGF0YTsKK30KKworLSAoTlNEaWN0aW9uYXJ5ICopX2ZvbnRBdHRyaWJ1dGVzRnJvbUZvbnRQ
YXN0ZWJvYXJkCit7CisgICAgTlNQYXN0ZWJvYXJkICpmb250UGFzdGVib2FyZCA9IFtOU1Bhc3Rl
Ym9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRm9udFBib2FyZF07CisgICAgaWYgKGZvbnRQYXN0
ZWJvYXJkID09IG5pbCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBOU0RhdGEgKmRhdGEgPSBb
Zm9udFBhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNGb250UGJvYXJkVHlwZV07CisgICAgaWYgKGRh
dGEgPT0gbmlsIHx8IFtkYXRhIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAvLyBOU1RleHRWaWV3IGRvZXMgc29tZXRoaW5nIG1vcmUgZWZmaWNpZW50IGJ5IHBhcnNpbmcg
dGhlIGF0dHJpYnV0ZXMgb25seSwgYnV0IHRoYXQncyBub3QgYXZhaWxhYmxlIGluIEFQSS4KKyAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhSVEY6ZGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0gYXV0b3JlbGVhc2Vd
OworICAgIGlmIChzdHJpbmcgPT0gbmlsIHx8IFtzdHJpbmcgbGVuZ3RoXSA9PSAwKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIHJldHVybiBbc3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpO
U01ha2VSYW5nZSgwLCAxKV07Cit9CisKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1w
dHlTdHlsZQoreworICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIGNyZWF0
ZUNTU1N0eWxlRGVjbGFyYXRpb25dOworfQorCistIChOU1N0cmluZyAqKV9jb2xvckFzU3RyaW5n
OihOU0NvbG9yICopY29sb3IKK3sKKyAgICBOU0NvbG9yICpyZ2JDb2xvciA9IFtjb2xvciBjb2xv
clVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKKyAgICAvLyBGSVhN
RTogSWYgY29sb3IgaXMgbm9uLW5pbCBhbmQgcmdiQ29sb3IgaXMgbmlsLCB0aGF0IG1lYW5zIHdl
IGdvdCBzb21lIGtpbmQKKyAgICAvLyBvZiBmYW5jeSBjb2xvciB0aGF0IGNhbid0IGJlIGNvbnZl
cnRlZCB0byBSR0IuIENoYW5naW5nIHRoYXQgdG8gInRyYW5zcGFyZW50IgorICAgIC8vIG1pZ2h0
IG5vdCBiZSBncmVhdCwgYnV0IGl0J3MgcHJvYmFibHkgT0suCisgICAgaWYgKHJnYkNvbG9yID09
IG5pbCkKKyAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJlbnQiOworICAgIGZsb2F0IHIgPSBbcmdi
Q29sb3IgcmVkQ29tcG9uZW50XTsKKyAgICBmbG9hdCBnID0gW3JnYkNvbG9yIGdyZWVuQ29tcG9u
ZW50XTsKKyAgICBmbG9hdCBiID0gW3JnYkNvbG9yIGJsdWVDb21wb25lbnRdOworICAgIGZsb2F0
IGEgPSBbcmdiQ29sb3IgYWxwaGFDb21wb25lbnRdOworICAgIGlmIChhID09IDApCisgICAgICAg
IHJldHVybiBAInRyYW5zcGFyZW50IjsKKyAgICBpZiAociA9PSAwICYmIGcgPT0gMCAmJiBiID09
IDAgJiYgYSA9PSAxKQorICAgICAgICByZXR1cm4gQCJibGFjayI7CisgICAgaWYgKHIgPT0gMSAm
JiBnID09IDEgJiYgYiA9PSAxICYmIGEgPT0gMSkKKyAgICAgICAgcmV0dXJuIEAid2hpdGUiOwor
ICAgIC8vIEZJWE1FOiBMb3RzIG1vcmUgbmFtZWQgY29sb3JzLiBNYXliZSB3ZSBjb3VsZCB1c2Ug
dGhlIHRhYmxlIGluIFdlYkNvcmU/CisgICAgaWYgKGEgPT0gMSkKKyAgICAgICAgcmV0dXJuIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiKCUuMGYsJS4wZiwlLjBmKSIsIHIgKiAyNTUs
IGcgKiAyNTUsIGIgKiAyNTVdOworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAInJnYmEoJS4wZiwlLjBmLCUuMGYsJWYpIiwgciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwg
YV07Cit9CisKKy0gKE5TU3RyaW5nICopX3NoYWRvd0FzU3RyaW5nOihOU1NoYWRvdyAqKXNoYWRv
dworeworICAgIGlmIChzaGFkb3cgPT0gbmlsKQorICAgICAgICByZXR1cm4gQCJub25lIjsKKyAg
ICBOU1NpemUgb2Zmc2V0ID0gW3NoYWRvdyBzaGFkb3dPZmZzZXRdOworICAgIGZsb2F0IGJsdXJS
YWRpdXMgPSBbc2hhZG93IHNoYWRvd0JsdXJSYWRpdXNdOworICAgIGlmIChvZmZzZXQud2lkdGgg
PT0gMCAmJiBvZmZzZXQuaGVpZ2h0ID09IDAgJiYgYmx1clJhZGl1cyA9PSAwKQorICAgICAgICBy
ZXR1cm4gQCJub25lIjsKKyAgICBOU0NvbG9yICpjb2xvciA9IFtzaGFkb3cgc2hhZG93Q29sb3Jd
OworICAgIGlmIChjb2xvciA9PSBuaWwpCisgICAgICAgIHJldHVybiBAIm5vbmUiOworICAgIC8v
IEZJWE1FOiBIYW5kbGUgbm9uLWludGVncmFsIHZhbHVlcyBoZXJlPworICAgIGlmIChibHVyUmFk
aXVzID09IDApCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVA
ICUuMGZweCAlLjBmcHgiLCBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0sIG9mZnNldC53aWR0
aCwgb2Zmc2V0LmhlaWdodF07CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJUAgJS4wZnB4ICUuMGZweCAlLjBmcHgiLCBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0s
IG9mZnNldC53aWR0aCwgb2Zmc2V0LmhlaWdodCwgYmx1clJhZGl1c107Cit9CisKKy0gKERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFy
eSAqKWRpY3Rpb25hcnkKK3sKKyAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtz
ZWxmIF9lbXB0eVN0eWxlXTsKKworICAgIE5TQ29sb3IgKmNvbG9yID0gW2RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgW3N0eWxlIHNl
dEJhY2tncm91bmRDb2xvcjpbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl1dOworCisgICAgTlNG
b250ICpmb250ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
OworICAgIGlmICghZm9udCkgeworICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWlseTpAIkhlbHZl
dGljYSJdOworICAgICAgICBbc3R5bGUgc2V0Rm9udFNpemU6QCIxMnB4Il07CisgICAgICAgIFtz
dHlsZSBzZXRGb250V2VpZ2h0OkAibm9ybWFsIl07CisgICAgICAgIFtzdHlsZSBzZXRGb250U3R5
bGU6QCJub3JtYWwiXTsKKyAgICB9IGVsc2UgeworICAgICAgICBOU0ZvbnRNYW5hZ2VyICpmbSA9
IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyAgICAgICAgLy8gRklYTUU6IE5l
ZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2FudCB0byBoYW5kbGUg
ZmFtaWx5IG5hbWVzCisgICAgICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtlIHNpbmdsZSBxdW90
ZSBvciBiYWNrc2xhc2ggaW4gdGhlaXIgbmFtZXMuCisgICAgICAgIFtzdHlsZSBzZXRGb250RmFt
aWx5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJyVAJyIsIFtmb250IGZhbWlseU5hbWVd
XV07CisgICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiUwLmZweCIsIFtmb250IHBvaW50U2l6ZV1dXTsKKyAgICAgICAgLy8gRklYTUU6IE1hcCB0
byB0aGUgZW50aXJlIHJhbmdlIG9mIENTUyB3ZWlnaHQgdmFsdWVzLgorICAgICAgICBpZiAoW2Zt
IHdlaWdodE9mRm9udDpmb250XSA+PSBNSU5fQk9MRF9XRUlHSFQpCisgICAgICAgICAgICBbc3R5
bGUgc2V0Rm9udFdlaWdodDpAImJvbGQiXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0
eWxlIHNldEZvbnRXZWlnaHQ6QCJub3JtYWwiXTsKKyAgICAgICAgaWYgKFtmbSB0cmFpdHNPZkZv
bnQ6Zm9udF0gJiBOU0l0YWxpY0ZvbnRNYXNrKQorICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRT
dHlsZTpAIml0YWxpYyJdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbc3R5bGUgc2V0Rm9u
dFN0eWxlOkAibm9ybWFsIl07CisgICAgfQorCisgICAgY29sb3IgPSBbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBbc3R5bGUgc2V0
Q29sb3I6Y29sb3IgPyBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0gOiAoTlNTdHJpbmcgKilA
ImJsYWNrIl07CisKKyAgICBOU1NoYWRvdyAqc2hhZG93ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9y
S2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07CisgICAgW3N0eWxlIHNldFRleHRTaGFkb3c6W3Nl
bGYgX3NoYWRvd0FzU3RyaW5nOnNoYWRvd11dOworCisgICAgaW50IHN0cmlrZXRocm91Z2hJbnQg
PSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRl
TmFtZV0gaW50VmFsdWVdOworCisgICAgaW50IHN1cGVyc2NyaXB0SW50ID0gW1tkaWN0aW9uYXJ5
IG9iamVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAg
IGlmIChzdXBlcnNjcmlwdEludCA+IDApCisgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWdu
OkAic3VwZXIiXTsKKyAgICBlbHNlIGlmIChzdXBlcnNjcmlwdEludCA8IDApCisgICAgICAgIFtz
dHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3ViIl07CisgICAgZWxzZQorICAgICAgICBbc3R5bGUg
c2V0VmVydGljYWxBbGlnbjpAImJhc2VsaW5lIl07CisgICAgaW50IHVuZGVybGluZUludCA9IFtb
ZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGlu
dFZhbHVlXTsKKyAgICAvLyBGSVhNRTogVW5kZXJsaW5lIHdpbnMgaGVyZSBpZiB3ZSBoYXZlIGJv
dGggKHNlZSBidWcgMzc5MDQ0MykuCisgICAgaWYgKHN0cmlrZXRocm91Z2hJbnQgPT0gTlNVbmRl
cmxpbmVTdHlsZU5vbmUgJiYgdW5kZXJsaW5lSW50ID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQor
ICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1l
ZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKKyAgICBlbHNlIGlmICh1bmRlcmxp
bmVJbnQgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCisgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0
eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJsaW5lLXRocm91
Z2giIHByaW9yaXR5OkAiIl07CisgICAgZWxzZQorICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6
QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAidW5kZXJsaW5lIiBw
cmlvcml0eTpAIiJdOworCisgICAgcmV0dXJuIHN0eWxlOworfQorCistICh2b2lkKV9hcHBseVN0
eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0Fj
dGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCit7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBs
eVN0eWxlVG9TZWxlY3Rpb24oY29yZShzdHlsZSksIHVuZG9BY3Rpb24pOworfQorCistICh2b2lk
KV9hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCit7CisgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oY29yZShzdHlsZSks
IHVuZG9BY3Rpb24pOworfQorCistIChCT09MKV9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6KE5T
RXZlbnQgKilldmVudAoreworICAgIEFTU0VSVChbc2VsZiBfd2ViVmlld10pOworICAgIGlmICgh
W1tbc2VsZiBfd2ViVmlld10gcHJlZmVyZW5jZXNdIHJlc3BlY3RTdGFuZGFyZFN0eWxlS2V5RXF1
aXZhbGVudHNdKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgaWYgKCFbc2VsZiBfY2Fu
RWRpdF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoKFtldmVudCBtb2RpZmll
ckZsYWdzXSAmIE5TRGV2aWNlSW5kZXBlbmRlbnRNb2RpZmllckZsYWdzTWFzaykgIT0gTlNDb21t
YW5kS2V5TWFzaykKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIE5TU3RyaW5nICpzdHJp
bmcgPSBbZXZlbnQgY2hhcmFjdGVyc107CisgICAgaWYgKFtzdHJpbmcgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZTpAImIiXSA9PSBOU09yZGVyZWRTYW1lKSB7CisgICAgICAgIFtzZWxmIGV4ZWN1dGVD
b3JlQ29tbWFuZEJ5TmFtZToiVG9nZ2xlQm9sZCJdOworICAgICAgICByZXR1cm4gWUVTOworICAg
IH0KKyAgICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaSJdID09IE5TT3Jk
ZXJlZFNhbWUpIHsKKyAgICAgICAgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOiJUb2dn
bGVJdGFsaWMiXTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IE5POworfQorCistIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIGlmIChbc2VsZiBfaGFuZGxlU3R5bGVLZXlF
cXVpdmFsZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBCT09MIGV2
ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsK
KyAgICBCT09MIHJldCA9IE5POworCisgICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFz
ZV07CisgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOworICAgIAor
ICAgIFtzZWxmIHJldGFpbl07CisKKyAgICAvLyBQYXNzIGNvbW1hbmQta2V5IGNvbWJvcyB0aHJv
dWdoIFdlYkNvcmUgaWYgdGhlcmUgaXMgYSBrZXkgYmluZGluZyBhdmFpbGFibGUgZm9yCisgICAg
Ly8gdGhpcyBldmVudC4gVGhpcyBsZXRzIHdlYiBwYWdlcyBoYXZlIGEgY3JhY2sgYXQgaW50ZXJj
ZXB0aW5nIGNvbW1hbmQtbW9kaWZpZWQga2V5cHJlc3Nlcy4KKyAgICAvLyBCdXQgZG9uJ3QgZG8g
aXQgaWYgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGV2ZW50LgorICAgIC8vIFByZXNzaW5n
IEVzYyByZXN1bHRzIGluIGEgZmFrZSBldmVudCBiZWluZyBzZW50IC0gZG9uJ3QgcGFzcyBpdCB0
byBXZWJDb3JlLgorICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGV2ZW50ID09IFtO
U0FwcCBjdXJyZW50RXZlbnRdICYmIHNlbGYgPT0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25k
ZXJdKQorICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAg
ICAgICAgICAgIHJldCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOwor
CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldCA9IFtzdXBlciBwZXJmb3JtS2V5RXF1aXZhbGVu
dDpldmVudF07CisKKyAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAKKyAgICByZXR1cm4gcmV0Owor
fQorCistICh2b2lkKWNvcHlGb250OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VF
CisKKyAgICAvLyBQdXQgUlRGIHdpdGggZm9udCBhdHRyaWJ1dGVzIG9uIHRoZSBwYXN0ZWJvYXJk
LgorICAgIC8vIE1heWJlIGxhdGVyIHdlIHNob3VsZCBhZGQgYSBwYXN0ZWJvYXJkIHR5cGUgdGhh
dCBjb250YWlucyBDU1MgdGV4dCBmb3IgIm5hdGl2ZSIgY29weSBhbmQgcGFzdGUgZm9udC4KKyAg
ICBOU1Bhc3RlYm9hcmQgKmZvbnRQYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJk
V2l0aE5hbWU6TlNGb250UGJvYXJkXTsKKyAgICBbZm9udFBhc3RlYm9hcmQgZGVjbGFyZVR5cGVz
OltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU0ZvbnRQYm9hcmRUeXBlXSBvd25lcjpuaWxdOwor
ICAgIFtmb250UGFzdGVib2FyZCBzZXREYXRhOltzZWxmIF9zZWxlY3Rpb25TdGFydEZvbnRBdHRy
aWJ1dGVzQXNSVEZdIGZvclR5cGU6TlNGb250UGJvYXJkVHlwZV07Cit9CisKKy0gKHZvaWQpcGFz
dGVGb250OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICAvLyBSZWFk
IFJURiB3aXRoIGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBwYXN0ZWJvYXJkLgorICAgIC8vIE1h
eWJlIGxhdGVyIHdlIHNob3VsZCBhZGQgYSBwYXN0ZWJvYXJkIHR5cGUgdGhhdCBjb250YWlucyBD
U1MgdGV4dCBmb3IgIm5hdGl2ZSIgY29weSBhbmQgcGFzdGUgZm9udC4KKyAgICBbc2VsZiBfYXBw
bHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Gb250QXR0cmlidXRlczpbc2VsZiBf
Zm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmRdXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0
aW9uUGFzdGVGb250XTsKK30KKworLSAodm9pZClwYXN0ZUFzUmljaFRleHQ6KGlkKXNlbmRlcgor
eworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIC8vIFNpbmNlIHJpY2ggdGV4dCBhbHdheXMg
YmVhdHMgcGxhaW4gdGV4dCB3aGVuIGJvdGggYXJlIG9uIHRoZSBwYXN0ZWJvYXJkLCBpdCdzIG5v
dAorICAgIC8vIGNsZWFyIGhvdyB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHBsYWluIG9sZCBwYXN0
ZS4KKyAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQ
YXN0ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpOT107Cit9CisKKy0gKE5TRm9udCAqKV9vcmlnaW5h
bEZvbnRBCit7CisgICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0g
Zm9udFdpdGhGYW1pbHk6QCJIZWx2ZXRpY2EiIHRyYWl0czowIHdlaWdodDpTVEFOREFSRF9XRUlH
SFQgc2l6ZToxMC4wZl07Cit9CisKKy0gKE5TRm9udCAqKV9vcmlnaW5hbEZvbnRCCit7CisgICAg
cmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gZm9udFdpdGhGYW1pbHk6
QCJUaW1lcyIgdHJhaXRzOk5TRm9udEl0YWxpY1RyYWl0IHdlaWdodDpTVEFOREFSRF9CT0xEX1dF
SUdIVCBzaXplOjEyLjBmXTsKK30KKworLSAodm9pZClfYWRkVG9TdHlsZTooRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihOU0ZvbnQgKiliCit7
CisgICAgLy8gU2luY2UgdGhlcmUncyBubyB3YXkgdG8gZGlyZWN0bHkgYXNrIE5TRm9udE1hbmFn
ZXIgd2hhdCBzdHlsZSBjaGFuZ2UgaXQncyBnb2luZyB0byBkbworICAgIC8vIHdlIGluc3RlYWQg
cGFzcyB0d28gInNwZWNpbWVuIiBmb250cyB0byBpdCBhbmQgbGV0IGl0IGNoYW5nZSB0aGVtLiBX
ZSB0aGVuIGRlZHVjZSB3aGF0CisgICAgLy8gc3R5bGUgY2hhbmdlIGl0IHdhcyBkb2luZyBieSBs
b29raW5nIGF0IHdoYXQgaGFwcGVuZWQgdG8gZWFjaCBvZiB0aGUgdHdvIGZvbnRzLgorICAgIC8v
IFNvIGlmIGl0IHdhcyBtYWtpbmcgdGhlIHRleHQgYm9sZCwgYm90aCBmb250cyB3aWxsIGJlIGJv
bGQgYWZ0ZXIgdGhlIGZhY3QuCisKKyAgICBpZiAoYSA9PSBuaWwgfHwgYiA9PSBuaWwpCisgICAg
ICAgIHJldHVybjsKKworICAgIE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hh
cmVkRm9udE1hbmFnZXJdOworCisgICAgTlNGb250ICpvYSA9IFtzZWxmIF9vcmlnaW5hbEZvbnRB
XTsKKworICAgIE5TU3RyaW5nICphRmFtaWx5TmFtZSA9IFthIGZhbWlseU5hbWVdOworICAgIE5T
U3RyaW5nICpiRmFtaWx5TmFtZSA9IFtiIGZhbWlseU5hbWVdOworCisgICAgaW50IGFQb2ludFNp
emUgPSAoaW50KVthIHBvaW50U2l6ZV07CisgICAgaW50IGJQb2ludFNpemUgPSAoaW50KVtiIHBv
aW50U2l6ZV07CisKKyAgICBpbnQgYVdlaWdodCA9IFtmbSB3ZWlnaHRPZkZvbnQ6YV07CisgICAg
aW50IGJXZWlnaHQgPSBbZm0gd2VpZ2h0T2ZGb250OmJdOworCisgICAgQk9PTCBhSXNJdGFsaWMg
PSAoW2ZtIHRyYWl0c09mRm9udDphXSAmIE5TSXRhbGljRm9udE1hc2spICE9IDA7CisgICAgQk9P
TCBiSXNJdGFsaWMgPSAoW2ZtIHRyYWl0c09mRm9udDpiXSAmIE5TSXRhbGljRm9udE1hc2spICE9
IDA7CisKKyAgICBpZiAoW2FGYW1pbHlOYW1lIGlzRXF1YWxUb1N0cmluZzpiRmFtaWx5TmFtZV0p
IHsKKyAgICAgICAgTlNTdHJpbmcgKmZhbWlseU5hbWVGb3JDU1MgPSBhRmFtaWx5TmFtZTsKKwor
ICAgICAgICAvLyBUaGUgZmFtaWx5IG5hbWUgbWF5IG5vdCBiZSBzcGVjaWZpYyBlbm91Z2ggdG8g
Z2V0IHVzIHRoZSBmb250IHNwZWNpZmllZC4KKyAgICAgICAgLy8gSW4gc29tZSBjYXNlcywgdGhl
IG9ubHkgd2F5IHRvIGdldCBleGFjdGx5IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHRvIHVz
ZQorICAgICAgICAvLyB0aGUgUG9zdHNjcmlwdCBuYW1lLgorICAgICAgICAKKyAgICAgICAgLy8g
RmluZCB0aGUgZm9udCB0aGUgc2FtZSB3YXkgdGhlIHJlbmRlcmluZyBjb2RlIHdvdWxkIGxhdGVy
IGlmIGl0IGVuY291bnRlcmVkIHRoaXMgQ1NTLgorICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgdHJh
aXRzID0gYUlzSXRhbGljID8gTlNGb250SXRhbGljVHJhaXQgOiAwOworICAgICAgICBOU0ZvbnQg
KmZvdW5kRm9udCA9IFdlYkNvcmVGaW5kRm9udChhRmFtaWx5TmFtZSwgdHJhaXRzLCBhV2VpZ2h0
LCBhUG9pbnRTaXplKTsKKworICAgICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgZm9udCB3aXRo
IHRoZSBzYW1lIFBvc3RzY3JpcHQgbmFtZSwgdGhlbiB3ZSdsbCBoYXZlIHRvIHVzZSB0aGUKKyAg
ICAgICAgLy8gUG9zdHNjcmlwdCBuYW1lIHRvIG1ha2UgdGhlIENTUyBzcGVjaWZpYyBlbm91Z2gu
CisgICAgICAgIGlmICghW1tmb3VuZEZvbnQgZm9udE5hbWVdIGlzRXF1YWxUb1N0cmluZzpbYSBm
b250TmFtZV1dKQorICAgICAgICAgICAgZmFtaWx5TmFtZUZvckNTUyA9IFthIGZvbnROYW1lXTsK
KworICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0ZWQgZXNjYXBpbmcgY29k
ZSBpZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKKyAgICAgICAgLy8gd2l0aCBjaGFy
YWN0ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0aGVpciBuYW1lcy4KKyAg
ICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIn
JUAnIiwgZmFtaWx5TmFtZUZvckNTU11dOworICAgIH0KKworICAgIGludCBzb2EgPSAoaW50KVtv
YSBwb2ludFNpemVdOworICAgIGlmIChhUG9pbnRTaXplID09IGJQb2ludFNpemUpCisgICAgICAg
IFtzdHlsZSBzZXRGb250U2l6ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkcHgiLCBh
UG9pbnRTaXplXV07CisgICAgZWxzZSBpZiAoYVBvaW50U2l6ZSA8IHNvYSkKKyAgICAgICAgW3N0
eWxlIF9zZXRGb250U2l6ZURlbHRhOkAiLTFweCJdOworICAgIGVsc2UgaWYgKGFQb2ludFNpemUg
PiBzb2EpCisgICAgICAgIFtzdHlsZSBfc2V0Rm9udFNpemVEZWx0YTpAIjFweCJdOworCisgICAg
aWYgKGFXZWlnaHQgPT0gYldlaWdodCkKKyAgICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6YVdl
aWdodCA+IE1JTl9CT0xEX1dFSUdIVCA/IEAiYm9sZCIgOiBAIm5vcm1hbCJdOworCisgICAgaWYg
KGFJc0l0YWxpYyA9PSBiSXNJdGFsaWMpCisgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6YUlz
SXRhbGljID8gQCJpdGFsaWMiIDogIEAibm9ybWFsIl07Cit9CisKKy0gKERPTUNTU1N0eWxlRGVj
bGFyYXRpb24gKilfc3R5bGVGcm9tRm9udE1hbmFnZXJPcGVyYXRpb24KK3sKKyAgICBET01DU1NT
dHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKKworICAgIE5TRm9u
dE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworCisgICAg
TlNGb250ICpvYSA9IFtzZWxmIF9vcmlnaW5hbEZvbnRBXTsKKyAgICBOU0ZvbnQgKm9iID0gW3Nl
bGYgX29yaWdpbmFsRm9udEJdOyAgICAKKyAgICBbc2VsZiBfYWRkVG9TdHlsZTpzdHlsZSBmb250
QTpbZm0gY29udmVydEZvbnQ6b2FdIGZvbnRCOltmbSBjb252ZXJ0Rm9udDpvYl1dOworCisgICAg
cmV0dXJuIHN0eWxlOworfQorCistICh2b2lkKWNoYW5nZUZvbnQ6KGlkKXNlbmRlcgoreworICAg
IENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3Nl
bGYgX3N0eWxlRnJvbUZvbnRNYW5hZ2VyT3BlcmF0aW9uXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0
aW9uU2V0Rm9udF07Cit9CisKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGb3JB
dHRyaWJ1dGVDaGFuZ2U6KGlkKXNlbmRlcgoreworICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOworCisgICAgTlNTaGFkb3cgKnNoYWRvdyA9IFtb
TlNTaGFkb3cgYWxsb2NdIGluaXRdOworICAgIFtzaGFkb3cgc2V0U2hhZG93T2Zmc2V0Ok5TTWFr
ZVNpemUoMSwgMSldOworCisgICAgTlNEaWN0aW9uYXJ5ICpvYSA9IFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgW3NlbGYgX29yaWdpbmFsRm9udEFd
LCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLAorICAgICAgICBuaWxdOworICAgIE5TRGljdGlvbmFyeSAq
b2IgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAg
IFtOU0NvbG9yIGJsYWNrQ29sb3JdLCBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCisg
ICAgICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRCXSwgTlNGb250QXR0cmlidXRlTmFtZSwKKyAgICAg
ICAgW05TQ29sb3Igd2hpdGVDb2xvcl0sIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwK
KyAgICAgICAgc2hhZG93LCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsCisgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdLCBOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWUsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OjFdLCBO
U1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0sIE5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1l
LAorICAgICAgICBuaWxdOworCisgICAgW3NoYWRvdyByZWxlYXNlXTsKKworI2lmIDAKKworTlNP
YmxpcXVlbmVzc0F0dHJpYnV0ZU5hbWUgICAgICAgIC8qIGZsb2F0OyBza2V3IHRvIGJlIGFwcGxp
ZWQgdG8gZ2x5cGhzLCBkZWZhdWx0IDA6IG5vIHNrZXcgKi8KKyAgICAvLyBmb250LXN0eWxlLCBi
dXQgdGhhdCBpcyBqdXN0IGFuIG9uLW9mZiBzd2l0Y2gKKworTlNFeHBhbnNpb25BdHRyaWJ1dGVO
YW1lICAgICAgICAgIC8qIGZsb2F0OyBsb2cgb2YgZXhwYW5zaW9uIGZhY3RvciB0byBiZSBhcHBs
aWVkIHRvIGdseXBocywgZGVmYXVsdCAwOiBubyBleHBhbnNpb24gKi8KKyAgICAvLyBmb250LXN0
cmV0Y2g/CisKK05TS2VybkF0dHJpYnV0ZU5hbWUgICAgICAgICAgICAgICAvKiBmbG9hdCwgYW1v
dW50IHRvIG1vZGlmeSBkZWZhdWx0IGtlcm5pbmcsIGlmIDAsIGtlcm5pbmcgb2ZmICovCisgICAg
Ly8gbGV0dGVyLXNwYWNpbmc/IHByb2JhYmx5IG5vdCBnb29kIGVub3VnaAorCitOU1VuZGVybGlu
ZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6IHNhbWUgYXMg
Zm9yZWdyb3VuZCBjb2xvciAqLworTlNTdHJpa2V0aHJvdWdoQ29sb3JBdHRyaWJ1dGVOYW1lIC8q
IE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQgY29sb3IgKi8KKyAgICAv
LyB0ZXh0LWRlY29yYXRpb24tY29sb3I/CisKK05TTGlnYXR1cmVBdHRyaWJ1dGVOYW1lICAgICAg
ICAgICAvKiBpbnQsIGRlZmF1bHQgMTogZGVmYXVsdCBsaWdhdHVyZXMsIDA6IG5vIGxpZ2F0dXJl
cywgMjogYWxsIGxpZ2F0dXJlcyAqLworTlNCYXNlbGluZU9mZnNldEF0dHJpYnV0ZU5hbWUgICAg
IC8qIGZsb2F0LCBpbiBwb2ludHM7IG9mZnNldCBmcm9tIGJhc2VsaW5lLCBkZWZhdWx0IDAgKi8K
K05TU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBmbG9hdCwgaW4gcGVyY2VudCBv
ZiBmb250IHBvaW50IHNpemUsIGRlZmF1bHQgMDogbm8gc3Ryb2tlOyBwb3NpdGl2ZSBmb3Igc3Ry
b2tlIGFsb25lLCBuZWdhdGl2ZSBmb3Igc3Ryb2tlIGFuZCBmaWxsIChhIHR5cGljYWwgdmFsdWUg
Zm9yIG91dGxpbmVkIHRleHQgd291bGQgYmUgMy4wKSAqLworTlNTdHJva2VDb2xvckF0dHJpYnV0
ZU5hbWUgICAgICAgIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQg
Y29sb3IgKi8KKyAgICAvLyBuZWVkIGV4dGVuc2lvbnM/CisKKyNlbmRpZgorICAgIAorICAgIE5T
RGljdGlvbmFyeSAqYSA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0ZXM6b2FdOworICAgIE5TRGlj
dGlvbmFyeSAqYiA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0ZXM6b2JdOworCisgICAgTlNDb2xv
ciAqY2EgPSBbYSBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
KyAgICBOU0NvbG9yICpjYiA9IFtiIG9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOworICAgIGlmIChjYSA9PSBjYikgeworICAgICAgICBbc3R5bGUgc2V0QmFja2dy
b3VuZENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNhXV07CisgICAgfQorCisgICAgW3NlbGYg
X2FkZFRvU3R5bGU6c3R5bGUgZm9udEE6W2Egb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdIGZvbnRCOltiIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXV07CisKKyAgICBj
YSA9IFthIG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAg
IGNiID0gW2Igb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Cisg
ICAgaWYgKGNhID09IGNiKSB7CisgICAgICAgIFtzdHlsZSBzZXRDb2xvcjpbc2VsZiBfY29sb3JB
c1N0cmluZzpjYV1dOworICAgIH0KKworICAgIE5TU2hhZG93ICpzaGEgPSBbYSBvYmplY3RGb3JL
ZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoc2hhKQorICAgICAgICBbc3R5bGUg
c2V0VGV4dFNoYWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6c2hhXV07CisgICAgZWxzZSBpZiAo
W2Igb2JqZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV0gPT0gbmlsKQorICAgICAgICBb
c3R5bGUgc2V0VGV4dFNoYWRvdzpAIm5vbmUiXTsKKworICAgIGludCBzYSA9IFtbYSBvYmplY3RG
b3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAg
aW50IHNiID0gW1tiIG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5h
bWVdIGludFZhbHVlXTsKKyAgICBpZiAoc2EgPT0gc2IpIHsKKyAgICAgICAgaWYgKHNhID09IE5T
VW5kZXJsaW5lU3R5bGVOb25lKQorICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWto
dG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHByaW9yaXR5OkAi
Il07IAorICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gIm5vIGxpbmUtdGhyb3VnaCIgcmF0
aGVyIHRoYW4gIm5vbmUiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9w
ZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJsaW5lLXRo
cm91Z2giIHByaW9yaXR5OkAiIl07CisgICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAiYWRk
IGxpbmUtdGhyb3VnaCIgcmF0aGVyIHRoYW4gImxpbmUtdGhyb3VnaCIKKyAgICB9CisKKyAgICBz
YSA9IFtbYSBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludFZhbHVl
XTsKKyAgICBzYiA9IFtbYiBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVd
IGludFZhbHVlXTsKKyAgICBpZiAoc2EgPT0gc2IpIHsKKyAgICAgICAgaWYgKHNhID4gMCkKKyAg
ICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3VwZXIiXTsKKyAgICAgICAgZWxz
ZSBpZiAoc2EgPCAwKQorICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdWIi
XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJi
YXNlbGluZSJdOworICAgIH0KKworICAgIGludCB1YSA9IFtbYSBvYmplY3RGb3JLZXk6TlNVbmRl
cmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKKyAgICBpbnQgdWIgPSBbW2Igb2Jq
ZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAg
aWYgKHVhID09IHViKSB7CisgICAgICAgIGlmICh1YSA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkK
KyAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25z
LWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOworICAgICAgICAgICAgLy8g
d2UgcmVhbGx5IG1lYW4gIm5vIHVuZGVybGluZSIgcmF0aGVyIHRoYW4gIm5vbmUiCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29y
YXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRlcmxpbmUiIHByaW9yaXR5OkAiIl07CisgICAg
ICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAiYWRkIHVuZGVybGluZSIgcmF0aGVyIHRoYW4gInVu
ZGVybGluZSIKKyAgICB9CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKKy0gKHZvaWQpY2hhbmdl
QXR0cmlidXRlczooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3Nl
bGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGb3JBdHRyaWJ1dGVDaGFuZ2U6
c2VuZGVyXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlc107Cit9CisK
Ky0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxl
Y3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUg
PSBbc2VsZiBfZW1wdHlTdHlsZV07CisKKyAgICBBU1NFUlQoW3N0eWxlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpzZWxlY3Rvcl0pOworICAgIFtzdHlsZSBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0
aE9iamVjdDpbc2VsZiBfY29sb3JBc1N0cmluZzpbW05TQ29sb3JQYW5lbCBzaGFyZWRDb2xvclBh
bmVsXSBjb2xvcl1dXTsKKyAgICAKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKKy0gKEVkaXRBY3Rp
b24pX3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7
CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KSkKKyAg
ICAgICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRCYWNrZ3JvdW5kQ29sb3I7ICAgIAorICAgIHJldHVy
biBFZGl0QWN0aW9uU2V0Q29sb3I7Cit9CisKKy0gKHZvaWQpX2NoYW5nZUNTU0NvbG9yVXNpbmdT
ZWxlY3RvcjooU0VMKXNlbGVjdG9yIGluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKK3sKKyAgICBE
T01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9zdHlsZUZyb21Db2xvclBhbmVs
V2l0aFNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dl
YlZpZXddOworICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
Vmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6
cmFuZ2VdKQorICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpCisgICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBseVN0eWxlKGNvcmUoc3R5
bGUpLCBbc2VsZiBfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9y
XSk7Cit9CisKKy0gKHZvaWQpY2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6KGlkKXNlbmRl
cgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIC8vIE1pbWlja2luZyBOU1RleHRWaWV3
LCB0aGlzIG1ldGhvZCBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUKKyAgICAvLyBl
bnRpcmUgZG9jdW1lbnQuIFRoZXJlIGlzIG5vIE5TVGV4dFZpZXcgQVBJIGZvciBzZXR0aW5nIHRo
ZSBiYWNrZ3JvdW5kCisgICAgLy8gY29sb3Igb24gdGhlIHNlbGVjdGVkIHJhbmdlIG9ubHkuIE5v
dGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkKKyAgICAvLyBuZXZlciBjYWxsZWQgZnJv
bSB0aGUgVUkgKHNlZSBjb21tZW50IGluIGNoYW5nZUNvbG9yOikuCisgICAgLy8gRklYTUU6IHRo
aXMgYWN0dWFsbHkgaGFzIG5vIGVmZmVjdCB3aGVuIGNhbGxlZCwgcHJvYmFibHkgZHVlIHRvIDM2
NTQ4NTAuIF9kb2N1bWVudFJhbmdlIHNlZW1zCisgICAgLy8gdG8gZG8gdGhlIHJpZ2h0IHRoaW5n
IGJlY2F1c2UgaXQgd29ya3MgaW4gc3RhcnRTcGVha2luZzosIGFuZCBJIGtub3cgc2V0QmFja2dy
b3VuZENvbG9yOiBkb2VzIHRoZQorICAgIC8vIHJpZ2h0IHRoaW5nIGJlY2F1c2UgSSB0ZXN0ZWQg
aXQgd2l0aCBbc2VsZiBfc2VsZWN0ZWRSYW5nZV0uCisgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qg
YWN0dWFsbHkgYXBwbHkgdGhlIHN0eWxlIHRvIHRoZSBlbnRpcmUgcmFuZ2UgaGVyZSwgYmVjYXVz
ZSBpdCBlbmRzIHVwIGNhbGxpbmcKKyAgICAvLyBbZnJhbWUgX2FwcGx5U3R5bGU6XSwgd2hpY2gg
b3BlcmF0ZXMgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBUbyBtYWtlIHRoaXMgd29yayByaWdo
dCwgd2UnbGwKKyAgICAvLyBuZWVkIHRvIHNhdmUgb2ZmIHRoZSBzZWxlY3Rpb24sIHRlbXBvcmFy
aWx5IHNldCBpdCB0byB0aGUgZW50aXJlIHJhbmdlLCBtYWtlIHRoZSBjaGFuZ2UsIHRoZW4KKyAg
ICAvLyByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uLgorICAgIFtzZWxmIF9jaGFuZ2VDU1NDb2xv
clVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xvcjopIGluUmFuZ2U6W3Nl
bGYgX2RvY3VtZW50UmFuZ2VdXTsKK30KKworLSAodm9pZCljaGFuZ2VDb2xvcjooaWQpc2VuZGVy
Cit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gRklYTUU6IGluIE5TVGV4dFZpZXcs
IHRoaXMgbWV0aG9kIGNhbGxzIGNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOiB3aGVuIGEK
KyAgICAvLyBwcml2YXRlIGNhbGwgaGFzIGVhcmxpZXIgYmVlbiBtYWRlIGJ5IFtOU0ZvbnRGb250
RWZmZWN0c0JveCBjaGFuZ2VDb2xvcjpdLCBzZWUgMzY3NDQ5My4gCisgICAgLy8gQXBwS2l0IHdp
bGwgaGF2ZSB0byBiZSByZXZpc2VkIHRvIGFsbG93IHRoaXMgdG8gd29yayB3aXRoIGFueXRoaW5n
IHRoYXQgaXNuJ3QgYW4gCisgICAgLy8gTlNUZXh0Vmlldy4gSG93ZXZlciwgdGhpcyBtaWdodCBu
b3QgYmUgcmVxdWlyZWQgZm9yIFRpZ2VyLCBzaW5jZSB0aGUgYmFja2dyb3VuZC1jb2xvciAKKyAg
ICAvLyBjaGFuZ2luZyBib3ggaW4gdGhlIGZvbnQgcGFuZWwgZG9lc24ndCB3b3JrIGluIE1haWwg
KDM2NzQ0ODEpLCB0aG91Z2ggaXQgZG9lcyBpbiBUZXh0RWRpdC4KKyAgICBbc2VsZiBfYXBwbHlT
dHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOkBz
ZWxlY3RvcihzZXRDb2xvcjopXSAKKyAgICAgICAgICAgICAgICAgIHdpdGhVbmRvQWN0aW9uOkVk
aXRBY3Rpb25TZXRDb2xvcl07Cit9CisKKy0gKHZvaWQpX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVj
dG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAgICBbc2Vs
ZiBzZWxlY3RXb3JkOm5pbF07CisgICAgTlNTdHJpbmcgKndvcmQgPSBbW2ZyYW1lIF9zZWxlY3Rl
ZFN0cmluZ10gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICAvLyBGSVhNRTogRG9lcyB0
aGlzIG5lZWQgYSBkaWZmZXJlbnQgYWN0aW9uIGNvbnRleHQgb3RoZXIgdGhhbiAidHlwZWQiPwor
ICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OndvcmQgZ2l2ZW5B
Y3Rpb246V2ViVmlld0luc2VydEFjdGlvblR5cGVkXSkKKyAgICAgICAgW2ZyYW1lIF9yZXBsYWNl
U2VsZWN0aW9uV2l0aFRleHQ6d29yZCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6
Tk9dOworfQorCistICh2b2lkKXVwcGVyY2FzZVdvcmQ6KGlkKXNlbmRlcgoreworICAgIENPTU1B
TkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2Vs
ZWN0b3IodXBwZXJjYXNlU3RyaW5nKV07Cit9CisKKy0gKHZvaWQpbG93ZXJjYXNlV29yZDooaWQp
c2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZVdvcmRD
YXNlV2l0aFNlbGVjdG9yOkBzZWxlY3Rvcihsb3dlcmNhc2VTdHJpbmcpXTsKK30KKworLSAodm9p
ZCljYXBpdGFsaXplV29yZDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisg
ICAgW3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBzZWxlY3RvcihjYXBpdGFsaXpl
ZFN0cmluZyldOworfQorCistICh2b2lkKWNvbXBsZXRlOihpZClzZW5kZXIKK3sKKyAgICBDT01N
QU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyKQorICAgICAgICBfcHJpdmF0ZS0+
Y29tcENvbnRyb2xsZXIgPSBbW1dlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgYWxsb2NdIGluaXRX
aXRoSFRNTFZpZXc6c2VsZl07CisgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBkb0NvbXBs
ZXRpb25dOworfQorCistICh2b2lkKWNoZWNrU3BlbGxpbmc6KGlkKXNlbmRlcgoreworICAgIENP
TU1BTkRfUFJPTE9HVUUKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKCk7Cit9CisKKy0gKHZvaWQpc2hvd0d1ZXNzUGFuZWw6KGlkKXNlbmRlcgoreworICAg
IENPTU1BTkRfUFJPTE9HVUUKKworICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3Bl
bGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CisgICAgaWYgKCFjaGVja2VyKSB7CisgICAg
ICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBOU1BhbmVsICpzcGVsbGluZ1BhbmVsID0gW2NoZWNrZXIgc3BlbGxpbmdQ
YW5lbF07CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gUG9zdC1UaWdlciwgdGhp
cyBtZW51IGl0ZW0gaXMgYSBzaG93L2hpZGUgdG9nZ2xlLCB0byBtYXRjaCBBcHBLaXQuIExlYXZl
IFRpZ2VyIGJlaGF2aW9yIGFsb25lCisgICAgLy8gdG8gbWF0Y2ggcmVzdCBvZiBPUyBYLgorICAg
IGlmIChbc3BlbGxpbmdQYW5lbCBpc1Zpc2libGVdKSB7CisgICAgICAgIFtzcGVsbGluZ1BhbmVs
IG9yZGVyT3V0OnNlbmRlcl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAK
KyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAg
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyh0cnVlKTsKKyAg
ICBbc3BlbGxpbmdQYW5lbCBvcmRlckZyb250OnNlbmRlcl07Cit9CisKKy0gKHZvaWQpX2NoYW5n
ZVNwZWxsaW5nVG9Xb3JkOihOU1N0cmluZyAqKW5ld1dvcmQKK3sKKyAgICBpZiAoIVtzZWxmIF9j
YW5FZGl0XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG9uJ3QgY29ycmVjdCB0byBlbXB0
eSBzdHJpbmcuICAoQXBwS2l0IGNoZWNrZWQgdGhpcywgd2UgbWlnaHQgYXMgd2VsbCB0b28uKQor
ICAgIGlmICghW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0pIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChbbmV3V29yZCBpc0VxdWFsVG9TdHJpbmc6QCIiXSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3
V29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKKyAgICAgICAgW1tz
ZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3JkIHNlbGVjdFJlcGxh
Y2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworfQorCistICh2b2lkKWNoYW5nZVNwZWxsaW5n
OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBbc2VsZiBfY2hhbmdl
U3BlbGxpbmdUb1dvcmQ6W1tzZW5kZXIgc2VsZWN0ZWRDZWxsXSBzdHJpbmdWYWx1ZV1dOworfQor
CistICh2b2lkKXBlcmZvcm1GaW5kUGFuZWxBY3Rpb246KGlkKXNlbmRlcgoreworICAgIENPTU1B
TkRfUFJPTE9HVUUKKworICAgIC8vIEltcGxlbWVudGluZyB0aGlzIHdpbGwgcHJvYmFibHkgcmVx
dWlyZSBjb3B5aW5nIGFsbCBvZiBOU0ZpbmRQYW5lbC5oIGFuZCAubS4KKyAgICAvLyBXZSBuZWVk
ICphbG1vc3QqIHRoZSBzYW1lIHRoaW5nIGFzIEFwcEtpdCwgYnV0IG5vdCBxdWl0ZS4KKyAgICBM
T0dfRVJST1IoInVuaW1wbGVtZW50ZWQiKTsKK30KKworLSAodm9pZClzdGFydFNwZWFraW5nOihp
ZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBXZWJGcmFtZSAqZnJhbWUg
PSBbc2VsZiBfZnJhbWVdOworICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9zZWxlY3RlZFJh
bmdlXTsKKyAgICBpZiAoIXJhbmdlIHx8IFtyYW5nZSBjb2xsYXBzZWRdKQorICAgICAgICByYW5n
ZSA9IFtzZWxmIF9kb2N1bWVudFJhbmdlXTsKKyAgICBbTlNBcHAgc3BlYWtTdHJpbmc6W2ZyYW1l
IF9zdHJpbmdGb3JSYW5nZTpyYW5nZV1dOworfQorCistICh2b2lkKXN0b3BTcGVha2luZzooaWQp
c2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW05TQXBwIHN0b3BTcGVha2lu
ZzpzZW5kZXJdOworfQorCistICh2b2lkKXRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0aW9uOihpZClz
ZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0
XSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlv
bjsKKyAgICBzd2l0Y2ggKGNvcmVGcmFtZS0+YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rp
b25TdGFydCgpKSB7CisgICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdo
dFRvTGVmdDoKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVj
dGlvbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBUaGUgd3JpdGluZ0RpcmVjdGlv
bkZvclNlbGVjdGlvblN0YXJ0IG1ldGhvZCB3aWxsIG5ldmVyIHJldHVybiAibmF0dXJhbCIuIEl0
CisgICAgICAgIC8vIHdpbGwgYWx3YXlzIHJldHVybiBhIGNvbmNyZXRlIGRpcmVjdGlvbi4gU28s
IGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5LCBhbmQgYXNzZXJ0IG5vdCByZWFjaGVkLgorICAgICAg
ICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0
b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9uKTsKK30KKworLSAodm9pZClj
aGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9M
T0dVRQorCisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PE5T
V3JpdGluZ0RpcmVjdGlvbj4oW3NlbmRlciB0YWddKTsKKyAgICAKKyAgICAvLyBXZSBkaXNhYmxl
IHRoZSBtZW51IGl0ZW0gdGhhdCBwZXJmb3JtcyB0aGlzIGFjdGlvbiBiZWNhdXNlIHdlIGNhbid0
IGltcGxlbWVudAorICAgIC8vIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwncyBiZWhhdmlvciB1
c2luZyBDU1MuCisgICAgQVNTRVJUKHdyaXRpbmdEaXJlY3Rpb24gIT0gTlNXcml0aW5nRGlyZWN0
aW9uTmF0dXJhbCk7CisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJhc2VXcml0aW5nRGlyZWN0
aW9uKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyBM
ZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb24p
OworfQorCitzdGF0aWMgQk9PTCB3cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFbmFibGVkKCkK
K3sKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICByZXR1cm4gWUVTOworI2Vsc2UKKyAgICBOU1VzZXJEZWZhdWx0cyAq
ZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIHJl
dHVybiBbZGVmYXVsdHMgYm9vbEZvcktleTpAIk5TQWxsb3dzQmFzZVdyaXRpbmdEaXJlY3Rpb25L
ZXlCaW5kaW5ncyJdIHx8IFtkZWZhdWx0cyBib29sRm9yS2V5OkAiQXBwbGVUZXh0RGlyZWN0aW9u
Il07CisjZW5kaWYKK30KKworLSAodm9pZClfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25Ubzoo
TlNXcml0aW5nRGlyZWN0aW9uKWRpcmVjdGlvbgoreworICAgIGlmICghW3NlbGYgX2NhbkVkaXRd
KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgQk9PTCBiaW5kaW5nc0VuYWJsZWQgPSB3
cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFbmFibGVkKCk7CisKKyAgICBpZiAoIWJpbmRpbmdz
RW5hYmxlZCkgeworICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAg
Y29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9uID09
IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0
aW9uIDogUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsKK30KKworLSAodm9pZCltYWtlQmFz
ZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9Q
Uk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86TlNXcml0
aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHRdOworfQorCistICh2b2lkKW1ha2VCYXNlV3JpdGluZ0Rp
cmVjdGlvblJpZ2h0VG9MZWZ0OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisK
KyAgICBbc2VsZiBfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzpOU1dyaXRpbmdEaXJlY3Rp
b25SaWdodFRvTGVmdF07Cit9CisKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCistICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGly
ZWN0aW9uVG9MVFI6KGlkKXNlbmRlcgoreworICAgIFtzZWxmIG1ha2VCYXNlV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OnNlbmRlcl07Cit9CisKKy0gKHZvaWQpY2hhbmdlQmFzZVdyaXRpbmdE
aXJlY3Rpb25Ub1JUTDooaWQpc2VuZGVyCit7CisgICAgW3NlbGYgbWFrZUJhc2VXcml0aW5nRGly
ZWN0aW9uUmlnaHRUb0xlZnQ6c2VuZGVyXTsKK30KKyNlbmRpZgorCistICh2b2lkKW1ha2VCYXNl
V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6KGlkKXNlbmRlcgoreworICAgIExPR19FUlJPUigiU2Vu
dCBmcm9tICVALiIsIHNlbmRlcik7Cit9CisKKyNpZiAwCisKKy8vIENTUyBkb2VzIG5vdCBoYXZl
IGEgd2F5IHRvIHNwZWNpZnkgYW4gb3V0bGluZSBmb250LCB3aGljaCBtYXkgbWFrZSB0aGlzIGRp
ZmZpY3VsdCB0byBpbXBsZW1lbnQuCisvLyBNYXliZSBhIHNwZWNpYWwgY2FzZSBvZiB0ZXh0LXNo
YWRvdz8KKy0gKHZvaWQpb3V0bGluZTooaWQpc2VuZGVyOworCisvLyBUaGlzIGlzIHBhcnQgb2Yg
dGFibGUgc3VwcG9ydCwgd2hpY2ggbWF5IGJlIGluIE5TVGV4dFZpZXcgZm9yIFRpZ2VyLgorLy8g
SXQncyBwcm9iYWJseSBzaW1wbGUgdG8gZG8gdGhlIGVxdWl2YWxlbnQgdGhpbmcgZm9yIFdlYktp
dC4KKy0gKHZvaWQpaW5zZXJ0VGFibGU6KGlkKXNlbmRlcjsKKworLy8gVGhpcyBjb3VsZCBiZSBp
bXBvcnRhbnQuCistICh2b2lkKXRvZ2dsZVRyYWRpdGlvbmFsQ2hhcmFjdGVyU2hhcGU6KGlkKXNl
bmRlcjsKKworLy8gSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGVxdWl2YWxlbnRzIG9mIHRoZXNlIGlu
IHRoZSB3ZWIgd29ybGQgYXJlLgorLSAodm9pZClpbnNlcnRMaW5lU2VwYXJhdG9yOihpZClzZW5k
ZXI7CistICh2b2lkKWluc2VydFBhZ2VCcmVhazooaWQpc2VuZGVyOworCisvLyBUaGVzZSBtZXRo
b2RzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gTlNUZXh0VmlldyB5ZXQgYXQgdGhlIHRpbWUgb2Yg
dGhpcyB3cml0aW5nLgorLSAodm9pZCljaGFuZ2VDYXNlT2ZMZXR0ZXI6KGlkKXNlbmRlcjsKKy0g
KHZvaWQpdHJhbnNwb3NlV29yZHM6KGlkKXNlbmRlcjsKKworI2VuZGlmCisKKyNpZm5kZWYgQlVJ
TERJTkdfT05fVElHRVIKKworLy8gT3ZlcnJpZGUgdGhpcyBzbyB0aGF0IEFwcEtpdCB3aWxsIHNl
bmQgdXMgYXJyb3cga2V5cyBhcyBrZXkgZG93biBldmVudHMgc28gd2UgY2FuCisvLyBzdXBwb3J0
IHRoZW0gdmlhIHRoZSBrZXkgYmluZGluZ3MgbWVjaGFuaXNtLgorLSAoQk9PTClfd2FudHNLZXlE
b3duRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGJvb2wgaGF2ZVdlYkNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgZnJhbWUsIG91
ciBrZXlEb3duIG1ldGhvZCB3aWxsIGhhbmRsZSBrZXkgYmluZGluZ3MgYWZ0ZXIgc2VuZGluZwor
ICAgIC8vIHRoZSBldmVudCB0aHJvdWdoIHRoZSBET00sIHNvIGFzayBBcHBLaXQgbm90IHRvIGRv
IGl0cyBlYXJseSBzcGVjaWFsIGtleSBiaW5kaW5nCisgICAgLy8gbWFwcGluZy4gSWYgd2UgZG9u
J3QgaGF2ZSBhIGZyYW1lLCBqdXN0IGxldCB0aGluZ3Mgd29yayB0aGUgbm9ybWFsIHdheSB3aXRo
b3V0CisgICAgLy8gYSBrZXlEb3duLgorICAgIHJldHVybiBoYXZlV2ViQ29yZUZyYW1lOworfQor
CisjZWxzZQorCisvLyBTdXBlci1oYWNrIGFsZXJ0LgorLy8gQWxsIHRoaXMgY29kZSBhY2NvbXBs
aXNoZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIF93YW50c0tleURvd25Gb3JFdmVudCBtZXRob2Qg
YWJvdmUuCisKKy8vIFJldHVybnMgYSBzZWxlY3RvciBvbmx5IGlmIGNhbGxlZCB3aGlsZToKKy8v
ICAgMSkgZmlyc3QgcmVzcG9uZGVyIGlzIHNlbGYKKy8vICAgMikgaGFuZGxpbmcgYSBrZXkgZG93
biBldmVudAorLy8gICAzKSBub3QgeWV0IGluc2lkZSBrZXlEb3duOiBtZXRob2QKKy8vICAgNCkg
a2V5IGlzIGFuIGFycm93IGtleQorLy8gVGhlIHNlbGVjdG9yIGlzIHRoZSBvbmUgdGhhdCBnZXRz
IHNlbnQgYnkgLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJkVUlLZXldIGZvciB0aGlzIGtleS4K
Ky0gKFNFTClfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZworeworICAg
IE5TV2luZG93ICp3ID0gW3NlbGYgd2luZG93XTsKKyAgICBpZiAoW3cgZmlyc3RSZXNwb25kZXJd
ICE9IHNlbGYpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIE5TRXZlbnQgKmUgPSBbdyBjdXJy
ZW50RXZlbnRdOworICAgIGlmIChbZSB0eXBlXSAhPSBOU0tleURvd24pCisgICAgICAgIHJldHVy
biBOVUxMOworICAgIGlmIChlID09IF9wcml2YXRlLT5rZXlEb3duRXZlbnQpCisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIE5TU3RyaW5nICpzID0gW2UgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzXTsKKyAgICBpZiAoW3MgbGVuZ3RoXSA9PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICBzd2l0Y2ggKFtzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKKyAgICAgICAgY2FzZSBOU0Rvd25B
cnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlRG93bjop
OworICAgICAgICBjYXNlIE5TTGVmdEFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICByZXR1
cm4gQHNlbGVjdG9yKG1vdmVMZWZ0Oik7CisgICAgICAgIGNhc2UgTlNSaWdodEFycm93RnVuY3Rp
b25LZXk6CisgICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVSaWdodDopOworICAgICAg
ICBjYXNlIE5TVXBBcnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rv
cihtb3ZlVXA6KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KK30KKworLy8gUmV0dXJucyBOTyBpbnN0ZWFkIG9mIFlFUyBpZiBjYWxsZWQgb24gdGhl
IHNlbGVjdG9yIHRoYXQgdGhlCisvLyBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJv
Y2Vzc2luZyBtZXRob2QgcmV0dXJucy4KKy8vIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGluc2lk
ZSAtW05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0sCisvLyBhbmQgdG9nZXRoZXIgd2l0
aCB0aGUgY2hhbmdlIGJlbG93IHNob3VsZCBjYXVzZSB0aGF0IG1ldGhvZAorLy8gdG8gcmV0dXJu
IE5PIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBrZXkuCisvLyBBbHNvIHNldCBhIDEtc2hvdCBm
bGFnIGZvciB0aGUgbmV4dFJlc3BvbmRlciBjaGVjayBiZWxvdy4KKy0gKEJPT0wpcmVzcG9uZHNU
b1NlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoIVtzdXBlciByZXNwb25kc1RvU2Vs
ZWN0b3I6c2VsZWN0b3JdKQorICAgICAgICByZXR1cm4gTk87CisgICAgU0VMIGFycm93S2V5U2Vs
ZWN0b3IgPSBbc2VsZiBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZ107
CisgICAgaWYgKHNlbGVjdG9yICE9IGFycm93S2V5U2VsZWN0b3IpCisgICAgICAgIHJldHVybiBZ
RVM7CisgICAgX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2UgPSBZRVM7CisgICAg
cmV0dXJuIE5POworfQorCisvLyBSZXR1cm5zIG5pbCBpbnN0ZWFkIG9mIHRoZSBuZXh0IHJlc3Bv
bmRlciBpZiBjYWxsZWQgd2hlbiB0aGUKKy8vIG9uZS1zaG90IGZsYWcgaXMgc2V0LCBhbmQgX2Fy
cm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcKKy8vIHJldHVybnMgc29tZXRo
aW5nIG90aGVyIHRoYW4gTlVMTC4gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW5zaWRlCisvLyAt
W05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0gYW5kIHRvZ2V0aGVyIHdpdGggdGhlIGNo
YW5nZSBhYm92ZQorLy8gc2hvdWxkIGNhdXNlIHRoYXQgbWV0aG9kIHRvIHJldHVybiBOTyByYXRo
ZXIgdGhhbiBoYW5kbGluZyB0aGUga2V5LgorLSAoTlNSZXNwb25kZXIgKiluZXh0UmVzcG9uZGVy
Cit7CisgICAgQk9PTCBkaXNhYmxlZCA9IF9wcml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRP
bmNlOworICAgIF9wcml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlID0gTk87CisgICAg
aWYgKGRpc2FibGVkICYmIFtzZWxmIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9j
ZXNzaW5nXSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbc3VwZXIg
bmV4dFJlc3BvbmRlcl07Cit9CisKKyNlbmRpZgorCistICh2b2lkKV91cGRhdGVDb250cm9sVGlu
dHMKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmll
dygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIHZpZXctPnVwZGF0ZUNv
bnRyb2xUaW50cygpOworfQorCisvLyBEZXNwaXRlIGl0cyBuYW1lLCB0aGlzIGlzIGNhbGxlZCBh
dCBkaWZmZXJlbnQgdGltZXMgdGhhbiB3aW5kb3dEaWRCZWNvbWVLZXkgaXMuCisvLyBJdCB0YWtl
cyBpbnRvIGFjY291bnQgYWxsIHRoZSBvdGhlciBmYWN0b3JzIHRoYXQgZGV0ZXJtaW5lIHdoZW4g
TlNDZWxsIGRyYXdzCisvLyB3aXRoIGRpZmZlcmVudCB0aW50cywgc28gaXQncyB0aGUgcmlnaHQg
Y2FsbCB0byB1c2UgZm9yIGNvbnRyb2wgdGludHMuIFdlJ2QgcHJlZmVyCisvLyB0byBkbyB0aGlz
IHdpdGggQVBJLiA8cmRhcjovL3Byb2JsZW0vNTEzNjc2MD4KKy0gKHZvaWQpX3dpbmRvd0NoYW5n
ZWRLZXlTdGF0ZQoreworICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkKKyAgICAgICAgW3NlbGYg
X3VwZGF0ZUNvbnRyb2xUaW50c107CisgICAgZWxzZQorICAgICAgICBbc2VsZiBwZXJmb3JtU2Vs
ZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKF91cGRhdGVDb250cm9sVGludHMpIHdpdGhPYmpl
Y3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9dOworCisgICAgW3N1cGVyIF93aW5kb3dDaGFuZ2VkS2V5
U3RhdGVdOworfQorCistICh2b2lkKW90aGVyTW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sK
KyAgICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKKyAgICAgICAgW3NlbGYgbW91c2VE
b3duOmV2ZW50XTsKKyAgICBlbHNlCisgICAgICAgIFtzdXBlciBvdGhlck1vdXNlRG93bjpldmVu
dF07Cit9CisKKy0gKHZvaWQpb3RoZXJNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAorewor
ICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQorICAgICAgICBbc2VsZiBtb3VzZURy
YWdnZWQ6ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAgW3N1cGVyIG90aGVyTW91c2VEcmFnZ2Vk
OmV2ZW50XTsKK30KKworLSAodm9pZClvdGhlck1vdXNlVXA6KE5TRXZlbnQgKilldmVudAorewor
ICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQorICAgICAgICBbc2VsZiBtb3VzZVVw
OmV2ZW50XTsKKyAgICBlbHNlCisgICAgICAgIFtzdXBlciBvdGhlck1vdXNlVXA6ZXZlbnRdOwor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU0FycmF5IChXZWJIVE1MVmlldykKKworLSAo
dm9pZClfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdp
dGhPYmplY3Q6KGlkKW9iamVjdAoreworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
ICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtzZWxmIG9iamVjdEVudW1lcmF0b3JdOwor
ICAgIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqdmlldzsKKyAgICB3aGlsZSAoKHZpZXcgPSBbZW51
bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKQorICAgICAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKQorICAgICAgICAgICAgW3Zp
ZXcgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6b2JqZWN0XTsKKyNlbmRpZgor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViSW50ZXJuYWwpCisK
Ky0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKK3sKKyAgICBbc2VsZiBfdXBkYXRlU2VsZWN0aW9u
Rm9ySW5wdXRNYW5hZ2VyXTsKKyAgICBbc2VsZiBfdXBkYXRlRm9udFBhbmVsXTsKKyAgICBpZiAo
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPnNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVlKTsKK30KKworLSAo
dm9pZClfdXBkYXRlRm9udFBhbmVsCit7CisgICAgLy8gRklYTUU6IE5TVGV4dFZpZXcgYmFpbHMg
b3V0IGlmIGJlY29taW5nIG9yIHJlc2lnbmluZyBmaXJzdCByZXNwb25kZXIsIGZvciB3aGljaCBp
dCBoYXMgaXZhciBmbGFncy4gTm90CisgICAgLy8gc3VyZSBpZiB3ZSBuZWVkIHRvIGRvIHNvbWV0
aGluZyBzaW1pbGFyLgorICAgIAorICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAg
Ly8gRklYTUU6IGlzIHRoaXMgZmlyc3QtcmVzcG9uZGVyIGNoZWNrIGNvcnJlY3Q/IFdoYXQgaGFw
cGVucyBpZiBhIHN1YmZyYW1lIGlzIGVkaXRhYmxlIGFuZCBpcyBmaXJzdCByZXNwb25kZXI/Cisg
ICAgaWYgKFtOU0FwcCBrZXlXaW5kb3ddICE9IHdpbmRvdyB8fCBbd2luZG93IGZpcnN0UmVzcG9u
ZGVyXSAhPSBzZWxmKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBtdWx0aXBsZUZv
bnRzID0gZmFsc2U7CisgICAgTlNGb250ICpmb250ID0gbmlsOworICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+Zm9udEZvclNlbGVjdGlvbihtdWx0
aXBsZUZvbnRzKSkKKyAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0TlNGb250KCk7CisgICAgfQor
ICAgIAorCisgICAgLy8gRklYTUU6IGZvciBub3csIHJldHVybiBhIGJvZ3VzIGZvbnQgdGhhdCBk
aXN0aW5ndWlzaGVzIHRoZSBlbXB0eSBzZWxlY3Rpb24gZnJvbSB0aGUgbm9uLWVtcHR5CisgICAg
Ly8gc2VsZWN0aW9uLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyBvbmNlIHRoZSBy
ZXN0IG9mIHRoaXMgY29kZSB3b3JrcyBwcm9wZXJseS4KKyAgICBpZiAoZm9udCA9PSBuaWwpCisg
ICAgICAgIGZvbnQgPSBbc2VsZiBfaGFzU2VsZWN0aW9uXSA/IFtOU0ZvbnQgbWVudUZvbnRPZlNp
emU6MjNdIDogW05TRm9udCB0b29sVGlwc0ZvbnRPZlNpemU6MTddOworICAgIEFTU0VSVChmb250
ICE9IG5pbCk7CisKKyAgICBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIHNldFNl
bGVjdGVkRm9udDpmb250IGlzTXVsdGlwbGU6bXVsdGlwbGVGb250c107CisKKyAgICAvLyBGSVhN
RTogd2UgZG9uJ3Qga2VlcCB0cmFjayBvZiBzZWxlY3RlZCBhdHRyaWJ1dGVzLCBvciBzZXQgdGhl
bSBvbiB0aGUgZm9udCBwYW5lbC4gVGhpcworICAgIC8vIGFwcGVhcnMgdG8gaGF2ZSBubyBlZmZl
Y3Qgb24gdGhlIFVJLiBFLmcuLCB1bmRlcmxpbmVkIHRleHQgaW4gTWFpbCBvciBUZXh0RWRpdCBp
cworICAgIC8vIG5vdCByZWZsZWN0ZWQgaW4gdGhlIGZvbnQgcGFuZWwuIE1heWJlIHNvbWVkYXkg
dGhpcyB3aWxsIGNoYW5nZS4KK30KKworLSAoQk9PTClfY2FuU21hcnRDb3B5T3JEZWxldGUKK3sK
KyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSkKKyAg
ICAgICAgcmV0dXJuIE5POworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb25HcmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKK30KKworLSAoTlNFdmVudCAqKV9tb3VzZURvd25F
dmVudAoreworICAgIHJldHVybiBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQ7Cit9CisKKy0gKGlk
PFdlYkhUTUxIaWdobGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlwZTooTlNTdHJpbmcqKXR5cGUK
K3sKKyAgICByZXR1cm4gW19wcml2YXRlLT5oaWdobGlnaHRlcnMgb2JqZWN0Rm9yS2V5OnR5cGVd
OworfQorCistIChXZWJGcmFtZSAqKV9mcmFtZQoreworICAgIHJldHVybiBbX3ByaXZhdGUtPmRh
dGFTb3VyY2Ugd2ViRnJhbWVdOworfQorCistICh2b2lkKXBhc3RlOihpZClzZW5kZXIKK3sKKyAg
ICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90
ZWN0b3IgPSBzZWxmOworICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChj
b3JlRnJhbWUtPmVkaXRvcigpLT50cnlESFRNTFBhc3RlKCkpCisgICAgICAgIHJldHVybjsgLy8g
REhUTUwgZGlkIHRoZSB3aG9sZSBvcGVyYXRpb24KKyAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9y
KCktPmNhblBhc3RlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICAgICAgW3NlbGYgX3Bhc3Rl
V2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gYWxsb3dQbGFp
blRleHQ6WUVTXTsKKyAgICBlbHNlCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnBhc3Rl
QXNQbGFpblRleHQoKTsKK30KKworLSAodm9pZClwYXN0ZUFzUGxhaW5UZXh0OihpZClzZW5kZXIK
K3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFtzZWxmIF9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6
W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF1dOworfQorCistICh2b2lkKWNsb3NlSWZO
b3RDdXJyZW50VmlldworeworICAgIGlmIChbW1tzZWxmIF9mcmFtZV0gZnJhbWVWaWV3XSBkb2N1
bWVudFZpZXddICE9IHNlbGYpCisgICAgICAgIFtzZWxmIGNsb3NlXTsKK30KKworLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAoreworICAgIHJldHVybiBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0Om5pbCBhbGxvd1BsYWluVGV4dDpOT107
Cit9CisKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKworLSAoQk9PTClpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQKK3sKKyAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0
bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxl
bWVudCB0aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQorICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVj
a3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWRdOworfQorCistICh2b2lkKXNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQ6KEJPT0wpZmxhZworeworICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhl
IGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3Qg
aW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhlIEFwcEtpdCBjb2Rl
IGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIFtbc2VsZiBfd2ViVmlld10gc2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVHcmFtbWFyQ2hl
Y2tpbmc6KGlkKXNlbmRlcgoreworICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhl
IGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3Qg
aW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhlIEFwcEtpdCBjb2Rl
IGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xl
R3JhbW1hckNoZWNraW5nOnNlbmRlcl07Cit9CisKKworc3RhdGljIENHUG9pbnQgY29yZUdyYXBo
aWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2ludChOU1BvaW50IHBvaW50KQoreworICAg
IE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVuc107CisgICAgCisgICAgaWYgKFtz
Y3JlZW5zIGNvdW50XSA9PSAwKSB7CisgICAgICAgIC8vIFlvdSBjb3VsZCB0aGVvcmV0aWNhbGx5
IGdldCBoZXJlIGlmIHJ1bm5pbmcgd2l0aCBubyBtb25pdG9yLCBpbiB3aGljaCBjYXNlIGl0IGRv
ZXNuJ3QgbWF0dGVyCisgICAgICAgIC8vIG11Y2ggd2hlcmUgdGhlICJvbi1zY3JlZW4iIHBvaW50
IGlzLgorICAgICAgICByZXR1cm4gQ0dQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSk7CisgICAg
fQorICAgIAorICAgIC8vIEZsaXAgdGhlIHkgY29vcmRpbmF0ZSBmcm9tIHRoZSB0b3Agb2YgdGhl
IG1lbnUgYmFyIHNjcmVlbiAtLSBzZWUgNDYzNjM5MAorICAgIHJldHVybiBDR1BvaW50TWFrZShw
b2ludC54LCBOU01heFkoW1tzY3JlZW5zIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKSAtIHBvaW50
LnkpOworfQorCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorCistICh2b2lkKW9yZGVyRnJvbnRTdWJzdGl0
dXRpb25zUGFuZWw6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIE5T
U3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl07CisgICAgaWYgKCFjaGVja2VyKSB7CisgICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENo
ZWNrZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBOU1BhbmVsICpzdWJz
dGl0dXRpb25zUGFuZWwgPSBbY2hlY2tlciBzdWJzdGl0dXRpb25zUGFuZWxdOworICAgIGlmIChb
c3Vic3RpdHV0aW9uc1BhbmVsIGlzVmlzaWJsZV0pIHsKKyAgICAgICAgW3N1YnN0aXR1dGlvbnNQ
YW5lbCBvcmRlck91dDpzZW5kZXJdOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFtzdWJz
dGl0dXRpb25zUGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOworfQorCisvLyBGSVhNRSA0Nzk5MTM0
OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQgd2UgbXVzdCBp
bXBsZW1lbnQgdGhlc2UgbWV0aG9kcyBoZXJlIGJlY2F1c2UKKy8vIHRoZSBBcHBLaXQgY29kZSBj
aGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KKworLSAoQk9PTClzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWRdOworfQorCistICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDooQk9PTClm
bGFnCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6
ZmxhZ107Cit9CisKKy0gKHZvaWQpdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcgor
eworICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6c2VuZGVyXTsK
K30KKworLSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZAoreworICAg
IHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFi
bGVkXTsKK30KKworLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6
KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljUXVvdGVTdWJz
dGl0dXRpb25FbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1F1b3Rl
U3Vic3RpdHV0aW9uOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOnNlbmRlcl07Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlz
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRp
Y0xpbmtEZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXdd
IHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRv
Z2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2Vi
Vmlld10gdG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjpzZW5kZXJdOworfQorCistIChCT09M
KWlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQKK3sKKyAgICByZXR1cm4gW1tzZWxm
IF93ZWJWaWV3XSBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXTsKK30KKworLSAo
dm9pZClzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnCit7Cisg
ICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDpm
bGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOihpZClz
ZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0
dXRpb246c2VuZGVyXTsKK30KKworLSAoQk9PTClpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVu
YWJsZWQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGlj
VGV4dFJlcGxhY2VtZW50RW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnQ6KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmlld10gdG9n
Z2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OnNlbmRlcl07Cit9CisKKy0gKEJPT0wpaXNBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2Vi
Vmlld10gaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkXTsKK30KKworLSAodm9p
ZClzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZsYWcKK3sKKyAg
ICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ6
ZmxhZ107Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOihp
ZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5n
Q29ycmVjdGlvbjpzZW5kZXJdOworfQorCisjZW5kaWYKKworLSAodm9pZClfbG9va1VwSW5EaWN0
aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcgoreworICAgIC8vIERpY3Rpb25hcnkgQVBJIHdpbGwg
YWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBhcyBpZiBpdCB3
ZXJlIHJlYWwgdGV4dCwKKyAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0byBhdm9pZCB0aGF0Lgor
ICAgIGlmIChbW1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBfd2Via2l0X3N0cmluZ0J5VHJpbW1pbmdX
aGl0ZXNwYWNlXSBsZW5ndGhdID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0clN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107
CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAo
IWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNSZWN0IHJlY3QgPSBjb3JlRnJh
bWUtPnNlbGVjdGlvbkJvdW5kcygpOworCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAg
TlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW2F0dHJTdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJh
bmdlOk5TTWFrZVJhbmdlKDAsMSldOworICAgIE5TRm9udCAqZm9udCA9IFthdHRyaWJ1dGVzIG9i
amVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAg
cmVjdC5vcmlnaW4ueSArPSBbZm9udCBhc2NlbmRlcl07CisjZW5kaWYKKworI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAg
IFtzZWxmIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdHRyU3RyaW5nIGF0UG9p
bnQ6cmVjdC5vcmlnaW5dOworICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgLy8gV2Ugc29mdCBs
aW5rIHRvIGdldCB0aGUgZnVuY3Rpb24gdGhhdCBkaXNwbGF5cyB0aGUgZGljdGlvbmFyeSAoZWl0
aGVyIHBvcC11cCB3aW5kb3cgb3IgYXBwKSB0byBhdm9pZCB0aGUgcGVyZm9ybWFuY2UKKyAgICAv
LyBwZW5hbHR5IG9mIGxpbmtpbmcgdG8gYW5vdGhlciBmcmFtZXdvcmsuIFRoaXMgZnVuY3Rpb24g
Y2hhbmdlZCBzaWduYXR1cmUgYXMgd2VsbCBhcyBmcmFtZXdvcmsgYmV0d2VlbiBUaWdlciBhbmQg
TGVvcGFyZCwKKyAgICAvLyBzbyB0aGUgdHdvIGNhc2VzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHku
CisKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIHR5cGVkZWYgT1NTdGF0dXMgKCpTZXJ2
aWNlV2luZG93U2hvd0Z1bmN0aW9uKShpZCBpbldvcmRTdHJpbmcsIE5TUmVjdCBpbldvcmRCb3Vu
ZGFyeSwgVUludDE2IGluTGluZURpcmVjdGlvbik7CisgICAgY29uc3QgY2hhciAqZnJhbWV3b3Jr
UGF0aCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZy
YW1ld29yay9GcmFtZXdvcmtzL0xhbmdBbmFseXNpcy5mcmFtZXdvcmsvTGFuZ0FuYWx5c2lzIjsK
KyAgICBjb25zdCBjaGFyICpmdW5jdGlvbk5hbWUgPSAiRENNRGljdGlvbmFyeVNlcnZpY2VXaW5k
b3dTaG93IjsKKyNlbHNlCisgICAgdHlwZWRlZiB2b2lkICgqU2VydmljZVdpbmRvd1Nob3dGdW5j
dGlvbikoaWQgdW51c2VkRGljdGlvbmFyeVJlZiwgaWQgaW5Xb3JkU3RyaW5nLCBDRlJhbmdlIHNl
bGVjdGlvblJhbmdlLCBpZCB1bnVzZWRGb250LCBDR1BvaW50IHRleHRPcmlnaW4sIEJvb2xlYW4g
dmVydGljYWxUZXh0LCBpZCB1bnVzZWRUcmFuc2Zvcm0pOworICAgIGNvbnN0IGNoYXIgKmZyYW1l
d29ya1BhdGggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1ld29yay9G
cmFtZXdvcmtzL0hJVG9vbGJveC5mcmFtZXdvcmsvSElUb29sYm94IjsKKyAgICBjb25zdCBjaGFy
ICpmdW5jdGlvbk5hbWUgPSAiSElEaWN0aW9uYXJ5V2luZG93U2hvdyI7CisjZW5kaWYKKworICAg
IHN0YXRpYyBib29sIGxvb2tlZEZvckZ1bmN0aW9uID0gZmFsc2U7CisgICAgc3RhdGljIFNlcnZp
Y2VXaW5kb3dTaG93RnVuY3Rpb24gZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93ID0gTlVMTDsK
KworICAgIGlmICghbG9va2VkRm9yRnVuY3Rpb24pIHsKKyAgICAgICAgdm9pZCogbGFuZ0FuYWx5
c2lzRnJhbWV3b3JrID0gZGxvcGVuKGZyYW1ld29ya1BhdGgsIFJUTERfTEFaWSk7CisgICAgICAg
IEFTU0VSVChsYW5nQW5hbHlzaXNGcmFtZXdvcmspOworICAgICAgICBpZiAobGFuZ0FuYWx5c2lz
RnJhbWV3b3JrKQorICAgICAgICAgICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93ID0gKFNl
cnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pZGxzeW0obGFuZ0FuYWx5c2lzRnJhbWV3b3JrLCBmdW5j
dGlvbk5hbWUpOworICAgICAgICBsb29rZWRGb3JGdW5jdGlvbiA9IHRydWU7CisgICAgfQorCisg
ICAgQVNTRVJUKGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyk7CisgICAgaWYgKCFkaWN0aW9u
YXJ5U2VydmljZVdpbmRvd1Nob3cpIHsKKyAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBmaW5kIHRo
ZSAlcyBmdW5jdGlvbiBpbiAlcyIsIGZ1bmN0aW9uTmFtZSwgZnJhbWV3b3JrUGF0aCk7IAorICAg
ICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBG
SVhNRTogbXVzdCBjaGVjayBmb3IgcmlnaHQtdG8tbGVmdCBoZXJlCisgICAgTlNXcml0aW5nRGly
ZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsK
KworICAgIC8vIEZJWE1FOiB0aGUgZGljdGlvbmFyeSBBUEkgZXhwZWN0cyB0aGUgcmVjdCBmb3Ig
dGhlIGZpcnN0IGxpbmUgb2Ygc2VsZWN0aW9uLiBQYXNzaW5nCisgICAgLy8gdGhlIHJlY3QgZm9y
IHRoZSBlbnRpcmUgc2VsZWN0aW9uLCBhcyB3ZSBkbyBoZXJlLCBwb3NpdGlvbnMgdGhlIHBvcC11
cCB3aW5kb3cgbmVhcgorICAgIC8vIHRoZSBib3R0b20gb2YgdGhlIHNlbGVjdGlvbiByYXRoZXIg
dGhhbiBhdCB0aGUgc2VsZWN0ZWQgd29yZC4KKyAgICByZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6
cmVjdCB0b1ZpZXc6bmlsXTsKKyAgICByZWN0Lm9yaWdpbiA9IFtbc2VsZiB3aW5kb3ddIGNvbnZl
cnRCYXNlVG9TY3JlZW46cmVjdC5vcmlnaW5dOworICAgIE5TRGF0YSAqZGF0YSA9IFthdHRyU3Ry
aW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0clN0cmluZyBsZW5ndGhdKSBkb2N1
bWVudEF0dHJpYnV0ZXM6bmlsXTsKKyAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3coZGF0
YSwgcmVjdCwgKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xl
ZnQpID8gMSA6IDApOworI2Vsc2UKKyAgICAvLyBUaGUgSElEaWN0aW9uYXJ5V2luZG93U2hvdyBm
dW5jdGlvbiByZXF1aXJlcyB0aGUgb3JpZ2luLCBpbiBDRyBzY3JlZW4gY29vcmRpbmF0ZXMsIG9m
IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGV4dCBpbiB0aGUgc2VsZWN0aW9uLgorICAgIC8vIEZJ
WE1FIDQ5NDU4MDg6IFdlIGFwcHJveGltYXRlIHRoaXMgaW4gYSB3YXkgdGhhdCB3b3JrcyB3ZWxs
IHdoZW4gYSBzaW5nbGUgd29yZCBpcyBzZWxlY3RlZCwgYW5kIGxlc3Mgd2VsbCBpbiBzb21lIG90
aGVyIGNhc2VzCisgICAgLy8gKGJ1dCBubyB3b3JzZSB0aGFuIHdlIGRpZCBpbiBUaWdlcikKKyAg
ICBOU1BvaW50IHdpbmRvd1BvaW50ID0gW3NlbGYgY29udmVydFBvaW50OnJlY3Qub3JpZ2luIHRv
VmlldzpuaWxdOworICAgIE5TUG9pbnQgc2NyZWVuUG9pbnQgPSBbW3NlbGYgd2luZG93XSBjb252
ZXJ0QmFzZVRvU2NyZWVuOndpbmRvd1BvaW50XTsKKworICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2lu
ZG93U2hvdyhuaWwsIGF0dHJTdHJpbmcsIENGUmFuZ2VNYWtlKDAsIFthdHRyU3RyaW5nIGxlbmd0
aF0pLCBuaWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlR3JhcGhpY3NT
Y3JlZW5Qb2ludEZvckFwcEtpdFNjcmVlblBvaW50KHNjcmVlblBvaW50KSwgZmFsc2UsIG5pbCk7
CisjZW5kaWYKK30KKworLSAodm9pZClfaG92ZXJGZWVkYmFja1N1c3BlbmRlZENoYW5nZWQKK3sK
KyAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07Cit9CisKKy0gKEJPT0wp
X2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDooS2V5Ym9hcmRFdmVudCopZXZlbnQgc2hvdWxkU2F2
ZUNvbW1hbmQ6KEJPT0wpc2hvdWxkU2F2ZQoreworICAgIC8vIEFzayBBcHBLaXQgdG8gcHJvY2Vz
cyB0aGUga2V5IGV2ZW50IC0tIGl0IHdpbGwgY2FsbCBiYWNrIHdpdGggZWl0aGVyIGluc2VydFRl
eHQgb3IgZG9Db21tYW5kQnlTZWxlY3Rvci4KKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2
ZW50c1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmV2ZW50V2FzSGFuZGxl
ZCA9IGZhbHNlOworICAgIHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNvbW1hbmQgPSBzaG91bGRTYXZl
OworICAgIC8vIElmIHdlJ3JlIGludGVyY2VwdGluZyB0aGUgaW5pdGlhbCBJTSBjYWxsIHdlIGFz
c3VtZSB0aGF0IHRoZSBJTSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50LCAKKyAgICAvLyBhbmQgb25s
eSBjaGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0aGUgTlNUZXh0SW5wdXQvUmVzcG9u
ZGVyIGNhbGxiYWNrcyBpcyB1c2VkLgorICAgIC8vIFdlIGFzc3VtZSB0aGUgSU0gd2lsbCAqbm90
KiBjb25zdW1lIGhvdGtleSBzZXF1ZW5jZXMKKyAgICBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTSA9
ICFldmVudC0+bWV0YUtleSgpICYmIHNob3VsZFNhdmU7CisKKyAgICBpZiAoY29uc3QgUGxhdGZv
cm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCkpIHsKKyAg
ICAgICAgTlNFdmVudCAqbWFjRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5tYWNFdmVudCgpOworICAg
ICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TS2V5RG93biAmJiBbX3ByaXZhdGUtPmNvbXBD
b250cm9sbGVyIGZpbHRlcktleURvd246bWFjRXZlbnRdKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIAorICAgICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFu
Z2VkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcGFyYW1l
dGVycy5ldmVudCA9IGV2ZW50OworICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRz
UGFyYW1ldGVycyA9ICZwYXJhbWV0ZXJzOworICAgICAgICBfcHJpdmF0ZS0+cmVjZWl2ZWROT09Q
ID0gTk87CisgICAgICAgIGNvbnN0IFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcyA9
IGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCk7CisgICAgICAgIGJvb2wgaGFzS2V5cHJlc3NDb21t
YW5kID0gIWNvbW1hbmRzLmlzRW1wdHkoKTsKKworICAgICAgICAvLyBGSVhNRTogaW50ZXJwcmV0
S2V5RXZlbnRzIGRvZXNuJ3QgbWF0Y2ggYXBwbGljYXRpb24ga2V5IGVxdWl2YWxlbnRzIChzdWNo
IGFzIENtZCtBKSwKKyAgICAgICAgLy8gYW5kIHNlbmRzIG5vb3A6IGZvciB0aG9zZS4gQXMgYSBy
ZXN1bHQsIHdlIGRvbid0IGhhbmRsZSB0aG9zZSBmcm9tIHdpdGhpbiBXZWJDb3JlLAorICAgICAg
ICAvLyBidXQgc2VuZCBhIGZ1bGwgc2VxdWVuY2Ugb2YgRE9NIGV2ZW50cywgaW5jbHVkaW5nIGFu
IHVubmVlZGVkIGtleXByZXNzLgorICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRTYXZlQ29t
bWFuZCB8fCAhaGFzS2V5cHJlc3NDb21tYW5kKQorICAgICAgICAgICAgW3NlbGYgaW50ZXJwcmV0
S2V5RXZlbnRzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDptYWNFdmVudF1dOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gY29tbWFuZHMuc2l6ZSgpOworICAgICAg
ICAgICAgLy8gQXJlIHRoZXJlIGNvbW1hbmRzIHRoYXQgd291bGQganVzdCBjYXVzZSB0ZXh0IGlu
c2VydGlvbiBpZiBleGVjdXRlZCB2aWEgRWRpdG9yPworICAgICAgICAgICAgLy8gV2ViS2l0IGRv
ZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IHRo
ZXkgc2hvdWxkIGJlIHRyZWF0ZWQsIHNvIHdlIGxlYXZlIGl0IHVwb24gV2ViQ29yZQorICAgICAg
ICAgICAgLy8gdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0aGF0
IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2ZW50IGJlIGdlbmVyYXRlZAorICAg
ICAgICAgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9yIEVu
dGVyKS4KKyAgICAgICAgICAgIGJvb2wgaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyA9IGZhbHNl
OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9t
U3RyaW5nKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKV0uaXNUZXh0SW5zZXJ0aW9uKCkpCisgICAg
ICAgICAgICAgICAgICAgIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IHBs
YXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUgPT0gImluc2VydFRleHQ6
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGluc2VydFRleHQ6Y29tbWFuZHNbaV0u
dGV4dF07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IFtzZWxmIGRvQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoY29tbWFuZHNb
aV0uY29tbWFuZE5hbWUpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAw
OworICAgIH0KKyAgICByZXR1cm4gKCFfcHJpdmF0ZS0+cmVjZWl2ZWROT09QICYmIHBhcmFtZXRl
cnMuZXZlbnRXYXNIYW5kbGVkKSB8fCBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTTsKK30KKworLSAo
V2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlCit7CisgICAg
cmV0dXJuIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKK30KKworLSAodm9p
ZClzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXNv
dXJjZQoreworICAgIGlmIChzb3VyY2UpCisgICAgICAgIHNvdXJjZS0+YWRkQ2xpZW50KHByb21p
c2VkRGF0YUNsaWVudCgpKTsKKyAgICAKKyAgICBpZiAoX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJ
RkZEYXRhU291cmNlKQorICAgICAgICBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CisgICAgX3ByaXZhdGUtPnBy
b21pc2VkRHJhZ1RJRkZEYXRhU291cmNlID0gc291cmNlOworfQorCisjdW5kZWYgQ09NTUFORF9Q
Uk9MT0dVRQorCistICh2b2lkKV9sYXlvdXRJZk5lZWRlZAoreworICAgIEFTU0VSVCghX3ByaXZh
dGUtPnN1YnZpZXdzU2V0QXNpZGUpOworCisgICAgaWYgKF9wcml2YXRlLT5uZWVkc1RvQXBwbHlT
dHlsZXMgfHwgW3NlbGYgX25lZWRzTGF5b3V0XSkKKyAgICAgICAgW3NlbGYgbGF5b3V0XTsKK30K
KworLSAodm9pZClfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlCit7CisgICAgW3NlbGYgX2xh
eW91dElmTmVlZGVkXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRp
bmdTdWJ2aWV3cyA9IFlFUzsKKyNlbmRpZgorCisgICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRh
bnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKworICAgIFtz
ZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhU
TUxWaWV3c107CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdz
IGNvdW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX2xheW91dElmTmVl
ZGVkXTsKKworICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOworCisjaWZuZGVm
IE5ERUJVRworICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87CisjZW5kaWYK
K30KKworLSAodm9pZCkgX2Rlc3Ryb3lBbGxXZWJQbHVnaW5zCit7CisgICAgW1tzZWxmIF9wbHVn
aW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107Cit9CisKKy0gKEJPT0wpX2lzUmVzaWdu
aW5nRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0
UmVzcG9uZGVyOworfQorCistIChCT09MKV9uZWVkc0xheW91dAoreworICAgIHJldHVybiBbW3Nl
bGYgX2ZyYW1lXSBfbmVlZHNMYXlvdXRdOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorLSAodm9pZClhdHRhY2hSb290TGF5ZXI6KENBTGF5ZXIqKWxheWVyCit7CisgICAg
aWYgKCFfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgeworICAgICAgICBXZWJMYXllckhvc3Rp
bmdWaWV3KiBob3N0aW5nVmlldyA9IFtbV2ViTGF5ZXJIb3N0aW5nVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpbc2VsZiBib3VuZHNdXTsKKyAgICAgICAgW2hvc3RpbmdWaWV3IHNldEF1dG9yZXNp
emluZ01hc2s6KE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGUpXTsKKyAg
ICAgICAgW3NlbGYgYWRkU3Vidmlldzpob3N0aW5nVmlld107CisgICAgICAgIFtob3N0aW5nVmll
dyByZWxlYXNlXTsKKyAgICAgICAgLy8gaG9zdGluZ1ZpZXcgaXMgb3duZWQgYnkgYmVpbmcgYSBz
dWJ2aWV3IG9mIHNlbGYKKyAgICAgICAgX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgPSBob3N0
aW5nVmlldzsKKyAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RhcnRlZEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKKyAgICB9CisKKyAgICAvLyBNYWtlIGEg
Y29udGFpbmVyIGxheWVyLCB3aGljaCB3aWxsIGdldCBzaXplZC9wb3NpdGlvbmVkIGJ5IEFwcEtp
dCBhbmQgQ0EKKyAgICBDQUxheWVyKiB2aWV3TGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisgICAg
W19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldExheWVyOnZpZXdMYXllcl07CisgICAgW19w
cml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6WUVTXTsKKyAgICAKKyAgICAv
LyBQYXJlbnQgb3VyIHJvb3QgbGF5ZXIgaW4gdGhlIGNvbnRhaW5lciBsYXllcgorICAgIFt2aWV3
TGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXJdOworfQorCistICh2b2lkKWRldGFjaFJvb3RMYXllcgor
eworICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgeworICAgICAgICBbX3ByaXZh
dGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0TGF5ZXI6bmlsXTsKKyAgICAgICAgW19wcml2YXRlLT5s
YXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6Tk9dOworICAgICAgICBbX3ByaXZhdGUtPmxh
eWVySG9zdGluZ1ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgICAgIF9wcml2YXRlLT5s
YXllckhvc3RpbmdWaWV3ID0gbmlsOworICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9zdG9wcGVk
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxmIF9mcmFtZV1dOworICAgIH0KK30K
KyNlbmRpZgorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViTlNUZXh0
SW5wdXRTdXBwb3J0KQorCistIChOU0FycmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4
dAoreworICAgIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXM7CisgICAgaWYgKCF2YWxp
ZEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgdmFsaWRBdHRyaWJ1dGVzID0gW1tOU0FycmF5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgICAgICBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRl
TmFtZSwgTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWUsCisgICAgICAgICAgICBOU01hcmtl
ZENsYXVzZVNlZ21lbnRBdHRyaWJ1dGVOYW1lLCBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VB
dHRyaWJ1dGVOYW1lLCBuaWxdOworICAgICAgICAvLyBOU1RleHQgYWxzbyBzdXBwb3J0cyB0aGUg
Zm9sbG93aW5nIGF0dHJpYnV0ZXMsIGJ1dCBpdCdzCisgICAgICAgIC8vIGhhcmQgdG8gdGVsbCB3
aGljaCBhcmUgcmVhbGx5IHJlcXVpcmVkIGZvciB0ZXh0IGlucHV0IHRvCisgICAgICAgIC8vIHdv
cmsgd2VsbDsgSSBoYXZlIG5vdCBzZWVuIGFueSBpbnB1dCBtZXRob2QgbWFrZSB1c2Ugb2YgdGhl
bSB5ZXQuCisgICAgICAgIC8vICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCBOU0ZvcmVncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWUsCisgICAgICAgIC8vICAgICBOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWUsIE5TTGFuZ3VhZ2VBdHRyaWJ1dGVOYW1lLgorICAgICAgICBDRlJldGFpbih2YWxp
ZEF0dHJpYnV0ZXMpOworICAgIH0KKyAgICBMT0coVGV4dElucHV0LCAidmFsaWRBdHRyaWJ1dGVz
Rm9yTWFya2VkVGV4dCAtPiAoLi4uKSIpOworICAgIHJldHVybiB2YWxpZEF0dHJpYnV0ZXM7Cit9
CisKKy0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dAoreworICAgIHJldHVybiBf
cHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID8gW3N1cGVyIGlucHV0Q29udGV4dF0gOiBuaWw7
Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXRleHRTdG9yYWdlCit7CisgICAgaWYgKCFf
cHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJ0
ZXh0U3RvcmFnZSAtPiBuaWwiKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBbc2VsZiBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJh
bmdlOk5TTWFrZVJhbmdlKDAsIFVJTlRfTUFYKV07CisgICAgCisgICAgTE9HKFRleHRJbnB1dCwg
InRleHRTdG9yYWdlIC0+IFwiJUBcIiIsIHJlc3VsdCA/IFtyZXN1bHQgc3RyaW5nXSA6IEAiIik7
CisgICAgCisgICAgLy8gV2UgaGF2ZSB0byByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIHJhdGhlciB0
aGFuIG51bGwgdG8gcHJldmVudCBUU00gZnJvbSBjYWxsaW5nIC1zdHJpbmcKKyAgICByZXR1cm4g
cmVzdWx0ID8gcmVzdWx0IDogW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKK30KKworLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRl
eEZvclBvaW50OihOU1BvaW50KXRoZVBvaW50Cit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107CisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKworICAg
IGlmICh3aW5kb3cpCisgICAgICAgIHRoZVBvaW50ID0gW3dpbmRvdyBjb252ZXJ0U2NyZWVuVG9C
YXNlOnRoZVBvaW50XTsKKyAgICB0aGVQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDp0aGVQb2lu
dCBmcm9tVmlldzpuaWxdOworCisgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jaGFyYWN0
ZXJSYW5nZUF0UG9pbnQ6dGhlUG9pbnRdOworICAgIGlmICghcmFuZ2UpIHsKKyAgICAgICAgTE9H
KFRleHRJbnB1dCwgImNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KCVmLCAlZikgLT4gTlNOb3RGb3Vu
ZCIsIHRoZVBvaW50LngsIHRoZVBvaW50LnkpOworICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gW2ZyYW1lIF9jb252ZXJ0RE9NUmFu
Z2VUb05TUmFuZ2U6cmFuZ2VdLmxvY2F0aW9uOworICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0
ZXJJbmRleEZvclBvaW50OiglZiwgJWYpIC0+ICV1IiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSwg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU1JlY3QpZmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UKK3sgICAgCisgICAgV2ViRnJhbWUgKmZy
YW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAgICAKKyAgICAvLyBKdXN0IHRvIG1hdGNoIE5TVGV4dFZp
ZXcncyBiZWhhdmlvci4gUmVncmVzc2lvbiB0ZXN0cyBjYW5ub3QgZGV0ZWN0IHRoaXM7CisgICAg
Ly8gdG8gcmVwcm9kdWNlLCB1c2UgYSB0ZXN0IGFwcGxpY2F0aW9uIGZyb20gaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4MgorICAgIC8vICh0eXBlIHNvbWV0aGluZzsg
dHJ5IHJhbmdlcyAoMSwgLTEpIGFuZCAoMiwgLTEpLgorICAgIGlmICgodGhlUmFuZ2UubG9jYXRp
b24gKyB0aGVSYW5nZS5sZW5ndGggPCB0aGVSYW5nZS5sb2NhdGlvbikgJiYgKHRoZVJhbmdlLmxv
Y2F0aW9uICsgdGhlUmFuZ2UubGVuZ3RoICE9IDApKQorICAgICAgICB0aGVSYW5nZS5sZW5ndGgg
PSAwOworICAgIAorICAgIERPTVJhbmdlICpyYW5nZSA9IFtmcmFtZSBfY29udmVydE5TUmFuZ2VU
b0RPTVJhbmdlOnRoZVJhbmdlXTsKKyAgICBpZiAoIXJhbmdlKSB7CisgICAgICAgIExPRyhUZXh0
SW5wdXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAtPiAoMCwgMCwgMCwg
MCkiLCB0aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgcmV0dXJu
IE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChbcmFuZ2Ug
c3RhcnRDb250YWluZXJdKTsKKyAgICBBU1NFUlQoW3JhbmdlIGVuZENvbnRhaW5lcl0pOworICAg
IAorICAgIE5TUmVjdCByZXN1bHRSZWN0ID0gW2ZyYW1lIF9maXJzdFJlY3RGb3JET01SYW5nZTpy
YW5nZV07CisgICAgcmVzdWx0UmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlc3VsdFJlY3QgdG9W
aWV3Om5pbF07CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBp
ZiAod2luZG93KQorICAgICAgICByZXN1bHRSZWN0Lm9yaWdpbiA9IFt3aW5kb3cgY29udmVydEJh
c2VUb1NjcmVlbjpyZXN1bHRSZWN0Lm9yaWdpbl07CisgICAgCisgICAgTE9HKFRleHRJbnB1dCwg
ImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICglZiwgJWYsICVmLCAlZiki
LCB0aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3RoLCByZXN1bHRSZWN0Lm9yaWdpbi54
LCByZXN1bHRSZWN0Lm9yaWdpbi55LCByZXN1bHRSZWN0LnNpemUud2lkdGgsIHJlc3VsdFJlY3Qu
c2l6ZS5oZWlnaHQpOworICAgIHJldHVybiByZXN1bHRSZWN0OworfQorCistIChOU1JhbmdlKXNl
bGVjdGVkUmFuZ2UKK3sKKyAgICBpZiAoIWlzVGV4dElucHV0KGNvcmUoW3NlbGYgX2ZyYW1lXSkp
KSB7CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+IChOU05vdEZvdW5k
LCAwKSIpOworICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAg
fQorICAgIE5TUmFuZ2UgcmVzdWx0ID0gW1tzZWxmIF9mcmFtZV0gX3NlbGVjdGVkTlNSYW5nZV07
CisKKyAgICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3Vs
dC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAo
TlNSYW5nZSltYXJrZWRSYW5nZQoreworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9m
cmFtZV07CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUod2ViRnJhbWUpOworICAgIGlmICgh
Y29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoMCwgMCk7CisgICAgTlNSYW5n
ZSByZXN1bHQgPSBbd2ViRnJhbWUgX2NvbnZlcnRUb05TUmFuZ2U6Y29yZUZyYW1lLT5lZGl0b3Io
KS0+Y29tcG9zaXRpb25SYW5nZSgpLmdldCgpXTsKKworICAgIExPRyhUZXh0SW5wdXQsICJtYXJr
ZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRl
ZFN1YnN0cmluZ0Zyb21SYW5nZTooTlNSYW5nZSluc1JhbmdlCit7CisgICAgV2ViRnJhbWUgKmZy
YW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7
CisgICAgaWYgKCFpc1RleHRJbnB1dChjb3JlRnJhbWUpIHx8IGlzSW5QYXNzd29yZEZpZWxkKGNv
cmVGcmFtZSkpIHsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdG
cm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5n
dGgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBET01SYW5nZSAqZG9tUmFuZ2Ug
PSBbZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTpuc1JhbmdlXTsKKyAgICBpZiAoIWRv
bVJhbmdlKSB7CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJv
bVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KnJlc3VsdCA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlOmNvcmUoZG9tUmFuZ2UpXTsKKyAgICAKKyAgICAvLyBbTlNBdHRyaWJ1dGVkU3RyaW5nKFdl
YktpdEV4dHJhcykgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0gIGluc2lzdHMgb24g
aW5zZXJ0aW5nIGEgdHJhaWxpbmcgCisgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRo
ZSBzdHJpbmcgd2hpY2ggYnJlYWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJv
YmxlbS81NDAwNTUxPgorICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUgdGhl
IHJlc3VsdGFudCBzdHJpbmcgdG8gdGhlIGNvcnJlY3QgbGVuZ3RoLgorICAgIGlmIChbcmVzdWx0
IGxlbmd0aF0gPiBuc1JhbmdlLmxlbmd0aCkgeworICAgICAgICBBU1NFUlQoW3Jlc3VsdCBsZW5n
dGhdID09IG5zUmFuZ2UubGVuZ3RoICsgMSk7CisgICAgICAgIEFTU0VSVChbW3Jlc3VsdCBzdHJp
bmddIGNoYXJhY3RlckF0SW5kZXg6bnNSYW5nZS5sZW5ndGhdID09ICdcbicgfHwgW1tyZXN1bHQg
c3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4Om5zUmFuZ2UubGVuZ3RoXSA9PSAnICcpOworICAgICAg
ICByZXN1bHQgPSBbcmVzdWx0IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgbnNSYW5nZS5sZW5ndGgpXTsKKyAgICB9CisgICAgTE9HKFRleHRJbnB1dCwgImF0dHJp
YnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2Nh
dGlvbiwgbnNSYW5nZS5sZW5ndGgsIFtyZXN1bHQgc3RyaW5nXSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworLy8gdGVzdCBmb3IgMTAuNCBiZWNhdXNlIG9mIDxyZGFyOi8vcHJvYmxlbS80MjQz
NDYzPgorI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCistIChsb25nKWNvbnZlcnNhdGlvbklkZW50
aWZpZXIKK3sKKyAgICByZXR1cm4gKGxvbmcpc2VsZjsKK30KKyNlbHNlCistIChOU0ludGVnZXIp
Y29udmVyc2F0aW9uSWRlbnRpZmllcgoreworICAgIHJldHVybiAoTlNJbnRlZ2VyKXNlbGY7Cit9
CisjZW5kaWYKKworLSAoQk9PTCloYXNNYXJrZWRUZXh0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgQk9PTCByZXN1bHQgPSBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKKyAgICBMT0coVGV4dElucHV0
LCAiaGFzTWFya2VkVGV4dCAtPiAldSIsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLSAodm9pZCl1bm1hcmtUZXh0Cit7CisgICAgTE9HKFRleHRJbnB1dCwgInVubWFya1RleHQi
KTsKKworICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBi
eSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KKyAgICBXZWJIVE1MVmlld0ludGVy
cHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0
S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVycyA9IDA7CisKKyAgICBpZiAocGFyYW1ldGVycykgeworICAgICAgICBwYXJhbWV0ZXJz
LT5ldmVudFdhc0hhbmRsZWQgPSBZRVM7CisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJ
TSA9IE5POworICAgIH0KKyAgICAKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3Np
dGlvbigpOworfQorCitzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRT
dHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgcmVzdWx0KQorewor
ICAgIGludCBsZW5ndGggPSBbW3N0cmluZyBzdHJpbmddIGxlbmd0aF07CisKKyAgICBpbnQgaSA9
IDA7CisgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKKyAgICAgICAgTlNSYW5nZSByYW5nZTsKKyAg
ICAgICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IFtzdHJpbmcgYXR0cmlidXRlc0F0SW5kZXg6aSBs
b25nZXN0RWZmZWN0aXZlUmFuZ2U6JnJhbmdlIGluUmFuZ2U6TlNNYWtlUmFuZ2UoaSwgbGVuZ3Ro
IC0gaSldOworCisgICAgICAgIGlmIChOU051bWJlciAqc3R5bGUgPSBbYXR0cnMgb2JqZWN0Rm9y
S2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSkgeworICAgICAgICAgICAgQ29sb3Ig
Y29sb3IgPSBDb2xvcjo6YmxhY2s7CisgICAgICAgICAgICBpZiAoTlNDb2xvciAqY29sb3JBdHRy
ID0gW2F0dHJzIG9iamVjdEZvcktleTpOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZV0pCisg
ICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtjb2xvckF0dHIgY29sb3JV
c2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV0pOworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZShyYW5nZS5sb2NhdGlvbiwgTlNNYXhS
YW5nZShyYW5nZSksIGNvbG9yLCBbc3R5bGUgaW50VmFsdWVdID4gMSkpOworICAgICAgICB9CisK
KyAgICAgICAgaSA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOworICAgIH0KK30KKwor
LSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlu
ZXdTZWxSYW5nZQoreworICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tp
bmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsgLy8gT3RoZXJ3aXNlLCBOU1N0
cmluZworCisgICAgTE9HKFRleHRJbnB1dCwgInNldE1hcmtlZFRleHQ6XCIlQFwiIHNlbGVjdGVk
UmFuZ2U6KCV1LCAldSkiLCBpc0F0dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBz
dHJpbmcsIG5ld1NlbFJhbmdlLmxvY2F0aW9uLCBuZXdTZWxSYW5nZS5sZW5ndGgpOworCisgICAg
Ly8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxs
ZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgorICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQ
YXJhbWV0ZXJzOworICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0g
MDsKKworICAgIGlmIChwYXJhbWV0ZXJzKSB7CisgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2Fz
SGFuZGxlZCA9IFlFUzsKKyAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87Cisg
ICAgfQorICAgIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwor
ICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVtzZWxmIF9p
c0VkaXRhYmxlXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW5lPiB1bmRlcmxpbmVzOworICAgIE5TU3RyaW5nICp0ZXh0ID0gc3RyaW5nOworCisgICAg
aWYgKGlzQXR0cmlidXRlZFN0cmluZykgeworICAgICAgICB1bnNpZ25lZCBtYXJrZWRUZXh0TGVu
Z3RoID0gWyhOU1N0cmluZyAqKXN0cmluZyBsZW5ndGhdOworICAgICAgICBOU1N0cmluZyAqcmFu
Z2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VB
dHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0aXZlUmFuZ2U6TlVMTCBpblJhbmdl
Ok5TTWFrZVJhbmdlKDAsIG1hcmtlZFRleHRMZW5ndGgpXTsKKyAgICAgICAgTE9HKFRleHRJbnB1
dCwgIiAgICBSZXBsYWNlbWVudFJhbmdlOiAlQCIsIHJhbmdlU3RyaW5nKTsKKyAgICAgICAgLy8g
VGhlIEFwcEtpdCBhZGRzIGEgJ3NlY3JldCcgcHJvcGVydHkgdG8gdGhlIHN0cmluZyB0aGF0IGNv
bnRhaW5zIHRoZSByZXBsYWNlbWVudCByYW5nZS4KKyAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50
IHJhbmdlIGlzIHRoZSByYW5nZSBvZiB0aGUgdGhlIHRleHQgdGhhdCBzaG91bGQgYmUgcmVwbGFj
ZWQgd2l0aCB0aGUgbmV3IHN0cmluZy4KKyAgICAgICAgaWYgKHJhbmdlU3RyaW5nKQorICAgICAg
ICAgICAgW1tzZWxmIF9mcmFtZV0gX3NlbGVjdE5TUmFuZ2U6TlNSYW5nZUZyb21TdHJpbmcocmFu
Z2VTdHJpbmcpXTsKKworICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOworICAgICAgICBl
eHRyYWN0VW5kZXJsaW5lcyhzdHJpbmcsIHVuZGVybGluZXMpOworICAgIH0KKworICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIG5ld1NlbFJh
bmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKG5ld1NlbFJhbmdlKSk7Cit9CisKKy0gKHZvaWQpZG9D
b21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgTE9HKFRleHRJbnB1dCwgImRv
Q29tbWFuZEJ5U2VsZWN0b3I6XCIlc1wiIiwgc2VsX2dldE5hbWUoc2VsZWN0b3IpKTsKKworICAg
IC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2Fs
bGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KKyAgICAvLyBUaGUgc2FtZSBjYWxsIHRvIGludGVy
cHJldEtleUV2ZW50cyBjYW4gZG8gbW9yZSB0aGFuIG9uZSBjb21tYW5kLgorICAgIFdlYkhUTUxW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIGlmIChwYXJhbWV0ZXJzKQorICAgICAg
ICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKKworICAgIGlmIChzZWxlY3RvciA9PSBA
c2VsZWN0b3Iobm9vcDopKSB7CisgICAgICAgIF9wcml2YXRlLT5yZWNlaXZlZE5PT1AgPSBZRVM7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBLZXlib2FyZEV2ZW50KiBldmVudCA9IHBh
cmFtZXRlcnMgPyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7CisgICAgYm9vbCBzaG91bGRTYXZlQ29t
bWFuZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+c2hvdWxkU2F2ZUNvbW1hbmQ7CisKKyAg
ICBpZiAoZXZlbnQgJiYgc2hvdWxkU2F2ZUNvbW1hbmQpCisgICAgICAgIGV2ZW50LT5rZXlwcmVz
c0NvbW1hbmRzKCkuYXBwZW5kKEtleXByZXNzQ29tbWFuZChOU1N0cmluZ0Zyb21TZWxlY3Rvcihz
ZWxlY3RvcikpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb25seSBk
aXJlY3QgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3Rvcjogc2VlIHRoZSBwYXJhbWV0ZXJzIGJ5
IHNldHRpbmcgdG8gMC4KKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFt
ZXRlcnMgPSAwOworCisgICAgICAgIGJvb2wgZXZlbnRXYXNIYW5kbGVkOworCisgICAgICAgIFdl
YlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgICAgIGlmIChbW3dlYlZpZXcg
X2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2Vs
ZWN0b3I6c2VsZWN0b3JdKQorICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxm
IGNvcmVDb21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAgICAgICAgICBpZiAoY29tbWFu
ZC5pc1N1cHBvcnRlZCgpKQorICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IGNvbW1h
bmQuZXhlY3V0ZShldmVudCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBJZiBXZWJLaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGNvbW1hbmQsIHdlIG5lZWQgdG8gcGFz
cyB0aGUgc2VsZWN0b3IgdG8gc3VwZXIuCisgICAgICAgICAgICAgICAgX3ByaXZhdGUtPnNlbGVj
dG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IHNlbGVjdG9yOworCisgICAgICAgICAgICAgICAg
Ly8gVGhlIHNpbmsgZG9lcyB0d28gdGhpbmdzOiAxKSBUZWxscyB1cyBpZiB0aGUgcmVzcG9uZGVy
IHdlbnQgdW5oYW5kbGVkLCBhbmQKKyAgICAgICAgICAgICAgICAvLyAyKSBwcmV2ZW50cyBhbnkg
TlNCZWVwOyB3ZSBkb24ndCBldmVyIHdhbnQgdG8gYmVlcCBoZXJlLgorICAgICAgICAgICAgICAg
IFdlYlJlc3BvbmRlckNoYWluU2luayAqc2luayA9IFtbV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIGFs
bG9jXSBpbml0V2l0aFJlc3BvbmRlckNoYWluOnNlbGZdOworICAgICAgICAgICAgICAgIFtzdXBl
ciBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICAgICAgICAgICAgICBldmVudFdh
c0hhbmRsZWQgPSAhW3NpbmsgcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kXTsKKyAgICAgICAgICAg
ICAgICBbc2luayBkZXRhY2hdOworICAgICAgICAgICAgICAgIFtzaW5rIHJlbGVhc2VdOworCisg
ICAgICAgICAgICAgICAgX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyYW1ldGVycykK
KyAgICAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IGV2ZW50V2FzSGFuZGxl
ZDsKKworICAgICAgICAvLyBSZXN0b3JlIHRoZSBwYXJhbWV0ZXJzIHNvIHRoYXQgb3RoZXIgY2Fs
bHMgdG8gZG9Db21tYW5kQnlTZWxlY3Rvcjogc2VlIHRoZW0sCisgICAgICAgIC8vIGFuZCBvdGhl
ciBjb21tYW5kcyBjYW4gcGFydGljaXBhdGUgaW4gc2V0dGluZyB0aGUgImV2ZW50V2FzSGFuZGxl
ZCIgZmxhZy4KKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMg
PSBwYXJhbWV0ZXJzOworICAgIH0KK30KKworLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcK
K3sKKyAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpb
TlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKKworICAg
IExPRyhUZXh0SW5wdXQsICJpbnNlcnRUZXh0OlwiJUBcIiIsIGlzQXR0cmlidXRlZFN0cmluZyA/
IFtzdHJpbmcgc3RyaW5nXSA6IHN0cmluZyk7CisKKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVyczsKKyAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVy
cyA9IDA7CisgICAgaWYgKHBhcmFtZXRlcnMpCisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVk
QnlJTSA9IE5POworCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnNlcnRpbmcgYW4gYXR0cmli
dXRlZCBzdHJpbmcgYnV0IGlucHV0IG1ldGhvZHMgZG9uJ3QgYXBwZWFyIHRvIHJlcXVpcmUgdGhp
cy4KKyAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgTlNTdHJpbmcgKnRleHQ7CisgICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IGNvcmVGcmFt
ZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOworICAgIGlmIChpc0F0
dHJpYnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgdGV4dCA9IFtzdHJpbmcgc3RyaW5nXTsKKyAgICAg
ICAgLy8gV2UgZGVhbCB3aXRoIHRoZSBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1
dGVOYW1lIGF0dHJpYnV0ZSBmcm9tIE5TQXR0cmlidXRlZFN0cmluZyBoZXJlCisgICAgICAgIC8v
IHNpbXBseSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgYXQgbGVhc3Qgb25lIElucHV0IE1ldGhvZCAt
LSBpdCBjb3JyZXNvbmRzIHRvIHRoZSBrRXZlbnRQYXJhbVRleHRJbnB1dFNlbmRSZXBsYWNlUmFu
Z2UKKyAgICAgICAgLy8gZXZlbnQgaW4gVFNNLiAgVGhpcyBiZWhhdmlvdXIgbWF0Y2hlcyB0aGF0
IG9mIC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3RlZFJhbmdlOl0gd2hlbiBpdCBy
ZWNlaXZlcyBhbgorICAgICAgICAvLyBOU0F0dHJpYnV0ZWRTdHJpbmcKKyAgICAgICAgTlNTdHJp
bmcgKnJhbmdlU3RyaW5nID0gW3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVu
dFJhbmdlQXR0cmlidXRlTmFtZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOk5VTEwg
aW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbdGV4dCBsZW5ndGhdKV07CisgICAgICAgIExPRyhUZXh0
SW5wdXQsICIgICAgUmVwbGFjZW1lbnRSYW5nZTogJUAiLCByYW5nZVN0cmluZyk7CisgICAgICAg
IGlmIChyYW5nZVN0cmluZykgeworICAgICAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3NlbGVjdE5T
UmFuZ2U6TlNSYW5nZUZyb21TdHJpbmcocmFuZ2VTdHJpbmcpXTsKKyAgICAgICAgICAgIGlzRnJv
bUlucHV0TWV0aG9kID0gWUVTOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRleHQg
PSBzdHJpbmc7CisKKyAgICBib29sIGV2ZW50SGFuZGxlZCA9IGZhbHNlOworICAgIGlmIChbdGV4
dCBsZW5ndGhdKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGV2ZW50ID0gcGFyYW1ldGVycyA/
IHBhcmFtZXRlcnMtPmV2ZW50IDogMDsKKworICAgICAgICAvLyBpbnNlcnRUZXh0IGNhbiBiZSBj
YWxsZWQgZnJvbSBhbiBpbnB1dCBtZXRob2Qgb3IgZnJvbSBub3JtYWwga2V5IGV2ZW50IHByb2Nl
c3NpbmcKKyAgICAgICAgLy8gSWYgaXRzIGZyb20gbm9ybWFsIGtleSBldmVudCBwcm9jZXNzaW5n
LCB3ZSBtYXkgbmVlZCB0byBzYXZlIHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpdCBsYXRlci4KKyAg
ICAgICAgLy8gSWYgaXRzIGZyb20gYW4gaW5wdXQgbWV0aG9kLCB0aGVuIHdlIHNob3VsZCBnbyBh
aGVhZCBhbmQgaW5zZXJ0IHRoZSB0ZXh0IG5vdy4gIAorICAgICAgICAvLyBXZSBhc3N1bWUgaXQn
cyBmcm9tIHRoZSBpbnB1dCBtZXRob2QgaWYgd2UgaGF2ZSBtYXJrZWQgdGV4dC4KKyAgICAgICAg
Ly8gRklYTUU6IEluIHRoZW9yeSwgdGhpcyBjb3VsZCBiZSB3cm9uZyBmb3Igc29tZSBpbnB1dCBt
ZXRob2RzLCBzbyB3ZSBzaG91bGQgdHJ5IHRvIGZpbmQKKyAgICAgICAgLy8gYW5vdGhlciB3YXkg
dG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxsIGlzIGZyb20gdGhlIGlucHV0IG1ldGhvZAorICAgICAg
ICBib29sIHNob3VsZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5zaG91
bGRTYXZlQ29tbWFuZDsKKyAgICAgICAgaWYgKGV2ZW50ICYmIHNob3VsZFNhdmVDb21tYW5kICYm
ICFpc0Zyb21JbnB1dE1ldGhvZCkgeworICAgICAgICAgICAgZXZlbnQtPmtleXByZXNzQ29tbWFu
ZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKCJpbnNlcnRUZXh0OiIsIHRleHQpKTsKKyAgICAg
ICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVy
czsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3Ry
aW5nIGV2ZW50VGV4dCA9IHRleHQ7CisgICAgICAgIGV2ZW50VGV4dC5yZXBsYWNlKE5TQmFja1Rh
YkNoYXJhY3RlciwgTlNUYWJDaGFyYWN0ZXIpOyAvLyBzYW1lIHRoaW5nIGlzIGRvbmUgaW4gS2V5
RXZlbnRNYWMubW0gaW4gV2ViQ29yZQorICAgICAgICBpZiAoY29yZUZyYW1lICYmIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKSkgeworICAgICAgICAgICAgaWYgKCFjb3JlRnJhbWUtPmVk
aXRvcigpLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZlbnRUZXh0LCBldmVudCk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihldmVu
dFRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICgh
cGFyYW1ldGVycykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChpc0Zyb21JbnB1dE1l
dGhvZCkgeworICAgICAgICAvLyBBbGxvdyBkb0NvbW1hbmRCeVNlbGVjdG9yOiB0byBiZSBjYWxs
ZWQgYWZ0ZXIgaW5zZXJ0VGV4dDogYnkgcmVzZXR0aW5nIGludGVycHJldEtleUV2ZW50c1BhcmFt
ZXRlcnMKKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBZRVM7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVk
ID0gZXZlbnRIYW5kbGVkOworfQorCistICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1h
bmFnZXIKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAg
ICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQk9PTCBleHBvc2VJbnB1
dENvbnRleHQgPSBpc1RleHRJbnB1dChjb3JlRnJhbWUpICYmICFpc0luUGFzc3dvcmRGaWVsZChj
b3JlRnJhbWUpOworICAgIGlmIChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUtPmV4cG9z
ZUlucHV0Q29udGV4dCkgeworICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID0g
ZXhwb3NlSW5wdXRDb250ZXh0OworICAgICAgICAvLyBMZXQgQXBwS2l0IGNhY2hlIGEgcG90ZW50
aWFsbHkgY2hhbmdlZCBpbnB1dCBjb250ZXh0LgorICAgICAgICAvLyBXZWJDb3JlIHJvdXRpbmVs
eSBzZXRzIHRoZSBzZWxlY3Rpb24gdG8gTm9uZSB3aGVuIGVkaXRpbmcsIGFuZCBJTXMgYmVjb21l
IHVuaGFwcHkgd2hlbiBhbiBpbnB1dCBjb250ZXh0IHN1ZGRlbmx5IHR1cm5zIG5pbCwgc2VlIGJ1
ZyAyNjAwOS4KKyAgICAgICAgaWYgKCFjb3JlRnJhbWUgfHwgIWNvcmVGcmFtZS0+c2VsZWN0aW9u
KCktPmlzTm9uZSgpKQorICAgICAgICAgICAgW05TQXBwIHVwZGF0ZVdpbmRvd3NdOworICAgIH0K
KworICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPmlnbm9yZUNvbXBvc2l0
aW9uU2VsZWN0aW9uQ2hhbmdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHN0
YXJ0OworICAgIHVuc2lnbmVkIGVuZDsKKyAgICBpZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+Z2V0
Q29tcG9zaXRpb25TZWxlY3Rpb24oc3RhcnQsIGVuZCkpCisgICAgICAgIFtbTlNJbnB1dE1hbmFn
ZXIgY3VycmVudElucHV0TWFuYWdlcl0gbWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZWQ6TlNNYWtl
UmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0KSBjbGllbnQ6c2VsZl07CisgICAgZWxzZSB7CisgICAg
ICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJi
aW5nU2VsZWN0aW9uKCk7CisgICAgICAgIFtbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFu
YWdlcl0gbWFya2VkVGV4dEFiYW5kb25lZDpzZWxmXTsKKyAgICB9Cit9CisKK0BlbmQKKworLyoK
KyAgICBUaGlzIGNsYXNzIHJ1bnMgdGhlIHNob3cgZm9yIGhhbmRpbmcgdGhlIGNvbXBsZXRlOiBO
U1RleHRWaWV3IG9wZXJhdGlvbi4gIEl0IGNvdW50cyBvbiBpdHMgSFRNTCB2aWV3CisgICAgdG8g
Y2FsbCBlbmRSZXZlcnRpbmdDaGFuZ2U6IHdoZW5ldmVyIHRoZSBjdXJyZW50IGNvbXBsZXRpb24g
bmVlZHMgdG8gYmUgYWJvcnRlZC4KKyAKKyAgICBUaGUgY2xhc3MgaXMgaW4gb25lIG9mIHR3byBt
b2RlczogIFBvcHVwV2luZG93IHNob3dpbmcsIG9yIG5vdC4gIEl0IGlzIHNob3duIHdoZW4gYSBj
b21wbGV0aW9uIHlpZWxkcworICAgIG1vcmUgdGhhbiBvbmUgbWF0Y2guICBJZiBhIGNvbXBsZXRp
b24geWllbGRzIG9uZSBvciB6ZXJvIG1hdGNoZXMsIGl0IGlzIG5vdCBzaG93biwgYW5kICoqdGhl
cmUgaXMgbm8KKyAgICBzdGF0ZSBjYXJyaWVkIGFjcm9zcyB0byB0aGUgbmV4dCBjb21wbGV0aW9u
KiouCisgKi8KKworQGltcGxlbWVudGF0aW9uIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIKKwor
LSAoaWQpaW5pdFdpdGhIVE1MVmlldzooV2ViSFRNTFZpZXcgKil2aWV3Cit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
X3ZpZXcgPSB2aWV3OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbX3BvcHVwV2luZG93IHJlbGVhc2VdOworICAgIFtfY29tcGxldGlvbnMgcmVsZWFzZV07
CisgICAgW19vcmlnaW5hbFN0cmluZyByZWxlYXNlXTsKKyAgICAKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKHZvaWQpX2luc2VydE1hdGNoOihOU1N0cmluZyAqKW1hdGNoCit7CisgICAg
Ly8gRklYTUU6IDM3Njk2NTQgLSBXZSBzaG91bGQgcHJlc2VydmUgY2FzZSBvZiBzdHJpbmcgYmVp
bmcgaW5zZXJ0ZWQsIGV2ZW4gaW4gcHJlZml4IChidXQgdGhlbiBhbHNvIGJlCisgICAgLy8gYWJs
ZSB0byByZXZlcnQgdGhhdCkuICBNaW1pYyBOU1RleHQuCisgICAgV2ViRnJhbWUgKmZyYW1lID0g
W192aWV3IF9mcmFtZV07CisgICAgTlNTdHJpbmcgKm5ld1RleHQgPSBbbWF0Y2ggc3Vic3RyaW5n
RnJvbUluZGV4OnByZWZpeExlbmd0aF07CisgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQ6bmV3VGV4dCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKK30K
KworLy8gbW9zdGx5IGxpZnRlZCBmcm9tIE5TVGV4dFZpZXdfS2V5QmluZGluZy5tCistICh2b2lk
KV9idWlsZFVJCit7CisgICAgTlNSZWN0IHNjcm9sbEZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCAx
MDAsIDEwMCk7CisgICAgTlNSZWN0IHRhYmxlRnJhbWUgPSBOU1plcm9SZWN0OyAgICAKKyAgICB0
YWJsZUZyYW1lLnNpemUgPSBbTlNTY3JvbGxWaWV3IGNvbnRlbnRTaXplRm9yRnJhbWVTaXplOnNj
cm9sbEZyYW1lLnNpemUgaGFzSG9yaXpvbnRhbFNjcm9sbGVyOk5PIGhhc1ZlcnRpY2FsU2Nyb2xs
ZXI6WUVTIGJvcmRlclR5cGU6TlNOb0JvcmRlcl07CisgICAgLy8gQWRkZWQgY2FzdCB0byB3b3Jr
IGFyb3VuZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgRm91bmRhdGlvbiBpbml0V2l0aElkZW50aWZp
ZXI6IG1ldGhvZHMgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIHR5cGVzLgorICAgIE5TVGFibGVD
b2x1bW4gKmNvbHVtbiA9IFsoTlNUYWJsZUNvbHVtbiAqKVtOU1RhYmxlQ29sdW1uIGFsbG9jXSBp
bml0V2l0aElkZW50aWZpZXI6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MF1dOworICAgIFtjb2x1
bW4gc2V0V2lkdGg6dGFibGVGcmFtZS5zaXplLndpZHRoXTsKKyAgICBbY29sdW1uIHNldEVkaXRh
YmxlOk5PXTsKKyAgICAKKyAgICBfdGFibGVWaWV3ID0gW1tOU1RhYmxlVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTp0YWJsZUZyYW1lXTsKKyAgICBbX3RhYmxlVmlldyBzZXRBdXRvcmVzaXppbmdN
YXNrOk5TVmlld1dpZHRoU2l6YWJsZV07CisgICAgW190YWJsZVZpZXcgYWRkVGFibGVDb2x1bW46
Y29sdW1uXTsKKyAgICBbY29sdW1uIHJlbGVhc2VdOworICAgIFtfdGFibGVWaWV3IHNldEdyaWRT
dHlsZU1hc2s6TlNUYWJsZVZpZXdHcmlkTm9uZV07CisgICAgW190YWJsZVZpZXcgc2V0Q29ybmVy
VmlldzpuaWxdOworICAgIFtfdGFibGVWaWV3IHNldEhlYWRlclZpZXc6bmlsXTsKKyAgICBbX3Rh
YmxlVmlldyBzZXRDb2x1bW5BdXRvcmVzaXppbmdTdHlsZTpOU1RhYmxlVmlld1VuaWZvcm1Db2x1
bW5BdXRvcmVzaXppbmdTdHlsZV07CisgICAgW190YWJsZVZpZXcgc2V0RGVsZWdhdGU6c2VsZl07
CisgICAgW190YWJsZVZpZXcgc2V0RGF0YVNvdXJjZTpzZWxmXTsKKyAgICBbX3RhYmxlVmlldyBz
ZXRUYXJnZXQ6c2VsZl07CisgICAgW190YWJsZVZpZXcgc2V0RG91YmxlQWN0aW9uOkBzZWxlY3Rv
cih0YWJsZUFjdGlvbjopXTsKKyAgICAKKyAgICBOU1Njcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSBb
W05TU2Nyb2xsVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzY3JvbGxGcmFtZV07CisgICAgW3Nj
cm9sbFZpZXcgc2V0Qm9yZGVyVHlwZTpOU05vQm9yZGVyXTsKKyAgICBbc2Nyb2xsVmlldyBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGVyOllFU107CisgICAgW3Njcm9sbFZpZXcgc2V0QXV0b3Jlc2l6aW5n
TWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKKyAgICBbc2Ny
b2xsVmlldyBzZXREb2N1bWVudFZpZXc6X3RhYmxlVmlld107CisgICAgW190YWJsZVZpZXcgcmVs
ZWFzZV07CisgICAgCisgICAgX3BvcHVwV2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdp
dGhDb250ZW50UmVjdDpzY3JvbGxGcmFtZSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFz
ayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIFtfcG9wdXBX
aW5kb3cgc2V0QWxwaGFWYWx1ZTowLjg4Zl07CisgICAgW19wb3B1cFdpbmRvdyBzZXRDb250ZW50
VmlldzpzY3JvbGxWaWV3XTsKKyAgICBbc2Nyb2xsVmlldyByZWxlYXNlXTsKKyAgICBbX3BvcHVw
V2luZG93IHNldEhhc1NoYWRvdzpZRVNdOworICAgIFtfcG9wdXBXaW5kb3cgc2V0T25lU2hvdDpZ
RVNdOworICAgIFtfcG9wdXBXaW5kb3cgX3NldEZvcmNlQWN0aXZlQ29udHJvbHM6WUVTXTsKKyAg
ICBbX3BvcHVwV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Cit9CisKKy8vIG1vc3Rs
eSBsaWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJpbmRpbmcubQorLSAodm9pZClfcGxhY2VQb3B1
cFdpbmRvdzooTlNQb2ludCl0b3BMZWZ0Cit7CisgICAgaW50IG51bWJlclRvU2hvdyA9IFtfY29t
cGxldGlvbnMgY291bnRdOworICAgIGlmIChudW1iZXJUb1Nob3cgPiAyMCkgeworICAgICAgICBu
dW1iZXJUb1Nob3cgPSAyMDsKKyAgICB9CisKKyAgICBOU1JlY3Qgd2luZG93RnJhbWU7CisgICAg
TlNQb2ludCB3b3JkU3RhcnQgPSB0b3BMZWZ0OworICAgIHdpbmRvd0ZyYW1lLm9yaWdpbiA9IFtb
X3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOltfdmlldyBjb252ZXJ0UG9pbnQ6d29y
ZFN0YXJ0IHRvVmlldzpuaWxdXTsKKyAgICB3aW5kb3dGcmFtZS5zaXplLmhlaWdodCA9IG51bWJl
clRvU2hvdyAqIFtfdGFibGVWaWV3IHJvd0hlaWdodF0gKyAobnVtYmVyVG9TaG93ICsgMSkgKiBb
X3RhYmxlVmlldyBpbnRlcmNlbGxTcGFjaW5nXS5oZWlnaHQ7CisgICAgd2luZG93RnJhbWUub3Jp
Z2luLnkgLT0gd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQ7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRy
aWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU0Zv
bnQgc3lzdGVtRm9udE9mU2l6ZToxMi4wZl0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsIG5pbF07Cisg
ICAgZmxvYXQgbWF4V2lkdGggPSAwLjBmOworICAgIGludCBtYXhJbmRleCA9IC0xOworICAgIGlu
dCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJUb1Nob3c7IGkrKykgeworICAgICAgICBm
bG9hdCB3aWR0aCA9IGNlaWxmKFtbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6aV0gc2l6ZVdp
dGhBdHRyaWJ1dGVzOmF0dHJpYnV0ZXNdLndpZHRoKTsKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4
V2lkdGgpIHsKKyAgICAgICAgICAgIG1heFdpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBtYXhJ
bmRleCA9IGk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2luZG93RnJhbWUuc2l6ZS53aWR0aCA9
IDEwMDsKKyAgICBpZiAobWF4SW5kZXggPj0gMCkgeworICAgICAgICBtYXhXaWR0aCA9IGNlaWxm
KFtOU1Njcm9sbFZpZXcgZnJhbWVTaXplRm9yQ29udGVudFNpemU6TlNNYWtlU2l6ZShtYXhXaWR0
aCwgMTAwLjBmKSBoYXNIb3Jpem9udGFsU2Nyb2xsZXI6Tk8gaGFzVmVydGljYWxTY3JvbGxlcjpZ
RVMgYm9yZGVyVHlwZTpOU05vQm9yZGVyXS53aWR0aCk7CisgICAgICAgIG1heFdpZHRoID0gY2Vp
bGYoW05TV2luZG93IGZyYW1lUmVjdEZvckNvbnRlbnRSZWN0Ok5TTWFrZVJlY3QoMC4wZiwgMC4w
ZiwgbWF4V2lkdGgsIDEwMC4wZikgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2tdLnNp
emUud2lkdGgpOworICAgICAgICBtYXhXaWR0aCArPSA1LjBmOworICAgICAgICB3aW5kb3dGcmFt
ZS5zaXplLndpZHRoID0gTUFYKG1heFdpZHRoLCB3aW5kb3dGcmFtZS5zaXplLndpZHRoKTsKKyAg
ICAgICAgbWF4V2lkdGggPSBNSU4oNDAwLjBmLCB3aW5kb3dGcmFtZS5zaXplLndpZHRoKTsKKyAg
ICB9CisgICAgW19wb3B1cFdpbmRvdyBzZXRGcmFtZTp3aW5kb3dGcmFtZSBkaXNwbGF5Ok5PXTsK
KyAgICAKKyAgICBbX3RhYmxlVmlldyByZWxvYWREYXRhXTsKKyAgICBbX3RhYmxlVmlldyBzZWxl
Y3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OjBdIGJ5RXh0ZW5kaW5n
U2VsZWN0aW9uOk5PXTsKKyAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dUb1Zpc2libGU6MF07Cisg
ICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOworICAgIFtfcG9wdXBXaW5kb3cgc2V0TGV2ZWw6
TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07CisgICAgW19wb3B1cFdpbmRvdyBvcmRlckZyb250Om5p
bF07ICAgIAorICAgIFtbX3ZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzpfcG9wdXBXaW5kb3cg
b3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKK30KKworLSAodm9pZClkb0NvbXBsZXRpb24KK3sKKyAg
ICBpZiAoIV9wb3B1cFdpbmRvdykgeworICAgICAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9
IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOworICAgICAgICBpZiAoIWNoZWNr
ZXIpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdv
cmQgc3RlbQorICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKKyAgICAg
ICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCktPnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBET01SYW5nZSAqd2hvbGVXb3JkID0g
W2ZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkVYVEVORAorICAgICAgICAgICAgZGlyZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6OkJB
Q0tXQVJEIGdyYW51bGFyaXR5OldvcmRHcmFudWxhcml0eV07CisgICAgICAgIERPTVJhbmdlICpw
cmVmaXggPSBbd2hvbGVXb3JkIGNsb25lUmFuZ2VdOworICAgICAgICBbcHJlZml4IHNldEVuZDpb
c2VsZWN0aW9uIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3NlbGVjdGlvbiBzdGFydE9mZnNldF1d
OworCisgICAgICAgIC8vIFJlamVjdCBzb21lIE5PUCBjYXNlcworICAgICAgICBpZiAoW3ByZWZp
eCBjb2xsYXBzZWRdKSB7CisgICAgICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBOU1N0cmluZyAqcHJlZml4U3RyID0gW2ZyYW1lIF9zdHJp
bmdGb3JSYW5nZTpwcmVmaXhdOworICAgICAgICBOU1N0cmluZyAqdHJpbW1lZFByZWZpeCA9IFtw
cmVmaXhTdHIgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQg
d2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKKyAgICAgICAgaWYgKFt0cmltbWVk
UHJlZml4IGxlbmd0aF0gPT0gMCkgeworICAgICAgICAgICAgTlNCZWVwKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJlZml4TGVuZ3RoID0gW3ByZWZpeFN0ciBs
ZW5ndGhdOworCisgICAgICAgIC8vIExvb2t1cCBtYXRjaGVzCisgICAgICAgIFtfY29tcGxldGlv
bnMgcmVsZWFzZV07CisgICAgICAgIF9jb21wbGV0aW9ucyA9IFtjaGVja2VyIGNvbXBsZXRpb25z
Rm9yUGFydGlhbFdvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBbcHJlZml4U3RyIGxlbmd0aF0pIGlu
U3RyaW5nOnByZWZpeFN0ciBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbW192
aWV3IF93ZWJWaWV3XSBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11dOworICAgICAgICBbX2NvbXBs
ZXRpb25zIHJldGFpbl07CisgICAgCisgICAgICAgIGlmICghX2NvbXBsZXRpb25zIHx8IFtfY29t
cGxldGlvbnMgY291bnRdID09IDApIHsKKyAgICAgICAgICAgIE5TQmVlcCgpOworICAgICAgICB9
IGVsc2UgaWYgKFtfY29tcGxldGlvbnMgY291bnRdID09IDEpIHsKKyAgICAgICAgICAgIFtzZWxm
IF9pbnNlcnRNYXRjaDpbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6MF1dOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCFfb3JpZ2luYWxTdHJpbmcpOyAgICAgICAvLyB0
aGlzIHNob3VsZCBvbmx5IGJlIHNldCBJRkYgd2UgaGF2ZSBhIHBvcHVwIHdpbmRvdworICAgICAg
ICAgICAgX29yaWdpbmFsU3RyaW5nID0gW1tmcmFtZSBfc3RyaW5nRm9yUmFuZ2U6c2VsZWN0aW9u
XSByZXRhaW5dOworICAgICAgICAgICAgW3NlbGYgX2J1aWxkVUldOworICAgICAgICAgICAgTlNS
ZWN0IHdvcmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdE5vZGU6W3dob2xlV29yZCBzdGFydENv
bnRhaW5lcl0gb2Zmc2V0Olt3aG9sZVdvcmQgc3RhcnRPZmZzZXRdIGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsKKyAgICAgICAgICAgIC8vICsxIHRvIGJlIHVuZGVyIHRo
ZSB3b3JkLCBub3QgdGhlIGNhcmV0CisgICAgICAgICAgICAvLyBGSVhNRSAtIDM3Njk2NTIgLSBX
cm9uZyBwb3NpdGlvbmluZyBmb3IgcmlnaHQgdG8gbGVmdCBsYW5ndWFnZXMuICBXZSBzaG91bGQg
bGluZSB1cCB0aGUgdXBwZXIKKyAgICAgICAgICAgIC8vIHJpZ2h0IGNvcm5lciB3aXRoIHRoZSBj
YXJldCBpbnN0ZWFkIG9mIHVwcGVyIGxlZnQsIGFuZCB0aGUgKzEgd291bGQgYmUgYSAtMS4KKyAg
ICAgICAgICAgIE5TUG9pbnQgd29yZExvd2VyTGVmdCA9IHsgTlNNaW5YKHdvcmRSZWN0KSsxLCBO
U01heFkod29yZFJlY3QpIH07CisgICAgICAgICAgICBbc2VsZiBfcGxhY2VQb3B1cFdpbmRvdzp3
b3JkTG93ZXJMZWZ0XTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFtzZWxmIGVu
ZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOworICAgIH0KK30KKworLSAodm9pZCll
bmRSZXZlcnRpbmdDaGFuZ2U6KEJPT0wpcmV2ZXJ0Q2hhbmdlIG1vdmVMZWZ0OihCT09MKWdvTGVm
dAoreworICAgIGlmIChfcG9wdXBXaW5kb3cpIHsKKyAgICAgICAgLy8gdGVhciBkb3duIFVJCisg
ICAgICAgIFtbX3ZpZXcgd2luZG93XSByZW1vdmVDaGlsZFdpbmRvdzpfcG9wdXBXaW5kb3ddOwor
ICAgICAgICBbX3BvcHVwV2luZG93IG9yZGVyT3V0OnNlbGZdOworICAgICAgICAvLyBNdXN0IGF1
dG9yZWxlYXNlIGJlY2F1c2UgZXZlbnQgdHJhY2tpbmcgY29kZSBtYXkgYmUgb24gdGhlIHN0YWNr
IHRvdWNoaW5nIFVJCisgICAgICAgIFtfcG9wdXBXaW5kb3cgYXV0b3JlbGVhc2VdOworICAgICAg
ICBfcG9wdXBXaW5kb3cgPSBuaWw7CisKKyAgICAgICAgaWYgKHJldmVydENoYW5nZSkgeworICAg
ICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07CisgICAgICAgICAgICBb
ZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpfb3JpZ2luYWxTdHJpbmcgc2VsZWN0UmVw
bGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107CisgICAgICAgIH0gZWxzZSBpZiAoW192aWV3
IF9oYXNTZWxlY3Rpb25dKSB7CisgICAgICAgICAgICBpZiAoZ29MZWZ0KQorICAgICAgICAgICAg
ICAgIFtfdmlldyBtb3ZlQmFja3dhcmQ6bmlsXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBbX3ZpZXcgbW92ZUZvcndhcmQ6bmlsXTsKKyAgICAgICAgfQorICAgICAgICBbX29y
aWdpbmFsU3RyaW5nIHJlbGVhc2VdOworICAgICAgICBfb3JpZ2luYWxTdHJpbmcgPSBuaWw7Cisg
ICAgfQorICAgIC8vIGVsc2UgdGhlcmUgaXMgbm8gc3RhdGUgdG8gYWJvcnQgaWYgdGhlIHdpbmRv
dyB3YXMgbm90IHVwCit9CisKKy0gKEJPT0wpcG9wdXBXaW5kb3dJc09wZW4KK3sKKyAgICByZXR1
cm4gX3BvcHVwV2luZG93ICE9IG5pbDsKK30KKworLy8gV2ViSFRNTFZpZXcgZ2l2ZXMgdXMgYSBj
cmFjayBhdCBrZXkgZXZlbnRzIGl0IHNlZXMuIFJldHVybiB3aGV0aGVyIHdlIGNvbnN1bWVkIHRo
ZSBldmVudC4KKy8vIFRoZSBmZWF0dXJlcyBmb3IgdGhlIHZhcmlvdXMga2V5cyBtaW1pYyBOU1Rl
eHRWaWV3LgorLSAoQk9PTClmaWx0ZXJLZXlEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBp
ZiAoIV9wb3B1cFdpbmRvdykKKyAgICAgICAgcmV0dXJuIE5POworICAgIE5TU3RyaW5nICpzdHJp
bmcgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKKyAgICBpZiAoIVtzdHJp
bmcgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIHVuaWNoYXIgYyA9IFtzdHJpbmcg
Y2hhcmFjdGVyQXRJbmRleDowXTsKKyAgICBpZiAoYyA9PSBOU1VwQXJyb3dGdW5jdGlvbktleSkg
eworICAgICAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBzZWxlY3RlZFJvd107Cisg
ICAgICAgIGlmICgwIDwgc2VsZWN0ZWRSb3cpIHsKKyAgICAgICAgICAgIFtfdGFibGVWaWV3IHNl
bGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6c2VsZWN0ZWRSb3cg
LSAxXSBieUV4dGVuZGluZ1NlbGVjdGlvbjpOT107CisgICAgICAgICAgICBbX3RhYmxlVmlldyBz
Y3JvbGxSb3dUb1Zpc2libGU6c2VsZWN0ZWRSb3cgLSAxXTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9PSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5KSB7
CisgICAgICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVkUm93XTsKKyAg
ICAgICAgaWYgKHNlbGVjdGVkUm93IDwgKGludClbX2NvbXBsZXRpb25zIGNvdW50XSAtIDEpIHsK
KyAgICAgICAgICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5k
ZXhTZXRXaXRoSW5kZXg6c2VsZWN0ZWRSb3cgKyAxXSBieUV4dGVuZGluZ1NlbGVjdGlvbjpOT107
CisgICAgICAgICAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dUb1Zpc2libGU6c2VsZWN0ZWRSb3cg
KyAxXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9
PSBOU1JpZ2h0QXJyb3dGdW5jdGlvbktleSB8fCBjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMg
PT0gJ1x0JykgeworICAgICAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBiYWNrdGFiPworICAgICAg
ICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgICAgICByZXR1
cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9PSBOU0xlZnRBcnJvd0Z1bmN0aW9uS2V5KSB7Cisg
ICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpZRVNdOworICAgICAg
ICByZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9PSAweDFCIHx8IGMgPT0gTlNGNUZ1bmN0
aW9uS2V5KSB7CisgICAgICAgIC8vIEZJWE1FOiBGNT8KKyAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0
aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQor
ICAgIGlmIChjID09ICcgJyB8fCBjID49IDB4MjEgJiYgYyA8PSAweDJGIHx8IGMgPj0gMHgzQSAm
JiBjIDw9IDB4NDAgfHwgYyA+PSAweDVCICYmIGMgPD0gMHg2MCB8fCBjID49IDB4N0IgJiYgYyA8
PSAweDdEKSB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgYWJvdmUgbGlzdCBvZiBrZXlzIHJl
YWxseSBkZWZpbml0aXZlPworICAgICAgICAvLyBPcmlnaW5hbGx5IHRoaXMgY29kZSBjYWxsZWQg
aXNwdW5jdDsgYXJlbid0IHRoZXJlIG90aGVyIHB1bmN0dWF0aW9uIGtleXMgb24gaW50ZXJuYXRp
b25hbCBrZXlib2FyZHM/CisgICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3Zl
TGVmdDpOT107CisgICAgICAgIHJldHVybiBOTzsgLy8gbGV0IHRoZSBjaGFyIGdldCBpbnNlcnRl
ZAorICAgIH0KKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpX3JlZmxlY3RTZWxlY3Rpb24K
K3sKKyAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBzZWxlY3RlZFJvd107CisgICAg
QVNTRVJUKHNlbGVjdGVkUm93ID49IDAgJiYgc2VsZWN0ZWRSb3cgPCAoaW50KVtfY29tcGxldGlv
bnMgY291bnRdKTsKKyAgICBbc2VsZiBfaW5zZXJ0TWF0Y2g6W19jb21wbGV0aW9ucyBvYmplY3RB
dEluZGV4OnNlbGVjdGVkUm93XV07Cit9CisKKy0gKHZvaWQpdGFibGVBY3Rpb246KGlkKXNlbmRl
cgoreworICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsKKyAgICBbc2VsZiBlbmRSZXZlcnRp
bmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworfQorCistIChOU0ludGVnZXIpbnVtYmVyT2ZSb3dz
SW5UYWJsZVZpZXc6KE5TVGFibGVWaWV3ICopdGFibGVWaWV3Cit7CisgICAgcmV0dXJuIFtfY29t
cGxldGlvbnMgY291bnRdOworfQorCistIChpZCl0YWJsZVZpZXc6KE5TVGFibGVWaWV3ICopdGFi
bGVWaWV3IG9iamVjdFZhbHVlRm9yVGFibGVDb2x1bW46KE5TVGFibGVDb2x1bW4gKil0YWJsZUNv
bHVtbiByb3c6KE5TSW50ZWdlcilyb3cKK3sKKyAgICByZXR1cm4gW19jb21wbGV0aW9ucyBvYmpl
Y3RBdEluZGV4OnJvd107Cit9CisKKy0gKHZvaWQpdGFibGVWaWV3U2VsZWN0aW9uRGlkQ2hhbmdl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIFtzZWxmIF9yZWZsZWN0U2Vs
ZWN0aW9uXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkRv
Y3VtZW50UHJpdmF0ZVByb3RvY29scykKKworLSAoTlNSZWN0KXNlbGVjdGlvblJlY3QKK3sKKyAg
ICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCisgICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9m
cmFtZV0pLT5zZWxlY3Rpb25Cb3VuZHMoKTsKKyAgICByZXR1cm4gTlNaZXJvUmVjdDsKK30KKwor
LSAoTlNBcnJheSAqKXNlbGVjdGlvblRleHRSZWN0cworeworICAgIGlmICghW3NlbGYgX2hhc1Nl
bGVjdGlvbl0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmVjdG9yPEZsb2F0UmVj
dD4gbGlzdDsKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uVGV4dFJlY3RzKGxpc3QpOworCisgICAgdW5z
aWduZWQgc2l6ZSA9IGxpc3Quc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBb
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFz
ZV07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgW3Jl
c3VsdCBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpsaXN0W2ldXV07CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNWaWV3ICopc2VsZWN0aW9uVmlldworeworICAg
IHJldHVybiBzZWxmOworfQorCistIChOU0ltYWdlICopc2VsZWN0aW9uSW1hZ2VGb3JjaW5nQmxh
Y2tUZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0Cit7CisgICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rp
b25dKQorICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uSW1hZ2Uo
Zm9yY2VCbGFja1RleHQpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TUmVjdClzZWxlY3Rp
b25JbWFnZVJlY3QKK3sKKyAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCisgICAgICAgIHJl
dHVybiBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25Cb3VuZHMoKTsKKyAgICByZXR1cm4g
TlNaZXJvUmVjdDsKK30KKworLSAoTlNBcnJheSAqKXBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlv
bgoreworICAgIGlmIChbc2VsZiBfY2FuU21hcnRDb3B5T3JEZWxldGVdKSB7CisgICAgICAgIE5T
TXV0YWJsZUFycmF5ICp0eXBlcyA9IFtbW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2Fy
ZFR5cGVzXSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOworICAgICAgICBbdHlwZXMgYWRkT2Jq
ZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKKyAgICAgICAgcmV0dXJuIHR5cGVzOworICAg
IH0gZWxzZSB7CisgICAgICAgIHJldHVybiBbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25QYXN0ZWJv
YXJkVHlwZXNdOworICAgIH0KK30KKworLSAodm9pZCl3cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJv
YXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlYm9hcmQKK3sKKyAgICBbc2VsZiBfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVz
OnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6bmls
XTsKK30KKworLSAodm9pZClzZWxlY3RBbGwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoY29yZUZyYW1lKQorICAgICAgICBjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3RBbGwoKTsKK30KKworLSAodm9pZClkZXNlbGVjdEFsbAorewor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29y
ZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xl
YXIoKTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW1tzZWxmIF9m
cmFtZV0gX3N0cmluZ0ZvclJhbmdlOltzZWxmIF9kb2N1bWVudFJhbmdlXV07Cit9CisKKy0gKE5T
QXR0cmlidXRlZFN0cmluZyAqKV9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UKK3sKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7Cisj
aWYgIUxPR19ESVNBQkxFRCAgICAgICAgCisgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCk7CisjZW5kaWYgICAgCisgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gX2luaXRXaXRoRE9NUmFuZ2U6cmFuZ2VdIGF1dG9yZWxl
YXNlXTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5nLCAiY3JlYXRpbmcgYXR0
cmlidXRlZCBzdHJpbmcgZnJvbSBzZWxlY3Rpb24gdG9vayAlZiBzZWNvbmRzLiIsIGR1cmF0aW9u
KTsKKyNlbmRpZgorICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworfQorCistIChOU0F0dHJp
YnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgRE9NRG9jdW1lbnQgKmRvY3Vt
ZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOworICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6
W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV07CisgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7
CisgICAgICAgIERvY3VtZW50KiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRvY3VtZW50KTsKKyAgICAg
ICAgYXR0cmlidXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlOlJhbmdlOjpjcmVhdGUoY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQs
IDAsIGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jaGlsZE5vZGVDb3VudCgpKS5nZXQoKV07
CisgICAgfQorICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworfQorCistIChOU1N0cmluZyAq
KXNlbGVjdGVkU3RyaW5nCit7CisgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3RlZFN0
cmluZ107Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0
cmluZworeworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxm
IF9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdXTsKKyAg
ICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtO
U0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOnJhbmdlLmdl
dCgpXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKK30K
KworLSAoQk9PTClzdXBwb3J0c1RleHRFbmNvZGluZworeworICAgIHJldHVybiBZRVM7Cit9CisK
Ky0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9y
d2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3Rh
cnRJblNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uCit7CisgICAgaWYgKCFbc3RyaW5n
IGxlbmd0aF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+Zmlu
ZFN0cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZywgc3RhcnRJblNlbGVj
dGlvbik7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJEb2N1
bWVudEludGVybmFsUHJvdG9jb2xzKQorCistIChOU0RpY3Rpb25hcnkgKillbGVtZW50QXRQb2lu
dDooTlNQb2ludClwb2ludAoreworICAgIHJldHVybiBbc2VsZiBlbGVtZW50QXRQb2ludDpwb2lu
dCBhbGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOworfQorCistIChOU0RpY3Rpb25hcnkgKillbGVtZW50
QXRQb2ludDooTlNQb2ludClwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6KEJPT0wpYWxsb3cKK3sK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNv
cmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tbV2ViRWxlbWVudERp
Y3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpjb3JlRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludChwb2ludCksIGFsbG93KV0gYXV0
b3JlbGVhc2VdOworfQorCistIChOU1VJbnRlZ2VyKW1hcmtBbGxNYXRjaGVzRm9yVGV4dDooTlNT
dHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1pdDooTlNVSW50
ZWdlcilsaW1pdAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29y
ZUZyYW1lLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjYXNlRmxhZywgbGltaXQpOwor
fQorCistICh2b2lkKXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3
VmFsdWUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAg
ICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcmVGcmFtZS0+c2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChuZXdWYWx1ZSk7Cit9CisKKy0gKEJPT0wpbWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5t
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7Cit9CisKKy0gKHZvaWQpdW5tYXJrQWxs
VGV4dE1hdGNoZXMKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm47CisgICAgZG9jdW1lbnQtPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6
OlRleHRNYXRjaCk7Cit9CisKKy0gKE5TQXJyYXkgKilyZWN0c0ZvclRleHRNYXRjaGVzCit7Cisg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3Jl
RnJhbWUpCisgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07CisgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07CisKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMg
PSBkb2N1bWVudC0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRN
YXRjaCk7CisgICAgdW5zaWduZWQgY291bnQgPSByZWN0cy5zaXplKCk7CisgICAgTlNNdXRhYmxl
QXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3VudF07
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCisg
ICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdHNbaW5k
ZXhdXV07ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKKworLy8gVGhpcyBpcyB1
c2VkIGJ5IEFwcEtpdCBhbmQgaXMgaW5jbHVkZWQgaGVyZSBzbyB0aGF0IFdlYkRhdGFQcm90b2Nv
bFNjaGVtZSBpcyBvbmx5IGRlZmluZWQgb25jZS4KK0BpbXBsZW1lbnRhdGlvbiBOU1VSTCAoV2Vi
RGF0YVVSTCkKKworKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRhdGFVUkwKK3sKKyAgICBDRlVV
SURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKKyAgICBO
U1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKKyAgICBDRlJlbGVhc2UoVVVJRFJlZik7CisgICAg
TlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJUA6Ly8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZ11dOworICAg
IENGUmVsZWFzZShVVUlEU3RyaW5nKTsKKyAgICByZXR1cm4gVVJMOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXZWJSZXNwb25kZXJDaGFpblNpbmsKKworLSAoaWQpaW5pdFdpdGhSZXNw
b25kZXJDaGFpbjooTlNSZXNwb25kZXIgKiljaGFpbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gY2hhaW47CisgICAgd2hpbGUgKE5TUmVz
cG9uZGVyICpuZXh0ID0gW19sYXN0UmVzcG9uZGVySW5DaGFpbiBuZXh0UmVzcG9uZGVyXSkKKyAg
ICAgICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gbmV4dDsKKyAgICBbX2xhc3RSZXNwb25kZXJJ
bkNoYWluIHNldE5leHRSZXNwb25kZXI6c2VsZl07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpZGV0YWNoCit7CisgICAgW19sYXN0UmVzcG9uZGVySW5DaGFpbiBzZXROZXh0UmVzcG9u
ZGVyOm5pbF07CisgICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gbmlsOworfQorCistIChCT09M
KXJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZAoreworICAgIHJldHVybiBfcmVjZWl2ZWRVbmhhbmRs
ZWRDb21tYW5kOworfQorCistICh2b2lkKW5vUmVzcG9uZGVyRm9yOihTRUwpc2VsZWN0b3IKK3sK
KyAgICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOworfQorCistICh2b2lkKWRvQ29t
bWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIF9yZWNlaXZlZFVuaGFuZGxlZENv
bW1hbmQgPSBZRVM7Cit9CisKKy0gKEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwpYWN0aW9uIHdpdGg6
KGlkKW9iamVjdAoreworICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQgPSBZRVM7CisgICAg
cmV0dXJuIFlFUzsKK30KKworQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRD
b21wbGV0aW9uQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCShyZXZpc2lvbiA0NDI5MikKKysrIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAg
ICAoQykgMjAwNiwgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkK
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNTg4MCArMjYsMzUgQEAKICAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiV2ViSFRNTFZpZXcuaCIKKyNpbXBvcnQgIldlYlRl
eHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogCi0jaW1wb3J0ICJET01DU1NTdHlsZURlY2xhcmF0
aW9uSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oIgot
I2ltcG9ydCAiRE9NRG9jdW1lbnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NTm9kZUludGVybmFs
LmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJBcmNoaXZlLmgi
Ci0jaW1wb3J0ICJXZWJDbGlwVmlldy5oIgotI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9uc0ludGVy
bmFsLmgiCi0jaW1wb3J0ICJXZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkRl
ZmF1bHRVSURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXZWJEb2N1bWVudEludGVybmFsLmgiCi0jaW1w
b3J0ICJXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaCIKLSNpbXBvcnQgIldlYkVkaXRpbmdEZWxl
Z2F0ZS5oIgotI2ltcG9ydCAiV2ViRWxlbWVudERpY3Rpb25hcnkuaCIKICNpbXBvcnQgIldlYkZy
YW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1lUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2Vi
RnJhbWVWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhUTUxSZXByZXNlbnRhdGlvblByaXZh
dGUuaCIKICNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYktpdExv
Z2dpbmcuaCIKLSNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJL
aXRWZXJzaW9uQ2hlY2tzLmgiCi0jaW1wb3J0ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCIKLSNp
bXBvcnQgIldlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNFdmVu
dEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oIgotI2ltcG9ydCAi
V2ViTlNJbWFnZUV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNPYmplY3RFeHRyYXMuaCIKLSNpbXBv
cnQgIldlYk5TUGFzdGVib2FyZEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNQcmludE9wZXJhdGlv
bkV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TVmll
d0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJX
ZWJOb2RlSGlnaGxpZ2h0LmgiCi0jaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCi0jaW1w
b3J0ICJXZWJQcmVmZXJlbmNlcy5oIgotI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgi
Ci0jaW1wb3J0ICJXZWJSZXNvdXJjZVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlN0cmluZ1RydW5j
YXRvci5oIgotI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViVUlEZWxl
Z2F0ZVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8QXBw
S2l0L05TQWNjZXNzaWJpbGl0eS5oPgotI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NhY2hlZEltYWdlLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0NhY2hlZFJlc291cmNlQ2xpZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2ltcG9y
dCA8V2ViQ29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9F
ZGl0b3JEZWxldGVBY3Rpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgotI2ltcG9y
dCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uSGFu
ZGxlcnMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0ZvY3VzQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1
bHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9h
cmRFdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9MZWdhY3lXZWJBcmNoaXZlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgot
I2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1RleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRleHRSZW5kZXJlci5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9tYXJrdXAuaD4KLSNpbXBvcnQgPFdlYktpdC9ET00uaD4KLSNpbXBvcnQgPFdlYktpdC9ET01F
eHRlbnNpb25zLmg+Ci0jaW1wb3J0IDxXZWJLaXQvRE9NUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jaW1wb3J0IDxkbGZjbi5oPgotI2ltcG9ydCA8bGltaXRz
PgotI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4K
LSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1AaW50ZXJmYWNlIE5TV2luZG93IChCb3Jk
ZXJWaWV3QWNjZXNzKQotLSAoTlNWaWV3Kilfd2ViX2JvcmRlclZpZXc7Ci1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKLS0gKE5TVmlldyopX3dlYl9i
b3JkZXJWaWV3Ci17Ci0gICAgcmV0dXJuIF9ib3JkZXJWaWV3OwotfQotQGVuZAotCi1AaW50ZXJm
YWNlIFdlYlJlc3BvbmRlckNoYWluU2luayA6IE5TUmVzcG9uZGVyIHsKLSAgICBOU1Jlc3BvbmRl
ciogX2xhc3RSZXNwb25kZXJJbkNoYWluOwotICAgIEJPT0wgX3JlY2VpdmVkVW5oYW5kbGVkQ29t
bWFuZDsKLX0KLS0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVyICopY2hh
aW47Ci0tICh2b2lkKWRldGFjaDsKLS0gKEJPT0wpcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kOwot
QGVuZAotCi1zdGF0aWMgSU1QIG9sZFNldEN1cnNvcklNUCA9IE5VTEw7Ci0KLSNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgotCi1zdGF0aWMgSU1QIG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAgPSBOVUxM
Owotc3RhdGljIEJPT0wgY2FuU2V0Q3Vyc29yID0gWUVTOwotCi1zdGF0aWMgdm9pZCByZXNldEN1
cnNvclJlY3RzKE5TV2luZG93KiBzZWxmLCBTRUwgY21kKQotewotICAgIE5TUG9pbnQgcG9pbnQg
PSBbc2VsZiBtb3VzZUxvY2F0aW9uT3V0c2lkZU9mRXZlbnRTdHJlYW1dOwotICAgIE5TVmlldyog
dmlldyA9IFtbc2VsZiBfd2ViX2JvcmRlclZpZXddIGhpdFRlc3Q6cG9pbnRdOwotICAgIGlmIChb
dmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7Ci0gICAgICAgIFdlYkhU
TUxWaWV3ICpodG1sVmlldyA9IChXZWJIVE1MVmlldyopdmlldzsKLSAgICAgICAgTlNQb2ludCBs
b2NhbFBvaW50ID0gW2h0bWxWaWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdOwot
ICAgICAgICBOU0RpY3Rpb25hcnkgKmRpY3QgPSBbaHRtbFZpZXcgZWxlbWVudEF0UG9pbnQ6bG9j
YWxQb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOwotICAgICAgICBET01FbGVtZW50ICplbGVt
ZW50ID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRET01Ob2RlS2V5XTsKLSAgICAgICAg
aWYgKCFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MQXBwbGV0RWxlbWVudCBjbGFzc11d
ICYmICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MT2JqZWN0RWxlbWVudCBjbGFzc11d
ICYmCi0gICAgICAgICAgICAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEVtYmVkRWxl
bWVudCBjbGFzc11dKQotICAgICAgICAgICAgY2FuU2V0Q3Vyc29yID0gTk87Ci0gICAgfQotICAg
IG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAoc2VsZiwgY21kKTsKLSAgICBjYW5TZXRDdXJzb3IgPSBZ
RVM7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEN1cnNvcihOU0N1cnNvciogc2VsZiwgU0VMIGNtZCkK
LXsKLSAgICBpZiAoY2FuU2V0Q3Vyc29yKQotICAgICAgICBvbGRTZXRDdXJzb3JJTVAoc2VsZiwg
Y21kKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIHZvaWQgc2V0Q3Vyc29yKE5TV2luZG93KiBzZWxm
LCBTRUwgY21kLCBOU1BvaW50IHBvaW50KQotewotICAgIE5TVmlldyogdmlldyA9IFtbc2VsZiBf
d2ViX2JvcmRlclZpZXddIGhpdFRlc3Q6cG9pbnRdOwotICAgIGlmIChbdmlldyBpc0tpbmRPZkNs
YXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7Ci0gICAgICAgIFdlYkhUTUxWaWV3ICpodG1sVmll
dyA9IChXZWJIVE1MVmlldyopdmlldzsKLSAgICAgICAgTlNQb2ludCBsb2NhbFBvaW50ID0gW2h0
bWxWaWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdOwotICAgICAgICBOU0RpY3Rp
b25hcnkgKmRpY3QgPSBbaHRtbFZpZXcgZWxlbWVudEF0UG9pbnQ6bG9jYWxQb2ludCBhbGxvd1No
YWRvd0NvbnRlbnQ6Tk9dOwotICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0gW2RpY3Qgb2Jq
ZWN0Rm9yS2V5OldlYkVsZW1lbnRET01Ob2RlS2V5XTsKLSAgICAgICAgaWYgKCFbZWxlbWVudCBp
c0tpbmRPZkNsYXNzOltET01IVE1MQXBwbGV0RWxlbWVudCBjbGFzc11dICYmICFbZWxlbWVudCBp
c0tpbmRPZkNsYXNzOltET01IVE1MT2JqZWN0RWxlbWVudCBjbGFzc11dICYmCi0gICAgICAgICAg
ICAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEVtYmVkRWxlbWVudCBjbGFzc11dKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvbGRTZXRDdXJzb3JJTVAoc2VsZiwgY21k
LCBwb2ludCk7Ci19Ci0KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotCi1AaW50ZXJmYWNlIFdlYkxheWVySG9zdGluZ1ZpZXcgOiBOU1ZpZXcKLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdlYkxheWVySG9zdGluZ1ZpZXcKLQotLy8gRW1wdHkgTlNWaWV3cyBpbnRl
cmNlcHQgcmlnaHRNb3VzZURvd246IHRvIGRvIGNvbnRleHQgbWVudSBoYW5kbGluZywgYnV0IHdl
IG5lZWQgdGhlIFdlYkxheWVySG9zdGluZ1ZpZXcgdG8KLS8vIGxldCByaWdodCBtb3VzZSBjbGlj
a3MgdGhyb3VnaC4KLS0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVudAotewot
ICAgIFtbc2VsZiBuZXh0UmVzcG9uZGVyXSBwZXJmb3JtU2VsZWN0b3I6X2NtZCB3aXRoT2JqZWN0
OmV2ZW50XTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotCi1leHRlcm4gIkMiIHsKLQotLy8gTmVlZCB0byBkZWNsYXJlIHRoZXNlIGF0dHJpYnV0
ZSBuYW1lcyBiZWNhdXNlIEFwcEtpdCBleHBvcnRzIHRoZW0gYnV0IGRvZXMgbm90IG1ha2UgdGhl
bSBhdmFpbGFibGUgaW4gQVBJIG9yIFNQSSBoZWFkZXJzLgotCi1leHRlcm4gTlNTdHJpbmcgKk5T
TWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWU7Ci1leHRlcm4gTlNTdHJpbmcgKk5TVGV4
dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWU7Ci0KLX0KLQotQGludGVyZmFjZSBO
U1ZpZXcgKFdlYk5TVmlld0RldGFpbHMpCi0tICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5UmVjdElm
TmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0OihCT09MKWlz
VmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2aXNpYmxlVmll
dyB0b3BWaWV3OihCT09MKXRvcFZpZXc7Ci0tICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5QWxsRGly
dHlXaXRoTG9ja0ZvY3VzOihCT09MKW5lZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6KE5TUmVjdCl2aXNS
ZWN0OwotLSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmlu
Z09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdCBpbkNvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0
ICopY29udGV4dCB0b3BWaWV3OihCT09MKXRvcFZpZXc7Ci0tIChOU1JlY3QpX2RpcnR5UmVjdDsK
LS0gKHZvaWQpX3NldERyYXdzT3duRGVzY2VuZGFudHM6KEJPT0wpZHJhd3NPd25EZXNjZW5kYW50
czsKLS0gKHZvaWQpX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9yczsKLS0gKHZv
aWQpX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZTsKLUBlbmQKLQotQGludGVyZmFjZSBOU0FwcGxpY2F0
aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0YWlscykKLS0gKHZvaWQpc3BlYWtTdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0Rl
dGFpbHMpCi0tIChpZClfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKLS0gKHZvaWQp
X3NldEZvcmNlQWN0aXZlQ29udHJvbHM6KEJPT0wpZmxhZzsKLUBlbmQKLQotQGludGVyZmFjZSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCi0tIChpZClf
aW5pdFdpdGhET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKLS0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnQ6KERPTURvY3Vt
ZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1
YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
TlNTcGVsbENoZWNrZXIgKFdlYk5TU3BlbGxDaGVja2VyRGV0YWlscykKLS0gKHZvaWQpbGVhcm5X
b3JkOihOU1N0cmluZyAqKXdvcmQ7Ci1AZW5kCi0KLS8vIEJ5IGltYWdpbmcgdG8gYSB3aWR0aCBh
IGxpdHRsZSB3aWRlciB0aGFuIHRoZSBhdmFpbGFibGUgcGl4ZWxzLAotLy8gdGhpbiBwYWdlcyB3
aWxsIGJlIHNjYWxlZCBkb3duIGEgbGl0dGxlLCBtYXRjaGluZyB0aGUgd2F5IHRoZXkKLS8vIHBy
aW50IGluIElFIGFuZCBDYW1pbm8uIFRoaXMgbGV0cyB0aGVtIHVzZSBmZXdlciBzaGVldHMgdGhh
biB0aGV5Ci0vLyB3b3VsZCBvdGhlcndpc2UsIHdoaWNoIGlzIHByZXN1bWFibHkgd2h5IG90aGVy
IGJyb3dzZXJzIGRvIHRoaXMuCi0vLyBXaWRlIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIGRvd24gbW9y
ZSB0aGFuIHRoaXMuCi0jZGVmaW5lIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciAgICAgMS4y
NWYKLQotLy8gVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyBob3cgc21hbGwgd2UgYXJlIHdpbGxpbmcg
dG8gcmVkdWNlIHRoZSBwYWdlIGNvbnRlbnQKLS8vIGluIG9yZGVyIHRvIGFjY29tbW9kYXRlIHRo
ZSB3aWRlc3QgbGluZS4gSWYgdGhlIHBhZ2Ugd291bGQgaGF2ZSB0byBiZQotLy8gcmVkdWNlZCBz
bWFsbGVyIHRvIG1ha2UgdGhlIHdpZGVzdCBsaW5lIGZpdCwgd2UganVzdCBjbGlwIGluc3RlYWQg
KHRoaXMKLS8vIGJlaGF2aW9yIG1hdGNoZXMgTWFjSUUgYW5kIE1vemlsbGEsIGF0IGxlYXN0KQot
I2RlZmluZSBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgICAgIDIuMGYKLQotLy8gVGhpcyBu
dW1iZXIgZGV0ZXJtaW5lcyBob3cgc2hvcnQgdGhlIGxhc3QgcHJpbnRlZCBwYWdlIG9mIGEgbXVs
dGktcGFnZSBwcmludCBzZXNzaW9uCi0vLyBjYW4gYmUgYmVmb3JlIHdlIHRyeSB0byBzaHJpbmsg
dGhlIHNjYWxlIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHBhZ2VzLCBhbmQKLS8v
IHRodXMgZWxpbWluYXRlIHRoZSBvcnBoYW4uCi0jZGVmaW5lIExhc3RQcmludGVkUGFnZU9ycGhh
blJhdGlvICAgICAgMC4xZgotCi0vLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIHRoZSBhbW91bnQg
dGhlIHNjYWxlIGZhY3RvciBpcyBhZGp1c3RlZCB0byB0cnkgdG8gZWxpbWluYXRlIG9ycGhhbnMu
Ci0vLyBJdCBoYXMgbm8gZGlyZWN0IG1hdGhlbWF0aWNhbCByZWxhdGlvbnNoaXAgdG8gTGFzdFBy
aW50ZWRQYWdlT3JwaGFuUmF0aW8sIGR1ZSB0byB2YXJpYWJsZQotLy8gbnVtYmVycyBvZiBwYWdl
cywgbG9naWMgdG8gYXZvaWQgYnJlYWtpbmcgZWxlbWVudHMsIGFuZCBDU1Mtc3VwcGxpZWQgaGFy
ZCBwYWdlIGJyZWFrcy4KLSNkZWZpbmUgUHJpbnRpbmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50ICAx
LjFmCi0KLSNkZWZpbmUgQVVUT1NDUk9MTF9JTlRFUlZBTCAgICAgICAgICAgICAwLjFmCi0KLSNk
ZWZpbmUgRFJBR19MQUJFTF9CT1JERVJfWCAgICAgICAgICAgICA0LjBmCi0vL0tlZXAgYm9yZGVy
X3kgaW4gc3luY2ggd2l0aCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNldAotI2Rl
ZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9ZICAgICAgICAgICAgIDIuMGYKLSNkZWZpbmUgRFJBR19M
QUJFTF9SQURJVVMgICAgICAgICAgICAgICA1LjBmCi0jZGVmaW5lIERSQUdfTEFCRUxfQk9SREVS
X1lfT0ZGU0VUICAgICAgICAgICAgICAyLjBmCi0KLSNkZWZpbmUgTUlOX0RSQUdfTEFCRUxfV0lE
VEhfQkVGT1JFX0NMSVAgICAgICAgIDEyMC4wZgotI2RlZmluZSBNQVhfRFJBR19MQUJFTF9XSURU
SCAgICAgICAgICAgICAgICAgICAgMzIwLjBmCi0KLSNkZWZpbmUgRFJBR19MSU5LX0xBQkVMX0ZP
TlRfU0laRSAgIDExLjBmCi0jZGVmaW5lIERSQUdfTElOS19VUkxfRk9OVF9TSVpFICAgMTAuMGYK
LQotLy8gQW55IG5vbi16ZXJvIHZhbHVlIHdpbGwgZG8sIGJ1dCB1c2luZyBzb21ldGhpbmcgcmVj
b2duaXphYmxlIG1pZ2h0IGhlbHAgdXMgZGVidWcgc29tZSBkYXkuCi0jZGVmaW5lIFRSQUNLSU5H
X1JFQ1RfVEFHIDB4QkFERkFDRQotCi0vLyBGSVhNRTogVGhpcyBjb25zdGFudCBpcyBjb3BpZWQg
ZnJvbSBBcHBLaXQncyBfTlhTbWFydFBhc3RlIGNvbnN0YW50LgotI2RlZmluZSBXZWJTbWFydFBh
c3RlUGJvYXJkVHlwZSBAIk5lWFQgc21hcnQgcGFzdGUgcGFzdGVib2FyZCB0eXBlIgotCi0jZGVm
aW5lIFNUQU5EQVJEX1dFSUdIVCA1Ci0jZGVmaW5lIE1JTl9CT0xEX1dFSUdIVCA3Ci0jZGVmaW5l
IFNUQU5EQVJEX0JPTERfV0VJR0hUIDkKLQotLy8gRmFrZSBVUkwgc2NoZW1lLgotI2RlZmluZSBX
ZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwiCi0KLS8vIDxyZGFyOi8vcHJv
YmxlbS80OTg1NTI0PiBSZWZlcmVuY2VzIHRvIFdlYkNvcmVTY3JvbGxWaWV3IGFzIGEgc3Vidmll
dyBvZiBhIFdlYkhUTUxWaWV3IG1heSBiZSBwcmVzZW50Ci0vLyBpbiBzb21lIE5JQiBmaWxlcywg
c28gTlNVbmFyY2hpdmVyIG11c3QgYmUgc3RpbGwgYWJsZSB0byBsb29rIHVwIHRoaXMgbm93LXVu
dXNlZCBjbGFzcy4KLUBpbnRlcmZhY2UgV2ViQ29yZVNjcm9sbFZpZXcgOiBOU1Njcm9sbFZpZXcK
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVTY3JvbGxWaWV3Ci1AZW5kCi0KLS8vIGlm
IFlFUywgZG8gdGhlIHN0YW5kYXJkIE5TVmlldyBoaXQgdGVzdCAod2hpY2ggY2FuJ3QgZ2l2ZSB0
aGUgcmlnaHQgcmVzdWx0IHdoZW4gSFRNTCBvdmVybGFwcyBhIHZpZXcpCi1zdGF0aWMgQk9PTCBm
b3JjZU5TVmlld0hpdFRlc3Q7Ci0KLS8vIGlmIFlFUywgZG8gdGhlICJ0b3AgV2ViSFRNTFZpZXci
IGhpdCB0ZXN0ICh3aGljaCB3ZSdkIGxpa2UgdG8gZG8gYWxsIHRoZSB0aW1lIGJ1dCBjYW4ndCBi
ZWNhdXNlIG9mIEphdmEgcmVxdWlyZW1lbnRzIFtzZWUgYnVnIDQzNDk3MjFdKQotc3RhdGljIEJP
T0wgZm9yY2VXZWJIVE1MVmlld0hpdFRlc3Q7Ci0KLXN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhp
dFZpZXc7Ci0KLS8vIFdlIG5lZWQgdGhpcyB0byBiZSBhYmxlIHRvIHNhZmVseSByZWZlcmVuY2Ug
dGhlIENhY2hlZEltYWdlIGZvciB0aGUgcHJvbWlzZWQgZHJhZyBkYXRhCi1zdGF0aWMgQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVudCgpCi17Ci0gICAgc3RhdGljIENhY2hl
ZFJlc291cmNlQ2xpZW50KiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudCA9IG5ldyBDYWNoZWRS
ZXNvdXJjZUNsaWVudDsKLSAgICByZXR1cm4gc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQ7Ci19
Ci0KLUBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAo
Qk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHM7Ci0tIChET01Eb2N1bWVu
dEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJk
ICopcGFzdGVib2FyZCBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dCBhbGxvd1BsYWluVGV4
dDooQk9PTClhbGxvd1BsYWluVGV4dDsKLS0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21QYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwotLSAodm9pZClfcGFzdGVXaXRoUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClh
bGxvd1BsYWluVGV4dDsKLS0gKHZvaWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKLS0gKHZvaWQpX3JlbW92ZU1vdXNlTW92ZWRPYnNl
cnZlclVuY29uZGl0aW9uYWxseTsKLS0gKHZvaWQpX3JlbW92ZVN1cGVydmlld09ic2VydmVyczsK
LS0gKHZvaWQpX3JlbW92ZVdpbmRvd09ic2VydmVyczsKLS0gKEJPT0wpX3Nob3VsZEluc2VydEZy
YWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9u
OwotLSAoQk9PTClfc2hvdWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RP
TVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9u
KWFjdGlvbjsKLS0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJp
bmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKLS0gKGZs
b2F0KV9jYWxjdWxhdGVQcmludEhlaWdodDsKLS0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2U7
Ci0tIChCT09MKV9zaG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKLS0gKE5TVmll
dyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpX3dyaXRlU2Vs
ZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nOwotLSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRS
YW5nZTsKLS0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQ7Ci0tIChX
ZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldzsKLS0gKEJPT0wpX2lzVG9wSFRNTFZpZXc7Ci0tICh2
b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlOwotLSAodm9pZClfd2ViX3NldFByaW50
aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplOwotLSAodm9pZClfd2ViX2NsZWFyUHJp
bnRpbmdNb2RlUmVjdXJzaXZlOwotQGVuZAotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0KLUBpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFdlYkhUTUxWaWV3VGV4dENoZWNraW5nSW50ZXJuYWwpCi0tICh2b2lkKW9yZGVyRnJv
bnRTdWJzdGl0dXRpb25zUGFuZWw6KGlkKXNlbmRlcjsKLS0gKEJPT0wpc21hcnRJbnNlcnREZWxl
dGVFbmFibGVkOwotLSAodm9pZClzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxh
ZzsKLS0gKHZvaWQpdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcjsKLS0gKEJPT0wp
aXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ7Ci0tICh2b2lkKXNldEF1dG9tYXRp
Y1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dnbGVBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbjooaWQpc2VuZGVyOwotLSAoQk9PTClpc0F1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkOwotLSAodm9pZClzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihp
ZClzZW5kZXI7Ci0tIChCT09MKWlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ7Ci0t
ICh2b2lkKXNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7Ci0t
ICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246KGlkKXNlbmRlcjsKLS0gKEJP
T0wpaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOwotLSAodm9pZClzZXRBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZUF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudDooaWQpc2VuZGVyOwotLSAoQk9PTClpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQ7Ci0tICh2b2lkKXNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uOihpZClzZW5kZXI7Ci1AZW5kCi0KLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdlYkhU
TUxWaWV3IChXZWJGb3J3YXJkRGVjbGFyYXRpb24pIC8vIEZJWE1FOiBQdXQgdGhpcyBpbiBhIG5v
cm1hbCBjYXRlZ29yeSBhbmQgc3RvcCBkb2luZyB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbiB0cmlj
ay4KLS0gKHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6
KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGgg
YWRqdXN0Vmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemU7Ci1AZW5kCi0KLUBjbGFzcyBOU1Rl
eHRJbnB1dENvbnRleHQ7Ci1AaW50ZXJmYWNlIE5TUmVzcG9uZGVyIChBcHBLaXREZXRhaWxzKQot
LSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0OwotQGVuZAotCi1AaW50ZXJmYWNl
IE5TT2JqZWN0IChOU1RleHRJbnB1dENvbnRleHREZXRhaWxzKQotLSAoQk9PTCl3YW50c1RvSGFu
ZGxlTW91c2VFdmVudHM7Ci0tIChCT09MKWhhbmRsZU1vdXNlRXZlbnQ6KE5TRXZlbnQgKilldmVu
dDsKLUBlbmQKLQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0
KSA8TlNUZXh0SW5wdXQ+Ci0tICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXI7
Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkVkaXRpbmdTdHlsZVN1cHBvcnQp
Ci0tIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGU7Ci0tIChOU1N0cmluZyAq
KV9jb2xvckFzU3RyaW5nOihOU0NvbG9yICopY29sb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNW
aWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLS0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50
V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRhYmxlQXJyYXkgKikgYXJyYXk7Ci1AZW5kCi0KLUBp
bnRlcmZhY2UgTlNNdXRhYmxlRGljdGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0t
ICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleTsK
LUBlbmQKLQotLy8gSGFuZGxlcyB0aGUgY29tcGxldGU6IHRleHQgY29tbWFuZAotQGludGVyZmFj
ZSBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIDogTlNPYmplY3QgPE5TVGFibGVWaWV3RGVsZWdh
dGUsIE5TVGFibGVWaWV3RGF0YVNvdXJjZT4gewotQHByaXZhdGUKLSAgICBXZWJIVE1MVmlldyAq
X3ZpZXc7Ci0gICAgTlNXaW5kb3cgKl9wb3B1cFdpbmRvdzsKLSAgICBOU1RhYmxlVmlldyAqX3Rh
YmxlVmlldzsKLSAgICBOU0FycmF5ICpfY29tcGxldGlvbnM7Ci0gICAgTlNTdHJpbmcgKl9vcmln
aW5hbFN0cmluZzsKLSAgICBpbnQgcHJlZml4TGVuZ3RoOwotfQotLSAoaWQpaW5pdFdpdGhIVE1M
VmlldzooV2ViSFRNTFZpZXcgKil2aWV3OwotLSAodm9pZClkb0NvbXBsZXRpb247Ci0tICh2b2lk
KWVuZFJldmVydGluZ0NoYW5nZTooQk9PTClyZXZlcnRDaGFuZ2UgbW92ZUxlZnQ6KEJPT0wpZ29M
ZWZ0OwotLSAoQk9PTClwb3B1cFdpbmRvd0lzT3BlbjsKLS0gKEJPT0wpZmlsdGVyS2V5RG93bjoo
TlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClfcmVmbGVjdFNlbGVjdGlvbjsKLUBlbmQKLQotc3Ry
dWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7Ci0gICAgS2V5Ym9h
cmRFdmVudCogZXZlbnQ7Ci0gICAgQk9PTCBldmVudFdhc0hhbmRsZWQ7Ci0gICAgQk9PTCBzaG91
bGRTYXZlQ29tbWFuZDsKLSAgICAvLyBUaGUgSW5wdXQgTWV0aG9kIG1heSBjb25zdW1lIGFuIGV2
ZW50IGFuZCBub3QgdGVsbCB1cywgaW4KLSAgICAvLyB3aGljaCBjYXNlIHdlIHNob3VsZCBub3Qg
YnViYmxlIHRoZSBldmVudCB1cCB0aGUgRE9NCi0gICAgQk9PTCBjb25zdW1lZEJ5SU07Ci19Owot
Ci1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKLUBwdWJsaWMKLSAg
ICBCT09MIGNsb3NlZDsKLSAgICBCT09MIG5lZWRzVG9BcHBseVN0eWxlczsKLSAgICBCT09MIGln
bm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzOwotICAgIEJPT0wgcHJpbnRpbmc7Ci0gICAgQk9PTCBh
dm9pZGluZ1ByaW50T3JwaGFuOwotICAgIEJPT0wgb2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNh
dGlvbnM7Ci0gICAgQk9PTCBvYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zOwotICAgIEJP
T0wgb2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9uczsKLSAgICBCT09MIHJlc2lnbmluZ0ZpcnN0
UmVzcG9uZGVyOwotICAgIAotICAgIGlkIHNhdmVkU3Vidmlld3M7Ci0gICAgQk9PTCBzdWJ2aWV3
c1NldEFzaWRlOwotICAgIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBO
U1ZpZXcgKmxheWVySG9zdGluZ1ZpZXc7Ci0jZW5kaWYKLQotICAgIE5TRXZlbnQgKm1vdXNlRG93
bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KLSAgICBCT09MIGhhbmRs
aW5nTW91c2VEb3duRXZlbnQ7Ci0gICAgTlNFdmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFm
dGVyIGhhbmRsaW5nIHRoZSBldmVudC4KLQotICAgIC8vIEEgV2ViSFRNTFZpZXcgaGFzIGEgc2lu
Z2xlIGlucHV0IGNvbnRleHQsIGJ1dCB3ZSByZXR1cm4gbmlsIHdoZW4gaW4gbm9uLWVkaXRhYmxl
IGNvbnRlbnQgdG8gYXZvaWQgbWFraW5nIGlucHV0IG1ldGhvZHMgZG8gdGhlaXIgd29yay4KLSAg
ICAvLyBUaGlzIHN0YXRlIGlzIHNhdmVkIGVhY2ggdGltZSBzZWxlY3Rpb24gY2hhbmdlcywgYmVj
YXVzZSBjb21wdXRpbmcgaXQgY2F1c2VzIHN0eWxlIHJlY2FsYywgd2hpY2ggaXMgbm90IGFsd2F5
cyBzYWZlIHRvIGRvLgotICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0OwotCi0gICAgTlNQb2lu
dCBsYXN0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICBXZWJQbHVnaW5Db250cm9sbGVyICpwbHVnaW5D
b250cm9sbGVyOwotICAgIAotICAgIE5TU3RyaW5nICp0b29sVGlwOwotICAgIE5TVG9vbFRpcFRh
ZyBsYXN0VG9vbFRpcFRhZzsKLSAgICBpZCB0cmFja2luZ1JlY3RPd25lcjsKLSAgICB2b2lkICp0
cmFja2luZ1JlY3RVc2VyRGF0YTsKLSAgICAKLSAgICBOU1RpbWVyICphdXRvc2Nyb2xsVGltZXI7
Ci0gICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKLSAgICAKLSAgICBOU0FycmF5
ICpwYWdlUmVjdHM7Ci0KLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpoaWdobGlnaHRlcnM7Ci0K
LSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIEJPT0wgbmV4dFJlc3BvbmRlckRpc2FibGVk
T25jZTsKLSNlbmRpZgotICAgIAotICAgIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgKmNvbXBD
b250cm9sbGVyOwotICAgIAotICAgIEJPT0wgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kOwotCi0gICAg
V2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBpbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzOwotICAgIEJPT0wgcmVjZWl2ZWROT09QOwotICAgIAotICAgIFdlYkRhdGFT
b3VyY2UgKmRhdGFTb3VyY2U7Ci0gICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIHByb21pc2VkRHJh
Z1RJRkZEYXRhU291cmNlOwotICAgIAotICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0ZUZvY3Vz
ZWRBbmRBY3RpdmVTdGF0ZVRpbWVyOwotICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0ZU1vdXNl
b3ZlclRpbWVyOwotCi0gICAgU0VMIHNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvcjsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICBCT09MIGVudW1lcmF0aW5nU3Vidmlld3M7Ci0jZW5kaWYKLX0K
LS0gKHZvaWQpY2xlYXI7Ci1AZW5kCi0KLXN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlT
dGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgRmFsc2VU
cmlTdGF0ZToKLSAgICAgICAgICAgIHJldHVybiBOU09mZlN0YXRlOwotICAgICAgICBjYXNlIFRy
dWVUcmlTdGF0ZToKLSAgICAgICAgICAgIHJldHVybiBOU09uU3RhdGU7Ci0gICAgICAgIGNhc2Ug
TWl4ZWRUcmlTdGF0ZToKLSAgICAgICAgICAgIHJldHVybiBOU01peGVkU3RhdGU7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOU09mZlN0YXRlOwotfQotCi1A
aW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXdQcml2YXRlCi0KLSsgKHZvaWQpaW5pdGlhbGl6ZQot
ewotICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotI2lmbmRlZiBCVUlMRElOR19PTl9U
SUdFUgotICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7Ci0jZW5kaWYK
LQotICAgIGlmICghb2xkU2V0Q3Vyc29ySU1QKSB7Ci0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIK
LSAgICAgICAgTWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9k
KFtOU0N1cnNvciBjbGFzc10sIEBzZWxlY3RvcihzZXQpKTsKLSNlbHNlCi0gICAgICAgIE1ldGhv
ZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNXaW5kb3cgY2xh
c3NdLCBAc2VsZWN0b3IoX3NldEN1cnNvckZvck1vdXNlTG9jYXRpb246KSk7Ci0jZW5kaWYKLSAg
ICAgICAgQVNTRVJUKHNldEN1cnNvck1ldGhvZCk7Ci0KLSAgICAgICAgb2xkU2V0Q3Vyc29ySU1Q
ID0gbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKHNldEN1cnNvck1ldGhvZCwgKElNUClzZXRDdXJz
b3IpOwotICAgICAgICBBU1NFUlQob2xkU2V0Q3Vyc29ySU1QKTsKLSAgICB9Ci0gICAgCi0jaWZk
ZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBpZiAoIW9sZFJlc2V0Q3Vyc29yUmVjdHNJTVApIHsK
LSAgICAgICAgTWV0aG9kIHJlc2V0Q3Vyc29yUmVjdHNNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5j
ZU1ldGhvZChbTlNXaW5kb3cgY2xhc3NdLCBAc2VsZWN0b3IocmVzZXRDdXJzb3JSZWN0cykpOwot
ICAgICAgICBBU1NFUlQocmVzZXRDdXJzb3JSZWN0c01ldGhvZCk7Ci0gICAgICAgIG9sZFJlc2V0
Q3Vyc29yUmVjdHNJTVAgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24ocmVzZXRDdXJzb3JSZWN0
c01ldGhvZCwgKElNUClyZXNldEN1cnNvclJlY3RzKTsKLSAgICAgICAgQVNTRVJUKG9sZFJlc2V0
Q3Vyc29yUmVjdHNJTVApOwotICAgIH0KLSNlbmRpZgotCi19Ci0KLS0gKHZvaWQpZGVhbGxvYwot
ewotICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbV2Vi
SFRNTFZpZXdQcml2YXRlIGNsYXNzXSwgc2VsZikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVCghYXV0b3Njcm9sbFRpbWVyKTsKLSAgICBBU1NFUlQoIWF1dG9zY3JvbGxUcmlnZ2VyRXZl
bnQpOwotICAgIEFTU0VSVCghdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOwotICAg
IEFTU0VSVCghdXBkYXRlTW91c2VvdmVyVGltZXIpOwotICAgIAotICAgIFttb3VzZURvd25FdmVu
dCByZWxlYXNlXTsKLSAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOwotICAgIFtwbHVnaW5Db250
cm9sbGVyIHJlbGVhc2VdOwotICAgIFt0b29sVGlwIHJlbGVhc2VdOwotICAgIFtjb21wQ29udHJv
bGxlciByZWxlYXNlXTsKLSAgICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKLSAgICBbaGlnaGxpZ2h0
ZXJzIHJlbGVhc2VdOwotICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKLSAgICAg
ICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFD
bGllbnQoKSk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxpemUK
LXsKLSAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKLQotICAgIGlmIChwcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZSkKLSAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNs
aWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0KLSAgICBbc3VwZXIgZmluYWxpemVdOwotfQot
Ci0tICh2b2lkKWNsZWFyCi17Ci0gICAgW21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOwotICAgIFtr
ZXlEb3duRXZlbnQgcmVsZWFzZV07Ci0gICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07Ci0g
ICAgW3Rvb2xUaXAgcmVsZWFzZV07Ci0gICAgW2NvbXBDb250cm9sbGVyIHJlbGVhc2VdOwotICAg
IFtkYXRhU291cmNlIHJlbGVhc2VdOwotICAgIFtoaWdobGlnaHRlcnMgcmVsZWFzZV07Ci0gICAg
aWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQotICAgICAgICBwcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKLQotICAgIG1v
dXNlRG93bkV2ZW50ID0gbmlsOwotICAgIGtleURvd25FdmVudCA9IG5pbDsKLSAgICBwbHVnaW5D
b250cm9sbGVyID0gbmlsOwotICAgIHRvb2xUaXAgPSBuaWw7Ci0gICAgY29tcENvbnRyb2xsZXIg
PSBuaWw7Ci0gICAgZGF0YVNvdXJjZSA9IG5pbDsKLSAgICBoaWdobGlnaHRlcnMgPSBuaWw7Ci0g
ICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSAwOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIGxheWVySG9zdGluZ1ZpZXcgPSBuaWw7Ci0jZW5kaWYKLX0KLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVy
bmFsKQotCi0tIChET01SYW5nZSAqKV9kb2N1bWVudFJhbmdlCi17Ci0gICAgcmV0dXJuIFtbW3Nl
bGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gX2RvY3VtZW50UmFuZ2VdOwotfQotCi0tIChCT09MKV9p
bWFnZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRocwotewotICAgIE5TRW51bWVyYXRvciAq
ZW51bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBOU1N0cmluZyAqcGF0
aDsKLSAgICAKLSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0g
bmlsKSB7Ci0gICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IFdLR2V0TUlNRVR5cGVGb3JFeHRl
bnNpb24oW3BhdGggcGF0aEV4dGVuc2lvbl0pOwotICAgICAgICBpZiAoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUoTUlNRVR5cGUpKQotICAgICAgICAg
ICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5POwotfQotCi0tIChXZWJE
YXRhU291cmNlICopX2RhdGFTb3VyY2UKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPmRhdGFTb3Vy
Y2U7Ci19Ci0KLS0gKFdlYlZpZXcgKilfd2ViVmlldwotewotICAgIHJldHVybiBbX3ByaXZhdGUt
PmRhdGFTb3VyY2UgX3dlYlZpZXddOwotfQotCi0tIChXZWJGcmFtZVZpZXcgKilfZnJhbWVWaWV3
Ci17Ci0gICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIGZyYW1lVmll
d107Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhQ
YXRoczooTlNBcnJheSAqKXBhdGhzCi17Ci0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21l
bnQ7Ci0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVudW1lcmF0
b3JdOwotICAgIE5TTXV0YWJsZUFycmF5ICpkb21Ob2RlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdOwotICAgIE5TU3RyaW5nICpwYXRoOwotICAgIAotICAgIHdoaWxlICgocGF0aCA9
IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKLSAgICAgICAgLy8gTm9uLWltYWdl
IGZpbGUgdHlwZXM7IF93ZWJfdXNlclZpc2libGVTdHJpbmcgaXMgYXBwcm9wcmlhdGUgaGVyZSBi
ZWNhdXNlIHRoaXMgd2lsbAotICAgICAgICAvLyBiZSBwYXN0ZWQgYXMgdmlzaWJsZSB0ZXh0Lgot
ICAgICAgICBOU1N0cmluZyAqdXJsID0gW1tbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhdIF93
ZWJraXRfY2Fub25pY2FsaXplXSBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKLSAgICAgICAgW2Rv
bU5vZGVzIGFkZE9iamVjdDpbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIGNyZWF0ZVRleHRO
b2RlOiB1cmxdXTsKLSAgICB9Ci0gICAgCi0gICAgZnJhZ21lbnQgPSBbW3NlbGYgX2ZyYW1lXSBf
ZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczpkb21Ob2Rlc107IAotICAgIAot
ICAgIFtkb21Ob2RlcyByZWxlYXNlXTsKLSAgICAKLSAgICByZXR1cm4gW2ZyYWdtZW50IGZpcnN0
Q2hpbGRdICE9IG5pbCA/IGZyYWdtZW50IDogbmlsOwotfQotCi0rIChOU0FycmF5ICopX2V4Y2x1
ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbgotewotICAgIHN0YXRpYyBO
U0FycmF5ICplbGVtZW50cyA9IG5pbDsKLSAgICBpZiAoZWxlbWVudHMgPT0gbmlsKSB7Ci0gICAg
ICAgIGVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6Ci0gICAgICAg
ICAgICAvLyBPbWl0IHN0eWxlIHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRo
ZSBmcmFnbWVudCBjYW4gYmUgZWFzaWx5IGluc2VydGVkLgotICAgICAgICAgICAgQCJzdHlsZSIs
Ci0gICAgICAgICAgICAvLyBPbWl0IHhtbCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KLSAg
ICAgICAgICAgIEAieG1sIiwgCi0gICAgICAgICAgICAvLyBPbWl0IHRhZ3MgdGhhdCB3aWxsIGdl
dCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZyYWdtZW50IGFueXdheS4KLSAgICAgICAg
ICAgIEAiZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCi0gICAgICAgICAgICAv
LyBPbWl0IGRlcHJlY2F0ZWQgdGFncy4KLSAgICAgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNlZm9u
dCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAImlzaW5kZXgiLCBAIm1lbnUiLCBAInMi
LCBAInN0cmlrZSIsIEAidSIsCi0gICAgICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxl
IGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBmcmFnbWVudC4KLSAgICAgICAgICAgIEAib2Jq
ZWN0IiwgbmlsXTsKLSAgICAgICAgQ0ZSZXRhaW4oZWxlbWVudHMpOwotICAgIH0KLSAgICByZXR1
cm4gZWxlbWVudHM7Ci19Ci0KLXN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFy
dChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZV
VUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpVVUlEU3RyaW5n
ID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVV
SURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJMID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwg
V2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nLCByZWxhdGl2ZVBhcnRdXTsKLSAgICBD
RlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1cm4gVVJMOwotfQotCi0tIChET01Eb2N1
bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRl
eHQKLXsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKLSAgICBET01E
b2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IG5pbDsKLQotICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtz
ZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpXZWJBcmNo
aXZlUGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZy
YWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJk
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JU
eXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVy
biBmcmFnbWVudDsKLSAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TSFRNTFBi
b2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2Vz
OjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIAotICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNSVEZQYm9h
cmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotCi0gICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSAmJgotICAgICAgICAo
ZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9h
cmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
clR5cGU6TlNSVEZEUGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBm
cmFnbWVudDsKLQotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJkVHlw
ZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQot
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TUERGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUERGUGJvYXJkVHlwZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNv
bnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLQotI2lmIGRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBpZiAo
W3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUElDVFBib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFn
bWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlw
ZTpOU1BJQ1RQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OwotI2VuZGlmCi0KLSAgICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBwb3J0IHNldHRp
bmcgYW5kIHJldHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1dCB3ZSBkb24n
dCBiZWxpZXZlCi0gICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2VyIHB1dCB0eXBl
cyBmb3Igd2hpY2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhlIHBhc3RlYm9h
cmQuCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcqKWtVVFR5cGVQTkdd
ICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQTkcKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0p
KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgICAgIAotICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNVUkxQYm9h
cmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgICAg
ICAKLSAgICBpZiAoYWxsb3dQbGFpblRleHQgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3Ry
aW5nUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJh
Z21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29u
dGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVz
b3VyY2VzOjBdKSkgewotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJk
OihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBbcGFz
dGVib2FyZCB0eXBlc107Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0
cmluZ1Bib2FyZFR5cGVdKQotICAgICAgICByZXR1cm4gW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5
cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBw
aW5nXTsKLSAgICAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBu
aWw7Ci0gICAgTlNTdHJpbmcgKnN0cmluZzsKLQotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNSVEZEUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBl
Ok5TUlRGRFBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKLSAgICBpZiAoYXR0
cmlidXRlZFN0cmluZyA9PSBuaWwgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJk
VHlwZV0pCi0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBl
XSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07Ci0gICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgIT0g
bmlsKSB7Ci0gICAgICAgIHN0cmluZyA9IFtbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGNvcHld
OwotICAgICAgICBbYXR0cmlidXRlZFN0cmluZyByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIFtz
dHJpbmcgYXV0b3JlbGVhc2VdOwotICAgIH0KLSAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgc3RyaW5nID0gW1twYXN0
ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSBjb21wb25l
bnRzSm9pbmVkQnlTdHJpbmc6QCJcbiJdOwotICAgICAgICBpZiAoc3RyaW5nICE9IG5pbCkKLSAg
ICAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgfQotICAgIAotICAgIE5TVVJMICpVUkw7Ci0g
ICAgCi0gICAgaWYgKChVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF0p
KSB7Ci0gICAgICAgIHN0cmluZyA9IFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107Ci0gICAg
ICAgIGlmIChbc3RyaW5nIGxlbmd0aF0gPiAwKQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClfcGFzdGVXaXRoUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClh
bGxvd1BsYWluVGV4dAotewotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW3NlbGYgX3dlYlZpZXdd
IHJldGFpbl07Ci0gICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2Fy
ZF07Ci0KLSAgICBET01SYW5nZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07Ci0gICAg
RE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0OnJhbmdlIGFsbG93UGxhaW5UZXh0OmFs
bG93UGxhaW5UZXh0XTsKLSAgICBpZiAoZnJhZ21lbnQgJiYgW3NlbGYgX3Nob3VsZEluc2VydEZy
YWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOldlYlZp
ZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQotICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNl
bGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJl
cGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdIG1h
dGNoU3R5bGU6Tk9dOwotCi0gICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6bmls
XTsKLSAgICBbd2ViVmlldyByZWxlYXNlXTsKLX0KLQotLSAodm9pZClfcGFzdGVBc1BsYWluVGV4
dFdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgV2ViVmll
dyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsKLSAgICBbd2ViVmlldyBfc2V0
SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLQotICAgIE5TU3RyaW5nICp0ZXh0ID0g
W3NlbGYgX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotICAgIGlmIChbc2Vs
ZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgZ2l2ZW5BY3Rpb246V2ViVmll
d0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAgICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6dGV4dCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3Nl
bGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdXTsKLQotICAgIFt3
ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOm5pbF07Ci0gICAgW3dlYlZpZXcgcmVsZWFz
ZV07Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxs
eQotewotICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVk
Tm90aWZpY2F0aW9ucykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldLTW91c2VN
b3ZlZE5vdGlmaWNhdGlvbigpIG9iamVjdDpuaWxdOwotICAgIF9wcml2YXRlLT5vYnNlcnZpbmdN
b3VzZU1vdmVkTm90aWZpY2F0aW9ucyA9IGZhbHNlOwotfQotCi0tICh2b2lkKV9yZW1vdmVTdXBl
cnZpZXdPYnNlcnZlcnMKLXsKLSAgICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+b2JzZXJ2
aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5T
VmlldyAqc3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3XTsKLSAgICBpZiAoIXN1cGVydmlldyB8
fCAhW3NlbGYgd2luZG93XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TTm90aWZpY2F0
aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxm
IG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107
Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNWaWV3
Qm91bmRzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOwotICAgIAotICAg
IF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0gZmFsc2U7Ci19Ci0K
LS0gKHZvaWQpX3JlbW92ZVdpbmRvd09ic2VydmVycwotewotICAgIGlmICghX3ByaXZhdGUtPm9i
c2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBO
U1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25D
ZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVL
ZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2Jq
ZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5h
bWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgW25v
dGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V0tXaW5kb3dXaWxsT3Jk
ZXJPblNjcmVlbk5vdGlmaWNhdGlvbigpIG9iamVjdDp3aW5kb3ddOwotICAgIAotICAgIF9wcml2
YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zID0gZmFsc2U7Ci19Ci0KLS0gKEJPT0wp
X3Nob3VsZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVw
bGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNl
cnRBY3Rpb24pYWN0aW9uCi17Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3
XTsKLSAgICBET01Ob2RlICpjaGlsZCA9IFtmcmFnbWVudCBmaXJzdENoaWxkXTsKLSAgICBpZiAo
W2ZyYWdtZW50IGxhc3RDaGlsZF0gPT0gY2hpbGQgJiYgW2NoaWxkIGlzS2luZE9mQ2xhc3M6W0RP
TUNoYXJhY3RlckRhdGEgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGlu
Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDpbKERP
TUNoYXJhY3RlckRhdGEgKiljaGlsZCBkYXRhXSByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZl
bkFjdGlvbjphY3Rpb25dOwotICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6ZnJhZ21lbnQgcmVwbGFj
aW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKLX0KLQotLSAoQk9PTClfc2hv
dWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgotewotICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgcmV0dXJuIFtbd2ViVmll
dyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0
VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Ci19
Ci0KLS0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0
ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgotewotICAgIHJldHVy
biBbc2VsZiBfc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOltzZWxmIF9z
ZWxlY3RlZFJhbmdlXSBnaXZlbkFjdGlvbjphY3Rpb25dOwotfQotCi0vLyBDYWxjdWxhdGUgdGhl
IHZlcnRpY2FsIHNpemUgb2YgdGhlIHZpZXcgdGhhdCBmaXRzIG9uIGEgc2luZ2xlIHBhZ2UKLS0g
KGZsb2F0KV9jYWxjdWxhdGVQcmludEhlaWdodAotewotICAgIC8vIE9idGFpbiB0aGUgcHJpbnQg
aW5mbyBvYmplY3QgZm9yIHRoZSBjdXJyZW50IG9wZXJhdGlvbgotICAgIE5TUHJpbnRJbmZvICpw
aSA9IFtbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludEluZm9dOwotICAg
IAotICAgIC8vIENhbGN1bGF0ZSB0aGUgcGFnZSBoZWlnaHQgaW4gcG9pbnRzCi0gICAgTlNTaXpl
IHBhcGVyU2l6ZSA9IFtwaSBwYXBlclNpemVdOwotICAgIHJldHVybiBwYXBlclNpemUuaGVpZ2h0
IC0gW3BpIHRvcE1hcmdpbl0gLSBbcGkgYm90dG9tTWFyZ2luXTsKLX0KLQotLSAoRE9NUmFuZ2Ug
Kilfc2VsZWN0ZWRSYW5nZQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7Ci19Ci0KLS0gKEJPT0wpX3Nob3Vs
ZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUt
PmVkaXRvcigpLT5zaG91bGREZWxldGVSYW5nZShjb3JlKHJhbmdlKSk7Ci19Ci0KLS0gKE5TVmll
dyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFVzdWFsbHks
IHdlIGhhY2sgQUsncyBoaXRUZXN0IG1ldGhvZCB0byBjYXRjaCBhbGwgZXZlbnRzIGF0IHRoZSB0
b3Btb3N0IFdlYkhUTUxWaWV3LiAgCi0gICAgLy8gQ2FsbGVycyBvZiB0aGlzIG1ldGhvZCwgaG93
ZXZlciwgd2FudCB0byBxdWVyeSB0aGUgZGVlcGVzdCB2aWV3IGluc3RlYWQuCi0gICAgZm9yY2VO
U1ZpZXdIaXRUZXN0ID0gWUVTOwotICAgIE5TVmlldyAqaGl0VmlldyA9IFtbW3NlbGYgd2luZG93
XSBjb250ZW50Vmlld10gaGl0VGVzdDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dOwotICAgIGZv
cmNlTlNWaWV3SGl0VGVzdCA9IE5POyAgICAKLSAgICByZXR1cm4gaGl0VmlldzsKLX0KLQotLSAo
dm9pZClfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMg
dG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRT
dHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKLXsKLSAgICAvLyBQ
dXQgSFRNTCBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgewotICAgICAgICBpZiAoUmVmUHRyPExlZ2FjeVdlYkFy
Y2hpdmU+IGNvcmVBcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlv
bihjb3JlKFtzZWxmIF9mcmFtZV0pKSkgewotICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRkRh
dGFSZWY+IGRhdGEgPSBjb3JlQXJjaGl2ZSA/IGNvcmVBcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50
YXRpb24oKSA6IDApCi0gICAgICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRh
ICopZGF0YS5nZXQoKSBmb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICAvLyBQdXQgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIG9uIHRoZSBwYXN0
ZWJvYXJkIChSVEYvUlRGRCBmb3JtYXQpLgotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6
TlNSVEZEUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmls
KSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1
dGVkU3RyaW5nXTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIE5TRGF0YSAqUlRGRERhdGEg
PSBbYXR0cmlidXRlZFN0cmluZyBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1
dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOwotICAgICAgICBbcGFz
dGVib2FyZCBzZXREYXRhOlJURkREYXRhIGZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV07Ci0gICAg
fSAgICAgICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVd
KSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCkgewotICAgICAgICAgICAg
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNd
KSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgX3dl
Yl9hdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVyc107Ci0gICAg
ICAgIH0KLSAgICAgICAgTlNEYXRhICpSVEZEYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGRnJv
bVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50
QXR0cmlidXRlczpuaWxdOwotICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkRhdGEgZm9y
VHlwZTpOU1JURlBib2FyZFR5cGVdOwotICAgIH0KLSAgICAKLSAgICAvLyBQdXQgcGxhaW4gc3Ry
aW5nIG9uIHRoZSBwYXN0ZWJvYXJkLgotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNT
dHJpbmdQYm9hcmRUeXBlXSkgewotICAgICAgICAvLyBNYXAgJm5ic3A7IHRvIGEgcGxhaW4gb2xk
IHNwYWNlIGJlY2F1c2UgdGhpcyBpcyBiZXR0ZXIgZm9yIHNvdXJjZSBjb2RlLCBvdGhlciBicm93
c2VycyBkbyBpdCwKLSAgICAgICAgLy8gYW5kIGJlY2F1c2UgSFRNTCBmb3JjZXMgeW91IHRvIGRv
IHRoaXMgYW55IHRpbWUgeW91IHdhbnQgdHdvIHNwYWNlcyBpbiBhIHJvdy4KLSAgICAgICAgTlNN
dXRhYmxlU3RyaW5nICpzID0gW1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBtdXRhYmxlQ29weV07Ci0g
ICAgICAgIGNvbnN0IHVuaWNoYXIgTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciA9IDB4QTA7Ci0g
ICAgICAgIE5TU3RyaW5nICpOb25CcmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhDaGFyYWN0ZXJzOiZOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyIGxlbmd0aDoxXTsKLSAg
ICAgICAgW3MgcmVwbGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6Tm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZyB3aXRoU3RyaW5nOkAiICIgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzIGxlbmd0
aF0pXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnMgZm9yVHlwZTpOU1N0cmluZ1Bi
b2FyZFR5cGVdOwotICAgICAgICBbcyByZWxlYXNlXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFtz
ZWxmIF9jYW5TbWFydENvcHlPckRlbGV0ZV0gJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNt
YXJ0UGFzdGVQYm9hcmRUeXBlXSkgewotICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOm5pbCBm
b3JUeXBlOldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX3Nl
dE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBBU1NFUlQoIWV2ZW50IHx8
IFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TUmln
aHRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJNb3VzZURvd24pOwotCi0gICAg
aWYgKGV2ZW50ID09IF9wcml2YXRlLT5tb3VzZURvd25FdmVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW2V2ZW50IHJldGFpbl07Ci0gICAgW19wcml2YXRlLT5tb3VzZURvd25FdmVudCByZWxl
YXNlXTsKLSAgICBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgPSBldmVudDsKLX0KLQotLSAodm9p
ZClfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIKLXsKLSAgICBpZiAoX3By
aXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKSB7Ci0gICAgICAgIENGUnVu
TG9vcFRpbWVySW52YWxpZGF0ZShfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRl
VGltZXIpOwotICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3Rp
dmVTdGF0ZVRpbWVyKTsKLSAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVT
dGF0ZVRpbWVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX2NhbmNlbFVwZGF0ZU1vdXNl
b3ZlclRpbWVyCi17Ci0gICAgaWYgKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcikgewot
ICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUoX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3Zl
clRpbWVyKTsKLSAgICAgICAgQ0ZSZWxlYXNlKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1l
cik7Ci0gICAgICAgIF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lciA9IE5VTEw7Ci0gICAg
fQotfQotCi0tIChXZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldwotewotICAgIC8vIEZJWE1FOiB0
aGlzIGNhbiBmYWlsIGlmIHRoZSBkYXRhU291cmNlIGlzIG5pbCwgd2hpY2ggaGFwcGVucyB3aGVu
IHRoZSBXZWJWaWV3IGlzIHRlYXJpbmcgZG93biBmcm9tIHRoZSB3aW5kb3cgY2xvc2luZy4KLSAg
ICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKVtbW1tfcHJpdmF0ZS0+ZGF0YVNv
dXJjZSBfd2ViVmlld10gbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAg
QVNTRVJUKHZpZXcpOwotICAgIEFTU0VSVChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmll
dyBjbGFzc11dKTsKLSAgICByZXR1cm4gdmlldzsKLX0KLQotLSAoQk9PTClfaXNUb3BIVE1MVmll
dwotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIGNhY2hlZCBib29sZWFuIHRoYXQg
ZG9lc24ndCByZWx5IG9uIF90b3BIVE1MVmlldyBzaW5jZSB0aGF0IGNhbiBmYWlsIChzZWUgX3Rv
cEhUTUxWaWV3KS4KLSAgICByZXR1cm4gc2VsZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddOwotfQot
Ci0tICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlCi17Ci0gICAgW3NlbGYgX3Nl
dFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBm
IGFkanVzdFZpZXdTaXplOk5PXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51
bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmRl
c2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLQot
ICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFu
dFdlYkhUTUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRN
TFZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFBy
aW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFk
anVzdFZpZXdTaXplOk5PXTsKLQotICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2Vd
OwotCi0jaWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0g
Tk87Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZl
Ci17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhp
bXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0jaWZuZGVmIE5ERUJVRwot
ICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwotI2VuZGlmCi0KLSAgICBO
U011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdOwotCi0gICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdz
VG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKLQotICAgIHVuc2lnbmVkIGNvdW50ID0g
W2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0
QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1Q
YWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107Ci0KLSAgICBbZGVzY2VuZGFudFdlYkhU
TUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVy
YXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3dlYl9zZXRQcmludGlu
Z01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZQotewotICAgIFtzZWxmIF9zZXRQcmludGlu
ZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RW
aWV3U2l6ZTpZRVNdOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGlu
Z1N1YnZpZXdzID0gWUVTOwotI2VuZGlmCi0KLSAgICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFu
dFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotCi0gICAgW3Nl
bGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRN
TFZpZXdzXTsKLQotICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
Y291bnRdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAg
ICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6
WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmll
d1NpemU6WUVTXTsKLQotICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87Ci0j
ZW5kaWYKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYlByaXZh
dGUpCi0KLSsgKE5TQXJyYXkgKilzdXBwb3J0ZWRNSU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW1dl
YkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRNSU1FVHlwZXNdOwotfQotCi0rIChOU0FycmF5
ICopc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNl
bnRhdGlvbiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc107Ci19Ci0KLSsgKE5TQXJyYXkgKilzdXBw
b3J0ZWROb25JbWFnZU1JTUVUeXBlcwotewotICAgIHJldHVybiBbV2ViSFRNTFJlcHJlc2VudGF0
aW9uIHN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzXTsKLX0KLQotKyAoTlNBcnJheSAqKXVuc3Vw
cG9ydGVkVGV4dE1JTUVUeXBlcwotewotICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3RzOgotICAgICAgICBAInRleHQvY2FsZW5kYXIiLCAgICAgICAvLyBpQ2FsCi0gICAgICAgIEAi
dGV4dC94LWNhbGVuZGFyIiwKLSAgICAgICAgQCJ0ZXh0L3gtdmNhbGVuZGFyIiwKLSAgICAgICAg
QCJ0ZXh0L3ZjYWxlbmRhciIsCi0gICAgICAgIEAidGV4dC92Y2FyZCIsICAgICAgICAgIC8vIHZD
YXJkCi0gICAgICAgIEAidGV4dC94LXZjYXJkIiwKLSAgICAgICAgQCJ0ZXh0L2RpcmVjdG9yeSIs
Ci0gICAgICAgIEAidGV4dC9sZGlmIiwgICAgICAgICAgIC8vIE5ldHNjYXBlIEFkZHJlc3MgQm9v
awotICAgICAgICBAInRleHQvcWlmIiwgICAgICAgICAgICAvLyBRdWlja2VuCi0gICAgICAgIEAi
dGV4dC94LXFpZiIsCi0gICAgICAgIEAidGV4dC94LWNzdiIsICAgICAgICAgIC8vIENTViAoZm9y
IEFkZHJlc3MgQm9vayBhbmQgTWljcm9zb2Z0IE91dGxvb2spCi0gICAgICAgIEAidGV4dC94LXZj
ZiIsICAgICAgICAgIC8vIHZDYXJkIHR5cGUgdXNlZCBpbiBTdW4gYWZmaW5pdHkgYXBwCi0gICAg
ICAgIEAidGV4dC9ydGYiLCAgICAgICAgICAgIC8vIFJpY2ggVGV4dCBGb3JtYXQKLSAgICAgICAg
bmlsXTsKLX0KLQotKyAodm9pZClfcG9zdEZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxh
Z3NDaGFuZ2VkRXZlbnQKLXsKLSAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3I6IDxyZGFy
Oi8vcHJvYmxlbS8yOTgxNjE5PiBOU1Jlc3BvbmRlcl9Qcml2YXRlIHNob3VsZCBpbmNsdWRlIG5v
dGlmaWNhdGlvbiBmb3IgRmxhZ3NDaGFuZ2VkCi0gICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05T
RXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAotICAgICAgICBsb2NhdGlvbjpb
W2ZsYWdzQ2hhbmdlZEV2ZW50IHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBt
b3VzZUxvY2F0aW9uXV0KLSAgICAgICAgbW9kaWZpZXJGbGFnczpbZmxhZ3NDaGFuZ2VkRXZlbnQg
bW9kaWZpZXJGbGFnc10KLSAgICAgICAgdGltZXN0YW1wOltmbGFnc0NoYW5nZWRFdmVudCB0aW1l
c3RhbXBdCi0gICAgICAgIHdpbmRvd051bWJlcjpbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93TnVt
YmVyXQotICAgICAgICBjb250ZXh0OltmbGFnc0NoYW5nZWRFdmVudCBjb250ZXh0XQotICAgICAg
ICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKLQotICAgIC8vIFByZXRl
bmQgaXQncyBhIG1vdXNlIG1vdmUuCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXQotICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXS01vdXNlTW92ZWROb3RpZmlj
YXRpb24oKSBvYmplY3Q6c2VsZgotICAgICAgICB1c2VySW5mbzpbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0OmZha2VFdmVudCBmb3JLZXk6QCJOU0V2ZW50Il1dOwotfQotCi0tIChp
ZClfYnJpZGdlCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgZXhpc3RzIHRvIG1haW50YWluIGNvbXBh
dGliaWxpdHkgd2l0aCBMZW9wYXJkJ3MgRGljdGlvbmFyeS5hcHAsIHNpbmNlIGl0Ci0gICAgLy8g
Y2FsbHMgX2JyaWRnZSB0byBnZXQgYWNjZXNzIHRvIGNvbnZlcnROU1JhbmdlVG9ET01SYW5nZTog
YW5kIGNvbnZlcnRET01SYW5nZVRvTlNSYW5nZTouCi0gICAgLy8gUmV0dXJuIHRoZSBXZWJGcmFt
ZSwgd2hpY2ggaW1wbGVtZW50cyB0aGUgY29tcGF0aWJpbGl0eSBtZXRob2RzLiA8cmRhcjovL3By
b2JsZW0vNjAwMjE2MD4KLSAgICByZXR1cm4gW3NlbGYgX2ZyYW1lXTsKLX0KLQotLSAodm9pZClf
dXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudAotewotICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVN
b3VzZW92ZXJUaW1lcl07Ci0gICAgCi0gICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQg
bW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAotICAgICAgICBsb2NhdGlvbjpbW3NlbGYg
d2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQotICAg
ICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQot
ICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVd
Ci0gICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAg
ICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCi0gICAgICAgIGV2ZW50
TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOwotICAgIAotICAgIFtzZWxmIF91cGRh
dGVNb3VzZW92ZXJXaXRoRXZlbnQ6ZmFrZUV2ZW50XTsKLX0KLQotc3RhdGljIHZvaWQgX3VwZGF0
ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhY2soQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQgKmlu
Zm8pCi17Ci0gICAgV2ViSFRNTFZpZXcgKnZpZXcgPSAoV2ViSFRNTFZpZXcgKilpbmZvOwotICAg
IAotICAgIFt2aWV3IF91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKLX0KLQotLSAodm9p
ZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKLXsKLSAgICBOU1BvaW50IG9yaWdpbiA9IFtbc2VsZiBz
dXBlcnZpZXddIGJvdW5kc10ub3JpZ2luOwotICAgIGlmICghTlNFcXVhbFBvaW50cyhfcHJpdmF0
ZS0+bGFzdFNjcm9sbFBvc2l0aW9uLCBvcmlnaW4pKSB7Ci0gICAgICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNlbmRTY3JvbGxFdmVudCgpOwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBD
b250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIAot
ICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgICAgICBbW3dl
YlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRTY3JvbGxEb2N1
bWVudEluRnJhbWVWaWV3OltzZWxmIF9mcmFtZVZpZXddXTsKLSAgICB9Ci0gICAgX3ByaXZhdGUt
Pmxhc3RTY3JvbGxQb3NpdGlvbiA9IG9yaWdpbjsKLQotICAgIGlmIChbc2VsZiB3aW5kb3ddICYm
ICFfcHJpdmF0ZS0+Y2xvc2VkICYmICFfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpIHsK
LSAgICAgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIE5VTEws
IE5VTEwsIE5VTEwgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFVzZSBhIDEwMG1zIGRlbGF5IHNv
IHRoYXQgdGhlIHN5bnRoZXRpYyBtb3VzZSBvdmVyIHVwZGF0ZSBkb2Vzbid0IGNhdXNlIGN1cnNv
ciB0aHJhc2hpbmcgd2hlbiBwYWdlcyBhcmUgbG9hZGluZwotICAgICAgICAvLyBhbmQgc2Nyb2xs
aW5nIHJhcGlkbHkgYmFjayB0byBiYWNrLgotICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlTW91c2Vv
dmVyVGltZXIgPSBDRlJ1bkxvb3BUaW1lckNyZWF0ZShOVUxMLCBDRkFic29sdXRlVGltZUdldEN1
cnJlbnQoKSArIDAuMSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2FsbGJh
Y2ssICZjb250ZXh0KTsKLSAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpLCBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIsIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7Ci0gICAgfQotfQotCi0tICh2b2lkKV9zZXRBc2lkZVN1YnZpZXdzCi17Ci0gICAgQVNT
RVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7Ci0gICAgQVNTRVJUKF9wcml2YXRlLT5z
YXZlZFN1YnZpZXdzID09IG5pbCk7Ci0gICAgX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPSBfc3Vi
dmlld3M7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIC8vIFdlIG5lZWQg
dG8ga2VlcCB0aGUgbGF5ZXItaG9zdGluZyB2aWV3IGluIHRoZSBzdWJ2aWV3cywgb3RoZXJ3aXNl
IHRoZSBsYXllcnMgZmxhc2guCi0gICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7
Ci0gICAgICAgIE5TQXJyYXkqIG5ld1N1YnZpZXdzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6X3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcsIG5pbF07Ci0gICAgICAgIF9zdWJ2
aWV3cyA9IG5ld1N1YnZpZXdzOwotICAgIH0gZWxzZQotICAgICAgICBfc3Vidmlld3MgPSBuaWw7
Ci0jZWxzZQotICAgIF9zdWJ2aWV3cyA9IG5pbDsKLSNlbmRpZiAgICAKLSAgICBfcHJpdmF0ZS0+
c3Vidmlld3NTZXRBc2lkZSA9IFlFUzsKLSB9Ci0gCi0gLSAodm9pZClfcmVzdG9yZVN1YnZpZXdz
Ci0gewotICAgIEFTU0VSVChfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7Ci0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmll
dykgewotICAgICAgICBbX3N1YnZpZXdzIHJlbGVhc2VdOwotICAgICAgICBfc3Vidmlld3MgPSBf
cHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoX3N1
YnZpZXdzID09IG5pbCk7Ci0gICAgICAgIF9zdWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZp
ZXdzOwotICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUKF9zdWJ2aWV3cyA9PSBuaWwpOwotICAgIF9z
dWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOwotI2VuZGlmICAgIAotICAgIF9wcml2
YXRlLT5zYXZlZFN1YnZpZXdzID0gbmlsOwotICAgIF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRl
ID0gTk87Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi0KLS0gKHZvaWQpZGlkQWRkU3VidmlldzooTlNW
aWV3ICopc3VidmlldwotewotICAgIGlmIChfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cykK
LSAgICAgICAgTE9HKFZpZXcsICJBIHZpZXcgb2YgY2xhc3MgJXMgd2FzIGFkZGVkIGR1cmluZyBz
dWJ2aWV3IGVudW1lcmF0aW9uIGZvciBsYXlvdXQgb3IgcHJpbnRpbmcgbW9kZSBjaGFuZ2UuIFRo
aXMgdmlldyBtaWdodCBwYWludCB3aXRob3V0IGZpcnN0IHJlY2VpdmluZyBsYXlvdXQuIiwgb2Jq
ZWN0X2dldENsYXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKLX0KLQotLSAodm9pZCl3aWxsUmVt
b3ZlU3VidmlldzooTlNWaWV3ICopc3VidmlldwotewotICAgIC8vIEhhdmUgdG8gbnVsbC1jaGVj
ayBfcHJpdmF0ZSwgc2luY2UgdGhpcyBjYW4gYmUgY2FsbGVkIHZpYSAtZGVhbGxvYyB3aGVuCi0g
ICAgLy8gY2xlYW5pbmcgdXAgdGhlIHRoZSBsYXllckhvc3RpbmdWaWV3LgotICAgIGlmIChfcHJp
dmF0ZSAmJiBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cykKLSAgICAgICAgTE9HKFZpZXcs
ICJBIHZpZXcgb2YgY2xhc3MgJXMgd2FzIHJlbW92ZWQgZHVyaW5nIHN1YnZpZXcgZW51bWVyYXRp
b24gZm9yIGxheW91dCBvciBwcmludGluZyBtb2RlIGNoYW5nZS4gV2Ugd2lsbCBzdGlsbCBkbyBs
YXlvdXQgb3IgdGhlIHByaW50aW5nIG1vZGUgY2hhbmdlIGV2ZW4gdGhvdWdoIHRoaXMgdmlldyBp
cyBubyBsb25nZXIgaW4gdGhlIHZpZXcgaGllcmFyY2h5LiIsIG9iamVjdF9nZXRDbGFzc05hbWUo
W3N1YnZpZXcgY2xhc3NdKSk7Ci19Ci0KLSNlbmRpZgotCi0jaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKLQotLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBhcmUgYWJvdXQgdG8gZHJhdywgYnV0IGJl
Zm9yZSBvdXIgZGlydHkgcmVjdCBpcyBwcm9wYWdhdGVkIHRvIG91ciBhbmNlc3RvcnMuCi0vLyBU
aGF0J3MgdGhlIHBlcmZlY3QgdGltZSB0byBkbyBhIGxheW91dCwgZXhjZXB0IHRoYXQgaWRlYWxs
eSB3ZSdkIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHdlJ3JlIGRpcnR5Ci0vLyBiZWZvcmUgZG9pbmcg
aXQuIEFzIGEgY29tcHJvbWlzZSwgd2hlbiB3ZSdyZSBvcGFxdWUgd2UgZG8gdGhlIGxheW91dCBv
bmx5IHdoZW4gYWN0dWFsbHkgYXNrZWQgdG8KLS8vIGRyYXcsIGJ1dCB3aGVuIHdlJ3JlIHRyYW5z
cGFyZW50IHdlIGRvIHRoZSBsYXlvdXQgYXQgdGhpcyBzdGFnZSBzbyB2aWV3cyBiZWhpbmQgdXMg
a25vdyB0aGF0IHRoZXkKLS8vIG5lZWQgdG8gYmUgcmVkcmF3biAoaW4gY2FzZSB0aGUgbGF5b3V0
IGNhdXNlcyBzb21lIHRoaW5ncyB0byBnZXQgZGlydGllZCkuCi0tICh2b2lkKV9wcm9wYWdhdGVE
aXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnMKLXsKLSAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10g
ZHJhd3NCYWNrZ3JvdW5kXSkKLSAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vy
c2l2ZV07Ci0gICAgW3N1cGVyIF9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnNd
OwotfQotCi0jZWxzZQotCi0tICh2b2lkKXZpZXdXaWxsRHJhdwotewotICAgIC8vIE9uIHdpbmRv
dyBjbG9zZSB3ZSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRhc291cmNlIGlzIG5pbCwgdGhl
biBoaXQgYW4gYXNzZXJ0IGluIF90b3BIVE1MVmlldwotICAgIC8vIFNvIGNoZWNrIGlmIHRoZSBk
YXRhU291cmNlIGlzIG5pbCBiZWZvcmUgY2FsbGluZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRo
aXMgY2FuIGJlIHJlbW92ZWQKLSAgICAvLyBvbmNlIHRoZSBGSVhNRSBpbiBfaXNUb3BIVE1MVmll
dyBpcyBmaXhlZC4KLSAgICBpZiAoX3ByaXZhdGUtPmRhdGFTb3VyY2UgJiYgW3NlbGYgX2lzVG9w
SFRNTFZpZXddKQotICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsK
LSAgICBbc3VwZXIgdmlld1dpbGxEcmF3XTsKLX0KLQotI2VuZGlmCi0KLS8vIERvbid0IGxldCBB
cHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KLS0gKHZvaWQp
X3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0
IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZp
ZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldwotewotICAgIC8v
IFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nl
c3MuCi0gICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50
aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLgotICAgIEJPT0wgd2FzSW5Q
cmludGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7Ci0gICAgQk9PTCBpc1ByaW50aW5nID0g
IVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07Ci0gICAg
aWYgKGlzUHJpbnRpbmcpIHsKLSAgICAgICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKLSAgICAg
ICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSNpZm5kZWYgQlVJ
TERJTkdfT05fVElHRVIKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3NlbGYgX3dlYl9sYXlv
dXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0jZW5kaWYKLSAgICB9IGVsc2UgaWYgKHdhc0luUHJpbnRp
bmdNb2RlKQotICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsK
LQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLSAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMg
bm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhlcmUuCi0gICAgW3Nl
bGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0gICAgW19zdWJ2aWV3cyBtYWtlT2Jq
ZWN0c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1
ZUFuY2VzdG9ycyldOwotCi0jZW5kaWYKLQotICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsK
LSAgICBbc3VwZXIgX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6
cmVjdCBpc1Zpc2libGVSZWN0OmlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3
OnZpc2libGVWaWV3IHRvcFZpZXc6dG9wVmlld107Ci0gICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3
c107Ci0KLSAgICBpZiAod2FzSW5QcmludGluZ01vZGUgIT0gaXNQcmludGluZykgewotICAgICAg
ICBpZiAod2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50
aW5nTW9kZVJlY3Vyc2l2ZV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzZWxmIF93ZWJf
Y2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwotICAgIH0KLX0KLQotLy8gRG9uJ3QgbGV0IEFw
cEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0LgotLSAodm9pZClf
cmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czooQk9PTCluZWVkc0xvY2tGb2N1
cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVjdAotewotICAgIEJPT0wgbmVlZFRvU2V0QXNpZGVTdWJ2
aWV3cyA9ICFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZTsKLQotICAgIEJPT0wgd2FzSW5Qcmlu
dGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7Ci0gICAgQk9PTCBpc1ByaW50aW5nID0gIVtO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07Ci0KLSAgICBp
ZiAobmVlZFRvU2V0QXNpZGVTdWJ2aWV3cykgewotICAgICAgICAvLyBUaGlzIGhlbHBzIHdoZW4g
d2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9jZXNzLgotICAgICAgICAvLyBJ
ZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ug
d2lsbCBuZXZlciBoYXZlIHRvIGRvIHRoaXMuCi0gICAgICAgIGlmIChpc1ByaW50aW5nKSB7Ci0g
ICAgICAgICAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgICAgIFtzZWxm
IF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX2xheW91dElm
TmVlZGVkUmVjdXJzaXZlXTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UgaWYgKHdhc0luUHJpbnRp
bmdNb2RlKQotICAgICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2
ZV07Ci0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0gICAgICAgIC8vIEJlY2F1c2UgVGln
ZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVyZS4K
LSAgICAgICAgTlNSZWN0IGJvdW5kc0JlZm9yZUxheW91dCA9IFtzZWxmIGJvdW5kc107Ci0gICAg
ICAgIGlmICghTlNJc0VtcHR5UmVjdCh2aXNSZWN0KSkKLSAgICAgICAgICAgIFtzZWxmIF93ZWJf
bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotCi0gICAgICAgIC8vIElmIGxheW91dCBjaGFuZ2Vz
IHRoZSB2aWV3J3MgYm91bmRzLCB0aGVuIHdlIG5lZWQgdG8gcmVjb21wdXRlIHRoZSB2aXNSZWN0
LgotICAgICAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUgdmlzUmVjdCBwYXNzZWQgdG8gdXMgd2Fz
IGJhc2VkIG9uIHRoZSBib3VuZHMgYXQgdGhlIHRpbWUKLSAgICAgICAgLy8gd2Ugd2VyZSBjYWxs
ZWQuIFRoaXMgbWV0aG9kIGlzIG9ubHkgZGlzcGxheWVkIHRvIGRyYXcgImFsbCIsIHNvIGl0J3Mg
c2FmZQotICAgICAgICAvLyB0byBqdXN0IGNhbGwgdmlzaWJsZVJlY3QgdG8gY29tcHV0ZSB0aGUg
ZW50aXJlIHJlY3RhbmdsZS4KLSAgICAgICAgaWYgKCFOU0VxdWFsUmVjdHMoYm91bmRzQmVmb3Jl
TGF5b3V0LCBbc2VsZiBib3VuZHNdKSkKLSAgICAgICAgICAgIHZpc1JlY3QgPSBbc2VsZiB2aXNp
YmxlUmVjdF07Ci0KLSNlbmRpZgotCi0gICAgICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsK
LSAgICB9Ci0KLSAgICBbc3VwZXIgX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9j
dXM6bmVlZHNMb2NrRm9jdXMgdmlzUmVjdDp2aXNSZWN0XTsKLQotICAgIGlmIChuZWVkVG9TZXRB
c2lkZVN1YnZpZXdzKSB7Ci0gICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSAhPSBpc1ByaW50
aW5nKSB7Ci0gICAgICAgICAgICBpZiAod2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgICAgICAg
ICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVd
OwotICAgICAgICB9Ci0KLSAgICAgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107Ci0gICAgfQot
fQotCi0vLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJl
IG9mIHRoYXQuCi0tICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZSBkaXNwbGF5UmVjdEln
bm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0IGluQ29udGV4dDooTlNHcmFwaGljc0Nv
bnRleHQgKiljb250ZXh0IHRvcFZpZXc6KEJPT0wpdG9wVmlldwotewotI2lmZGVmIEJVSUxESU5H
X09OX1RJR0VSIAotICAgIC8vIEJlY2F1c2UgVGlnZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERy
YXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVyZS4KLSAgICBbc2VsZiBfd2ViX2xheW91dElmTmVl
ZGVkUmVjdXJzaXZlXTsKLSNlbmRpZgotCi0gICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3NdOwot
ICAgIFtzdXBlciBfcmVjdXJzaXZlOnJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6
ZGlzcGxheVJlY3QgaW5Db250ZXh0OmNvbnRleHQgdG9wVmlldzp0b3BWaWV3XTsKLSAgICBbc2Vs
ZiBfcmVzdG9yZVN1YnZpZXdzXTsKLX0KLQotLSAoQk9PTClfaW5zaWRlQW5vdGhlckhUTUxWaWV3
Ci17Ci0gICAgcmV0dXJuIHNlbGYgIT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKLX0KLQotLSAoTlNW
aWV3ICopaGl0VGVzdDooTlNQb2ludClwb2ludAotewotICAgIC8vIFdlYkhUTUxWaWV3IG9iamVj
dHMgaGFuZGxlIGFsbCBldmVudHMgZm9yIG9iamVjdHMgaW5zaWRlIHRoZW0uCi0gICAgLy8gVG8g
Z2V0IHRob3NlIGV2ZW50cywgd2UgcHJldmVudCBoaXQgdGVzdGluZyBmcm9tIEFwcEtpdC4KLQot
ICAgIC8vIEJ1dCB0aGVyZSBhcmUgdGhyZWUgZXhjZXB0aW9ucyB0byB0aGlzOgotICAgIC8vICAg
MSkgRm9yIHJpZ2h0IG1vdXNlIGNsaWNrcyBhbmQgY29udHJvbCBjbGlja3Mgd2UgZG9uJ3QgeWV0
IGhhdmUgYW4gaW1wbGVtZW50YXRpb24KLSAgICAvLyAgICAgIHRoYXQgd29ya3MgZm9yIG5lc3Rl
ZCB2aWV3cywgc28gd2UgbGV0IHRoZSBoaXQgdGVzdGluZyBnbyB0aHJvdWdoIHRoZQotICAgIC8v
ICAgICAgc3RhbmRhcmQgTlNWaWV3IGNvZGUgcGF0aCAobmVlZHMgdG8gYmUgZml4ZWQsIHNlZSBi
dWcgNDM2MTYxOCkuCi0gICAgLy8gICAyKSBKYXZhIGRlcGVuZHMgb24gZG9pbmcgYSBoaXQgdGVz
dCBpbnNpZGUgaXQncyBtb3VzZSBtb3ZlZCBoYW5kbGluZywKLSAgICAvLyAgICAgIHNvIHdlIGxl
dCB0aGUgaGl0IHRlc3RpbmcgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgTlNWaWV3IGNvZGUgcGF0
aAotICAgIC8vICAgICAgd2hlbiB0aGUgY3VycmVudCBldmVudCBpcyBhIG1vdXNlIG1vdmUgKGV4
Y2VwdCB3aGVuIHdlIGFyZSBjYWxsaW5nCi0gICAgLy8gICAgICBmcm9tIF91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQsIHNvIHdlIGhhdmUgdG8gdXNlIGEgZ2xvYmFsLAotICAgIC8vICAgICAgZm9y
Y2VXZWJIVE1MVmlld0hpdFRlc3QsIGZvciB0aGF0KQotICAgIC8vICAgMykgVGhlIGFjY2VwdHNG
aXJzdE1vdXNlOiBhbmQgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OiBtZXRob2Rz
Ci0gICAgLy8gICAgICBib3RoIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCB2aWV3IHRvIGNoZWNr
IHdpdGggaW5zaWRlIHRoZSBXZWJIVE1MVmlldy4KLSAgICAvLyAgICAgIFRoZXkgdXNlIGEgZ2xv
YmFsIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgaGl0VGVzdDogc28gdGhleSBjYW4gZ2V0IHRo
ZQotICAgIC8vICAgICAgcmlnaHQgdmlldy4gVGhlIGdsb2JhbCBpcyBmb3JjZU5TVmlld0hpdFRl
c3QgYW5kIHRoZSBtZXRob2QgdGhleSB1c2UgdG8KLSAgICAvLyAgICAgIGRvIHRoZSBoaXQgdGVz
dGluZyBpcyBfaGl0Vmlld0ZvckV2ZW50Oi4gKEJ1dCB0aGlzIGRvZXMgbm90IHdvcmsgY29ycmVj
dGx5Ci0gICAgLy8gICAgICB3aGVuIHRoZXJlIGlzIEhUTUwgb3ZlcmxhcHBpbmcgdGhlIHZpZXcs
IHNlZSBidWcgNDM2MTYyNikKLSAgICAvLyAgIDQpIE5TQWNjZXNzaWJpbGl0eUhpdFRlc3QgcmVs
aWVzIG9uIHRoaXMgZm9yIGNoZWNraW5nIHRoZSBjdXJzb3IgcG9zaXRpb24uCi0gICAgLy8gICAg
ICBPdXIgY2hlY2sgZm9yIHRoYXQgaXMgd2hldGhlciB0aGUgZXZlbnQgaXMgTlNGbGFnc0NoYW5n
ZWQuICBUaGlzIHdvcmtzCi0gICAgLy8gICAgICBmb3IgVm9pY2VPdmVyJ3MgY250bC1vcHQtZjUg
Y29tbWFuZCAobW92ZSBmb2N1cyB0byBpdGVtIHVuZGVyIGN1cnNvcikKLSAgICAvLyAgICAgIGFu
ZCBEaWN0aW9uYXJ5J3MgY21kLWNudGwtRCAob3BlbiBkaWN0aW9uYXJ5IHBvcHVwIGZvciBpdGVt
IHVuZGVyIGN1cnNvcikuCi0gICAgLy8gICAgICBUaGlzIGlzIG9mIGNvdXJzZSBhIGhhY2suCi0K
LSAgICBCT09MIGNhcHR1cmVIaXRzT25TdWJ2aWV3czsKLSAgICBpZiAoZm9yY2VOU1ZpZXdIaXRU
ZXN0KQotICAgICAgICBjYXB0dXJlSGl0c09uU3Vidmlld3MgPSBOTzsKLSAgICBlbHNlIGlmIChm
b3JjZVdlYkhUTUxWaWV3SGl0VGVzdCkKLSAgICAgICAgY2FwdHVyZUhpdHNPblN1YnZpZXdzID0g
WUVTOwotICAgIGVsc2UgewotICAgICAgICBOU0V2ZW50ICpldmVudCA9IFtbc2VsZiB3aW5kb3dd
IGN1cnJlbnRFdmVudF07Ci0gICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9ICEoW2V2ZW50
IHR5cGVdID09IE5TTW91c2VNb3ZlZAotICAgICAgICAgICAgfHwgW2V2ZW50IHR5cGVdID09IE5T
UmlnaHRNb3VzZURvd24KLSAgICAgICAgICAgIHx8IChbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91
c2VEb3duICYmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNrKSAhPSAw
KQotICAgICAgICAgICAgfHwgW2V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFuZ2VkKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWNhcHR1cmVIaXRzT25TdWJ2aWV3cykKLSAgICAgICAgcmV0dXJuIFtzdXBl
ciBoaXRUZXN0OnBvaW50XTsKLSAgICBpZiAoW1tzZWxmIHN1cGVydmlld10gbW91c2U6cG9pbnQg
aW5SZWN0OltzZWxmIGZyYW1lXV0pCi0gICAgICAgIHJldHVybiBzZWxmOwotICAgIHJldHVybiBu
aWw7Ci19Ci0KLS0gKHZvaWQpX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGYKLXsKLSAgICBpZiAobGFz
dEhpdFZpZXcgPT0gc2VsZikKLSAgICAgICAgbGFzdEhpdFZpZXcgPSBuaWw7Ci19Ci0KLS0gKE5T
VHJhY2tpbmdSZWN0VGFnKWFkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93
bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRl
Ci17Ci0gICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOwotICAg
IF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVyOwotICAgIF9wcml2YXRlLT50cmFj
a2luZ1JlY3RVc2VyRGF0YSA9IGRhdGE7Ci0gICAgcmV0dXJuIFRSQUNLSU5HX1JFQ1RfVEFHOwot
fQotCi0tIChOU1RyYWNraW5nUmVjdFRhZylfYWRkVHJhY2tpbmdSZWN0OihOU1JlY3QpcmVjdCBv
d25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilkYXRhIGFzc3VtZUluc2lkZTooQk9PTClh
c3N1bWVJbnNpZGUgdXNlVHJhY2tpbmdOdW06KGludCl0YWcKLXsKLSAgICBBU1NFUlQodGFnID09
IDAgfHwgdGFnID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKLSAgICBBU1NFUlQoX3ByaXZhdGUtPnRy
YWNraW5nUmVjdE93bmVyID09IG5pbCk7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVy
ID0gb3duZXI7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gZGF0YTsKLSAg
ICByZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7Ci19Ci0KLS0gKHZvaWQpX2FkZFRyYWNraW5nUmVj
dHM6KE5TUmVjdCAqKXJlY3RzIG93bmVyOihpZClvd25lciB1c2VyRGF0YUxpc3Q6KHZvaWQgKiop
dXNlckRhdGFMaXN0IGFzc3VtZUluc2lkZUxpc3Q6KEJPT0wgKilhc3N1bWVJbnNpZGVMaXN0IHRy
YWNraW5nTnVtczooTlNUcmFja2luZ1JlY3RUYWcgKil0cmFja2luZ051bXMgY291bnQ6KGludClj
b3VudAotewotICAgIEFTU0VSVChjb3VudCA9PSAxKTsKLSAgICBBU1NFUlQodHJhY2tpbmdOdW1z
WzBdID09IDAgfHwgdHJhY2tpbmdOdW1zWzBdID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKLSAgICBB
U1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09IG5pbCk7Ci0gICAgX3ByaXZhdGUt
PnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVz
ZXJEYXRhID0gdXNlckRhdGFMaXN0WzBdOwotICAgIHRyYWNraW5nTnVtc1swXSA9IFRSQUNLSU5H
X1JFQ1RfVEFHOwotfQotCi0tICh2b2lkKXJlbW92ZVRyYWNraW5nUmVjdDooTlNUcmFja2luZ1Jl
Y3RUYWcpdGFnCi17Ci0gICAgaWYgKHRhZyA9PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWYgKF9wcml2YXRlICYmICh0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpKSB7Ci0gICAgICAg
IF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG5pbDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBpZiAoX3ByaXZhdGUgJiYgKHRhZyA9PSBfcHJpdmF0ZS0+bGFzdFRvb2xU
aXBUYWcpKSB7Ci0gICAgICAgIFtzdXBlciByZW1vdmVUcmFja2luZ1JlY3Q6dGFnXTsKLSAgICAg
ICAgX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICAvLyBJZiBhbnkgb3RoZXIgdHJhY2tpbmcgcmVjdCBpcyBiZWluZyByZW1vdmVk
LCB3ZSBkb24ndCBrbm93IGhvdyBpdCB3YXMgY3JlYXRlZAotICAgIC8vIGFuZCBpdCdzIHBvc3Np
YmxlIHRoZXJlJ3MgYSBsZWFrIGludm9sdmVkIChzZWUgMzUwMDIxNykKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotLSAodm9pZClfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNUcmFja2lu
Z1JlY3RUYWcgKil0YWdzIGNvdW50OihpbnQpY291bnQKLXsKLSAgICBpbnQgaTsKLSAgICBmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpbnQgdGFnID0gdGFnc1tpXTsKLSAg
ICAgICAgaWYgKHRhZyA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEFTU0VS
VCh0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpOwotICAgICAgICBpZiAoX3ByaXZhdGUgIT0gbmls
KSB7Ci0gICAgICAgICAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBuaWw7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLS0gKHZvaWQpX3NlbmRUb29sVGlwTW91c2VFeGl0ZWQKLXsKLSAg
ICAvLyBOb3RoaW5nIG1hdHRlcnMgZXhjZXB0IHdpbmRvdywgdHJhY2tpbmdOdW1iZXIsIGFuZCB1
c2VyRGF0YS4KLSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBlbnRlckV4aXRFdmVu
dFdpdGhUeXBlOk5TTW91c2VFeGl0ZWQKLSAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoMCwg
MCkKLSAgICAgICAgbW9kaWZpZXJGbGFnczowCi0gICAgICAgIHRpbWVzdGFtcDowCi0gICAgICAg
IHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAgICAgIGNvbnRl
eHQ6TlVMTAotICAgICAgICBldmVudE51bWJlcjowCi0gICAgICAgIHRyYWNraW5nTnVtYmVyOlRS
QUNLSU5HX1JFQ1RfVEFHCi0gICAgICAgIHVzZXJEYXRhOl9wcml2YXRlLT50cmFja2luZ1JlY3RV
c2VyRGF0YV07Ci0gICAgW19wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciBtb3VzZUV4aXRlZDpm
YWtlRXZlbnRdOwotfQotCi0tICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZAotewotICAg
IC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0cmFja2luZ051bWJlciwgYW5kIHVz
ZXJEYXRhLgotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGVudGVyRXhpdEV2ZW50
V2l0aFR5cGU6TlNNb3VzZUVudGVyZWQKLSAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoMCwg
MCkKLSAgICAgICAgbW9kaWZpZXJGbGFnczowCi0gICAgICAgIHRpbWVzdGFtcDowCi0gICAgICAg
IHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAgICAgIGNvbnRl
eHQ6TlVMTAotICAgICAgICBldmVudE51bWJlcjowCi0gICAgICAgIHRyYWNraW5nTnVtYmVyOlRS
QUNLSU5HX1JFQ1RfVEFHCi0gICAgICAgIHVzZXJEYXRhOl9wcml2YXRlLT50cmFja2luZ1JlY3RV
c2VyRGF0YV07Ci0gICAgW19wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciBtb3VzZUVudGVyZWQ6
ZmFrZUV2ZW50XTsKLX0KLQotLSAodm9pZClfc2V0VG9vbFRpcDooTlNTdHJpbmcgKilzdHJpbmcK
LXsKLSAgICBOU1N0cmluZyAqdG9vbFRpcCA9IFtzdHJpbmcgbGVuZ3RoXSA9PSAwID8gbmlsIDog
c3RyaW5nOwotICAgIE5TU3RyaW5nICpvbGRUb29sVGlwID0gX3ByaXZhdGUtPnRvb2xUaXA7Ci0g
ICAgaWYgKCh0b29sVGlwID09IG5pbCB8fCBvbGRUb29sVGlwID09IG5pbCkgPyB0b29sVGlwID09
IG9sZFRvb2xUaXAgOiBbdG9vbFRpcCBpc0VxdWFsVG9TdHJpbmc6b2xkVG9vbFRpcF0pIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2xkVG9vbFRpcCkgewotICAgICAgICBbc2Vs
ZiBfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZF07Ci0gICAgICAgIFtvbGRUb29sVGlwIHJlbGVhc2Vd
OwotICAgIH0KLSAgICBfcHJpdmF0ZS0+dG9vbFRpcCA9IFt0b29sVGlwIGNvcHldOwotICAgIGlm
ICh0b29sVGlwKSB7Ci0gICAgICAgIC8vIFNlZSByYWRhciAzNTAwMjE3IGZvciB3aHkgd2UgcmVt
b3ZlIGFsbCB0b29sdGlwcyByYXRoZXIgdGhhbiBqdXN0IHRoZSBzaW5nbGUgb25lIHdlIGNyZWF0
ZWQuCi0gICAgICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsKLSAgICAgICAgTlNSZWN0IHdp
ZGVPcGVuUmVjdCA9IE5TTWFrZVJlY3QoLTEwMDAwMCwgLTEwMDAwMCwgMjAwMDAwLCAyMDAwMDAp
OwotICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSBbc2VsZiBhZGRUb29sVGlwUmVj
dDp3aWRlT3BlblJlY3Qgb3duZXI6c2VsZiB1c2VyRGF0YTpOVUxMXTsKLSAgICAgICAgW3NlbGYg
X3NlbmRUb29sVGlwTW91c2VFbnRlcmVkXTsKLSAgICB9Ci19Ci0KLS0gKE5TU3RyaW5nICopdmll
dzooTlNWaWV3ICopdmlldyBzdHJpbmdGb3JUb29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50
OihOU1BvaW50KXBvaW50IHVzZXJEYXRhOih2b2lkICopZGF0YQotewotICAgIHJldHVybiBbW19w
cml2YXRlLT50b29sVGlwIGNvcHldIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAodm9pZClfdXBkYXRl
TW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoX3ByaXZhdGUt
PmNsb3NlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFtb
ZXZlbnQgd2luZG93XSBjb250ZW50Vmlld107Ci0gICAgTlNQb2ludCBsb2NhdGlvbkZvckhpdFRl
c3QgPSBbW2NvbnRlbnRWaWV3IHN1cGVydmlld10gY29udmVydFBvaW50OltldmVudCBsb2NhdGlv
bkluV2luZG93XSBmcm9tVmlldzpuaWxdOwotICAgIAotICAgIGZvcmNlV2ViSFRNTFZpZXdIaXRU
ZXN0ID0gWUVTOwotICAgIE5TVmlldyAqaGl0VmlldyA9IFtjb250ZW50VmlldyBoaXRUZXN0Omxv
Y2F0aW9uRm9ySGl0VGVzdF07Ci0gICAgZm9yY2VXZWJIVE1MVmlld0hpdFRlc3QgPSBOTzsKLSAg
ICAKLSAgICBXZWJIVE1MVmlldyAqdmlldyA9IG5pbDsKLSAgICBpZiAoW2hpdFZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSAmJiAhW1soV2ViSFRNTFZpZXcgKiloaXRWaWV3
IF93ZWJWaWV3XSBpc0hvdmVyRmVlZGJhY2tTdXNwZW5kZWRdKQotICAgICAgICB2aWV3ID0gKFdl
YkhUTUxWaWV3ICopaGl0VmlldzsgICAgCi0KLSAgICBpZiAodmlldykKLSAgICAgICAgW3ZpZXcg
cmV0YWluXTsKLQotICAgIGlmIChsYXN0SGl0VmlldyAhPSB2aWV3ICYmIGxhc3RIaXRWaWV3ICYm
IFtsYXN0SGl0VmlldyBfZnJhbWVdKSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZSBtb3Zpbmcgb3V0
IG9mIGEgdmlldyAob3IgZnJhbWUpLCBsZXQncyBwcmV0ZW5kIHRoZSBtb3VzZSBtb3ZlZAotICAg
ICAgICAvLyBhbGwgdGhlIHdheSBvdXQgb2YgdGhhdCB2aWV3LiBCdXQgd2UgaGF2ZSB0byBhY2Nv
dW50IGZvciBzY3JvbGxpbmcsIGJlY2F1c2UKLSAgICAgICAgLy8ga2h0bWwgZG9lc24ndCB1bmRl
cnN0YW5kIG91ciBjbGlwcGluZy4KLSAgICAgICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW1tbW2xh
c3RIaXRWaWV3IF9mcmFtZV0gZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gZG9jdW1lbnRWaXNpYmxl
UmVjdF07Ci0gICAgICAgIGZsb2F0IHlTY3JvbGwgPSB2aXNpYmxlUmVjdC5vcmlnaW4ueTsKLSAg
ICAgICAgZmxvYXQgeFNjcm9sbCA9IHZpc2libGVSZWN0Lm9yaWdpbi54OwotCi0gICAgICAgIGV2
ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0xIC0geFNjcm9sbCwgLTEgLSB5
U2Nyb2xsICkKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAg
Y3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQotICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1t2aWV3IHdpbmRvd10gd2luZG93TnVtYmVy
XQotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRd
IGNvbnRleHRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0Nv
dW50OjAgcHJlc3N1cmU6MF07Ci0gICAgICAgIGlmIChGcmFtZSogbGFzdEhpdENvcmVGcmFtZSA9
IGNvcmUoW2xhc3RIaXRWaWV3IF9mcmFtZV0pKQotICAgICAgICAgICAgbGFzdEhpdENvcmVGcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwotICAgIH0KLQotICAgIGxhc3RI
aXRWaWV3ID0gdmlldzsKLQotICAgIGlmICh2aWV3KSB7Ci0gICAgICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbdmlldyBfZnJhbWVdKSkKLSAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwotCi0gICAgICAgIFt2aWV3IHJlbGVhc2Vd
OwotICAgIH0KLX0KLQotLy8ga2VlcCBpbiBzeW5jIHdpdGggV2ViUGFzdGVib2FyZEhlbHBlcjo6
aW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcwotKyAoTlNBcnJheSAqKV9pbnNlcnRhYmxlUGFzdGVi
b2FyZFR5cGVzCi17Ci0gICAgc3RhdGljIE5TQXJyYXkgKnR5cGVzID0gbmlsOwotICAgIGlmICgh
dHlwZXMpIHsKLSAgICAgICAgdHlwZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0
czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNIVE1MUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9h
cmRUeXBlLCBOU1RJRkZQYm9hcmRUeXBlLCBOU1BERlBib2FyZFR5cGUsCi0jaWYgZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAg
ICAgICAgTlNQSUNUUGJvYXJkVHlwZSwKLSNlbmRpZgotICAgICAgICAgICAgTlNVUkxQYm9hcmRU
eXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlw
ZSwgTlNDb2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07Ci0gICAgICAgIENGUmV0YWlu
KHR5cGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGVzOwotfQotCi0rIChOU0FycmF5ICopX3Nl
bGVjdGlvblBhc3RlYm9hcmRUeXBlcwotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHV0IGRh
dGEgZm9yIE5TSFRNTFBib2FyZFR5cGUgb24gdGhlIHBhc3RlYm9hcmQgYnV0IE1pY3Jvc29mdCBF
eGNlbCBkb2Vzbid0IGxpa2Ugb3VyIGZvcm1hdCBvZiBIVE1MICgzNjQwNDIzKS4KLSAgICByZXR1
cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNSVEZE
UGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIG5pbF07Ci19
Ci0KLS0gKE5TSW1hZ2UgKilfZHJhZ0ltYWdlRm9yVVJMOihOU1N0cmluZyopdXJsU3RyaW5nIHdp
dGhMYWJlbDooTlNTdHJpbmcqKWxhYmVsCi17Ci0gICAgQk9PTCBkcmF3VVJMU3RyaW5nID0gWUVT
OwotICAgIEJPT0wgY2xpcFVSTFN0cmluZyA9IE5PLCBjbGlwTGFiZWxTdHJpbmcgPSBOTzsKLSAg
ICAKLSAgICBpZiAoIWxhYmVsKSB7Ci0gICAgICAgIGRyYXdVUkxTdHJpbmcgPSBOTzsKLSAgICAg
ICAgbGFiZWwgPSB1cmxTdHJpbmc7Ci0gICAgfQotICAgIAotICAgIE5TRm9udCAqbGFiZWxGb250
ID0gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6RFJBR19MSU5LX0xBQkVMX0ZPTlRfU0laRV0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9IYXZlVHJh
aXQ6TlNCb2xkRm9udE1hc2tdOwotICAgIE5TRm9udCAqdXJsRm9udCA9IFtOU0ZvbnQgc3lzdGVt
Rm9udE9mU2l6ZTogRFJBR19MSU5LX1VSTF9GT05UX1NJWkVdOwotICAgIE5TU2l6ZSBsYWJlbFNp
emU7Ci0gICAgbGFiZWxTaXplLndpZHRoID0gW2xhYmVsIF93ZWJfd2lkdGhXaXRoRm9udDogbGFi
ZWxGb250XTsKLSAgICBsYWJlbFNpemUuaGVpZ2h0ID0gW2xhYmVsRm9udCBhc2NlbmRlcl0gLSBb
bGFiZWxGb250IGRlc2NlbmRlcl07Ci0gICAgaWYgKGxhYmVsU2l6ZS53aWR0aCA+IE1BWF9EUkFH
X0xBQkVMX1dJRFRIKXsKLSAgICAgICAgbGFiZWxTaXplLndpZHRoID0gTUFYX0RSQUdfTEFCRUxf
V0lEVEg7Ci0gICAgICAgIGNsaXBMYWJlbFN0cmluZyA9IFlFUzsKLSAgICB9Ci0gICAgCi0gICAg
TlNTaXplIGltYWdlU2l6ZSwgdXJsU3RyaW5nU2l6ZTsKLSAgICBpbWFnZVNpemUud2lkdGggPSBs
YWJlbFNpemUud2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZjsKLSAgICBpbWFnZVNp
emUuaGVpZ2h0ID0gbGFiZWxTaXplLmhlaWdodCArIERSQUdfTEFCRUxfQk9SREVSX1kgKiAyLjBm
OwotICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7Ci0gICAgICAgIHVybFN0cmluZ1NpemUud2lkdGgg
PSBbdXJsU3RyaW5nIF93ZWJfd2lkdGhXaXRoRm9udDogdXJsRm9udF07Ci0gICAgICAgIHVybFN0
cmluZ1NpemUuaGVpZ2h0ID0gW3VybEZvbnQgYXNjZW5kZXJdIC0gW3VybEZvbnQgZGVzY2VuZGVy
XTsKLSAgICAgICAgaW1hZ2VTaXplLmhlaWdodCArPSB1cmxTdHJpbmdTaXplLmhlaWdodDsKLSAg
ICAgICAgaWYgKHVybFN0cmluZ1NpemUud2lkdGggPiBNQVhfRFJBR19MQUJFTF9XSURUSCkgewot
ICAgICAgICAgICAgaW1hZ2VTaXplLndpZHRoID0gTUFYKE1BWF9EUkFHX0xBQkVMX1dJRFRIICsg
RFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYsIE1JTl9EUkFHX0xBQkVMX1dJRFRIX0JFRk9SRV9D
TElQKTsKLSAgICAgICAgICAgIGNsaXBVUkxTdHJpbmcgPSBZRVM7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBNQVgobGFiZWxTaXplLndpZHRoICsgRFJB
R19MQUJFTF9CT1JERVJfWCAqIDIuMGYsIHVybFN0cmluZ1NpemUud2lkdGggKyBEUkFHX0xBQkVM
X0JPUkRFUl9YICogMi4wZik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgTlNJbWFnZSAqZHJhZ0lt
YWdlID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVdIGF1dG9yZWxl
YXNlXTsKLSAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107Ci0gICAgCi0gICAgW1tOU0NvbG9yIGNv
bG9yV2l0aERldmljZVJlZDogMC43ZiBncmVlbjogMC43ZiBibHVlOiAwLjdmIGFscGhhOiAwLjhm
XSBzZXRdOwotICAgIAotICAgIC8vIERyYWcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5l
cnMvCi0gICAgTlNCZXppZXJQYXRoICpwYXRoID0gW05TQmV6aWVyUGF0aCBiZXppZXJQYXRoXTsK
LSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoMC4w
ZiwgMC4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIu
MGYpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJl
Y3QoMCwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKLSAgICBbcGF0
aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndp
ZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxf
UkFESVVTICogMi4wZildOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVj
dDogTlNNYWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYs
IDAuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBm
KV07Ci0gICAgCi0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0
KERSQUdfTEFCRUxfUkFESVVTLCAwLjBmLCBpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JB
RElVUyAqIDIuMGYsIGltYWdlU2l6ZS5oZWlnaHQpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQ
YXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoMC4wZiwgRFJBR19MQUJFTF9SQURJVVMsIERSQUdfTEFC
RUxfUkFESVVTICsgMTAuMGYsIGltYWdlU2l6ZS5oZWlnaHQgLSAyLjBmICogRFJBR19MQUJFTF9S
QURJVVMpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3Qo
aW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgLSAyMC4wZiwgRFJBR19MQUJFTF9S
QURJVVMsIERSQUdfTEFCRUxfUkFESVVTICsgMjAuMGYsIGltYWdlU2l6ZS5oZWlnaHQgLSAyLjBm
ICogRFJBR19MQUJFTF9SQURJVVMpXTsKLSAgICBbcGF0aCBmaWxsXTsKLSAgICAKLSAgICBOU0Nv
bG9yICp0b3BDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjAuMGYgYWxwaGE6
MC43NWZdOwotICAgIE5TQ29sb3IgKmJvdHRvbUNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2
aWNlV2hpdGU6MS4wZiBhbHBoYTowLjVmXTsKLSAgICBpZiAoZHJhd1VSTFN0cmluZykgewotICAg
ICAgICBpZiAoY2xpcFVSTFN0cmluZykKLSAgICAgICAgICAgIHVybFN0cmluZyA9IFtXZWJTdHJp
bmdUcnVuY2F0b3IgY2VudGVyVHJ1bmNhdGVTdHJpbmc6IHVybFN0cmluZyB0b1dpZHRoOmltYWdl
U2l6ZS53aWR0aCAtIChEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZikgd2l0aEZvbnQ6dXJsRm9u
dF07Ci0gICAgICAgIAotICAgICAgICBbdXJsU3RyaW5nIF93ZWJfZHJhd0RvdWJsZWRBdFBvaW50
Ok5TTWFrZVBvaW50KERSQUdfTEFCRUxfQk9SREVSX1gsIERSQUdfTEFCRUxfQk9SREVSX1kgLSBb
dXJsRm9udCBkZXNjZW5kZXJdKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhU
b3BDb2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21Db2xvciBmb250OnVybEZvbnRdOwot
ICAgIH0KLSAgICAKLSAgICBpZiAoY2xpcExhYmVsU3RyaW5nKQotICAgICAgICBsYWJlbCA9IFtX
ZWJTdHJpbmdUcnVuY2F0b3IgcmlnaHRUcnVuY2F0ZVN0cmluZzogbGFiZWwgdG9XaWR0aDppbWFn
ZVNpemUud2lkdGggLSAoRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYpIHdpdGhGb250OmxhYmVs
Rm9udF07Ci0gICAgW2xhYmVsIF93ZWJfZHJhd0RvdWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50IChE
UkFHX0xBQkVMX0JPUkRFUl9YLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19MQUJFTF9CT1JERVJf
WV9PRkZTRVQgLSBbbGFiZWxGb250IHBvaW50U2l6ZV0pCi0gICAgICAgICAgICAgICAgICAgICAg
d2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNvbG9yIGZvbnQ6bGFiZWxG
b250XTsKLSAgICAKLSAgICBbZHJhZ0ltYWdlIHVubG9ja0ZvY3VzXTsKLSAgICAKLSAgICByZXR1
cm4gZHJhZ0ltYWdlOwotfQotCi0tIChOU0ltYWdlICopX2RyYWdJbWFnZUZvckxpbmtFbGVtZW50
OihOU0RpY3Rpb25hcnkgKillbGVtZW50Ci17Ci0gICAgTlNVUkwgKmxpbmtVUkwgPSBbZWxlbWVu
dCBvYmplY3RGb3JLZXk6IFdlYkVsZW1lbnRMaW5rVVJMS2V5XTsKLSAgICAKLSAgICBOU1N0cmlu
ZyAqbGFiZWwgPSBbZWxlbWVudCBvYmplY3RGb3JLZXk6IFdlYkVsZW1lbnRMaW5rTGFiZWxLZXld
OwotICAgIE5TU3RyaW5nICp1cmxTdHJpbmcgPSBbbGlua1VSTCBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nXTsKLSAgICByZXR1cm4gW3NlbGYgX2RyYWdJbWFnZUZvclVSTDp1cmxTdHJpbmcgd2l0aExh
YmVsOmxhYmVsXTsKLX0KLQotLSAodm9pZClwYXN0ZWJvYXJkQ2hhbmdlZE93bmVyOihOU1Bhc3Rl
Ym9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFT
b3VyY2U6MF07Ci19Ci0KLS0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZCBwcm92aWRlRGF0YUZvclR5cGU6KE5TU3RyaW5nICopdHlwZQotewotICAgIGlmIChbdHlw
ZSBpc0VxdWFsOk5TUlRGRFBib2FyZFR5cGVdICYmIFtbcGFzdGVib2FyZCB0eXBlc10gY29udGFp
bnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgIFdlYkFyY2hpdmUgKmFy
Y2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRh
Rm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOwotICAgICAgICBbcGFzdGVib2FyZCBfd2Vi
X3dyaXRlUHJvbWlzZWRSVEZERnJvbUFyY2hpdmU6YXJjaGl2ZSBjb250YWluc0ltYWdlOltbcGFz
dGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJkVHlwZV1dOwotICAgICAg
ICBbYXJjaGl2ZSByZWxlYXNlXTsKLSAgICB9IGVsc2UgaWYgKFt0eXBlIGlzRXF1YWw6TlNUSUZG
UGJvYXJkVHlwZV0gJiYgW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdKSB7Ci0gICAg
ICAgIGlmIChJbWFnZSogaW1hZ2UgPSBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0t
PmltYWdlKCkpCi0gICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilpbWFn
ZS0+Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXTsKLSAg
ICAgICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6MF07Ci0gICAgfQotfQot
Ci0tICh2b2lkKV9oYW5kbGVBdXRvc2Nyb2xsRm9yTW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZl
bnQgCi17IAotICAgIFtzZWxmIGF1dG9zY3JvbGw6ZXZlbnRdOyAKLSAgICBbc2VsZiBfc3RhcnRB
dXRvc2Nyb2xsVGltZXI6ZXZlbnRdOyAKLX0gCi0KLS0gKFdlYlBsdWdpbkNvbnRyb2xsZXIgKilf
cGx1Z2luQ29udHJvbGxlcgotewotICAgIHJldHVybiBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxl
cjsKLX0KLQotLSAodm9pZClfbGF5b3V0Rm9yUHJpbnRpbmcKLXsKLSAgICAvLyBTZXQgcHJpbnRp
bmcgbW9kZSB0ZW1wb3JhcmlseSBzbyB3ZSBjYW4gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB2aWV3
LiBUaGlzIHdpbGwgYWxsb3cKLSAgICAvLyBBcHBLaXQncyBwYWdpbmF0aW9uIGNvZGUgdG8gdXNl
IHRoZSBjb3JyZWN0IGhlaWdodCBmb3IgdGhlIHBhZ2UgY29udGVudC4gTGVhdmluZyBwcmludGlu
ZwotICAgIC8vIG1vZGUgb24gaW5kZWZpbml0ZWx5IHdvdWxkIGludGVyZmVyZSB3aXRoIE1haWwn
cyBwcmludGluZyBtZWNoYW5pc20gKGF0IGxlYXN0KSwgc28gd2UganVzdAotICAgIC8vIHR1cm4g
aXQgb2ZmIGFnYWluIGFmdGVyIGFkanVzdGluZyB0aGUgc2l6ZS4KLSAgICBbc2VsZiBfd2ViX3Nl
dFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplXTsKLSAgICBbc2VsZiBfd2Vi
X2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLX0KLQotLSAodm9pZClfc21hcnRJbnNlcnRG
b3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKiliZWZvcmVTdHJpbmcg
YWZ0ZXJTdHJpbmc6KE5TU3RyaW5nICoqKWFmdGVyU3RyaW5nCi17Ci0gICAgaWYgKCFwYXN0ZVN0
cmluZyB8fCAhcmFuZ2VUb1JlcGxhY2UgfHwgIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkXSkgewotICAgICAgICBpZiAoYmVmb3JlU3RyaW5nKQotICAgICAgICAgICAg
KmJlZm9yZVN0cmluZyA9IG5pbDsKLSAgICAgICAgaWYgKGFmdGVyU3RyaW5nKQotICAgICAgICAg
ICAgKmFmdGVyU3RyaW5nID0gbmlsOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IFtbc2VsZiBfZnJhbWVdIF9zbWFydEluc2VydEZvclN0cmluZzpwYXN0ZVN0cmluZyByZXBsYWNp
bmdSYW5nZTpyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6YmVmb3JlU3RyaW5nIGFmdGVyU3Ry
aW5nOmFmdGVyU3RyaW5nXTsKLX0KLQotLSAoQk9PTClfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93
ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdICYmIFtbcGFzdGVib2FyZCB0eXBlc10g
Y29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwotfQotCi0tICh2b2lkKV9z
dGFydEF1dG9zY3JvbGxUaW1lcjogKE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKLXsKLSAgICBpZiAo
X3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9PSBuaWwpIHsKLSAgICAgICAgX3ByaXZhdGUtPmF1
dG9zY3JvbGxUaW1lciA9IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6
QVVUT1NDUk9MTF9JTlRFUlZBTAotICAgICAgICAgICAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKF9hdXRvc2Nyb2xsKSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdIHJldGFpbl07Ci0g
ICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gW3RyaWdnZXJFdmVudCBy
ZXRhaW5dOwotICAgIH0KLX0KLQotLy8gRklYTUU6IF9zZWxlY3Rpb25SZWN0IGlzIGRlcHJlY2F0
ZWQgaW4gZmF2b3Igb2Ygc2VsZWN0aW9uUmVjdCwgd2hpY2ggaXMgaW4gcHJvdG9jb2wgV2ViRG9j
dW1lbnRTZWxlY3Rpb24uCi0vLyBXZSBjYW4ndCByZW1vdmUgdGhpcyB5ZXQgYmVjYXVzZSBpdCdz
IHN0aWxsIGluIHVzZSBieSBNYWlsLgotLSAoTlNSZWN0KV9zZWxlY3Rpb25SZWN0Ci17Ci0gICAg
cmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RdOwotfQotCi0tICh2b2lkKV9zdG9wQXV0b3Njcm9s
bFRpbWVyCi17Ci0gICAgTlNUaW1lciAqdGltZXIgPSBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVy
OwotICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBuaWw7Ci0gICAgW19wcml2YXRlLT5h
dXRvc2Nyb2xsVHJpZ2dlckV2ZW50IHJlbGVhc2VdOwotICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xs
VHJpZ2dlckV2ZW50ID0gbmlsOwotICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKLSAgICBbdGltZXIg
cmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX2F1dG9zY3JvbGwKLXsKLSAgICAvLyBHdWFyYW50ZWUg
dGhhdCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpcyBpbnZhbGlkYXRlZCwgZXZlbiBpZiB3ZSBkb24n
dCByZWNlaXZlCi0gICAgLy8gYSBtb3VzZSB1cCBldmVudC4KLSAgICBCT09MIGlzU3RpbGxEb3du
ID0gQ0dFdmVudFNvdXJjZUJ1dHRvblN0YXRlKGtDR0V2ZW50U291cmNlU3RhdGVDb21iaW5lZFNl
c3Npb25TdGF0ZSwga0NHTW91c2VCdXR0b25MZWZ0KTsgICAKLSAgICBpZiAoIWlzU3RpbGxEb3du
KXsKLSAgICAgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdp
dGhUeXBlOk5TTGVmdE1vdXNlRHJhZ2dlZAotICAgICAgICBsb2NhdGlvbjpbW3NlbGYgd2luZG93
XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQotICAgICAgICBt
b2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQotICAgICAg
ICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCi0gICAg
ICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAgICAgIGNv
bnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCi0gICAgICAgIGV2ZW50TnVtYmVy
OjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOwotICAgIFtzZWxmIG1vdXNlRHJhZ2dlZDpmYWtl
RXZlbnRdOwotfQotCi0tIChCT09MKV9jYW5FZGl0Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUt
PmVkaXRvcigpLT5jYW5FZGl0KCk7Ci19Ci0KLS0gKEJPT0wpX2NhbkVkaXRSaWNobHkKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLX0KLQotLSAo
Qk9PTClfY2FuQWx0ZXJDdXJyZW50U2VsZWN0aW9uCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9oYXNT
ZWxlY3Rpb25Pckluc2VydGlvblBvaW50XSAmJiBbc2VsZiBfaXNFZGl0YWJsZV07Ci19Ci0KLS0g
KEJPT0wpX2hhc1NlbGVjdGlvbgotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNSYW5nZSgpOwotfQotCi0tIChCT09MKV9oYXNTZWxlY3Rpb25Pckluc2VydGlvblBvaW50
Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0T3JSYW5nZSgp
OwotfQotCi0tIChCT09MKV9oYXNJbnNlcnRpb25Qb2ludAotewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldCgpOwotfQotCi0tIChCT09MKV9pc0VkaXRhYmxlCi17
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJu
IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
OwotfQotCi0tIChCT09MKV90cmFuc3BhcmVudEJhY2tncm91bmQKLXsKLSAgICByZXR1cm4gX3By
aXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZDsKLX0KLQotLSAodm9pZClfc2V0VHJhbnNwYXJl
bnRCYWNrZ3JvdW5kOihCT09MKWYKLXsKLSAgICBfcHJpdmF0ZS0+dHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kID0gZjsKLX0KLQotLSAoTlNJbWFnZSAqKV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdlCi17Ci0g
ICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKSB7Ci0gICAgICAgIE5TSW1hZ2UgKmRyYWdJbWFn
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkltYWdlKCk7Ci0gICAgICAgIFtkcmFn
SW1hZ2UgX3dlYl9kaXNzb2x2ZVRvRnJhY3Rpb246V2ViRHJhZ0ltYWdlQWxwaGFdOwotICAgICAg
ICByZXR1cm4gZHJhZ0ltYWdlOwotICAgIH0KLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChOU1Jl
Y3QpX3NlbGVjdGlvbkRyYWdnaW5nUmVjdAotewotICAgIC8vIE1haWwgY3VycmVudGx5IGNhbGxz
IHRoaXMgbWV0aG9kLiBXZSBjYW4gZWxpbWluYXRlIGl0IHdoZW4gTWFpbCBubyBsb25nZXIgY2Fs
bHMgaXQuCi0gICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RdOwotfQotCi0tIChET01Ob2Rl
ICopX2luc2VydE9yZGVyZWRMaXN0Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRv
cigpLT5pbnNlcnRPcmRlcmVkTGlzdCgpLmdldCgpKSA6IG5pbDsKLX0KLQotLSAoRE9NTm9kZSAq
KV9pbnNlcnRVbm9yZGVyZWRMaXN0Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRv
cigpLT5pbnNlcnRVbm9yZGVyZWRMaXN0KCkuZ2V0KCkpIDogbmlsOwotfQotCi0tIChCT09MKV9j
YW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5l
ZGl0b3IoKS0+Y2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKLX0KLQotLSAoQk9PTClf
Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7Ci19Ci0KLS0gKERPTU5v
ZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkuZ2V0KCkpIDogbmls
OwotfQotCi0tIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZAot
ewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVy
biBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCkuZ2V0KCkpIDogbmlsOwotfQotCi0tIChET01Ob2RlICopX2luY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJh
bWUtPmVkaXRvcigpLT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpLmdldCgp
KSA6IG5pbDsKLX0KLQotLSAodm9pZClfZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoY29yZUZy
YW1lKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5kZWNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbCgpOwotfQotCi0tICh2b2lkKV9zZXRIaWdobGlnaHRlcjooaWQ8V2ViSFRNTEhpZ2hsaWdo
dGVyPiloaWdobGlnaHRlciBvZlR5cGU6KE5TU3RyaW5nKil0eXBlCi17Ci0gICAgaWYgKCFfcHJp
dmF0ZS0+aGlnaGxpZ2h0ZXJzKQotICAgICAgICBfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBbX3ByaXZhdGUtPmhpZ2hsaWdo
dGVycyBzZXRPYmplY3Q6aGlnaGxpZ2h0ZXIgZm9yS2V5OnR5cGVdOwotfQotCi0tICh2b2lkKV9y
ZW1vdmVIaWdobGlnaHRlck9mVHlwZTooTlNTdHJpbmcqKXR5cGUKLXsKLSAgICBbX3ByaXZhdGUt
PmhpZ2hsaWdodGVycyByZW1vdmVPYmplY3RGb3JLZXk6dHlwZV07Ci19Ci0KLS0gKHZvaWQpX3Vw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQotewotICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07Ci0KLSAgICBbW3NlbGYgX3dlYlZpZXddIF91cGRhdGVG
b2N1c2VkQW5kQWN0aXZlU3RhdGVGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKLX0KLQotLSAodm9p
ZClfd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQK
LXsKLSAgICBBU1NFUlQoW3NlbGYgX2hhc1NlbGVjdGlvbl0pOwotICAgIE5TQXJyYXkgKnR5cGVz
ID0gW3NlbGYgcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXTsKLQotICAgIC8vIERvbid0IHdy
aXRlIFJURkQgdG8gdGhlIHBhc3RlYm9hcmQgd2hlbiB0aGUgY29waWVkIGF0dHJpYnV0ZWQgc3Ry
aW5nIGhhcyBubyBhdHRhY2htZW50cy4KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOwotICAgIE5TTXV0YWJs
ZUFycmF5ICptdXRhYmxlVHlwZXMgPSBuaWw7Ci0gICAgaWYgKCFbYXR0cmlidXRlZFN0cmluZyBj
b250YWluc0F0dGFjaG1lbnRzXSkgewotICAgICAgICBtdXRhYmxlVHlwZXMgPSBbdHlwZXMgbXV0
YWJsZUNvcHldOwotICAgICAgICBbbXV0YWJsZVR5cGVzIHJlbW92ZU9iamVjdDpOU1JURkRQYm9h
cmRUeXBlXTsKLSAgICAgICAgdHlwZXMgPSBtdXRhYmxlVHlwZXM7Ci0gICAgfQotCi0gICAgW3Bh
c3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOltzZWxmIF90b3BIVE1MVmlld11dOwot
ICAgIFtzZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0
ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzphdHRyaWJ1dGVkU3RyaW5n
XTsKLSAgICBbbXV0YWJsZVR5cGVzIHJlbGVhc2VdOwotfQotCi0tICh2b2lkKWNsb3NlCi17Ci0g
ICAgLy8gQ2hlY2sgZm9yIGEgbmlsIF9wcml2YXRlIGhlcmUgaW4gY2FzZSB3ZSB3ZXJlIGNyZWF0
ZWQgd2l0aCBpbml0V2l0aENvZGVyLiBJbiB0aGF0IGNhc2UsIHRoZSBXZWJWaWV3IGlzIGp1c3Qg
dGhyb3dpbmcKLSAgICAvLyBvdXQgdGhlIGFyY2hpdmVkIFdlYkhUTUxWaWV3IGFuZCByZWNyZWF0
aW5nIGEgbmV3IG9uZSBpZiBuZWVkZWQuIFNvIGNsb3NlIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0
aGluZyBpbiB0aGF0IGNhc2UuCi0gICAgaWYgKCFfcHJpdmF0ZSB8fCBfcHJpdmF0ZS0+Y2xvc2Vk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfcHJpdmF0ZS0+Y2xvc2VkID0gWUVTOwotCi0gICAg
W3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKLSAgICBbc2VsZiBfY2FuY2VsVXBk
YXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOwotICAgIFtzZWxmIF9jbGVhckxhc3RIaXRW
aWV3SWZTZWxmXTsKLSAgICBbc2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRp
b25hbGx5XTsKLSAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKLSAgICBbc2VsZiBf
cmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKLSAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xs
ZXIgZGVzdHJveUFsbFBsdWdpbnNdOwotICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBz
ZXREYXRhU291cmNlOm5pbF07Ci0gICAgLy8gcmVtb3ZlIHRvb2x0aXBzIGJlZm9yZSBjbGVhcmlu
ZyBfcHJpdmF0ZSBzbyByZW1vdmVUcmFja2luZ1JlY3Q6IHdpbGwgd29yayBjb3JyZWN0bHkKLSAg
ICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KQotICAgICAgICBbW3Nl
bGYgX3dlYlZpZXddIF9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxm
IF9mcmFtZV1dOwotI2VuZGlmCi0KLSAgICBbX3ByaXZhdGUgY2xlYXJdOwotCi0gICAgUGFnZSog
cGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKTsKLSAgICBpZiAocGFnZSkKLSAgICAgICAgcGFn
ZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+c2V0RHJhZ2dpbmdJbWFnZVVSTChLVVJMKCkpOwotfQotCi0t
IChCT09MKV9oYXNIVE1MRG9jdW1lbnQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5POwot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICByZXR1
cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCk7Ci19Ci0KLS0gKERPTURv
Y3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3Rl
Ym9hcmQgKilwYXN0ZWJvYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yVHlwZTooTlNTdHJpbmcgKilwYm9hcmRUeXBlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2UgKilj
b250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXMKLXsKLSAgICBpZiAocGJvYXJkVHlwZSA9
PSBXZWJBcmNoaXZlUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0g
W1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6
V2ViQXJjaGl2ZVBib2FyZFR5cGVdXTsKLSAgICAgICAgaWYgKHN1YnJlc291cmNlcykKLSAgICAg
ICAgICAgICpzdWJyZXNvdXJjZXMgPSBbYXJjaGl2ZSBzdWJyZXNvdXJjZXNdOwotICAgICAgICBE
T01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3Vt
ZW50RnJhZ21lbnRXaXRoQXJjaGl2ZTphcmNoaXZlXTsKLSAgICAgICAgW2FyY2hpdmUgcmVsZWFz
ZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUg
PT0gTlNGaWxlbmFtZXNQYm9hcmRUeXBlKQotICAgICAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRXaXRoUGF0aHM6W3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVu
YW1lc1Bib2FyZFR5cGVdXTsKLSAgICAgICAgCi0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNIVE1M
UGJvYXJkVHlwZSkgewotICAgICAgICBOU1N0cmluZyAqSFRNTFN0cmluZyA9IFtwYXN0ZWJvYXJk
IHN0cmluZ0ZvclR5cGU6TlNIVE1MUGJvYXJkVHlwZV07Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBo
YWNrIHRvIG1ha2UgTWljcm9zb2Z0J3MgSFRNTCBwYXN0ZWJvYXJkIGRhdGEgd29yay4gU2VlIDM3
Nzg3ODUuCi0gICAgICAgIGlmIChbSFRNTFN0cmluZyBoYXNQcmVmaXg6QCJWZXJzaW9uOiJdKSB7
Ci0gICAgICAgICAgICBOU1JhbmdlIHJhbmdlID0gW0hUTUxTdHJpbmcgcmFuZ2VPZlN0cmluZzpA
IjxodG1sIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXTsKLSAgICAgICAgICAgIGlm
IChyYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQotICAgICAgICAgICAgICAgIEhUTUxTdHJp
bmcgPSBbSFRNTFN0cmluZyBzdWJzdHJpbmdGcm9tSW5kZXg6cmFuZ2UubG9jYXRpb25dOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChbSFRNTFN0cmluZyBsZW5ndGhdID09IDApCi0gICAgICAgICAg
ICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9k
b2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpIVE1MU3RyaW5nIGJhc2VVUkxTdHJpbmc6
bmlsXTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgX2hhc0hUTUxEb2N1bWVudCBjbGF1c2UgaGVyZSBp
cyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIE5TQXR0cmlidXRlZFN0cmluZzogUmFkYXIgNTA1
MjM2OS4KLSAgICAvLyBJZiB3ZSBjYWxsIF9kb2N1bWVudEZyb21SYW5nZSBvbiBhbiBYTUwgZG9j
dW1lbnQgd2UnbGwgZ2V0ICJzZXRJbm5lckhUTUw6IG1ldGhvZCBub3QgZm91bmQiLgotICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGJ1ZyA1MDUyMzY5IGlzIGZpeGVkLgotICAgIGlmIChb
c2VsZiBfaGFzSFRNTERvY3VtZW50XSAmJiBwYm9hcmRUeXBlID09IE5TUlRGUGJvYXJkVHlwZSB8
fCBwYm9hcmRUeXBlID09IE5TUlRGRFBib2FyZFR5cGUpIHsKLSAgICAgICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpzdHJpbmcgPSBuaWw7Ci0gICAgICAgIGlmIChwYm9hcmRUeXBlID09IE5TUlRGRFBi
b2FyZFR5cGUpCi0gICAgICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVd
IGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKLSAgICAgICAgaWYgKHN0cmluZyA9PSBuaWwpCi0g
ICAgICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhS
VEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJp
YnV0ZXM6TlVMTF07Ci0gICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQotICAgICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgICAgIAotICAgICAgICBOU0RpY3Rpb25hcnkgKmRvY3VtZW50QXR0
cmlidXRlcyA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgot
ICAgICAgICAgICAgW1tzZWxmIGNsYXNzXSBfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRT
dHJpbmdDb252ZXJzaW9uXSwgTlNFeGNsdWRlZEVsZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGUsCi0g
ICAgICAgICAgICBzZWxmLCBAIldlYlJlc291cmNlSGFuZGxlciIsIG5pbF07Ci0gICAgICAgIE5T
QXJyYXkgKnM7Ci0gICAgICAgIAotICAgICAgICBCT09MIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9
IFtbc2VsZiBfd2ViVmlld10gZGVmZXJzQ2FsbGJhY2tzXTsKLSAgICAgICAgaWYgKCF3YXNEZWZl
cnJpbmdDYWxsYmFja3MpCi0gICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0Nh
bGxiYWNrczpZRVNdOwotICAgICAgICAgICAgCi0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQg
KmZyYWdtZW50ID0gW3N0cmluZyBfZG9jdW1lbnRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0
cmluZyBsZW5ndGhdKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudDpbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEF0
dHJpYnV0ZXM6ZG9jdW1lbnRBdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6JnNdOwotICAgICAgICBpZiAo
c3VicmVzb3VyY2VzKQotICAgICAgICAgICAgKnN1YnJlc291cmNlcyA9IHM7Ci0gICAgICAgIAot
ICAgICAgICBOU0VudW1lcmF0b3IgKmUgPSBbcyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAgICAg
V2ViUmVzb3VyY2UgKnI7Ci0gICAgICAgIHdoaWxlICgociA9IFtlIG5leHRPYmplY3RdKSkKLSAg
ICAgICAgICAgIFtbc2VsZiBfZGF0YVNvdXJjZV0gYWRkU3VicmVzb3VyY2U6cl07Ci0gICAgICAg
IAotICAgICAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKLSAgICAgICAgICAgIFtbc2Vs
ZiBfd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOk5PXTsKLSAgICAgICAgCi0gICAgICAgIFtk
b2N1bWVudEF0dHJpYnV0ZXMgcmVsZWFzZV07Ci0gICAgICAgIFtzdHJpbmcgcmVsZWFzZV07Ci0g
ICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNU
SUZGUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJl
c291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNUSUZG
UGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS50
aWZmIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvdGlmZiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5p
bF07Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRh
U291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKLSAg
ICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAg
fQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TUERGUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJS
ZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bh
c3RlYm9hcmQgZGF0YUZvclR5cGU6TlNQREZQYm9hcmRUeXBlXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJM
V2l0aFJlbGF0aXZlUGFydChAImFwcGxpY2F0aW9uLnBkZiIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImFwcGxpY2F0
aW9uL3BkZiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07Ci0gICAgICAgIERPTURvY3Vt
ZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFn
bWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKLSAgICAgICAgW3Jlc291cmNlIHJlbGVh
c2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotI2lmIGRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBpZiAocGJv
YXJkVHlwZSA9PSBOU1BJQ1RQYm9hcmRUeXBlKSB7Ci0gICAgICAgIFdlYlJlc291cmNlICpyZXNv
dXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRh
Rm9yVHlwZTpOU1BJQ1RQYm9hcmRUeXBlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZl
UGFydChAImltYWdlLnBpY3QiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS9waWN0IiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5p
bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQg
PSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6
cmVzb3VyY2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBm
cmFnbWVudDsKLSAgICB9Ci0jZW5kaWYKLSAgICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBw
b3J0IHNldHRpbmcgYW5kIHJldHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1
dCB3ZSBkb24ndCBiZWxpZXZlCi0gICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2Vy
IHB1dCB0eXBlcyBmb3Igd2hpY2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhl
IHBhc3RlYm9hcmQuCi0gICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJp
bmcqKWtVVFR5cGVQTkddKSB7Ci0gICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2Vi
UmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTooTlNT
dHJpbmcqKWtVVFR5cGVQTkddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAi
aW1hZ2UucG5nIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvcG5nIiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5h
bWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYg
X2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2Vd
OwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsK
LSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNVUkxQYm9hcmRUeXBlKSB7Ci0gICAgICAg
IE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0gICAg
ICAgIERPTURvY3VtZW50KiBkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsK
LSAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIERPTUhUTUxBbmNob3JFbGVtZW50ICphbmNob3Ig
PSAoRE9NSFRNTEFuY2hvckVsZW1lbnQgKilbZG9jdW1lbnQgY3JlYXRlRWxlbWVudDpAImEiXTsK
LSAgICAgICAgTlNTdHJpbmcgKlVSTFN0cmluZyA9IFtVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0
cmluZ107IC8vIE9yaWdpbmFsIGRhdGEgaXMgQVNDSUktb25seSwgc28gdGhlcmUgaXMgbm8gbmVl
ZCB0byBwcmVjb21wb3NlLgotICAgICAgICBpZiAoW1VSTFN0cmluZyBsZW5ndGhdID09IDApCi0g
ICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICBOU1N0cmluZyAqVVJMVGl0bGVTdHJpbmcg
PSBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV0gcHJlY29t
cG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107Ci0gICAgICAgIERPTVRleHQgKnRleHQg
PSBbZG9jdW1lbnQgY3JlYXRlVGV4dE5vZGU6VVJMVGl0bGVTdHJpbmddOwotICAgICAgICBbYW5j
aG9yIHNldEhyZWY6VVJMU3RyaW5nXTsKLSAgICAgICAgW2FuY2hvciBhcHBlbmRDaGlsZDp0ZXh0
XTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbZG9jdW1lbnQgY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudF07Ci0gICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNo
b3JdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChwYm9hcmRUeXBl
ID09IE5TU3RyaW5nUGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3Ry
aW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLmdl
dCgpKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpIAotLSAodm9pZClfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAoteyAK
LSAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsgCi0gICAgdW5zaWduZWQg
aW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3cyBjb3VudF07IAotICAgIHVuc2lnbmVkIGludCBz
dWJ2aWV3SW5kZXg7IAotICAgIAotICAgIGZvciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmlld0lu
ZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3SW5kZXgrKykgeyAKLSAgICAgICAgTlNWaWV3ICpz
dWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6c3Vidmlld0luZGV4XTsgCi0gICAgICAg
IGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNs
YXNzXV0pIAotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3Vidmll
dyBzdG9wVGltZXJzXTsKLSAgICB9IAotfSAKLSNlbmRpZiAKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKSAKLS0gKHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBs
dWdpbnMgCi17IAotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3NlbGYgc3Vidmlld3NdOyAKLSAg
ICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdzIGNvdW50XTsgCi0gICAgdW5z
aWduZWQgaW50IHN1YnZpZXdJbmRleDsgCi0gICAgCi0gICAgZm9yIChzdWJ2aWV3SW5kZXggPSAw
OyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJbmRleCsrKSB7IAotICAgICAg
ICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpzdWJ2aWV3SW5kZXhd
OyAKLSAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcgY2xhc3NdXSkgCi0gICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcgKilzdWJ2aWV3IHJlc3RhcnRUaW1lcnNdOyAKLSAgICB9IAotfSAKLSNlbmRpZiAKLQotLSAo
Qk9PTClfaXNVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcKLXsKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgcmV0dXJuIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ICE9
IG5pbDsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCi19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIE5TVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0KLS0gKHZvaWQpX3dl
Yl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRhYmxlQXJyYXkgKilhcnJh
eQotewotICAgIHVuc2lnbmVkIGNvdW50ID0gW19zdWJ2aWV3cyBjb3VudF07Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNWaWV3ICpjaGlsZCA9
IFtfc3Vidmlld3Mgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgaWYgKFtjaGlsZCBpc0tpbmRP
ZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVj
dDpjaGlsZF07Ci0gICAgICAgIFtjaGlsZCBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NU
b0FycmF5OmFycmF5XTsKLSAgICB9Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE5TTXV0
YWJsZURpY3Rpb25hcnkgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotCi0tICh2b2lkKV93ZWJf
c2V0T2JqZWN0SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleQotewotICAgIGlmIChv
YmplY3QgPT0gbmlsKSB7Ci0gICAgICAgIFtzZWxmIHJlbW92ZU9iamVjdEZvcktleTprZXldOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFtzZWxmIHNldE9iamVjdDpvYmplY3QgZm9yS2V5OmtleV07
Ci0gICAgfQotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgTlNTdHJpbmcgKFdlYkhUTUxWaWV3Rmls
ZUludGVybmFsKQotLSAoQk9PTCltYXRjaGVzRXh0ZW5zaW9uRXF1aXZhbGVudDooTlNTdHJpbmcg
KilleHRlbnNpb247Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoV2ViSFRNTFZp
ZXdGaWxlSW50ZXJuYWwpCi0KLS0gKEJPT0wpbWF0Y2hlc0V4dGVuc2lvbkVxdWl2YWxlbnQ6KE5T
U3RyaW5nICopZXh0ZW5zaW9uCi17Ci0gICAgaWYgKFtzZWxmIGhhc1N1ZmZpeDpleHRlbnNpb25d
KQotICAgICAgICByZXR1cm4gWUVTOwotICAgIGVsc2UgaWYgKFtleHRlbnNpb24gaXNFcXVhbFRv
U3RyaW5nOkAianBlZyJdICYmIFtzZWxmIGhhc1N1ZmZpeDpAImpwZyJdKQotICAgICAgICByZXR1
cm4gWUVTOwotICAgIHJldHVybiBOTzsKLX0KLQotQGVuZAotCi0jaWZkZWYgQlVJTERJTkdfT05f
VElHRVIKLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIHdvcmthcm91bmQgZm9yCi0vLyA8cmRhcjov
L3Byb2JsZW0vMzQyOTYzMT4gd2luZG93IHN0b3BzIGdldHRpbmcgbW91c2UgbW92ZWQgZXZlbnRz
IGFmdGVyIGZpcnN0IHRvb2x0aXAgYXBwZWFycwotLy8gVGhlIHRyaWNrIGlzIHRvIGRlZmluZSBh
IGNhdGVnb3J5IG9uIE5TVG9vbFRpcFBhbmVsIHRoYXQgaW1wbGVtZW50cyBzZXRBY2NlcHRzTW91
c2VNb3ZlZEV2ZW50czouCi0vLyBTaW5jZSB0aGUgY2F0ZWdvcnkgd2lsbCBiZSBzZWFyY2hlZCBi
ZWZvcmUgdGhlIHJlYWwgY2xhc3MsIHdlJ2xsIHByZXZlbnQgdGhlIGZsYWcgZnJvbSBiZWluZwot
Ly8gc2V0IG9uIHRoZSB0b29sIHRpcCBwYW5lbC4KLQotQGludGVyZmFjZSBOU1Rvb2xUaXBQYW5l
bCA6IE5TUGFuZWwKLUBlbmQKLQotQGludGVyZmFjZSBOU1Rvb2xUaXBQYW5lbCAoV2ViSFRNTFZp
ZXdGaWxlSW50ZXJuYWwpCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU1Rvb2xUaXBQYW5lbCAo
V2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0KLS0gKHZvaWQpc2V0QWNjZXB0c01vdXNlTW92ZWRF
dmVudHM6KEJPT0wpZmxhZwotewotICAgIC8vIERvIG5vdGhpbmcsIHByZXZlbnRpbmcgdGhlIHRv
b2wgdGlwIHBhbmVsIGZyb20gdHJ5aW5nIHRvIGFjY2VwdCBtb3VzZS1tb3ZlZCBldmVudHMuCi19
Ci0KLUBlbmQKLQotI2VuZGlmCi0KLUBpbnRlcmZhY2UgTlNBcnJheSAoV2ViSFRNTFZpZXcpCi0t
ICh2b2lkKV93ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Ig
d2l0aE9iamVjdDooaWQpb2JqZWN0OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZp
ZXcKLQotKyAodm9pZClpbml0aWFsaXplCi17Ci0gICAgW05TQXBwIHJlZ2lzdGVyU2VydmljZXNN
ZW51U2VuZFR5cGVzOltbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVzOltbc2VsZiBjbGFzc10gX2lu
c2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdXTsKLSAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25N
YWluVGhyZWFkKHNlbGYpOwotI2VuZGlmCi19Ci0KLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVj
dClmcmFtZQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFtzZWxmIHNldEZvY3Vz
UmluZ1R5cGU6TlNGb2N1c1JpbmdUeXBlTm9uZV07Ci0gICAgCi0gICAgLy8gTWFrZSBhbGwgZHJh
d2luZyBnbyB0aHJvdWdoIHVzIGluc3RlYWQgb2Ygc3Vidmlld3MuCi0gICAgW3NlbGYgX3NldERy
YXdzT3duRGVzY2VuZGFudHM6WUVTXTsKLSAgICAKLSAgICBfcHJpdmF0ZSA9IFtbV2ViSFRNTFZp
ZXdQcml2YXRlIGFsbG9jXSBpbml0XTsKLQotICAgIF9wcml2YXRlLT5wbHVnaW5Db250cm9sbGVy
ID0gW1tXZWJQbHVnaW5Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aERvY3VtZW50VmlldzpzZWxm
XTsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAg
aWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXZWJIVE1MVmll
dyBjbGFzc10sIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBjYW4ndCBhc3Nl
cnQgdGhhdCBjbG9zZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBiZWNhdXNlCi0gICAgLy8gdGhp
cyB2aWV3IGNhbiBiZSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcsIGV2ZW4gdGhvdWdoCi0g
ICAgLy8gaXQgY291bGQgYmUgbmVlZGVkIGxhdGVyLCBzbyBjbG9zZSBpZiBuZWVkZWQuCi0gICAg
W3NlbGYgY2xvc2VdOwotICAgIFtfcHJpdmF0ZSByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZSA9IG5p
bDsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxpemUKLXsKLSAgICBB
U1NFUlRfTUFJTl9USFJFQUQoKTsKLSAgICAvLyBXZSBjYW4ndCBhc3NlcnQgdGhhdCBjbG9zZSBo
YXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBiZWNhdXNlCi0gICAgLy8gdGhpcyB2aWV3IGNhbiBiZSBy
ZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcsIGV2ZW4gdGhvdWdoCi0gICAgLy8gaXQgY291bGQg
YmUgbmVlZGVkIGxhdGVyLCBzbyBjbG9zZSBpZiBuZWVkZWQuCi0gICAgW3NlbGYgY2xvc2VdOwot
ICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS8vIFJldHVybnMgWUVTIGlmIHRoZSBkZWxlZ2F0
ZSByZXR1cm5zIFlFUyAoc28gd2Ugc2hvdWxkIGRvIG5vIG1vcmUgd29yaykuCi0tIChCT09MKWNh
bGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDooU0VMKXNlbGVjdG9yCi17Ci0g
ICAgQk9PTCBjYWxsZXJBbHJlYWR5Q2FsbGVkRGVsZWdhdGUgPSBfcHJpdmF0ZS0+c2VsZWN0b3JG
b3JEb0NvbW1hbmRCeVNlbGVjdG9yID09IHNlbGVjdG9yOwotICAgIF9wcml2YXRlLT5zZWxlY3Rv
ckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSAwOwotICAgIGlmIChjYWxsZXJBbHJlYWR5Q2FsbGVk
RGVsZWdhdGUpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3Nl
bGYgX3dlYlZpZXddOwotICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndh
cmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwotfQot
Ci1zdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQotewot
ICAgIC8vIENoYW5nZSBhIGZldyBjb21tYW5kIG5hbWVzIGludG8gb25lcyBzdXBwb3J0ZWQgYnkg
V2ViQ29yZTo6RWRpdG9yLgotICAgIC8vIElmIHRoaXMgbGlzdCBnZXRzIHRvbyBsb25nIHdlIG1p
Z2h0IGRlY2lkZSB3ZSBuZWVkIHRvIHVzZSBhIGhhc2ggdGFibGUuCi0gICAgaWYgKHNlbGVjdG9y
ID09IEBzZWxlY3RvcihpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6KSB8fCBzZWxlY3RvciA9PSBA
c2VsZWN0b3IoaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6KSkKLSAgICAgICAgcmV0
dXJuICJJbnNlcnROZXdsaW5lIjsKLSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2Vy
dFRhYklnbm9yaW5nRmllbGRFZGl0b3I6KSkKLSAgICAgICAgcmV0dXJuICJJbnNlcnRUYWIiOwot
ICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZURvd246KSkKLSAgICAgICAgcmV0dXJu
ICJNb3ZlUGFnZURvd24iOwotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZURvd25B
bmRNb2RpZnlTZWxlY3Rpb246KSkKLSAgICAgICAgcmV0dXJuICJNb3ZlUGFnZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24iOwotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZVVwOikpCi0g
ICAgICAgIHJldHVybiAiTW92ZVBhZ2VVcCI7Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rv
cihwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246KSkKLSAgICAgICAgcmV0dXJuICJNb3ZlUGFnZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uIjsKLQotICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24u
Ci0gICAgY29uc3QgY2hhciogc2VsZWN0b3JOYW1lID0gc2VsX2dldE5hbWUoc2VsZWN0b3IpOwot
ICAgIHNpemVfdCBzZWxlY3Rvck5hbWVMZW5ndGggPSBzdHJsZW4oc2VsZWN0b3JOYW1lKTsKLSAg
ICBpZiAoc2VsZWN0b3JOYW1lTGVuZ3RoIDwgMiB8fCBzZWxlY3Rvck5hbWVbc2VsZWN0b3JOYW1l
TGVuZ3RoIC0gMV0gIT0gJzonKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IFN0cmluZyhzZWxlY3Rvck5hbWUsIHNlbGVjdG9yTmFtZUxlbmd0aCAtIDEpOwotfQotCi0tIChF
ZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVG
cmFtZSkKLSAgICAgICAgcmV0dXJuIEVkaXRvcjo6Q29tbWFuZCgpOwotICAgIHJldHVybiBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lRm9yU2VsZWN0b3Ioc2VsZWN0b3Ip
KTsKLX0KLQotLSAoRWRpdG9yOjpDb21tYW5kKWNvcmVDb21tYW5kQnlOYW1lOihjb25zdCBjaGFy
KiluYW1lCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0g
ICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBFZGl0b3I6OkNvbW1hbmQoKTsKLSAg
ICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKTsKLX0KLQotLSAodm9p
ZClleGVjdXRlQ29yZUNvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBpZiAo
W3NlbGYgY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOnNlbGVjdG9yXSkK
LSAgICAgICAgcmV0dXJuOwotICAgIFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rv
cl0uZXhlY3V0ZSgpOwotfQotCi0tICh2b2lkKWV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTooY29u
c3QgY2hhciopbmFtZQotewotICAgIFtzZWxmIGNvcmVDb21tYW5kQnlOYW1lOm5hbWVdLmV4ZWN1
dGUoKTsKLX0KLQotLy8gVGhlc2UgY29tbWFuZHMgYXJlIGZvcndhcmRlZCB0byB0aGUgRWRpdG9y
IG9iamVjdCBpbiBXZWJDb3JlLgotLy8gSWRlYWxseSB3ZSdkIGRvIHRoaXMgZm9yIGFsbCBlZGl0
aW5nIGNvbW1hbmRzOyBtb3JlIG9mIHRoZSBjb2RlCi0vLyBzaG91bGQgYmUgbW92ZWQgZnJvbSBo
ZXJlIHRvIHRoZXJlLCBhbmQgbW9yZSBjb21tYW5kcyBzaG91bGQgYmUKLS8vIGFkZGVkIHRvIHRo
aXMgbGlzdC4KLQotLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBzZXQgdGhpbmdzIHVwIHNvIHRo
YXQgYWxsIHRoZXNlIHNoYXJlIGEgc2luZ2xlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlv
bi4KLS8vIFRoZSBmdW5jdGlvbnMgYXJlIGlkZW50aWNhbC4KLQotI2RlZmluZSBXRUJDT1JFX0NP
TU1BTkQoY29tbWFuZCkgLSAodm9pZCljb21tYW5kOihpZClzZW5kZXIgeyBbc2VsZiBleGVjdXRl
Q29yZUNvbW1hbmRCeVNlbGVjdG9yOl9jbWRdOyB9Ci0KLVdFQkNPUkVfQ09NTUFORChhbGlnbkNl
bnRlcikKLVdFQkNPUkVfQ09NTUFORChhbGlnbkp1c3RpZmllZCkKLVdFQkNPUkVfQ09NTUFORChh
bGlnbkxlZnQpCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25SaWdodCkKLVdFQkNPUkVfQ09NTUFORChj
b3B5KQotV0VCQ09SRV9DT01NQU5EKGN1dCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGUpCi1XRUJD
T1JFX0NPTU1BTkQoZGVsZXRlQmFja3dhcmQpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlQmFja3dh
cmRCeURlY29tcG9zaW5nUHJldmlvdXNDaGFyYWN0ZXIpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRl
Rm9yd2FyZCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mTGluZSkKLVdFQkNP
UkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoKQotV0VCQ09SRV9DT01NQU5E
KGRlbGV0ZVRvRW5kT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvRW5kT2ZQYXJhZ3Jh
cGgpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9NYXJrKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0
ZVdvcmRCYWNrd2FyZCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkRm9yd2FyZCkKLVdFQkNP
UkVfQ09NTUFORChpZ25vcmVTcGVsbGluZykKLVdFQkNPUkVfQ09NTUFORChpbmRlbnQpCi1XRUJD
T1JFX0NPTU1BTkQoaW5zZXJ0QmFja3RhYikKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRMaW5lQnJl
YWspCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZSkKLVdFQkNPUkVfQ09NTUFORChpbnNl
cnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcikKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiKQotV0VCQ09SRV9DT01N
QU5EKGluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3IpCi1XRUJDT1JFX0NPTU1BTkQobWFrZVRl
eHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQpCi1XRUJDT1JFX0NPTU1BTkQobWFrZVRleHRX
cml0aW5nRGlyZWN0aW9uTmF0dXJhbCkKLVdFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdE
aXJlY3Rpb25SaWdodFRvTGVmdCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmQpCi1XRUJD
T1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01N
QU5EKG1vdmVEb3duKQotV0VCQ09SRV9DT01NQU5EKG1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9u
KQotV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3YXJkKQotV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3
YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVMZWZ0KQotV0VCQ09S
RV9DT01NQU5EKG1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1v
dmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORCht
b3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORCht
b3ZlUmlnaHQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKQot
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQpCi1XRUJDT1JFX0NPTU1B
TkQobW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVf
Q09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVn
aW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0Jl
Z2lubmluZ09mUGFyYWdyYXBoKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mUGFy
YWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmlu
Z09mU2VudGVuY2UpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZUFu
ZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkRvY3VtZW50KQot
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24pCi1X
RUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0Vu
ZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBh
cmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNl
bGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlNlbnRlbmNlKQotV0VCQ09SRV9D
T01NQU5EKG1vdmVUb0VuZE9mU2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NP
TU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5k
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5k
T2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVVcCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVXBB
bmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRCYWNrd2FyZCkKLVdF
QkNPUkVfQ09NTUFORChtb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09S
RV9DT01NQU5EKG1vdmVXb3JkRm9yd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlV29yZEZvcndh
cmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0KQotV0VC
Q09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09N
TUFORChtb3ZlV29yZFJpZ2h0KQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHRBbmRNb2Rp
ZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQob3V0ZGVudCkKLVdFQkNPUkVfQ09NTUFORChw
YWdlRG93bikKLVdFQkNPUkVfQ09NTUFORChwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKLVdF
QkNPUkVfQ09NTUFORChwYWdlVXApCi1XRUJDT1JFX0NPTU1BTkQocGFnZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdEFsbCkKLVdFQkNPUkVfQ09NTUFORChzZWxl
Y3RMaW5lKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdFBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFO
RChzZWxlY3RTZW50ZW5jZSkKLVdFQkNPUkVfQ09NTUFORChzZWxlY3RUb01hcmspCi1XRUJDT1JF
X0NPTU1BTkQoc2VsZWN0V29yZCkKLVdFQkNPUkVfQ09NTUFORChzZXRNYXJrKQotV0VCQ09SRV9D
T01NQU5EKHN1YnNjcmlwdCkKLVdFQkNPUkVfQ09NTUFORChzdXBlcnNjcmlwdCkKLVdFQkNPUkVf
Q09NTUFORChzd2FwV2l0aE1hcmspCi1XRUJDT1JFX0NPTU1BTkQodHJhbnNwb3NlKQotV0VCQ09S
RV9DT01NQU5EKHVuZGVybGluZSkKLVdFQkNPUkVfQ09NTUFORCh1bnNjcmlwdCkKLVdFQkNPUkVf
Q09NTUFORCh5YW5rKQotV0VCQ09SRV9DT01NQU5EKHlhbmtBbmRTZWxlY3QpCi0KLSN1bmRlZiBX
RUJDT1JFX0NPTU1BTkQKLQotI2RlZmluZSBDT01NQU5EX1BST0xPR1VFIGlmIChbc2VsZiBjYWxs
RGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6X2NtZF0pIHJldHVybjsKLQotLSAo
SUJBY3Rpb24pdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBD
T01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtzZWxmIF9oYXNTZWxlY3Rpb25dKSB7Ci0gICAg
ICAgIE5TQmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW05TUGFzdGVib2Fy
ZCBfd2ViX3NldEZpbmRQYXN0ZWJvYXJkU3RyaW5nOltzZWxmIHNlbGVjdGVkU3RyaW5nXSB3aXRo
T3duZXI6c2VsZl07Ci19Ci0KLS0gKEJPT0wpd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgdHlwZXM6KE5TQXJyYXkgKil0eXBlcwotewotICAgIFtw
YXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsK
LSAgICBbc2VsZiB3cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0
ZWJvYXJkOnBhc3RlYm9hcmRdOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpcmVhZFNl
bGVjdGlvbkZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJh
bWUpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKLSAgICAgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDpZRVNdOwotICAgIGVsc2UKLSAgICAgICAg
W3NlbGYgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLSAgICBy
ZXR1cm4gWUVTOwotfQotCi0tIChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0cmlu
ZyAqKXNlbmRUeXBlIHJldHVyblR5cGU6KE5TU3RyaW5nICopcmV0dXJuVHlwZQotewotICAgIEJP
T0wgaXNTZW5kVHlwZU9LID0gIXNlbmRUeXBlIHx8IChbW3NlbGYgcGFzdGVib2FyZFR5cGVzRm9y
U2VsZWN0aW9uXSBjb250YWluc09iamVjdDpzZW5kVHlwZV0gJiYgW3NlbGYgX2hhc1NlbGVjdGlv
bl0pOwotICAgIEJPT0wgaXNSZXR1cm5UeXBlT0sgPSAhcmV0dXJuVHlwZSB8fCAoW1tbc2VsZiBj
bGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdIGNvbnRhaW5zT2JqZWN0OnJldHVyblR5
cGVdICYmIFtzZWxmIF9pc0VkaXRhYmxlXSk7Ci0gICAgaWYgKGlzU2VuZFR5cGVPSyAmJiBpc1Jl
dHVyblR5cGVPSykKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgcmV0dXJuIFtbc2VsZiBuZXh0
UmVzcG9uZGVyXSB2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOnNlbmRUeXBlIHJldHVyblR5cGU6
cmV0dXJuVHlwZV07Ci19Ci0KLS8vIGp1bXBUb1NlbGVjdGlvbiBpcyB0aGUgb2xkIG5hbWUgZm9y
IHdoYXQgQXBwS2l0IG5vdyBjYWxscyBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBTYWZh
cmkKLS8vIHdhcyB1c2luZyB0aGUgb2xkIGp1bXBUb1NlbGVjdGlvbiBzZWxlY3RvciBpbiBpdHMg
bWVudS4gTmV3ZXIgdmVyc2lvbnMgb2YgU2FmYXJpIHdpbGwgdXNlIHRoZQotLy8gc2VsZWN0b3Ig
Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYS4gV2UnbGwgbGVhdmUgdGhlIG9sZCBzZWxlY3Rv
ciBpbiBwbGFjZSBmb3IgdHdvIHJlYXNvbnM6Ci0vLyAoMSkgQ29tcGF0aWJpbGl0eSBiZXR3ZWVu
IG9sZGVyIFNhZmFyaSBhbmQgbmV3ZXIgV2ViS2l0OyAoMikgb3RoZXIgV2ViS2l0LWJhc2VkIGFw
cGxpY2F0aW9ucwotLy8gbWlnaHQgYmUgdXNpbmcgdGhlIHNlbGVjdG9yLCBhbmQgd2UgZG9uJ3Qg
d2FudCB0byBicmVhayB0aGVtLgotLSAodm9pZClqdW1wVG9TZWxlY3Rpb246KGlkKXNlbmRlcgot
ewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oU2Ny
b2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7Ci19Ci0KLS0gKE5TQ2VsbFN0YXRlVmFs
dWUpc2VsZWN0aW9uSGFzU3R5bGU6KENTU1N0eWxlRGVjbGFyYXRpb24qKXN0eWxlCi17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJh
bWUpCi0gICAgICAgIHJldHVybiBOU09mZlN0YXRlOwotICAgIHJldHVybiBraXQoY29yZUZyYW1l
LT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUpKTsKLX0KLQotLSAoQk9PTCl2YWxp
ZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2Vy
SW50ZXJmYWNlSXRlbT4paXRlbQotewotICAgIFNFTCBhY3Rpb24gPSBbaXRlbSBhY3Rpb25dOwot
ICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotCi0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIGlmIChEb2N1bWVudCogZG9j
ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgaWYgKGRvYy0+aXNQbHVnaW5Eb2N1bWVu
dCgpKQotICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICBpZiAoZG9jLT5pc0ltYWdlRG9j
dW1lbnQoKSkgeyAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IoY29weTopKQotICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmlzQ29t
cGxldGUoKTsKLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZVNwZWxsaW5nOikKLSAgICAgICAgICAgIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IoX2NoYW5nZVNwZWxsaW5nRnJvbU1lbnU6KQotICAgICAgICAg
ICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGVja1NwZWxsaW5nOikKLSAgICAgICAgICAgIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IoY29tcGxldGU6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09
IEBzZWxlY3RvcihwYXN0ZUZvbnQ6KSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsK
LQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNob3dHdWVzc1BhbmVsOikpIHsKLSNpZm5k
ZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICAgICAgLy8gTWF0Y2ggT1MgWCBBcHBLaXQgYmVoYXZp
b3IgZm9yIHBvc3QtVGlnZXIuIERvbid0IGNoYW5nZSBUaWdlciBiZWhhdmlvci4KLSAgICAgICAg
TlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChb
bWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7Ci0gICAgICAgICAg
ICBCT09MIHBhbmVsU2hvd2luZyA9IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl0gc3BlbGxpbmdQYW5lbF0gaXNWaXNpYmxlXTsKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRU
aXRsZTpwYW5lbFNob3dpbmcKLSAgICAgICAgICAgICAgICA/IFVJX1NUUklORygiSGlkZSBTcGVs
bGluZyBhbmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKQotICAgICAgICAgICAgICAgIDog
VUlfU1RSSU5HKCJTaG93IFNwZWxsaW5nIGFuZCBHcmFtbWFyIiwgIm1lbnUgaXRlbSB0aXRsZSIp
XTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0g
ICAgfQotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUJhc2VXcml0aW5n
RGlyZWN0aW9uOikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBz
ZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDopKSB7Ci0gICAgICAg
IE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uOwotCi0gICAgICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKGNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uOikpIHsKLSAgICAgICAg
ICAgIHdyaXRpbmdEaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxOU1dyaXRpbmdEaXJlY3Rpb24+KFtp
dGVtIHRhZ10pOwotICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5n
RGlyZWN0aW9uTmF0dXJhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIH0g
ZWxzZSBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodDopKQotICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB3cml0aW5nRGlyZWN0
aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7Ci0KLSAgICAgICAgTlNNZW51SXRl
bSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0g
aXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICAgICAgc3R5
bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCB3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGlu
Z0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gIkxUUiIgOiAiUlRMIiwgZWMpOwotICAgICAgICAgICAg
W21lbnVJdGVtIHNldFN0YXRlOmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5
bGUuZ2V0KCkpXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwot
ICAgIH0KLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVj
dGlvbk5hdHVyYWw6KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJ
dGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJ
dGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6TlNPZmZTdGF0ZV07
Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0KLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cih0b2dnbGVCYXNlV3JpdGluZ0RpcmVjdGlvbjopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1l
bnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2lu
ZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1N0
eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0
ZSgpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eSgiZGlyZWN0aW9uIiwgIlJUTCIsIGVjKTsKLSAgICAgICAgICAgIC8vIFRha2Ug
Y29udHJvbCBvZiB0aGUgdGl0bGUgb2YgdGhlIG1lbnUgaXRlbSBpbnN0ZWFkIG9mIGp1c3QgY2hl
Y2tpbmcvdW5jaGVja2luZyBpdCBiZWNhdXNlCi0gICAgICAgICAgICAvLyBhIGNoZWNrIHdvdWxk
IGJlIGFtYmlndW91cy4KLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRUaXRsZTpmcmFtZS0+ZWRp
dG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKQotICAgICAgICAgICAgICAgID8g
VUlfU1RSSU5HKCJMZWZ0IHRvIFJpZ2h0IiwgIkxlZnQgdG8gUmlnaHQgY29udGV4dCBtZW51IGl0
ZW0iKQotICAgICAgICAgICAgICAgIDogVUlfU1RSSU5HKCJSaWdodCB0byBMZWZ0IiwgIlJpZ2h0
IHRvIExlZnQgY29udGV4dCBtZW51IGl0ZW0iKV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9IAotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKGNoYW5nZUF0dHJpYnV0ZXM6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rv
cihjaGFuZ2VDb2xvcjopICAgICAgICAKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IoY2hhbmdlRm9udDopKQotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRSaWNobHldOwot
ICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNhcGl0YWxpemVXb3JkOikKLSAgICAg
ICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobG93ZXJjYXNlV29yZDopCi0gICAgICAg
ICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHVwcGVyY2FzZVdvcmQ6KSkKLSAgICAgICAg
cmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25dICYmIFtzZWxmIF9pc0VkaXRhYmxlXTsKLQotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6KQot
ICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihqdW1wVG9TZWxlY3Rpb246KQot
ICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihjb3B5Rm9udDopKQotICAgICAg
ICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl0gfHwgKFtzZWxmIF9pc0VkaXRhYmxlXSAmJiBb
c2VsZiBfaGFzSW5zZXJ0aW9uUG9pbnRdKTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihjaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjopKQotICAgICAgICByZXR1cm4gW1tz
ZWxmIF93ZWJWaWV3XSBpc0VkaXRhYmxlXSAmJiBbc2VsZiBfY2FuRWRpdFJpY2hseV07Ci0gICAg
Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2lnbm9yZVNwZWxsaW5nRnJvbU1lbnU6KQot
ICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfbGVhcm5TcGVsbGluZ0Zyb21NZW51
OikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodGFrZUZpbmRTdHJpbmdGcm9t
U2VsZWN0aW9uOikpCi0gICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXTsKLSAgICAK
LSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZTopIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IocGFzdGVBc1BsYWluVGV4dDopKQotICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5l
ZGl0b3IoKS0+Y2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSk7
Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCi0g
ICAgICAgIHJldHVybiBmcmFtZSAmJiAoZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkK
LSAgICAgICAgICAgIHx8IChmcmFtZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkgJiYgZnJhbWUtPnNl
bGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSk7Ci0gICAgCi0gICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IocGVyZm9ybUZpbmRQYW5lbEFjdGlvbjopKQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2xvb2tVcEluRGljdGlv
bmFyeUZyb21NZW51OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXTsKLSAg
ICAKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cih0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6KSkgewotICAgICAgICAvLyBGSVhNRSA0Nzk5MTM0OiBX
ZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMs
IGJ1dCB3ZSBtdXN0IHZhbGlkYXRlIAotICAgICAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNh
dXNlIHdlIGltcGxlbWVudCBpdCBoZXJlLCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBi
ZWNhdXNlIHRoZSBBcHBLaXQgCi0gICAgICAgIC8vIGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNw
b25kZXIuCi0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVt
OwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3Nd
XSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBZRVM7
Ci0gICAgfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihv
cmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVu
dUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5k
T2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7Ci0gICAgICAgICAgICBCT09MIHBhbmVsU2hv
d2luZyA9IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3Vic3RpdHV0aW9u
c1BhbmVsXSBpc1Zpc2libGVdOwotICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOnBhbmVs
U2hvd2luZwotICAgICAgICAgICAgICAgID8gVUlfU1RSSU5HKCJIaWRlIFN1YnN0aXR1dGlvbnMi
LCAibWVudSBpdGVtIHRpdGxlIikKLSAgICAgICAgICAgICAgICA6IFVJX1NUUklORygiU2hvdyBT
dWJzdGl0dXRpb25zIiwgIm1lbnUgaXRlbSB0aXRsZSIpXTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJW
aWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQgd2UgbXVzdCB2YWxpZGF0
ZSAKLSAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNhdXNlIHdlIGltcGxlbWVudCBpdCBoZXJl
LCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBiZWNhdXNlIHRoZSBBcHBLaXQgCi0gICAg
Ly8gY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3Rvcih0b2dnbGVTbWFydEluc2VydERlbGV0ZTopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0g
Km1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlz
S2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBz
ZXRTdGF0ZTpbc2VsZiBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNP
ZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOikp
IHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0g
ICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQot
ICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljUXVvdGVTdWJz
dGl0dXRpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1
cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0
b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVu
dUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5k
T2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0
YXRlOltzZWxmIGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDog
TlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246
KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsK
LSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0p
Ci0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0
dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAq
bWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNL
aW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFN0YXRlOltzZWxmIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF0gPyBOU09uU3Rh
dGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9
Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uOikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAq
KWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBj
bGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAg
ICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBF
ZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjphY3Rp
b25dOwotICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgTlNNZW51SXRl
bSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0g
aXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVt
IHNldFN0YXRlOmtpdChjb21tYW5kLnN0YXRlKCkpXTsKLSAgICAgICAgcmV0dXJuIGNvbW1hbmQu
aXNFbmFibGVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTCl2YWxp
ZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4p
aXRlbQotewotICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBkdXJpbmcgdGVhcmRvd24gd2hlbiBf
d2ViVmlldyBpcyBuaWwuIFJldHVybiBOTyB3aGVuIHRoaXMgaGFwcGVucywgYmVjYXVzZSBDYWxs
VUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4KLSAgICAvLyBhc3N1bWVzIHRoZSBXZWJWSWV3IGlz
IG5vbi1uaWwuCi0gICAgaWYgKCFbc2VsZiBfd2ViVmlld10pCi0gICAgICAgIHJldHVybiBOTzsK
LSAgICBCT09MIHJlc3VsdCA9IFtzZWxmIHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0
RGVsZWdhdGU6aXRlbV07Ci0gICAgcmV0dXJuIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVh
bihyZXN1bHQsIFtzZWxmIF93ZWJWaWV3XSwgQHNlbGVjdG9yKHdlYlZpZXc6dmFsaWRhdGVVc2Vy
SW50ZXJmYWNlSXRlbTpkZWZhdWx0VmFsaWRhdGlvbjopLCBpdGVtLCByZXN1bHQpOwotfQotCi0t
IChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgotewotICAgIC8vIERvbid0IGFjY2VwdCBmaXJz
dCByZXNwb25kZXIgd2hlbiB3ZSBmaXJzdCBjbGljayBvbiB0aGlzIHZpZXcuCi0gICAgLy8gV2Ug
aGF2ZSB0byBwYXNzIHRoZSBldmVudCBkb3duIHRocm91Z2ggV2ViQ29yZSBmaXJzdCB0byBiZSBz
dXJlIHdlIGRvbid0IGhpdCBhIHN1YnZpZXcuCi0gICAgLy8gRG8gYWNjZXB0IGZpcnN0IHJlc3Bv
bmRlciBhdCBhbnkgb3RoZXIgdGltZSwgZm9yIGV4YW1wbGUgZnJvbSBrZXlib2FyZCBldmVudHMs
Ci0gICAgLy8gb3IgZnJvbSBjYWxscyBiYWNrIGZyb20gV2ViQ29yZSBvbmNlIHdlIGJlZ2luIG1v
dXNlLWRvd24gZXZlbnQgaGFuZGxpbmcuCi0gICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3Vy
cmVudEV2ZW50XTsKLSAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93bgotICAg
ICAgICAgICAgJiYgIV9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50Ci0gICAgICAgICAg
ICAmJiBOU1BvaW50SW5SZWN0KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW3NlbGYgY29udmVy
dFJlY3Q6W3NlbGYgdmlzaWJsZVJlY3RdIHRvVmlldzpuaWxdKSkgewotICAgICAgICByZXR1cm4g
Tk87Ci0gICAgfQotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpbWFpbnRhaW5zSW5hY3Rp
dmVTZWxlY3Rpb24KLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBoZWxwcyB0byBkZXRlcm1pbmUgd2hl
dGhlciB0aGUgV2ViSFRNTFZpZXcgc2hvdWxkIG1haW50YWluCi0gICAgLy8gYW4gaW5hY3RpdmUg
c2VsZWN0aW9uIHdoZW4gaXQncyBub3QgZmlyc3QgcmVzcG9uZGVyLgotICAgIC8vIFRyYWRpdGlv
bmFsbHksIHRoZXNlIHZpZXdzIGhhdmUgbm90IG1haW50YWluZWQgc3VjaCBzZWxlY3Rpb25zLAot
ICAgIC8vIGNsZWFyaW5nIHRoZW0gd2hlbiB0aGUgdmlldyB3YXMgbm90IGZpcnN0IHJlc3BvbmRl
ci4gSG93ZXZlciwKLSAgICAvLyB0byBmaXggYnVncyBsaWtlIHRoaXMgb25lOgotICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS8zNjcyMDg4PjogIkVkaXRhYmxlIFdlYlZpZXdzIHNob3VsZCBtYWludGFp
biBhIHNlbGVjdGlvbiBldmVuIAotICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
ZW4gdGhleSdyZSBub3QgZmlyc3RSZXNwb25kZXIiCi0gICAgLy8gaXQgd2FzIGRlY2lkZWQgdG8g
YWRkIGEgc3dpdGNoIHRvIGFjdCBtb3JlIGxpa2UgYW4gTlNUZXh0Vmlldy4KLQotICAgIGlmIChb
W3NlbGYgX3dlYlZpZXddIG1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0
dXJuIFlFUzsKLQotICAgIC8vIFByZWRpY3QgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGxvc2luZyBm
aXJzdCByZXNwb25kZXIgc3RhdHVzIG9ubHkgdG8KLSAgICAvLyBnYWluIGl0IGJhY2sgYWdhaW4u
IFdhbnQgdG8ga2VlcCB0aGUgc2VsZWN0aW9uIGluIHRoYXQgY2FzZS4KLSAgICBpZCBuZXh0UmVz
cG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmdd
OwotICAgIGlmIChbbmV4dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xh
c3NdXSkgewotICAgICAgICBpZCBjb250ZW50VmlldyA9IFtuZXh0UmVzcG9uZGVyIGNvbnRlbnRW
aWV3XTsKLSAgICAgICAgaWYgKGNvbnRlbnRWaWV3KQotICAgICAgICAgICAgbmV4dFJlc3BvbmRl
ciA9IGNvbnRlbnRWaWV3OwotICAgIH0KLSAgICBpZiAoW25leHRSZXNwb25kZXIgaXNLaW5kT2ZD
bGFzczpbTlNDbGlwVmlldyBjbGFzc11dKSB7Ci0gICAgICAgIGlkIGRvY3VtZW50VmlldyA9IFtu
ZXh0UmVzcG9uZGVyIGRvY3VtZW50Vmlld107Ci0gICAgICAgIGlmIChkb2N1bWVudFZpZXcpCi0g
ICAgICAgICAgICBuZXh0UmVzcG9uZGVyID0gZG9jdW1lbnRWaWV3OwotICAgIH0KLSAgICBpZiAo
bmV4dFJlc3BvbmRlciA9PSBzZWxmKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgYm9vbCBzZWxlY3Rpb25Jc0Vk
aXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVk
aXRhYmxlKCk7Ci0gICAgYm9vbCBuZXh0UmVzcG9uZGVySXNJbldlYlZpZXcgPSBbbmV4dFJlc3Bv
bmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXQotICAgICAgICAmJiBbbmV4dFJlc3Bv
bmRlciBpc0Rlc2NlbmRhbnRPZjpbW1tzZWxmIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmll
d11dOwotCi0gICAgcmV0dXJuIHNlbGVjdGlvbklzRWRpdGFibGUgJiYgbmV4dFJlc3BvbmRlcklz
SW5XZWJWaWV3OwotfQotCi0tICh2b2lkKWFkZE1vdXNlTW92ZWRPYnNlcnZlcgotewotICAgIGlm
ICghX3ByaXZhdGUtPmRhdGFTb3VyY2UgfHwgIVtzZWxmIF9pc1RvcEhUTUxWaWV3XSB8fCBfcHJp
dmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFVubGVzcyB0aGUgRGFzaGJvYXJkIGFza3MgdXMgdG8gZG8gdGhpcyBmb3IgYWxs
IHdpbmRvd3MsIGtlZXAgYW4gb2JzZXJ2ZXIgZ29pbmcgb25seSBmb3IgdGhlIGtleSB3aW5kb3cu
Ci0gICAgaWYgKCEoW1tzZWxmIHdpbmRvd10gaXNLZXlXaW5kb3ddIAotI2lmIEVOQUJMRShEQVNI
Qk9BUkRfU1VQUE9SVCkKLSAgICAgICAgICAgIHx8IFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2Fy
ZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRzVG9BbGxX
aW5kb3dzXQotI2VuZGlmCi0gICAgICAgICkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IobW91c2VNb3ZlZE5vdGlmaWNhdGlvbjopCi0gICAgICAgIG5hbWU6V0tNb3Vz
ZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om5pbF07Ci0gICAgW3NlbGYgX2ZyYW1lT3JCb3Vu
ZHNDaGFuZ2VkXTsKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlv
bnMgPSB0cnVlOwotfQotCi0tICh2b2lkKXJlbW92ZU1vdXNlTW92ZWRPYnNlcnZlcgotewotI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICAvLyBEb24ndCByZW1vdmUgdGhlIG9ic2Vy
dmVyIGlmIHdlJ3JlIHJ1bm5pbmcgdGhlIERhc2hib2FyZC4KLSAgICBpZiAoW1tzZWxmIF93ZWJW
aWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNTZW5kTW91
c2VFdmVudHNUb0FsbFdpbmRvd3NdKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIFtb
c2VsZiBfd2ViVmlld10gX21vdXNlRGlkTW92ZU92ZXJFbGVtZW50Om5pbCBtb2RpZmllckZsYWdz
OjBdOwotICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHld
OwotfQotCi0tICh2b2lkKWFkZFN1cGVydmlld09ic2VydmVycwotewotICAgIGlmIChfcHJpdmF0
ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBlcnZpZXddOwotICAgIGlmICghc3VwZXJ2
aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNOb3Rp
ZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9mcmFtZU9yQm91bmRzQ2hhbmdlZCkgbmFtZTpOU1ZpZXdG
cmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICBbbm90aWZp
Y2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9mcmFtZU9y
Qm91bmRzQ2hhbmdlZCkgbmFtZTpOU1ZpZXdCb3VuZHNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2Jq
ZWN0OnN1cGVydmlld107Ci0gICAgCi0gICAgLy8gSW4gYWRkaXRpb24gdG8gcmVnaXN0ZXJpbmcg
Zm9yIGZyYW1lL2JvdW5kcyBjaGFuZ2Ugbm90aWZpY2F0aW9ucywgY2FsbCAtX2ZyYW1lT3JCb3Vu
ZHNDaGFuZ2VkLgotICAgIC8vIEl0IHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgc2Nyb2xsIGFnYWlu
c3QgdGhlIHByZXZpb3VzIGxheW91dCdzIHNjcm9sbC4gIFdlIG5lZWQgdG8KLSAgICAvLyBkbyB0
aGlzIGhlcmUgdG8gY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgdGhlIFdlYlZpZXcgaXMgbGFpZCBvdXQg
YXQgb25lIHNpemUsIHJlbW92ZWQgZnJvbSBpdHMKLSAgICAvLyB3aW5kb3csIHJlc2l6ZWQsIGFu
ZCBpbnNlcnRlZCBpbnRvIGFub3RoZXIgd2luZG93LiAgT3VyIGZyYW1lL2JvdW5kcyBjaGFuZ2Vk
IG5vdGlmaWNhdGlvbnMKLSAgICAvLyB3aWxsIG5vdCBiZSBzZW50IGluIHRoYXQgc2l0dWF0aW9u
LCBzaW5jZSB3ZSBvbmx5IHdhdGNoIGZvciBjaGFuZ2VzIHdoaWxlIGluIHRoZSB2aWV3IGhpZXJh
cmNoeS4KLSAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwotICAgIAotICAgIF9wcml2
YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0gdHJ1ZTsKLX0KLQotLSAodm9p
ZClhZGRXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBpZiAoX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRv
d05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRl
ciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWRCZWNvbWVLZXk6
KSBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAg
IFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
d2luZG93RGlkUmVzaWduS2V5OikgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlv
biBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd1dpbGxDbG9zZTopIG5hbWU6TlNXaW5kb3dXaWxsQ2xv
c2VOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dXaWxsT3JkZXJPblNjcmVl
bjopIG5hbWU6V0tXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlvbigpIG9iamVjdDp3
aW5kb3ddOwotICAgIAotICAgIF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25z
ID0gdHJ1ZTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1N1cGVydmlldzooTlNWaWV3ICop
bmV3U3VwZXJ2aWV3Ci17Ci0gICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVyc107Ci19
Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldwotewotICAgIGlmIChbc2VsZiBzdXBl
cnZpZXddICE9IG5pbCkKLSAgICAgICAgW3NlbGYgYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKLX0K
LQotc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyQ2FsbGJhY2so
Q0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQgKmluZm8pCi17Ci0gICAgV2ViSFRNTFZpZXcg
KnZpZXcgPSAoV2ViSFRNTFZpZXcgKilpbmZvOwotICAgIFt2aWV3IF91cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGVdOwotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRv
dyAqKXdpbmRvdwotewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGFyZW4ndCBpbml0
aWFsaXplZC4gIFRoaXMgaGFwcGVucwotICAgIC8vIHdoZW4gZGVjb2RpbmcgYSBXZWJWaWV3LiAg
V2hlbiBXZWJWaWV3cyBhcmUgZGVjb2RlZCB0aGVpciBzdWJ2aWV3cwotICAgIC8vIGFyZSBjcmVh
dGVkIGJ5IGluaXRXaXRoQ29kZXI6IGFuZCBzbyB3b24ndCBiZSBub3JtYWxseQotICAgIC8vIGlu
aXRpYWxpemVkLiAgVGhlIHN0dWIgdmlld3MgYXJlIGRpc2NhcmRlZCBieSBXZWJWaWV3LgotICAg
IGlmICghX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTb21lIG9m
IHRoZXNlIGNhbGxzIG1heSBub3Qgd29yayBiZWNhdXNlIHRoaXMgdmlldyBtYXkgYmUgYWxyZWFk
eSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcuCi0gICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92
ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07Ci0gICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2Vy
dmVyc107Ci0gICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVyc107Ci0gICAgW3NlbGYg
X2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9j
dXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOwotICAgIAotICAgIFtbc2VsZiBfcGx1Z2luQ29udHJv
bGxlcl0gc3RvcEFsbFBsdWdpbnNdOwotfQotCi0tICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cK
LXsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBhcmVuJ3QgaW5pdGlhbGl6ZWQuICBU
aGlzIGhhcHBlbnMKLSAgICAvLyB3aGVuIGRlY29kaW5nIGEgV2ViVmlldy4gIFdoZW4gV2ViVmll
d3MgYXJlIGRlY29kZWQgdGhlaXIgc3Vidmlld3MKLSAgICAvLyBhcmUgY3JlYXRlZCBieSBpbml0
V2l0aENvZGVyOiBhbmQgc28gd29uJ3QgYmUgbm9ybWFsbHkKLSAgICAvLyBpbml0aWFsaXplZC4g
IFRoZSBzdHViIHZpZXdzIGFyZSBkaXNjYXJkZWQgYnkgV2ViVmlldy4KLSAgICBpZiAoIV9wcml2
YXRlIHx8IF9wcml2YXRlLT5jbG9zZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
W3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwotICAgIGlmIChbc2VsZiB3aW5kb3ddKSB7Ci0g
ICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBbW3NlbGYgc3VwZXJ2aWV3XSBi
b3VuZHNdLm9yaWdpbjsKLSAgICAgICAgW3NlbGYgYWRkV2luZG93T2JzZXJ2ZXJzXTsKLSAgICAg
ICAgW3NlbGYgYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKLSAgICAgICAgW3NlbGYgYWRkTW91c2VN
b3ZlZE9ic2VydmVyXTsKLQotICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHVwZGF0ZSwgcmF0aGVy
IHRoYW4gbWFraW5nIHRoZSBjYWxsIHJpZ2h0IG5vdy4KLSAgICAgICAgLy8gVGhlIHJlYXNvbiBp
cyB0aGF0IHBsYWNpbmcgdGhlIGNhcmV0IGluIHRoZSBqdXN0LWluc3RhbGxlZCB2aWV3IHJlcXVp
cmVzCi0gICAgICAgIC8vIHRoZSBIVE1ML1hNTCBkb2N1bWVudCB0byBiZSBhdmFpbGFibGUgb24g
dGhlIFdlYkNvcmUgc2lkZSwgYnV0IGl0IGlzIG5vdAotICAgICAgICAvLyBhdCB0aGUgdGltZSB0
aGlzIGNvZGUgaXMgcnVubmluZy4gSG93ZXZlciwgaXQgd2lsbCBiZSB0aGVyZSBvbiB0aGUgbmV4
dAotICAgICAgICAvLyBjcmFuayBvZiB0aGUgcnVuIGxvb3AuIERvaW5nIHRoaXMgaGVscHMgdG8g
bWFrZSBhIGJsaW5raW5nIGNhcmV0IGFwcGVhciAKLSAgICAgICAgLy8gaW4gYSBuZXcsIGVtcHR5
IHdpbmRvdyAiYXV0b21hdGljIi4KLSAgICAgICAgaWYgKCFfcHJpdmF0ZS0+dXBkYXRlRm9jdXNl
ZEFuZEFjdGl2ZVN0YXRlVGltZXIpIHsKLSAgICAgICAgICAgIENGUnVuTG9vcFRpbWVyQ29udGV4
dCBjb250ZXh0ID0geyAwLCBzZWxmLCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0gICAgICAgICAgICBf
cHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIgPSBDRlJ1bkxvb3BUaW1l
ckNyZWF0ZShOVUxMLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSwgMCwgMCwgMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyQ2FsbGJhY2ssICZjb250ZXh0
KTsKLSAgICAgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
X3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyLCBrQ0ZSdW5Mb29wRGVm
YXVsdE1vZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbW3NlbGYgX3BsdWdpbkNv
bnRyb2xsZXJdIHN0YXJ0QWxsUGx1Z2luc107Ci0KLSAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3Jv
bGxQb3NpdGlvbiA9IE5TWmVyb1BvaW50OwotICAgIH0KLX0KLQotLSAodm9pZCl2aWV3V2lsbE1v
dmVUb0hvc3RXaW5kb3c6KE5TV2luZG93ICopaG9zdFdpbmRvdwotewotICAgIFtbc2VsZiBzdWJ2
aWV3c10gX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdX
aWxsTW92ZVRvSG9zdFdpbmRvdzopIHdpdGhPYmplY3Q6aG9zdFdpbmRvd107Ci19Ci0KLS0gKHZv
aWQpdmlld0RpZE1vdmVUb0hvc3RXaW5kb3cKLXsKLSAgICBbW3NlbGYgc3Vidmlld3NdIF93ZWJf
bWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3RGlkTW92ZVRvSG9z
dFdpbmRvdykgd2l0aE9iamVjdDpuaWxdOwotfQotCi0KLS0gKHZvaWQpYWRkU3VidmlldzooTlNW
aWV3ICopdmlldwotewotICAgIFtzdXBlciBhZGRTdWJ2aWV3OnZpZXddOwotCi0gICAgaWYgKFtX
ZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzp2aWV3XSkKLSAgICAgICAgW1tzZWxmIF9w
bHVnaW5Db250cm9sbGVyXSBhZGRQbHVnaW46dmlld107Ci19Ci0KLS0gKHZvaWQpd2lsbFJlbW92
ZVN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xs
ZXIgaXNQbHVnSW5WaWV3OnN1YnZpZXddKQotICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xs
ZXJdIGRlc3Ryb3lQbHVnaW46c3Vidmlld107Ci0KLSAgICBbc3VwZXIgd2lsbFJlbW92ZVN1YnZp
ZXc6c3Vidmlld107Ci19Ci0KLS0gKHZvaWQpcmVhcHBseVN0eWxlcwotewotICAgIGlmICghX3By
aXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotI2lmZGVm
IExPR19USU1FUwotICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgp
OwotI2VuZGlmCi0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXco
KSkKLSAgICAgICAgICAgIGNvcmVWaWV3LT5zZXRNZWRpYVR5cGUoX3ByaXZhdGUtPnByaW50aW5n
ID8gInByaW50IiA6ICJzY3JlZW4iKTsKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9
IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zZXRQcmludGlu
ZyhfcHJpdmF0ZS0+cHJpbnRpbmcpOwotICAgICAgICBjb3JlRnJhbWUtPnJlYXBwbHlTdHlsZXMo
KTsKLSAgICB9Ci0gICAgCi0jaWZkZWYgTE9HX1RJTUVTICAgICAgICAKLSAgICBkb3VibGUgdGhp
c1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OwotICAgIExPRyhUaW1p
bmcsICIlcyBhcHBseSBzdHlsZSBzZWNvbmRzID0gJWYiLCBbc2VsZiBVUkxdLCB0aGlzVGltZSk7
Ci0jZW5kaWYKLQotICAgIF9wcml2YXRlLT5uZWVkc1RvQXBwbHlTdHlsZXMgPSBOTzsKLX0KLQot
Ly8gRG8gYSBsYXlvdXQsIGJ1dCBzZXQgdXAgYSBuZXcgZml4ZWQgd2lkdGggZm9yIHRoZSBwdXJw
b3NlcyBvZiBkb2luZyBwcmludGluZyBsYXlvdXQuCi0vLyBtaW5QYWdlV2lkdGg9PTAgaW1wbGll
cyBhIG5vbi1wcmludGluZyBsYXlvdXQKLS0gKHZvaWQpbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRo
OihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRo
IGFkanVzdGluZ1ZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCi17Ci0gICAgW3NlbGYgcmVh
cHBseVN0eWxlc107Ci0gICAgCi0gICAgaWYgKCFbc2VsZiBfbmVlZHNMYXlvdXRdKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZmRlZiBMT0dfVElNRVMgICAgICAgIAotICAgIGRvdWJsZSBzdGFydCA9
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlmCi0KLSAgICBMT0coVmlldywgIiVA
IGRvaW5nIGxheW91dCIsIHNlbGYpOwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKLSAgICAgICAg
aWYgKG1pblBhZ2VXaWR0aCA+IDAuMCkKLSAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91
dFdpdGhQYWdlV2lkdGhSYW5nZShtaW5QYWdlV2lkdGgsIG1heFBhZ2VXaWR0aCwgYWRqdXN0Vmll
d1NpemUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91
dCghYWRqdXN0Vmlld1NpemUpOwotICAgICAgICAgICAgaWYgKGFkanVzdFZpZXdTaXplKQotICAg
ICAgICAgICAgICAgIGNvcmVWaWV3LT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotI2lmZGVmIExPR19USU1FUyAgICAgICAgCi0gICAgZG91YmxlIHRoaXNUaW1lID0g
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICBMT0coVGltaW5nLCAiJXMg
bGF5b3V0IHNlY29uZHMgPSAlZiIsIFtzZWxmIFVSTF0sIHRoaXNUaW1lKTsKLSNlbmRpZgotfQot
Ci0tICh2b2lkKWxheW91dAotewotICAgIFtzZWxmIGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDow
LjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RpbmdWaWV3U2l6ZTpOT107Ci19Ci0KLS8v
IERlbGl2ZXIgbW91c2V1cCBldmVudHMgdG8gdGhlIERPTSBmb3IgYnV0dG9uIDIuCi0tICh2b2lk
KXJpZ2h0TW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5j
ZSB0aGF0IGlmIHdlIHJ1biBhIG5lc3RlZCBldmVudCBsb29wIHRoZSBldmVudCB3aWxsIGJlIHJl
bGVhc2VkLgotICAgIC8vIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nIHByZXZlbnRz
IHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBsYXRlciBoZXJlIG9yCi0gICAgLy8gaW5zaWRl
IEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBb
c3VwZXIgcmlnaHRNb3VzZVVwOmV2ZW50XTsKLQotICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
bW91c2VVcChldmVudCk7Ci19Ci0KLS0gKE5TTWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAq
KWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHdlIHJ1biBhIG5lc3Rl
ZCBldmVudCBsb29wIHRoZSBldmVudCB3aWxsIGJlIHJlbGVhc2VkLgotICAgIC8vIFJldGFpbmlu
ZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nIHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBsYXRlciBoZXJlIG9yCi0gICAgLy8gaW5zaWRlIEFwcEtpdCBjb2RlLgotICAgIFtbZXZl
bnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVy
IGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0KLSAgICBSZWZQdHI8RnJhbWU+
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gTWF0Y2ggYmVo
YXZpb3Igb2Ygb3RoZXIgYnJvd3NlcnMgYnkgc2VuZGluZyBhIG1vdXNlZG93biBldmVudCBmb3Ig
cmlnaHQgY2xpY2tzLgotICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gWUVT
OwotICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jbGVhckNvbnRleHRNZW51KCk7
Ci0gICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VEb3duKGV2ZW50KTsKLSAgICBC
T09MIGhhbmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0
TWVudUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwotICAgIF9wcml2YXRlLT5oYW5k
bGluZ01vdXNlRG93bkV2ZW50ID0gTk87Ci0KLSAgICBpZiAoIWhhbmRsZWRFdmVudCkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIFJlLWdldCBwYWdlLCBzaW5jZSBpdCBtaWdodCBoYXZl
IGdvbmUgYXdheSBkdXJpbmcgZXZlbnQgaGFuZGxpbmcuCi0gICAgcGFnZSA9IGNvcmVGcmFtZS0+
cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIENvbnRl
eHRNZW51KiBjb3JlTWVudSA9IHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0
TWVudSgpOwotICAgIGlmICghY29yZU1lbnUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBO
U0FycmF5KiBtZW51SXRlbXMgPSBjb3JlTWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOwotICAg
IGlmICghbWVudUl0ZW1zKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNVSW50ZWdlciBj
b3VudCA9IFttZW51SXRlbXMgY291bnRdOwotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBOU01lbnUqIG1lbnUgPSBbW1tOU01lbnUgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICBbbWVudSBhZGRJdGVtOlttZW51SXRlbXMgb2JqZWN0QXRJbmRleDppXV07Ci0gICAgcmV0
dXJuIG1lbnU7Ci19Ci0KLS0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJl
Y3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJP
T0wpd3JhcEZsYWcKLXsKLSAgICByZXR1cm4gW3NlbGYgc2VhcmNoRm9yOnN0cmluZyBkaXJlY3Rp
b246Zm9yd2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6d3JhcEZsYWcgc3RhcnRJblNl
bGVjdGlvbjpOT107Ci19Ci0KLS0gKHZvaWQpY2xlYXJGb2N1cwotewotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgp
OwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBkb2N1bWVu
dC0+c2V0Rm9jdXNlZE5vZGUoMCk7Ci19Ci0KLS0gKEJPT0wpaXNPcGFxdWUKLXsKLSAgICByZXR1
cm4gW1tzZWxmIF93ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdOwotfQotCi0tICh2b2lkKXNldE5l
ZWRzRGlzcGxheTooQk9PTClmbGFnCi17Ci0gICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc0Rpc3Bs
YXk6JUAiLCBzZWxmLCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOwotICAgIFtzdXBlciBzZXROZWVk
c0Rpc3BsYXk6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpc2V0TmVlZHNMYXlvdXQ6IChCT09MKWZsYWcK
LXsKLSAgICBMT0coVmlldywgIiVAIHNldE5lZWRzTGF5b3V0OiVAIiwgc2VsZiwgZmxhZyA/IEAi
WUVTIiA6IEAiTk8iKTsKLSAgICBpZiAoIWZsYWcpCi0gICAgICAgIHJldHVybjsgLy8gVGhlcmUn
cyBubyB3YXkgdG8gc2F5IHlvdSBkb24ndCBuZWVkIGEgbGF5b3V0LgotICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1l
bnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCkpCi0gICAg
ICAgICAgICB2aWV3LT5zZXROZWVkc0xheW91dCgpOwotICAgIH0KLX0KLQotLSAodm9pZClzZXRO
ZWVkc1RvQXBwbHlTdHlsZXM6IChCT09MKWZsYWcKLXsKLSAgICBMT0coVmlldywgIiVAIHNldE5l
ZWRzVG9BcHBseVN0eWxlczolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7Ci0gICAg
X3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyA9IGZsYWc7Ci19Ci0KLS0gKHZvaWQpZHJhd1Np
bmdsZVJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFw
aGljc1N0YXRlXTsKLSAgICBOU1JlY3RDbGlwKHJlY3QpOwotICAgICAgICAKLSAgICBBU1NFUlQo
W1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViQ2xpcFZpZXcgY2xhc3NdXSk7Ci0K
LSAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBzZXRBZGRpdGlvbmFsQ2xpcDpy
ZWN0XTsKLQotICAgIEB0cnkgewotICAgICAgICBpZiAoW3NlbGYgX3RyYW5zcGFyZW50QmFja2dy
b3VuZF0pIHsKLSAgICAgICAgICAgIFtbTlNDb2xvciBjbGVhckNvbG9yXSBzZXRdOwotICAgICAg
ICAgICAgTlNSZWN0RmlsbCAocmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbW3NlbGYgX2Zy
YW1lXSBfZHJhd1JlY3Q6cmVjdCBjb250ZW50c09ubHk6WUVTXTsKLQotICAgICAgICBXZWJWaWV3
ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotCi0gICAgICAgIC8vIFRoaXMgaGFjayBpcyBu
ZWVkZWQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MDIzNTQ1Pi4gV2UgY2FuIGhpdCBhIHJhY2UgY29u
ZGl0aW9uIHdoZXJlIGRyYXdSZWN0IHdpbGwgYmUKLSAgICAgICAgLy8gY2FsbGVkIGFmdGVyIHRo
ZSBXZWJWaWV3IGhhcyBjbG9zZWQuIElmIHRoZSBjbGllbnQgZGlkIG5vdCBwcm9wZXJseSBjbG9z
ZSB0aGUgV2ViVmlldyBhbmQgc2V0IHRoZSAKLSAgICAgICAgLy8gVUlEZWxlZ2F0ZSB0byBuaWws
IHRoZW4gdGhlIFVJRGVsZWdhdGUgd2lsbCBiZSBzdGFsZSBhbmQgdGhpcyBjb2RlIHdpbGwgY3Jh
c2guIAotICAgICAgICBzdGF0aWMgQk9PTCB2ZXJzaW9uM09yTGF0ZXJDbGllbnQgPSBXZWJLaXRM
aW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9RVUlDS0JPT0tTX1FV
SVJLKTsKLSAgICAgICAgaWYgKHZlcnNpb24zT3JMYXRlckNsaWVudCkKLSAgICAgICAgICAgIFtb
d2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRpZERyYXdSZWN0
Olt3ZWJWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6c2VsZl1dOwotCi0gICAgICAgIGlm
IChXZWJOb2RlSGlnaGxpZ2h0ICpjdXJyZW50SGlnaGxpZ2h0ID0gW3dlYlZpZXcgY3VycmVudE5v
ZGVIaWdobGlnaHRdKQotICAgICAgICAgICAgW2N1cnJlbnRIaWdobGlnaHQgc2V0TmVlZHNVcGRh
dGVJblRhcmdldFZpZXdSZWN0OltzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3OltjdXJyZW50
SGlnaGxpZ2h0IHRhcmdldFZpZXddXV07Ci0KLSAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxm
IHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07Ci0KLSAgICAgICAgW05TR3JhcGhpY3ND
b250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmxvY2FsRXhjZXB0aW9uKSB7Ci0gICAgICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZp
ZXddIHJlc2V0QWRkaXRpb25hbENsaXBdOwotICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVz
dG9yZUdyYXBoaWNzU3RhdGVdOwotICAgICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBjYXVnaHQg
d2hpbGUgZHJhd2luZzogJUAiLCBsb2NhbEV4Y2VwdGlvbik7Ci0gICAgICAgIFtsb2NhbEV4Y2Vw
dGlvbiByYWlzZV07Ci0gICAgfQotfQotCi0tICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAot
ewotICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwotICAgIExPRyhWaWV3LCAiJUAgZHJhd2luZyIs
IHNlbGYpOwotCi0gICAgY29uc3QgTlNSZWN0ICpyZWN0czsKLSAgICBOU0ludGVnZXIgY291bnQ7
Ci0gICAgW3NlbGYgZ2V0UmVjdHNCZWluZ0RyYXduOiZyZWN0cyBjb3VudDomY291bnRdOwotCi0g
ICAgQk9PTCBzdWJ2aWV3c1dlcmVTZXRBc2lkZSA9IF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRl
OwotICAgIGlmIChzdWJ2aWV3c1dlcmVTZXRBc2lkZSkKLSAgICAgICAgW3NlbGYgX3Jlc3RvcmVT
dWJ2aWV3c107Ci0KLSNpZmRlZiBMT0dfVElNRVMKLSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29s
dXRlVGltZUdldEN1cnJlbnQoKTsKLSNlbmRpZgotCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10g
X211c3REcmF3VW5pb25lZFJlY3Q6cmVjdCBzaW5nbGVSZWN0czpyZWN0cyBjb3VudDpjb3VudF0p
Ci0gICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJlY3RdOwotICAgIGVsc2UKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgW3NlbGYgZHJhd1Np
bmdsZVJlY3Q6cmVjdHNbaV1dOwotCi0jaWZkZWYgTE9HX1RJTUVTCi0gICAgZG91YmxlIHRoaXNU
aW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICBMT0coVGltaW5n
LCAiJXMgZHJhdyBzZWNvbmRzID0gJWYiLCB3aWRnZXQtPnBhcnQoKS0+YmFzZVVSTCgpLlVSTCgp
LmxhdGluMSgpLCB0aGlzVGltZSk7Ci0jZW5kaWYKLQotICAgIGlmIChzdWJ2aWV3c1dlcmVTZXRB
c2lkZSkKLSAgICAgICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3NdOwotICAgICAgICAKLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX25l
ZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb25dKSB7Ci0gICAgICAgIC8vIERpc2FibGUg
c2NyZWVuIHVwZGF0ZXMgc28gdGhhdCBkcmF3aW5nIGludG8gdGhlIE5TVmlldyBhbmQKLSAgICAg
ICAgLy8gQ0FMYXllciB1cGRhdGVzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGF0IHRoZSBzYW1lIHRp
bWUuCi0gICAgICAgIFtbc2VsZiB3aW5kb3ddIGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVz
aF07Ci0gICAgICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKLSAgICAgICAgW1tzZWxmIF93ZWJW
aWV3XSBfc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjpOT107Ci0gICAgfQot
I2VuZGlmCi19Ci0KLS8vIFR1cm4gb2ZmIHRoZSBhZGRpdGlvbmFsIGNsaXAgd2hpbGUgY29tcHV0
aW5nIG91ciB2aXNpYmxlUmVjdC4KLS0gKE5TUmVjdCl2aXNpYmxlUmVjdAotewotICAgIGlmICgh
KFtbc2VsZiBzdXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNsaXBWaWV3IGNsYXNzXV0pKQot
ICAgICAgICByZXR1cm4gW3N1cGVyIHZpc2libGVSZWN0XTsKLSAgICAgICAgCi0gICAgV2ViQ2xp
cFZpZXcgKmNsaXBWaWV3ID0gKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XTsKLQotICAg
IEJPT0wgaGFzQWRkaXRpb25hbENsaXAgPSBbY2xpcFZpZXcgaGFzQWRkaXRpb25hbENsaXBdOwot
ICAgIGlmICghaGFzQWRkaXRpb25hbENsaXApIHsKLSAgICAgICAgcmV0dXJuIFtzdXBlciB2aXNp
YmxlUmVjdF07Ci0gICAgfQotICAgIAotICAgIE5TUmVjdCBhZGRpdGlvbmFsQ2xpcCA9IFtjbGlw
VmlldyBhZGRpdGlvbmFsQ2xpcF07Ci0gICAgW2NsaXBWaWV3IHJlc2V0QWRkaXRpb25hbENsaXBd
OwotICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtzdXBlciB2aXNpYmxlUmVjdF07Ci0gICAgW2Ns
aXBWaWV3IHNldEFkZGl0aW9uYWxDbGlwOmFkZGl0aW9uYWxDbGlwXTsKLSAgICByZXR1cm4gdmlz
aWJsZVJlY3Q7Ci19Ci0KLS0gKEJPT0wpaXNGbGlwcGVkIAotewotICAgIHJldHVybiBZRVM7Ci19
Ci0KLS0gKHZvaWQpd2luZG93RGlkQmVjb21lS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgotewotICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKLSAgICAgICAgW3NlbGYgcGVy
Zm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVjdDpub3RpZmljYXRpb24gd2Fp
dFVudGlsRG9uZTpOT107Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1dpbmRvdyAq
a2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOwotCi0gICAgaWYgKGtleVdpbmRvdyA9
PSBbc2VsZiB3aW5kb3ddKQotICAgICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOwot
Ci0gICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGtleVdpbmRvdyA9PSBbW3Nl
bGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkKLSAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRB
bmRBY3RpdmVTdGF0ZV07Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkUmVzaWduS2V5OihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsK
LSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVj
dDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBOU1dpbmRvdyAqZm9ybWVyS2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3Rd
OwotCi0gICAgaWYgKGZvcm1lcktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddKQotICAgICAgICBb
c2VsZiByZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJdOwotCi0gICAgaWYgKGZvcm1lcktleVdpbmRv
dyA9PSBbc2VsZiB3aW5kb3ddIHx8IGZvcm1lcktleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBh
dHRhY2hlZFNoZWV0XSkgewotICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0
YXRlXTsKLSAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFu
Z2U6Tk8gbW92ZUxlZnQ6Tk9dOwotICAgIH0KLX0KLQotLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFwdGhyZWFkX21haW5f
bnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3
aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hh
bmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLSAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ry
b3lBbGxQbHVnaW5zXTsKLX0KLQotLSAodm9pZCl3aW5kb3dXaWxsT3JkZXJPblNjcmVlbjooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10g
c2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW5dKQotICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3Bs
YXk6WUVTXTsKLX0KLQotLSAodm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50Ci17Ci0g
ICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxs
IHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVu
dCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVh
c2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5n
IGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0
YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+d2hlZWxFdmVu
dChldmVudCkpCi0gICAgICAgIFtzdXBlciBzY3JvbGxXaGVlbDpldmVudF07Ci19Ci0KLS0gKEJP
T0wpX2lzU2VsZWN0aW9uRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIE5TUG9pbnQgcG9p
bnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3
Om5pbF07Ci0gICAgcmV0dXJuIFtbW3NlbGYgZWxlbWVudEF0UG9pbnQ6cG9pbnQgYWxsb3dTaGFk
b3dDb250ZW50OllFU10gb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRJc1NlbGVjdGVkS2V5XSBib29s
VmFsdWVdOwotfQotCi0tIChCT09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2ZW50ICopZXZlbnQK
LXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIE5TVmlldyAqaGl0VmlldyA9IFtzZWxmIF9o
aXRWaWV3Rm9yRXZlbnQ6ZXZlbnRdOwotICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFto
aXRWaWV3IGlzS2luZE9mQ2xhc3M6W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZp
ZXcgOiBuaWw7Ci0gICAgCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIGlmIChb
W3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvckFs
d2F5c0FjY2VwdHNGaXJzdE1vdXNlXSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSNlbmRpZgotICAg
IAotICAgIGlmIChoaXRIVE1MVmlldykgewotICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwot
ICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2hpdEhUTUxWaWV3IF9mcmFtZV0p
KSB7Ci0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRBY3RpdmF0aW9u
RXZlbnROdW1iZXIoW2V2ZW50IGV2ZW50TnVtYmVyXSk7Ci0gICAgICAgICAgICBbaGl0SFRNTFZp
ZXcgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKLSAgICAgICAgICAgIGlmIChbaGl0SFRNTFZp
ZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRdKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
cmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmV2ZW50TWF5U3RhcnREcmFnKGV2ZW50KTsKLSAgICAg
ICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gW2hpdFZpZXcgYWNjZXB0
c0ZpcnN0TW91c2U6ZXZlbnRdOwotfQotCi0tIChCT09MKXNob3VsZERlbGF5V2luZG93T3JkZXJp
bmdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0
aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29w
LCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQg
b25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50
IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0
IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAg
ICBOU1ZpZXcgKmhpdFZpZXcgPSBbc2VsZiBfaGl0Vmlld0ZvckV2ZW50OmV2ZW50XTsKLSAgICBX
ZWJIVE1MVmlldyAqaGl0SFRNTFZpZXcgPSBbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltzZWxmIGNs
YXNzXV0gPyAoV2ViSFRNTFZpZXcgKiloaXRWaWV3IDogbmlsOwotICAgIGlmIChoaXRIVE1MVmll
dykgewotICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAoW2hpdEhUTUxW
aWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50XSkKLSAgICAgICAgICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbaGl0SFRNTFZpZXcgX2ZyYW1lXSkpIHsKLSAgICAgICAgICAgICAgICBb
aGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5ldmVudE1heVN0YXJ0RHJhZyhldmVu
dCk7Ci0gICAgICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpuaWxd
OwotICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1
cm4gW2hpdFZpZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OmV2ZW50XTsKLX0K
LQotLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3Mg
YSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQg
ZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFz
ZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0
aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5z
aWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVh
c2VdOwotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBwcm90ZWN0b3IgPSBzZWxmOwotICAg
IGlmIChbW3NlbGYgaW5wdXRDb250ZXh0XSB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtb
c2VsZiBpbnB1dENvbnRleHRdIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlFUzsKLQotICAg
IC8vIFJlY29yZCB0aGUgbW91c2UgZG93biBwb3NpdGlvbiBzbyB3ZSBjYW4gZGV0ZXJtaW5lIGRy
YWcgaHlzdGVyZXNpcy4KLSAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwotCi0g
ICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIg
Y3VycmVudElucHV0TWFuYWdlcl07Ci0gICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRz
VG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VF
dmVudDpldmVudF0pCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgIFtfcHJpdmF0ZS0+Y29tcENv
bnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLQotICAgIC8vIElm
IHRoZSB3ZWIgcGFnZSBoYW5kbGVzIHRoZSBjb250ZXh0IG1lbnUgZXZlbnQgYW5kIG1lbnVGb3JF
dmVudDogcmV0dXJucyBuaWwsIHdlJ2xsIGdldCBjb250cm9sIGNsaWNrIGV2ZW50cyBoZXJlLgot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFzcyB0aGVtIGFsb25nIHRvIEtIVE1MIGEgc2Vjb25k
IHRpbWUuCi0gICAgaWYgKCEoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFz
aykpIHsKLSAgICAgICAgX3ByaXZhdGUtPmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gTk87
Ci0KLSAgICAgICAgLy8gRG9uJ3QgZG8gYW55IG1vdXNlb3ZlciB3aGlsZSB0aGUgbW91c2UgaXMg
ZG93bi4KLSAgICAgICAgW3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKLQotICAg
ICAgICAvLyBMZXQgV2ViQ29yZSBnZXQgYSBjaGFuY2UgdG8gZGVhbCB3aXRoIHRoZSBldmVudC4g
VGhpcyB3aWxsIGNhbGwgYmFjayB0byB1cwotICAgICAgICAvLyB0byBzdGFydCB0aGUgYXV0b3Nj
cm9sbCB0aW1lciBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+bW91c2VEb3duKGV2ZW50KTsKLSAgICB9Ci0KLWRvbmU6Ci0gICAgX3ByaXZhdGUtPmhh
bmRsaW5nTW91c2VEb3duRXZlbnQgPSBOTzsKLX0KLQotLSAodm9pZClkcmFnSW1hZ2U6KE5TSW1h
Z2UgKilkcmFnSW1hZ2UKLSAgICAgICAgICAgICAgIGF0OihOU1BvaW50KWF0Ci0gICAgICAgICAg
IG9mZnNldDooTlNTaXplKW9mZnNldAotICAgICAgICAgICAgZXZlbnQ6KE5TRXZlbnQgKilldmVu
dAotICAgICAgIHBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLSAgICAgICAg
ICAgc291cmNlOihpZClzb3VyY2UKLSAgICAgICAgc2xpZGVCYWNrOihCT09MKXNsaWRlQmFjawot
ewotICAgIEFTU0VSVChzZWxmID09IFtzZWxmIF90b3BIVE1MVmlld10pOwotICAgIFtzdXBlciBk
cmFnSW1hZ2U6ZHJhZ0ltYWdlIGF0OmF0IG9mZnNldDpvZmZzZXQgZXZlbnQ6ZXZlbnQgcGFzdGVi
b2FyZDpwYXN0ZWJvYXJkIHNvdXJjZTpzb3VyY2Ugc2xpZGVCYWNrOnNsaWRlQmFja107Ci19Ci0K
LS0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVk
IGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVh
c2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8g
dGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGlu
c2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKLQotICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5w
dXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOwotICAgIGlmIChbY3VycmVudElucHV0TWFu
YWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhh
bmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiByZXRh
aW5dOwotCi0gICAgaWYgKCFfcHJpdmF0ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMpIHsK
LSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAg
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICBw
YWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRHJhZ2dlZChldmVudCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBbc2VsZiByZWxlYXNlXTsKLX0KLQotLSAoTlNEcmFnT3Bl
cmF0aW9uKWRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza0ZvckxvY2FsOihCT09MKWlzTG9jYWwK
LXsKLSAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10p
OwotICAgIAotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7Ci0gICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uTm9uZTsKLQotICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2Ugb3ZlcnJpZGUgdGhlIHNvdXJjZSBwcm92aWRlZCBvcGVyYXRpb24gaGVy
ZT8gIFdoeSBub3QgaW4gRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZwotICAgIGlmIChwYWdlLT5k
cmFnQ29udHJvbGxlcigpLT5zb3VyY2VEcmFnT3BlcmF0aW9uKCkgPT0gRHJhZ09wZXJhdGlvbk5v
bmUpCi0gICAgICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25HZW5lcmljIHwgTlNEcmFnT3BlcmF0
aW9uQ29weTsKLQotICAgIHJldHVybiAoTlNEcmFnT3BlcmF0aW9uKXBhZ2UtPmRyYWdDb250cm9s
bGVyKCktPnNvdXJjZURyYWdPcGVyYXRpb24oKTsKLX0KLQotLSAodm9pZClkcmFnZ2VkSW1hZ2U6
KE5TSW1hZ2UgKilpbWFnZSBtb3ZlZFRvOihOU1BvaW50KXNjcmVlbkxvYwotewotICAgIEFTU0VS
VCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7Ci0gICAgCi0gICAg
TlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jh
c2U6c2NyZWVuTG9jXTsKLSAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93SW1hZ2VM
b2M7Ci0gICAgCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSkpIHsK
LSAgICAgICAgRHJhZ0NvbnRyb2xsZXIqIGRyYWdDb250cm9sbGVyID0gcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKTsKLSAgICAgICAgTlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IE5TTWFrZVBvaW50KHdp
bmRvd0ltYWdlTG9jLnggKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLngoKSwgd2luZG93
SW1hZ2VMb2MueSArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgW1tzZWxmIF9mcmFtZV0gX2RyYWdTb3VyY2VNb3ZlZFRvOndpbmRvd01vdXNlTG9j
XTsKLX0KLQotLSAodm9pZClkcmFnZ2VkSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGVuZGVkQXQ6
KE5TUG9pbnQpYVBvaW50IG9wZXJhdGlvbjooTlNEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbgotewot
ICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7Ci0g
ICAgCi0gICAgTlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRT
Y3JlZW5Ub0Jhc2U6YVBvaW50XTsKLSAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93
SW1hZ2VMb2M7Ci0gICAgCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3
XSkpIHsKLSAgICAgICAgRHJhZ0NvbnRyb2xsZXIqIGRyYWdDb250cm9sbGVyID0gcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKTsKLSAgICAgICAgd2luZG93TW91c2VMb2MgPSBOU01ha2VQb2ludCh3aW5k
b3dJbWFnZUxvYy54ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS54KCksIHdpbmRvd0lt
YWdlTG9jLnkgKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLnkoKSk7Ci0gICAgICAgIGRy
YWdDb250cm9sbGVyLT5kcmFnRW5kZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgW1tzZWxmIF9mcmFt
ZV0gX2RyYWdTb3VyY2VFbmRlZEF0OndpbmRvd01vdXNlTG9jIG9wZXJhdGlvbjpvcGVyYXRpb25d
OwotICAgIAotICAgIC8vIFByZXZlbnQgcXVldWVkIG1vdXNlRHJhZ2dlZCBldmVudHMgZnJvbSBj
b21pbmcgYWZ0ZXIgdGhlIGRyYWcgYW5kIGZha2UgbW91c2VVcCBldmVudC4KLSAgICBfcHJpdmF0
ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBZRVM7Ci0gICAgCi0gICAgLy8gT25jZSB0
aGUgZHJhZ2dpbmcgbWFjaGluZXJ5IGtpY2tzIGluLCB3ZSBubyBsb25nZXIgZ2V0IG1vdXNlIGRy
YWdzIG9yIHRoZSB1cCBldmVudC4KLSAgICAvLyBXZWJDb3JlIGV4cGVjdHMgdG8gZ2V0IGJhbGFu
Y2VkIGRvd24vdXAncywgc28gd2UgbXVzdCBmYWtlIHVwIGEgbW91c2V1cC4KLSAgICBOU0V2ZW50
ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VVcAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjp3aW5k
b3dNb3VzZUxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZp
ZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50
ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBj
dXJyZW50RXZlbnRdIGNvbnRleHRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOwotICAgIFtzZWxm
IG1vdXNlVXA6ZmFrZUV2ZW50XTsgLy8gVGhpcyB3aWxsIGFsc28gdXBkYXRlIHRoZSBtb3VzZW92
ZXIgc3RhdGUuCi19Ci0KLS0gKE5TQXJyYXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRB
dERlc3RpbmF0aW9uOihOU1VSTCAqKWRyb3BEZXN0aW5hdGlvbgotewotICAgIE5TRmlsZVdyYXBw
ZXIgKndyYXBwZXIgPSBuaWw7Ci0gICAgTlNVUkwgKmRyYWdnaW5nSW1hZ2VVUkwgPSBuaWw7Ci0g
ICAgCi0gICAgaWYgKFdlYkNvcmU6OkNhY2hlZEltYWdlKiB0aWZmUmVzb3VyY2UgPSBbc2VsZiBw
cm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0pIHsKLSAgICAgICAgCi0gICAgICAgIFNoYXJlZEJ1
ZmZlciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmVzb3VyY2UqPih0aWZmUmVzb3VyY2Up
LT5kYXRhKCk7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgZ290byBub1Byb21p
c2VkRGF0YTsKLSAgICAgICAgCi0gICAgICAgIE5TRGF0YSAqZGF0YSA9IGJ1ZmZlci0+Y3JlYXRl
TlNEYXRhKCk7Ci0gICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gdGlmZlJlc291cmNl
LT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKTsKLSAgICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9
IFtyZXNwb25zZSBVUkxdOwotICAgICAgICB3cmFwcGVyID0gW1tbTlNGaWxlV3JhcHBlciBhbGxv
Y10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdIGF1dG9yZWxlYXNlXTsKLSAgICAg
ICAgTlNTdHJpbmcqIGZpbGVuYW1lID0gW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXTsKLSAg
ICAgICAgTlNTdHJpbmcqIHRydWVFeHRlbnNpb24odGlmZlJlc291cmNlLT5pbWFnZSgpLT5maWxl
bmFtZUV4dGVuc2lvbigpKTsKLSAgICAgICAgaWYgKCFbZmlsZW5hbWUgbWF0Y2hlc0V4dGVuc2lv
bkVxdWl2YWxlbnQ6dHJ1ZUV4dGVuc2lvbl0pCi0gICAgICAgICAgICBmaWxlbmFtZSA9IFtbZmls
ZW5hbWUgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIuIl0gc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6dHJ1ZUV4dGVuc2lvbl07Ci0gICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1l
OmZpbGVuYW1lXTsKLSAgICB9Ci0gICAgCi1ub1Byb21pc2VkRGF0YToKLSAgICAKLSAgICBpZiAo
IXdyYXBwZXIpIHsKLSAgICAgICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lz
VG9wSFRNTFZpZXddKTsKLSAgICAgICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXdd
KTsKLSAgICAgICAgCi0gICAgICAgIC8vSWYgYSBsb2FkIG9jY3VycyBtaWR3YXkgdGhyb3VnaCBh
IGRyYWcsIHRoZSB2aWV3IG1heSBiZSBkZXRhY2hlZCwgd2hpY2ggZ2l2ZXMKLSAgICAgICAgLy91
cyBubyBhYmlsaXR5IHRvIGdldCB0byB0aGUgb3JpZ2luYWwgUGFnZSwgc28gd2UgY2Fubm90IGFj
Y2VzcyBhbnkgZHJhZyBzdGF0ZQotICAgICAgICAvL0ZJWE1FOiBpcyB0aGVyZSBhIHdheSB0byBy
ZWNvdmVyPwotICAgICAgICBpZiAoIXBhZ2UpIAotICAgICAgICAgICAgcmV0dXJuIG5pbDsgCi0g
ICAgICAgIAotICAgICAgICBjb25zdCBLVVJMJiBpbWFnZVVSTCA9IHBhZ2UtPmRyYWdDb250cm9s
bGVyKCktPmRyYWdnaW5nSW1hZ2VVUkwoKTsKLSAgICAgICAgQVNTRVJUKCFpbWFnZVVSTC5pc0Vt
cHR5KCkpOwotICAgICAgICBkcmFnZ2luZ0ltYWdlVVJMID0gaW1hZ2VVUkw7Ci0KLSAgICAgICAg
d3JhcHBlciA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2ZpbGVXcmFwcGVyRm9yVVJMOmRyYWdnaW5n
SW1hZ2VVUkxdOwotICAgIH0KLSAgICAKLSAgICBpZiAod3JhcHBlciA9PSBuaWwpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGltYWdlIGZpbGUuIik7Ci0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJlcG9ydCBhbiBlcnJvciBpZiB3ZSBm
YWlsIHRvIGNyZWF0ZSBhIGZpbGUuCi0gICAgTlNTdHJpbmcgKnBhdGggPSBbW2Ryb3BEZXN0aW5h
dGlvbiBwYXRoXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W3dyYXBwZXIgcHJlZmVy
cmVkRmlsZW5hbWVdXTsKLSAgICBwYXRoID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBfd2Via2l0X3BhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRoOnBhdGhdOwotICAgIGlmICgh
W3dyYXBwZXIgd3JpdGVUb0ZpbGU6cGF0aCBhdG9taWNhbGx5Ok5PIHVwZGF0ZUZpbGVuYW1lczpZ
RVNdKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZSB2aWEg
LVtOU0ZpbGVXcmFwcGVyIHdyaXRlVG9GaWxlOmF0b21pY2FsbHk6dXBkYXRlRmlsZW5hbWVzOl0i
KTsKLSAgICAKLSAgICBpZiAoZHJhZ2dpbmdJbWFnZVVSTCkKLSAgICAgICAgW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2Via2l0X3NldE1ldGFkYXRhVVJMOltkcmFnZ2luZ0ltYWdl
VVJMIGFic29sdXRlU3RyaW5nXSByZWZlcnJlcjpuaWwgYXRQYXRoOnBhdGhdOwotICAgIAotICAg
IHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3BhdGggbGFzdFBhdGhDb21wb25lbnRd
XTsKLX0KLQotLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVy
ZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVz
dGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJl
bGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAg
Ly8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVt
IGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9y
ZWxlYXNlXTsKLQotICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOwotCi0gICAgTlNJ
bnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVu
dElucHV0TWFuYWdlcl07Ci0gICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5k
bGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDpl
dmVudF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIHJldGFpbl07Ci0KLSAgICBbc2Vs
ZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQot
ICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5tb3VzZVVwKGV2
ZW50KTsKLSAgICB9Ci0gICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwot
Ci0gICAgW3NlbGYgcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpbW91c2VNb3ZlZE5vdGlmaWNhdGlv
bjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBbc2VsZiBfdXBkYXRlTW91
c2VvdmVyV2l0aEV2ZW50Oltbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJO
U0V2ZW50Il1dOwotfQotCi0vLyByZXR1cm5pbmcgWUVTIGZyb20gdGhpcyBtZXRob2QgaXMgdGhl
IHdheSB3ZSB0ZWxsIEFwcEtpdCB0aGF0IGl0IGlzIG9rIGZvciB0aGlzIHZpZXcKLS8vIHRvIGJl
IGluIHRoZSBrZXkgbG9vcCBldmVuIHdoZW4gInRhYiB0byBhbGwgY29udHJvbHMiIGlzIG5vdCBv
bi4KLS0gKEJPT0wpbmVlZHNQYW5lbFRvQmVjb21lS2V5Ci17Ci0gICAgcmV0dXJuIFlFUzsKLX0K
LQotLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcmV0dXJuIGFueXRo
aW5nIHRocm91Z2ggdGhlIE5TVGV4dElucHV0Ci0vLyBBUEkgd2hlbiBhbiBlZGl0YWJsZSByZWdp
b24gaXMgbm90IGN1cnJlbnRseSBmb2N1c2VkLgotc3RhdGljIEJPT0wgaXNUZXh0SW5wdXQoRnJh
bWUqIGNvcmVGcmFtZSkKLXsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmICFjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5pc05vbmUoKSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpOwotfQotCi1zdGF0aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29y
ZUZyYW1lKQotewotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNJblBhc3N3b3JkRmllbGQoKTsKLX0KLQotLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRl
cgotewotICAgIE5TU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IE5TRGlyZWN0U2VsZWN0
aW9uOwotICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBfaXNQZXJmb3JtaW5nUHJvZ3JhbW1hdGlj
Rm9jdXNdKQotICAgICAgICBkaXJlY3Rpb24gPSBbW3NlbGYgd2luZG93XSBrZXlWaWV3U2VsZWN0
aW9uRGlyZWN0aW9uXTsKLQotICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVd
OwotICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIFlF
UzsKLQotICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0ID0gaXNUZXh0SW5wdXQoZnJhbWUpICYm
ICFpc0luUGFzc3dvcmRGaWVsZChmcmFtZSk7Ci0gICAgaWYgKGV4cG9zZUlucHV0Q29udGV4dCAh
PSBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7Ci0gICAgICAgIF9wcml2YXRlLT5leHBv
c2VJbnB1dENvbnRleHQgPSBleHBvc2VJbnB1dENvbnRleHQ7Ci0gICAgICAgIFtOU0FwcCB1cGRh
dGVXaW5kb3dzXTsKLSAgICB9Ci0KLSAgICBmcmFtZS0+ZWRpdG9yKCktPnNldFN0YXJ0TmV3S2ls
bFJpbmdTZXF1ZW5jZSh0cnVlKTsKLQotICAgIGlmIChkaXJlY3Rpb24gPT0gTlNEaXJlY3RTZWxl
Y3Rpb24pCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKGZyYW1lKTsKLSAgICBpZiAoRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50LT5zZXRG
b2N1c2VkTm9kZSgwKTsKLSAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0SW5pdGlhbEZv
Y3VzKGRpcmVjdGlvbiA9PSBOU1NlbGVjdGluZ05leHQgPyBGb2N1c0RpcmVjdGlvbkZvcndhcmQg
OiBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50S2V5Ym9hcmRFdmVu
dCgpLmdldCgpKTsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKXJlc2lnbkZpcnN0UmVz
cG9uZGVyCi17Ci0gICAgQk9PTCByZXNpZ24gPSBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJd
OwotICAgIGlmIChyZXNpZ24pIHsKLSAgICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVz
cG9uZGVyID0gWUVTOwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVy
dGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIGlmICghW3NlbGYgbWFpbnRhaW5z
SW5hY3RpdmVTZWxlY3Rpb25dKSB7IAotICAgICAgICAgICAgW3NlbGYgZGVzZWxlY3RBbGxdOwot
ICAgICAgICAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1pbmdQcm9ncmFtbWF0
aWNGb2N1c10pCi0gICAgICAgICAgICAgICAgW3NlbGYgY2xlYXJGb2N1c107Ci0gICAgICAgIH0K
LSAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci0gICAgICAgIF9w
cml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9IE5POwotICAgIH0KLSAgICByZXR1cm4g
cmVzaWduOwotfQotCi0tICh2b2lkKXNldERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRh
U291cmNlIAotewotICAgIEFTU0VSVChkYXRhU291cmNlKTsKLSAgICBpZiAoX3ByaXZhdGUtPmRh
dGFTb3VyY2UgIT0gZGF0YVNvdXJjZSkgewotICAgICAgICBBU1NFUlQoIV9wcml2YXRlLT5jbG9z
ZWQpOwotICAgICAgICBCT09MIGhhZERhdGFTb3VyY2UgPSBfcHJpdmF0ZS0+ZGF0YVNvdXJjZSAh
PSBuaWw7Ci0KLSAgICAgICAgW2RhdGFTb3VyY2UgcmV0YWluXTsKLSAgICAgICAgW19wcml2YXRl
LT5kYXRhU291cmNlIHJlbGVhc2VdOwotICAgICAgICBfcHJpdmF0ZS0+ZGF0YVNvdXJjZSA9IGRh
dGFTb3VyY2U7Ci0gICAgICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291
cmNlOmRhdGFTb3VyY2VdOwotCi0gICAgICAgIGlmICghaGFkRGF0YVNvdXJjZSkKLSAgICAgICAg
ICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNlcnZlcl07Ci0gICAgfQotfQotCi0tICh2b2lkKWRh
dGFTb3VyY2VVcGRhdGVkOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQotewotfQotCi0vLyBU
aGlzIGlzIGFuIG92ZXJyaWRlIG9mIGFuIE5TQ29udHJvbCBtZXRob2QgdGhhdCB3YW50cyB0byBy
ZXBhaW50IHRoZSBlbnRpcmUgdmlldyB3aGVuIHRoZSB3aW5kb3cgcmVzaWducy9iZWNvbWVzCi0v
LyBrZXkuICBXZWJIVE1MVmlldyBpcyBhbiBOU0NvbnRyb2wgb25seSBiZWNhdXNlIGl0IGhvc3Rz
IE5TQ2VsbHMgdGhhdCBhcmUgcGFpbnRlZCBieSBXZWJDb3JlJ3MgQXF1YSB0aGVtZQotLy8gcmVu
ZGVyZXIgKGFuZCB0aG9zZSBjZWxscyBtdXN0IGJlIGhvc3RlZCBieSBhbiBlbmNsb3NpbmcgTlND
b250cm9sIGluIG9yZGVyIHRvIHBhaW50IHByb3Blcmx5KS4KLS0gKHZvaWQpdXBkYXRlQ2VsbDoo
TlNDZWxsKiljZWxsCi17Ci19Ci0KLS8vIERvZXMgc2V0TmVlZHNEaXNwbGF5Ok5PIGFzIGEgc2lk
ZSBlZmZlY3Qgd2hlbiBwcmludGluZyBpcyBlbmRpbmcuCi0vLyBwYWdlV2lkdGggIT0gMCBpbXBs
aWVzIHdlIHdpbGwgcmVsYXlvdXQgdG8gYSBuZXcgd2lkdGgKLS0gKHZvaWQpX3NldFByaW50aW5n
OihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhp
bXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6KEJPT0wpYWRq
dXN0Vmlld1NpemUKLXsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAg
IE5TQXJyYXkgKnN1YmZyYW1lcyA9IFtmcmFtZSBjaGlsZEZyYW1lc107Ci0gICAgdW5zaWduZWQg
biA9IFtzdWJmcmFtZXMgY291bnRdOwotICAgIHVuc2lnbmVkIGk7Ci0gICAgZm9yIChpID0gMDsg
aSAhPSBuOyArK2kpIHsKLSAgICAgICAgV2ViRnJhbWUgKnN1YmZyYW1lID0gW3N1YmZyYW1lcyBv
YmplY3RBdEluZGV4OmldOwotICAgICAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtzdWJm
cmFtZSBmcmFtZVZpZXddOwotICAgICAgICBpZiAoW1tzdWJmcmFtZSBfZGF0YVNvdXJjZV0gX2lz
RG9jdW1lbnRIVE1MXSkgewotICAgICAgICAgICAgWyhXZWJIVE1MVmlldyAqKVtmcmFtZVZpZXcg
ZG9jdW1lbnRWaWV3XSBfc2V0UHJpbnRpbmc6cHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDowLjBm
IG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZV07Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJpbnRpbmcgIT0gX3ByaXZhdGUtPnByaW50aW5n
KSB7Ci0gICAgICAgIFtfcHJpdmF0ZS0+cGFnZVJlY3RzIHJlbGVhc2VdOwotICAgICAgICBfcHJp
dmF0ZS0+cGFnZVJlY3RzID0gbmlsOwotICAgICAgICBfcHJpdmF0ZS0+cHJpbnRpbmcgPSBwcmlu
dGluZzsKLSAgICAgICAgaWYgKCFwcmludGluZykKLSAgICAgICAgICAgIF9wcml2YXRlLT5hdm9p
ZGluZ1ByaW50T3JwaGFuID0gTk87Ci0gICAgICAgIFtzZWxmIHNldE5lZWRzVG9BcHBseVN0eWxl
czpZRVNdOwotICAgICAgICBbc2VsZiBzZXROZWVkc0xheW91dDpZRVNdOwotICAgICAgICBbc2Vs
ZiBsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6bWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6
bWF4UGFnZVdpZHRoIGFkanVzdGluZ1ZpZXdTaXplOmFkanVzdFZpZXdTaXplXTsKLSAgICAgICAg
aWYgKCFwcmludGluZykgewotICAgICAgICAgICAgLy8gQ2FuJ3QgZG8gdGhpcyB3aGVuIHN0YXJ0
aW5nIHByaW50aW5nIG9yIG5lc3RlZCBwcmludGluZyB3b24ndCB3b3JrLCBzZWUgMzQ5MTQyNy4K
LSAgICAgICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpOT107Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLS0gKEJPT0wpY2FuUHJpbnRIZWFkZXJzQW5kRm9vdGVycwotewotICAgIHJldHVybiBZ
RVM7Ci19Ci0KLS8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgd2Vidmll
dyBpcyBlbWJlZGRlZCBpbiB0aGUgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZC4KLS8vIEl0IHNo
b3VsZG4ndCBiZSBjYWxsZWQgd2hlbiB0aGUgd2VidmlldyBpcyBiZWluZyBwcmludGVkIGRpcmVj
dGx5LgotLSAodm9pZClhZGp1c3RQYWdlSGVpZ2h0TmV3OihDR0Zsb2F0ICopbmV3Qm90dG9tIHRv
cDooQ0dGbG9hdClvbGRUb3AgYm90dG9tOihDR0Zsb2F0KW9sZEJvdHRvbSBsaW1pdDooQ0dGbG9h
dClib3R0b21MaW1pdAotewotICAgIC8vIFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0
IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nlc3MuCi0gICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0
c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBk
byB0aGlzLgotICAgIEJPT0wgd2FzSW5QcmludGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7
Ci0gICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKLSAgICAgICAgW3NlbGYgX3NldFByaW50aW5n
OllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZp
ZXdTaXplOk5PXTsKLQotICAgIGZsb2F0IG5ld0JvdHRvbUZsb2F0ID0gKm5ld0JvdHRvbTsKLSAg
ICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gY29yZShbc2VsZiBfZnJhbWVdKS0+dmlldygpKQotICAg
ICAgICB2aWV3LT5hZGp1c3RQYWdlSGVpZ2h0KCZuZXdCb3R0b21GbG9hdCwgb2xkVG9wLCBvbGRC
b3R0b20sIGJvdHRvbUxpbWl0KTsKLQotI2lmZGVmIF9fTFA2NF9fCi0gICAgLy8gSWYgdGhlIG5l
dyBib3R0b20gaXMgZXF1YWwgdG8gdGhlIG9sZCBib3R0b20gKHdoZW4gYm90aCBhcmUgdHJlYXRl
ZCBhcyBmbG9hdHMpLCB3ZSBqdXN0IGNvcHkKLSAgICAvLyBvbGRCb3R0b20gb3ZlciB0byBuZXdC
b3R0b20uIFRoaXMgcHJldmVudHMgcm91bmRpbmcgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4g
Y29udmVydGluZyBuZXdCb3R0b21GbG9hdCB0byBhIGRvdWJsZS4KLSAgICBpZiAoZmFicygoZmxv
YXQpb2xkQm90dG9tIC0gbmV3Qm90dG9tRmxvYXQpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjplcHNpbG9uKCkpIAotICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOwotICAgIGVs
c2UKLSNlbmRpZgotICAgICAgICAqbmV3Qm90dG9tID0gbmV3Qm90dG9tRmxvYXQ7Ci0gICAgCi0g
ICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkgewotICAgICAgICBOU1ByaW50T3BlcmF0aW9uICpj
dXJyZW5QcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25d
OwotICAgICAgICBpZiAoY3VycmVuUHJpbnRPcGVyYXRpb24pCi0gICAgICAgICAgICAvLyBkZWxh
eSBfc2V0UHJpbnRpbmc6Tk8gdW50aWwgYmFjayB0byBtYWluIGxvb3AgYXMgdGhpcyBtZXRob2Qg
bWF5IGdldCBjYWxsZWQgcmVwZWF0ZWRseQotICAgICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVj
dG9yOkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6Y3VycmVuUHJp
bnRPcGVyYXRpb24gYWZ0ZXJEZWxheTowXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8g
bm90IHN1cmUgaWYgdGhpcyBpcyBhY3R1YWxseSBldmVyIGludm9rZWQsIGl0IHByb2JhYmx5IHNo
b3VsZG4ndCBiZQotICAgICAgICAgICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdl
V2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotICAg
IH0KLX0KLQotLSAoZmxvYXQpX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjoo
TlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uCi17Ci0gICAgTlNQcmludEluZm8gKnBy
aW50SW5mbyA9IFtwcmludE9wZXJhdGlvbiBwcmludEluZm9dOwotICAgIHJldHVybiBbcHJpbnRJ
bmZvIHBhcGVyU2l6ZV0ud2lkdGggLSBbcHJpbnRJbmZvIGxlZnRNYXJnaW5dIC0gW3ByaW50SW5m
byByaWdodE1hcmdpbl07Ci19Ci0KLS0gKGZsb2F0KV9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0
aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24KLXsKLSAgICBmbG9hdCB2aWV3
V2lkdGggPSBOU1dpZHRoKFtzZWxmIGJvdW5kc10pOwotICAgIGlmICh2aWV3V2lkdGggPCAxKSB7
Ci0gICAgICAgIExPR19FUlJPUigiJUAgaGFzIG5vIHdpZHRoIHdoZW4gcHJpbnRpbmciLCBzZWxm
KTsKLSAgICAgICAgcmV0dXJuIDEuMGY7Ci0gICAgfQotCi0gICAgZmxvYXQgdXNlclNjYWxlRmFj
dG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJfcGFnZVNldHVwU2NhbGVGYWN0b3JdOwotICAgIGZs
b2F0IG1heFNocmlua1RvRml0U2NhbGVGYWN0b3IgPSAxLjBmIC8gUHJpbnRpbmdNYXhpbXVtU2hy
aW5rRmFjdG9yOwotICAgIGZsb2F0IHNocmlua1RvRml0U2NhbGVGYWN0b3IgPSBbc2VsZiBfYXZh
aWxhYmxlUGFwZXJXaWR0aEZvclByaW50T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXS92aWV3V2lk
dGg7Ci0gICAgZmxvYXQgc2hyaW5rVG9Bdm9pZE9ycGhhbiA9IF9wcml2YXRlLT5hdm9pZGluZ1By
aW50T3JwaGFuID8gKDEuMGYgLyBQcmludGluZ09ycGhhblNocmlua0FkanVzdG1lbnQpIDogMS4w
ZjsKLSAgICByZXR1cm4gdXNlclNjYWxlRmFjdG9yICogTUFYKG1heFNocmlua1RvRml0U2NhbGVG
YWN0b3IsIHNocmlua1RvRml0U2NhbGVGYWN0b3IpICogc2hyaW5rVG9Bdm9pZE9ycGhhbjsKLX0K
LQotLy8gRklYTUUgMzQ5MTM0NDogVGhpcyBpcyBhIHNlY3JldCBBcHBLaXQtaW50ZXJuYWwgbWV0
aG9kIHRoYXQgd2UgbmVlZCB0byBvdmVycmlkZSBpbiBvcmRlcgotLy8gdG8gZ2V0IG91ciBzaHJp
bmstdG8tZml0IHRvIHdvcmsgd2l0aCBhIGN1c3RvbSBwYWdpbmF0aW9uIHNjaGVtZS4gV2UgY2Fu
IGRvIHRoaXMgYmV0dGVyCi0vLyBpZiBBcHBLaXQgbWFrZXMgaXQgU1BJL0FQSS4KLS0gKENHRmxv
YXQpX3Byb3ZpZGVUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVy
YXRpb24gKilwcmludE9wZXJhdGlvbiAKLXsKLSAgICByZXR1cm4gW3NlbGYgX3NjYWxlRmFjdG9y
Rm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRpb25dOwotfQotCi0vLyBUaGlzIGlzIHVzZWQg
Zm9yIENhcmJvbiBwcmludGluZy4gQXQgc29tZSBwb2ludCB3ZSBtaWdodCB3YW50IHRvIG1ha2Ug
dGhpcyBwdWJsaWMgQVBJLgotLSAodm9pZClzZXRQYWdlV2lkdGhGb3JQcmludGluZzooZmxvYXQp
cGFnZVdpZHRoCi17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6
MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotICAgIFtzZWxm
IF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDpwYWdlV2lkdGggbWF4aW11bVBhZ2VX
aWR0aDpwYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6WUVTXTsKLX0KLQotLSAodm9pZClfZW5kUHJp
bnRNb2RlCi17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4w
ZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6WUVTXTsKLSAgICBbW3NlbGYg
d2luZG93XSBzZXRBdXRvZGlzcGxheTpZRVNdOwotfQotCi0tICh2b2lkKV9kZWxheWVkRW5kUHJp
bnRNb2RlOihOU1ByaW50T3BlcmF0aW9uICopaW5pdGlhdGluZ09wZXJhdGlvbgotewotICAgIEFT
U0VSVF9BUkcoaW5pdGlhdGluZ09wZXJhdGlvbiwgaW5pdGlhdGluZ09wZXJhdGlvbiAhPSBuaWwp
OwotICAgIE5TUHJpbnRPcGVyYXRpb24gKmN1cnJlbnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJh
dGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKLSAgICBpZiAoaW5pdGlhdGluZ09wZXJhdGlvbiA9PSBj
dXJyZW50T3BlcmF0aW9uKSB7Ci0gICAgICAgIC8vIFRoZSBwcmludCBvcGVyYXRpb24gaXMgc3Rp
bGwgdW5kZXJ3YXkuIFdlIGRvbid0IGV4cGVjdCB0aGlzIHRvIGV2ZXIgaGFwcGVuLCBoZW5jZSB0
aGUgYXNzZXJ0LCBidXQgd2UncmUKLSAgICAgICAgLy8gYmVpbmcgZXh0cmEgcGFyYW5vaWQgaGVy
ZSBzaW5jZSB0aGUgcHJpbnRpbmcgY29kZSBpcyBzbyBmcmFnaWxlLiBEZWxheSB0aGUgY2xlYW51
cAotICAgICAgICAvLyBmdXJ0aGVyLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9k
ZTopIHdpdGhPYmplY3Q6aW5pdGlhdGluZ09wZXJhdGlvbiBhZnRlckRlbGF5OjBdOwotICAgIH0g
ZWxzZSBpZiAoW2N1cnJlbnRPcGVyYXRpb24gdmlld10gPT0gc2VsZikgewotICAgICAgICAvLyBB
IG5ldyBwcmludCBqb2IgaGFzIHN0YXJ0ZWQsIGJ1dCBpdCBpcyBwcmludGluZyB0aGUgc2FtZSBX
ZWJIVE1MVmlldyBhZ2Fpbi4gV2UgZG9uJ3QgZXhwZWN0Ci0gICAgICAgIC8vIHRoaXMgdG8gZXZl
ciBoYXBwZW4sIGhlbmNlIHRoZSBhc3NlcnQsIGJ1dCB3ZSdyZSBiZWluZyBleHRyYSBwYXJhbm9p
ZCBoZXJlIHNpbmNlIHRoZSBwcmludGluZyBjb2RlIGlzIHNvCi0gICAgICAgIC8vIGZyYWdpbGUu
IERvIG5vdGhpbmcsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBicmVhayB0aGUgcHJpbnQgam9i
IGN1cnJlbnRseSBpbiBwcm9ncmVzcywgYW5kCi0gICAgICAgIC8vIHRoZSBwcmludCBqb2IgY3Vy
cmVudGx5IGluIHByb2dyZXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgb3duIGNsZWFudXAuCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRo
ZSBwcmludCBqb2IgdGhhdCBraWNrZWQgb2ZmIHRoaXMgZGVsYXllZCBjYWxsIGhhcyBmaW5pc2hl
ZCwgYW5kIHRoaXMgdmlldyBpcyBub3QgYmVpbmcKLSAgICAgICAgLy8gcHJpbnRlZCBhZ2Fpbi4g
V2UgZXhwZWN0IHRoYXQgbm8gb3RoZXIgcHJpbnQgam9iIGhhcyBzdGFydGVkLiBTaW5jZSB0aGlz
IGRlbGF5ZWQgY2FsbCB3YXNuJ3QKLSAgICAgICAgLy8gY2FuY2VsbGVkLCBiZWdpbkRvY3VtZW50
IGFuZCBlbmREb2N1bWVudCBtdXN0IG5vdCBoYXZlIGJlZW4gY2FsbGVkLCBhbmQgd2UgbmVlZCB0
byBjbGVhbiB1cAotICAgICAgICAvLyB0aGUgcHJpbnQgbW9kZSBoZXJlLgotICAgICAgICBBU1NF
UlQoY3VycmVudE9wZXJhdGlvbiA9PSBuaWwpOwotICAgICAgICBbc2VsZiBfZW5kUHJpbnRNb2Rl
XTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF2YWlsYWJsZSBm
b3IgcHJpbnRpbmcKLS0gKEJPT0wpa25vd3NQYWdlUmFuZ2U6KE5TUmFuZ2VQb2ludGVyKXJhbmdl
Ci17Ci0gICAgLy8gTXVzdCBkbyB0aGlzIGV4cGxpY2l0IGRpc3BsYXkgaGVyZSwgYmVjYXVzZSBv
dGhlcndpc2UgdGhlIHZpZXcgbWlnaHQgcmVkaXNwbGF5IHdoaWxlIHRoZSBwcmludAotICAgIC8v
IHNoZWV0IHdhcyB1cCwgdXNpbmcgcHJpbnRlciBmb250cyAoYW5kIGxvb2tpbmcgZGlmZmVyZW50
KS4KLSAgICBbc2VsZiBkaXNwbGF5SWZOZWVkZWRdOwotICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1
dG9kaXNwbGF5Ok5PXTsKLSAgICAKLSAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHBy
aW50IHdpdGggdGhlIGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQK
LSAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHBhcGVyIHNpemUKLSAgICBmbG9hdCBtaW5MYXlvdXRX
aWR0aCA9IDAuMGY7Ci0gICAgZmxvYXQgbWF4TGF5b3V0V2lkdGggPSAwLjBmOwotICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuIE5POwotICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVu
dCgpLT5pc0ZyYW1lU2V0KCkpIHsKLSAgICAgICAgZmxvYXQgcGFwZXJXaWR0aCA9IFtzZWxmIF9h
dmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246W05TUHJpbnRPcGVyYXRpb24gY3Vy
cmVudE9wZXJhdGlvbl1dOwotICAgICAgICBtaW5MYXlvdXRXaWR0aCA9IHBhcGVyV2lkdGggKiBQ
cmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7Ci0gICAgICAgIG1heExheW91dFdpZHRoID0gcGFw
ZXJXaWR0aCAqIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKLSAgICB9Ci0gICAgW3NlbGYg
X3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOm1pbkxheW91dFdpZHRoIG1heGltdW1Q
YWdlV2lkdGg6bWF4TGF5b3V0V2lkdGggYWRqdXN0Vmlld1NpemU6WUVTXTsgLy8gd2lsbCByZWxh
eW91dAotICAgIE5TUHJpbnRPcGVyYXRpb24gKnByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVy
YXRpb24gY3VycmVudE9wZXJhdGlvbl07Ci0gICAgLy8gQ2VydGFpbiB0eXBlcyBvZiBlcnJvcnMs
IGluY2x1ZGluZyBpbnZhbGlkIHBhZ2UgcmFuZ2VzLCBjYW4gY2F1c2UgYmVnaW5Eb2N1bWVudCBh
bmQKLSAgICAvLyBlbmREb2N1bWVudCB0byBiZSBza2lwcGVkIGFmdGVyIHdlJ3ZlIHB1dCBvdXJz
ZWx2ZXMgaW4gcHJpbnQgbW9kZSAoc2VlIDQxNDU5MDUpLiBJbiB0aG9zZSBjYXNlcwotICAgIC8v
IHdlIG5lZWQgdG8gZ2V0IG91dCBvZiBwcmludCBtb2RlIHdpdGhvdXQgcmVseWluZyBvbiBhbnkg
bW9yZSBjYWxsYmFja3MgZnJvbSB0aGUgcHJpbnRpbmcgbWVjaGFuaXNtLgotICAgIC8vIElmIHdl
IGdldCBhcyBmYXIgYXMgYmVnaW5Eb2N1bWVudCB3aXRob3V0IHRyb3VibGUsIHRoZW4gdGhpcyBk
ZWxheWVkIHJlcXVlc3Qgd2lsbCBiZSBjYW5jZWxsZWQuCi0gICAgLy8gSWYgbm90IGNhbmNlbGxl
ZCwgdGhpcyBkZWxheWVkIGNhbGwgd2lsbCBiZSBpbnZva2VkIGluIHRoZSBuZXh0IHBhc3MgdGhy
b3VnaCB0aGUgbWFpbiBldmVudCBsb29wLAotICAgIC8vIHdoaWNoIGlzIGFmdGVyIGJlZ2luRG9j
dW1lbnQgYW5kIGVuZERvY3VtZW50IHdvdWxkIGJlIGNhbGxlZC4KLSAgICBbc2VsZiBwZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDpwcmlu
dE9wZXJhdGlvbiBhZnRlckRlbGF5OjBdOwotICAgIFtbc2VsZiBfd2ViVmlld10gX2FkanVzdFBy
aW50aW5nTWFyZ2luc0ZvckhlYWRlckFuZEZvb3Rlcl07Ci0gICAgCi0gICAgLy8gVGhlcmUgaXMg
YSB0aGVvcmV0aWNhbCBjaGFuY2UgdGhhdCBzb21lb25lIGNvdWxkIGRvIHNvbWUgZHJhd2luZyBi
ZXR3ZWVuIGhlcmUgYW5kIGVuZERvY3VtZW50LAotICAgIC8vIGlmIHNvbWV0aGluZyBjYXVzZWQg
c2V0TmVlZHNEaXNwbGF5IGFmdGVyIHRoaXMgcG9pbnQuIElmIHNvLCBpdCdzIG5vdCBhIGJpZyB0
cmFnZWR5LCBiZWNhdXNlCi0gICAgLy8geW91J2Qgc2ltcGx5IHNlZSB0aGUgcHJpbnRlciBmb250
cyBvbiBzY3JlZW4uIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBkb2VzIG5vdCBoYXBwZW4gd2l0
aCBTYWZhcmkuCi0KLSAgICByYW5nZS0+bG9jYXRpb24gPSAxOwotICAgIGZsb2F0IHRvdGFsU2Nh
bGVGYWN0b3IgPSBbc2VsZiBfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJh
dGlvbl07Ci0gICAgZmxvYXQgdXNlclNjYWxlRmFjdG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJf
cGFnZVNldHVwU2NhbGVGYWN0b3JdOwotICAgIFtfcHJpdmF0ZS0+cGFnZVJlY3RzIHJlbGVhc2Vd
OwotICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0ID0gZmxvb3JmKFtzZWxmIF9jYWxjdWxhdGVQcmlu
dEhlaWdodF0vdG90YWxTY2FsZUZhY3Rvcik7Ci0gICAgTlNBcnJheSAqbmV3UGFnZVJlY3RzID0g
W1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9y
OnVzZXJTY2FsZUZhY3RvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhl
aWdodF07Ci0gICAgCi0gICAgLy8gQXBwS2l0IGdldHMgYWxsIG1lc3NlZCB1cCBpZiB5b3UgZ2l2
ZSBpdCBhIHplcm8tbGVuZ3RoIHBhZ2UgY291bnQgKHNlZSAzNTc2MzM0KSwgc28gaWYgd2UKLSAg
ICAvLyBoaXQgdGhhdCBjYXNlIHdlJ2xsIHBhc3MgYWxvbmcgYSBkZWdlbmVyYXRlIDEgcGl4ZWwg
c3F1YXJlIHRvIHByaW50LiBUaGlzIHdpbGwgcHJpbnQKLSAgICAvLyBhIGJsYW5rIHBhZ2UgKHdp
dGggY29ycmVjdC1sb29raW5nIGhlYWRlciBhbmQgZm9vdGVyIGlmIHRoYXQgb3B0aW9uIGlzIG9u
KSwgd2hpY2ggbWF0Y2hlcwotICAgIC8vIHRoZSBiZWhhdmlvciBvZiBJRSBhbmQgQ2FtaW5vIGF0
IGxlYXN0LgotICAgIGlmIChbbmV3UGFnZVJlY3RzIGNvdW50XSA9PSAwKQotICAgICAgICBuZXdQ
YWdlUmVjdHMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVj
dDpOU01ha2VSZWN0KDAsIDAsIDEsIDEpXV07Ci0gICAgZWxzZSBpZiAoW25ld1BhZ2VSZWN0cyBj
b3VudF0gPiAxKSB7Ci0gICAgICAgIC8vIElmIHRoZSBsYXN0IHBhZ2UgaXMgYSBzaG9ydCBvcnBo
YW4sIHRyeSBhZGp1c3RpbmcgdGhlIHByaW50IGhlaWdodCBzbGlnaHRseSB0byBzZWUgaWYgdGhp
cyB3aWxsIHNxdWVlemUgdGhlCi0gICAgICAgIC8vIGNvbnRlbnQgb250byBvbmUgZmV3ZXIgcGFn
ZS4gSWYgaXQgZG9lcywgdXNlIHRoZSBhZGp1c3RlZCBzY2FsZS4gSWYgbm90LCB1c2UgdGhlIG9y
aWdpbmFsIHNjYWxlLgotICAgICAgICBmbG9hdCBsYXN0UGFnZUhlaWdodCA9IE5TSGVpZ2h0KFtb
bmV3UGFnZVJlY3RzIGxhc3RPYmplY3RdIHJlY3RWYWx1ZV0pOwotICAgICAgICBpZiAobGFzdFBh
Z2VIZWlnaHQvZnVsbFBhZ2VIZWlnaHQgPCBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbykgewot
ICAgICAgICAgICAgTlNBcnJheSAqYWRqdXN0ZWRQYWdlUmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBf
Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9y
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhlaWdo
dCpQcmludGluZ09ycGhhblNocmlua0FkanVzdG1lbnRdOwotICAgICAgICAgICAgLy8gVXNlIHRo
ZSBhZGp1c3RlZCByZWN0cyBvbmx5IGlmIHRoZSBwYWdlIGNvdW50IHdlbnQgZG93bgotICAgICAg
ICAgICAgaWYgKFthZGp1c3RlZFBhZ2VSZWN0cyBjb3VudF0gPCBbbmV3UGFnZVJlY3RzIGNvdW50
XSkgewotICAgICAgICAgICAgICAgIG5ld1BhZ2VSZWN0cyA9IGFkanVzdGVkUGFnZVJlY3RzOwot
ICAgICAgICAgICAgICAgIF9wcml2YXRlLT5hdm9pZGluZ1ByaW50T3JwaGFuID0gWUVTOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIF9wcml2YXRlLT5wYWdlUmVj
dHMgPSBbbmV3UGFnZVJlY3RzIHJldGFpbl07Ci0gICAgCi0gICAgcmFuZ2UtPmxlbmd0aCA9IFtf
cHJpdmF0ZS0+cGFnZVJlY3RzIGNvdW50XTsKLSAgICAKLSAgICByZXR1cm4gWUVTOwotfQotCi0v
LyBSZXR1cm4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlIGZvciBhIHBhcnRpY3VsYXIgcGFnZSBudW1i
ZXIKLS0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKLXsKLSAgICByZXR1cm4g
W1tfcHJpdmF0ZS0+cGFnZVJlY3RzIG9iamVjdEF0SW5kZXg6cGFnZSAtIDFdIHJlY3RWYWx1ZV07
Ci19Ci0KLS0gKHZvaWQpZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTooTlNTaXplKWJvcmRlclNpemUK
LXsKLSAgICBBU1NFUlQoTlNFcXVhbFNpemVzKGJvcmRlclNpemUsIFtbW05TUHJpbnRPcGVyYXRp
b24gY3VycmVudE9wZXJhdGlvbl0gcHJpbnRJbmZvXSBwYXBlclNpemVdKSk7ICAgIAotICAgIFtb
c2VsZiBfd2ViVmlld10gX2RyYXdIZWFkZXJBbmRGb290ZXJdOwotfQotCi0tICh2b2lkKWJlZ2lu
RG9jdW1lbnQKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgLy8gRnJvbSBub3cgb24gd2UnbGwgZ2V0
IGEgY2hhbmNlIHRvIGNhbGwgX2VuZFByaW50TW9kZSBpbiBlaXRoZXIgYmVnaW5Eb2N1bWVudCBv
cgotICAgICAgICAvLyBlbmREb2N1bWVudCwgc28gd2UgY2FuIGNhbmNlbCB0aGUgImp1c3QgaW4g
Y2FzZSIgcGVuZGluZyBjYWxsLgotICAgICAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJm
b3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1v
ZGU6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0OltOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dXTsKLSAgICAgICAgW3N1
cGVyIGJlZ2luRG9jdW1lbnRdOwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqbG9jYWxFeGNl
cHRpb24pIHsKLSAgICAgICAgLy8gRXhjZXB0aW9uIGR1cmluZyBbc3VwZXIgYmVnaW5Eb2N1bWVu
dF0gbWVhbnMgdGhhdCBlbmREb2N1bWVudCB3aWxsIG5vdCBnZXQgY2FsbGVkLAotICAgICAgICAv
LyBzbyB3ZSBuZWVkIHRvIGNsZWFuIHVwIG91ciAicHJpbnQgbW9kZSIgaGVyZS4KLSAgICAgICAg
W3NlbGYgX2VuZFByaW50TW9kZV07Ci0gICAgfQotfQotCi0tICh2b2lkKWVuZERvY3VtZW50Ci17
Ci0gICAgW3N1cGVyIGVuZERvY3VtZW50XTsKLSAgICAvLyBOb3RlIHNhZGx5IGF0IHRoaXMgcG9p
bnQgW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSBpcyBz
dGlsbCBOTyAKLSAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKLX0KLQotLSAodm9pZClrZXlEb3du
OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9u
ZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAg
IC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFp
bmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJl
dmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0
IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIFJldGFpblB0
cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7Ci0gICAgQk9PTCBldmVudFdhc1Nl
bnRUb1dlYkNvcmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7Ci0KLSAgICBC
T09MIGNhbGxTdXBlciA9IE5POwotCi0gICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFz
ZV07Ci0gICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOwotCi0gICAg
Qk9PTCBjb21wbGV0aW9uUG9wdXBXYXNPcGVuID0gX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyICYm
IFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgcG9wdXBXaW5kb3dJc09wZW5dOwotICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghZXZlbnRXYXNTZW50
VG9XZWJDb3JlICYmIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlF
dmVudChldmVudCkpIHsKLSAgICAgICAgLy8gV2ViQ29yZSBwcm9jZXNzZWQgYSBrZXkgZXZlbnQs
IGJhaWwgb24gYW55IHByZWV4aXN0aW5nIGNvbXBsZXRlOiBVSQotICAgICAgICBpZiAoY29tcGxl
dGlvblBvcHVwV2FzT3BlbikKLSAgICAgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIg
ZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0gICAgfSBlbHNlIGlmICghX3By
aXZhdGUtPmNvbXBDb250cm9sbGVyIHx8ICFbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGZpbHRl
cktleURvd246ZXZlbnRdKSB7Ci0gICAgICAgIC8vIE5vdCBjb25zdW1lZCBieSBjb21wbGV0ZTog
cG9wdXAgd2luZG93Ci0gICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0
aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIGNhbGxTdXBlciA9IFlFUzsKLSAg
ICB9Ci0gICAgaWYgKGNhbGxTdXBlcikKLSAgICAgICAgW3N1cGVyIGtleURvd246ZXZlbnRdOwot
ICAgIGVsc2UKLSAgICAgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNd
OwotfQotCi0tICh2b2lkKWtleVVwOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVk
IGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVh
c2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8g
dGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGlu
c2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKLQotICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlE
b3duRXZlbnQgPT0gZXZlbnQpOwotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJv
dGVjdG9yID0gc2VsZjsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICBpZiAoY29yZUZyYW1lICYmICFldmVudFdhc1NlbnRUb1dlYkNvcmUpCi0gICAgICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKLSAgICBlbHNlCi0g
ICAgICAgIFtzdXBlciBrZXlVcDpldmVudF07Ci19Ci0KLS0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihO
U0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGlu
ZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8v
IGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmlu
ZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVu
dHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNv
ZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmIChjb3JlRnJhbWUpCi0gICAgICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgp
OwotICAgIAotICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7
Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBrZXlDb2RlID0gW2V2ZW50IGtleUNvZGVdOwotCi0gICAg
Ly9Eb24ndCBtYWtlIGFuIGV2ZW50IGZyb20gdGhlIG51bSBsb2NrIGFuZCBmdW5jdGlvbiBrZXlz
Ci0gICAgaWYgKGNvcmVGcmFtZSAmJiBrZXlDb2RlICE9IDAgJiYga2V5Q29kZSAhPSAxMCAmJiBr
ZXlDb2RlICE9IDYzKSB7Ci0gICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2
ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgICAgICAKLSAgICBbc3VwZXIgZmxhZ3NDaGFuZ2VkOmV2ZW50XTsKLX0KLQotLSAoaWQp
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQotewot
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUNo
aWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0g
X2FjY2Vzc2liaWxpdHlUcmVlXTsKLSAgICAgICAgaWYgKGFjY1RyZWUpCi0gICAgICAgICAgICBy
ZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmFjY1RyZWVdOwotICAgICAgICByZXR1cm4g
bmlsOwotICAgIH0KLSAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTphdHRyaWJ1dGVOYW1lXTsKLX0KLQotLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1l
bnQKLXsKLSAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVl
XTsKLSAgICBpZiAoYWNjVHJlZSkKLSAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxp
dHlGb2N1c2VkVUlFbGVtZW50XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQpYWNjZXNz
aWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICBpZCBhY2NUcmVlID0gW1tzZWxm
IF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKLSAgICBpZiAoYWNjVHJlZSkgewotICAgICAg
ICBOU1BvaW50IHdpbmRvd0Nvb3JkID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFz
ZTpwb2ludF07Ci0gICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpb
c2VsZiBjb252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZpZXc6bmlsXV07Ci0gICAgfQotICAg
IHJldHVybiBzZWxmOwotfQotCi0tIChpZClfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6
KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2Fj
Y2Vzc2liaWxpdHlUcmVlXTsKLSAgICBpZiAoIWFjY1RyZWUpCi0gICAgICAgIHJldHVybiBzZWxm
OwotICAgIGlkIHBhcmVudCA9IFthY2NUcmVlIF9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3Vidmll
dzpzdWJ2aWV3XTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAg
cmV0dXJuIHBhcmVudDsKLX0KLQotLSAodm9pZCljZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVh
OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+cmV2ZWFs
U2VsZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOwotfQotCi0tIChO
U0RhdGEgKilfc2VsZWN0aW9uU3RhcnRGb250QXR0cmlidXRlc0FzUlRGCi17Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICpzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJ4
IgotICAgICAgICBhdHRyaWJ1dGVzOmNvcmVGcmFtZSA/IGNvcmVGcmFtZS0+Zm9udEF0dHJpYnV0
ZXNGb3JTZWxlY3Rpb25TdGFydCgpIDogbmlsXTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbc3RyaW5n
IFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0
cmlidXRlczpuaWxdOwotICAgIFtzdHJpbmcgcmVsZWFzZV07Ci0gICAgcmV0dXJuIGRhdGE7Ci19
Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9mb250QXR0cmlidXRlc0Zyb21Gb250UGFzdGVib2FyZAot
ewotICAgIE5TUGFzdGVib2FyZCAqZm9udFBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3Rl
Ym9hcmRXaXRoTmFtZTpOU0ZvbnRQYm9hcmRdOwotICAgIGlmIChmb250UGFzdGVib2FyZCA9PSBu
aWwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgTlNEYXRhICpkYXRhID0gW2ZvbnRQYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOk5TRm9udFBib2FyZFR5cGVdOwotICAgIGlmIChkYXRhID09IG5pbCB8
fCBbZGF0YSBsZW5ndGhdID09IDApCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgLy8gTlNUZXh0
VmlldyBkb2VzIHNvbWV0aGluZyBtb3JlIGVmZmljaWVudCBieSBwYXJzaW5nIHRoZSBhdHRyaWJ1
dGVzIG9ubHksIGJ1dCB0aGF0J3Mgbm90IGF2YWlsYWJsZSBpbiBBUEkuCi0gICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpzdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
UlRGOmRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdIGF1dG9yZWxlYXNlXTsKLSAgICBpZiAo
c3RyaW5nID09IG5pbCB8fCBbc3RyaW5nIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gW3N0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgMSldOwotfQotCi0tIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGUKLXsK
LSAgICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uXTsKLX0KLQotLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAq
KWNvbG9yCi17Ci0gICAgTlNDb2xvciAqcmdiQ29sb3IgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9y
U3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAgLy8gRklYTUU6IElmIGNvbG9y
IGlzIG5vbi1uaWwgYW5kIHJnYkNvbG9yIGlzIG5pbCwgdGhhdCBtZWFucyB3ZSBnb3Qgc29tZSBr
aW5kCi0gICAgLy8gb2YgZmFuY3kgY29sb3IgdGhhdCBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gUkdC
LiBDaGFuZ2luZyB0aGF0IHRvICJ0cmFuc3BhcmVudCIKLSAgICAvLyBtaWdodCBub3QgYmUgZ3Jl
YXQsIGJ1dCBpdCdzIHByb2JhYmx5IE9LLgotICAgIGlmIChyZ2JDb2xvciA9PSBuaWwpCi0gICAg
ICAgIHJldHVybiBAInRyYW5zcGFyZW50IjsKLSAgICBmbG9hdCByID0gW3JnYkNvbG9yIHJlZENv
bXBvbmVudF07Ci0gICAgZmxvYXQgZyA9IFtyZ2JDb2xvciBncmVlbkNvbXBvbmVudF07Ci0gICAg
ZmxvYXQgYiA9IFtyZ2JDb2xvciBibHVlQ29tcG9uZW50XTsKLSAgICBmbG9hdCBhID0gW3JnYkNv
bG9yIGFscGhhQ29tcG9uZW50XTsKLSAgICBpZiAoYSA9PSAwKQotICAgICAgICByZXR1cm4gQCJ0
cmFuc3BhcmVudCI7Ci0gICAgaWYgKHIgPT0gMCAmJiBnID09IDAgJiYgYiA9PSAwICYmIGEgPT0g
MSkKLSAgICAgICAgcmV0dXJuIEAiYmxhY2siOwotICAgIGlmIChyID09IDEgJiYgZyA9PSAxICYm
IGIgPT0gMSAmJiBhID09IDEpCi0gICAgICAgIHJldHVybiBAIndoaXRlIjsKLSAgICAvLyBGSVhN
RTogTG90cyBtb3JlIG5hbWVkIGNvbG9ycy4gTWF5YmUgd2UgY291bGQgdXNlIHRoZSB0YWJsZSBp
biBXZWJDb3JlPwotICAgIGlmIChhID09IDEpCi0gICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAInJnYiglLjBmLCUuMGYsJS4wZikiLCByICogMjU1LCBnICogMjU1LCBi
ICogMjU1XTsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2JhKCUu
MGYsJS4wZiwlLjBmLCVmKSIsIHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFdOwotfQotCi0t
IChOU1N0cmluZyAqKV9zaGFkb3dBc1N0cmluZzooTlNTaGFkb3cgKilzaGFkb3cKLXsKLSAgICBp
ZiAoc2hhZG93ID09IG5pbCkKLSAgICAgICAgcmV0dXJuIEAibm9uZSI7Ci0gICAgTlNTaXplIG9m
ZnNldCA9IFtzaGFkb3cgc2hhZG93T2Zmc2V0XTsKLSAgICBmbG9hdCBibHVyUmFkaXVzID0gW3No
YWRvdyBzaGFkb3dCbHVyUmFkaXVzXTsKLSAgICBpZiAob2Zmc2V0LndpZHRoID09IDAgJiYgb2Zm
c2V0LmhlaWdodCA9PSAwICYmIGJsdXJSYWRpdXMgPT0gMCkKLSAgICAgICAgcmV0dXJuIEAibm9u
ZSI7Ci0gICAgTlNDb2xvciAqY29sb3IgPSBbc2hhZG93IHNoYWRvd0NvbG9yXTsKLSAgICBpZiAo
Y29sb3IgPT0gbmlsKQotICAgICAgICByZXR1cm4gQCJub25lIjsKLSAgICAvLyBGSVhNRTogSGFu
ZGxlIG5vbi1pbnRlZ3JhbCB2YWx1ZXMgaGVyZT8KLSAgICBpZiAoYmx1clJhZGl1cyA9PSAwKQot
ICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlLjBmcHggJS4w
ZnB4IiwgW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdLCBvZmZzZXQud2lkdGgsIG9mZnNldC5o
ZWlnaHRdOwotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICUuMGZw
eCAlLjBmcHggJS4wZnB4IiwgW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdLCBvZmZzZXQud2lk
dGgsIG9mZnNldC5oZWlnaHQsIGJsdXJSYWRpdXNdOwotfQotCi0tIChET01DU1NTdHlsZURlY2xh
cmF0aW9uICopX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5Ci17Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlT
dHlsZV07Ci0KLSAgICBOU0NvbG9yICpjb2xvciA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpO
U0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIFtzdHlsZSBzZXRCYWNrZ3JvdW5k
Q29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdXTsKLQotICAgIE5TRm9udCAqZm9udCA9
IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAo
IWZvbnQpIHsKLSAgICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6QCJIZWx2ZXRpY2EiXTsKLSAg
ICAgICAgW3N0eWxlIHNldEZvbnRTaXplOkAiMTJweCJdOwotICAgICAgICBbc3R5bGUgc2V0Rm9u
dFdlaWdodDpAIm5vcm1hbCJdOwotICAgICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOkAibm9ybWFs
Il07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIG1vcmUgc29w
aGlzdGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxlIGZhbWlseSBuYW1l
cwotICAgICAgICAvLyB3aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUgcXVvdGUgb3IgYmFja3Ns
YXNoIGluIHRoZWlyIG5hbWVzLgotICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWlseTpbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiclQCciLCBbZm9udCBmYW1pbHlOYW1lXV1dOwotICAgICAg
ICBbc3R5bGUgc2V0Rm9udFNpemU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlMC5mcHgi
LCBbZm9udCBwb2ludFNpemVdXV07Ci0gICAgICAgIC8vIEZJWE1FOiBNYXAgdG8gdGhlIGVudGly
ZSByYW5nZSBvZiBDU1Mgd2VpZ2h0IHZhbHVlcy4KLSAgICAgICAgaWYgKFtmbSB3ZWlnaHRPZkZv
bnQ6Zm9udF0gPj0gTUlOX0JPTERfV0VJR0hUKQotICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRX
ZWlnaHQ6QCJib2xkIl07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRGb250
V2VpZ2h0OkAibm9ybWFsIl07Ci0gICAgICAgIGlmIChbZm0gdHJhaXRzT2ZGb250OmZvbnRdICYg
TlNJdGFsaWNGb250TWFzaykKLSAgICAgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6QCJpdGFs
aWMiXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRTdHlsZTpAIm5v
cm1hbCJdOwotICAgIH0KLQotICAgIGNvbG9yID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5T
Rm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgW3N0eWxlIHNldENvbG9yOmNvbG9y
ID8gW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdIDogKE5TU3RyaW5nICopQCJibGFjayJdOwot
Ci0gICAgTlNTaGFkb3cgKnNoYWRvdyA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1NoYWRv
d0F0dHJpYnV0ZU5hbWVdOwotICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OltzZWxmIF9zaGFkb3dB
c1N0cmluZzpzaGFkb3ddXTsKLQotICAgIGludCBzdHJpa2V0aHJvdWdoSW50ID0gW1tkaWN0aW9u
YXJ5IG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZh
bHVlXTsKLQotICAgIGludCBzdXBlcnNjcmlwdEludCA9IFtbZGljdGlvbmFyeSBvYmplY3RGb3JL
ZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpZiAoc3VwZXJz
Y3JpcHRJbnQgPiAwKQotICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1cGVyIl07
Ci0gICAgZWxzZSBpZiAoc3VwZXJzY3JpcHRJbnQgPCAwKQotICAgICAgICBbc3R5bGUgc2V0VmVy
dGljYWxBbGlnbjpAInN1YiJdOwotICAgIGVsc2UKLSAgICAgICAgW3N0eWxlIHNldFZlcnRpY2Fs
QWxpZ246QCJiYXNlbGluZSJdOwotICAgIGludCB1bmRlcmxpbmVJbnQgPSBbW2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0g
ICAgLy8gRklYTUU6IFVuZGVybGluZSB3aW5zIGhlcmUgaWYgd2UgaGF2ZSBib3RoIChzZWUgYnVn
IDM3OTA0NDMpLgotICAgIGlmIChzdHJpa2V0aHJvdWdoSW50ID09IE5TVW5kZXJsaW5lU3R5bGVO
b25lICYmIHVuZGVybGluZUludCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKLSAgICAgICAgW3N0
eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1
ZTpAIm5vbmUiIHByaW9yaXR5OkAiIl07Ci0gICAgZWxzZSBpZiAodW5kZXJsaW5lSW50ID09IE5T
VW5kZXJsaW5lU3R5bGVOb25lKQotICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwt
dGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibGluZS10aHJvdWdoIiBwcmlvcml0
eTpAIiJdOwotICAgIGVsc2UKLSAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRl
eHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6QCIi
XTsKLQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotLSAodm9pZClfYXBwbHlTdHlsZVRvU2VsZWN0
aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KEVkaXRB
Y3Rpb24pdW5kb0FjdGlvbgotewotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9uKTsKLX0KLQotLSAodm9pZClfYXBwbHlQYXJh
Z3JhcGhTdHlsZVRvU2VsZWN0aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0
aFVuZG9BY3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgotewotICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9u
KTsKLX0KLQotLSAoQk9PTClfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICBBU1NFUlQoW3NlbGYgX3dlYlZpZXddKTsKLSAgICBpZiAoIVtbW3NlbGYgX3dl
YlZpZXddIHByZWZlcmVuY2VzXSByZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzXSkK
LSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAg
ICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgaWYgKChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0RldmljZUluZGVwZW5kZW50TW9kaWZpZXJGbGFnc01hc2spICE9IE5TQ29tbWFuZEtleU1hc2sp
Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBOU1N0cmluZyAqc3RyaW5nID0gW2V2ZW50
IGNoYXJhY3RlcnNdOwotICAgIGlmIChbc3RyaW5nIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJi
Il0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAgICBbc2VsZiBleGVjdXRlQ29yZUNvbW1hbmRC
eU5hbWU6IlRvZ2dsZUJvbGQiXTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYg
KFtzdHJpbmcgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImkiXSA9PSBOU09yZGVyZWRTYW1lKSB7
Ci0gICAgICAgIFtzZWxmIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZToiVG9nZ2xlSXRhbGljIl07
Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBOTzsKLX0KLQot
LSAoQk9PTClwZXJmb3JtS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdo
dCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwot
ICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBh
dXRvcmVsZWFzZV07Ci0KLSAgICBpZiAoW3NlbGYgX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDpl
dmVudF0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgCi0gICAgQk9PTCBldmVudFdhc1NlbnRU
b1dlYkNvcmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7Ci0gICAgQk9PTCBy
ZXQgPSBOTzsKLQotICAgIFtfcHJpdmF0ZS0+a2V5RG93bkV2ZW50IHJlbGVhc2VdOwotICAgIF9w
cml2YXRlLT5rZXlEb3duRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKLSAgICAKLSAgICBbc2VsZiBy
ZXRhaW5dOwotCi0gICAgLy8gUGFzcyBjb21tYW5kLWtleSBjb21ib3MgdGhyb3VnaCBXZWJDb3Jl
IGlmIHRoZXJlIGlzIGEga2V5IGJpbmRpbmcgYXZhaWxhYmxlIGZvcgotICAgIC8vIHRoaXMgZXZl
bnQuIFRoaXMgbGV0cyB3ZWIgcGFnZXMgaGF2ZSBhIGNyYWNrIGF0IGludGVyY2VwdGluZyBjb21t
YW5kLW1vZGlmaWVkIGtleXByZXNzZXMuCi0gICAgLy8gQnV0IGRvbid0IGRvIGl0IGlmIHdlIGhh
dmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBldmVudC4KLSAgICAvLyBQcmVzc2luZyBFc2MgcmVzdWx0
cyBpbiBhIGZha2UgZXZlbnQgYmVpbmcgc2VudCAtIGRvbid0IHBhc3MgaXQgdG8gV2ViQ29yZS4K
LSAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBldmVudCA9PSBbTlNBcHAgY3VycmVu
dEV2ZW50XSAmJiBzZWxmID09IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXSkKLSAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBy
ZXQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKLQotICAgIGlmICgh
cmV0KQotICAgICAgICByZXQgPSBbc3VwZXIgcGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOwot
Ci0gICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgCi0gICAgcmV0dXJuIHJldDsKLX0KLQotLSAodm9p
ZCljb3B5Rm9udDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgLy8g
UHV0IFJURiB3aXRoIGZvbnQgYXR0cmlidXRlcyBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICAvLyBN
YXliZSBsYXRlciB3ZSBzaG91bGQgYWRkIGEgcGFzdGVib2FyZCB0eXBlIHRoYXQgY29udGFpbnMg
Q1NTIHRleHQgZm9yICJuYXRpdmUiIGNvcHkgYW5kIHBhc3RlIGZvbnQuCi0gICAgTlNQYXN0ZWJv
YXJkICpmb250UGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5T
Rm9udFBib2FyZF07Ci0gICAgW2ZvbnRQYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpbTlNBcnJheSBh
cnJheVdpdGhPYmplY3Q6TlNGb250UGJvYXJkVHlwZV0gb3duZXI6bmlsXTsKLSAgICBbZm9udFBh
c3RlYm9hcmQgc2V0RGF0YTpbc2VsZiBfc2VsZWN0aW9uU3RhcnRGb250QXR0cmlidXRlc0FzUlRG
XSBmb3JUeXBlOk5TRm9udFBib2FyZFR5cGVdOwotfQotCi0tICh2b2lkKXBhc3RlRm9udDooaWQp
c2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgLy8gUmVhZCBSVEYgd2l0aCBm
b250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgcGFzdGVib2FyZC4KLSAgICAvLyBNYXliZSBsYXRlciB3
ZSBzaG91bGQgYWRkIGEgcGFzdGVib2FyZCB0eXBlIHRoYXQgY29udGFpbnMgQ1NTIHRleHQgZm9y
ICJuYXRpdmUiIGNvcHkgYW5kIHBhc3RlIGZvbnQuCi0gICAgW3NlbGYgX2FwcGx5U3R5bGVUb1Nl
bGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udEF0dHJpYnV0ZXM6W3NlbGYgX2ZvbnRBdHRyaWJ1
dGVzRnJvbUZvbnRQYXN0ZWJvYXJkXV0gd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblBhc3RlRm9u
dF07Ci19Ci0KLS0gKHZvaWQpcGFzdGVBc1JpY2hUZXh0OihpZClzZW5kZXIKLXsKLSAgICBDT01N
QU5EX1BST0xPR1VFCi0KLSAgICAvLyBTaW5jZSByaWNoIHRleHQgYWx3YXlzIGJlYXRzIHBsYWlu
IHRleHQgd2hlbiBib3RoIGFyZSBvbiB0aGUgcGFzdGVib2FyZCwgaXQncyBub3QKLSAgICAvLyBj
bGVhciBob3cgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBwbGFpbiBvbGQgcGFzdGUuCi0gICAgW3Nl
bGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0g
YWxsb3dQbGFpblRleHQ6Tk9dOwotfQotCi0tIChOU0ZvbnQgKilfb3JpZ2luYWxGb250QQotewot
ICAgIHJldHVybiBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFt
aWx5OkAiSGVsdmV0aWNhIiB0cmFpdHM6MCB3ZWlnaHQ6U1RBTkRBUkRfV0VJR0hUIHNpemU6MTAu
MGZdOwotfQotCi0tIChOU0ZvbnQgKilfb3JpZ2luYWxGb250QgotewotICAgIHJldHVybiBbW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAiVGltZXMiIHRy
YWl0czpOU0ZvbnRJdGFsaWNUcmFpdCB3ZWlnaHQ6U1RBTkRBUkRfQk9MRF9XRUlHSFQgc2l6ZTox
Mi4wZl07Ci19Ci0KLS0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250ICopYgotewotICAgIC8vIFNp
bmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpcmVjdGx5IGFzayBOU0ZvbnRNYW5hZ2VyIHdoYXQgc3R5
bGUgY2hhbmdlIGl0J3MgZ29pbmcgdG8gZG8KLSAgICAvLyB3ZSBpbnN0ZWFkIHBhc3MgdHdvICJz
cGVjaW1lbiIgZm9udHMgdG8gaXQgYW5kIGxldCBpdCBjaGFuZ2UgdGhlbS4gV2UgdGhlbiBkZWR1
Y2Ugd2hhdAotICAgIC8vIHN0eWxlIGNoYW5nZSBpdCB3YXMgZG9pbmcgYnkgbG9va2luZyBhdCB3
aGF0IGhhcHBlbmVkIHRvIGVhY2ggb2YgdGhlIHR3byBmb250cy4KLSAgICAvLyBTbyBpZiBpdCB3
YXMgbWFraW5nIHRoZSB0ZXh0IGJvbGQsIGJvdGggZm9udHMgd2lsbCBiZSBib2xkIGFmdGVyIHRo
ZSBmYWN0LgotCi0gICAgaWYgKGEgPT0gbmlsIHx8IGIgPT0gbmlsKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpmbSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXTsKLQotICAgIE5TRm9udCAqb2EgPSBbc2VsZiBfb3JpZ2luYWxGb250QV07Ci0KLSAgICBO
U1N0cmluZyAqYUZhbWlseU5hbWUgPSBbYSBmYW1pbHlOYW1lXTsKLSAgICBOU1N0cmluZyAqYkZh
bWlseU5hbWUgPSBbYiBmYW1pbHlOYW1lXTsKLQotICAgIGludCBhUG9pbnRTaXplID0gKGludClb
YSBwb2ludFNpemVdOwotICAgIGludCBiUG9pbnRTaXplID0gKGludClbYiBwb2ludFNpemVdOwot
Ci0gICAgaW50IGFXZWlnaHQgPSBbZm0gd2VpZ2h0T2ZGb250OmFdOwotICAgIGludCBiV2VpZ2h0
ID0gW2ZtIHdlaWdodE9mRm9udDpiXTsKLQotICAgIEJPT0wgYUlzSXRhbGljID0gKFtmbSB0cmFp
dHNPZkZvbnQ6YV0gJiBOU0l0YWxpY0ZvbnRNYXNrKSAhPSAwOwotICAgIEJPT0wgYklzSXRhbGlj
ID0gKFtmbSB0cmFpdHNPZkZvbnQ6Yl0gJiBOU0l0YWxpY0ZvbnRNYXNrKSAhPSAwOwotCi0gICAg
aWYgKFthRmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6YkZhbWlseU5hbWVdKSB7Ci0gICAgICAg
IE5TU3RyaW5nICpmYW1pbHlOYW1lRm9yQ1NTID0gYUZhbWlseU5hbWU7Ci0KLSAgICAgICAgLy8g
VGhlIGZhbWlseSBuYW1lIG1heSBub3QgYmUgc3BlY2lmaWMgZW5vdWdoIHRvIGdldCB1cyB0aGUg
Zm9udCBzcGVjaWZpZWQuCi0gICAgICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBvbmx5IHdheSB0
byBnZXQgZXhhY3RseSB3aGF0IHdlIGFyZSBsb29raW5nIGZvciBpcyB0byB1c2UKLSAgICAgICAg
Ly8gdGhlIFBvc3RzY3JpcHQgbmFtZS4KLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgdGhlIGZv
bnQgdGhlIHNhbWUgd2F5IHRoZSByZW5kZXJpbmcgY29kZSB3b3VsZCBsYXRlciBpZiBpdCBlbmNv
dW50ZXJlZCB0aGlzIENTUy4KLSAgICAgICAgTlNGb250VHJhaXRNYXNrIHRyYWl0cyA9IGFJc0l0
YWxpYyA/IE5TRm9udEl0YWxpY1RyYWl0IDogMDsKLSAgICAgICAgTlNGb250ICpmb3VuZEZvbnQg
PSBXZWJDb3JlRmluZEZvbnQoYUZhbWlseU5hbWUsIHRyYWl0cywgYVdlaWdodCwgYVBvaW50U2l6
ZSk7Ci0KLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZmluZCBhIGZvbnQgd2l0aCB0aGUgc2FtZSBQ
b3N0c2NyaXB0IG5hbWUsIHRoZW4gd2UnbGwgaGF2ZSB0byB1c2UgdGhlCi0gICAgICAgIC8vIFBv
c3RzY3JpcHQgbmFtZSB0byBtYWtlIHRoZSBDU1Mgc3BlY2lmaWMgZW5vdWdoLgotICAgICAgICBp
ZiAoIVtbZm91bmRGb250IGZvbnROYW1lXSBpc0VxdWFsVG9TdHJpbmc6W2EgZm9udE5hbWVdXSkK
LSAgICAgICAgICAgIGZhbWlseU5hbWVGb3JDU1MgPSBbYSBmb250TmFtZV07Ci0KLSAgICAgICAg
Ly8gRklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2Fu
dCB0byBoYW5kbGUgZmFtaWx5IG5hbWVzCi0gICAgICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtl
IHNpbmdsZSBxdW90ZSBvciBiYWNrc2xhc2ggaW4gdGhlaXIgbmFtZXMuCi0gICAgICAgIFtzdHls
ZSBzZXRGb250RmFtaWx5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJyVAJyIsIGZhbWls
eU5hbWVGb3JDU1NdXTsKLSAgICB9Ci0KLSAgICBpbnQgc29hID0gKGludClbb2EgcG9pbnRTaXpl
XTsKLSAgICBpZiAoYVBvaW50U2l6ZSA9PSBiUG9pbnRTaXplKQotICAgICAgICBbc3R5bGUgc2V0
Rm9udFNpemU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZHB4IiwgYVBvaW50U2l6ZV1d
OwotICAgIGVsc2UgaWYgKGFQb2ludFNpemUgPCBzb2EpCi0gICAgICAgIFtzdHlsZSBfc2V0Rm9u
dFNpemVEZWx0YTpAIi0xcHgiXTsKLSAgICBlbHNlIGlmIChhUG9pbnRTaXplID4gc29hKQotICAg
ICAgICBbc3R5bGUgX3NldEZvbnRTaXplRGVsdGE6QCIxcHgiXTsKLQotICAgIGlmIChhV2VpZ2h0
ID09IGJXZWlnaHQpCi0gICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OmFXZWlnaHQgPiBNSU5f
Qk9MRF9XRUlHSFQgPyBAImJvbGQiIDogQCJub3JtYWwiXTsKLQotICAgIGlmIChhSXNJdGFsaWMg
PT0gYklzSXRhbGljKQotICAgICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOmFJc0l0YWxpYyA/IEAi
aXRhbGljIiA6ICBAIm5vcm1hbCJdOwotfQotCi0tIChET01DU1NTdHlsZURlY2xhcmF0aW9uICop
X3N0eWxlRnJvbUZvbnRNYW5hZ2VyT3BlcmF0aW9uCi17Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpm
bSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLQotICAgIE5TRm9udCAqb2Eg
PSBbc2VsZiBfb3JpZ2luYWxGb250QV07Ci0gICAgTlNGb250ICpvYiA9IFtzZWxmIF9vcmlnaW5h
bEZvbnRCXTsgICAgCi0gICAgW3NlbGYgX2FkZFRvU3R5bGU6c3R5bGUgZm9udEE6W2ZtIGNvbnZl
cnRGb250Om9hXSBmb250QjpbZm0gY29udmVydEZvbnQ6b2JdXTsKLQotICAgIHJldHVybiBzdHls
ZTsKLX0KLQotLSAodm9pZCljaGFuZ2VGb250OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BS
T0xPR1VFCi0KLSAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZy
b21Gb250TWFuYWdlck9wZXJhdGlvbl0gd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblNldEZvbnRd
OwotfQotCi0tIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRm9yQXR0cmlidXRlQ2hh
bmdlOihpZClzZW5kZXIKLXsKLSAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtz
ZWxmIF9lbXB0eVN0eWxlXTsKLQotICAgIE5TU2hhZG93ICpzaGFkb3cgPSBbW05TU2hhZG93IGFs
bG9jXSBpbml0XTsKLSAgICBbc2hhZG93IHNldFNoYWRvd09mZnNldDpOU01ha2VTaXplKDEsIDEp
XTsKLQotICAgIE5TRGljdGlvbmFyeSAqb2EgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6Ci0gICAgICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRBXSwgTlNGb250QXR0
cmlidXRlTmFtZSwKLSAgICAgICAgbmlsXTsKLSAgICBOU0RpY3Rpb25hcnkgKm9iID0gW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgotICAgICAgICBbTlNDb2xvciBi
bGFja0NvbG9yXSwgTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICBbc2Vs
ZiBfb3JpZ2luYWxGb250Ql0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIFtOU0NvbG9y
IHdoaXRlQ29sb3JdLCBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIHNo
YWRvdywgTlNTaGFkb3dBdHRyaWJ1dGVOYW1lLAotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSwgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1
dGVOYW1lLAotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDoxXSwgTlNTdXBlcnNjcmlw
dEF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJs
aW5lU3R5bGVTaW5nbGVdLCBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwKLSAgICAgICAg
bmlsXTsKLQotICAgIFtzaGFkb3cgcmVsZWFzZV07Ci0KLSNpZiAwCi0KLU5TT2JsaXF1ZW5lc3NB
dHRyaWJ1dGVOYW1lICAgICAgICAvKiBmbG9hdDsgc2tldyB0byBiZSBhcHBsaWVkIHRvIGdseXBo
cywgZGVmYXVsdCAwOiBubyBza2V3ICovCi0gICAgLy8gZm9udC1zdHlsZSwgYnV0IHRoYXQgaXMg
anVzdCBhbiBvbi1vZmYgc3dpdGNoCi0KLU5TRXhwYW5zaW9uQXR0cmlidXRlTmFtZSAgICAgICAg
ICAvKiBmbG9hdDsgbG9nIG9mIGV4cGFuc2lvbiBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byBnbHlw
aHMsIGRlZmF1bHQgMDogbm8gZXhwYW5zaW9uICovCi0gICAgLy8gZm9udC1zdHJldGNoPwotCi1O
U0tlcm5BdHRyaWJ1dGVOYW1lICAgICAgICAgICAgICAgLyogZmxvYXQsIGFtb3VudCB0byBtb2Rp
ZnkgZGVmYXVsdCBrZXJuaW5nLCBpZiAwLCBrZXJuaW5nIG9mZiAqLwotICAgIC8vIGxldHRlci1z
cGFjaW5nPyBwcm9iYWJseSBub3QgZ29vZCBlbm91Z2gKLQotTlNVbmRlcmxpbmVDb2xvckF0dHJp
YnV0ZU5hbWUgICAgIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQg
Y29sb3IgKi8KLU5TU3RyaWtldGhyb3VnaENvbG9yQXR0cmlidXRlTmFtZSAvKiBOU0NvbG9yLCBk
ZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCi0gICAgLy8gdGV4dC1kZWNv
cmF0aW9uLWNvbG9yPwotCi1OU0xpZ2F0dXJlQXR0cmlidXRlTmFtZSAgICAgICAgICAgLyogaW50
LCBkZWZhdWx0IDE6IGRlZmF1bHQgbGlnYXR1cmVzLCAwOiBubyBsaWdhdHVyZXMsIDI6IGFsbCBs
aWdhdHVyZXMgKi8KLU5TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVOYW1lICAgICAvKiBmbG9hdCwg
aW4gcG9pbnRzOyBvZmZzZXQgZnJvbSBiYXNlbGluZSwgZGVmYXVsdCAwICovCi1OU1N0cm9rZVdp
ZHRoQXR0cmlidXRlTmFtZSAgICAgICAgLyogZmxvYXQsIGluIHBlcmNlbnQgb2YgZm9udCBwb2lu
dCBzaXplLCBkZWZhdWx0IDA6IG5vIHN0cm9rZTsgcG9zaXRpdmUgZm9yIHN0cm9rZSBhbG9uZSwg
bmVnYXRpdmUgZm9yIHN0cm9rZSBhbmQgZmlsbCAoYSB0eXBpY2FsIHZhbHVlIGZvciBvdXRsaW5l
ZCB0ZXh0IHdvdWxkIGJlIDMuMCkgKi8KLU5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAg
ICAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCi0g
ICAgLy8gbmVlZCBleHRlbnNpb25zPwotCi0jZW5kaWYKLSAgICAKLSAgICBOU0RpY3Rpb25hcnkg
KmEgPSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9hXTsKLSAgICBOU0RpY3Rpb25hcnkgKmIg
PSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9iXTsKLQotICAgIE5TQ29sb3IgKmNhID0gW2Eg
b2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgTlNDb2xv
ciAqY2IgPSBbYiBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
LSAgICBpZiAoY2EgPT0gY2IpIHsKLSAgICAgICAgW3N0eWxlIHNldEJhY2tncm91bmRDb2xvcjpb
c2VsZiBfY29sb3JBc1N0cmluZzpjYV1dOwotICAgIH0KLQotICAgIFtzZWxmIF9hZGRUb1N0eWxl
OnN0eWxlIGZvbnRBOlthIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXSBmb250Qjpb
YiBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV1dOwotCi0gICAgY2EgPSBbYSBvYmpl
Y3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBjYiA9IFtiIG9i
amVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIGlmIChjYSA9
PSBjYikgewotICAgICAgICBbc3R5bGUgc2V0Q29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y2Fd
XTsKLSAgICB9Ci0KLSAgICBOU1NoYWRvdyAqc2hhID0gW2Egb2JqZWN0Rm9yS2V5Ok5TU2hhZG93
QXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKHNoYSkKLSAgICAgICAgW3N0eWxlIHNldFRleHRTaGFk
b3c6W3NlbGYgX3NoYWRvd0FzU3RyaW5nOnNoYV1dOwotICAgIGVsc2UgaWYgKFtiIG9iamVjdEZv
cktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdID09IG5pbCkKLSAgICAgICAgW3N0eWxlIHNldFRl
eHRTaGFkb3c6QCJub25lIl07Ci0KLSAgICBpbnQgc2EgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TU3Ry
aWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIGludCBzYiA9IFtb
YiBvYmplY3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1
ZV07Ci0gICAgaWYgKHNhID09IHNiKSB7Ci0gICAgICAgIGlmIChzYSA9PSBOU1VuZGVybGluZVN0
eWxlTm9uZSkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRl
Y29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOyAKLSAgICAg
ICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJubyBsaW5lLXRocm91Z2giIHJhdGhlciB0aGFuICJu
b25lIgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0
bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibGluZS10aHJvdWdoIiBwcmlv
cml0eTpAIiJdOwotICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gImFkZCBsaW5lLXRocm91
Z2giIHJhdGhlciB0aGFuICJsaW5lLXRocm91Z2giCi0gICAgfQotCi0gICAgc2EgPSBbW2Egb2Jq
ZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0gICAgc2Ig
PSBbW2Igb2JqZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07
Ci0gICAgaWYgKHNhID09IHNiKSB7Ci0gICAgICAgIGlmIChzYSA+IDApCi0gICAgICAgICAgICBb
c3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1cGVyIl07Ci0gICAgICAgIGVsc2UgaWYgKHNhIDwg
MCkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3ViIl07Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAiYmFzZWxpbmUiXTsK
LSAgICB9Ci0KLSAgICBpbnQgdWEgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVB
dHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0gICAgaW50IHViID0gW1tiIG9iamVjdEZvcktleTpO
U1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIGlmICh1YSA9PSB1
YikgewotICAgICAgICBpZiAodWEgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCi0gICAgICAgICAg
ICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3Qi
IHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKLSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBt
ZWFuICJubyB1bmRlcmxpbmUiIHJhdGhlciB0aGFuICJub25lIgotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1l
ZmZlY3QiIHZhbHVlOkAidW5kZXJsaW5lIiBwcmlvcml0eTpAIiJdOwotICAgICAgICAgICAgLy8g
d2UgcmVhbGx5IG1lYW4gImFkZCB1bmRlcmxpbmUiIHJhdGhlciB0aGFuICJ1bmRlcmxpbmUiCi0g
ICAgfQotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0tICh2b2lkKWNoYW5nZUF0dHJpYnV0ZXM6
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9hcHBseVN0
eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRm9yQXR0cmlidXRlQ2hhbmdlOnNlbmRlcl0gd2l0
aFVuZG9BY3Rpb246RWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXNdOwotfQotCi0tIChET01DU1NT
dHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6KFNFTClz
ZWxlY3RvcgotewotICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2Vt
cHR5U3R5bGVdOwotCi0gICAgQVNTRVJUKFtzdHlsZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0
b3JdKTsKLSAgICBbc3R5bGUgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6W3Nl
bGYgX2NvbG9yQXNTdHJpbmc6W1tOU0NvbG9yUGFuZWwgc2hhcmVkQ29sb3JQYW5lbF0gY29sb3Jd
XV07Ci0gICAgCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0tIChFZGl0QWN0aW9uKV91bmRvQWN0
aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIGlmIChz
ZWxlY3RvciA9PSBAc2VsZWN0b3Ioc2V0QmFja2dyb3VuZENvbG9yOikpCi0gICAgICAgIHJldHVy
biBFZGl0QWN0aW9uU2V0QmFja2dyb3VuZENvbG9yOyAgICAKLSAgICByZXR1cm4gRWRpdEFjdGlv
blNldENvbG9yOwotfQotCi0tICh2b2lkKV9jaGFuZ2VDU1NDb2xvclVzaW5nU2VsZWN0b3I6KFNF
TClzZWxlY3RvciBpblJhbmdlOihET01SYW5nZSAqKXJhbmdlCi17Ci0gICAgRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3Rv
cjpzZWxlY3Rvcl07Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAg
ICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmll
dyBzaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOnJhbmdlXSkKLSAg
ICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAg
ICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShjb3JlKHN0eWxlKSwgW3NlbGYg
X3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxlY3Rvcl0pOwotfQotCi0t
ICh2b2lkKWNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOihpZClzZW5kZXIKLXsKLSAgICBD
T01NQU5EX1BST0xPR1VFCi0KLSAgICAvLyBNaW1pY2tpbmcgTlNUZXh0VmlldywgdGhpcyBtZXRo
b2Qgc2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlCi0gICAgLy8gZW50aXJlIGRvY3Vt
ZW50LiBUaGVyZSBpcyBubyBOU1RleHRWaWV3IEFQSSBmb3Igc2V0dGluZyB0aGUgYmFja2dyb3Vu
ZAotICAgIC8vIGNvbG9yIG9uIHRoZSBzZWxlY3RlZCByYW5nZSBvbmx5LiBOb3RlIHRoYXQgdGhp
cyBtZXRob2QgaXMgY3VycmVudGx5Ci0gICAgLy8gbmV2ZXIgY2FsbGVkIGZyb20gdGhlIFVJIChz
ZWUgY29tbWVudCBpbiBjaGFuZ2VDb2xvcjopLgotICAgIC8vIEZJWE1FOiB0aGlzIGFjdHVhbGx5
IGhhcyBubyBlZmZlY3Qgd2hlbiBjYWxsZWQsIHByb2JhYmx5IGR1ZSB0byAzNjU0ODUwLiBfZG9j
dW1lbnRSYW5nZSBzZWVtcwotICAgIC8vIHRvIGRvIHRoZSByaWdodCB0aGluZyBiZWNhdXNlIGl0
IHdvcmtzIGluIHN0YXJ0U3BlYWtpbmc6LCBhbmQgSSBrbm93IHNldEJhY2tncm91bmRDb2xvcjog
ZG9lcyB0aGUKLSAgICAvLyByaWdodCB0aGluZyBiZWNhdXNlIEkgdGVzdGVkIGl0IHdpdGggW3Nl
bGYgX3NlbGVjdGVkUmFuZ2VdLgotICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IGFjdHVhbGx5IGFw
cGx5IHRoZSBzdHlsZSB0byB0aGUgZW50aXJlIHJhbmdlIGhlcmUsIGJlY2F1c2UgaXQgZW5kcyB1
cCBjYWxsaW5nCi0gICAgLy8gW2ZyYW1lIF9hcHBseVN0eWxlOl0sIHdoaWNoIG9wZXJhdGVzIG9u
IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gVG8gbWFrZSB0aGlzIHdvcmsgcmlnaHQsIHdlJ2xsCi0g
ICAgLy8gbmVlZCB0byBzYXZlIG9mZiB0aGUgc2VsZWN0aW9uLCB0ZW1wb3JhcmlseSBzZXQgaXQg
dG8gdGhlIGVudGlyZSByYW5nZSwgbWFrZSB0aGUgY2hhbmdlLCB0aGVuCi0gICAgLy8gcmVzdG9y
ZSB0aGUgb2xkIHNlbGVjdGlvbi4KLSAgICBbc2VsZiBfY2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVj
dG9yOkBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KSBpblJhbmdlOltzZWxmIF9kb2N1bWVu
dFJhbmdlXV07Ci19Ci0KLS0gKHZvaWQpY2hhbmdlQ29sb3I6KGlkKXNlbmRlcgotewotICAgIENP
TU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIEZJWE1FOiBpbiBOU1RleHRWaWV3LCB0aGlzIG1ldGhv
ZCBjYWxscyBjaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjogd2hlbiBhCi0gICAgLy8gcHJp
dmF0ZSBjYWxsIGhhcyBlYXJsaWVyIGJlZW4gbWFkZSBieSBbTlNGb250Rm9udEVmZmVjdHNCb3gg
Y2hhbmdlQ29sb3I6XSwgc2VlIDM2NzQ0OTMuIAotICAgIC8vIEFwcEtpdCB3aWxsIGhhdmUgdG8g
YmUgcmV2aXNlZCB0byBhbGxvdyB0aGlzIHRvIHdvcmsgd2l0aCBhbnl0aGluZyB0aGF0IGlzbid0
IGFuIAotICAgIC8vIE5TVGV4dFZpZXcuIEhvd2V2ZXIsIHRoaXMgbWlnaHQgbm90IGJlIHJlcXVp
cmVkIGZvciBUaWdlciwgc2luY2UgdGhlIGJhY2tncm91bmQtY29sb3IgCi0gICAgLy8gY2hhbmdp
bmcgYm94IGluIHRoZSBmb250IHBhbmVsIGRvZXNuJ3Qgd29yayBpbiBNYWlsICgzNjc0NDgxKSwg
dGhvdWdoIGl0IGRvZXMgaW4gVGV4dEVkaXQuCi0gICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVj
dGlvbjpbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0
Q29sb3I6KV0gCi0gICAgICAgICAgICAgICAgICB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uU2V0
Q29sb3JdOwotfQotCi0tICh2b2lkKV9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjooU0VMKXNl
bGVjdG9yCi17Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgW3NlbGYgc2VsZWN0V29y
ZDpuaWxdOwotICAgIE5TU3RyaW5nICp3b3JkID0gW1tmcmFtZSBfc2VsZWN0ZWRTdHJpbmddIHBl
cmZvcm1TZWxlY3RvcjpzZWxlY3Rvcl07Ci0gICAgLy8gRklYTUU6IERvZXMgdGhpcyBuZWVkIGEg
ZGlmZmVyZW50IGFjdGlvbiBjb250ZXh0IG90aGVyIHRoYW4gInR5cGVkIj8KLSAgICBpZiAoW3Nl
bGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3b3JkIGdpdmVuQWN0aW9uOldlYlZp
ZXdJbnNlcnRBY3Rpb25UeXBlZF0pCi0gICAgICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OndvcmQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOk5PXTsKLX0KLQot
LSAodm9pZCl1cHBlcmNhc2VXb3JkOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VF
Ci0KLSAgICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKHVwcGVy
Y2FzZVN0cmluZyldOwotfQotCi0tICh2b2lkKWxvd2VyY2FzZVdvcmQ6KGlkKXNlbmRlcgotewot
ICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxl
Y3RvcjpAc2VsZWN0b3IobG93ZXJjYXNlU3RyaW5nKV07Ci19Ci0KLS0gKHZvaWQpY2FwaXRhbGl6
ZVdvcmQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9j
aGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IoY2FwaXRhbGl6ZWRTdHJpbmcpXTsK
LX0KLQotLSAodm9pZCljb21wbGV0ZTooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dV
RQotCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IV9wcml2YXRlLT5jb21wQ29udHJvbGxlcikKLSAgICAgICAgX3ByaXZhdGUtPmNvbXBDb250cm9s
bGVyID0gW1tXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEhUTUxWaWV3
OnNlbGZdOwotICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZG9Db21wbGV0aW9uXTsKLX0K
LQotLSAodm9pZCljaGVja1NwZWxsaW5nOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xP
R1VFCi0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0g
ICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZygpOwot
fQotCi0tICh2b2lkKXNob3dHdWVzc1BhbmVsOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BS
T0xPR1VFCi0KLSAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBz
aGFyZWRTcGVsbENoZWNrZXJdOwotICAgIGlmICghY2hlY2tlcikgewotICAgICAgICBMT0dfRVJS
T1IoIk5vIE5TU3BlbGxDaGVja2VyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgTlNQYW5lbCAqc3BlbGxpbmdQYW5lbCA9IFtjaGVja2VyIHNwZWxsaW5nUGFuZWxdOwotI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIC8vIFBvc3QtVGlnZXIsIHRoaXMgbWVudSBpdGVt
IGlzIGEgc2hvdy9oaWRlIHRvZ2dsZSwgdG8gbWF0Y2ggQXBwS2l0LiBMZWF2ZSBUaWdlciBiZWhh
dmlvciBhbG9uZQotICAgIC8vIHRvIG1hdGNoIHJlc3Qgb2YgT1MgWC4KLSAgICBpZiAoW3NwZWxs
aW5nUGFuZWwgaXNWaXNpYmxlXSkgewotICAgICAgICBbc3BlbGxpbmdQYW5lbCBvcmRlck91dDpz
ZW5kZXJdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUt
PmVkaXRvcigpLT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcodHJ1ZSk7Ci0gICAgW3NwZWxsaW5n
UGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOwotfQotCi0tICh2b2lkKV9jaGFuZ2VTcGVsbGluZ1Rv
V29yZDooTlNTdHJpbmcgKiluZXdXb3JkCi17Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IGNvcnJlY3QgdG8gZW1wdHkgc3RyaW5nLiAg
KEFwcEtpdCBjaGVja2VkIHRoaXMsIHdlIG1pZ2h0IGFzIHdlbGwgdG9vLikKLSAgICBpZiAoIVtO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdKSB7Ci0gICAgICAgIExPR19FUlJPUigi
Tm8gTlNTcGVsbENoZWNrZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoW25ld1dvcmQgaXNFcXVhbFRvU3RyaW5nOkAiIl0pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgZ2l2ZW5B
Y3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAgICAgIFtbc2VsZiBfZnJhbWVd
IF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3V29yZCBzZWxlY3RSZXBsYWNlbWVudDpZRVMg
c21hcnRSZXBsYWNlOk5PXTsKLX0KLQotLSAodm9pZCljaGFuZ2VTcGVsbGluZzooaWQpc2VuZGVy
Ci17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgW3NlbGYgX2NoYW5nZVNwZWxsaW5nVG9X
b3JkOltbc2VuZGVyIHNlbGVjdGVkQ2VsbF0gc3RyaW5nVmFsdWVdXTsKLX0KLQotLSAodm9pZClw
ZXJmb3JtRmluZFBhbmVsQWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VF
Ci0KLSAgICAvLyBJbXBsZW1lbnRpbmcgdGhpcyB3aWxsIHByb2JhYmx5IHJlcXVpcmUgY29weWlu
ZyBhbGwgb2YgTlNGaW5kUGFuZWwuaCBhbmQgLm0uCi0gICAgLy8gV2UgbmVlZCAqYWxtb3N0KiB0
aGUgc2FtZSB0aGluZyBhcyBBcHBLaXQsIGJ1dCBub3QgcXVpdGUuCi0gICAgTE9HX0VSUk9SKCJ1
bmltcGxlbWVudGVkIik7Ci19Ci0KLS0gKHZvaWQpc3RhcnRTcGVha2luZzooaWQpc2VuZGVyCi17
Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2Zy
YW1lXTsKLSAgICBET01SYW5nZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07Ci0gICAg
aWYgKCFyYW5nZSB8fCBbcmFuZ2UgY29sbGFwc2VkXSkKLSAgICAgICAgcmFuZ2UgPSBbc2VsZiBf
ZG9jdW1lbnRSYW5nZV07Ci0gICAgW05TQXBwIHNwZWFrU3RyaW5nOltmcmFtZSBfc3RyaW5nRm9y
UmFuZ2U6cmFuZ2VdXTsKLX0KLQotLSAodm9pZClzdG9wU3BlYWtpbmc6KGlkKXNlbmRlcgotewot
ICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtOU0FwcCBzdG9wU3BlYWtpbmc6c2VuZGVyXTsK
LX0KLQotLSAodm9pZCl0b2dnbGVCYXNlV3JpdGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCi17Ci0g
ICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV3JpdGluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24gPSBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247Ci0gICAgc3dp
dGNoIChjb3JlRnJhbWUtPmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSkg
ewotICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6Ci0g
ICAgICAgICAgICBkaXJlY3Rpb24gPSBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb247Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhlIHdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rp
b25TdGFydCBtZXRob2Qgd2lsbCBuZXZlciByZXR1cm4gIm5hdHVyYWwiLiBJdAotICAgICAgICAv
LyB3aWxsIGFsd2F5cyByZXR1cm4gYSBjb25jcmV0ZSBkaXJlY3Rpb24uIFNvLCBrZWVwIHRoZSBj
b21waWxlciBoYXBweSwgYW5kIGFzc2VydCBub3QgcmVhY2hlZC4KLSAgICAgICAgY2FzZSBOU1dy
aXRpbmdEaXJlY3Rpb25OYXR1cmFsOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJh
c2VXcml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbik7Ci19Ci0KLS0gKHZvaWQpY2hhbmdlQmFzZVdy
aXRpbmdEaXJlY3Rpb246KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAg
IGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNXcml0
aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxOU1dyaXRpbmdEaXJl
Y3Rpb24+KFtzZW5kZXIgdGFnXSk7Ci0gICAgCi0gICAgLy8gV2UgZGlzYWJsZSB0aGUgbWVudSBp
dGVtIHRoYXQgcGVyZm9ybXMgdGhpcyBhY3Rpb24gYmVjYXVzZSB3ZSBjYW4ndCBpbXBsZW1lbnQK
LSAgICAvLyBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsJ3MgYmVoYXZpb3IgdXNpbmcgQ1NTLgot
ICAgIEFTU0VSVCh3cml0aW5nRGlyZWN0aW9uICE9IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwp
OwotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAg
ICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbih3cml0aW5n
RGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gTGVmdFRvUmlnaHRX
cml0aW5nRGlyZWN0aW9uIDogUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsKLX0KLQotc3Rh
dGljIEJPT0wgd3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzRW5hYmxlZCgpCi17Ci0jaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0gICAgcmV0dXJuIFlFUzsKLSNlbHNlCi0gICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0g
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKLSAgICByZXR1cm4gW2RlZmF1
bHRzIGJvb2xGb3JLZXk6QCJOU0FsbG93c0Jhc2VXcml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3Mi
XSB8fCBbZGVmYXVsdHMgYm9vbEZvcktleTpAIkFwcGxlVGV4dERpcmVjdGlvbiJdOwotI2VuZGlm
Ci19Ci0KLS0gKHZvaWQpX2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86KE5TV3JpdGluZ0Rp
cmVjdGlvbilkaXJlY3Rpb24KLXsKLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc3RhdGljIEJPT0wgYmluZGluZ3NFbmFibGVkID0gd3JpdGluZ0RpcmVj
dGlvbktleUJpbmRpbmdzRW5hYmxlZCgpOwotCi0gICAgaWYgKCFiaW5kaW5nc0VuYWJsZWQpIHsK
LSAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbiA9PSBOU1dyaXRpbmdE
aXJlY3Rpb25MZWZ0VG9SaWdodCA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0
VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbik7Ci19Ci0KLS0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGly
ZWN0aW9uTGVmdFRvUmlnaHQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQot
ICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0XTsKLX0KLQotLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdo
dFRvTGVmdDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgW3NlbGYg
X2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86TlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xl
ZnRdOwotfQotCi0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKQotLSAodm9pZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvTFRS
OihpZClzZW5kZXIKLXsKLSAgICBbc2VsZiBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9S
aWdodDpzZW5kZXJdOwotfQotCi0tICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG9S
VEw6KGlkKXNlbmRlcgotewotICAgIFtzZWxmIG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0
VG9MZWZ0OnNlbmRlcl07Ci19Ci0jZW5kaWYKLQotLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJl
Y3Rpb25OYXR1cmFsOihpZClzZW5kZXIKLXsKLSAgICBMT0dfRVJST1IoIlNlbnQgZnJvbSAlQC4i
LCBzZW5kZXIpOwotfQotCi0jaWYgMAotCi0vLyBDU1MgZG9lcyBub3QgaGF2ZSBhIHdheSB0byBz
cGVjaWZ5IGFuIG91dGxpbmUgZm9udCwgd2hpY2ggbWF5IG1ha2UgdGhpcyBkaWZmaWN1bHQgdG8g
aW1wbGVtZW50LgotLy8gTWF5YmUgYSBzcGVjaWFsIGNhc2Ugb2YgdGV4dC1zaGFkb3c/Ci0tICh2
b2lkKW91dGxpbmU6KGlkKXNlbmRlcjsKLQotLy8gVGhpcyBpcyBwYXJ0IG9mIHRhYmxlIHN1cHBv
cnQsIHdoaWNoIG1heSBiZSBpbiBOU1RleHRWaWV3IGZvciBUaWdlci4KLS8vIEl0J3MgcHJvYmFi
bHkgc2ltcGxlIHRvIGRvIHRoZSBlcXVpdmFsZW50IHRoaW5nIGZvciBXZWJLaXQuCi0tICh2b2lk
KWluc2VydFRhYmxlOihpZClzZW5kZXI7Ci0KLS8vIFRoaXMgY291bGQgYmUgaW1wb3J0YW50Lgot
LSAodm9pZCl0b2dnbGVUcmFkaXRpb25hbENoYXJhY3RlclNoYXBlOihpZClzZW5kZXI7Ci0KLS8v
IEknbSBub3Qgc3VyZSB3aGF0IHRoZSBlcXVpdmFsZW50cyBvZiB0aGVzZSBpbiB0aGUgd2ViIHdv
cmxkIGFyZS4KLS0gKHZvaWQpaW5zZXJ0TGluZVNlcGFyYXRvcjooaWQpc2VuZGVyOwotLSAodm9p
ZClpbnNlcnRQYWdlQnJlYWs6KGlkKXNlbmRlcjsKLQotLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90
IGltcGxlbWVudGVkIGluIE5TVGV4dFZpZXcgeWV0IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGlu
Zy4KLS0gKHZvaWQpY2hhbmdlQ2FzZU9mTGV0dGVyOihpZClzZW5kZXI7Ci0tICh2b2lkKXRyYW5z
cG9zZVdvcmRzOihpZClzZW5kZXI7Ci0KLSNlbmRpZgotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCi0KLS8vIE92ZXJyaWRlIHRoaXMgc28gdGhhdCBBcHBLaXQgd2lsbCBzZW5kIHVzIGFycm93
IGtleXMgYXMga2V5IGRvd24gZXZlbnRzIHNvIHdlIGNhbgotLy8gc3VwcG9ydCB0aGVtIHZpYSB0
aGUga2V5IGJpbmRpbmdzIG1lY2hhbmlzbS4KLS0gKEJPT0wpX3dhbnRzS2V5RG93bkZvckV2ZW50
OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBib29sIGhhdmVXZWJDb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZyYW1lLCBvdXIga2V5RG93biBt
ZXRob2Qgd2lsbCBoYW5kbGUga2V5IGJpbmRpbmdzIGFmdGVyIHNlbmRpbmcKLSAgICAvLyB0aGUg
ZXZlbnQgdGhyb3VnaCB0aGUgRE9NLCBzbyBhc2sgQXBwS2l0IG5vdCB0byBkbyBpdHMgZWFybHkg
c3BlY2lhbCBrZXkgYmluZGluZwotICAgIC8vIG1hcHBpbmcuIElmIHdlIGRvbid0IGhhdmUgYSBm
cmFtZSwganVzdCBsZXQgdGhpbmdzIHdvcmsgdGhlIG5vcm1hbCB3YXkgd2l0aG91dAotICAgIC8v
IGEga2V5RG93bi4KLSAgICByZXR1cm4gaGF2ZVdlYkNvcmVGcmFtZTsKLX0KLQotI2Vsc2UKLQot
Ly8gU3VwZXItaGFjayBhbGVydC4KLS8vIEFsbCB0aGlzIGNvZGUgYWNjb21wbGlzaGVzIHRoZSBz
YW1lIHRoaW5nIGFzIHRoZSBfd2FudHNLZXlEb3duRm9yRXZlbnQgbWV0aG9kIGFib3ZlLgotCi0v
LyBSZXR1cm5zIGEgc2VsZWN0b3Igb25seSBpZiBjYWxsZWQgd2hpbGU6Ci0vLyAgIDEpIGZpcnN0
IHJlc3BvbmRlciBpcyBzZWxmCi0vLyAgIDIpIGhhbmRsaW5nIGEga2V5IGRvd24gZXZlbnQKLS8v
ICAgMykgbm90IHlldCBpbnNpZGUga2V5RG93bjogbWV0aG9kCi0vLyAgIDQpIGtleSBpcyBhbiBh
cnJvdyBrZXkKLS8vIFRoZSBzZWxlY3RvciBpcyB0aGUgb25lIHRoYXQgZ2V0cyBzZW50IGJ5IC1b
TlNXaW5kb3cgX3Byb2Nlc3NLZXlib2FyZFVJS2V5XSBmb3IgdGhpcyBrZXkuCi0tIChTRUwpX2Fy
cm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcKLXsKLSAgICBOU1dpbmRvdyAq
dyA9IFtzZWxmIHdpbmRvd107Ci0gICAgaWYgKFt3IGZpcnN0UmVzcG9uZGVyXSAhPSBzZWxmKQot
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBOU0V2ZW50ICplID0gW3cgY3VycmVudEV2ZW50XTsK
LSAgICBpZiAoW2UgdHlwZV0gIT0gTlNLZXlEb3duKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICBpZiAoZSA9PSBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50KQotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICBOU1N0cmluZyAqcyA9IFtlIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107Ci0gICAg
aWYgKFtzIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3dpdGNoIChb
cyBjaGFyYWN0ZXJBdEluZGV4OjBdKSB7Ci0gICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlv
bktleToKLSAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZURvd246KTsKLSAgICAgICAg
Y2FzZSBOU0xlZnRBcnJvd0Z1bmN0aW9uS2V5OgotICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rv
cihtb3ZlTGVmdDopOwotICAgICAgICBjYXNlIE5TUmlnaHRBcnJvd0Z1bmN0aW9uS2V5OgotICAg
ICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlUmlnaHQ6KTsKLSAgICAgICAgY2FzZSBOU1Vw
QXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZVVwOik7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0K
LS8vIFJldHVybnMgTk8gaW5zdGVhZCBvZiBZRVMgaWYgY2FsbGVkIG9uIHRoZSBzZWxlY3RvciB0
aGF0IHRoZQotLy8gX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcgbWV0
aG9kIHJldHVybnMuCi0vLyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpbnNpZGUgLVtOU1dpbmRv
dyBfcHJvY2Vzc0tleWJvYXJkVUlLZXldLAotLy8gYW5kIHRvZ2V0aGVyIHdpdGggdGhlIGNoYW5n
ZSBiZWxvdyBzaG91bGQgY2F1c2UgdGhhdCBtZXRob2QKLS8vIHRvIHJldHVybiBOTyByYXRoZXIg
dGhhbiBoYW5kbGluZyB0aGUga2V5LgotLy8gQWxzbyBzZXQgYSAxLXNob3QgZmxhZyBmb3IgdGhl
IG5leHRSZXNwb25kZXIgY2hlY2sgYmVsb3cuCi0tIChCT09MKXJlc3BvbmRzVG9TZWxlY3Rvcjoo
U0VMKXNlbGVjdG9yCi17Ci0gICAgaWYgKCFbc3VwZXIgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVj
dG9yXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIFNFTCBhcnJvd0tleVNlbGVjdG9yID0gW3Nl
bGYgX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmddOwotICAgIGlmIChz
ZWxlY3RvciAhPSBhcnJvd0tleVNlbGVjdG9yKQotICAgICAgICByZXR1cm4gWUVTOwotICAgIF9w
cml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlID0gWUVTOwotICAgIHJldHVybiBOTzsK
LX0KLQotLy8gUmV0dXJucyBuaWwgaW5zdGVhZCBvZiB0aGUgbmV4dCByZXNwb25kZXIgaWYgY2Fs
bGVkIHdoZW4gdGhlCi0vLyBvbmUtc2hvdCBmbGFnIGlzIHNldCwgYW5kIF9hcnJvd0tleURvd25F
dmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nCi0vLyByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0
aGFuIE5VTEwuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGluc2lkZQotLy8gLVtOU1dpbmRvdyBf
cHJvY2Vzc0tleWJvYXJkVUlLZXldIGFuZCB0b2dldGhlciB3aXRoIHRoZSBjaGFuZ2UgYWJvdmUK
LS8vIHNob3VsZCBjYXVzZSB0aGF0IG1ldGhvZCB0byByZXR1cm4gTk8gcmF0aGVyIHRoYW4gaGFu
ZGxpbmcgdGhlIGtleS4KLS0gKE5TUmVzcG9uZGVyICopbmV4dFJlc3BvbmRlcgotewotICAgIEJP
T0wgZGlzYWJsZWQgPSBfcHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZTsKLSAgICBf
cHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZSA9IE5POwotICAgIGlmIChkaXNhYmxl
ZCAmJiBbc2VsZiBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZ10gIT0g
TlVMTCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW3N1cGVyIG5leHRSZXNwb25k
ZXJdOwotfQotCi0jZW5kaWYKLQotLSAodm9pZClfdXBkYXRlQ29udHJvbFRpbnRzCi17Ci0gICAg
RnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBp
ZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICB2aWV3LT51cGRhdGVDb250cm9sVGludHMo
KTsKLX0KLQotLy8gRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBpcyBjYWxsZWQgYXQgZGlmZmVyZW50
IHRpbWVzIHRoYW4gd2luZG93RGlkQmVjb21lS2V5IGlzLgotLy8gSXQgdGFrZXMgaW50byBhY2Nv
dW50IGFsbCB0aGUgb3RoZXIgZmFjdG9ycyB0aGF0IGRldGVybWluZSB3aGVuIE5TQ2VsbCBkcmF3
cwotLy8gd2l0aCBkaWZmZXJlbnQgdGludHMsIHNvIGl0J3MgdGhlIHJpZ2h0IGNhbGwgdG8gdXNl
IGZvciBjb250cm9sIHRpbnRzLiBXZSdkIHByZWZlcgotLy8gdG8gZG8gdGhpcyB3aXRoIEFQSS4g
PHJkYXI6Ly9wcm9ibGVtLzUxMzY3NjA+Ci0tICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGUK
LXsKLSAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCi0gICAgICAgIFtzZWxmIF91cGRhdGVDb250
cm9sVGludHNdOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWlu
VGhyZWFkOkBzZWxlY3RvcihfdXBkYXRlQ29udHJvbFRpbnRzKSB3aXRoT2JqZWN0Om5pbCB3YWl0
VW50aWxEb25lOk5PXTsKLQotICAgIFtzdXBlciBfd2luZG93Q2hhbmdlZEtleVN0YXRlXTsKLX0K
LQotLSAodm9pZClvdGhlck1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKFtl
dmVudCBidXR0b25OdW1iZXJdID09IDIpCi0gICAgICAgIFtzZWxmIG1vdXNlRG93bjpldmVudF07
Ci0gICAgZWxzZQotICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZURvd246ZXZlbnRdOwotfQotCi0t
ICh2b2lkKW90aGVyTW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoW2V2
ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKLSAgICAgICAgW3NlbGYgbW91c2VEcmFnZ2VkOmV2ZW50
XTsKLSAgICBlbHNlCi0gICAgICAgIFtzdXBlciBvdGhlck1vdXNlRHJhZ2dlZDpldmVudF07Ci19
Ci0KLS0gKHZvaWQpb3RoZXJNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoW2V2
ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKLSAgICAgICAgW3NlbGYgbW91c2VVcDpldmVudF07Ci0g
ICAgZWxzZQotICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZVVwOmV2ZW50XTsKLX0KLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gTlNBcnJheSAoV2ViSFRNTFZpZXcpCi0KLS0gKHZvaWQpX3dlYl9t
YWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0Oihp
ZClvYmplY3QKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBOU0VudW1l
cmF0b3IgKmVudW1lcmF0b3IgPSBbc2VsZiBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBXZWJOZXRz
Y2FwZVBsdWdpblZpZXcgKnZpZXc7Ci0gICAgd2hpbGUgKCh2aWV3ID0gW2VudW1lcmF0b3IgbmV4
dE9iamVjdF0pICE9IG5pbCkKLSAgICAgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkKLSAgICAgICAgICAgIFt2aWV3IHBlcmZvcm1T
ZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0Om9iamVjdF07Ci0jZW5kaWYKLX0KLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkludGVybmFsKQotCi0tICh2b2lkKV9z
ZWxlY3Rpb25DaGFuZ2VkCi17Ci0gICAgW3NlbGYgX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFu
YWdlcl07Ci0gICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07Ci0gICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigp
LT5zZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UodHJ1ZSk7Ci19Ci0KLS0gKHZvaWQpX3VwZGF0
ZUZvbnRQYW5lbAotewotICAgIC8vIEZJWE1FOiBOU1RleHRWaWV3IGJhaWxzIG91dCBpZiBiZWNv
bWluZyBvciByZXNpZ25pbmcgZmlyc3QgcmVzcG9uZGVyLCBmb3Igd2hpY2ggaXQgaGFzIGl2YXIg
ZmxhZ3MuIE5vdAotICAgIC8vIHN1cmUgaWYgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxh
ci4KLSAgICAKLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIC8vIEZJWE1FOiBp
cyB0aGlzIGZpcnN0LXJlc3BvbmRlciBjaGVjayBjb3JyZWN0PyBXaGF0IGhhcHBlbnMgaWYgYSBz
dWJmcmFtZSBpcyBlZGl0YWJsZSBhbmQgaXMgZmlyc3QgcmVzcG9uZGVyPwotICAgIGlmIChbTlNB
cHAga2V5V2luZG93XSAhPSB3aW5kb3cgfHwgW3dpbmRvdyBmaXJzdFJlc3BvbmRlcl0gIT0gc2Vs
ZikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNl
OwotICAgIE5TRm9udCAqZm9udCA9IG5pbDsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
ZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykp
Ci0gICAgICAgICAgICBmb250ID0gZmQtPmdldE5TRm9udCgpOwotICAgIH0KLSAgICAKLQotICAg
IC8vIEZJWE1FOiBmb3Igbm93LCByZXR1cm4gYSBib2d1cyBmb250IHRoYXQgZGlzdGluZ3Vpc2hl
cyB0aGUgZW1wdHkgc2VsZWN0aW9uIGZyb20gdGhlIG5vbi1lbXB0eQotICAgIC8vIHNlbGVjdGlv
bi4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgb25jZSB0aGUgcmVzdCBvZiB0aGlz
IGNvZGUgd29ya3MgcHJvcGVybHkuCi0gICAgaWYgKGZvbnQgPT0gbmlsKQotICAgICAgICBmb250
ID0gW3NlbGYgX2hhc1NlbGVjdGlvbl0gPyBbTlNGb250IG1lbnVGb250T2ZTaXplOjIzXSA6IFtO
U0ZvbnQgdG9vbFRpcHNGb250T2ZTaXplOjE3XTsKLSAgICBBU1NFUlQoZm9udCAhPSBuaWwpOwot
Ci0gICAgW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBzZXRTZWxlY3RlZEZvbnQ6
Zm9udCBpc011bHRpcGxlOm11bHRpcGxlRm9udHNdOwotCi0gICAgLy8gRklYTUU6IHdlIGRvbid0
IGtlZXAgdHJhY2sgb2Ygc2VsZWN0ZWQgYXR0cmlidXRlcywgb3Igc2V0IHRoZW0gb24gdGhlIGZv
bnQgcGFuZWwuIFRoaXMKLSAgICAvLyBhcHBlYXJzIHRvIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBV
SS4gRS5nLiwgdW5kZXJsaW5lZCB0ZXh0IGluIE1haWwgb3IgVGV4dEVkaXQgaXMKLSAgICAvLyBu
b3QgcmVmbGVjdGVkIGluIHRoZSBmb250IHBhbmVsLiBNYXliZSBzb21lZGF5IHRoaXMgd2lsbCBj
aGFuZ2UuCi19Ci0KLS0gKEJPT0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCi17Ci0gICAgaWYgKCFb
W3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pCi0gICAgICAgIHJldHVy
biBOTzsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBy
ZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBX
b3JkR3JhbnVsYXJpdHk7Ci19Ci0KLS0gKE5TRXZlbnQgKilfbW91c2VEb3duRXZlbnQKLXsKLSAg
ICByZXR1cm4gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50OwotfQotCi0tIChpZDxXZWJIVE1MSGln
aGxpZ2h0ZXI+KV9oaWdobGlnaHRlckZvclR5cGU6KE5TU3RyaW5nKil0eXBlCi17Ci0gICAgcmV0
dXJuIFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIG9iamVjdEZvcktleTp0eXBlXTsKLX0KLQotLSAo
V2ViRnJhbWUgKilfZnJhbWUKLXsKLSAgICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291cmNlIHdl
YkZyYW1lXTsKLX0KLQotLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9Q
Uk9MT0dVRQotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2Vs
ZjsKLSAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0g
ICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoY29yZUZyYW1lLT5l
ZGl0b3IoKS0+dHJ5REhUTUxQYXN0ZSgpKQotICAgICAgICByZXR1cm47IC8vIERIVE1MIGRpZCB0
aGUgd2hvbGUgb3BlcmF0aW9uCi0gICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0
ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCkpCi0gICAgICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJv
YXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93UGxhaW5UZXh0OllFU107
Ci0gICAgZWxzZQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5wYXN0ZUFzUGxhaW5UZXh0
KCk7Ci19Ci0KLS0gKHZvaWQpcGFzdGVBc1BsYWluVGV4dDooaWQpc2VuZGVyCi17Ci0gICAgQ09N
TUFORF9QUk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVy
bjsKLSAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9h
cmQgZ2VuZXJhbFBhc3RlYm9hcmRdXTsKLX0KLQotLSAodm9pZCljbG9zZUlmTm90Q3VycmVudFZp
ZXcKLXsKLSAgICBpZiAoW1tbc2VsZiBfZnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSAh
PSBzZWxmKQotICAgICAgICBbc2VsZiBjbG9zZV07Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21l
bnQqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQKLXsKLSAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpuaWwgYWxsb3dQbGFpblRleHQ6Tk9dOwotfQotCi0jaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLS0gKEJPT0wpaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
Ci17Ci0gICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3Ig
dGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1l
dGhvZCBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJz
dCByZXNwb25kZXIuCi0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOihCT09M
KWZsYWcKLXsKLSAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNr
IGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0
aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVja3MgdGhl
IGZpcnN0IHJlc3BvbmRlci4KLSAgICBbW3NlbGYgX3dlYlZpZXddIHNldEdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlR3JhbW1hckNoZWNraW5nOihpZClz
ZW5kZXIKLXsKLSAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNr
IGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0
aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVja3MgdGhl
IGZpcnN0IHJlc3BvbmRlci4KLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUdyYW1tYXJDaGVj
a2luZzpzZW5kZXJdOwotfQotCi0KLXN0YXRpYyBDR1BvaW50IGNvcmVHcmFwaGljc1NjcmVlblBv
aW50Rm9yQXBwS2l0U2NyZWVuUG9pbnQoTlNQb2ludCBwb2ludCkKLXsKLSAgICBOU0FycmF5ICpz
Y3JlZW5zID0gW05TU2NyZWVuIHNjcmVlbnNdOwotICAgIAotICAgIGlmIChbc2NyZWVucyBjb3Vu
dF0gPT0gMCkgewotICAgICAgICAvLyBZb3UgY291bGQgdGhlb3JldGljYWxseSBnZXQgaGVyZSBp
ZiBydW5uaW5nIHdpdGggbm8gbW9uaXRvciwgaW4gd2hpY2ggY2FzZSBpdCBkb2Vzbid0IG1hdHRl
cgotICAgICAgICAvLyBtdWNoIHdoZXJlIHRoZSAib24tc2NyZWVuIiBwb2ludCBpcy4KLSAgICAg
ICAgcmV0dXJuIENHUG9pbnRNYWtlKHBvaW50LngsIHBvaW50LnkpOwotICAgIH0KLSAgICAKLSAg
ICAvLyBGbGlwIHRoZSB5IGNvb3JkaW5hdGUgZnJvbSB0aGUgdG9wIG9mIHRoZSBtZW51IGJhciBz
Y3JlZW4gLS0gc2VlIDQ2MzYzOTAKLSAgICByZXR1cm4gQ0dQb2ludE1ha2UocG9pbnQueCwgTlNN
YXhZKFtbc2NyZWVucyBvYmplY3RBdEluZGV4OjBdIGZyYW1lXSkgLSBwb2ludC55KTsKLX0KLQot
I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKLQotLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVs
OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBOU1NwZWxsQ2hlY2tl
ciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOwotICAgIGlm
ICghY2hlY2tlcikgewotICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTlNQYW5lbCAqc3Vic3RpdHV0aW9uc1Bh
bmVsID0gW2NoZWNrZXIgc3Vic3RpdHV0aW9uc1BhbmVsXTsKLSAgICBpZiAoW3N1YnN0aXR1dGlv
bnNQYW5lbCBpc1Zpc2libGVdKSB7Ci0gICAgICAgIFtzdWJzdGl0dXRpb25zUGFuZWwgb3JkZXJP
dXQ6c2VuZGVyXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBbc3Vic3RpdHV0aW9uc1Bh
bmVsIG9yZGVyRnJvbnQ6c2VuZGVyXTsKLX0KLQotLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBp
cyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBsb2dpYywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRo
ZXNlIG1ldGhvZHMgaGVyZSBiZWNhdXNlCi0vLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBm
aXJzdCByZXNwb25kZXIuCi0KLS0gKEJPT0wpc21hcnRJbnNlcnREZWxldGVFbmFibGVkCi17Ci0g
ICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXTsKLX0K
LQotLSAodm9pZClzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAg
IFtbc2VsZiBfd2ViVmlld10gc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOmZsYWddOwotfQot
Ci0tICh2b2lkKXRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOihpZClzZW5kZXIKLXsKLSAgICBbW3Nl
bGYgX3dlYlZpZXddIHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOnNlbmRlcl07Ci19Ci0KLS0gKEJP
T0wpaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tz
ZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF07Ci19Ci0K
LS0gKHZvaWQpc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWcK
LXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bjooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNRdW90
ZVN1YnN0aXR1dGlvbjpzZW5kZXJdOwotfQotCi0tIChCT09MKWlzQXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0b2dnbGVBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2ds
ZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRp
Y0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10g
aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZF07Ci19Ci0KLS0gKHZvaWQpc2V0QXV0
b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBf
d2ViVmlld10gc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6ZmxhZ107Ci19Ci0K
LS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjooaWQpc2VuZGVyCi17Ci0g
ICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOnNlbmRl
cl07Ci19Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkCi17Ci0g
ICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFi
bGVkXTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOihC
T09MKWZsYWcKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1RleHRSZXBsYWNl
bWVudEVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50OihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudDpzZW5kZXJdOwotfQotCi0tIChCT09MKWlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZF07Ci19Ci0KLS0gKHZvaWQpc2V0QXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW1tzZWxmIF93
ZWJWaWV3XSBzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOmZsYWddOwotfQot
Ci0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyCi17
Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246
c2VuZGVyXTsKLX0KLQotI2VuZGlmCi0KLS0gKHZvaWQpX2xvb2tVcEluRGljdGlvbmFyeUZyb21N
ZW51OihpZClzZW5kZXIKLXsKLSAgICAvLyBEaWN0aW9uYXJ5IEFQSSB3aWxsIGFjY2VwdCBhIHdo
aXRlc3BhY2Utb25seSBzdHJpbmcgYW5kIGRpc3BsYXkgVUkgYXMgaWYgaXQgd2VyZSByZWFsIHRl
eHQsCi0gICAgLy8gc28gYmFpbCBvdXQgZWFybHkgdG8gYXZvaWQgdGhhdC4KLSAgICBpZiAoW1tb
c2VsZiBzZWxlY3RlZFN0cmluZ10gX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZV0g
bGVuZ3RoXSA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOwotCi0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIE5TUmVjdCByZWN0ID0gY29yZUZyYW1lLT5zZWxlY3Rp
b25Cb3VuZHMoKTsKLQotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIE5TRGljdGlvbmFy
eSAqYXR0cmlidXRlcyA9IFthdHRyU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VS
YW5nZSgwLDEpXTsKLSAgICBOU0ZvbnQgKmZvbnQgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKGZvbnQpCi0gICAgICAgIHJlY3Qub3JpZ2lu
LnkgKz0gW2ZvbnQgYXNjZW5kZXJdOwotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBbc2VsZiBzaG93
RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6YXR0clN0cmluZyBhdFBvaW50OnJlY3Qub3Jp
Z2luXTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIC8vIFdlIHNvZnQgbGluayB0byBnZXQg
dGhlIGZ1bmN0aW9uIHRoYXQgZGlzcGxheXMgdGhlIGRpY3Rpb25hcnkgKGVpdGhlciBwb3AtdXAg
d2luZG93IG9yIGFwcCkgdG8gYXZvaWQgdGhlIHBlcmZvcm1hbmNlCi0gICAgLy8gcGVuYWx0eSBv
ZiBsaW5raW5nIHRvIGFub3RoZXIgZnJhbWV3b3JrLiBUaGlzIGZ1bmN0aW9uIGNoYW5nZWQgc2ln
bmF0dXJlIGFzIHdlbGwgYXMgZnJhbWV3b3JrIGJldHdlZW4gVGlnZXIgYW5kIExlb3BhcmQsCi0g
ICAgLy8gc28gdGhlIHR3byBjYXNlcyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgotCi0jaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKLSAgICB0eXBlZGVmIE9TU3RhdHVzICgqU2VydmljZVdpbmRvd1No
b3dGdW5jdGlvbikoaWQgaW5Xb3JkU3RyaW5nLCBOU1JlY3QgaW5Xb3JkQm91bmRhcnksIFVJbnQx
NiBpbkxpbmVEaXJlY3Rpb24pOwotICAgIGNvbnN0IGNoYXIgKmZyYW1ld29ya1BhdGggPSAiL1N5
c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvRnJh
bWV3b3Jrcy9MYW5nQW5hbHlzaXMuZnJhbWV3b3JrL0xhbmdBbmFseXNpcyI7Ci0gICAgY29uc3Qg
Y2hhciAqZnVuY3Rpb25OYW1lID0gIkRDTURpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyI7Ci0j
ZWxzZQotICAgIHR5cGVkZWYgdm9pZCAoKlNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pKGlkIHVu
dXNlZERpY3Rpb25hcnlSZWYsIGlkIGluV29yZFN0cmluZywgQ0ZSYW5nZSBzZWxlY3Rpb25SYW5n
ZSwgaWQgdW51c2VkRm9udCwgQ0dQb2ludCB0ZXh0T3JpZ2luLCBCb29sZWFuIHZlcnRpY2FsVGV4
dCwgaWQgdW51c2VkVHJhbnNmb3JtKTsKLSAgICBjb25zdCBjaGFyICpmcmFtZXdvcmtQYXRoID0g
Ii9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9I
SVRvb2xib3guZnJhbWV3b3JrL0hJVG9vbGJveCI7Ci0gICAgY29uc3QgY2hhciAqZnVuY3Rpb25O
YW1lID0gIkhJRGljdGlvbmFyeVdpbmRvd1Nob3ciOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgYm9v
bCBsb29rZWRGb3JGdW5jdGlvbiA9IGZhbHNlOwotICAgIHN0YXRpYyBTZXJ2aWNlV2luZG93U2hv
d0Z1bmN0aW9uIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyA9IE5VTEw7Ci0KLSAgICBpZiAo
IWxvb2tlZEZvckZ1bmN0aW9uKSB7Ci0gICAgICAgIHZvaWQqIGxhbmdBbmFseXNpc0ZyYW1ld29y
ayA9IGRsb3BlbihmcmFtZXdvcmtQYXRoLCBSVExEX0xBWlkpOwotICAgICAgICBBU1NFUlQobGFu
Z0FuYWx5c2lzRnJhbWV3b3JrKTsKLSAgICAgICAgaWYgKGxhbmdBbmFseXNpc0ZyYW1ld29yaykK
LSAgICAgICAgICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyA9IChTZXJ2aWNlV2luZG93
U2hvd0Z1bmN0aW9uKWRsc3ltKGxhbmdBbmFseXNpc0ZyYW1ld29yaywgZnVuY3Rpb25OYW1lKTsK
LSAgICAgICAgbG9va2VkRm9yRnVuY3Rpb24gPSB0cnVlOwotICAgIH0KLQotICAgIEFTU0VSVChk
aWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cpOwotICAgIGlmICghZGljdGlvbmFyeVNlcnZpY2VX
aW5kb3dTaG93KSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgZmluZCB0aGUgJXMgZnVuY3Rp
b24gaW4gJXMiLCBmdW5jdGlvbk5hbWUsIGZyYW1ld29ya1BhdGgpOyAKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgLy8gRklYTUU6IG11c3Qg
Y2hlY2sgZm9yIHJpZ2h0LXRvLWxlZnQgaGVyZQotICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0
aW5nRGlyZWN0aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7Ci0KLSAgICAvLyBG
SVhNRTogdGhlIGRpY3Rpb25hcnkgQVBJIGV4cGVjdHMgdGhlIHJlY3QgZm9yIHRoZSBmaXJzdCBs
aW5lIG9mIHNlbGVjdGlvbi4gUGFzc2luZwotICAgIC8vIHRoZSByZWN0IGZvciB0aGUgZW50aXJl
IHNlbGVjdGlvbiwgYXMgd2UgZG8gaGVyZSwgcG9zaXRpb25zIHRoZSBwb3AtdXAgd2luZG93IG5l
YXIKLSAgICAvLyB0aGUgYm90dG9tIG9mIHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gYXQgdGhl
IHNlbGVjdGVkIHdvcmQuCi0gICAgcmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3
Om5pbF07Ci0gICAgcmVjdC5vcmlnaW4gPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0QmFzZVRvU2Ny
ZWVuOnJlY3Qub3JpZ2luXTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbYXR0clN0cmluZyBSVEZGcm9t
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1
dGVzOm5pbF07Ci0gICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KGRhdGEsIHJlY3QsICh3
cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KSA/IDEgOiAw
KTsKLSNlbHNlCi0gICAgLy8gVGhlIEhJRGljdGlvbmFyeVdpbmRvd1Nob3cgZnVuY3Rpb24gcmVx
dWlyZXMgdGhlIG9yaWdpbiwgaW4gQ0cgc2NyZWVuIGNvb3JkaW5hdGVzLCBvZiB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIG9mIHRleHQgaW4gdGhlIHNlbGVjdGlvbi4KLSAgICAvLyBGSVhNRSA0OTQ1ODA4
OiBXZSBhcHByb3hpbWF0ZSB0aGlzIGluIGEgd2F5IHRoYXQgd29ya3Mgd2VsbCB3aGVuIGEgc2lu
Z2xlIHdvcmQgaXMgc2VsZWN0ZWQsIGFuZCBsZXNzIHdlbGwgaW4gc29tZSBvdGhlciBjYXNlcwot
ICAgIC8vIChidXQgbm8gd29yc2UgdGhhbiB3ZSBkaWQgaW4gVGlnZXIpCi0gICAgTlNQb2ludCB3
aW5kb3dQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpyZWN0Lm9yaWdpbiB0b1ZpZXc6bmlsXTsK
LSAgICBOU1BvaW50IHNjcmVlblBvaW50ID0gW1tzZWxmIHdpbmRvd10gY29udmVydEJhc2VUb1Nj
cmVlbjp3aW5kb3dQb2ludF07Ci0KLSAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cobmls
LCBhdHRyU3RyaW5nLCBDRlJhbmdlTWFrZSgwLCBbYXR0clN0cmluZyBsZW5ndGhdKSwgbmlsLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZUdyYXBoaWNzU2NyZWVuUG9pbnRG
b3JBcHBLaXRTY3JlZW5Qb2ludChzY3JlZW5Qb2ludCksIGZhbHNlLCBuaWwpOwotI2VuZGlmCi19
Ci0KLS0gKHZvaWQpX2hvdmVyRmVlZGJhY2tTdXNwZW5kZWRDaGFuZ2VkCi17Ci0gICAgW3NlbGYg
X3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwotfQotCi0tIChCT09MKV9pbnRlcmNlcHRF
ZGl0aW5nS2V5RXZlbnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50IHNob3VsZFNhdmVDb21tYW5kOihC
T09MKXNob3VsZFNhdmUKLXsKLSAgICAvLyBBc2sgQXBwS2l0IHRvIHByb2Nlc3MgdGhlIGtleSBl
dmVudCAtLSBpdCB3aWxsIGNhbGwgYmFjayB3aXRoIGVpdGhlciBpbnNlcnRUZXh0IG9yIGRvQ29t
bWFuZEJ5U2VsZWN0b3IuCi0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5ldmVudFdhc0hhbmRsZWQgPSBmYWxzZTsK
LSAgICBwYXJhbWV0ZXJzLnNob3VsZFNhdmVDb21tYW5kID0gc2hvdWxkU2F2ZTsKLSAgICAvLyBJ
ZiB3ZSdyZSBpbnRlcmNlcHRpbmcgdGhlIGluaXRpYWwgSU0gY2FsbCB3ZSBhc3N1bWUgdGhhdCB0
aGUgSU0gaGFzIGNvbnN1bWVkIHRoZSBldmVudCwgCi0gICAgLy8gYW5kIG9ubHkgY2hhbmdlIHRo
aXMgYXNzdW1wdGlvbiBpZiBvbmUgb2YgdGhlIE5TVGV4dElucHV0L1Jlc3BvbmRlciBjYWxsYmFj
a3MgaXMgdXNlZC4KLSAgICAvLyBXZSBhc3N1bWUgdGhlIElNIHdpbGwgKm5vdCogY29uc3VtZSBo
b3RrZXkgc2VxdWVuY2VzCi0gICAgcGFyYW1ldGVycy5jb25zdW1lZEJ5SU0gPSAhZXZlbnQtPm1l
dGFLZXkoKSAmJiBzaG91bGRTYXZlOwotCi0gICAgaWYgKGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpKSB7Ci0gICAgICAgIE5TRXZl
bnQgKm1hY0V2ZW50ID0gcGxhdGZvcm1FdmVudC0+bWFjRXZlbnQoKTsKLSAgICAgICAgaWYgKFtt
YWNFdmVudCB0eXBlXSA9PSBOU0tleURvd24gJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBm
aWx0ZXJLZXlEb3duOm1hY0V2ZW50XSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAKLSAgICAgICAgaWYgKFttYWNFdmVudCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHBhcmFtZXRlcnMuZXZlbnQg
PSBldmVudDsKLSAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMg
PSAmcGFyYW1ldGVyczsKLSAgICAgICAgX3ByaXZhdGUtPnJlY2VpdmVkTk9PUCA9IE5POwotICAg
ICAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMgPSBldmVudC0+a2V5
cHJlc3NDb21tYW5kcygpOwotICAgICAgICBib29sIGhhc0tleXByZXNzQ29tbWFuZCA9ICFjb21t
YW5kcy5pc0VtcHR5KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IGludGVycHJldEtleUV2ZW50cyBk
b2Vzbid0IG1hdGNoIGFwcGxpY2F0aW9uIGtleSBlcXVpdmFsZW50cyAoc3VjaCBhcyBDbWQrQSks
Ci0gICAgICAgIC8vIGFuZCBzZW5kcyBub29wOiBmb3IgdGhvc2UuIEFzIGEgcmVzdWx0LCB3ZSBk
b24ndCBoYW5kbGUgdGhvc2UgZnJvbSB3aXRoaW4gV2ViQ29yZSwKLSAgICAgICAgLy8gYnV0IHNl
bmQgYSBmdWxsIHNlcXVlbmNlIG9mIERPTSBldmVudHMsIGluY2x1ZGluZyBhbiB1bm5lZWRlZCBr
ZXlwcmVzcy4KLSAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNvbW1hbmQgfHwgIWhh
c0tleXByZXNzQ29tbWFuZCkKLSAgICAgICAgICAgIFtzZWxmIGludGVycHJldEtleUV2ZW50czpb
TlNBcnJheSBhcnJheVdpdGhPYmplY3Q6bWFjRXZlbnRdXTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGNvbW1hbmRzLnNpemUoKTsKLSAgICAgICAgICAgIC8vIEFy
ZSB0aGVyZSBjb21tYW5kcyB0aGF0IHdvdWxkIGp1c3QgY2F1c2UgdGV4dCBpbnNlcnRpb24gaWYg
ZXhlY3V0ZWQgdmlhIEVkaXRvcj8KLSAgICAgICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUg
ZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IG1vZGUgdG8gZGVjaWRlIGhvdyB0aGV5IHNob3VsZCBi
ZSB0cmVhdGVkLCBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUKLSAgICAgICAgICAgIC8vIHRv
IGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZv
Y3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKLSAgICAgICAgICAgIC8v
IChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCi0gICAg
ICAgICAgICBib29sIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhjb21t
YW5kc1tpXS5jb21tYW5kTmFtZSldLmlzVGV4dEluc2VydGlvbigpKQotICAgICAgICAgICAgICAg
ICAgICBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICghaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyB8fCBwbGF0Zm9ybUV2ZW50
LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0OiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBbc2VsZiBpbnNlcnRUZXh0OmNvbW1hbmRzW2ldLnRleHRdOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZiBkb0Nv
bW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKGNvbW1hbmRzW2ldLmNvbW1hbmRO
YW1lKV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKLSAgICB9Ci0g
ICAgcmV0dXJuICghX3ByaXZhdGUtPnJlY2VpdmVkTk9PUCAmJiBwYXJhbWV0ZXJzLmV2ZW50V2Fz
SGFuZGxlZCkgfHwgcGFyYW1ldGVycy5jb25zdW1lZEJ5SU07Ci19Ci0KLS0gKFdlYkNvcmU6OkNh
Y2hlZEltYWdlKilwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZQotewotICAgIHJldHVybiBfcHJp
dmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U7Ci19Ci0KLS0gKHZvaWQpc2V0UHJvbWlz
ZWREcmFnVElGRkRhdGFTb3VyY2U6KFdlYkNvcmU6OkNhY2hlZEltYWdlKilzb3VyY2UKLXsKLSAg
ICBpZiAoc291cmNlKQotICAgICAgICBzb3VyY2UtPmFkZENsaWVudChwcm9taXNlZERhdGFDbGll
bnQoKSk7Ci0gICAgCi0gICAgaWYgKF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZSkKLSAgICAgICAgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVD
bGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwotICAgIF9wcml2YXRlLT5wcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZSA9IHNvdXJjZTsKLX0KLQotI3VuZGVmIENPTU1BTkRfUFJPTE9HVUUKLQot
LSAodm9pZClfbGF5b3V0SWZOZWVkZWQKLXsKLSAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3
c1NldEFzaWRlKTsKLQotICAgIGlmIChfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzIHx8IFtz
ZWxmIF9uZWVkc0xheW91dF0pCi0gICAgICAgIFtzZWxmIGxheW91dF07Ci19Ci0KLS0gKHZvaWQp
X3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZQotewotICAgIFtzZWxmIF9sYXlvdXRJZk5lZWRl
ZF07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3Mg
PSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZp
ZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBfd2ViX2Fk
ZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwot
Ci0gICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2Vu
ZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9sYXlvdXRJZk5lZWRlZF07Ci0KLSAg
ICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBOREVCVUcKLSAg
ICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCi19Ci0KLS0gKHZv
aWQpIF9kZXN0cm95QWxsV2ViUGx1Z2lucwotewotICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxl
cl0gZGVzdHJveUFsbFBsdWdpbnNdOwotfQotCi0tIChCT09MKV9pc1Jlc2lnbmluZ0ZpcnN0UmVz
cG9uZGVyCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsK
LX0KLQotLSAoQk9PTClfbmVlZHNMYXlvdXQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0g
X25lZWRzTGF5b3V0XTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLS0g
KHZvaWQpYXR0YWNoUm9vdExheWVyOihDQUxheWVyKilsYXllcgotewotICAgIGlmICghX3ByaXZh
dGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKLSAgICAgICAgV2ViTGF5ZXJIb3N0aW5nVmlldyogaG9z
dGluZ1ZpZXcgPSBbW1dlYkxheWVySG9zdGluZ1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W3Nl
bGYgYm91bmRzXV07Ci0gICAgICAgIFtob3N0aW5nVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihO
U1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlKV07Ci0gICAgICAgIFtzZWxm
IGFkZFN1YnZpZXc6aG9zdGluZ1ZpZXddOwotICAgICAgICBbaG9zdGluZ1ZpZXcgcmVsZWFzZV07
Ci0gICAgICAgIC8vIGhvc3RpbmdWaWV3IGlzIG93bmVkIGJ5IGJlaW5nIGEgc3VidmlldyBvZiBz
ZWxmCi0gICAgICAgIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gaG9zdGluZ1ZpZXc7Ci0g
ICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
RnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIGNvbnRhaW5lciBs
YXllciwgd2hpY2ggd2lsbCBnZXQgc2l6ZWQvcG9zaXRpb25lZCBieSBBcHBLaXQgYW5kIENBCi0g
ICAgQ0FMYXllciogdmlld0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwotICAgIFtfcHJpdmF0ZS0+
bGF5ZXJIb3N0aW5nVmlldyBzZXRMYXllcjp2aWV3TGF5ZXJdOwotICAgIFtfcHJpdmF0ZS0+bGF5
ZXJIb3N0aW5nVmlldyBzZXRXYW50c0xheWVyOllFU107Ci0gICAgCi0gICAgLy8gUGFyZW50IG91
ciByb290IGxheWVyIGluIHRoZSBjb250YWluZXIgbGF5ZXIKLSAgICBbdmlld0xheWVyIGFkZFN1
YmxheWVyOmxheWVyXTsKLX0KLQotLSAodm9pZClkZXRhY2hSb290TGF5ZXIKLXsKLSAgICBpZiAo
X3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKLSAgICAgICAgW19wcml2YXRlLT5sYXllckhv
c3RpbmdWaWV3IHNldExheWVyOm5pbF07Ci0gICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5n
VmlldyBzZXRXYW50c0xheWVyOk5PXTsKLSAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5n
VmlldyA9IG5pbDsKLSAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RvcHBlZEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKLSAgICB9Ci19Ci0jZW5kaWYKIAor
QGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQorLSAodm9pZClfc2V0Rm9y
Y2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gV2Vi
SFRNTFZpZXcgKFdlYk5TVGV4dElucHV0U3VwcG9ydCkKLQotLSAoTlNBcnJheSAqKXZhbGlkQXR0
cmlidXRlc0Zvck1hcmtlZFRleHQKLXsKLSAgICBzdGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1
dGVzOwotICAgIGlmICghdmFsaWRBdHRyaWJ1dGVzKSB7Ci0gICAgICAgIHZhbGlkQXR0cmlidXRl
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgTlNVbmRl
cmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUsIE5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lLAot
ICAgICAgICAgICAgTlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZSwgTlNUZXh0SW5w
dXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSwgbmlsXTsKLSAgICAgICAgLy8gTlNUZXh0
IGFsc28gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBidXQgaXQncwotICAgICAg
ICAvLyBoYXJkIHRvIHRlbGwgd2hpY2ggYXJlIHJlYWxseSByZXF1aXJlZCBmb3IgdGV4dCBpbnB1
dCB0bwotICAgICAgICAvLyB3b3JrIHdlbGw7IEkgaGF2ZSBub3Qgc2VlbiBhbnkgaW5wdXQgbWV0
aG9kIG1ha2UgdXNlIG9mIHRoZW0geWV0LgotICAgICAgICAvLyAgICAgTlNGb250QXR0cmlidXRl
TmFtZSwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICAvLyAgICAgTlNC
YWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLCBOU0xhbmd1YWdlQXR0cmlidXRlTmFtZS4KLSAg
ICAgICAgQ0ZSZXRhaW4odmFsaWRBdHRyaWJ1dGVzKTsKLSAgICB9Ci0gICAgTE9HKFRleHRJbnB1
dCwgInZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQgLT4gKC4uLikiKTsKLSAgICByZXR1cm4g
dmFsaWRBdHRyaWJ1dGVzOwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRl
eHQKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA/IFtzdXBlciBp
bnB1dENvbnRleHRdIDogbmlsOwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKil0ZXh0U3Rv
cmFnZQotewotICAgIGlmICghX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCkgewotICAgICAg
ICBMT0coVGV4dElucHV0LCAidGV4dFN0b3JhZ2UgLT4gbmlsIik7Ci0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgfQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gW3NlbGYgYXR0cmli
dXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBVSU5UX01BWCldOwotICAgIAot
ICAgIExPRyhUZXh0SW5wdXQsICJ0ZXh0U3RvcmFnZSAtPiBcIiVAXCIiLCByZXN1bHQgPyBbcmVz
dWx0IHN0cmluZ10gOiBAIiIpOwotICAgIAotICAgIC8vIFdlIGhhdmUgdG8gcmV0dXJuIGFuIGVt
cHR5IHN0cmluZyByYXRoZXIgdGhhbiBudWxsIHRvIHByZXZlbnQgVFNNIGZyb20gY2FsbGluZyAt
c3RyaW5nCi0gICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IFtbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKE5TVUlu
dGVnZXIpY2hhcmFjdGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0aGVQb2ludAotewotICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtz
ZWxmIF9mcmFtZV07Ci0KLSAgICBpZiAod2luZG93KQotICAgICAgICB0aGVQb2ludCA9IFt3aW5k
b3cgY29udmVydFNjcmVlblRvQmFzZTp0aGVQb2ludF07Ci0gICAgdGhlUG9pbnQgPSBbc2VsZiBj
b252ZXJ0UG9pbnQ6dGhlUG9pbnQgZnJvbVZpZXc6bmlsXTsKLQotICAgIERPTVJhbmdlICpyYW5n
ZSA9IFtmcmFtZSBfY2hhcmFjdGVyUmFuZ2VBdFBvaW50OnRoZVBvaW50XTsKLSAgICBpZiAoIXJh
bmdlKSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0ZXJJbmRleEZvclBvaW50Oigl
ZiwgJWYpIC0+IE5TTm90Rm91bmQiLCB0aGVQb2ludC54LCB0aGVQb2ludC55KTsKLSAgICAgICAg
cmV0dXJuIE5TTm90Rm91bmQ7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIHJlc3VsdCA9IFtm
cmFtZSBfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOnJhbmdlXS5sb2NhdGlvbjsKLSAgICBMT0co
VGV4dElucHV0LCAiY2hhcmFjdGVySW5kZXhGb3JQb2ludDooJWYsICVmKSAtPiAldSIsIHRoZVBv
aW50LngsIHRoZVBvaW50LnksIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAo
TlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU1JhbmdlKXRoZVJhbmdlCi17ICAg
IAotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgCi0gICAgLy8gSnVz
dCB0byBtYXRjaCBOU1RleHRWaWV3J3MgYmVoYXZpb3IuIFJlZ3Jlc3Npb24gdGVzdHMgY2Fubm90
IGRldGVjdCB0aGlzOwotICAgIC8vIHRvIHJlcHJvZHVjZSwgdXNlIGEgdGVzdCBhcHBsaWNhdGlv
biBmcm9tIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2ODIKLSAgICAv
LyAodHlwZSBzb21ldGhpbmc7IHRyeSByYW5nZXMgKDEsIC0xKSBhbmQgKDIsIC0xKS4KLSAgICBp
ZiAoKHRoZVJhbmdlLmxvY2F0aW9uICsgdGhlUmFuZ2UubGVuZ3RoIDwgdGhlUmFuZ2UubG9jYXRp
b24pICYmICh0aGVSYW5nZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCAhPSAwKSkKLSAgICAg
ICAgdGhlUmFuZ2UubGVuZ3RoID0gMDsKLSAgICAKLSAgICBET01SYW5nZSAqcmFuZ2UgPSBbZnJh
bWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07Ci0gICAgaWYgKCFyYW5nZSkg
ewotICAgICAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1
LCAldSkgLT4gKDAsIDAsIDAsIDApIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxlbmd0
aCk7Ci0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOwotICAgIH0KLSAgICAK
LSAgICBBU1NFUlQoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7Ci0gICAgQVNTRVJUKFtyYW5nZSBl
bmRDb250YWluZXJdKTsKLSAgICAKLSAgICBOU1JlY3QgcmVzdWx0UmVjdCA9IFtmcmFtZSBfZmly
c3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOwotICAgIHJlc3VsdFJlY3QgPSBbc2VsZiBjb252ZXJ0
UmVjdDpyZXN1bHRSZWN0IHRvVmlldzpuaWxdOwotCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgcmVzdWx0UmVjdC5vcmlnaW4g
PSBbd2luZG93IGNvbnZlcnRCYXNlVG9TY3JlZW46cmVzdWx0UmVjdC5vcmlnaW5dOwotICAgIAot
ICAgIExPRyhUZXh0SW5wdXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAt
PiAoJWYsICVmLCAlZiwgJWYpIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxlbmd0aCwg
cmVzdWx0UmVjdC5vcmlnaW4ueCwgcmVzdWx0UmVjdC5vcmlnaW4ueSwgcmVzdWx0UmVjdC5zaXpl
LndpZHRoLCByZXN1bHRSZWN0LnNpemUuaGVpZ2h0KTsKLSAgICByZXR1cm4gcmVzdWx0UmVjdDsK
LX0KLQotLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCi17Ci0gICAgaWYgKCFpc1RleHRJbnB1dChj
b3JlKFtzZWxmIF9mcmFtZV0pKSkgewotICAgICAgICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRS
YW5nZSAtPiAoTlNOb3RGb3VuZCwgMCkiKTsKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOwotICAgIH0KLSAgICBOU1JhbmdlIHJlc3VsdCA9IFtbc2VsZiBfZnJhbWVd
IF9zZWxlY3RlZE5TUmFuZ2VdOwotCi0gICAgTE9HKFRleHRJbnB1dCwgInNlbGVjdGVkUmFuZ2Ug
LT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLS0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKLXsKLSAgICBXZWJGcmFtZSAq
d2ViRnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdl
YkZyYW1lKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdl
KDAsIDApOwotICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9jb252ZXJ0VG9OU1Jhbmdl
OmNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKV07Ci0KLSAgICBM
T0coVGV4dElucHV0LCAibWFya2VkUmFuZ2UgLT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24s
IHJlc3VsdC5sZW5ndGgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TQXR0cmlidXRl
ZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpbnNSYW5nZQot
ewotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoZnJhbWUpOwotICAgIGlmICghaXNUZXh0SW5wdXQoY29yZUZyYW1lKSB8fCBp
c0luUGFzc3dvcmRGaWVsZChjb3JlRnJhbWUpKSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJh
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9j
YXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAg
RE9NUmFuZ2UgKmRvbVJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6bnNS
YW5nZV07Ci0gICAgaWYgKCFkb21SYW5nZSkgewotICAgICAgICBMT0coVGV4dElucHV0LCAiYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxvY2F0
aW9uLCBuc1JhbmdlLmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpjb3JlKGRvbVJhbmdlKV07Ci0gICAgCi0gICAgLy8gW05T
QXR0cmlidXRlZFN0cmluZyhXZWJLaXRFeHRyYXMpIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZTpdICBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWlsaW5nIAotICAgIC8vIHdoaXRlc3Bh
Y2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRPSyBpbnB1dCBt
ZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KLSAgICAvLyBUbyB3b3JrIGFyb3VuZCB0
aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRhbnQgc3RyaW5nIHRvIHRoZSBjb3JyZWN0IGxlbmd0
aC4KLSAgICBpZiAoW3Jlc3VsdCBsZW5ndGhdID4gbnNSYW5nZS5sZW5ndGgpIHsKLSAgICAgICAg
QVNTRVJUKFtyZXN1bHQgbGVuZ3RoXSA9PSBuc1JhbmdlLmxlbmd0aCArIDEpOwotICAgICAgICBB
U1NFUlQoW1tyZXN1bHQgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4Om5zUmFuZ2UubGVuZ3RoXSA9
PSAnXG4nIHx8IFtbcmVzdWx0IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpuc1JhbmdlLmxlbmd0
aF0gPT0gJyAnKTsKLSAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdCBhdHRyaWJ1dGVkU3Vic3RyaW5n
RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFuZ2UubGVuZ3RoKV07Ci0gICAgfQotICAgIExP
RyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IFwi
JUBcIiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10p
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIHRlc3QgZm9yIDEwLjQgYmVjYXVzZSBvZiA8
cmRhcjovL3Byb2JsZW0vNDI0MzQ2Mz4KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotLSAobG9u
Zyljb252ZXJzYXRpb25JZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIChsb25nKXNlbGY7Ci19Ci0j
ZWxzZQotLSAoTlNJbnRlZ2VyKWNvbnZlcnNhdGlvbklkZW50aWZpZXIKLXsKLSAgICByZXR1cm4g
KE5TSW50ZWdlcilzZWxmOwotfQotI2VuZGlmCi0KLS0gKEJPT0wpaGFzTWFya2VkVGV4dAotewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIEJPT0wgcmVz
dWx0ID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7
Ci0gICAgTE9HKFRleHRJbnB1dCwgImhhc01hcmtlZFRleHQgLT4gJXUiLCByZXN1bHQpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpdW5tYXJrVGV4dAotewotICAgIExPRyhUZXh0
SW5wdXQsICJ1bm1hcmtUZXh0Iik7Ci0KLSAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1l
dGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCi0g
ICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0g
X3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgX3ByaXZhdGUtPmlu
dGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOwotCi0gICAgaWYgKHBhcmFtZXRlcnMpIHsK
LSAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gWUVTOwotICAgICAgICBwYXJh
bWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRv
cigpLT5jb25maXJtQ29tcG9zaXRpb24oKTsKLX0KLQotc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVy
bGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVy
bGluZT4mIHJlc3VsdCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gW1tzdHJpbmcgc3RyaW5nXSBsZW5n
dGhdOwotCi0gICAgaW50IGkgPSAwOwotICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7Ci0gICAgICAg
IE5TUmFuZ2UgcmFuZ2U7Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cnMgPSBbc3RyaW5nIGF0
dHJpYnV0ZXNBdEluZGV4OmkgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOiZyYW5nZSBpblJhbmdlOk5T
TWFrZVJhbmdlKGksIGxlbmd0aCAtIGkpXTsKLQotICAgICAgICBpZiAoTlNOdW1iZXIgKnN0eWxl
ID0gW2F0dHJzIG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0pIHsK
LSAgICAgICAgICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgICAgICAgICAgaWYg
KE5TQ29sb3IgKmNvbG9yQXR0ciA9IFthdHRycyBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVDb2xv
ckF0dHJpYnV0ZU5hbWVdKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tTlNDb2xv
cihbY29sb3JBdHRyIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2VdKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUocmFu
Z2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmFuZ2UpLCBjb2xvciwgW3N0eWxlIGludFZhbHVlXSA+
IDEpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGkgPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxl
bmd0aDsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVj
dGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKLXsKLSAgICBCT09MIGlzQXR0cmlidXRlZFN0
cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07
IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKLQotICAgIExPRyhUZXh0SW5wdXQsICJzZXRNYXJrZWRU
ZXh0OlwiJUBcIiBzZWxlY3RlZFJhbmdlOigldSwgJXUpIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8g
W3N0cmluZyBzdHJpbmddIDogc3RyaW5nLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgbmV3U2VsUmFu
Z2UubGVuZ3RoKTsKLQotICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3Nl
ZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KLSAgICBXZWJIVE1M
Vmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+
aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0KLSAgICBpZiAocGFyYW1ldGVycykgewotICAgICAgICBw
YXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBZRVM7Ci0gICAgICAgIHBhcmFtZXRlcnMtPmNv
bnN1bWVkQnlJTSA9IE5POwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFbc2VsZiBfaXNFZGl0YWJsZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFZl
Y3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKLSAgICBOU1N0cmluZyAqdGV4
dCA9IHN0cmluZzsKLQotICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgdW5z
aWduZWQgbWFya2VkVGV4dExlbmd0aCA9IFsoTlNTdHJpbmcgKilzdHJpbmcgbGVuZ3RoXTsKLSAg
ICAgICAgTlNTdHJpbmcgKnJhbmdlU3RyaW5nID0gW3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5w
dXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2
ZVJhbmdlOk5VTEwgaW5SYW5nZTpOU01ha2VSYW5nZSgwLCBtYXJrZWRUZXh0TGVuZ3RoKV07Ci0g
ICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgUmVwbGFjZW1lbnRSYW5nZTogJUAiLCByYW5nZVN0
cmluZyk7Ci0gICAgICAgIC8vIFRoZSBBcHBLaXQgYWRkcyBhICdzZWNyZXQnIHByb3BlcnR5IHRv
IHRoZSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgcmVwbGFjZW1lbnQgcmFuZ2UuCi0gICAgICAg
IC8vIFRoZSByZXBsYWNlbWVudCByYW5nZSBpcyB0aGUgcmFuZ2Ugb2YgdGhlIHRoZSB0ZXh0IHRo
YXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBzdHJpbmcuCi0gICAgICAgIGlmIChy
YW5nZVN0cmluZykKLSAgICAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3ROU1JhbmdlOk5T
UmFuZ2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07Ci0KLSAgICAgICAgdGV4dCA9IFtzdHJpbmcg
c3RyaW5nXTsKLSAgICAgICAgZXh0cmFjdFVuZGVybGluZXMoc3RyaW5nLCB1bmRlcmxpbmVzKTsK
LSAgICB9Ci0KLSAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRDb21wb3NpdGlvbih0ZXh0LCB1
bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdTZWxSYW5nZSkp
OwotfQotCi0tICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAg
IExPRyhUZXh0SW5wdXQsICJkb0NvbW1hbmRCeVNlbGVjdG9yOlwiJXNcIiIsIHNlbF9nZXROYW1l
KHNlbGVjdG9yKSk7Ci0KLSAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNz
ZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCi0gICAgLy8gVGhl
IHNhbWUgY2FsbCB0byBpbnRlcnByZXRLZXlFdmVudHMgY2FuIGRvIG1vcmUgdGhhbiBvbmUgY29t
bWFuZC4KLSAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBpZiAo
cGFyYW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87Ci0KLSAg
ICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKG5vb3A6KSkgewotICAgICAgICBfcHJpdmF0ZS0+
cmVjZWl2ZWROT09QID0gWUVTOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgS2V5Ym9h
cmRFdmVudCogZXZlbnQgPSBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy0+ZXZlbnQgOiAwOwotICAg
IGJvb2wgc2hvdWxkU2F2ZUNvbW1hbmQgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMtPnNob3Vs
ZFNhdmVDb21tYW5kOwotCi0gICAgaWYgKGV2ZW50ICYmIHNob3VsZFNhdmVDb21tYW5kKQotICAg
ICAgICBldmVudC0+a2V5cHJlc3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoTlNT
dHJpbmdGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IG9ubHkgZGlyZWN0IGNhbGxzIHRvIGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHNl
ZSB0aGUgcGFyYW1ldGVycyBieSBzZXR0aW5nIHRvIDAuCi0gICAgICAgIF9wcml2YXRlLT5pbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKLQotICAgICAgICBib29sIGV2ZW50V2FzSGFu
ZGxlZDsKLQotICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAg
ICAgICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXSkKLSAgICAgICAgICAgIGV2ZW50V2Fz
SGFuZGxlZCA9IHRydWU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRWRpdG9yOjpDb21t
YW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwotICAg
ICAgICAgICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkKLSAgICAgICAgICAgICAgICBldmVu
dFdhc0hhbmRsZWQgPSBjb21tYW5kLmV4ZWN1dGUoZXZlbnQpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gSWYgV2ViS2l0IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBjb21t
YW5kLCB3ZSBuZWVkIHRvIHBhc3MgdGhlIHNlbGVjdG9yIHRvIHN1cGVyLgotICAgICAgICAgICAg
ICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSBzZWxlY3RvcjsK
LQotICAgICAgICAgICAgICAgIC8vIFRoZSBzaW5rIGRvZXMgdHdvIHRoaW5nczogMSkgVGVsbHMg
dXMgaWYgdGhlIHJlc3BvbmRlciB3ZW50IHVuaGFuZGxlZCwgYW5kCi0gICAgICAgICAgICAgICAg
Ly8gMikgcHJldmVudHMgYW55IE5TQmVlcDsgd2UgZG9uJ3QgZXZlciB3YW50IHRvIGJlZXAgaGVy
ZS4KLSAgICAgICAgICAgICAgICBXZWJSZXNwb25kZXJDaGFpblNpbmsgKnNpbmsgPSBbW1dlYlJl
c3BvbmRlckNoYWluU2luayBhbGxvY10gaW5pdFdpdGhSZXNwb25kZXJDaGFpbjpzZWxmXTsKLSAg
ICAgICAgICAgICAgICBbc3VwZXIgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07Ci0gICAg
ICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gIVtzaW5rIHJlY2VpdmVkVW5oYW5kbGVkQ29t
bWFuZF07Ci0gICAgICAgICAgICAgICAgW3NpbmsgZGV0YWNoXTsKLSAgICAgICAgICAgICAgICBb
c2luayByZWxlYXNlXTsKLQotICAgICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRv
Q29tbWFuZEJ5U2VsZWN0b3IgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHBhcmFtZXRlcnMpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRs
ZWQgPSBldmVudFdhc0hhbmRsZWQ7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgcGFyYW1ldGVy
cyBzbyB0aGF0IG90aGVyIGNhbGxzIHRvIGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHNlZSB0aGVtLAot
ICAgICAgICAvLyBhbmQgb3RoZXIgY29tbWFuZHMgY2FuIHBhcnRpY2lwYXRlIGluIHNldHRpbmcg
dGhlICJldmVudFdhc0hhbmRsZWQiIGZsYWcuCi0gICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRL
ZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpaW5z
ZXJ0VGV4dDooaWQpc3RyaW5nCi17Ci0gICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3Ry
aW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOyAvLyBPdGhlcndp
c2UsIE5TU3RyaW5nCi0KLSAgICBMT0coVGV4dElucHV0LCAiaW5zZXJ0VGV4dDpcIiVAXCIiLCBp
c0F0dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcpOwotCi0gICAgV2Vi
SFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZh
dGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgX3ByaXZhdGUtPmludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOwotICAgIGlmIChwYXJhbWV0ZXJzKQotICAgICAgICBw
YXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKLQotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQg
aW5zZXJ0aW5nIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIGJ1dCBpbnB1dCBtZXRob2RzIGRvbid0IGFw
cGVhciB0byByZXF1aXJlIHRoaXMuCi0gICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOwotICAgIE5TU3RyaW5nICp0ZXh0OwotICAgIGJvb2wgaXNGcm9tSW5w
dXRNZXRob2QgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRp
b24oKTsKLSAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7Ci0gICAgICAgIHRleHQgPSBbc3Ry
aW5nIHN0cmluZ107Ci0gICAgICAgIC8vIFdlIGRlYWwgd2l0aCB0aGUgTlNUZXh0SW5wdXRSZXBs
YWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgZnJvbSBOU0F0dHJpYnV0ZWRTdHJp
bmcgaGVyZQotICAgICAgICAvLyBzaW1wbHkgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IGF0IGxlYXN0
IG9uZSBJbnB1dCBNZXRob2QgLS0gaXQgY29ycmVzb25kcyB0byB0aGUga0V2ZW50UGFyYW1UZXh0
SW5wdXRTZW5kUmVwbGFjZVJhbmdlCi0gICAgICAgIC8vIGV2ZW50IGluIFRTTS4gIFRoaXMgYmVo
YXZpb3VyIG1hdGNoZXMgdGhhdCBvZiAtW1dlYkhUTUxWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0
ZWRSYW5nZTpdIHdoZW4gaXQgcmVjZWl2ZXMgYW4KLSAgICAgICAgLy8gTlNBdHRyaWJ1dGVkU3Ry
aW5nCi0gICAgICAgIE5TU3RyaW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcgYXR0cmlidXRlOk5T
VGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDowIGxvbmdlc3RF
ZmZlY3RpdmVSYW5nZTpOVUxMIGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3RleHQgbGVuZ3RoXSld
OwotICAgICAgICBMT0coVGV4dElucHV0LCAiICAgIFJlcGxhY2VtZW50UmFuZ2U6ICVAIiwgcmFu
Z2VTdHJpbmcpOwotICAgICAgICBpZiAocmFuZ2VTdHJpbmcpIHsKLSAgICAgICAgICAgIFtbc2Vs
ZiBfZnJhbWVdIF9zZWxlY3ROU1JhbmdlOk5TUmFuZ2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07
Ci0gICAgICAgICAgICBpc0Zyb21JbnB1dE1ldGhvZCA9IFlFUzsKLSAgICAgICAgfQotICAgIH0g
ZWxzZQotICAgICAgICB0ZXh0ID0gc3RyaW5nOwotCi0gICAgYm9vbCBldmVudEhhbmRsZWQgPSBm
YWxzZTsKLSAgICBpZiAoW3RleHQgbGVuZ3RoXSkgewotICAgICAgICBLZXlib2FyZEV2ZW50KiBl
dmVudCA9IHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7Ci0KLSAgICAgICAgLy8g
aW5zZXJ0VGV4dCBjYW4gYmUgY2FsbGVkIGZyb20gYW4gaW5wdXQgbWV0aG9kIG9yIGZyb20gbm9y
bWFsIGtleSBldmVudCBwcm9jZXNzaW5nCi0gICAgICAgIC8vIElmIGl0cyBmcm9tIG5vcm1hbCBr
ZXkgZXZlbnQgcHJvY2Vzc2luZywgd2UgbWF5IG5lZWQgdG8gc2F2ZSB0aGUgYWN0aW9uIHRvIHBl
cmZvcm0gaXQgbGF0ZXIuCi0gICAgICAgIC8vIElmIGl0cyBmcm9tIGFuIGlucHV0IG1ldGhvZCwg
dGhlbiB3ZSBzaG91bGQgZ28gYWhlYWQgYW5kIGluc2VydCB0aGUgdGV4dCBub3cuICAKLSAgICAg
ICAgLy8gV2UgYXNzdW1lIGl0J3MgZnJvbSB0aGUgaW5wdXQgbWV0aG9kIGlmIHdlIGhhdmUgbWFy
a2VkIHRleHQuCi0gICAgICAgIC8vIEZJWE1FOiBJbiB0aGVvcnksIHRoaXMgY291bGQgYmUgd3Jv
bmcgZm9yIHNvbWUgaW5wdXQgbWV0aG9kcywgc28gd2Ugc2hvdWxkIHRyeSB0byBmaW5kCi0gICAg
ICAgIC8vIGFub3RoZXIgd2F5IHRvIGRldGVybWluZSBpZiB0aGUgY2FsbCBpcyBmcm9tIHRoZSBp
bnB1dCBtZXRob2QKLSAgICAgICAgYm9vbCBzaG91bGRTYXZlQ29tbWFuZCA9IHBhcmFtZXRlcnMg
JiYgcGFyYW1ldGVycy0+c2hvdWxkU2F2ZUNvbW1hbmQ7Ci0gICAgICAgIGlmIChldmVudCAmJiBz
aG91bGRTYXZlQ29tbWFuZCAmJiAhaXNGcm9tSW5wdXRNZXRob2QpIHsKLSAgICAgICAgICAgIGV2
ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuYXBwZW5kKEtleXByZXNzQ29tbWFuZCgiaW5zZXJ0VGV4
dDoiLCB0ZXh0KSk7Ci0gICAgICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIFN0cmluZyBldmVudFRleHQgPSB0ZXh0OwotICAgICAgICBldmVudFRl
eHQucmVwbGFjZShOU0JhY2tUYWJDaGFyYWN0ZXIsIE5TVGFiQ2hhcmFjdGVyKTsgLy8gc2FtZSB0
aGluZyBpcyBkb25lIGluIEtleUV2ZW50TWFjLm1tIGluIFdlYkNvcmUKLSAgICAgICAgaWYgKGNv
cmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpIHsKLSAgICAgICAgICAg
IGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkKLSAgICAgICAgICAg
ICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50
VGV4dCwgZXZlbnQpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXZlbnRI
YW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25m
aXJtQ29tcG9zaXRpb24oZXZlbnRUZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZiAoaXNGcm9tSW5wdXRNZXRob2QpIHsKLSAgICAgICAgLy8gQWxsb3cgZG9Db21tYW5kQnlT
ZWxlY3RvcjogdG8gYmUgY2FsbGVkIGFmdGVyIGluc2VydFRleHQ6IGJ5IHJlc2V0dGluZyBpbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzCi0gICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3Vt
ZWRCeUlNID0gWUVTOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHBhcmFtZXRl
cnMtPmV2ZW50V2FzSGFuZGxlZCA9IGV2ZW50SGFuZGxlZDsKLX0KLQotLSAodm9pZClfdXBkYXRl
U2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0ID0gaXNUZXh0SW5wdXQoY29yZUZyYW1lKSAmJiAh
aXNJblBhc3N3b3JkRmllbGQoY29yZUZyYW1lKTsKLSAgICBpZiAoZXhwb3NlSW5wdXRDb250ZXh0
ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKLSAgICAgICAgX3ByaXZhdGUtPmV4
cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKLSAgICAgICAgLy8gTGV0IEFw
cEtpdCBjYWNoZSBhIHBvdGVudGlhbGx5IGNoYW5nZWQgaW5wdXQgY29udGV4dC4KLSAgICAgICAg
Ly8gV2ViQ29yZSByb3V0aW5lbHkgc2V0cyB0aGUgc2VsZWN0aW9uIHRvIE5vbmUgd2hlbiBlZGl0
aW5nLCBhbmQgSU1zIGJlY29tZSB1bmhhcHB5IHdoZW4gYW4gaW5wdXQgY29udGV4dCBzdWRkZW5s
eSB0dXJucyBuaWwsIHNlZSBidWcgMjYwMDkuCi0gICAgICAgIGlmICghY29yZUZyYW1lIHx8ICFj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKLSAgICAgICAgICAgIFtOU0FwcCB1cGRh
dGVXaW5kb3dzXTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0Nv
bXBvc2l0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb3JlRnJhbWUtPmVkaXRv
cigpLT5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB1bnNpZ25lZCBzdGFydDsKLSAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgaWYgKGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHN0YXJ0LCBlbmQpKQotICAg
ICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdIG1hcmtlZFRleHRTZWxl
Y3Rpb25DaGFuZ2VkOk5TTWFrZVJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCkgY2xpZW50OnNlbGZd
OwotICAgIGVsc2UgewotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9z
aXRpb25XaXRob3V0RGlzdHVyYmluZ1NlbGVjdGlvbigpOwotICAgICAgICBbW05TSW5wdXRNYW5h
Z2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdIG1hcmtlZFRleHRBYmFuZG9uZWQ6c2VsZl07Ci0gICAg
fQotfQordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUBlbmQKKy8vIFRoaXMgY2xhc3MgaGFu
ZGxlcyB0aGUgY29tcGxldGU6IG9wZXJhdGlvbi4KKy8vIEl0IGNvdW50cyBvbiBpdHMgaG9zdCB2
aWV3IHRvIGNhbGwgZW5kUmV2ZXJ0aW5nQ2hhbmdlOiB3aGVuZXZlciB0aGUgY3VycmVudCBjb21w
bGV0aW9uIG5lZWRzIHRvIGJlIGFib3J0ZWQuCiAKLS8qCi0gICAgVGhpcyBjbGFzcyBydW5zIHRo
ZSBzaG93IGZvciBoYW5kaW5nIHRoZSBjb21wbGV0ZTogTlNUZXh0VmlldyBvcGVyYXRpb24uICBJ
dCBjb3VudHMgb24gaXRzIEhUTUwgdmlldwotICAgIHRvIGNhbGwgZW5kUmV2ZXJ0aW5nQ2hhbmdl
OiB3aGVuZXZlciB0aGUgY3VycmVudCBjb21wbGV0aW9uIG5lZWRzIHRvIGJlIGFib3J0ZWQuCi0g
Ci0gICAgVGhlIGNsYXNzIGlzIGluIG9uZSBvZiB0d28gbW9kZXM6ICBQb3B1cFdpbmRvdyBzaG93
aW5nLCBvciBub3QuICBJdCBpcyBzaG93biB3aGVuIGEgY29tcGxldGlvbiB5aWVsZHMKLSAgICBt
b3JlIHRoYW4gb25lIG1hdGNoLiAgSWYgYSBjb21wbGV0aW9uIHlpZWxkcyBvbmUgb3IgemVybyBt
YXRjaGVzLCBpdCBpcyBub3Qgc2hvd24sIGFuZCAqKnRoZXJlIGlzIG5vCi0gICAgc3RhdGUgY2Fy
cmllZCBhY3Jvc3MgdG8gdGhlIG5leHQgY29tcGxldGlvbioqLgotICovCisvLyBUaGUgY2xhc3Mg
aXMgaW4gb25lIG9mIHR3byBtb2RlczogUG9wdXAgd2luZG93IHNob3dpbmcsIG9yIG5vdC4KKy8v
IEl0IGlzIHNob3duIHdoZW4gYSBjb21wbGV0aW9uIHlpZWxkcyBtb3JlIHRoYW4gb25lIG1hdGNo
LgorLy8gSWYgYSBjb21wbGV0aW9uIHlpZWxkcyBvbmUgb3IgemVybyBtYXRjaGVzLCBpdCBpcyBu
b3Qgc2hvd24sIGFuZCB0aGVyZSBpcyBubyBzdGF0ZSBjYXJyaWVkIGFjcm9zcyB0byB0aGUgbmV4
dCBjb21wbGV0aW9uLgogCi1AaW1wbGVtZW50YXRpb24gV2ViVGV4dENvbXBsZXRlQ29udHJvbGxl
cgorQGltcGxlbWVudGF0aW9uIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlcgogCi0tIChpZClp
bml0V2l0aEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKXZpZXcKKy0gKGlkKWluaXRXaXRoV2ViVmll
dzooV2ViVmlldyAqKXZpZXcgSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopaHRtbFZpZXcKIHsKICAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICBfdmlldyA9IHZpZXc7CisgICAgX2h0bWxWaWV3ID0gaHRtbFZpZXc7CiAgICAgcmV0
dXJuIHNlbGY7CiB9CiAKQEAgLTU5MTcsNyArNzEsNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5k
ZXJsaW5lcyhOU0F0dHJpYnV0CiB7CiAgICAgLy8gRklYTUU6IDM3Njk2NTQgLSBXZSBzaG91bGQg
cHJlc2VydmUgY2FzZSBvZiBzdHJpbmcgYmVpbmcgaW5zZXJ0ZWQsIGV2ZW4gaW4gcHJlZml4IChi
dXQgdGhlbiBhbHNvIGJlCiAgICAgLy8gYWJsZSB0byByZXZlcnQgdGhhdCkuICBNaW1pYyBOU1Rl
eHQuCi0gICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07CisgICAgV2ViRnJhbWUg
KmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVdOwogICAgIE5TU3RyaW5nICpuZXdUZXh0ID0gW21h
dGNoIHN1YnN0cmluZ0Zyb21JbmRleDpwcmVmaXhMZW5ndGhdOwogICAgIFtmcmFtZSBfcmVwbGFj
ZVNlbGVjdGlvbldpdGhUZXh0Om5ld1RleHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVw
bGFjZTpOT107CiB9CkBAIC01OTY3LDEzICsxMjEsMTIgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVu
ZGVybGluZXMoTlNBdHRyaWJ1dAogLSAodm9pZClfcGxhY2VQb3B1cFdpbmRvdzooTlNQb2ludCl0
b3BMZWZ0CiB7CiAgICAgaW50IG51bWJlclRvU2hvdyA9IFtfY29tcGxldGlvbnMgY291bnRdOwot
ICAgIGlmIChudW1iZXJUb1Nob3cgPiAyMCkgeworICAgIGlmIChudW1iZXJUb1Nob3cgPiAyMCkK
ICAgICAgICAgbnVtYmVyVG9TaG93ID0gMjA7Ci0gICAgfQogCiAgICAgTlNSZWN0IHdpbmRvd0Zy
YW1lOwogICAgIE5TUG9pbnQgd29yZFN0YXJ0ID0gdG9wTGVmdDsKLSAgICB3aW5kb3dGcmFtZS5v
cmlnaW4gPSBbW192aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpbX3ZpZXcgY29udmVy
dFBvaW50OndvcmRTdGFydCB0b1ZpZXc6bmlsXV07CisgICAgd2luZG93RnJhbWUub3JpZ2luID0g
W1tfdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W19odG1sVmlldyBjb252ZXJ0UG9p
bnQ6d29yZFN0YXJ0IHRvVmlldzpuaWxdXTsKICAgICB3aW5kb3dGcmFtZS5zaXplLmhlaWdodCA9
IG51bWJlclRvU2hvdyAqIFtfdGFibGVWaWV3IHJvd0hlaWdodF0gKyAobnVtYmVyVG9TaG93ICsg
MSkgKiBbX3RhYmxlVmlldyBpbnRlcmNlbGxTcGFjaW5nXS5oZWlnaHQ7CiAgICAgd2luZG93RnJh
bWUub3JpZ2luLnkgLT0gd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQ7CiAgICAgTlNEaWN0aW9uYXJ5
ICphdHRyaWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlz
OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxMi4wZl0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsIG5p
bF07CkBAIC02MDE2LDcgKzE2OSw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5T
QXR0cmlidXQKICAgICAgICAgfQogCiAgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdvcmQgc3Rl
bQotICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKKyAgICAgICAgV2Vi
RnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVdOwogICAgICAgICBET01SYW5nZSAqc2Vs
ZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSk7CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlB
bHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ECiAgICAg
ICAgICAgICBkaXJlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQgZ3JhbnVsYXJp
dHk6V29yZEdyYW51bGFyaXR5XTsKQEAgLTYwMzgsNyArMTkxLDcgQEAgc3RhdGljIHZvaWQgZXh0
cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogCiAgICAgICAgIC8vIExvb2t1cCBtYXRjaGVzCiAg
ICAgICAgIFtfY29tcGxldGlvbnMgcmVsZWFzZV07Ci0gICAgICAgIF9jb21wbGV0aW9ucyA9IFtj
aGVja2VyIGNvbXBsZXRpb25zRm9yUGFydGlhbFdvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBbcHJl
Zml4U3RyIGxlbmd0aF0pIGluU3RyaW5nOnByZWZpeFN0ciBsYW5ndWFnZTpuaWwgaW5TcGVsbERv
Y3VtZW50V2l0aFRhZzpbW192aWV3IF93ZWJWaWV3XSBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11d
OworICAgICAgICBfY29tcGxldGlvbnMgPSBbY2hlY2tlciBjb21wbGV0aW9uc0ZvclBhcnRpYWxX
b3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3ByZWZpeFN0ciBsZW5ndGhdKSBpblN0cmluZzpwcmVm
aXhTdHIgbGFuZ3VhZ2U6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6W192aWV3IHNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnXV07CiAgICAgICAgIFtfY29tcGxldGlvbnMgcmV0YWluXTsKICAgICAK
ICAgICAgICAgaWYgKCFfY29tcGxldGlvbnMgfHwgW19jb21wbGV0aW9ucyBjb3VudF0gPT0gMCkg
ewpAQCAtNjA3MiwxMyArMjI1LDEzIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5T
QXR0cmlidXQKICAgICAgICAgX3BvcHVwV2luZG93ID0gbmlsOwogCiAgICAgICAgIGlmIChyZXZl
cnRDaGFuZ2UpIHsKLSAgICAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVd
OworICAgICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVdOwogICAg
ICAgICAgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6X29yaWdpbmFsU3RyaW5n
IHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwotICAgICAgICB9IGVsc2Ug
aWYgKFtfdmlldyBfaGFzU2VsZWN0aW9uXSkgeworICAgICAgICB9IGVsc2UgaWYgKFtfaHRtbFZp
ZXcgX2hhc1NlbGVjdGlvbl0pIHsKICAgICAgICAgICAgIGlmIChnb0xlZnQpCi0gICAgICAgICAg
ICAgICAgW192aWV3IG1vdmVCYWNrd2FyZDpuaWxdOworICAgICAgICAgICAgICAgIFtfaHRtbFZp
ZXcgbW92ZUJhY2t3YXJkOm5pbF07CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
W192aWV3IG1vdmVGb3J3YXJkOm5pbF07CisgICAgICAgICAgICAgICAgW19odG1sVmlldyBtb3Zl
Rm9yd2FyZDpuaWxdOwogICAgICAgICB9CiAgICAgICAgIFtfb3JpZ2luYWxTdHJpbmcgcmVsZWFz
ZV07CiAgICAgICAgIF9vcmlnaW5hbFN0cmluZyA9IG5pbDsKQEAgLTYxNjksMjY1ICszMjIsMyBA
QCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiB9CiAKIEBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJEb2N1bWVudFByaXZhdGVQcm90b2NvbHMp
Ci0KLS0gKE5TUmVjdClzZWxlY3Rpb25SZWN0Ci17Ci0gICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rp
b25dKQotICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uQm91bmRz
KCk7Ci0gICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci19Ci0KLS0gKE5TQXJyYXkgKilzZWxlY3Rpb25U
ZXh0UmVjdHMKLXsKLSAgICBpZiAoIVtzZWxmIF9oYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGxpc3Q7Ci0gICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPnNl
bGVjdGlvblRleHRSZWN0cyhsaXN0KTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LnNpemUo
KTsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6c2l6ZV0gYXV0b3JlbGVhc2VdOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aFJlY3Q6bGlzdFtpXV1dOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS0gKE5TVmlldyAqKXNlbGVjdGlvblZpZXcKLXsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
TlNJbWFnZSAqKXNlbGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNr
VGV4dAotewotICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIGNv
cmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkltYWdlKGZvcmNlQmxhY2tUZXh0KTsKLSAgICBy
ZXR1cm4gbmlsOwotfQotCi0tIChOU1JlY3Qpc2VsZWN0aW9uSW1hZ2VSZWN0Ci17Ci0gICAgaWYg
KFtzZWxmIF9oYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVd
KS0+c2VsZWN0aW9uQm91bmRzKCk7Ci0gICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci19Ci0KLS0gKE5T
QXJyYXkgKilwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24KLXsKLSAgICBpZiAoW3NlbGYgX2Nh
blNtYXJ0Q29weU9yRGVsZXRlXSkgewotICAgICAgICBOU011dGFibGVBcnJheSAqdHlwZXMgPSBb
W1tbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gbXV0YWJsZUNvcHldIGF1
dG9yZWxlYXNlXTsKLSAgICAgICAgW3R5cGVzIGFkZE9iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJk
VHlwZV07Ci0gICAgICAgIHJldHVybiB0eXBlczsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1
cm4gW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXTsKLSAgICB9Ci19Ci0K
LS0gKHZvaWQpd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlw
ZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgW3NlbGYg
X3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0eXBlcyB0b1Bhc3RlYm9hcmQ6cGFz
dGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOm5pbF07Ci19Ci0KLS0gKHZvaWQpc2VsZWN0
QWxsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
aWYgKGNvcmVGcmFtZSkKLSAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0QWxs
KCk7Ci19Ci0KLS0gKHZvaWQpZGVzZWxlY3RBbGwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyKCk7Ci19Ci0KLS0gKE5TU3RyaW5n
ICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9zdHJpbmdGb3JSYW5nZTpb
c2VsZiBfZG9jdW1lbnRSYW5nZV1dOwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfYXR0
cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCi17Ci0gICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwotI2lmICFMT0dfRElTQUJMRUQgICAgICAg
IAotICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlm
ICAgIAotICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IF9pbml0V2l0aERPTVJhbmdlOnJhbmdlXSBhdXRvcmVsZWFzZV07Ci0jaWYgIUxPR19ESVNBQkxF
RAotICAgIGRvdWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3Rh
cnQ7Ci0gICAgTE9HKFRpbWluZywgImNyZWF0aW5nIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2Vs
ZWN0aW9uIHRvb2sgJWYgc2Vjb25kcy4iLCBkdXJhdGlvbik7Ci0jZW5kaWYKLSAgICByZXR1cm4g
YXR0cmlidXRlZFN0cmluZzsKLX0KLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRl
ZFN0cmluZwotewotICAgIERPTURvY3VtZW50ICpkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERP
TURvY3VtZW50XTsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBb
c2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5n
ZV1dOwotICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewotICAgICAgICBEb2N1bWVudCogY29y
ZURvY3VtZW50ID0gY29yZShkb2N1bWVudCk7Ci0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBb
TlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpSYW5nZTo6
Y3JlYXRlKGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNvcmVE
b2N1bWVudC0+Y2hpbGROb2RlQ291bnQoKSkuZ2V0KCldOwotICAgIH0KLSAgICByZXR1cm4gYXR0
cmlidXRlZFN0cmluZzsKLX0KLQotLSAoTlNTdHJpbmcgKilzZWxlY3RlZFN0cmluZwotewotICAg
IHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0ZWRTdHJpbmddOwotfQotCi0tIChOU0F0dHJp
YnV0ZWRTdHJpbmcgKilzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmcKLXsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURP
TVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV07Ci0gICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5n
KSB7Ci0gICAgICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAg
ICAgICBpZiAoY29yZUZyYW1lKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJf
YXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpyYW5nZS5nZXQoKV07Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLS0gKEJPT0wpc3VwcG9ydHNUZXh0
RW5jb2RpbmcKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKXNlYXJjaEZvcjooTlNT
dHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9P
TCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3Rh
cnRJblNlbGVjdGlvbgotewotICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
cmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJk
LCBjYXNlRmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rpb24pOwotfQotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRJbnRlcm5hbFByb3RvY29scykK
LQotLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKLXsKLSAg
ICByZXR1cm4gW3NlbGYgZWxlbWVudEF0UG9pbnQ6cG9pbnQgYWxsb3dTaGFkb3dDb250ZW50Ok5P
XTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQg
YWxsb3dTaGFkb3dDb250ZW50OihCT09MKWFsbG93Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aEhpdFRlc3RSZXN1bHQ6Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0
UG9pbnQoSW50UG9pbnQocG9pbnQpLCBhbGxvdyldIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoTlNV
SW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5z
aXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KE5TVUludGVnZXIpbGltaXQKLXsKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+bWFya0FsbE1hdGNoZXNG
b3JUZXh0KHN0cmluZywgY2FzZUZsYWcsIGxpbWl0KTsKLX0KLQotLSAodm9pZClzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCi17Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjb3JlRnJhbWUtPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWQobmV3VmFsdWUpOwotfQotCi0tIChCT09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZCgpOwotfQotCi0tICh2b2lkKXVubWFya0FsbFRleHRNYXRjaGVzCi17Ci0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3Vt
ZW50LT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwotfQotCi0tIChO
U0FycmF5ICopcmVjdHNGb3JUZXh0TWF0Y2hlcwotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4g
W05TQXJyYXkgYXJyYXldOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJy
YXldOwotCi0gICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzID0gZG9jdW1lbnQtPnJlbmRlcmVkUmVj
dHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwotICAgIHVuc2lnbmVkIGNv
dW50ID0gcmVjdHMuc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOwotICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KQotICAgICAgICBbcmVzdWx0IGFkZE9iamVj
dDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RzW2luZGV4XV1dOyAgICAKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1AZW5kCi0KLS8vIFRoaXMgaXMgdXNlZCBieSBBcHBLaXQgYW5kIGlzIGlu
Y2x1ZGVkIGhlcmUgc28gdGhhdCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgaXMgb25seSBkZWZpbmVk
IG9uY2UuCi1AaW1wbGVtZW50YXRpb24gTlNVUkwgKFdlYkRhdGFVUkwpCi0KLSsgKE5TVVJMICop
X3dlYl91bmlxdWVXZWJEYXRhVVJMCi17Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAo
TlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJl
Zik7Ci0gICAgQ0ZSZWxlYXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJM
V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAiLCBXZWJEYXRh
UHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmddXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7
Ci0gICAgcmV0dXJuIFVSTDsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViUmVzcG9u
ZGVyQ2hhaW5TaW5rCi0KLS0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVy
ICopY2hhaW4KLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIF9sYXN0UmVzcG9uZGVy
SW5DaGFpbiA9IGNoYWluOwotICAgIHdoaWxlIChOU1Jlc3BvbmRlciAqbmV4dCA9IFtfbGFzdFJl
c3BvbmRlckluQ2hhaW4gbmV4dFJlc3BvbmRlcl0pCi0gICAgICAgIF9sYXN0UmVzcG9uZGVySW5D
aGFpbiA9IG5leHQ7Ci0gICAgW19sYXN0UmVzcG9uZGVySW5DaGFpbiBzZXROZXh0UmVzcG9uZGVy
OnNlbGZdOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRldGFjaAotewotICAgIFtf
bGFzdFJlc3BvbmRlckluQ2hhaW4gc2V0TmV4dFJlc3BvbmRlcjpuaWxdOwotICAgIF9sYXN0UmVz
cG9uZGVySW5DaGFpbiA9IG5pbDsKLX0KLQotLSAoQk9PTClyZWNlaXZlZFVuaGFuZGxlZENvbW1h
bmQKLXsKLSAgICByZXR1cm4gX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsKLX0KLQotLSAodm9p
ZClub1Jlc3BvbmRlckZvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgX3JlY2VpdmVkVW5oYW5kbGVk
Q29tbWFuZCA9IFlFUzsKLX0KLQotLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2Vs
ZWN0b3IKLXsKLSAgICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOwotfQotCi0tIChC
T09MKXRyeVRvUGVyZm9ybTooU0VMKWFjdGlvbiB3aXRoOihpZClvYmplY3QKLXsKLSAgICBfcmVj
ZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQK
</data>
<flag name="review"
          id="15646"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>