<?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>121529</bug_id>
          
          <creation_ts>2013-09-17 17:05:55 -0700</creation_ts>
          <short_desc>REGRESSION(r156001): Broke API tests (Requested by ap on #webkit).</short_desc>
          <delta_ts>2013-09-17 17:09:20 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>930453</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-17 17:05:55 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/156001 broke the build:
Broke API tests (Requested by ap on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930454</commentid>
    <comment_count>1</comment_count>
      <attachid>211959</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-17 17:06:16 -0700</bug_when>
    <thetext>Created attachment 211959
ROLLOUT of r156001

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930455</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-17 17:07:57 -0700</bug_when>
    <thetext>There was no bug link in r156001, so I&apos;m not sure if there is one to re-open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930456</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-17 17:08:16 -0700</bug_when>
    <thetext>Link to failures: &lt;http://build.webkit.org/builders/Apple%20MountainLion%20Debug%20WK2%20%28Tests%29/builds/12667/steps/run-api-tests/logs/stdio&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930457</commentid>
    <comment_count>4</comment_count>
      <attachid>211959</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-17 17:09:18 -0700</bug_when>
    <thetext>Comment on attachment 211959
ROLLOUT of r156001

Clearing flags on attachment: 211959

Committed r156014: &lt;http://trac.webkit.org/changeset/156014&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930458</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-17 17:09:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211959</attachid>
            <date>2013-09-17 17:06:16 -0700</date>
            <delta_ts>2013-09-17 17:09:18 -0700</delta_ts>
            <desc>ROLLOUT of r156001</desc>
            <filename>bug-121529-20130917170616.patch</filename>
            <type>text/plain</type>
            <size>139595</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MDEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTc3OWU3ZWFmMjFmZmZj
OGNmZWZkNTM1YzcyNzI5ZWIxNmUyNzMxMS4uMDg1OGRjZjUxMDljNjU4OTRiNzgxYzk4ZTJkNjc2
YWRjYWQ0YjczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEzLTA5LTE3ICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTU2MDAxLgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8xNTYwMDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMTUyOQorCisgICAgICAgIEJyb2tlIEFQSSB0ZXN0cyAoUmVxdWVzdGVkIGJ5IGFw
IG9uICN3ZWJraXQpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKFdlYkRl
ZmF1bHRGb250KToKKyAgICAgICAgKF9mb250Rm9yTmFtZUFuZFNpemUpOgorICAgICAgICAoK1tX
ZWJIVE1MQ29udmVydGVyIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZV0pOgorICAgICAgICAoLVtXZWJI
VE1MQ29udmVydGVyIF9jb21wdXRlZFN0eWxlRm9yRWxlbWVudDpdKToKKyAgICAgICAgKC1bV2Vi
SFRNTENvbnZlcnRlciBfc3BlY2lmaWVkU3R5bGVGb3JFbGVtZW50Ol0pOgorICAgICAgICAoLVtX
ZWJIVE1MQ29udmVydGVyIF9jb21wdXRlZFN0cmluZ0Zvck5vZGU6cHJvcGVydHk6XSk6CisgICAg
ICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX3N0cmluZ0Zvck5vZGU6cHJvcGVydHk6XSk6CisgICAg
ICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX2dldENvbXB1dGVkRmxvYXQ6Zm9yTm9kZTpwcm9wZXJ0
eTpdKToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBfZ2V0RmxvYXQ6Zm9yTm9kZTpwcm9w
ZXJ0eTpdKToKKyAgICAgICAgKF9jb2xvckZvclJHQkNvbG9yKToKKyAgICAgICAgKF9zaGFkb3dG
b3JTaGFkb3dTdHlsZSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX2VsZW1lbnRJc0Js
b2NrTGV2ZWw6XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX2VsZW1lbnRIYXNPd25C
YWNrZ3JvdW5kQ29sb3I6XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX2NvbXB1dGVk
Q29sb3JGb3JOb2RlOnByb3BlcnR5Ol0pOgorICAgICAgICAoLVtXZWJIVE1MQ29udmVydGVyIF9j
b2xvckZvck5vZGU6cHJvcGVydHk6XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX2Nv
bXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0
ZXIgX2F0dHJpYnV0ZXNGb3JFbGVtZW50Ol0pOgorICAgICAgICAoLVtXZWJIVE1MQ29udmVydGVy
IF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50OnRhZzphbGxvd0VtcHR5OnN1cHByZXNzVHJhaWxpbmdT
cGFjZTpdKToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBfbmV3TGluZUZvckVsZW1lbnQ6
XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX25ld1RhYkZvckVsZW1lbnQ6XSk6Cisg
ICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50OlVSTDpu
ZWVkc1BhcmFncmFwaDp1c2VQbGFjZWhvbGRlcjpdKToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZl
cnRlciBfYWRkUXVvdGVGb3JFbGVtZW50Om9wZW5pbmc6bGV2ZWw6XSk6CisgICAgICAgICgtW1dl
YkhUTUxDb252ZXJ0ZXIgX2FkZFZhbHVlOmZvckVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dlYkhU
TUxDb252ZXJ0ZXIgX2ZpbGxJbkJsb2NrOmZvckVsZW1lbnQ6YmFja2dyb3VuZENvbG9yOmV4dHJh
TWFyZ2luOmV4dHJhUGFkZGluZzppc1RhYmxlOl0pOgorICAgICAgICAoX2RhdGVGb3JTdHJpbmcp
OgorICAgICAgICAoX2NvbENvbXBhcmUpOgorICAgICAgICAoLVtXZWJIVE1MQ29udmVydGVyIF9l
bnRlckVsZW1lbnQ6dGFnOmRpc3BsYXk6XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIg
X2FkZFRhYmxlRm9yRWxlbWVudDpdKToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBfYWRk
VGFibGVDZWxsRm9yRWxlbWVudDpdKToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBfcHJv
Y2Vzc0VsZW1lbnQ6dGFnOmRpc3BsYXk6ZGVwdGg6XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252
ZXJ0ZXIgX2FkZE1hcmtlcnNUb0xpc3Q6cmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252
ZXJ0ZXIgX2V4aXRFbGVtZW50OnRhZzpkaXNwbGF5OmRlcHRoOnN0YXJ0SW5kZXg6XSk6CisgICAg
ICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgX3Byb2Nlc3NUZXh0Ol0pOgorICAgICAgICAoLVtXZWJI
VE1MQ29udmVydGVyIF90cmF2ZXJzZU5vZGU6ZGVwdGg6ZW1iZWRkZWQ6XSk6CisgICAgICAgICgt
W1dlYkhUTUxDb252ZXJ0ZXIgX3RyYXZlcnNlRm9vdGVyTm9kZTpkZXB0aDpdKToKKyAgICAgICAg
KC1bV2ViSFRNTENvbnZlcnRlciBfbG9hZEZyb21ET01SYW5nZV0pOgorICAgICAgICAoLVtXZWJI
VE1MQ29udmVydGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBpbml0
XSk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIgaW5pdFdpdGhET01SYW5nZTpdKToKKyAg
ICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBhdHRyaWJ1dGVkU3RyaW5nXSk6CisgICAgICAgICgr
W1dlYkhUTUxDb252ZXJ0ZXIgZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6XSk6Cisg
ICAgICAgIChmaWxlV3JhcHBlckZvckVsZW1lbnQpOgorCiAyMDEzLTA5LTE3ICBTYW11ZWwgV2hp
dGUgIDxzYW11ZWxfd2hpdGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBNYWMgQVhBUklBQnVz
eSBzaG91bGQgYmUgQVhFbGVtZW50QnVzeSAobm90IEFSSUEgc3BlY2lmaWMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAppbmRleCA3NmFmNzM4NGEyMGY5M2Jl
ODMyMjRmNDdhMDJlYTM5ZjI0ZjdkMDg1Li5kZGNkM2I5NjRmOTZmYWQ0NTI3NTNlMmQ2MWIzYzJl
Nzk2YzAzN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENv
bnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVy
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsNyArMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEBpbnRlcmZhY2UgV2ViSFRN
TENvbnZlcnRlciA6IE5TT2JqZWN0IHsKICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpf
YXR0clN0cjsKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZG9jdW1lbnRBdHRyczsKICAgICBO
U1VSTCAqX2Jhc2VVUkw7CiAgICAgRE9NRG9jdW1lbnQgKl9kb2N1bWVudDsKICAgICBET01SYW5n
ZSAqX2RvbVJhbmdlOwpAQCAtODQsOCArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAtIChp
ZClpbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKWRvbVJhbmdlOwogCiAtIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nOwotI2lmICFQTEFURk9STShJT1MpCisKICsgKE5T
QXR0cmlidXRlZFN0cmluZyAqKWVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOihXZWJD
b3JlOjpSYW5nZSopcmFuZ2U7Ci0jZW5kaWYKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQppbmRleCBkYjJjZGFjOGVkYzQ5MmE3MzViZTA4NTQ2
Y2FjZGYwYjE1MDAzMTA5Li4wZTA1MmRiNDhhNmI3NWQzMmMyOGFjZmM4NWY2YTlhYjM3ZGM1NWQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQpAQCAt
NDAsMzQ4ICs0MCwyMSBAQAogI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNp
bXBvcnQgIkZyYW1lTG9hZGVyLmgiCisjaW1wb3J0ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW1w
b3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbXBvcnQg
IkhUTUxUYWJsZUVsZW1lbnQuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCiAjaW1w
b3J0ICJSZW5kZXJJbWFnZS5oIgotI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBvcnQgIlRl
eHRJdGVyYXRvci5oIgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvQVND
SUlDVHlwZS5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKFVJ
S2l0KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUNvbG9yKQotCi1TT0ZUX0xJTktfUFJJVkFU
RV9GUkFNRVdPUksoVUlGb3VuZGF0aW9uKQotU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwg
VUlGb250KQotU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgTlNDb2xvcikKLVNPRlRfTElO
S19DTEFTUyhVSUZvdW5kYXRpb24sIE5TU2hhZG93KQotU09GVF9MSU5LX0NMQVNTKFVJRm91bmRh
dGlvbiwgTlNUZXh0QXR0YWNobWVudCkKLVNPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5T
TXV0YWJsZVBhcmFncmFwaFN0eWxlKQotU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgTlNQ
YXJhZ3JhcGhTdHlsZSkKLVNPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5TVGV4dExpc3Qp
Ci1TT0ZUX0xJTktfQ0xBU1MoVUlGb3VuZGF0aW9uLCBOU1RleHRCbG9jaykKLVNPRlRfTElOS19D
TEFTUyhVSUZvdW5kYXRpb24sIE5TVGV4dFRhYmxlQmxvY2spCi1TT0ZUX0xJTktfQ0xBU1MoVUlG
b3VuZGF0aW9uLCBOU1RleHRUYWJsZSkKLVNPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5T
VGV4dFRhYikKLQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNGb250QXR0cmli
dXRlTmFtZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNGb250QXR0cmlidXRlTmFtZSBnZXROU0Zv
bnRBdHRyaWJ1dGVOYW1lKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TRm9y
ZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lIGdldE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSgp
Ci1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZSBnZXROU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUoKQotU09GVF9MSU5LX0NPTlNU
QU5UKFVJRm91bmRhdGlvbiwgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICop
Ci0jZGVmaW5lIE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lIGdldE5TU3Ryb2tlQ29sb3JBdHRy
aWJ1dGVOYW1lKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TU3Ryb2tlV2lk
dGhBdHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU1N0cm9rZVdpZHRoQXR0cmli
dXRlTmFtZSBnZXROU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFtZSgpCi1TT0ZUX0xJTktfQ09OU1RB
TlQoVUlGb3VuZGF0aW9uLCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCi0jZGVm
aW5lIE5TU2hhZG93QXR0cmlidXRlTmFtZSBnZXROU1NoYWRvd0F0dHJpYnV0ZU5hbWUoKQotU09G
VF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNLZXJuQXR0cmlidXRlTmFtZSwgTlNTdHJp
bmcgKikKLSNkZWZpbmUgTlNLZXJuQXR0cmlidXRlTmFtZSBnZXROU0tlcm5BdHRyaWJ1dGVOYW1l
KCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TTGlnYXR1cmVBdHRyaWJ1dGVO
YW1lLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU0xpZ2F0dXJlQXR0cmlidXRlTmFtZSBnZXROU0xp
Z2F0dXJlQXR0cmlidXRlTmFtZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBO
U1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNVbmRl
cmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUgZ2V0TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUo
KQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNTdXBlcnNjcmlwdEF0dHJpYnV0
ZU5hbWUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lIGdl
dE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5k
YXRpb24sIE5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKLSNk
ZWZpbmUgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lIGdldE5TU3RyaWtldGhyb3Vn
aFN0eWxlQXR0cmlidXRlTmFtZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBO
U0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNCYXNl
bGluZU9mZnNldEF0dHJpYnV0ZU5hbWUgZ2V0TlNCYXNlbGluZU9mZnNldEF0dHJpYnV0ZU5hbWUo
KQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNXcml0aW5nRGlyZWN0aW9uQXR0
cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNXcml0aW5nRGlyZWN0aW9uQXR0cmli
dXRlTmFtZSBnZXROU1dyaXRpbmdEaXJlY3Rpb25BdHRyaWJ1dGVOYW1lKCkKLVNPRlRfTElOS19D
T05TVEFOVChVSUZvdW5kYXRpb24sIE5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lLCBOU1N0
cmluZyAqKQotI2RlZmluZSBOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZSBnZXROU1BhcmFn
cmFwaFN0eWxlQXR0cmlidXRlTmFtZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9u
LCBOU0F0dGFjaG1lbnRBdHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU0F0dGFj
aG1lbnRBdHRyaWJ1dGVOYW1lIGdldE5TQXR0YWNobWVudEF0dHJpYnV0ZU5hbWUoKQotU09GVF9M
SU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNMaW5rQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcg
KikKLSNkZWZpbmUgTlNMaW5rQXR0cmlidXRlTmFtZSBnZXROU0xpbmtBdHRyaWJ1dGVOYW1lKCkK
LVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TQXV0aG9yRG9jdW1lbnRBdHRyaWJ1
dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TQXV0aG9yRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNB
dXRob3JEb2N1bWVudEF0dHJpYnV0ZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9u
LCBOU0VkaXRvckRvY3VtZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU0VkaXRv
ckRvY3VtZW50QXR0cmlidXRlIGdldE5TRWRpdG9yRG9jdW1lbnRBdHRyaWJ1dGUoKQotU09GVF9M
SU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNHZW5lcmF0b3JEb2N1bWVudEF0dHJpYnV0ZSwg
TlNTdHJpbmcgKikKLSNkZWZpbmUgTlNHZW5lcmF0b3JEb2N1bWVudEF0dHJpYnV0ZSBnZXROU0dl
bmVyYXRvckRvY3VtZW50QXR0cmlidXRlKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRp
b24sIE5TQ29tcGFueURvY3VtZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU0Nv
bXBhbnlEb2N1bWVudEF0dHJpYnV0ZSBnZXROU0NvbXBhbnlEb2N1bWVudEF0dHJpYnV0ZSgpCi1T
T0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0Rpc3BsYXlOYW1lRG9jdW1lbnRBdHRy
aWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TRGlzcGxheU5hbWVEb2N1bWVudEF0dHJpYnV0
ZSBnZXROU0Rpc3BsYXlOYW1lRG9jdW1lbnRBdHRyaWJ1dGUoKQotU09GVF9MSU5LX0NPTlNUQU5U
KFVJRm91bmRhdGlvbiwgTlNDb3B5cmlnaHREb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikK
LSNkZWZpbmUgTlNDb3B5cmlnaHREb2N1bWVudEF0dHJpYnV0ZSBnZXROU0NvcHlyaWdodERvY3Vt
ZW50QXR0cmlidXRlKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TU3ViamVj
dERvY3VtZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU1N1YmplY3REb2N1bWVu
dEF0dHJpYnV0ZSBnZXROU1N1YmplY3REb2N1bWVudEF0dHJpYnV0ZSgpCi1TT0ZUX0xJTktfQ09O
U1RBTlQoVUlGb3VuZGF0aW9uLCBOU0NvbW1lbnREb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcg
KikKLSNkZWZpbmUgTlNDb21tZW50RG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNDb21tZW50RG9jdW1l
bnRBdHRyaWJ1dGUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNOb0luZGV4
RG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TTm9JbmRleERvY3VtZW50
QXR0cmlidXRlIGdldE5TTm9JbmRleERvY3VtZW50QXR0cmlidXRlKCkKLVNPRlRfTElOS19DT05T
VEFOVChVSUZvdW5kYXRpb24sIE5TS2V5d29yZHNEb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcg
KikKLSNkZWZpbmUgTlNLZXl3b3Jkc0RvY3VtZW50QXR0cmlidXRlIGdldE5TS2V5d29yZHNEb2N1
bWVudEF0dHJpYnV0ZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0NyZWF0
aW9uVGltZURvY3VtZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU0NyZWF0aW9u
VGltZURvY3VtZW50QXR0cmlidXRlIGdldE5TQ3JlYXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1dGUo
KQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNNb2RpZmljYXRpb25UaW1lRG9j
dW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TTW9kaWZpY2F0aW9uVGltZURv
Y3VtZW50QXR0cmlidXRlIGdldE5TTW9kaWZpY2F0aW9uVGltZURvY3VtZW50QXR0cmlidXRlKCkK
LVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TQ29udmVydGVkRG9jdW1lbnRBdHRy
aWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TQ29udmVydGVkRG9jdW1lbnRBdHRyaWJ1dGUg
Z2V0TlNDb252ZXJ0ZWREb2N1bWVudEF0dHJpYnV0ZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlG
b3VuZGF0aW9uLCBOU0NvY29hVmVyc2lvbkRvY3VtZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQot
I2RlZmluZSBOU0NvY29hVmVyc2lvbkRvY3VtZW50QXR0cmlidXRlIGdldE5TQ29jb2FWZXJzaW9u
RG9jdW1lbnRBdHRyaWJ1dGUoKQotCi0jZGVmaW5lIFBsYXRmb3JtTlNTaGFkb3cgICAgICAgICAg
ICBnZXROU1NoYWRvd0NsYXNzKCkKLSNkZWZpbmUgUGxhdGZvcm1OU1RleHRBdHRhY2htZW50ICAg
IGdldE5TVGV4dEF0dGFjaG1lbnRDbGFzcygpCi0jZGVmaW5lIFBsYXRmb3JtTlNQYXJhZ3JhcGhT
dHlsZSAgICBnZXROU1BhcmFncmFwaFN0eWxlQ2xhc3MoKQotI2RlZmluZSBQbGF0Zm9ybU5TVGV4
dExpc3QgICAgICAgICAgZ2V0TlNUZXh0TGlzdENsYXNzKCkKLSNkZWZpbmUgUGxhdGZvcm1OU1Rl
eHRUYWJsZUJsb2NrICAgIGdldE5TVGV4dFRhYmxlQmxvY2tDbGFzcygpCi0jZGVmaW5lIFBsYXRm
b3JtTlNUZXh0VGFibGUgICAgICAgICBnZXROU1RleHRUYWJsZUNsYXNzKCkKLSNkZWZpbmUgUGxh
dGZvcm1OU1RleHRUYWIgICAgICAgICAgIGdldE5TVGV4dFRhYkNsYXNzKCkKLSNkZWZpbmUgUGxh
dGZvcm1Db2xvciAgICAgICAgICAgICAgIFVJQ29sb3IKLSNkZWZpbmUgUGxhdGZvcm1Db2xvckNs
YXNzICAgICAgICAgIGdldFVJQ29sb3JDbGFzcygpCi0jZGVmaW5lIFBsYXRmb3JtRm9udCAgICAg
ICAgICAgICAgICBVSUZvbnQKLSNkZWZpbmUgUGxhdGZvcm1Gb250Q2xhc3MgICAgICAgICAgIGdl
dFVJRm9udENsYXNzKCkKLSNlbHNlCi0KLSNkZWZpbmUgUGxhdGZvcm1OU1NoYWRvdyAgICAgICAg
ICAgIE5TU2hhZG93Ci0jZGVmaW5lIFBsYXRmb3JtTlNUZXh0QXR0YWNobWVudCAgICBOU1RleHRB
dHRhY2htZW50Ci0jZGVmaW5lIFBsYXRmb3JtTlNQYXJhZ3JhcGhTdHlsZSAgICBOU1BhcmFncmFw
aFN0eWxlCi0jZGVmaW5lIFBsYXRmb3JtTlNUZXh0TGlzdCAgICAgICAgICBOU1RleHRMaXN0Ci0j
ZGVmaW5lIFBsYXRmb3JtTlNUZXh0VGFibGVCbG9jayAgICBOU1RleHRUYWJsZUJsb2NrCi0jZGVm
aW5lIFBsYXRmb3JtTlNUZXh0VGFibGUgICAgICAgICBOU1RleHRUYWJsZQotI2RlZmluZSBQbGF0
Zm9ybU5TVGV4dFRhYiAgICAgICAgICAgTlNUZXh0VGFiCi0jZGVmaW5lIFBsYXRmb3JtQ29sb3Ig
ICAgICAgICAgICAgICBOU0NvbG9yCi0jZGVmaW5lIFBsYXRmb3JtQ29sb3JDbGFzcyAgICAgICAg
ICBOU0NvbG9yCi0jZGVmaW5lIFBsYXRmb3JtRm9udCAgICAgICAgICAgICAgICBOU0ZvbnQKLSNk
ZWZpbmUgUGxhdGZvcm1Gb250Q2xhc3MgICAgICAgICAgIE5TRm9udAotCi0jZGVmaW5lIE5TVGV4
dEFsaWdubWVudExlZnQgICAgICAgICBOU0xlZnRUZXh0QWxpZ25tZW50Ci0jZGVmaW5lIE5TVGV4
dEFsaWdubWVudFJpZ2h0ICAgICAgICBOU1JpZ2h0VGV4dEFsaWdubWVudAotI2RlZmluZSBOU1Rl
eHRBbGlnbm1lbnRDZW50ZXIgICAgICAgTlNDZW50ZXJUZXh0QWxpZ25tZW50Ci0jZGVmaW5lIE5T
VGV4dEFsaWdubWVudEp1c3RpZmllZCAgICBOU0p1c3RpZmllZFRleHRBbGlnbm1lbnQKLSNlbmRp
ZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLSNpZiBQTEFURk9STShJT1MpCi0KLXR5cGVkZWYgZW51bSB7Ci0gICAgVUlGb250VHJhaXRQ
bGFpbiAgICAgICA9IDB4MDAwMDAwMDAsCi0gICAgVUlGb250VHJhaXRJdGFsaWMgICAgICA9IDB4
MDAwMDAwMDEsIC8vIDEgPDwgMAotICAgIFVJRm9udFRyYWl0Qm9sZCAgICAgICAgPSAweDAwMDAw
MDAyLCAvLyAxIDw8IDEKLSAgICBVSUZvbnRUcmFpdFRoaW4gICAgICAgID0gKDEgPDwgMiksCi0g
ICAgVUlGb250VHJhaXRMaWdodCAgICAgICA9ICgxIDw8IDMpLAotICAgIFVJRm9udFRyYWl0VWx0
cmFMaWdodCAgPSAoMSA8PCA0KQotfSBVSUZvbnRUcmFpdDsKLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgTlNVbmRlcmxpbmVTdHlsZSkgewotICAgIE5TVW5kZXJsaW5lU3R5bGVOb25lICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAsCi0gICAgTlNVbmRlcmxpbmVTdHls
ZVNpbmdsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMSwKLSAgICBOU1VuZGVy
bGluZVN0eWxlVGhpY2sgTlNfRU5VTV9BVkFJTEFCTEVfSU9TKDdfMCkgICAgPSAweDAyLAotICAg
IE5TVW5kZXJsaW5lU3R5bGVEb3VibGUgTlNfRU5VTV9BVkFJTEFCTEVfSU9TKDdfMCkgICA9IDB4
MDksCi0KLSAgICBOU1VuZGVybGluZVBhdHRlcm5Tb2xpZCBOU19FTlVNX0FWQUlMQUJMRV9JT1Mo
N18wKSAgICAgID0gMHgwMDAwLAotICAgIE5TVW5kZXJsaW5lUGF0dGVybkRvdCBOU19FTlVNX0FW
QUlMQUJMRV9JT1MoN18wKSAgICAgICAgPSAweDAxMDAsCi0gICAgTlNVbmRlcmxpbmVQYXR0ZXJu
RGFzaCBOU19FTlVNX0FWQUlMQUJMRV9JT1MoN18wKSAgICAgICA9IDB4MDIwMCwKLSAgICBOU1Vu
ZGVybGluZVBhdHRlcm5EYXNoRG90IE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg3XzApICAgID0gMHgw
MzAwLAotICAgIE5TVW5kZXJsaW5lUGF0dGVybkRhc2hEb3REb3QgTlNfRU5VTV9BVkFJTEFCTEVf
SU9TKDdfMCkgPSAweDA0MDAsCi0KLSAgICBOU1VuZGVybGluZUJ5V29yZCBOU19FTlVNX0FWQUlM
QUJMRV9JT1MoN18wKSA9IDB4ODAwMAotfTsKLQotZW51bSB7Ci0gICAgTlNUZXh0QmxvY2tBYnNv
bHV0ZVZhbHVlVHlwZSAgICA9IDAsICAgIC8vIEFic29sdXRlIHZhbHVlIGluIHBvaW50cwotICAg
IE5TVGV4dEJsb2NrUGVyY2VudGFnZVZhbHVlVHlwZSAgPSAxICAgICAvLyBQZXJjZW50YWdlIHZh
bHVlIChvdXQgb2YgMTAwKQotfTsKLXR5cGVkZWYgTlNVSW50ZWdlciBOU1RleHRCbG9ja1ZhbHVl
VHlwZTsKLQotZW51bSB7Ci0gICAgTlNUZXh0QmxvY2tXaWR0aCAgICAgICAgICAgID0gMCwKLSAg
ICBOU1RleHRCbG9ja01pbmltdW1XaWR0aCAgICAgPSAxLAotICAgIE5TVGV4dEJsb2NrTWF4aW11
bVdpZHRoICAgICA9IDIsCi0gICAgTlNUZXh0QmxvY2tIZWlnaHQgICAgICAgICAgID0gNCwKLSAg
ICBOU1RleHRCbG9ja01pbmltdW1IZWlnaHQgICAgPSA1LAotICAgIE5TVGV4dEJsb2NrTWF4aW11
bUhlaWdodCAgICA9IDYKLX07Ci10eXBlZGVmIE5TVUludGVnZXIgTlNUZXh0QmxvY2tEaW1lbnNp
b247Ci0KLWVudW0gewotICAgIE5TVGV4dEJsb2NrUGFkZGluZyAgPSAtMSwKLSAgICBOU1RleHRC
bG9ja0JvcmRlciAgID0gIDAsCi0gICAgTlNUZXh0QmxvY2tNYXJnaW4gICA9ICAxCi19OwotdHlw
ZWRlZiBOU0ludGVnZXIgTlNUZXh0QmxvY2tMYXllcjsKLQotZW51bSB7Ci0gICAgTlNUZXh0VGFi
bGVBdXRvbWF0aWNMYXlvdXRBbGdvcml0aG0gPSAwLAotICAgIE5TVGV4dFRhYmxlRml4ZWRMYXlv
dXRBbGdvcml0aG0gICAgID0gMQotfTsKLXR5cGVkZWYgTlNVSW50ZWdlciBOU1RleHRUYWJsZUxh
eW91dEFsZ29yaXRobTsKLQotZW51bSB7Ci0gICAgTlNUZXh0QmxvY2tUb3BBbGlnbm1lbnQgICAg
ICAgICA9IDAsCi0gICAgTlNUZXh0QmxvY2tNaWRkbGVBbGlnbm1lbnQgICAgICA9IDEsCi0gICAg
TlNUZXh0QmxvY2tCb3R0b21BbGlnbm1lbnQgICAgICA9IDIsCi0gICAgTlNUZXh0QmxvY2tCYXNl
bGluZUFsaWdubWVudCAgICA9IDMKLX07Ci10eXBlZGVmIE5TVUludGVnZXIgTlNUZXh0QmxvY2tW
ZXJ0aWNhbEFsaWdubWVudDsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgTlNUZXh0QWxp
Z25tZW50KSB7Ci0gICAgTlNUZXh0QWxpZ25tZW50TGVmdCAgICAgID0gMCwgICAgLy8gVmlzdWFs
bHkgbGVmdCBhbGlnbmVkCi0gICAgTlNUZXh0QWxpZ25tZW50Q2VudGVyICAgID0gMSwgICAgLy8g
VmlzdWFsbHkgY2VudGVyZWQKLSAgICBOU1RleHRBbGlnbm1lbnRSaWdodCAgICAgPSAyLCAgICAv
LyBWaXN1YWxseSByaWdodCBhbGlnbmVkCi0gICAgTlNUZXh0QWxpZ25tZW50SnVzdGlmaWVkID0g
MywgICAgLy8gRnVsbHktanVzdGlmaWVkLiBUaGUgbGFzdCBsaW5lIGluIGEgcGFyYWdyYXBoIGlz
IG5hdHVyYWwtYWxpZ25lZC4KLSAgICBOU1RleHRBbGlnbm1lbnROYXR1cmFsICAgPSA0LCAgICAv
LyBJbmRpY2F0ZXMgdGhlIGRlZmF1bHQgYWxpZ25tZW50IGZvciBzY3JpcHQKLX0gTlNfRU5VTV9B
VkFJTEFCTEVfSU9TKDZfMCk7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIE5TV3JpdGlu
Z0RpcmVjdGlvbikgewotICAgIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwgICAgICAgPSAtMSwg
ICAgLy8gRGV0ZXJtaW5lcyBkaXJlY3Rpb24gdXNpbmcgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0
aG0gcnVsZXMgUDIgYW5kIFAzCi0gICAgTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgICA9
ICAwLCAgICAvLyBMZWZ0IHRvIHJpZ2h0IHdyaXRpbmcgZGlyZWN0aW9uCi0gICAgTlNXcml0aW5n
RGlyZWN0aW9uUmlnaHRUb0xlZnQgICA9ICAxICAgICAvLyBSaWdodCB0byBsZWZ0IHdyaXRpbmcg
ZGlyZWN0aW9uCi19IE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg2XzApOwotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBOU1RleHRXcml0aW5nRGlyZWN0aW9uKSB7Ci0gICAgTlNUZXh0V3JpdGlu
Z0RpcmVjdGlvbkVtYmVkZGluZyAgICAgPSAoMCA8PCAxKSwKLSAgICBOU1RleHRXcml0aW5nRGly
ZWN0aW9uT3ZlcnJpZGUgICAgICA9ICgxIDw8IDEpCi19IE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg3
XzApOwotCi1lbnVtIHsKLSAgICBOU0VudGVyQ2hhcmFjdGVyICAgICAgICAgICAgICAgID0gMHgw
MDAzLAotICAgIE5TQmFja3NwYWNlQ2hhcmFjdGVyICAgICAgICAgICAgPSAweDAwMDgsCi0gICAg
TlNUYWJDaGFyYWN0ZXIgICAgICAgICAgICAgICAgICA9IDB4MDAwOSwKLSAgICBOU05ld2xpbmVD
aGFyYWN0ZXIgICAgICAgICAgICAgID0gMHgwMDBhLAotICAgIE5TRm9ybUZlZWRDaGFyYWN0ZXIg
ICAgICAgICAgICAgPSAweDAwMGMsCi0gICAgTlNDYXJyaWFnZVJldHVybkNoYXJhY3RlciAgICAg
ICA9IDB4MDAwZCwKLSAgICBOU0JhY2tUYWJDaGFyYWN0ZXIgICAgICAgICAgICAgID0gMHgwMDE5
LAotICAgIE5TRGVsZXRlQ2hhcmFjdGVyICAgICAgICAgICAgICAgPSAweDAwN2YsCi0gICAgTlNM
aW5lU2VwYXJhdG9yQ2hhcmFjdGVyICAgICAgICA9IDB4MjAyOCwKLSAgICBOU1BhcmFncmFwaFNl
cGFyYXRvckNoYXJhY3RlciAgID0gMHgyMDI5LAotICAgIE5TQXR0YWNobWVudENoYXJhY3RlciAg
ICAgICAgICAgPSAweEZGRkMgLy8gUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIHVzZWQgZm9yIGF0
dGFjaG1lbnRzCi19OwotCi1lbnVtIHsKLSAgICBOU0xlZnRUYWJTdG9wVHlwZSA9IDAsCi0gICAg
TlNSaWdodFRhYlN0b3BUeXBlLAotICAgIE5TQ2VudGVyVGFiU3RvcFR5cGUsCi0gICAgTlNEZWNp
bWFsVGFiU3RvcFR5cGUKLX07Ci10eXBlZGVmIE5TVUludGVnZXIgTlNUZXh0VGFiVHlwZTsKLQot
QGludGVyZmFjZSBVSUNvbG9yIDogTlNPYmplY3QKLSsgKFVJQ29sb3IgKiljbGVhckNvbG9yOwot
LSAoQ0dGbG9hdClhbHBoYUNvbXBvbmVudDsKLSsgKFVJQ29sb3IgKilfZGlzYW1iaWd1YXRlZF9k
dWVfdG9fQ0lJbWFnZV9jb2xvcldpdGhDR0NvbG9yOihDR0NvbG9yUmVmKWNnQ29sb3I7Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgTlNDb2xvciA6IFVJQ29sb3IKLSsgKGlkKWNvbG9yV2l0aENhbGlicmF0
ZWRSZWQ6KENHRmxvYXQpcmVkIGdyZWVuOihDR0Zsb2F0KWdyZWVuIGJsdWU6KENHRmxvYXQpYmx1
ZSBhbHBoYTooQ0dGbG9hdClhbHBoYTsKLSsgKGlkKWNvbG9yV2l0aENhbGlicmF0ZWRXaGl0ZToo
Q0dGbG9hdCl3aGl0ZSBhbHBoYTooQ0dGbG9hdClhbHBoYTsKLUBlbmQKLQotQGludGVyZmFjZSBV
SUZvbnQKLSsgKFVJRm9udCAqKWZvbnRXaXRoTmFtZTooTlNTdHJpbmcgKilmb250TmFtZSBzaXpl
OihDR0Zsb2F0KWZvbnRTaXplOwotKyAoVUlGb250ICopZm9udFdpdGhGYW1pbHlOYW1lOihOU1N0
cmluZyAqKWZhbWlseU5hbWUgdHJhaXRzOihVSUZvbnRUcmFpdCl0cmFpdHMgc2l6ZTooQ0dGbG9h
dClmb250U2l6ZTsKLS0gKE5TU3RyaW5nICopZmFtaWx5TmFtZTsKLS0gKENHRmxvYXQpcG9pbnRT
aXplOwotLSAoVUlGb250ICopZm9udFdpdGhTaXplOihDR0Zsb2F0KWZvbnRTaXplOwotKyAoTlNB
cnJheSAqKWZhbWlseU5hbWVzOwotKyAoTlNBcnJheSAqKWZvbnROYW1lc0ZvckZhbWlseU5hbWU6
KE5TU3RyaW5nICopZmFtaWx5TmFtZTsKLSsgKFVJRm9udCAqKXN5c3RlbUZvbnRPZlNpemU6KENH
RmxvYXQpZm9udFNpemU7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNUZXh0VGFiCi0tIChpZClpbml0
V2l0aFR5cGU6KE5TVGV4dFRhYlR5cGUpdHlwZSBsb2NhdGlvbjooQ0dGbG9hdClsb2M7Ci0tIChp
ZClpbml0V2l0aFRleHRBbGlnbm1lbnQ6KE5TVGV4dEFsaWdubWVudClhbGlnbm1lbnQgbG9jYXRp
b246KENHRmxvYXQpbG9jIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Ci0tIChDR0Zs
b2F0KWxvY2F0aW9uOwotLSAodm9pZClyZWxlYXNlOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TUGFy
YWdyYXBoU3R5bGUgOiBOU09iamVjdAotKyAoTlNQYXJhZ3JhcGhTdHlsZSAqKWRlZmF1bHRQYXJh
Z3JhcGhTdHlsZTsKLS0gKHZvaWQpc2V0QWxpZ25tZW50OihOU1RleHRBbGlnbm1lbnQpYWxpZ25t
ZW50OwotLSAodm9pZClzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjooTlNXcml0aW5nRGlyZWN0aW9u
KXdyaXRpbmdEaXJlY3Rpb247Ci0tICh2b2lkKXNldEhlYWRJbmRlbnQ6KENHRmxvYXQpYUZsb2F0
OwotLSAoQ0dGbG9hdCloZWFkSW5kZW50OwotLSAodm9pZClzZXRIZWFkZXJMZXZlbDooTlNJbnRl
Z2VyKWxldmVsOwotLSAodm9pZClzZXRGaXJzdExpbmVIZWFkSW5kZW50OihDR0Zsb2F0KWFGbG9h
dDsKLS0gKHZvaWQpc2V0VGFpbEluZGVudDooQ0dGbG9hdClhRmxvYXQ7Ci0tICh2b2lkKXNldFBh
cmFncmFwaFNwYWNpbmc6KENHRmxvYXQpcGFyYWdyYXBoU3BhY2luZzsKLS0gKHZvaWQpc2V0VGV4
dExpc3RzOihOU0FycmF5ICopYXJyYXk7Ci0tICh2b2lkKXNldFRleHRCbG9ja3M6KE5TQXJyYXkg
KilhcnJheTsKLS0gKHZvaWQpc2V0TWluaW11bUxpbmVIZWlnaHQ6KENHRmxvYXQpYUZsb2F0Owot
LSAoTlNBcnJheSAqKXRleHRMaXN0czsKLS0gKHZvaWQpcmVtb3ZlVGFiU3RvcDooTlNUZXh0VGFi
ICopYW5PYmplY3Q7Ci0tICh2b2lkKWFkZFRhYlN0b3A6KE5TVGV4dFRhYiAqKWFuT2JqZWN0Owot
LSAoTlNBcnJheSAqKXRhYlN0b3BzOwotLSAodm9pZClzZXRIeXBoZW5hdGlvbkZhY3RvcjooZmxv
YXQpYUZhY3RvcjsKLUBlbmQKLQotQGludGVyZmFjZSBOU1NoYWRvdwotLSAodm9pZClzZXRTaGFk
b3dPZmZzZXQ6KENHU2l6ZSlzaXplOwotLSAodm9pZClzZXRTaGFkb3dCbHVyUmFkaXVzOihDR0Zs
b2F0KXJhZGl1czsKLS0gKHZvaWQpc2V0U2hhZG93Q29sb3I6KFVJQ29sb3IgKiljb2xvcjsKLUBl
bmQKLQotQGludGVyZmFjZSBOU1RleHRCbG9jayA6IE5TT2JqZWN0Ci0tICh2b2lkKXNldFZhbHVl
OihDR0Zsb2F0KXZhbCB0eXBlOihOU1RleHRCbG9ja1ZhbHVlVHlwZSl0eXBlIGZvckRpbWVuc2lv
bjooTlNUZXh0QmxvY2tEaW1lbnNpb24pZGltZW5zaW9uOwotLSAodm9pZClzZXRXaWR0aDooQ0dG
bG9hdCl2YWwgdHlwZTooTlNUZXh0QmxvY2tWYWx1ZVR5cGUpdHlwZSBmb3JMYXllcjooTlNUZXh0
QmxvY2tMYXllcilsYXllciBlZGdlOihOU1JlY3RFZGdlKWVkZ2U7Ci0tICh2b2lkKXNldEJhY2tn
cm91bmRDb2xvcjooVUlDb2xvciAqKWNvbG9yOwotLSAoVUlDb2xvciAqKWJhY2tncm91bmRDb2xv
cjsKLS0gKHZvaWQpc2V0Qm9yZGVyQ29sb3I6KFVJQ29sb3IgKiljb2xvciBmb3JFZGdlOihOU1Jl
Y3RFZGdlKWVkZ2U7Ci0tICh2b2lkKXNldEJvcmRlckNvbG9yOihVSUNvbG9yICopY29sb3I7ICAg
ICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2Qgc2V0cyBhbGwgZWRnZXMgYXQgb25jZQotLSAodm9p
ZClzZXRWZXJ0aWNhbEFsaWdubWVudDooTlNUZXh0QmxvY2tWZXJ0aWNhbEFsaWdubWVudClhbGln
bm1lbnQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNUZXh0TGlzdAotLSAoaWQpaW5pdFdpdGhNYXJr
ZXJGb3JtYXQ6KE5TU3RyaW5nICopZm9ybWF0IG9wdGlvbnM6KE5TVUludGVnZXIpbWFzazsKLS0g
KHZvaWQpc2V0U3RhcnRpbmdJdGVtTnVtYmVyOihOU0ludGVnZXIpaXRlbU51bTsKLS0gKE5TSW50
ZWdlcilzdGFydGluZ0l0ZW1OdW1iZXI7Ci0tIChOU1N0cmluZyAqKW1hcmtlckZvckl0ZW1OdW1i
ZXI6KE5TSW50ZWdlcilpdGVtTnVtOwotLSAodm9pZClyZWxlYXNlOwotQGVuZAotCi1AaW50ZXJm
YWNlIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlIDogTlNQYXJhZ3JhcGhTdHlsZQotLSAodm9pZClz
ZXREZWZhdWx0VGFiSW50ZXJ2YWw6KENHRmxvYXQpYUZsb2F0OwotLSAodm9pZClzZXRUYWJTdG9w
czooTlNBcnJheSAqKWFycmF5OwotQGVuZAotCi1AaW50ZXJmYWNlIE5TVGV4dEF0dGFjaG1lbnQg
OiBOU09iamVjdAotLSAoaWQpaW5pdFdpdGhGaWxlV3JhcHBlcjooTlNGaWxlV3JhcHBlciAqKWZp
bGVXcmFwcGVyOwotI2lmIFBMQVRGT1JNKElPUykKLS0gKHZvaWQpc2V0Qm91bmRzOihDR1JlY3Qp
Ym91bmRzOwotI2VuZGlmCi0tICh2b2lkKXJlbGVhc2U7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNU
ZXh0VGFibGUgOiBOU1RleHRCbG9jawotLSAodm9pZClzZXROdW1iZXJPZkNvbHVtbnM6KE5TVUlu
dGVnZXIpbnVtQ29sczsKLS0gKHZvaWQpc2V0Q29sbGFwc2VzQm9yZGVyczooQk9PTClmbGFnOwot
LSAodm9pZClzZXRIaWRlc0VtcHR5Q2VsbHM6KEJPT0wpZmxhZzsKLS0gKHZvaWQpc2V0TGF5b3V0
QWxnb3JpdGhtOihOU1RleHRUYWJsZUxheW91dEFsZ29yaXRobSlhbGdvcml0aG07Ci0tIChOU1VJ
bnRlZ2VyKW51bWJlck9mQ29sdW1uczsKLS0gKHZvaWQpcmVsZWFzZTsKLUBlbmQKLQotQGludGVy
ZmFjZSBOU1RleHRUYWJsZUJsb2NrIDogTlNUZXh0QmxvY2sKLS0gKGlkKWluaXRXaXRoVGFibGU6
KE5TVGV4dFRhYmxlICopdGFibGUgc3RhcnRpbmdSb3c6KE5TSW50ZWdlcilyb3cgcm93U3Bhbjoo
TlNJbnRlZ2VyKXJvd1NwYW4gc3RhcnRpbmdDb2x1bW46KE5TSW50ZWdlciljb2wgY29sdW1uU3Bh
bjooTlNJbnRlZ2VyKWNvbFNwYW47ICAgICAvLyBEZXNpZ25hdGVkIGluaXRpYWxpemVyCi0tIChO
U0ludGVnZXIpc3RhcnRpbmdDb2x1bW47Ci0tIChOU0ludGVnZXIpc3RhcnRpbmdSb3c7Ci0tIChO
U1VJbnRlZ2VyKW51bWJlck9mQ29sdW1uczsKLS0gKE5TSW50ZWdlciljb2x1bW5TcGFuOwotLSAo
TlNJbnRlZ2VyKXJvd1NwYW47Ci1AZW5kCi0KLSNlbHNlCiBzdGF0aWMgTlNGaWxlV3JhcHBlciAq
ZmlsZVdyYXBwZXJGb3JVUkwoRG9jdW1lbnRMb2FkZXIgKiwgTlNVUkwgKik7CiBzdGF0aWMgTlNG
aWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtZW50KEVsZW1lbnQqKTsKIAotQGludGVyZmFj
ZSBOU1RleHRBdHRhY2htZW50IChXZWJDb3JlTlNUZXh0QXR0YWNobWVudCkKLS0gKHZvaWQpc2V0
SWdub3Jlc09yaWVudGF0aW9uOihCT09MKWZsYWc7Ci0tICh2b2lkKXNldEJvdW5kczooQ0dSZWN0
KWJvdW5kczsKLS0gKEJPT0wpaWdub3Jlc09yaWVudGF0aW9uOwotQGVuZAotCi0jZW5kaWYKLQog
Ly8gQWRkaXRpb25hbCBjb250cm9sIFVuaWNvZGUgY2hhcmFjdGVycwogY29uc3QgdW5pY2hhciBX
ZWJOZXh0TGluZUNoYXJhY3RlciA9IDB4MDA4NTsKIApAQCAtMzg5LDg2ICs2Miw2MiBAQCBjb25z
dCB1bmljaGFyIFdlYk5leHRMaW5lQ2hhcmFjdGVyID0gMHgwMDg1OwogKyAoTlNEaWN0aW9uYXJ5
ICopX3N0YW5kYXJkTWFya2VyQXR0cmlidXRlc0ZvckF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAq
KWF0dHJzOwogQGVuZAogCitAaW50ZXJmYWNlIE5TVGV4dEF0dGFjaG1lbnQgKE5TSWdub3JlT3Jp
ZW50YXRpb24pCistICh2b2lkKXNldElnbm9yZXNPcmllbnRhdGlvbjooQk9PTClmbGFnOworLSAo
Qk9PTClpZ25vcmVzT3JpZW50YXRpb247CitAZW5kCisKIEBpbnRlcmZhY2UgTlNVUkwgKFdlYkNv
cmVOU1VSTERldGFpbHMpCiAvLyBGSVhNRTogV2hhdCBpcyB0aGUgcmVhc29uIHRvIHVzZSB0aGlz
IEZvdW5kYXRpb24gbWV0aG9kLCBhbmQgbm90ICtbTlNVUkwgVVJMV2l0aFN0cmluZzpyZWxhdGl2
ZVRvVVJMOl0/CiArIChOU1VSTCAqKV93ZWJfVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNlVVJMOwogQGVuZAogCi1AaW50ZXJmYWNlIE5T
T2JqZWN0KFdlYk1lc3NhZ2VEb2N1bWVudFNpbXVsYXRpb24pCi0rICh2b2lkKWRvY3VtZW50OihO
U09iamVjdCAqKilvdXREb2N1bWVudCBhdHRhY2htZW50OihOU1RleHRBdHRhY2htZW50ICoqKW91
dEF0dGFjaG1lbnQgZm9yVVJMOihOU1VSTCAqKXVybDsKLUBlbmQKLQogQGludGVyZmFjZSBXZWJI
VE1MQ29udmVydGVyKFdlYkhUTUxDb252ZXJ0ZXJJbnRlcm5hbCkKIAogLSAoTlNTdHJpbmcgKilf
c3RyaW5nRm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5Owot
LSAoUGxhdGZvcm1Db2xvciAqKV9jb2xvckZvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5
OihOU1N0cmluZyAqKWtleTsKKy0gKE5TQ29sb3IgKilfY29sb3JGb3JOb2RlOihET01Ob2RlICop
bm9kZSBwcm9wZXJ0eTooTlNTdHJpbmcgKilrZXk7CiAtIChCT09MKV9nZXRGbG9hdDooQ0dGbG9h
dCAqKXZhbCBmb3JOb2RlOihET01Ob2RlICopbm9kZSBwcm9wZXJ0eTooTlNTdHJpbmcgKilrZXk7
CiAtICh2b2lkKV90cmF2ZXJzZU5vZGU6KERPTU5vZGUgKilub2RlIGRlcHRoOihOU0ludGVnZXIp
ZGVwdGggZW1iZWRkZWQ6KEJPT0wpZW1iZWRkZWQ7CiAtICh2b2lkKV90cmF2ZXJzZUZvb3Rlck5v
ZGU6KERPTU5vZGUgKilub2RlIGRlcHRoOihOU0ludGVnZXIpZGVwdGg7CiAKIEBlbmQKIAotQGlt
cGxlbWVudGF0aW9uIFdlYkhUTUxDb252ZXJ0ZXIKLQotI2lmICFQTEFURk9STShJT1MpCiAvLyBS
ZXR1cm5zIHRoZSBmb250IHRvIGJlIHVzZWQgaWYgdGhlIE5TRm9udEF0dHJpYnV0ZU5hbWUgZG9l
c24ndCBleGlzdAogc3RhdGljIE5TRm9udCAqV2ViRGVmYXVsdEZvbnQoKQogewogICAgIHN0YXRp
YyBOU0ZvbnQgKmRlZmF1bHRGb250ID0gbmlsOworICAgIAogICAgIGlmIChkZWZhdWx0Rm9udCkK
ICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb250OwotCi0gICAgTlNGb250ICpmb250ID0gW05TRm9u
dCBmb250V2l0aE5hbWU6QCJIZWx2ZXRpY2EiIHNpemU6MTJdOworICAgIAorICAgIE5TRm9udCAq
Zm9udCA9IFtOU0ZvbnQgZm9udFdpdGhOYW1lOkAiSGVsdmV0aWNhIiBzaXplOjEyXTsgICAgCiAg
ICAgaWYgKCFmb250KQogICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEy
XTsKLQorICAgIAogICAgIGRlZmF1bHRGb250ID0gW2ZvbnQgcmV0YWluXTsKKyAgICAKICAgICBy
ZXR1cm4gZGVmYXVsdEZvbnQ7CiB9Ci0jZW5kaWYKIAotc3RhdGljIFBsYXRmb3JtRm9udCAqX2Zv
bnRGb3JOYW1lQW5kU2l6ZShOU1N0cmluZyAqZm9udE5hbWUsIENHRmxvYXQgc2l6ZSwgTlNNdXRh
YmxlRGljdGlvbmFyeSAqY2FjaGUpCi17Ci0gICAgUGxhdGZvcm1Gb250ICpmb250ID0gW2NhY2hl
IG9iamVjdEZvcktleTpmb250TmFtZV07Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGlmIChmb250
KQotICAgICAgICByZXR1cm4gW2ZvbnQgZm9udFdpdGhTaXplOnNpemVdOworQGltcGxlbWVudGF0
aW9uIFdlYkhUTUxDb252ZXJ0ZXIKIAotICAgIGZvbnQgPSBbUGxhdGZvcm1Gb250Q2xhc3MgZm9u
dFdpdGhOYW1lOmZvbnROYW1lIHNpemU6c2l6ZV07Ci0jZWxzZQorc3RhdGljIE5TRm9udCAqX2Zv
bnRGb3JOYW1lQW5kU2l6ZShOU1N0cmluZyAqZm9udE5hbWUsIENHRmxvYXQgc2l6ZSwgTlNNdXRh
YmxlRGljdGlvbmFyeSAqY2FjaGUpCit7CiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIg
PSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgTlNGb250ICpmb250ID0g
W2NhY2hlIG9iamVjdEZvcktleTpmb250TmFtZV07CisKICAgICBpZiAoZm9udCkgewogICAgICAg
ICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOnNpemVdOwogICAg
ICAgICByZXR1cm4gZm9udDsKICAgICB9CiAgICAgZm9udCA9IFtmb250TWFuYWdlciBmb250V2l0
aEZhbWlseTpmb250TmFtZSB0cmFpdHM6MCB3ZWlnaHQ6MCBzaXplOnNpemVdOwotI2VuZGlmCiAg
ICAgaWYgKCFmb250KSB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBOU0FycmF5ICphdmFp
bGFibGVGYW1pbHlOYW1lcyA9IFtQbGF0Zm9ybUZvbnRDbGFzcyBmYW1pbHlOYW1lc107Ci0jZWxz
ZQogICAgICAgICBOU0FycmF5ICphdmFpbGFibGVGYW1pbHlOYW1lcyA9IFtmb250TWFuYWdlciBh
dmFpbGFibGVGb250RmFtaWxpZXNdOwotI2VuZGlmCi0gICAgICAgIE5TUmFuZ2UgZGl2aWRpbmdS
YW5nZTsKLSAgICAgICAgTlNSYW5nZSBkaXZpZGluZ1NwYWNlUmFuZ2UgPSBbZm9udE5hbWUgcmFu
Z2VPZlN0cmluZzpAIiAiIG9wdGlvbnM6TlNCYWNrd2FyZHNTZWFyY2hdOwotICAgICAgICBOU1Jh
bmdlIGRpdmlkaW5nRGFzaFJhbmdlID0gW2ZvbnROYW1lIHJhbmdlT2ZTdHJpbmc6QCItIiBvcHRp
b25zOk5TQmFja3dhcmRzU2VhcmNoXTsKKyAgICAgICAgTlNSYW5nZSBkaXZpZGluZ1JhbmdlLCBk
aXZpZGluZ1NwYWNlUmFuZ2UgPSBbZm9udE5hbWUgcmFuZ2VPZlN0cmluZzpAIiAiIG9wdGlvbnM6
TlNCYWNrd2FyZHNTZWFyY2hdLCBkaXZpZGluZ0Rhc2hSYW5nZSA9IFtmb250TmFtZSByYW5nZU9m
U3RyaW5nOkAiLSIgb3B0aW9uczpOU0JhY2t3YXJkc1NlYXJjaF07CiAgICAgICAgIGRpdmlkaW5n
UmFuZ2UgPSAoMCA8IGRpdmlkaW5nU3BhY2VSYW5nZS5sZW5ndGggJiYgMCA8IGRpdmlkaW5nRGFz
aFJhbmdlLmxlbmd0aCkgPyAoZGl2aWRpbmdTcGFjZVJhbmdlLmxvY2F0aW9uID4gZGl2aWRpbmdE
YXNoUmFuZ2UubG9jYXRpb24gPyBkaXZpZGluZ1NwYWNlUmFuZ2UgOiBkaXZpZGluZ0Rhc2hSYW5n
ZSkgOiAoMCA8IGRpdmlkaW5nU3BhY2VSYW5nZS5sZW5ndGggPyBkaXZpZGluZ1NwYWNlUmFuZ2Ug
OiBkaXZpZGluZ0Rhc2hSYW5nZSk7Ci0KLSAgICAgICAgd2hpbGUgKGRpdmlkaW5nUmFuZ2UubGVu
Z3RoID4gMCkgeworICAgICAgICB3aGlsZSAoMCA8IGRpdmlkaW5nUmFuZ2UubGVuZ3RoKSB7CiAg
ICAgICAgICAgICBOU1N0cmluZyAqZmFtaWx5TmFtZSA9IFtmb250TmFtZSBzdWJzdHJpbmdUb0lu
ZGV4OmRpdmlkaW5nUmFuZ2UubG9jYXRpb25dOwogICAgICAgICAgICAgaWYgKFthdmFpbGFibGVG
YW1pbHlOYW1lcyBjb250YWluc09iamVjdDpmYW1pbHlOYW1lXSkgewotI2lmIFBMQVRGT1JNKElP
UykKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqZmFjZU5hbWUgPSBbZm9udE5hbWUgc3Vic3Ry
aW5nRnJvbUluZGV4OihkaXZpZGluZ1JhbmdlLmxvY2F0aW9uICsgZGl2aWRpbmdSYW5nZS5sZW5n
dGgpXTsKLSAgICAgICAgICAgICAgICBOU0FycmF5ICpmYW1pbHlNZW1iZXJGYWNlTmFtZXMgPSBb
UGxhdGZvcm1Gb250Q2xhc3MgZm9udE5hbWVzRm9yRmFtaWx5TmFtZTpmYW1pbHlOYW1lXTsKLSAg
ICAgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICpmYW1pbHlNZW1iZXJGYWNlTmFtZSBpbiBmYW1p
bHlNZW1iZXJGYWNlTmFtZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFtmYW1pbHlNZW1i
ZXJGYWNlTmFtZSBjb21wYXJlOmZhY2VOYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFy
Y2hdID09IE5TT3JkZXJlZFNhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBb
UGxhdGZvcm1Gb250Q2xhc3MgZm9udFdpdGhOYW1lOmZhbWlseU1lbWJlckZhY2VOYW1lIHNpemU6
c2l6ZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWZvbnQgJiYgW2Zh
bWlseU1lbWJlckZhY2VOYW1lcyBjb3VudF0pCi0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSBb
Z2V0VUlGb250Q2xhc3MoKSBmb250V2l0aE5hbWU6ZmFtaWx5TmFtZSBzaXplOnNpemVdOwotI2Vs
c2UKICAgICAgICAgICAgICAgICBOU0FycmF5ICpmYW1pbHlNZW1iZXJBcnJheTsKICAgICAgICAg
ICAgICAgICBOU1N0cmluZyAqZmFjZU5hbWUgPSBbZm9udE5hbWUgc3Vic3RyaW5nRnJvbUluZGV4
OihkaXZpZGluZ1JhbmdlLmxvY2F0aW9uICsgZGl2aWRpbmdSYW5nZS5sZW5ndGgpXTsKICAgICAg
ICAgICAgICAgICBOU0FycmF5ICpmYW1pbHlNZW1iZXJBcnJheXMgPSBbZm9udE1hbmFnZXIgYXZh
aWxhYmxlTWVtYmVyc09mRm9udEZhbWlseTpmYW1pbHlOYW1lXTsKQEAgLTQ5MCw3ICsxMzksNiBA
QCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udEZvck5hbWVBbmRTaXplKE5TU3RyaW5nICpmb250
TmFtZSwgQ0dGbG9hdCBzaXplLCBOU011dAogICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9
IFtmb250TWFuYWdlciBmb250V2l0aEZhbWlseTpmYW1pbHlOYW1lIHRyYWl0czp0cmFpdHMgd2Vp
Z2h0OndlaWdodCBzaXplOnNpemVdOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQotI2VuZGlmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGRpdmlkaW5nU3BhY2VSYW5nZSA9IFtmYW1pbHlOYW1lIHJh
bmdlT2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoXTsKQEAgLTQ5OSwyMSAr
MTQ3LDExIEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250Rm9yTmFtZUFuZFNpemUoTlNTdHJp
bmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNpemUsIE5TTXV0CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGlmICghZm9udCkKLSAgICAgICAgZm9u
dCA9IFtQbGF0Zm9ybUZvbnRDbGFzcyBzeXN0ZW1Gb250T2ZTaXplOnNpemVdOwotI2Vsc2UKLSAg
ICBpZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSBbTlNGb250IGZvbnRXaXRoTmFtZTpAIlRpbWVz
IiBzaXplOnNpemVdOwotICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9IFtOU0ZvbnQgdXNl
ckZvbnRPZlNpemU6c2l6ZV07Ci0gICAgaWYgKCFmb250KQotICAgICAgICBmb250ID0gW2ZvbnRN
YW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnNpemVdOwotICAgIGlm
ICghZm9udCkKLSAgICAgICAgZm9udCA9IFdlYkRlZmF1bHRGb250KCk7Ci0jZW5kaWYKKyAgICBp
ZiAoIWZvbnQpIGZvbnQgPSBbTlNGb250IGZvbnRXaXRoTmFtZTpAIlRpbWVzIiBzaXplOnNpemVd
OworICAgIGlmICghZm9udCkgZm9udCA9IFtOU0ZvbnQgdXNlckZvbnRPZlNpemU6c2l6ZV07Cisg
ICAgaWYgKCFmb250KSBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRG
b250KCkgdG9TaXplOnNpemVdOworICAgIGlmICghZm9udCkgZm9udCA9IFdlYkRlZmF1bHRGb250
KCk7CiAgICAgW2NhY2hlIHNldE9iamVjdDpmb250IGZvcktleTpmb250TmFtZV07Ci0KICAgICBy
ZXR1cm4gZm9udDsKIH0KIApAQCAtNTIxLDcgKzE1OSw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQg
Kl9mb250Rm9yTmFtZUFuZFNpemUoTlNTdHJpbmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNpemUsIE5T
TXV0CiB7CiAgICAgc3RhdGljIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlICpkZWZhdWx0UGFyYWdy
YXBoU3R5bGUgPSBuaWw7CiAgICAgaWYgKCFkZWZhdWx0UGFyYWdyYXBoU3R5bGUpIHsKLSAgICAg
ICAgZGVmYXVsdFBhcmFncmFwaFN0eWxlID0gW1tQbGF0Zm9ybU5TUGFyYWdyYXBoU3R5bGUgZGVm
YXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV07CisgICAgICAgIGRlZmF1bHRQYXJhZ3Jh
cGhTdHlsZSA9IFtbTlNQYXJhZ3JhcGhTdHlsZSBkZWZhdWx0UGFyYWdyYXBoU3R5bGVdIG11dGFi
bGVDb3B5XTsKICAgICAgICAgW2RlZmF1bHRQYXJhZ3JhcGhTdHlsZSBzZXREZWZhdWx0VGFiSW50
ZXJ2YWw6MzZdOwogICAgICAgICBbZGVmYXVsdFBhcmFncmFwaFN0eWxlIHNldFRhYlN0b3BzOltO
U0FycmF5IGFycmF5XV07CiAgICAgfQpAQCAtNTQ1LDggKzE4Myw3IEBAIHN0YXRpYyBQbGF0Zm9y
bUZvbnQgKl9mb250Rm9yTmFtZUFuZFNpemUoTlNTdHJpbmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNp
emUsIE5TTXV0CiAgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqcmVzdWx0ID0gbmlsOwogICAg
IHJlc3VsdCA9IFtfY29tcHV0ZWRTdHlsZXNGb3JFbGVtZW50cyBvYmplY3RGb3JLZXk6ZWxlbWVu
dF07CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICBpZiAoW3Jlc3VsdCBpc0VxdWFsOltOU051
bGwgbnVsbF1dKQotICAgICAgICAgICAgcmVzdWx0ID0gbmlsOworICAgICAgICBpZiAoW1tOU051
bGwgbnVsbF0gaXNFcXVhbDpyZXN1bHRdKSByZXN1bHQgPSBuaWw7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgcmVzdWx0ID0gW2RvY3VtZW50IGdldENvbXB1dGVkU3R5bGU6ZWxlbWVudCBwc2V1ZG9F
bGVtZW50OkAiIl0gOwogICAgICAgICBbX2NvbXB1dGVkU3R5bGVzRm9yRWxlbWVudHMgc2V0T2Jq
ZWN0OihyZXN1bHQgPyAoaWQpcmVzdWx0IDogKGlkKVtOU051bGwgbnVsbF0pIGZvcktleTplbGVt
ZW50XTsKQEAgLTU1OCw4ICsxOTUsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udEZvck5h
bWVBbmRTaXplKE5TU3RyaW5nICpmb250TmFtZSwgQ0dGbG9hdCBzaXplLCBOU011dAogewogICAg
IERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnJlc3VsdCA9IFtfc3BlY2lmaWVkU3R5bGVzRm9yRWxl
bWVudHMgb2JqZWN0Rm9yS2V5OmVsZW1lbnRdOwogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAg
aWYgKFtyZXN1bHQgaXNFcXVhbDpbTlNOdWxsIG51bGxdXSkKLSAgICAgICAgICAgIHJlc3VsdCA9
IG5pbDsKKyAgICAgICAgaWYgKFtbTlNOdWxsIG51bGxdIGlzRXF1YWw6cmVzdWx0XSkgcmVzdWx0
ID0gbmlsOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IFtlbGVtZW50IHN0eWxlXTsK
ICAgICAgICAgW19zcGVjaWZpZWRTdHlsZXNGb3JFbGVtZW50cyBzZXRPYmplY3Q6KHJlc3VsdCA/
IChpZClyZXN1bHQgOiAoaWQpW05TTnVsbCBudWxsXSkgZm9yS2V5OmVsZW1lbnRdOwpAQCAtNTcz
LDggKzIwOSw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250Rm9yTmFtZUFuZFNpemUoTlNT
dHJpbmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNpemUsIE5TTXV0CiAgICAgQk9PTCBpbmhlcml0ID0g
WUVTOwogICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7ICAgIAog
ICAgIGlmIChlbGVtZW50ICYmIFtlbGVtZW50IG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RF
KSB7Ci0gICAgICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKmNvbXB1dGVkU3R5bGU7Ci0gICAg
ICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnNwZWNpZmllZFN0eWxlOworICAgICAgICBET01D
U1NTdHlsZURlY2xhcmF0aW9uICpjb21wdXRlZFN0eWxlLCAqc3BlY2lmaWVkU3R5bGU7CiAgICAg
ICAgIGluaGVyaXQgPSBOTzsKICAgICAgICAgaWYgKCFyZXN1bHQgJiYgKGNvbXB1dGVkU3R5bGUg
PSBbc2VsZiBfY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQ6ZWxlbWVudF0pKSB7CiAgICAgICAgICAg
ICBET01DU1NQcmltaXRpdmVWYWx1ZSAqY29tcHV0ZWRWYWx1ZSA9IChET01DU1NQcmltaXRpdmVW
YWx1ZSAqKVtjb21wdXRlZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6a2V5XTsKQEAgLTU4NCwx
MSArMjE5LDExIEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250Rm9yTmFtZUFuZFNpemUoTlNT
dHJpbmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNpemUsIE5TTXV0CiAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSBbY29tcHV0ZWRWYWx1ZSBwcmltaXRpdmVU
eXBlXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19T
VFJJTkcgfHwgcHJpbWl0aXZlVHlwZSA9PSBET01fQ1NTX1VSSSB8fCBwcmltaXRpdmVUeXBlID09
IERPTV9DU1NfSURFTlQgfHwgcHJpbWl0aXZlVHlwZSA9PSBET01fQ1NTX0FUVFIpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtjb21wdXRlZFZhbHVlIGdldFN0cmluZ1ZhbHVl
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgIVtyZXN1bHQgbGVuZ3Ro
XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuaWw7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIFtyZXN1bHQgbGVuZ3RoXSA9PSAwKSByZXN1bHQg
PSBuaWw7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHZhbHVlVHlwZSA9PSBET01fQ1NTX1ZBTFVFX0xJU1QpCisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19WQUxVRV9MSVNUKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IFtjb21wdXRlZFN0eWxlIGdldFByb3BlcnR5VmFsdWU6a2V5XTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFyZXN1
bHQgJiYgKHNwZWNpZmllZFN0eWxlID0gW3NlbGYgX3NwZWNpZmllZFN0eWxlRm9yRWxlbWVudDpl
bGVtZW50XSkpIHsKQEAgLTU5OSwxNSArMjM0LDE3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9m
b250Rm9yTmFtZUFuZFNpemUoTlNTdHJpbmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNpemUsIE5TTXV0
CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSBbc3Bl
Y2lmaWVkVmFsdWUgcHJpbWl0aXZlVHlwZV07CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcmlt
aXRpdmVUeXBlID09IERPTV9DU1NfU1RSSU5HIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19V
UkkgfHwgcHJpbWl0aXZlVHlwZSA9PSBET01fQ1NTX0lERU5UIHx8IHByaW1pdGl2ZVR5cGUgPT0g
RE9NX0NTU19BVFRSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbc3BlY2lm
aWVkVmFsdWUgZ2V0U3RyaW5nVmFsdWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCAmJiAhW3Jlc3VsdCBsZW5ndGhdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG5pbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBbcmVzdWx0IGxlbmd0aF0gPT0gMCkgcmVz
dWx0ID0gbmlsOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gPz8/IGhhY2sgYWxlcnQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gW3NwZWNpZmllZFN0eWxlIGdldFByb3BlcnR5VmFsdWU6a2V5XTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfSU5IRVJJVCkKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBET01fQ1NTX0lOSEVSSVQpIHsKICAg
ICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKLSAgICAgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19WQUxVRV9MSVNUKQorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfVkFMVUVfTElTVCkgewogICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBbc3BlY2lmaWVkU3R5bGUgZ2V0UHJvcGVydHlWYWx1ZTprZXldOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIXJl
c3VsdCkgewpAQCAtNjI1LDcgKzI2Miw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250Rm9y
TmFtZUFuZFNpemUoTlNTdHJpbmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNpemUsIE5TTXV0CiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAiYmxvY2siOwogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGxpVGFnKSkKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gQCJsaXN0LWl0ZW0iOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVt
ZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0hU
TUxUYWJsZUVsZW1lbnQoY29yZUVsZW1lbnQpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBAInRhYmxlIjsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFn
TmFtZSh0clRhZykpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUtcm93IjsK
QEAgLTY4OSw4ICszMjYsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udEZvck5hbWVBbmRT
aXplKE5TU3RyaW5nICpmb250TmFtZSwgQ0dGbG9hdCBzaXplLCBOU011dAogICAgIH0KICAgICBp
ZiAoIXJlc3VsdCAmJiBpbmhlcml0KSB7CiAgICAgICAgIERPTU5vZGUgKnBhcmVudE5vZGUgPSBb
bm9kZSBwYXJlbnROb2RlXTsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTpwYXJlbnROb2RlIHByb3BlcnR5OmtleV07Cisg
ICAgICAgIGlmIChwYXJlbnROb2RlKSByZXN1bHQgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTpwYXJl
bnROb2RlIHByb3BlcnR5OmtleV07CiAgICAgfQogICAgIHJldHVybiByZXN1bHQgPyBbcmVzdWx0
IGxvd2VyY2FzZVN0cmluZ10gOiBuaWw7CiB9CkBAIC02OTgsMTUgKzMzNCwxNSBAQCBzdGF0aWMg
UGxhdGZvcm1Gb250ICpfZm9udEZvck5hbWVBbmRTaXplKE5TU3RyaW5nICpmb250TmFtZSwgQ0dG
bG9hdCBzaXplLCBOU011dAogLSAoTlNTdHJpbmcgKilfc3RyaW5nRm9yTm9kZTooRE9NTm9kZSAq
KW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5CiB7CiAgICAgTlNTdHJpbmcgKnJlc3VsdCA9
IG5pbDsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlRGljdGlv
bmFyeSA9IFtfc3RyaW5nc0Zvck5vZGVzIG9iamVjdEZvcktleTpub2RlXTsKKyAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICphdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gW19zdHJpbmdzRm9yTm9kZXMgb2Jq
ZWN0Rm9yS2V5Om5vZGVdOwogICAgIGlmICghYXR0cmlidXRlRGljdGlvbmFyeSkgewotICAgICAg
ICBhdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxs
b2NdIGluaXRdKTsKLSAgICAgICAgW19zdHJpbmdzRm9yTm9kZXMgc2V0T2JqZWN0OmF0dHJpYnV0
ZURpY3Rpb25hcnkuZ2V0KCkgZm9yS2V5Om5vZGVdOworICAgICAgICBhdHRyaWJ1dGVEaWN0aW9u
YXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICAgICAgW19zdHJp
bmdzRm9yTm9kZXMgc2V0T2JqZWN0OmF0dHJpYnV0ZURpY3Rpb25hcnkgZm9yS2V5Om5vZGVdOwor
ICAgICAgICBbYXR0cmlidXRlRGljdGlvbmFyeSByZWxlYXNlXTsKICAgICB9CiAgICAgcmVzdWx0
ID0gW2F0dHJpYnV0ZURpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV07CiAgICAgaWYgKHJlc3Vs
dCkgewotICAgICAgICBpZiAoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCIiXSkKLSAgICAgICAg
ICAgIHJlc3VsdCA9IG5pbDsKKyAgICAgICAgaWYgKFtAIiIgaXNFcXVhbFRvU3RyaW5nOnJlc3Vs
dF0pIHJlc3VsdCA9IG5pbDsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQgPSBbc2VsZiBf
Y29tcHV0ZWRTdHJpbmdGb3JOb2RlOm5vZGUgcHJvcGVydHk6a2V5XTsKICAgICAgICAgW2F0dHJp
YnV0ZURpY3Rpb25hcnkgc2V0T2JqZWN0OihyZXN1bHQgPyByZXN1bHQgOiBAIiIpIGZvcktleTpr
ZXldOwpAQCAtNzQ0LDggKzM4MCw3IEBAIHN0YXRpYyBpbmxpbmUgQk9PTCBfZ2V0RmxvYXQoRE9N
Q1NTUHJpbWl0aXZlVmFsdWUgKnByaW1pdGl2ZVZhbHVlLCBDR0Zsb2F0ICp2YWwpCiAKIC0gKEJP
T0wpX2dldENvbXB1dGVkRmxvYXQ6KENHRmxvYXQgKil2YWwgZm9yTm9kZTooRE9NTm9kZSAqKW5v
ZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5CiB7Ci0gICAgQk9PTCByZXN1bHQgPSBOTzsKLSAg
ICBCT09MIGluaGVyaXQgPSBZRVM7CisgICAgQk9PTCByZXN1bHQgPSBOTywgaW5oZXJpdCA9IFlF
UzsKICAgICBDR0Zsb2F0IGZsb2F0VmFsID0gMDsKICAgICBET01FbGVtZW50ICplbGVtZW50ID0g
KERPTUVsZW1lbnQgKilub2RlOyAgICAKICAgICBpZiAoZWxlbWVudCAmJiBbZWxlbWVudCBub2Rl
VHlwZV0gPT0gRE9NX0VMRU1FTlRfTk9ERSkgewpAQCAtNzUzLDE3ICszODgsMTkgQEAgc3RhdGlj
IGlubGluZSBCT09MIF9nZXRGbG9hdChET01DU1NQcmltaXRpdmVWYWx1ZSAqcHJpbWl0aXZlVmFs
dWUsIENHRmxvYXQgKnZhbCkKICAgICAgICAgaW5oZXJpdCA9IE5POwogICAgICAgICBpZiAoIXJl
c3VsdCAmJiAoY29tcHV0ZWRTdHlsZSA9IFtzZWxmIF9jb21wdXRlZFN0eWxlRm9yRWxlbWVudDpl
bGVtZW50XSkpIHsKICAgICAgICAgICAgIERPTUNTU1ByaW1pdGl2ZVZhbHVlICpjb21wdXRlZFZh
bHVlID0gKERPTUNTU1ByaW1pdGl2ZVZhbHVlICopW2NvbXB1dGVkU3R5bGUgZ2V0UHJvcGVydHlD
U1NWYWx1ZTprZXldOwotICAgICAgICAgICAgaWYgKGNvbXB1dGVkVmFsdWUgJiYgW2NvbXB1dGVk
VmFsdWUgY3NzVmFsdWVUeXBlXSA9PSBET01fQ1NTX1BSSU1JVElWRV9WQUxVRSkKKyAgICAgICAg
ICAgIGlmIChjb21wdXRlZFZhbHVlICYmIFtjb21wdXRlZFZhbHVlIGNzc1ZhbHVlVHlwZV0gPT0g
RE9NX0NTU19QUklNSVRJVkVfVkFMVUUpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBfZ2V0
RmxvYXQoY29tcHV0ZWRWYWx1ZSwgJmZsb2F0VmFsKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAoIXJlc3VsdCAmJiAoc3BlY2lmaWVkU3R5bGUgPSBbc2VsZiBfc3BlY2lm
aWVkU3R5bGVGb3JFbGVtZW50OmVsZW1lbnRdKSkgewogICAgICAgICAgICAgRE9NQ1NTUHJpbWl0
aXZlVmFsdWUgKnNwZWNpZmllZFZhbHVlID0gKERPTUNTU1ByaW1pdGl2ZVZhbHVlICopW3NwZWNp
ZmllZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6a2V5XTsKICAgICAgICAgICAgIGlmIChzcGVj
aWZpZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZhbHVlVHlwZSA9
IFtzcGVjaWZpZWRWYWx1ZSBjc3NWYWx1ZVR5cGVdOwotICAgICAgICAgICAgICAgIGlmICh2YWx1
ZVR5cGUgPT0gRE9NX0NTU19QUklNSVRJVkVfVkFMVUUpCisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlVHlwZSA9PSBET01fQ1NTX1BSSU1JVElWRV9WQUxVRSkgewogICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBfZ2V0RmxvYXQoc3BlY2lmaWVkVmFsdWUsICZmbG9hdFZhbCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfSU5IRVJJVCkKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBET01fQ1NTX0lOSEVSSVQpIHsKICAgICAg
ICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFyZXN1bHQpIHsKQEAgLTc3NCw4ICs0MTEs
NyBAQCBzdGF0aWMgaW5saW5lIEJPT0wgX2dldEZsb2F0KERPTUNTU1ByaW1pdGl2ZVZhbHVlICpw
cmltaXRpdmVWYWx1ZSwgQ0dGbG9hdCAqdmFsKQogICAgIH0KICAgICBpZiAoIXJlc3VsdCAmJiBp
bmhlcml0KSB7CiAgICAgICAgIERPTU5vZGUgKnBhcmVudE5vZGUgPSBbbm9kZSBwYXJlbnROb2Rl
XTsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUpCi0gICAgICAgICAgICByZXN1bHQgPSBbc2VsZiBf
Z2V0RmxvYXQ6JmZsb2F0VmFsIGZvck5vZGU6cGFyZW50Tm9kZSBwcm9wZXJ0eTprZXldOworICAg
ICAgICBpZiAocGFyZW50Tm9kZSkgcmVzdWx0ID0gW3NlbGYgX2dldEZsb2F0OiZmbG9hdFZhbCBm
b3JOb2RlOnBhcmVudE5vZGUgcHJvcGVydHk6a2V5XTsKICAgICB9CiAgICAgaWYgKHJlc3VsdCAm
JiB2YWwpCiAgICAgICAgICp2YWwgPSBmbG9hdFZhbDsKQEAgLTc4NywxMCArNDIzLDExIEBAIHN0
YXRpYyBpbmxpbmUgQk9PTCBfZ2V0RmxvYXQoRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKnByaW1pdGl2
ZVZhbHVlLCBDR0Zsb2F0ICp2YWwpCiAgICAgQk9PTCByZXN1bHQgPSBOTzsKICAgICBDR0Zsb2F0
IGZsb2F0VmFsID0gMDsKICAgICBOU051bWJlciAqZmxvYXROdW1iZXI7Ci0gICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZURpY3Rpb25hcnkgPSBbX2Zsb2F0c0Zvck5v
ZGVzIG9iamVjdEZvcktleTpub2RlXTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVEaWN0aW9uYXJ5ID0gW19mbG9hdHNGb3JOb2RlcyBvYmplY3RGb3JLZXk6bm9kZV07CiAgICAg
aWYgKCFhdHRyaWJ1dGVEaWN0aW9uYXJ5KSB7CiAgICAgICAgIGF0dHJpYnV0ZURpY3Rpb25hcnkg
PSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICBbX2Zsb2F0c0Zv
ck5vZGVzIHNldE9iamVjdDphdHRyaWJ1dGVEaWN0aW9uYXJ5LmdldCgpIGZvcktleTpub2RlXTsK
KyAgICAgICAgW19mbG9hdHNGb3JOb2RlcyBzZXRPYmplY3Q6YXR0cmlidXRlRGljdGlvbmFyeSBm
b3JLZXk6bm9kZV07CisgICAgICAgIFthdHRyaWJ1dGVEaWN0aW9uYXJ5IHJlbGVhc2VdOwogICAg
IH0KICAgICBmbG9hdE51bWJlciA9IFthdHRyaWJ1dGVEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpr
ZXldOwogICAgIGlmIChmbG9hdE51bWJlcikgewpAQCAtODAyLDM3ICs0MzksMTAgQEAgc3RhdGlj
IGlubGluZSBCT09MIF9nZXRGbG9hdChET01DU1NQcmltaXRpdmVWYWx1ZSAqcHJpbWl0aXZlVmFs
dWUsIENHRmxvYXQgKnZhbCkKICAgICAgICAgcmVzdWx0ID0gW3NlbGYgX2dldENvbXB1dGVkRmxv
YXQ6JmZsb2F0VmFsIGZvck5vZGU6bm9kZSBwcm9wZXJ0eTprZXldOwogICAgICAgICBbYXR0cmli
dXRlRGljdGlvbmFyeSBzZXRPYmplY3Q6KHJlc3VsdCA/IChpZClbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTpmbG9hdFZhbF0gOiAoaWQpW05TTnVsbCBudWxsXSkgZm9yS2V5OmtleV07CiAgICAg
fQotICAgIGlmIChyZXN1bHQgJiYgdmFsKQotICAgICAgICAqdmFsID0gZmxvYXRWYWw7CisgICAg
aWYgKHJlc3VsdCAmJiB2YWwpICp2YWwgPSBmbG9hdFZhbDsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgTlNTdHJpbmcgKl9OU0ZpcnN0UGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5z
KE5TU2VhcmNoUGF0aERpcmVjdG9yeSBkaXJlY3RvcnksIE5TU2VhcmNoUGF0aERvbWFpbk1hc2sg
ZG9tYWluTWFzaywgQk9PTCBleHBhbmRUaWxkZSkKLXsKLSAgICBOU0FycmF5ICphcnJheSA9IE5T
U2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKGRpcmVjdG9yeSwgZG9tYWluTWFzaywg
ZXhwYW5kVGlsZGUpOwotICAgIHJldHVybiBbYXJyYXkgY291bnRdID49IDEgPyBbYXJyYXkgb2Jq
ZWN0QXRJbmRleDowXSA6IG5pbDsKLX0KLQotc3RhdGljIE5TU3RyaW5nICpfTlNTeXN0ZW1MaWJy
YXJ5UGF0aCh2b2lkKQotewotICAgIHJldHVybiBfTlNGaXJzdFBhdGhGb3JEaXJlY3Rvcmllc0lu
RG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWluTWFzaywgWUVTKTsKLX0K
LQotLSAoTlNCdW5kbGUgKilfd2ViS2l0QnVuZGxlCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9
IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXTsKLSAg
ICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRo
OltfTlNTeXN0ZW1MaWJyYXJ5UGF0aCgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
IkZyYW1ld29ya3MvV2ViS2l0LmZyYW1ld29yayJdXTsKLSAgICByZXR1cm4gYnVuZGxlOwotfQot
Ci0jaWYgUExBVEZPUk0oSU9TKQotc3RhdGljIGlubGluZSBVSUNvbG9yICpfY29sb3JGb3JSR0JD
b2xvcihET01SR0JDb2xvciAqZG9tUkdCQ29sb3IsIEJPT0wpCi17Ci0gICAgcmV0dXJuIFtnZXRV
SUNvbG9yQ2xhc3MoKSBfZGlzYW1iaWd1YXRlZF9kdWVfdG9fQ0lJbWFnZV9jb2xvcldpdGhDR0Nv
bG9yOltkb21SR0JDb2xvciBjb2xvcl1dOwotfQotCi0jZWxzZQogc3RhdGljIGlubGluZSBOU0Nv
bG9yICpfY29sb3JGb3JSR0JDb2xvcihET01SR0JDb2xvciAqZG9tUkdCQ29sb3IsIEJPT0wgaWdu
b3JlQmxhY2spCiB7CiAgICAgTlNDb2xvciAqY29sb3IgPSBbZG9tUkdCQ29sb3IgX2NvbG9yXTsK
QEAgLTg0Myw3MSArNDUzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgTlNDb2xvciAqX2NvbG9yRm9yUkdC
Q29sb3IoRE9NUkdCQ29sb3IgKmRvbVJHQkNvbG9yLCBCT09MIGlnbm9yZUJsCiAgICAgICAgIGlm
IChbY29sb3JTcGFjZSBpc0VxdWFsOltOU0NvbG9yU3BhY2UgZ2VuZXJpY0dyYXlDb2xvclNwYWNl
XV0gfHwgW2NvbG9yU3BhY2UgaXNFcXVhbDpbTlNDb2xvclNwYWNlIGRldmljZUdyYXlDb2xvclNw
YWNlXV0pIHsKICAgICAgICAgICAgIENHRmxvYXQgd2hpdGUsIGFscGhhOwogICAgICAgICAgICAg
W2NvbG9yIGdldFdoaXRlOiZ3aGl0ZSBhbHBoYTomYWxwaGFdOwotICAgICAgICAgICAgaWYgKHdo
aXRlIDwgQ29sb3JFcHNpbG9uICYmIChpZ25vcmVCbGFjayB8fCBhbHBoYSA8IENvbG9yRXBzaWxv
bikpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBuaWw7CisgICAgICAgICAgICBpZiAod2hpdGUg
PCBDb2xvckVwc2lsb24gJiYgKGlnbm9yZUJsYWNrIHx8IGFscGhhIDwgQ29sb3JFcHNpbG9uKSkg
Y29sb3IgPSBuaWw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOU0NvbG9yICpyZ2JD
b2xvciA9IG5pbDsKLSAgICAgICAgICAgIGlmIChbY29sb3JTcGFjZSBpc0VxdWFsOltOU0NvbG9y
U3BhY2UgZ2VuZXJpY1JHQkNvbG9yU3BhY2VdXSB8fCBbY29sb3JTcGFjZSBpc0VxdWFsOltOU0Nv
bG9yU3BhY2UgZGV2aWNlUkdCQ29sb3JTcGFjZV1dKQotICAgICAgICAgICAgICAgIHJnYkNvbG9y
ID0gY29sb3I7Ci0gICAgICAgICAgICBpZiAoIXJnYkNvbG9yKQotICAgICAgICAgICAgICAgIHJn
YkNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9y
U3BhY2VdOworICAgICAgICAgICAgaWYgKFtjb2xvclNwYWNlIGlzRXF1YWw6W05TQ29sb3JTcGFj
ZSBnZW5lcmljUkdCQ29sb3JTcGFjZV1dIHx8IFtjb2xvclNwYWNlIGlzRXF1YWw6W05TQ29sb3JT
cGFjZSBkZXZpY2VSR0JDb2xvclNwYWNlXV0pIHJnYkNvbG9yID0gY29sb3I7CisgICAgICAgICAg
ICBpZiAoIXJnYkNvbG9yKSByZ2JDb2xvciA9IFtjb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5h
bWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKICAgICAgICAgICAgIGlmIChyZ2JDb2xvcikgewog
ICAgICAgICAgICAgICAgIENHRmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CiAgICAgICAg
ICAgICAgICAgW3JnYkNvbG9yIGdldFJlZDomcmVkIGdyZWVuOiZncmVlbiBibHVlOiZibHVlIGFs
cGhhOiZhbHBoYV07Ci0gICAgICAgICAgICAgICAgaWYgKHJlZCA8IENvbG9yRXBzaWxvbiAmJiBn
cmVlbiA8IENvbG9yRXBzaWxvbiAmJiBibHVlIDwgQ29sb3JFcHNpbG9uICYmIChpZ25vcmVCbGFj
ayB8fCBhbHBoYSA8IENvbG9yRXBzaWxvbikpCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yID0g
bmlsOworICAgICAgICAgICAgICAgIGlmIChyZWQgPCBDb2xvckVwc2lsb24gJiYgZ3JlZW4gPCBD
b2xvckVwc2lsb24gJiYgYmx1ZSA8IENvbG9yRXBzaWxvbiAmJiAoaWdub3JlQmxhY2sgfHwgYWxw
aGEgPCBDb2xvckVwc2lsb24pKSBjb2xvciA9IG5pbDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gY29sb3I7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBO
U1NoYWRvdyAqX3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5nICpzaGFkb3dTdHlsZSkKIHsK
ICAgICBOU1NoYWRvdyAqc2hhZG93ID0gbmlsOwogICAgIE5TVUludGVnZXIgc2hhZG93U3R5bGVM
ZW5ndGggPSBbc2hhZG93U3R5bGUgbGVuZ3RoXTsKLSAgICBOU1JhbmdlIG9wZW5QYXJlblJhbmdl
ID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJpbmc6QCIoIl07Ci0gICAgTlNSYW5nZSBjbG9zZVBh
cmVuUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIikiXTsKLSAgICBOU1Jhbmdl
IGZpcnN0UmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICBOU1JhbmdlIHNl
Y29uZFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgTlNSYW5nZSB0aGly
ZFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgTlNSYW5nZSBzcGFjZVJh
bmdlOworICAgIE5TUmFuZ2Ugb3BlblBhcmVuUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0
cmluZzpAIigiXSwgY2xvc2VQYXJlblJhbmdlID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJpbmc6
QCIpIl0sIGZpcnN0UmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKSwgc2Vjb25kUmFu
Z2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKSwgdGhpcmRSYW5nZSA9IE5TTWFrZVJhbmdl
KE5TTm90Rm91bmQsIDApLCBzcGFjZVJhbmdlOwogICAgIGlmIChvcGVuUGFyZW5SYW5nZS5sZW5n
dGggPiAwICYmIGNsb3NlUGFyZW5SYW5nZS5sZW5ndGggPiAwICYmIE5TTWF4UmFuZ2Uob3BlblBh
cmVuUmFuZ2UpIDwgY2xvc2VQYXJlblJhbmdlLmxvY2F0aW9uKSB7CiAgICAgICAgIE5TQXJyYXkg
KmNvbXBvbmVudHMgPSBbW3NoYWRvd1N0eWxlIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5n
ZShOU01heFJhbmdlKG9wZW5QYXJlblJhbmdlKSwgY2xvc2VQYXJlblJhbmdlLmxvY2F0aW9uIC0g
TlNNYXhSYW5nZShvcGVuUGFyZW5SYW5nZSkpXSBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6
QCIsIl07CiAgICAgICAgIGlmIChbY29tcG9uZW50cyBjb3VudF0gPj0gMykgewotICAgICAgICAg
ICAgQ0dGbG9hdCByZWQgPSBbW2NvbXBvbmVudHMgb2JqZWN0QXRJbmRleDowXSBmbG9hdFZhbHVl
XSAvIDI1NTsKLSAgICAgICAgICAgIENHRmxvYXQgZ3JlZW4gPSBbW2NvbXBvbmVudHMgb2JqZWN0
QXRJbmRleDoxXSBmbG9hdFZhbHVlXSAvIDI1NTsKLSAgICAgICAgICAgIENHRmxvYXQgYmx1ZSA9
IFtbY29tcG9uZW50cyBvYmplY3RBdEluZGV4OjJdIGZsb2F0VmFsdWVdIC8gMjU1OwotICAgICAg
ICAgICAgQ0dGbG9hdCBhbHBoYSA9IChbY29tcG9uZW50cyBjb3VudF0gPj0gNCkgPyBbW2NvbXBv
bmVudHMgb2JqZWN0QXRJbmRleDozXSBmbG9hdFZhbHVlXSAvIDI1NSA6IDE7Ci0gICAgICAgICAg
ICBOU0NvbG9yICpzaGFkb3dDb2xvciA9IFtQbGF0Zm9ybUNvbG9yQ2xhc3MgY29sb3JXaXRoQ2Fs
aWJyYXRlZFJlZDpyZWQgZ3JlZW46Z3JlZW4gYmx1ZTpibHVlIGFscGhhOmFscGhhXTsKKyAgICAg
ICAgICAgIENHRmxvYXQgcmVkID0gW1tjb21wb25lbnRzIG9iamVjdEF0SW5kZXg6MF0gZmxvYXRW
YWx1ZV0gLyAyNTUsIGdyZWVuID0gW1tjb21wb25lbnRzIG9iamVjdEF0SW5kZXg6MV0gZmxvYXRW
YWx1ZV0gLyAyNTUsIGJsdWUgPSBbW2NvbXBvbmVudHMgb2JqZWN0QXRJbmRleDoyXSBmbG9hdFZh
bHVlXSAvIDI1NSwgYWxwaGEgPSAoW2NvbXBvbmVudHMgY291bnRdID49IDQpID8gW1tjb21wb25l
bnRzIG9iamVjdEF0SW5kZXg6M10gZmxvYXRWYWx1ZV0gLyAyNTUgOiAxOworICAgICAgICAgICAg
TlNDb2xvciAqc2hhZG93Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhDYWxpYnJhdGVkUmVkOnJl
ZCBncmVlbjpncmVlbiBibHVlOmJsdWUgYWxwaGE6YWxwaGFdOwogICAgICAgICAgICAgTlNTaXpl
IHNoYWRvd09mZnNldDsKICAgICAgICAgICAgIENHRmxvYXQgc2hhZG93Qmx1clJhZGl1czsKICAg
ICAgICAgICAgIGZpcnN0UmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAInB4Il07
Ci0gICAgICAgICAgICBpZiAoZmlyc3RSYW5nZS5sZW5ndGggPiAwICYmIE5TTWF4UmFuZ2UoZmly
c3RSYW5nZSkgPCBzaGFkb3dTdHlsZUxlbmd0aCkKLSAgICAgICAgICAgICAgICBzZWNvbmRSYW5n
ZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAicHgiIG9wdGlvbnM6MCByYW5nZTpOU01h
a2VSYW5nZShOU01heFJhbmdlKGZpcnN0UmFuZ2UpLCBzaGFkb3dTdHlsZUxlbmd0aCAtIE5TTWF4
UmFuZ2UoZmlyc3RSYW5nZSkpXTsKLSAgICAgICAgICAgIGlmIChzZWNvbmRSYW5nZS5sZW5ndGgg
PiAwICYmIE5TTWF4UmFuZ2Uoc2Vjb25kUmFuZ2UpIDwgc2hhZG93U3R5bGVMZW5ndGgpCi0gICAg
ICAgICAgICAgICAgdGhpcmRSYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAicHgi
IG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKHNlY29uZFJhbmdlKSwgc2hh
ZG93U3R5bGVMZW5ndGggLSBOU01heFJhbmdlKHNlY29uZFJhbmdlKSldOworICAgICAgICAgICAg
aWYgKGZpcnN0UmFuZ2UubGVuZ3RoID4gMCAmJiBOU01heFJhbmdlKGZpcnN0UmFuZ2UpIDwgc2hh
ZG93U3R5bGVMZW5ndGgpIHNlY29uZFJhbmdlID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJpbmc6
QCJweCIgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKE5TTWF4UmFuZ2UoZmlyc3RSYW5nZSks
IHNoYWRvd1N0eWxlTGVuZ3RoIC0gTlNNYXhSYW5nZShmaXJzdFJhbmdlKSldOworICAgICAgICAg
ICAgaWYgKHNlY29uZFJhbmdlLmxlbmd0aCA+IDAgJiYgTlNNYXhSYW5nZShzZWNvbmRSYW5nZSkg
PCBzaGFkb3dTdHlsZUxlbmd0aCkgdGhpcmRSYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3Ry
aW5nOkAicHgiIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKHNlY29uZFJh
bmdlKSwgc2hhZG93U3R5bGVMZW5ndGggLSBOU01heFJhbmdlKHNlY29uZFJhbmdlKSldOwogICAg
ICAgICAgICAgaWYgKGZpcnN0UmFuZ2UubG9jYXRpb24gPiAwICYmIGZpcnN0UmFuZ2UubGVuZ3Ro
ID4gMCAmJiBzZWNvbmRSYW5nZS5sZW5ndGggPiAwICYmIHRoaXJkUmFuZ2UubGVuZ3RoID4gMCkg
ewogICAgICAgICAgICAgICAgIHNwYWNlUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmlu
ZzpAIiAiIG9wdGlvbnM6TlNCYWNrd2FyZHNTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZmly
c3RSYW5nZS5sb2NhdGlvbildOwotICAgICAgICAgICAgICAgIGlmIChzcGFjZVJhbmdlLmxlbmd0
aCA9PSAwKQotICAgICAgICAgICAgICAgICAgICBzcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2UoMCwg
MCk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlUmFuZ2UubGVuZ3RoID09IDApIHNwYWNlUmFu
Z2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKICAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQud2lk
dGggPSBbW3NoYWRvd1N0eWxlIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShOU01heFJh
bmdlKHNwYWNlUmFuZ2UpLCBmaXJzdFJhbmdlLmxvY2F0aW9uIC0gTlNNYXhSYW5nZShzcGFjZVJh
bmdlKSldIGZsb2F0VmFsdWVdOwogICAgICAgICAgICAgICAgIHNwYWNlUmFuZ2UgPSBbc2hhZG93
U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAiIG9wdGlvbnM6TlNCYWNrd2FyZHNTZWFyY2ggcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgc2Vjb25kUmFuZ2UubG9jYXRpb24pXTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXNwYWNlUmFuZ2UubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzcGFjZVJhbmdlID0g
TlNNYWtlUmFuZ2UoMCwgMCk7Ci0gICAgICAgICAgICAgICAgQ0dGbG9hdCBzaGFkb3dIZWlnaHQg
PSBbW3NoYWRvd1N0eWxlIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdl
KHNwYWNlUmFuZ2UpLCBzZWNvbmRSYW5nZS5sb2NhdGlvbiAtIE5TTWF4UmFuZ2Uoc3BhY2VSYW5n
ZSkpXSBmbG9hdFZhbHVlXTsKLSAgICAgICAgICAgICAgICAvLyBJIGRvbid0IGtub3cgd2h5IHdl
IGhhdmUgdGhpcyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwbGF0Zm9ybXMuCi0jaWYgUExB
VEZPUk0oSU9TKQotICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldC5oZWlnaHQgPSBzaGFkb3dI
ZWlnaHQ7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldC5oZWlnaHQgPSAtc2hh
ZG93SGVpZ2h0OwotI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKHNwYWNlUmFuZ2UubGVuZ3Ro
ID09IDApIHNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKKyAgICAgICAgICAgICAgICBz
aGFkb3dPZmZzZXQuaGVpZ2h0ID0gLVtbc2hhZG93U3R5bGUgc3Vic3RyaW5nV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKE5TTWF4UmFuZ2Uoc3BhY2VSYW5nZSksIHNlY29uZFJhbmdlLmxvY2F0aW9uIC0g
TlNNYXhSYW5nZShzcGFjZVJhbmdlKSldIGZsb2F0VmFsdWVdOwogICAgICAgICAgICAgICAgIHNw
YWNlUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAiIG9wdGlvbnM6TlNCYWNr
d2FyZHNTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdGhpcmRSYW5nZS5sb2NhdGlvbildOwot
ICAgICAgICAgICAgICAgIGlmICghc3BhY2VSYW5nZS5sZW5ndGgpCi0gICAgICAgICAgICAgICAg
ICAgIHNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAo
c3BhY2VSYW5nZS5sZW5ndGggPT0gMCkgc3BhY2VSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDApOwog
ICAgICAgICAgICAgICAgIHNoYWRvd0JsdXJSYWRpdXMgPSBbW3NoYWRvd1N0eWxlIHN1YnN0cmlu
Z1dpdGhSYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKHNwYWNlUmFuZ2UpLCB0aGlyZFJhbmdl
LmxvY2F0aW9uIC0gTlNNYXhSYW5nZShzcGFjZVJhbmdlKSldIGZsb2F0VmFsdWVdOwotICAgICAg
ICAgICAgICAgIHNoYWRvdyA9IFtbW1BsYXRmb3JtTlNTaGFkb3cgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICAgICAgICAgICAgICBzaGFkb3cgPSBbW1tOU1NoYWRvdyBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOwogICAgICAgICAgICAgICAgIFtzaGFkb3cgc2V0U2hhZG93Q29sb3I6
c2hhZG93Q29sb3JdOwogICAgICAgICAgICAgICAgIFtzaGFkb3cgc2V0U2hhZG93T2Zmc2V0OnNo
YWRvd09mZnNldF07CiAgICAgICAgICAgICAgICAgW3NoYWRvdyBzZXRTaGFkb3dCbHVyUmFkaXVz
OnNoYWRvd0JsdXJSYWRpdXNdOwpAQCAtOTIyLDE2ICs1MDgsMTUgQEAgc3RhdGljIGlubGluZSBO
U1NoYWRvdyAqX3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5nICpzaGFkb3dTdHlsZSkKICAg
ICBCT09MIGlzQmxvY2tMZXZlbCA9IE5POwogICAgIE5TTnVtYmVyICp2YWwgPSBuaWw7CiAgICAg
dmFsID0gW19lbGVtZW50SXNCbG9ja0xldmVsIG9iamVjdEZvcktleTplbGVtZW50XTsKLSAgICBp
ZiAodmFsKQorICAgIGlmICh2YWwpIHsKICAgICAgICAgaXNCbG9ja0xldmVsID0gW3ZhbCBib29s
VmFsdWVdOwotICAgIGVsc2UgewotICAgICAgICBOU1N0cmluZyAqZGlzcGxheVZhbCA9IFtzZWxm
IF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXNwbGF5Il07Ci0gICAgICAgIE5T
U3RyaW5nICpmbG9hdFZhbCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6
QCJmbG9hdCJdOwotICAgICAgICBpZiAoZmxvYXRWYWwgJiYgKFtAImxlZnQiIGlzRXF1YWxUb1N0
cmluZzpmbG9hdFZhbF0gfHwgW0AicmlnaHQiIGlzRXF1YWxUb1N0cmluZzpmbG9hdFZhbF0pKQor
ICAgIH0gZWxzZSB7CisgICAgICAgIE5TU3RyaW5nICpkaXNwbGF5VmFsID0gW3NlbGYgX3N0cmlu
Z0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImRpc3BsYXkiXSwgKmZsb2F0VmFsID0gW3NlbGYg
X3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZsb2F0Il07CisgICAgICAgIGlmIChm
bG9hdFZhbCAmJiAoW0AibGVmdCIgaXNFcXVhbFRvU3RyaW5nOmZsb2F0VmFsXSB8fCBbQCJyaWdo
dCIgaXNFcXVhbFRvU3RyaW5nOmZsb2F0VmFsXSkpIHsKICAgICAgICAgICAgIGlzQmxvY2tMZXZl
bCA9IFlFUzsKLSAgICAgICAgZWxzZSBpZiAoZGlzcGxheVZhbCkKKyAgICAgICAgfSBlbHNlIGlm
IChkaXNwbGF5VmFsKSB7CiAgICAgICAgICAgICBpc0Jsb2NrTGV2ZWwgPSAoW0AiYmxvY2siIGlz
RXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSB8fCBbQCJsaXN0LWl0ZW0iIGlzRXF1YWxUb1N0cmlu
ZzpkaXNwbGF5VmFsXSB8fCBbZGlzcGxheVZhbCBoYXNQcmVmaXg6QCJ0YWJsZSJdKTsKLQorICAg
ICAgICB9CiAgICAgICAgIFtfZWxlbWVudElzQmxvY2tMZXZlbCBzZXRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhCb29sOmlzQmxvY2tMZXZlbF0gZm9yS2V5OmVsZW1lbnRdOwogICAgIH0KICAg
ICByZXR1cm4gaXNCbG9ja0xldmVsOwpAQCAtOTM5LDggKzUyNCw3IEBAIHN0YXRpYyBpbmxpbmUg
TlNTaGFkb3cgKl9zaGFkb3dGb3JTaGFkb3dTdHlsZShOU1N0cmluZyAqc2hhZG93U3R5bGUpCiAK
IC0gKEJPT0wpX2VsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3I6KERPTUVsZW1lbnQgKillbGVt
ZW50CiB7Ci0gICAgLy8gSW4gdGhlIHRleHQgc3lzdGVtLCB0ZXh0IGJsb2NrcyAodGFibGUgZWxl
bWVudHMpIGFuZCBkb2N1bWVudHMgKGJvZHkgZWxlbWVudHMpCi0gICAgLy8gaGF2ZSB0aGVpciBv
d24gYmFja2dyb3VuZCBjb2xvcnMsIHdoaWNoIHNob3VsZCBub3QgYmUgaW5oZXJpdGVkLgorICAg
IC8vIEluIHRoZSB0ZXh0IHN5c3RlbSwgdGV4dCBibG9ja3MgKHRhYmxlIGVsZW1lbnRzKSBhbmQg
ZG9jdW1lbnRzIChib2R5IGVsZW1lbnRzKSBoYXZlIHRoZWlyIG93biBiYWNrZ3JvdW5kIGNvbG9y
cywgd2hpY2ggc2hvdWxkIG5vdCBiZSBpbmhlcml0ZWQKICAgICBpZiAoW3NlbGYgX2VsZW1lbnRJ
c0Jsb2NrTGV2ZWw6ZWxlbWVudF0pIHsKICAgICAgICAgRWxlbWVudCogY29yZUVsZW1lbnQgPSBj
b3JlKGVsZW1lbnQpOwogICAgICAgICBOU1N0cmluZyAqZGlzcGxheVZhbCA9IFtzZWxmIF9zdHJp
bmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXNwbGF5Il07CkBAIC05NjAsMTMgKzU0NCwx
MCBAQCBzdGF0aWMgaW5saW5lIE5TU2hhZG93ICpfc2hhZG93Rm9yU2hhZG93U3R5bGUoTlNTdHJp
bmcgKnNoYWRvd1N0eWxlKQogICAgIHJldHVybiBlbGVtZW50OwogfQogCi0tIChQbGF0Zm9ybUNv
bG9yICopX2NvbXB1dGVkQ29sb3JGb3JOb2RlOihET01Ob2RlICopbm9kZSBwcm9wZXJ0eTooTlNT
dHJpbmcgKilrZXkKKy0gKE5TQ29sb3IgKilfY29tcHV0ZWRDb2xvckZvck5vZGU6KERPTU5vZGUg
Kilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQogewotICAgIFBsYXRmb3JtQ29sb3IgKnJl
c3VsdCA9IG5pbDsKLSAgICBCT09MIGluaGVyaXQgPSBZRVM7Ci0gICAgQk9PTCBoYXZlUmVzdWx0
ID0gTk87Ci0gICAgQk9PTCBpc0NvbG9yID0gW0AiY29sb3IiIGlzRXF1YWxUb1N0cmluZzprZXld
OwotICAgIEJPT0wgaXNCYWNrZ3JvdW5kQ29sb3IgPSBbQCJiYWNrZ3JvdW5kLWNvbG9yIiBpc0Vx
dWFsVG9TdHJpbmc6a2V5XTsKKyAgICBOU0NvbG9yICpyZXN1bHQgPSBuaWw7CisgICAgQk9PTCBp
bmhlcml0ID0gWUVTLCBoYXZlUmVzdWx0ID0gTk8sIGlzQ29sb3IgPSBbQCJjb2xvciIgaXNFcXVh
bFRvU3RyaW5nOmtleV0sIGlzQmFja2dyb3VuZENvbG9yID0gW0AiYmFja2dyb3VuZC1jb2xvciIg
aXNFcXVhbFRvU3RyaW5nOmtleV07CiAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IChET01FbGVt
ZW50ICopbm9kZTsgICAgCiAgICAgaWYgKGVsZW1lbnQgJiYgW2VsZW1lbnQgbm9kZVR5cGVdID09
IERPTV9FTEVNRU5UX05PREUpIHsKICAgICAgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqY29t
cHV0ZWRTdHlsZSwgKnNwZWNpZmllZFN0eWxlOwpAQCAtOTg1LDI0NCArNTY2LDE0NCBAQCBzdGF0
aWMgaW5saW5lIE5TU2hhZG93ICpfc2hhZG93Rm9yU2hhZG93U3R5bGUoTlNTdHJpbmcgKnNoYWRv
d1N0eWxlKQogICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19QUklNSVRJ
VkVfVkFMVUUgJiYgW3NwZWNpZmllZFZhbHVlIHByaW1pdGl2ZVR5cGVdID09IERPTV9DU1NfUkdC
Q09MT1IpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9yRm9yUkdCQ29sb3Io
W3NwZWNpZmllZFZhbHVlIGdldFJHQkNvbG9yVmFsdWVdLCBpc0NvbG9yKTsKICAgICAgICAgICAg
ICAgICAgICAgaGF2ZVJlc3VsdCA9IFlFUzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlVHlwZSA9PSBET01fQ1NTX0lOSEVSSVQpCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZVR5cGUgPT0gRE9NX0NTU19JTkhFUklUKSB7CiAgICAgICAgICAgICAgICAgICAgIGluaGVy
aXQgPSBZRVM7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAoKGlzQ29sb3IgJiYgIWhhdmVS
ZXN1bHQpIHx8IChpc0JhY2tncm91bmRDb2xvciAmJiAhW3NlbGYgX2VsZW1lbnRIYXNPd25CYWNr
Z3JvdW5kQ29sb3I6ZWxlbWVudF0pKQotICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7Cisg
ICAgICAgICAgICBpZiAoKGlzQ29sb3IgJiYgIWhhdmVSZXN1bHQpIHx8IChpc0JhY2tncm91bmRD
b2xvciAmJiAhW3NlbGYgX2VsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3I6ZWxlbWVudF0pKSBp
bmhlcml0ID0gWUVTOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghcmVzdWx0ICYmIGluaGVy
aXQpIHsKICAgICAgICAgRE9NTm9kZSAqcGFyZW50Tm9kZSA9IFtub2RlIHBhcmVudE5vZGVdOwot
ICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiAhKGlzQmFja2dyb3VuZENvbG9yICYmIFtwYXJlbnRO
b2RlIG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RFICYmIFtzZWxmIF9lbGVtZW50SGFzT3du
QmFja2dyb3VuZENvbG9yOihET01FbGVtZW50ICopcGFyZW50Tm9kZV0pKQorICAgICAgICBpZiAo
cGFyZW50Tm9kZSAmJiAhKGlzQmFja2dyb3VuZENvbG9yICYmIFtwYXJlbnROb2RlIG5vZGVUeXBl
XSA9PSBET01fRUxFTUVOVF9OT0RFICYmIFtzZWxmIF9lbGVtZW50SGFzT3duQmFja2dyb3VuZENv
bG9yOihET01FbGVtZW50ICopcGFyZW50Tm9kZV0pKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBb
c2VsZiBfY29sb3JGb3JOb2RlOnBhcmVudE5vZGUgcHJvcGVydHk6a2V5XTsKKyAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tIChQbGF0Zm9ybUNvbG9yICopX2NvbG9y
Rm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5IHsKLSAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlRGljdGlvbmFyeSA9IFtfY29s
b3JzRm9yTm9kZXMgb2JqZWN0Rm9yS2V5Om5vZGVdOworLSAoTlNDb2xvciAqKV9jb2xvckZvck5v
ZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQoreworICAgIE5TQ29s
b3IgKnJlc3VsdCA9IG5pbDsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyaWJ1dGVEaWN0
aW9uYXJ5ID0gW19jb2xvcnNGb3JOb2RlcyBvYmplY3RGb3JLZXk6bm9kZV07CiAgICAgaWYgKCFh
dHRyaWJ1dGVEaWN0aW9uYXJ5KSB7Ci0gICAgICAgIGF0dHJpYnV0ZURpY3Rpb25hcnkgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgICAgICBbX2NvbG9y
c0Zvck5vZGVzIHNldE9iamVjdDphdHRyaWJ1dGVEaWN0aW9uYXJ5LmdldCgpIGZvcktleTpub2Rl
XTsKKyAgICAgICAgYXR0cmlidXRlRGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF07CisgICAgICAgIFtfY29sb3JzRm9yTm9kZXMgc2V0T2JqZWN0OmF0dHJpYnV0
ZURpY3Rpb25hcnkgZm9yS2V5Om5vZGVdOworICAgICAgICBbYXR0cmlidXRlRGljdGlvbmFyeSBy
ZWxlYXNlXTsKICAgICB9Ci0gICAgUGxhdGZvcm1Db2xvciAqcmVzdWx0ID0gW2F0dHJpYnV0ZURp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV07Ci0gICAgaWYgKCFyZXN1bHQpIHsKKyAgICByZXN1
bHQgPSBbYXR0cmlidXRlRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XTsKKyAgICBpZiAocmVz
dWx0KSB7CisgICAgICAgIGlmIChbW05TQ29sb3IgY2xlYXJDb2xvcl0gaXNFcXVhbDpyZXN1bHRd
KSByZXN1bHQgPSBuaWw7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gW3NlbGYgX2Nv
bXB1dGVkQ29sb3JGb3JOb2RlOm5vZGUgcHJvcGVydHk6a2V5XTsKLSAgICAgICAgW2F0dHJpYnV0
ZURpY3Rpb25hcnkgc2V0T2JqZWN0OihyZXN1bHQgPyByZXN1bHQgOiBbUGxhdGZvcm1Db2xvckNs
YXNzIGNsZWFyQ29sb3JdKSBmb3JLZXk6a2V5XTsKKyAgICAgICAgW2F0dHJpYnV0ZURpY3Rpb25h
cnkgc2V0T2JqZWN0OihyZXN1bHQgPyByZXN1bHQgOiBbTlNDb2xvciBjbGVhckNvbG9yXSkgZm9y
S2V5OmtleV07CiAgICAgfQotICAgIGlmIChbW1BsYXRmb3JtQ29sb3JDbGFzcyBjbGVhckNvbG9y
XSBpc0VxdWFsOnJlc3VsdF0gfHwgKFtyZXN1bHQgYWxwaGFDb21wb25lbnRdID09IDAuMCkgKQot
ICAgICAgICByZXN1bHQgPSBuaWw7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2RlZmluZSBV
SUZsb2F0SXNaZXJvKG51bWJlcikgKGZhYnMobnVtYmVyIC0gMCkgPCBGTFRfRVBTSUxPTikKLQog
LSAoTlNEaWN0aW9uYXJ5ICopX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQ6KERPTUVsZW1l
bnQgKillbGVtZW50CiB7CiAgICAgRE9NRWxlbWVudCAqYmxvY2tFbGVtZW50ID0gW3NlbGYgX2Js
b2NrTGV2ZWxFbGVtZW50Rm9yTm9kZTplbGVtZW50XTsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICphdHRycyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotI2lmICFQTEFURk9S
TShJT1MpCiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl07Ci0jZW5kaWYKLSAgICBOU1N0cmluZyAqZm9udEVmZmVjdCA9IFtz
ZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJmb250LWVmZmVjdCJdOwotICAg
IE5TU3RyaW5nICp0ZXh0RGVjb3JhdGlvbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQg
cHJvcGVydHk6QCJ0ZXh0LWRlY29yYXRpb24iXTsKLSAgICBOU1N0cmluZyAqdmVydGljYWxBbGln
biA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJ2ZXJ0aWNhbC1hbGln
biJdOwotICAgIE5TU3RyaW5nICp0ZXh0U2hhZG93ID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxl
bWVudCBwcm9wZXJ0eTpAInRleHQtc2hhZG93Il07Ci0gICAgTlNTdHJpbmcgKmZvbnRMaWdhdHVy
ZXMgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiZm9udC12YXJpYW50
LWxpZ2F0dXJlcyJdOwotICAgIE5TU3RyaW5nICpmb250S2VybmluZyA9IFtzZWxmIF9zdHJpbmdG
b3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJmb250LWtlcm5pbmciXTsKLSAgICBOU1N0cmluZyAq
bGV0dGVyU3BhY2luZyA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJs
ZXR0ZXItc3BhY2luZyJdOwotICAgIENHRmxvYXQgZm9udFNpemUgPSAwOwotICAgIENHRmxvYXQg
YmFzZWxpbmVPZmZzZXQgPSAwOwotICAgIENHRmxvYXQgc3Ryb2tlV2lkdGggPSAwLjA7Ci0gICAg
UGxhdGZvcm1Gb250ICpmb250ID0gbmlsOwotICAgIFBsYXRmb3JtRm9udCAqYWN0dWFsRm9udCA9
IChQbGF0Zm9ybUZvbnQgKilbZWxlbWVudCBfZm9udF07Ci0gICAgUGxhdGZvcm1Db2xvciAqZm9y
ZWdyb3VuZENvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiY29s
b3IiXTsKLSAgICBQbGF0Zm9ybUNvbG9yICpiYWNrZ3JvdW5kQ29sb3IgPSBbc2VsZiBfY29sb3JG
b3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJiYWNrZ3JvdW5kLWNvbG9yIl07Ci0gICAgUGxhdGZv
cm1Db2xvciAqc3Ryb2tlQ29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVy
dHk6QCItd2Via2l0LXRleHQtc3Ryb2tlLWNvbG9yIl07Ci0KLSAgICBpZiAoIVtzZWxmIF9nZXRG
bG9hdDomZm9udFNpemUgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiZm9udC1zaXplIl0gfHwg
Zm9udFNpemUgPD0gMC4wKQotICAgICAgICBmb250U2l6ZSA9IF9kZWZhdWx0Rm9udFNpemU7Cisg
ICAgTlNTdHJpbmcgKmZvbnRFZmZlY3QgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHBy
b3BlcnR5OkAiZm9udC1lZmZlY3QiXSwgKnRleHREZWNvcmF0aW9uID0gW3NlbGYgX3N0cmluZ0Zv
ck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInRleHQtZGVjb3JhdGlvbiJdLCAqdmVydGljYWxBbGln
biA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJ2ZXJ0aWNhbC1hbGln
biJdLCAqdGV4dFNoYWRvdyA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6
QCJ0ZXh0LXNoYWRvdyJdOworICAgIENHRmxvYXQgZm9udFNpemUgPSAwLCBiYXNlbGluZU9mZnNl
dCA9IDAsIGtlcm5pbmcgPSAwOworICAgIE5TRm9udCAqZm9udCA9IG5pbCwgKmFjdHVhbEZvbnQg
PSBbZWxlbWVudCBfZm9udF07CisgICAgTlNDb2xvciAqZm9yZWdyb3VuZENvbG9yID0gW3NlbGYg
X2NvbG9yRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiY29sb3IiXSwgKmJhY2tncm91bmRDb2xv
ciA9IFtzZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJhY2tncm91bmQtY29s
b3IiXTsKKworICAgIGlmICghW3NlbGYgX2dldEZsb2F0OiZmb250U2l6ZSBmb3JOb2RlOmVsZW1l
bnQgcHJvcGVydHk6QCJmb250LXNpemUiXSB8fCBmb250U2l6ZSA8PSAwLjApIGZvbnRTaXplID0g
X2RlZmF1bHRGb250U2l6ZTsKICAgICBmb250U2l6ZSAqPSBfdGV4dFNpemVNdWx0aXBsaWVyOwog
ICAgIGlmIChmb250U2l6ZSA8IF9taW5pbXVtRm9udFNpemUpIGZvbnRTaXplID0gX21pbmltdW1G
b250U2l6ZTsKLSAgICBpZiAoZmFicyhmbG9vcigyLjAgKiBmb250U2l6ZSArIDAuNSkgLyAyLjAg
LSBmb250U2l6ZSkgPCAwLjA1KQorICAgIGlmIChmYWJzKGZsb29yKDIuMCAqIGZvbnRTaXplICsg
MC41KSAvIDIuMCAtIGZvbnRTaXplKSA8IDAuMDUpIHsKICAgICAgICAgZm9udFNpemUgPSAoQ0dG
bG9hdClmbG9vcigyLjAgKiBmb250U2l6ZSArIDAuNSkgLyAyOwotICAgIGVsc2UgaWYgKGZhYnMo
Zmxvb3IoMTAuMCAqIGZvbnRTaXplICsgMC41KSAvIDEwLjAgLSBmb250U2l6ZSkgPCAwLjAwNSkK
KyAgICB9IGVsc2UgaWYgKGZhYnMoZmxvb3IoMTAuMCAqIGZvbnRTaXplICsgMC41KSAvIDEwLjAg
LSBmb250U2l6ZSkgPCAwLjAwNSkgewogICAgICAgICBmb250U2l6ZSA9IChDR0Zsb2F0KWZsb29y
KDEwLjAgKiBmb250U2l6ZSArIDAuNSkgLyAxMDsKLQotICAgIGlmIChmb250U2l6ZSA8PSAwLjAp
Ci0gICAgICAgIGZvbnRTaXplID0gMTI7CisgICAgfQorICAgIGlmIChmb250U2l6ZSA8PSAwLjAp
IGZvbnRTaXplID0gMTI7CiAgICAgCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGlmIChhY3R1YWxG
b250KQotICAgICAgICBmb250ID0gW2FjdHVhbEZvbnQgZm9udFdpdGhTaXplOmZvbnRTaXplXTsK
LSNlbHNlCi0gICAgaWYgKGFjdHVhbEZvbnQpCi0gICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIg
Y29udmVydEZvbnQ6YWN0dWFsRm9udCB0b1NpemU6Zm9udFNpemVdOwotI2VuZGlmCisgICAgaWYg
KGFjdHVhbEZvbnQpIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6YWN0dWFsRm9udCB0
b1NpemU6Zm9udFNpemVdOwogICAgIGlmICghZm9udCkgewotICAgICAgICBOU1N0cmluZyAqZm9u
dE5hbWUgPSBbW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZvbnQtZmFt
aWx5Il0gY2FwaXRhbGl6ZWRTdHJpbmddOwotICAgICAgICBOU1N0cmluZyAqZm9udFN0eWxlID0g
W3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZvbnQtc3R5bGUiXTsKLSAg
ICAgICAgTlNTdHJpbmcgKmZvbnRXZWlnaHQgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50
IHByb3BlcnR5OkAiZm9udC13ZWlnaHQiXTsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICBO
U1N0cmluZyAqZm9udFZhcmlhbnQgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3Bl
cnR5OkAiZm9udC12YXJpYW50Il07Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFmb250TmFtZSkKLSAg
ICAgICAgICAgIGZvbnROYW1lID0gX3N0YW5kYXJkRm9udEZhbWlseTsKLSAgICAgICAgaWYgKGZv
bnROYW1lKQotICAgICAgICAgICAgZm9udCA9IF9mb250Rm9yTmFtZUFuZFNpemUoZm9udE5hbWUs
IGZvbnRTaXplLCBfZm9udENhY2hlKTsKLSAgICAgICAgaWYgKCFmb250KQotICAgICAgICAgICAg
Zm9udCA9IFtQbGF0Zm9ybUZvbnRDbGFzcyBmb250V2l0aE5hbWU6QCJUaW1lcyIgc2l6ZTpmb250
U2l6ZV07CisgICAgICAgIE5TU3RyaW5nICpmb250TmFtZSA9IFtbc2VsZiBfc3RyaW5nRm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkAiZm9udC1mYW1pbHkiXSBjYXBpdGFsaXplZFN0cmluZ10sICpm
b250U3R5bGUgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiZm9udC1z
dHlsZSJdLCAqZm9udFdlaWdodCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVy
dHk6QCJmb250LXdlaWdodCJdLCAqZm9udFZhcmlhbnQgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTpl
bGVtZW50IHByb3BlcnR5OkAiZm9udC12YXJpYW50Il07CisgICAgICAgIAorICAgICAgICBpZiAo
IWZvbnROYW1lKSBmb250TmFtZSA9IF9zdGFuZGFyZEZvbnRGYW1pbHk7CisgICAgICAgIGlmIChm
b250TmFtZSkgZm9udCA9IF9mb250Rm9yTmFtZUFuZFNpemUoZm9udE5hbWUsIGZvbnRTaXplLCBf
Zm9udENhY2hlKTsKKyAgICAgICAgaWYgKCFmb250KSBmb250ID0gW05TRm9udCBmb250V2l0aE5h
bWU6QCJUaW1lcyIgc2l6ZTpmb250U2l6ZV07CiAgICAgICAgIGlmIChbQCJpdGFsaWMiIGlzRXF1
YWxUb1N0cmluZzpmb250U3R5bGVdIHx8IFtAIm9ibGlxdWUiIGlzRXF1YWxUb1N0cmluZzpmb250
U3R5bGVdKSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUZvbnQgKm9yaWdpbmFsRm9udCA9IGZvbnQ7
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAgZm9udCA9IFtQbGF0Zm9ybUZvbnRDbGFz
cyBmb250V2l0aEZhbWlseU5hbWU6W2ZvbnQgZmFtaWx5TmFtZV0gdHJhaXRzOlVJRm9udFRyYWl0
SXRhbGljIHNpemU6W2ZvbnQgcG9pbnRTaXplXV07Ci0jZWxzZQorICAgICAgICAgICAgTlNGb250
ICpvcmlnaW5hbEZvbnQgPSBmb250OwogICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBj
b252ZXJ0Rm9udDpmb250IHRvSGF2ZVRyYWl0Ok5TSXRhbGljRm9udE1hc2tdOwotI2VuZGlmCi0g
ICAgICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAgICAgICAgZm9udCA9IG9yaWdpbmFsRm9u
dDsKKyAgICAgICAgICAgIGlmICghZm9udCkgZm9udCA9IG9yaWdpbmFsRm9udDsKICAgICAgICAg
fQogICAgICAgICBpZiAoW2ZvbnRXZWlnaHQgaGFzUHJlZml4OkAiYm9sZCJdIHx8IFtmb250V2Vp
Z2h0IGludGVnZXJWYWx1ZV0gPj0gNzAwKSB7CiAgICAgICAgICAgICAvLyA/Pz8gaGFuZGxlIHdl
aWdodCBwcm9wZXJseSB1c2luZyBOU0ZvbnRNYW5hZ2VyCi0gICAgICAgICAgICBQbGF0Zm9ybUZv
bnQgKm9yaWdpbmFsRm9udCA9IGZvbnQ7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAg
Zm9udCA9IFtQbGF0Zm9ybUZvbnRDbGFzcyBmb250V2l0aEZhbWlseU5hbWU6W2ZvbnQgZmFtaWx5
TmFtZV0gdHJhaXRzOlVJRm9udFRyYWl0Qm9sZCBzaXplOltmb250IHBvaW50U2l6ZV1dOwotI2Vs
c2UKKyAgICAgICAgICAgIE5TRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsKICAgICAgICAgICAg
IGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b0hhdmVUcmFpdDpOU0JvbGRG
b250TWFza107Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmICghZm9udCkKLSAgICAgICAgICAgICAg
ICBmb250ID0gb3JpZ2luYWxGb250OworICAgICAgICAgICAgaWYgKCFmb250KSBmb250ID0gb3Jp
Z2luYWxGb250OwogICAgICAgICB9Ci0jaWYgIVBMQVRGT1JNKElPUykgLy8gSUpCOiBObyBzbWFs
bCBjYXBzIHN1cHBvcnQgb24gaU9TCiAgICAgICAgIGlmIChbQCJzbWFsbC1jYXBzIiBpc0VxdWFs
VG9TdHJpbmc6Zm9udFZhcmlhbnRdKSB7CiAgICAgICAgICAgICAvLyA/Pz8gc3ludGhlc2l6ZSBz
bWFsbC1jYXBzIGlmIFtmb250IGlzRXF1YWw6b3JpZ2luYWxGb250XQogICAgICAgICAgICAgTlNG
b250ICpvcmlnaW5hbEZvbnQgPSBmb250OwogICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdl
ciBjb252ZXJ0Rm9udDpmb250IHRvSGF2ZVRyYWl0Ok5TU21hbGxDYXBzRm9udE1hc2tdOwotICAg
ICAgICAgICAgaWYgKCFmb250KQotICAgICAgICAgICAgICAgIGZvbnQgPSBvcmlnaW5hbEZvbnQ7
CisgICAgICAgICAgICBpZiAoIWZvbnQpIGZvbnQgPSBvcmlnaW5hbEZvbnQ7CiAgICAgICAgIH0K
LSNlbmRpZgotICAgIH0KLSAgICBpZiAoZm9udCkKLSAgICAgICAgW2F0dHJzIHNldE9iamVjdDpm
b250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoZm9yZWdyb3VuZENvbG9y
KQotICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvcmVncm91bmRDb2xvciBmb3JLZXk6TlNGb3Jl
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoYmFja2dyb3VuZENvbG9yICYmICFb
c2VsZiBfZWxlbWVudEhhc093bkJhY2tncm91bmRDb2xvcjplbGVtZW50XSkKLSAgICAgICAgW2F0
dHJzIHNldE9iamVjdDpiYWNrZ3JvdW5kQ29sb3IgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07Ci0KLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZzdHJva2VXaWR0aCBmb3JO
b2RlOmVsZW1lbnQgcHJvcGVydHk6QCItd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoIl0pIHsKLSAg
ICAgICAgZmxvYXQgdGV4dFN0cm9rZVdpZHRoID0gc3Ryb2tlV2lkdGggLyAoW2ZvbnQgcG9pbnRT
aXplXSAqIDAuMDEpOwotICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOnRleHRTdHJva2VXaWR0aF0gZm9yS2V5Ok5TU3Ryb2tlV2lkdGhBdHRyaWJ1dGVO
YW1lXTsKICAgICB9Ci0gICAgaWYoc3Ryb2tlQ29sb3IpCi0gICAgICAgIFthdHRycyBzZXRPYmpl
Y3Q6c3Ryb2tlQ29sb3IgZm9yS2V5Ok5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBp
ZiAoZm9udCkgW2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1l
XTsKKyAgICBpZiAoZm9yZWdyb3VuZENvbG9yKSBbYXR0cnMgc2V0T2JqZWN0OmZvcmVncm91bmRD
b2xvciBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoYmFj
a2dyb3VuZENvbG9yICYmICFbc2VsZiBfZWxlbWVudEhhc093bkJhY2tncm91bmRDb2xvcjplbGVt
ZW50XSkgW2F0dHJzIHNldE9iamVjdDpiYWNrZ3JvdW5kQ29sb3IgZm9yS2V5Ok5TQmFja2dyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgaWYgKGZvbnRFZmZlY3QpIHsKLSAgICAgICAgaWYg
KFtmb250RWZmZWN0IHJhbmdlT2ZTdHJpbmc6QCJvdXRsaW5lIl0ubG9jYXRpb24gIT0gTlNOb3RG
b3VuZCkKLSAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6My4wXSBmb3JLZXk6TlNTdHJva2VXaWR0aEF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBp
ZiAoW2ZvbnRFZmZlY3QgcmFuZ2VPZlN0cmluZzpAImVtYm9zcyJdLmxvY2F0aW9uICE9IE5TTm90
Rm91bmQpCi0gICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltbW1BsYXRmb3JtTlNTaGFkb3cg
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXSBmb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsK
LSAgICB9Ci0gICAgaWYgKGZvbnRLZXJuaW5nIHx8IGxldHRlclNwYWNpbmcpIHsKLSAgICAgICAg
aWYgKFtmb250RWZmZWN0IHJhbmdlT2ZTdHJpbmc6QCJub25lIl0ubG9jYXRpb24gIT0gTlNOb3RG
b3VuZCkKLSAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6QDAuMCBmb3JLZXk6TlNLZXJuQXR0
cmlidXRlTmFtZV07Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZG91YmxlIGtlcm5WYWwg
PSBsZXR0ZXJTcGFjaW5nID8gW2xldHRlclNwYWNpbmcgZG91YmxlVmFsdWVdIDogMC4wOwotICAg
ICAgICAgICAgaWYgKFVJRmxvYXRJc1plcm8oa2VyblZhbCkpCi0gICAgICAgICAgICAgICAgW2F0
dHJzIHNldE9iamVjdDpbTlNOdWxsIG51bGxdIGZvcktleTpOU0tlcm5BdHRyaWJ1dGVOYW1lXTsg
Ly8gYXV0byBhbmQgbm9ybWFsLCB0aGUgb3RoZXIgcG9zc2libGUgdmFsdWVzLCBhcmUgYm90aCAi
a2VybmluZyBlbmFibGVkIgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFthdHRy
cyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6a2VyblZhbF0gZm9yS2V5Ok5T
S2VybkF0dHJpYnV0ZU5hbWVdOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmb250TGlnYXR1
cmVzKSB7Ci0gICAgICAgIGlmIChbZm9udEVmZmVjdCByYW5nZU9mU3RyaW5nOkAibm9ybWFsIl0u
bG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIDsgICAvLyBkZWZhdWx0OiB3aGF0
ZXZlciB0aGUgc3lzdGVtIGRlY2lkZXMgdG8gZG8KLSAgICAgICAgZWxzZSBpZiAoW2ZvbnRFZmZl
Y3QgcmFuZ2VPZlN0cmluZzpAImNvbW1vbi1saWdhdHVyZXMiXS5sb2NhdGlvbiAhPSBOU05vdEZv
dW5kKQotICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpAMSBmb3JLZXk6TlNMaWdhdHVyZUF0
dHJpYnV0ZU5hbWVdOyAgIC8vIGV4cGxpY2l0bHkgZW5hYmxlZAotICAgICAgICBlbHNlIGlmIChb
Zm9udEVmZmVjdCByYW5nZU9mU3RyaW5nOkAibm8tY29tbW9uLWxpZ2F0dXJlcyJdLmxvY2F0aW9u
ICE9IE5TTm90Rm91bmQpCi0gICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OkAwIGZvcktleTpO
U0xpZ2F0dXJlQXR0cmlidXRlTmFtZV07ICAvLyBleHBsaWNpdGx5IGRpc2FibGVkCisgICAgICAg
IGlmIChbZm9udEVmZmVjdCByYW5nZU9mU3RyaW5nOkAib3V0bGluZSJdLmxvY2F0aW9uICE9IE5T
Tm90Rm91bmQpIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6My4w
XSBmb3JLZXk6TlNTdHJva2VXaWR0aEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoW2ZvbnRF
ZmZlY3QgcmFuZ2VPZlN0cmluZzpAImVtYm9zcyJdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIFth
dHRycyBzZXRPYmplY3Q6W1tbTlNTaGFkb3cgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXSBmb3JL
ZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKICAgICB9Ci0KICAgICBpZiAodGV4dERlY29yYXRp
b24gJiYgW3RleHREZWNvcmF0aW9uIGxlbmd0aF0gPiA0KSB7Ci0gICAgICAgIGlmIChbdGV4dERl
Y29yYXRpb24gcmFuZ2VPZlN0cmluZzpAInVuZGVybGluZSJdLmxvY2F0aW9uICE9IE5TTm90Rm91
bmQpCi0gICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50
ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJp
YnV0ZU5hbWVdOwotICAgICAgICBpZiAoW3RleHREZWNvcmF0aW9uIHJhbmdlT2ZTdHJpbmc6QCJs
aW5lLXRocm91Z2giXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQotICAgICAgICAgICAgW2F0dHJz
IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNp
bmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV07CisgICAgICAg
IGlmIChbdGV4dERlY29yYXRpb24gcmFuZ2VPZlN0cmluZzpAInVuZGVybGluZSJdLmxvY2F0aW9u
ICE9IE5TTm90Rm91bmQpIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRl
Z2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmli
dXRlTmFtZV07CisgICAgICAgIGlmIChbdGV4dERlY29yYXRpb24gcmFuZ2VPZlN0cmluZzpAImxp
bmUtdGhyb3VnaCJdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIFthdHRycyBzZXRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpO
U1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdOwogICAgIH0KICAgICBpZiAodmVydGlj
YWxBbGlnbikgewotICAgICAgICBpZiAoW3ZlcnRpY2FsQWxpZ24gcmFuZ2VPZlN0cmluZzpAInN1
cGVyIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIFthdHRycyBzZXRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOjFdIGZvcktleTpOU1N1cGVyc2NyaXB0QXR0
cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChbdmVydGljYWxBbGlnbiByYW5nZU9mU3RyaW5nOkAi
c3ViIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIFthdHRycyBzZXRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOi0xXSBmb3JLZXk6TlNTdXBlcnNjcmlwdEF0
dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoW3ZlcnRpY2FsQWxpZ24gcmFuZ2VPZlN0cmluZzpA
InN1cGVyIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgW2F0dHJzIHNldE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludGVnZXI6MV0gZm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1l
XTsKKyAgICAgICAgaWYgKFt2ZXJ0aWNhbEFsaWduIHJhbmdlT2ZTdHJpbmc6QCJzdWIiXS5sb2Nh
dGlvbiAhPSBOU05vdEZvdW5kKSBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
SW50ZWdlcjotMV0gZm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXTsKICAgICB9Ci0g
ICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomYmFzZWxpbmVPZmZzZXQgZm9yTm9kZTplbGVtZW50IHBy
b3BlcnR5OkAidmVydGljYWwtYWxpZ24iXSkKLSAgICAgICAgW2F0dHJzIHNldE9iamVjdDpbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTpiYXNlbGluZU9mZnNldF0gZm9yS2V5Ok5TQmFzZWxpbmVP
ZmZzZXRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZiYXNlbGluZU9m
ZnNldCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJ2ZXJ0aWNhbC1hbGlnbiJdKSBbYXR0cnMg
c2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmJhc2VsaW5lT2Zmc2V0XSBmb3JL
ZXk6TlNCYXNlbGluZU9mZnNldEF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChbc2VsZiBfZ2V0Rmxv
YXQ6Jmtlcm5pbmcgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibGV0dGVyLXNwYWNpbmciXSkg
W2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTprZXJuaW5nXSBmb3JL
ZXk6TlNLZXJuQXR0cmlidXRlTmFtZV07CiAgICAgaWYgKHRleHRTaGFkb3cgJiYgW3RleHRTaGFk
b3cgbGVuZ3RoXSA+IDQpIHsKICAgICAgICAgTlNTaGFkb3cgKnNoYWRvdyA9IF9zaGFkb3dGb3JT
aGFkb3dTdHlsZSh0ZXh0U2hhZG93KTsKLSAgICAgICAgaWYgKHNoYWRvdykKLSAgICAgICAgICAg
IFthdHRycyBzZXRPYmplY3Q6c2hhZG93IGZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOwor
ICAgICAgICBpZiAoc2hhZG93KSBbYXR0cnMgc2V0T2JqZWN0OnNoYWRvdyBmb3JLZXk6TlNTaGFk
b3dBdHRyaWJ1dGVOYW1lXTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnQgIT0gYmxvY2tFbGVtZW50
ICYmIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IGNvdW50XSA+IDApCi0gICAgICAgIFthdHRycyBz
ZXRPYmplY3Q6W05TQXJyYXkgYXJyYXlXaXRoQXJyYXk6X3dyaXRpbmdEaXJlY3Rpb25BcnJheV0g
Zm9yS2V5Ok5TV3JpdGluZ0RpcmVjdGlvbkF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChlbGVtZW50
ICE9IGJsb2NrRWxlbWVudCAmJiBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSBjb3VudF0gPiAwKSBb
YXR0cnMgc2V0T2JqZWN0OltOU0FycmF5IGFycmF5V2l0aEFycmF5Ol93cml0aW5nRGlyZWN0aW9u
QXJyYXldIGZvcktleTpOU1dyaXRpbmdEaXJlY3Rpb25BdHRyaWJ1dGVOYW1lXTsKICAgICAKICAg
ICBpZiAoYmxvY2tFbGVtZW50KSB7CiAgICAgICAgIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlICpw
YXJhZ3JhcGhTdHlsZSA9IFtbW3NlbGYgY2xhc3NdIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZV0gbXV0
YWJsZUNvcHldOwogICAgICAgICBOU1N0cmluZyAqYmxvY2tUYWcgPSBbYmxvY2tFbGVtZW50IHRh
Z05hbWVdOwogICAgICAgICBCT09MIGlzUGFyYWdyYXBoID0gKFtAIlAiIGlzRXF1YWxUb1N0cmlu
ZzpibG9ja1RhZ10gfHwgW0AiTEkiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwgKFtibG9j
a1RhZyBoYXNQcmVmaXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkpOwotICAgICAg
ICBOU1N0cmluZyAqdGV4dEFsaWduID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6YmxvY2tFbGVtZW50
IHByb3BlcnR5OkAidGV4dC1hbGlnbiJdOwotICAgICAgICBOU1N0cmluZyAqZGlyZWN0aW9uID0g
W3NlbGYgX3N0cmluZ0Zvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAiZGlyZWN0aW9uIl07
Ci0gICAgICAgIE5TU3RyaW5nICpoeXBoZW5hdGlvbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmJs
b2NrRWxlbWVudCBwcm9wZXJ0eTpAIi13ZWJraXQtaHlwaGVucyJdOwotICAgICAgICBDR0Zsb2F0
IGxlZnRNYXJnaW4gPSAwOwotICAgICAgICBDR0Zsb2F0IHJpZ2h0TWFyZ2luID0gMDsKLSAgICAg
ICAgQ0dGbG9hdCBib3R0b21NYXJnaW4gPSAwOwotICAgICAgICBDR0Zsb2F0IHRleHRJbmRlbnQg
PSAwOwotICAgICAgICBDR0Zsb2F0IGxpbmVIZWlnaHQgPSAwOworICAgICAgICBOU1N0cmluZyAq
dGV4dEFsaWduID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAi
dGV4dC1hbGlnbiJdLCAqZGlyZWN0aW9uID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6YmxvY2tFbGVt
ZW50IHByb3BlcnR5OkAiZGlyZWN0aW9uIl07CisgICAgICAgIENHRmxvYXQgbGVmdE1hcmdpbiA9
IDAsIHJpZ2h0TWFyZ2luID0gMCwgYm90dG9tTWFyZ2luID0gMCwgdGV4dEluZGVudCA9IDAsIGxp
bmVIZWlnaHQgPSAwOwogICAgICAgICBpZiAodGV4dEFsaWduKSB7CiAgICAgICAgICAgICAvLyBX
ZWJLaXQgY2FuIHJldHVybiAta2h0bWwtbGVmdCwgLWtodG1sLXJpZ2h0LCAta2h0bWwtY2VudGVy
Ci0gICAgICAgICAgICBpZiAoW3RleHRBbGlnbiBoYXNTdWZmaXg6QCJsZWZ0Il0pCi0gICAgICAg
ICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRMZWZ0
XTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFt0ZXh0QWxpZ24gaGFzU3VmZml4OkAicmlnaHQiXSkK
LSAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdu
bWVudFJpZ2h0XTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFt0ZXh0QWxpZ24gaGFzU3VmZml4OkAi
Y2VudGVyIl0pCi0gICAgICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEFsaWdubWVudDpO
U1RleHRBbGlnbm1lbnRDZW50ZXJdOwotICAgICAgICAgICAgZWxzZSBpZiAoW3RleHRBbGlnbiBo
YXNTdWZmaXg6QCJqdXN0aWZ5Il0pCi0gICAgICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNl
dEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWRdOworICAgICAgICAgICAgaWYgKFt0
ZXh0QWxpZ24gaGFzU3VmZml4OkAibGVmdCJdKSBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50
Ok5TTGVmdFRleHRBbGlnbm1lbnRdOworICAgICAgICAgICAgZWxzZSBpZiAoW3RleHRBbGlnbiBo
YXNTdWZmaXg6QCJyaWdodCJdKSBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TUmlnaHRU
ZXh0QWxpZ25tZW50XTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFt0ZXh0QWxpZ24gaGFzU3VmZml4
OkAiY2VudGVyIl0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6TlNDZW50ZXJUZXh0QWxp
Z25tZW50XTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFt0ZXh0QWxpZ24gaGFzU3VmZml4OkAianVz
dGlmeSJdKSBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TSnVzdGlmaWVkVGV4dEFsaWdu
bWVudF07CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpcmVjdGlvbikgewotICAgICAgICAgICAg
aWYgKFtkaXJlY3Rpb24gaXNFcXVhbFRvU3RyaW5nOkAibHRyIl0pCi0gICAgICAgICAgICAgICAg
W3BhcmFncmFwaFN0eWxlIHNldEJhc2VXcml0aW5nRGlyZWN0aW9uOk5TV3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0XTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtkaXJlY3Rpb24gaXNFcXVhbFRv
U3RyaW5nOkAicnRsIl0pCi0gICAgICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEJhc2VX
cml0aW5nRGlyZWN0aW9uOk5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKLSAgICAgICAg
fQotICAgICAgICBpZihoeXBoZW5hdGlvbikgewotICAgICAgICAgICAgaWYgKFtoeXBoZW5hdGlv
biBpc0VxdWFsVG9TdHJpbmc6QCJhdXRvIl0pCi0gICAgICAgICAgICAgICAgW3BhcmFncmFwaFN0
eWxlIHNldEh5cGhlbmF0aW9uRmFjdG9yOjEuMF07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEh5cGhlbmF0aW9uRmFjdG9yOjAuMF07CisgICAg
ICAgICAgICBpZiAoW2RpcmVjdGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJsdHIiXSkgW3BhcmFncmFw
aFN0eWxlIHNldEJhc2VXcml0aW5nRGlyZWN0aW9uOk5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0XTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtkaXJlY3Rpb24gaXNFcXVhbFRvU3RyaW5nOkAi
cnRsIl0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjpOU1dyaXRpbmdE
aXJlY3Rpb25SaWdodFRvTGVmdF07CiAgICAgICAgIH0KICAgICAgICAgaWYgKFtibG9ja1RhZyBo
YXNQcmVmaXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkgewogICAgICAgICAgICAg
TlNJbnRlZ2VyIGhlYWRlckxldmVsID0gW2Jsb2NrVGFnIGNoYXJhY3RlckF0SW5kZXg6MV0gLSAn
MCc7Ci0gICAgICAgICAgICBpZiAoMSA8PSBoZWFkZXJMZXZlbCAmJiBoZWFkZXJMZXZlbCA8PSA2
KQotICAgICAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRIZWFkZXJMZXZlbDpoZWFkZXJM
ZXZlbF07CisgICAgICAgICAgICBpZiAoMSA8PSBoZWFkZXJMZXZlbCAmJiBoZWFkZXJMZXZlbCA8
PSA2KSBbcGFyYWdyYXBoU3R5bGUgc2V0SGVhZGVyTGV2ZWw6aGVhZGVyTGV2ZWxdOyAgICAgICAg
ICAgIAogICAgICAgICB9CiAgICAgICAgIGlmIChpc1BhcmFncmFwaCkgewotICAgICAgICAgICAg
aWYgKFtzZWxmIF9nZXRGbG9hdDombGVmdE1hcmdpbiBmb3JOb2RlOmJsb2NrRWxlbWVudCBwcm9w
ZXJ0eTpAIm1hcmdpbi1sZWZ0Il0gJiYgbGVmdE1hcmdpbiA+IDAuMCkKLSAgICAgICAgICAgICAg
ICBbcGFyYWdyYXBoU3R5bGUgc2V0SGVhZEluZGVudDpsZWZ0TWFyZ2luXTsKLSAgICAgICAgICAg
IGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnRleHRJbmRlbnQgZm9yTm9kZTpibG9ja0VsZW1lbnQgcHJv
cGVydHk6QCJ0ZXh0LWluZGVudCJdKQotICAgICAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBz
ZXRGaXJzdExpbmVIZWFkSW5kZW50OltwYXJhZ3JhcGhTdHlsZSBoZWFkSW5kZW50XSArIHRleHRJ
bmRlbnRdOwotICAgICAgICAgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomcmlnaHRNYXJnaW4gZm9y
Tm9kZTpibG9ja0VsZW1lbnQgcHJvcGVydHk6QCJtYXJnaW4tcmlnaHQiXSAmJiByaWdodE1hcmdp
biA+IDAuMCkKLSAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0VGFpbEluZGVudDot
cmlnaHRNYXJnaW5dOwotICAgICAgICAgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomYm90dG9tTWFy
Z2luIGZvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLWJvdHRvbSJdICYmIGJv
dHRvbU1hcmdpbiA+IDAuMCkKLSAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0UGFy
YWdyYXBoU3BhY2luZzpib3R0b21NYXJnaW5dOwotICAgICAgICB9Ci0gICAgICAgIGlmIChfd2Vi
Vmlld1RleHRTaXplTXVsdGlwbGllciA+IDAuMCAmJiBbc2VsZiBfZ2V0RmxvYXQ6JmxpbmVIZWln
aHQgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibGluZS1oZWlnaHQiXSAmJiBsaW5lSGVpZ2h0
ID4gMC4wKQorICAgICAgICAgICAgLy9pZiAoW3NlbGYgX2dldEZsb2F0OiZ0b3BNYXJnaW4gZm9y
Tm9kZTpibG9ja0VsZW1lbnQgcHJvcGVydHk6QCJtYXJnaW4tdG9wIl0gJiYgdG9wTWFyZ2luID4g
MC4wKSBbcGFyYWdyYXBoU3R5bGUgc2V0UGFyYWdyYXBoU3BhY2luZ0JlZm9yZTp0b3BNYXJnaW5d
OworICAgICAgICAgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDombGVmdE1hcmdpbiBmb3JOb2RlOmJs
b2NrRWxlbWVudCBwcm9wZXJ0eTpAIm1hcmdpbi1sZWZ0Il0gJiYgbGVmdE1hcmdpbiA+IDAuMCkg
W3BhcmFncmFwaFN0eWxlIHNldEhlYWRJbmRlbnQ6bGVmdE1hcmdpbl07CisgICAgICAgICAgICBp
ZiAoW3NlbGYgX2dldEZsb2F0OiZ0ZXh0SW5kZW50IGZvck5vZGU6YmxvY2tFbGVtZW50IHByb3Bl
cnR5OkAidGV4dC1pbmRlbnQiXSkgW3BhcmFncmFwaFN0eWxlIHNldEZpcnN0TGluZUhlYWRJbmRl
bnQ6W3BhcmFncmFwaFN0eWxlIGhlYWRJbmRlbnRdICsgdGV4dEluZGVudF07CisgICAgICAgICAg
ICBpZiAoW3NlbGYgX2dldEZsb2F0OiZyaWdodE1hcmdpbiBmb3JOb2RlOmJsb2NrRWxlbWVudCBw
cm9wZXJ0eTpAIm1hcmdpbi1yaWdodCJdICYmIHJpZ2h0TWFyZ2luID4gMC4wKSBbcGFyYWdyYXBo
U3R5bGUgc2V0VGFpbEluZGVudDotcmlnaHRNYXJnaW5dOworICAgICAgICAgICAgaWYgKFtzZWxm
IF9nZXRGbG9hdDomYm90dG9tTWFyZ2luIGZvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAi
bWFyZ2luLWJvdHRvbSJdICYmIGJvdHRvbU1hcmdpbiA+IDAuMCkgW3BhcmFncmFwaFN0eWxlIHNl
dFBhcmFncmFwaFNwYWNpbmc6Ym90dG9tTWFyZ2luXTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
X3dlYlZpZXdUZXh0U2l6ZU11bHRpcGxpZXIgPiAwLjAgJiYgW3NlbGYgX2dldEZsb2F0OiZsaW5l
SGVpZ2h0IGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImxpbmUtaGVpZ2h0Il0gJiYgbGluZUhl
aWdodCA+IDAuMCkgewogICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldE1pbmltdW1MaW5l
SGVpZ2h0OmxpbmVIZWlnaHQgLyBfd2ViVmlld1RleHRTaXplTXVsdGlwbGllcl07Ci0gICAgICAg
IGlmIChbX3RleHRMaXN0cyBjb3VudF0gPiAwKQotICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxl
IHNldFRleHRMaXN0czpfdGV4dExpc3RzXTsKLSAgICAgICAgaWYgKFtfdGV4dEJsb2NrcyBjb3Vu
dF0gPiAwKQotICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldFRleHRCbG9ja3M6X3RleHRC
bG9ja3NdOworICAgICAgICB9CisgICAgICAgIGlmIChbX3RleHRMaXN0cyBjb3VudF0gPiAwKSBb
cGFyYWdyYXBoU3R5bGUgc2V0VGV4dExpc3RzOl90ZXh0TGlzdHNdOworICAgICAgICBpZiAoW190
ZXh0QmxvY2tzIGNvdW50XSA+IDApIFtwYXJhZ3JhcGhTdHlsZSBzZXRUZXh0QmxvY2tzOl90ZXh0
QmxvY2tzXTsKICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpwYXJhZ3JhcGhTdHlsZSBmb3JLZXk6
TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBbcGFyYWdyYXBoU3R5bGUg
cmVsZWFzZV07CiAgICAgfQpAQCAtMTIzOCw4ICs3MTksOSBAQCBzdGF0aWMgaW5saW5lIE5TU2hh
ZG93ICpfc2hhZG93Rm9yU2hhZG93U3R5bGUoTlNTdHJpbmcgKnNoYWRvd1N0eWxlKQogICAgICAg
ICAgICAgcmVzdWx0ID0gW3NlbGYgX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQ6ZWxlbWVu
dF07CiAgICAgICAgICAgICBbX2F0dHJpYnV0ZXNGb3JFbGVtZW50cyBzZXRPYmplY3Q6cmVzdWx0
IGZvcktleTplbGVtZW50XTsKICAgICAgICAgfQotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CiAg
ICAgICAgIHJlc3VsdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeV07CisgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CiAKIH0KQEAgLTEyNTQsMTMgKzczNiwxMSBAQCBzdGF0aWMgaW5saW5lIE5T
U2hhZG93ICpfc2hhZG93Rm9yU2hhZG93U3R5bGUoTlNTdHJpbmcgKnNoYWRvd1N0eWxlKQogICAg
ICAgICBOU1N0cmluZyAqc3RyaW5nID0gKChbQCJCT0RZIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSB8
fCBbQCJIVE1MIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkgPyBAIiIgOiBAIlxuIik7CiAgICAgICAg
IFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbW92ZUFsbE9iamVjdHNdOwogICAgICAgICBbX2F0
dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6
c3RyaW5nXTsKLSAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdl
U3RhcnRJbmRleCkKLSAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gW3N0cmluZyBs
ZW5ndGhdIC0gcmFuZ2VUb1JlcGxhY2UubGVuZ3RoOworICAgICAgICBpZiAocmFuZ2VUb1JlcGxh
Y2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VTdGFydEluZGV4ICs9
IFtzdHJpbmcgbGVuZ3RoXSAtIHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKICAgICAgICAgcmFuZ2VU
b1JlcGxhY2UubGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwogICAgICAgICBpZiAoIV9mbGFncy5p
c0luZGV4aW5nKSB7CiAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3NlbGYgX2F0
dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOwotICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNU
ZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgW19h
dHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOworICAgICAg
ICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDAp
IFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKICAg
ICAgICAgfQogICAgICAgICBfZmxhZ3MuaXNTb2Z0ID0gWUVTOwogICAgIH0KQEAgLTEyNjksMTcg
Kzc0OSwxNyBAQCBzdGF0aWMgaW5saW5lIE5TU2hhZG93ICpfc2hhZG93Rm9yU2hhZG93U3R5bGUo
TlNTdHJpbmcgKnNoYWRvd1N0eWxlKQogLSAodm9pZClfbmV3TGluZUZvckVsZW1lbnQ6KERPTUVs
ZW1lbnQgKillbGVtZW50CiB7CiAgICAgdW5pY2hhciBjID0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFj
dGVyOwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5n
IGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnM6JmMgbGVuZ3RoOjFdKTsKKyAgICBOU1N0cmluZyAq
c3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOiZjIGxlbmd0aDox
XTsKICAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKICAgICBO
U1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCk7Ci0gICAg
W19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3Ry
aW5nOnN0cmluZy5nZXQoKV07CisgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5n
ZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOnN0cmluZ107CiAgICAgcmFuZ2VUb1JlcGxhY2Uu
bGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwogICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlv
biA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gcmFuZ2VUb1Jl
cGxhY2UubGVuZ3RoOwogICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcpIHsKICAgICAgICAgTlNE
aWN0aW9uYXJ5ICphdHRycyA9IFtzZWxmIF9hdHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsK
LSAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+
IDApCi0gICAgICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5n
ZVRvUmVwbGFjZV07CisgICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5nZVRvUmVw
bGFjZS5sZW5ndGggPiAwKSBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5n
ZVRvUmVwbGFjZV07CiAgICAgfQorICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgX2ZsYWdzLmlz
U29mdCA9IFlFUzsKIH0KIApAQCAtMTI5MSw0NCArNzcxLDI4IEBAIHN0YXRpYyBpbmxpbmUgTlNT
aGFkb3cgKl9zaGFkb3dGb3JTaGFkb3dTdHlsZShOU1N0cmluZyAqc2hhZG93U3R5bGUpCiAgICAg
TlNSYW5nZSByYW5nZVRvUmVwbGFjZSA9IChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09ICcg
JykgPyBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoIC0gMSwgMSkgOiBOU01ha2VSYW5nZSh0ZXh0TGVu
Z3RoLCAwKTsKICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9S
ZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nXTsKICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBb
c3RyaW5nIGxlbmd0aF07Ci0gICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJh
bmdlU3RhcnRJbmRleCkKLSAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVw
bGFjZS5sZW5ndGg7CisgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdl
U3RhcnRJbmRleCkgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7
CiAgICAgaWYgKCFfZmxhZ3MuaXNJbmRleGluZykgewogICAgICAgICBOU0RpY3Rpb25hcnkgKmF0
dHJzID0gW3NlbGYgX2F0dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOwotICAgICAgICBpZiAo
IV9mbGFncy5pc1Rlc3RpbmcgJiYgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkKLSAgICAgICAg
ICAgIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsK
KyAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+
IDApIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsK
ICAgICB9CisgICAgW3N0cmluZyByZWxlYXNlXTsKICAgICBfZmxhZ3MuaXNTb2Z0ID0gWUVTOwog
fQotCi0tIChDbGFzcylfV2ViTWVzc2FnZURvY3VtZW50Q2xhc3MKLXsKLSAgICBzdGF0aWMgQ2xh
c3MgX1dlYk1lc3NhZ2VEb2N1bWVudENsYXNzID0gTmlsOwotICAgIHN0YXRpYyBCT09MIGxvb2tl
ZFVwQ2xhc3MgPSBOTzsKLSAgICBpZiAoIWxvb2tlZFVwQ2xhc3MpIHsKLSAgICAgICAgLy8gSWYg
dGhlIGNsYXNzIGlzIG5vdCB0aGVyZSwgd2UgZG9uJ3Qgd2FudCB0byB0cnkgYWdhaW4KLSAgICAg
ICAgX1dlYk1lc3NhZ2VEb2N1bWVudENsYXNzID0gb2JqY19sb29rVXBDbGFzcygiTUZXZWJNZXNz
YWdlRG9jdW1lbnQiKTsKLSAgICAgICAgaWYgKF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyAmJiAh
W19XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRv
Y3VtZW50OmF0dGFjaG1lbnQ6Zm9yVVJMOildKQotICAgICAgICAgICAgX1dlYk1lc3NhZ2VEb2N1
bWVudENsYXNzID0gTmlsOwotICAgICAgICBsb29rZWRVcENsYXNzID0gWUVTOwotICAgIH0KLSAg
ICByZXR1cm4gX1dlYk1lc3NhZ2VEb2N1bWVudENsYXNzOwotfQotCisgICAgCiAtIChCT09MKV9h
ZGRBdHRhY2htZW50Rm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgVVJMOihOU1VSTCAq
KXVybCBuZWVkc1BhcmFncmFwaDooQk9PTCluZWVkc1BhcmFncmFwaCB1c2VQbGFjZWhvbGRlcjoo
Qk9PTClmbGFnCiB7CiAgICAgQk9PTCByZXR2YWwgPSBOTywgbm90Rm91bmQgPSBOTzsKICAgICBO
U0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlciA9IG5pbDsKKyAgICBzdGF0aWMgTlNJbWFnZSAqbWlz
c2luZ0ltYWdlID0gbmlsOwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW2VsZW1lbnQgb3duZXJE
b2N1bWVudF0pLT5mcmFtZSgpOwogICAgIERvY3VtZW50TG9hZGVyICpkYXRhU291cmNlID0gZnJh
bWUtPmxvYWRlcigpLmZyYW1lSGFzTG9hZGVkKCkgPyBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSA6IDA7CiAgICAgQk9PTCBpZ25vcmVPcmllbnRhdGlvbiA9IFlFUzsKIAotICAgIGlm
IChfZmxhZ3MuaXNJbmRleGluZykKLSAgICAgICAgcmV0dXJuIE5POworICAgIGlmIChfZmxhZ3Mu
aXNJbmRleGluZykgcmV0dXJuIE5POwogICAgIGlmIChbdXJsIGlzRmlsZVVSTF0pIHsKICAgICAg
ICAgTlNTdHJpbmcgKnBhdGggPSBbW3VybCBwYXRoXSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRo
XTsKLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAgICBmaWxlV3JhcHBlciA9IFtbW05TRmls
ZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOnVybCBvcHRpb25zOjAgZXJyb3I6TlVMTF0gYXV0
b3JlbGVhc2VdOworICAgICAgICBpZiAocGF0aCkgZmlsZVdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFw
cGVyIGFsbG9jXSBpbml0V2l0aFBhdGg6cGF0aF0gYXV0b3JlbGVhc2VdOwogICAgIH0KICAgICBp
ZiAoIWZpbGVXcmFwcGVyKSB7CiAgICAgICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291
cmNlID0gZGF0YVNvdXJjZS0+c3VicmVzb3VyY2UodXJsKTsKQEAgLTEzNDMsNyArODA3LDYgQEAg
c3RhdGljIGlubGluZSBOU1NoYWRvdyAqX3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5nICpz
aGFkb3dTdHlsZSkKICAgICAgICAgICAgIFtmaWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFt
ZTpzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZSh1cmwsIG1pbWVUeXBlKV07CiAgICAgICAg
IH0KICAgICB9Ci0jaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWZpbGVXcmFwcGVyICYmICFu
b3RGb3VuZCkgewogICAgICAgICBmaWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyRm9yVVJMKGRhdGFT
b3VyY2UsIHVybCk7CiAgICAgICAgIGlmIChmbGFnICYmIGZpbGVXcmFwcGVyICYmIFtbW1tmaWxl
V3JhcHBlciBwcmVmZXJyZWRGaWxlbmFtZV0gcGF0aEV4dGVuc2lvbl0gbG93ZXJjYXNlU3RyaW5n
XSBoYXNQcmVmaXg6QCJodG0iXSkgbm90Rm91bmQgPSBZRVM7CkBAIC0xMzU0LDYwICs4MTcsMzEg
QEAgc3RhdGljIGlubGluZSBOU1NoYWRvdyAqX3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5n
ICpzaGFkb3dTdHlsZSkKICAgICAgICAgaWYgKGZsYWcgJiYgZmlsZVdyYXBwZXIgJiYgW1tbW2Zp
bGVXcmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXSBwYXRoRXh0ZW5zaW9uXSBsb3dlcmNhc2VTdHJp
bmddIGhhc1ByZWZpeDpAImh0bSJdKSBub3RGb3VuZCA9IFlFUzsKICAgICAgICAgaWYgKG5vdEZv
dW5kKSBmaWxlV3JhcHBlciA9IG5pbDsKICAgICB9Ci0jZW5kaWYKLSAgICBpZiAoIWZpbGVXcmFw
cGVyICYmICFub3RGb3VuZCAmJiB1cmwpIHsKLSAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBm
b3IgTWFpbCBhdHRhY2htZW50cywgdW50aWwgV2ViS2l0IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5
IHRvIGdldCB0aGUgZGF0YS4KLSAgICAgICAgQ2xhc3MgV2ViTWVzc2FnZURvY3VtZW50Q2xhc3Mg
PSBbc2VsZiBfV2ViTWVzc2FnZURvY3VtZW50Q2xhc3NdOwotICAgICAgICBpZiAoV2ViTWVzc2Fn
ZURvY3VtZW50Q2xhc3MpIHsKLSAgICAgICAgICAgIE5TVGV4dEF0dGFjaG1lbnQgKm1pbWVUZXh0
QXR0YWNobWVudCA9IG5pbDsKLSAgICAgICAgICAgIFtXZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyBk
b2N1bWVudDpOVUxMIGF0dGFjaG1lbnQ6Jm1pbWVUZXh0QXR0YWNobWVudCBmb3JVUkw6dXJsXTsK
LSAgICAgICAgICAgIGlmIChtaW1lVGV4dEF0dGFjaG1lbnQgJiYgW21pbWVUZXh0QXR0YWNobWVu
dCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGZpbGVXcmFwcGVyKV0pIHsKLSAgICAgICAg
ICAgICAgICBmaWxlV3JhcHBlciA9IFttaW1lVGV4dEF0dGFjaG1lbnQgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3RvcihmaWxlV3JhcHBlcildOwotICAgICAgICAgICAgICAgIGlnbm9yZU9yaWVudGF0
aW9uID0gTk87Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAgICAgaWYgKGZpbGVX
cmFwcGVyIHx8IGZsYWcpIHsKICAgICAgICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRy
U3RyIGxlbmd0aF07Ci0gICAgICAgIFJldGFpblB0cjxOU1RleHRBdHRhY2htZW50PiBhdHRhY2ht
ZW50ID0gYWRvcHROUyhbW1BsYXRmb3JtTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhG
aWxlV3JhcHBlcjpmaWxlV3JhcHBlcl0pOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgTlNT
dHJpbmcgKnZBbGlnbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJ2
ZXJ0aWNhbC1hbGlnbiJdOwotICAgICAgICBOU1N0cmluZyAqaEFsaWduID0gW3NlbGYgX3N0cmlu
Z0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImhvcml6b250YWwtYWxpZ24iXTsKLSAgICAgICAg
YXR0YWNobWVudC5nZXQoKS5ib3VuZHMgPSBDR1JlY3RNYWtlKChbaEFsaWduIGZsb2F0VmFsdWVd
IC8gMTAwLikgKiBlbGVtZW50LmNsaWVudFdpZHRoLCAoW3ZBbGlnbiBmbG9hdFZhbHVlXSAvIDEw
MC4pICogZWxlbWVudC5jbGllbnRIZWlnaHQsIGVsZW1lbnQuY2xpZW50V2lkdGgsIGVsZW1lbnQu
Y2xpZW50SGVpZ2h0KTsKLSNlbmRpZgotICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmlu
ZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6KG5lZWRzUGFyYWdy
YXBoID8gQCIlQ1xuIiA6IEAiJUMiKSwgc3RhdGljX2Nhc3Q8dW5pY2hhcj4oTlNBdHRhY2htZW50
Q2hhcmFjdGVyKV0pOworICAgICAgICBOU1RleHRBdHRhY2htZW50ICphdHRhY2htZW50ID0gW1tO
U1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyXTsK
KyAgICAgICAgTlNUZXh0QXR0YWNobWVudENlbGwgKmNlbGw7CisgICAgICAgIE5TU3RyaW5nICpz
dHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEZvcm1hdDoobmVlZHNQYXJhZ3JhcGgg
PyBAIiVDXG4iIDogQCIlQyIpLCBzdGF0aWNfY2FzdDx1bmljaGFyPihOU0F0dGFjaG1lbnRDaGFy
YWN0ZXIpXTsKICAgICAgICAgTlNSYW5nZSByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRl
eHRMZW5ndGgsIDApOwogICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzOwogICAgICAgICBpZiAo
ZmlsZVdyYXBwZXIpIHsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICAgICAgaWYgKGlnbm9y
ZU9yaWVudGF0aW9uKQotICAgICAgICAgICAgICAgIFthdHRhY2htZW50IHNldElnbm9yZXNPcmll
bnRhdGlvbjpZRVNdOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoaWdub3JlT3JpZW50YXRpb24p
IFthdHRhY2htZW50IHNldElnbm9yZXNPcmllbnRhdGlvbjpZRVNdOwogICAgICAgICB9IGVsc2Ug
ewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgICAgIFthdHRhY2htZW50IHJlbGVhc2VdOwot
ICAgICAgICAgICAgTlNVUkwgKm1pc3NpbmdJbWFnZVVSTCA9IFtbc2VsZiBfd2ViS2l0QnVuZGxl
XSBVUkxGb3JSZXNvdXJjZTpAIm1pc3NpbmdfaW1hZ2UiIHdpdGhFeHRlbnNpb246QCJ0aWZmIl07
Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1pc3NpbmdJbWFnZVVSTCAhPSBuaWws
ICJVbmFibGUgdG8gZmluZCBtaXNzaW5nX2ltYWdlLnRpZmYhIik7Ci0gICAgICAgICAgICBOU0Zp
bGVXcmFwcGVyICptaXNzaW5nSW1hZ2VGaWxlV3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxs
b2NdIGluaXRXaXRoVVJMOm1pc3NpbmdJbWFnZVVSTCBvcHRpb25zOjAgZXJyb3I6TlVMTF0gYXV0
b3JlbGVhc2VdOwotICAgICAgICAgICAgYXR0YWNobWVudCA9IFtbUGxhdGZvcm1OU1RleHRBdHRh
Y2htZW50IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOm1pc3NpbmdJbWFnZUZpbGVXcmFwcGVy
XTsKLSNlbHNlCi0gICAgICAgICAgICBzdGF0aWMgTlNJbWFnZSAqbWlzc2luZ0ltYWdlID0gbmls
OwotICAgICAgICAgICAgTlNUZXh0QXR0YWNobWVudENlbGwgKmNlbGw7CiAgICAgICAgICAgICBj
ZWxsID0gW1tOU1RleHRBdHRhY2htZW50Q2VsbCBhbGxvY10gaW5pdEltYWdlQ2VsbDptaXNzaW5n
SW1hZ2VdOwogICAgICAgICAgICAgW2F0dGFjaG1lbnQgc2V0QXR0YWNobWVudENlbGw6Y2VsbF07
CiAgICAgICAgICAgICBbY2VsbCByZWxlYXNlXTsKLSNlbmRpZgogICAgICAgICB9Ci0gICAgICAg
IFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0
cmluZzpzdHJpbmcuZ2V0KCldOworICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJ
blJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nXTsKICAgICAgICAgcmFuZ2VU
b1JlcGxhY2UubGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwotICAgICAgICBpZiAocmFuZ2VUb1Jl
cGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQotICAgICAgICAgICAgX2RvbVJh
bmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7CisgICAgICAgIGlmIChyYW5n
ZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpIF9kb21SYW5nZVN0YXJ0
SW5kZXggKz0gcmFuZ2VUb1JlcGxhY2UubGVuZ3RoOwogICAgICAgICBhdHRycyA9IFtzZWxmIF9h
dHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsKICAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0
aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgIFtfYXR0clN0
ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKICAgICAgICAgICAg
IHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IDE7Ci0gICAgICAgICAgICBbX2F0dHJTdHIgYWRkQXR0
cmlidXRlOk5TQXR0YWNobWVudEF0dHJpYnV0ZU5hbWUgdmFsdWU6YXR0YWNobWVudC5nZXQoKSBy
YW5nZTpyYW5nZVRvUmVwbGFjZV07CisgICAgICAgICAgICBbX2F0dHJTdHIgYWRkQXR0cmlidXRl
Ok5TQXR0YWNobWVudEF0dHJpYnV0ZU5hbWUgdmFsdWU6YXR0YWNobWVudCByYW5nZTpyYW5nZVRv
UmVwbGFjZV07CiAgICAgICAgIH0KKyAgICAgICAgW3N0cmluZyByZWxlYXNlXTsKKyAgICAgICAg
W2F0dGFjaG1lbnQgcmVsZWFzZV07CiAgICAgICAgIF9mbGFncy5pc1NvZnQgPSBOTzsKICAgICAg
ICAgcmV0dmFsID0gWUVTOwogICAgIH0KQEAgLTE0MTcsMTAwICs4NTEsNzMgQEAgc3RhdGljIGlu
bGluZSBOU1NoYWRvdyAqX3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5nICpzaGFkb3dTdHls
ZSkKIC0gKHZvaWQpX2FkZFF1b3RlRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgb3Bl
bmluZzooQk9PTClvcGVuaW5nIGxldmVsOihOU0ludGVnZXIpbGV2ZWwKIHsKICAgICB1bmljaGFy
IGMgPSAoKGxldmVsICUgMikgPT0gMCkgPyAob3BlbmluZyA/IDB4MjAxYyA6IDB4MjAxZCkgOiAo
b3BlbmluZyA/IDB4MjAxOCA6IDB4MjAxOSk7Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdHJp
bmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyczomYyBsZW5n
dGg6MV0pOworICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aENoYXJhY3RlcnM6JmMgbGVuZ3RoOjFdOwogICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtf
YXR0clN0ciBsZW5ndGhdOwogICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5n
ZSh0ZXh0TGVuZ3RoLCAwKTsKLSAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdl
OnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nLmdldCgpXTsKKyAgICBbX2F0dHJTdHIg
cmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5n
XTsKICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07Ci0gICAgaWYg
KHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkKLSAgICAgICAg
X2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7CisgICAgaWYgKHJh
bmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkgX2RvbVJhbmdlU3Rh
cnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7CiAgICAgaWYgKCFfZmxhZ3MuaXNJbmRl
eGluZykgewotICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBhdHRycyA9IFtzZWxmIF9h
dHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0
aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApCi0gICAgICAgICAgICBbX2F0dHJTdHIg
c2V0QXR0cmlidXRlczphdHRycy5nZXQoKSByYW5nZTpyYW5nZVRvUmVwbGFjZV07CisgICAgICAg
IE5TRGljdGlvbmFyeSAqYXR0cnMgPSBbc2VsZiBfYXR0cmlidXRlc0ZvckVsZW1lbnQ6ZWxlbWVu
dF07CisgICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5nZVRvUmVwbGFjZS5sZW5n
dGggPiAwKSBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFj
ZV07CiAgICAgfQorICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgX2ZsYWdzLmlzU29mdCA9IE5P
OwogfQogCiAtICh2b2lkKV9hZGRWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBmb3JFbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudAogewotICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0
clN0ciBsZW5ndGhdOwotICAgIE5TVUludGVnZXIgdmFsdWVMZW5ndGggPSBbdmFsdWUgbGVuZ3Ro
XTsKKyAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXSwgdmFsdWVM
ZW5ndGggPSBbdmFsdWUgbGVuZ3RoXTsKICAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gTlNN
YWtlUmFuZ2UodGV4dExlbmd0aCwgMCk7Ci0gICAgaWYgKHZhbHVlTGVuZ3RoKSB7CisgICAgaWYg
KHZhbHVlTGVuZ3RoID4gMCkgewogICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJ
blJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6dmFsdWVdOwogICAgICAgICByYW5nZVRv
UmVwbGFjZS5sZW5ndGggPSB2YWx1ZUxlbmd0aDsKLSAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNl
LmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkKLSAgICAgICAgICAgIF9kb21SYW5nZVN0
YXJ0SW5kZXggKz0gcmFuZ2VUb1JlcGxhY2UubGVuZ3RoOworICAgICAgICBpZiAocmFuZ2VUb1Jl
cGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VTdGFydEluZGV4
ICs9IHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKICAgICAgICAgaWYgKCFfZmxhZ3MuaXNJbmRleGlu
ZykgewotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gYXR0cnMgPSBbc2VsZiBf
YXR0cmlidXRlc0ZvckVsZW1lbnQ6ZWxlbWVudF07Ci0gICAgICAgICAgICBpZiAoIV9mbGFncy5p
c1Rlc3RpbmcgJiYgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkKLSAgICAgICAgICAgICAgICBb
X2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycy5nZXQoKSByYW5nZTpyYW5nZVRvUmVwbGFjZV07
CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3NlbGYgX2F0dHJpYnV0ZXNGb3JF
bGVtZW50OmVsZW1lbnRdOworICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJh
bmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJh
bmdlOnJhbmdlVG9SZXBsYWNlXTsKICAgICAgICAgfQogICAgICAgICBfZmxhZ3MuaXNTb2Z0ID0g
Tk87CiAgICAgfQogfQogCi0tICh2b2lkKV9maWxsSW5CbG9jazooTlNUZXh0QmxvY2sgKilibG9j
ayBmb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCBiYWNrZ3JvdW5kQ29sb3I6KFBsYXRm
b3JtQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3IgZXh0cmFNYXJnaW46KENHRmxvYXQpZXh0cmFNYXJn
aW4gZXh0cmFQYWRkaW5nOihDR0Zsb2F0KWV4dHJhUGFkZGluZyBpc1RhYmxlOihCT09MKWlzVGFi
bGUKKy0gKHZvaWQpX2ZpbGxJbkJsb2NrOihOU1RleHRCbG9jayAqKWJsb2NrIGZvckVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbGVtZW50IGJhY2tncm91bmRDb2xvcjooTlNDb2xvciAqKWJhY2tncm91
bmRDb2xvciBleHRyYU1hcmdpbjooQ0dGbG9hdClleHRyYU1hcmdpbiBleHRyYVBhZGRpbmc6KENH
RmxvYXQpZXh0cmFQYWRkaW5nIGlzVGFibGU6KEJPT0wpaXNUYWJsZQogewogICAgIENHRmxvYXQg
dmFsID0gMDsKLSAgICBQbGF0Zm9ybUNvbG9yICpjb2xvciA9IG5pbDsKKyAgICBOU0NvbG9yICpj
b2xvciA9IG5pbDsKICAgICBCT09MIGlzVGFibGVDZWxsRWxlbWVudCA9IFtlbGVtZW50IGlzS2lu
ZE9mQ2xhc3M6W0RPTUhUTUxUYWJsZUNlbGxFbGVtZW50IGNsYXNzXV07CiAgICAgTlNTdHJpbmcg
KndpZHRoID0gaXNUYWJsZUNlbGxFbGVtZW50ID8gWyhET01IVE1MVGFibGVDZWxsRWxlbWVudCAq
KWVsZW1lbnQgd2lkdGhdIDogW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAid2lkdGgiXTsKIAotICAg
IGlmICgod2lkdGggJiYgW3dpZHRoIGxlbmd0aF0pIHx8ICFpc1RhYmxlKSB7Ci0gICAgICAgIGlm
IChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJ3aWR0aCJd
KQotICAgICAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1
dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2NrV2lkdGhdOworICAgIGlmICgod2lk
dGggJiYgW3dpZHRoIGxlbmd0aF0gPiAwKSB8fCAhaXNUYWJsZSkgeworICAgICAgICBpZiAoW3Nl
bGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAid2lkdGgiXSkgW2Js
b2NrIHNldFZhbHVlOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGlt
ZW5zaW9uOk5TVGV4dEJsb2NrV2lkdGhdOwogICAgIH0KICAgICAKLSAgICBpZiAoW3NlbGYgX2dl
dEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibWluLXdpZHRoIl0pCi0gICAg
ICAgIFtibG9jayBzZXRWYWx1ZTp2YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBl
IGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja01pbmltdW1XaWR0aF07Ci0gICAgaWYgKFtzZWxmIF9n
ZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1heC13aWR0aCJdKQotICAg
ICAgICBbYmxvY2sgc2V0VmFsdWU6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlw
ZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tNYXhpbXVtV2lkdGhdOwotICAgIGlmIChbc2VsZiBf
Z2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJtaW4taGVpZ2h0Il0pCi0g
ICAgICAgIFtibG9jayBzZXRWYWx1ZTp2YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVU
eXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja01pbmltdW1IZWlnaHRdOwotICAgIGlmIChbc2Vs
ZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJtYXgtaGVpZ2h0Il0p
Ci0gICAgICAgIFtibG9jayBzZXRWYWx1ZTp2YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFs
dWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja01heGltdW1IZWlnaHRdOwotCi0gICAgaWYg
KFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInBhZGRpbmct
bGVmdCJdKQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0cmFQYWRkaW5nIHR5cGU6
TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcg
ZWRnZTpOU01pblhFZGdlXTsKLSAgICBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcg
dHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFk
ZGluZyBlZGdlOk5TTWluWEVkZ2VdOwotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JO
b2RlOmVsZW1lbnQgcHJvcGVydHk6QCJwYWRkaW5nLXRvcCJdKQotICAgICAgICBbYmxvY2sgc2V0
V2lkdGg6dmFsICsgZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlw
ZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01pbllFZGdlXTsgZWxzZSBbYmxv
Y2sgc2V0V2lkdGg6ZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlw
ZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01pbllFZGdlXTsKLSAgICBpZiAo
W3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAicGFkZGluZy1y
aWdodCJdKQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0cmFQYWRkaW5nIHR5cGU6
TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcg
ZWRnZTpOU01heFhFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFQYWRkaW5nIHR5cGU6
TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcg
ZWRnZTpOU01heFhFZGdlXTsKLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTpl
bGVtZW50IHByb3BlcnR5OkAicGFkZGluZy1ib3R0b20iXSkKLSAgICAgICAgW2Jsb2NrIHNldFdp
ZHRoOnZhbCArIGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUg
Zm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhZRWRnZV07IGVsc2UgW2Jsb2Nr
IHNldFdpZHRoOmV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUg
Zm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhZRWRnZV07CisgICAgaWYgKFtz
ZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1pbi13aWR0aCJd
KSBbYmxvY2sgc2V0VmFsdWU6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBm
b3JEaW1lbnNpb246TlNUZXh0QmxvY2tNaW5pbXVtV2lkdGhdOworICAgIGlmIChbc2VsZiBfZ2V0
RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJtYXgtd2lkdGgiXSkgW2Jsb2Nr
IHNldFZhbHVlOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5z
aW9uOk5TVGV4dEJsb2NrTWF4aW11bVdpZHRoXTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2
YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibWluLWhlaWdodCJdKSBbYmxvY2sgc2V0VmFs
dWU6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNU
ZXh0QmxvY2tNaW5pbXVtSGVpZ2h0XTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9y
Tm9kZTplbGVtZW50IHByb3BlcnR5OkAibWF4LWhlaWdodCJdKSBbYmxvY2sgc2V0VmFsdWU6dmFs
IHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0Qmxv
Y2tNYXhpbXVtSGVpZ2h0XTsKKworICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2Rl
OmVsZW1lbnQgcHJvcGVydHk6QCJwYWRkaW5nLWxlZnQiXSkgW2Jsb2NrIHNldFdpZHRoOnZhbCAr
IGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6
TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5YRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRo
OmV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6
TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5YRWRnZV07CisgICAgaWYgKFtzZWxmIF9nZXRG
bG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInBhZGRpbmctdG9wIl0pIFtibG9j
ayBzZXRXaWR0aDp2YWwgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFs
dWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWluWUVkZ2VdOyBlbHNl
IFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFs
dWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWluWUVkZ2VdOworICAg
IGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJwYWRk
aW5nLXJpZ2h0Il0pIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1Rl
eHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdl
Ok5TTWF4WEVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1Rl
eHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdl
Ok5TTWF4WEVkZ2VdOworICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1l
bnQgcHJvcGVydHk6QCJwYWRkaW5nLWJvdHRvbSJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0
cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja1BhZGRpbmcgZWRnZTpOU01heFlFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0
cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja1BhZGRpbmcgZWRnZTpOU01heFlFZGdlXTsKICAgICAKLSAgICBpZiAoW3NlbGYgX2dl
dEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWxlZnQtd2lkdGgi
XSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVW
YWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01pblhFZGdlXTsKLSAg
ICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9y
ZGVyLXRvcC13aWR0aCJdKQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0
QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5T
TWluWUVkZ2VdOwotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQg
cHJvcGVydHk6QCJib3JkZXItcmlnaHQtd2lkdGgiXSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRo
OnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0Qmxv
Y2tCb3JkZXIgZWRnZTpOU01heFhFZGdlXTsKLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwg
Zm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWJvdHRvbS13aWR0aCJdKQotICAgICAg
ICBbYmxvY2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBm
b3JMYXllcjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5TTWF4WUVkZ2VdOwotCi0gICAgaWYgKFtz
ZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1hcmdpbi1sZWZ0
Il0pCi0gICAgICAgIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4
dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpO
U01pblhFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRC
bG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNN
aW5YRWRnZV07Ci0gICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBw
cm9wZXJ0eTpAIm1hcmdpbi10b3AiXSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4
dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja01hcmdpbiBlZGdlOk5TTWluWUVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRy
YU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0
QmxvY2tNYXJnaW4gZWRnZTpOU01pbllFZGdlXTsKLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2
YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLXJpZ2h0Il0pCi0gICAgICAgIFti
bG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVW
YWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01heFhFZGdlXTsgZWxz
ZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFs
dWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhYRWRnZV07Ci0gICAg
aWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1hcmdp
bi1ib3R0b20iXSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhTWFyZ2luIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdp
biBlZGdlOk5TTWF4WUVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0eXBl
Ok5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4g
ZWRnZTpOU01heFlFZGdlXTsKLQotICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2Rl
OmVsZW1lbnQgcHJvcGVydHk6QCJiYWNrZ3JvdW5kLWNvbG9yIl0pKQotICAgICAgICBbYmxvY2sg
c2V0QmFja2dyb3VuZENvbG9yOmNvbG9yXTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwg
Zm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWxlZnQtd2lkdGgiXSkgW2Jsb2NrIHNl
dFdpZHRoOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNU
ZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01pblhFZGdlXTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0
OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLXRvcC13aWR0aCJdKSBbYmxv
Y2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXll
cjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5TTWluWUVkZ2VdOworICAgIGlmIChbc2VsZiBfZ2V0
RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJib3JkZXItcmlnaHQtd2lkdGgi
XSkgW2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUg
Zm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01heFhFZGdlXTsKKyAgICBpZiAoW3Nl
bGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWJvdHRv
bS13aWR0aCJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZh
bHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5TTWF4WUVkZ2VdOworCisg
ICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1h
cmdpbi1sZWZ0Il0pIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4
dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpO
U01pblhFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRC
bG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNN
aW5YRWRnZV07CisgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBw
cm9wZXJ0eTpAIm1hcmdpbi10b3AiXSkgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhTWFyZ2lu
IHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01h
cmdpbiBlZGdlOk5TTWluWUVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0
eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJn
aW4gZWRnZTpOU01pbllFZGdlXTsKKyAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLXJpZ2h0Il0pIFtibG9jayBzZXRXaWR0aDp2YWwg
KyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6
TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01heFhFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6
ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5T
VGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhYRWRnZV07CisgICAgaWYgKFtzZWxmIF9nZXRGbG9h
dDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1hcmdpbi1ib3R0b20iXSkgW2Jsb2Nr
IHNldFdpZHRoOnZhbCArIGV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVl
VHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WUVkZ2VdOyBlbHNlIFti
bG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5
cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01heFlFZGdlXTsKKworICAgIGlm
ICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJiYWNrZ3Jv
dW5kLWNvbG9yIl0pKSBbYmxvY2sgc2V0QmFja2dyb3VuZENvbG9yOmNvbG9yXTsKICAgICBpZiAo
IWNvbG9yICYmIGJhY2tncm91bmRDb2xvcikgW2Jsb2NrIHNldEJhY2tncm91bmRDb2xvcjpiYWNr
Z3JvdW5kQ29sb3JdOwotICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1l
bnQgcHJvcGVydHk6QCJib3JkZXItbGVmdC1jb2xvciJdKSkKLSAgICAgICAgW2Jsb2NrIHNldEJv
cmRlckNvbG9yOmNvbG9yIGZvckVkZ2U6TlNNaW5YRWRnZV07Ci0gICAgaWYgKChjb2xvciA9IFtz
ZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJvcmRlci10b3AtY29sb3IiXSkp
Ci0gICAgICAgIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWluWUVkZ2Vd
OwotICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6
QCJib3JkZXItcmlnaHQtY29sb3IiXSkpCi0gICAgICAgIFtibG9jayBzZXRCb3JkZXJDb2xvcjpj
b2xvciBmb3JFZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JG
b3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJib3JkZXItYm90dG9tLWNvbG9yIl0pKQotICAgICAg
ICBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3IgZm9yRWRnZTpOU01heFlFZGdlXTsKKyAgICBp
ZiAoKGNvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVy
LWxlZnQtY29sb3IiXSkpIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWlu
WEVkZ2VdOworICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJv
cGVydHk6QCJib3JkZXItdG9wLWNvbG9yIl0pKSBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3Ig
Zm9yRWRnZTpOU01pbllFZGdlXTsKKyAgICBpZiAoKGNvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLXJpZ2h0LWNvbG9yIl0pKSBbYmxvY2sgc2V0Qm9y
ZGVyQ29sb3I6Y29sb3IgZm9yRWRnZTpOU01heFhFZGdlXTsKKyAgICBpZiAoKGNvbG9yID0gW3Nl
bGYgX2NvbG9yRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWJvdHRvbS1jb2xvciJd
KSkgW2Jsb2NrIHNldEJvcmRlckNvbG9yOmNvbG9yIGZvckVkZ2U6TlNNYXhZRWRnZV07CiB9CiAK
IHN0YXRpYyBpbmxpbmUgQk9PTCByZWFkMkRpZ2l0TnVtYmVyKGNvbnN0IGNoYXIgKipwcCwgaW50
OF90ICpvdXR2YWwpCkBAIC0xNTM1LDExOSArOTQyLDI2IEBAIHN0YXRpYyBpbmxpbmUgTlNEYXRl
ICpfZGF0ZUZvclN0cmluZyhOU1N0cmluZyAqc3RyaW5nKQogICAgIEJPT0wgd2VsbEZvcm1lZCA9
IFlFUzsKIAogICAgIGRhdGUueWVhciA9IDA7Ci0gICAgd2hpbGUgKCpwICYmIGlzQVNDSUlEaWdp
dCgqcCkpCi0gICAgICAgIGRhdGUueWVhciA9IDEwICogZGF0ZS55ZWFyICsgKnArKyAtICcwJzsK
LSAgICBpZiAoKnArKyAhPSAnLScpCi0gICAgICAgIHdlbGxGb3JtZWQgPSBOTzsKLSAgICBpZiAo
IXdlbGxGb3JtZWQgfHwgIXJlYWQyRGlnaXROdW1iZXIoJnAsICZkYXRlLm1vbnRoKSB8fCAqcCsr
ICE9ICctJykKLSAgICAgICAgd2VsbEZvcm1lZCA9IE5POwotICAgIGlmICghd2VsbEZvcm1lZCB8
fCAhcmVhZDJEaWdpdE51bWJlcigmcCwgJmRhdGUuZGF5KSB8fCAqcCsrICE9ICdUJykKLSAgICAg
ICAgd2VsbEZvcm1lZCA9IE5POwotICAgIGlmICghd2VsbEZvcm1lZCB8fCAhcmVhZDJEaWdpdE51
bWJlcigmcCwgJmRhdGUuaG91cikgfHwgKnArKyAhPSAnOicpCi0gICAgICAgIHdlbGxGb3JtZWQg
PSBOTzsKLSAgICBpZiAoIXdlbGxGb3JtZWQgfHwgIXJlYWQyRGlnaXROdW1iZXIoJnAsICZkYXRl
Lm1pbnV0ZSkgfHwgKnArKyAhPSAnOicpCi0gICAgICAgIHdlbGxGb3JtZWQgPSBOTzsKLSAgICBp
ZiAoIXdlbGxGb3JtZWQgfHwgIXJlYWQyRGlnaXROdW1iZXIoJnAsICZzZWN2YWwpIHx8ICpwKysg
IT0gJ1onKQotICAgICAgICB3ZWxsRm9ybWVkID0gTk87Ci0gICAgaWYgKHdlbGxGb3JtZWQpCi0g
ICAgICAgIGRhdGUuc2Vjb25kID0gc2VjdmFsOworICAgIHdoaWxlICgqcCAmJiBpc0FTQ0lJRGln
aXQoKnApKSBkYXRlLnllYXIgPSAxMCAqIGRhdGUueWVhciArICpwKysgLSAnMCc7CisgICAgaWYg
KCpwKysgIT0gJy0nKSB3ZWxsRm9ybWVkID0gTk87CisgICAgaWYgKCF3ZWxsRm9ybWVkIHx8ICFy
ZWFkMkRpZ2l0TnVtYmVyKCZwLCAmZGF0ZS5tb250aCkgfHwgKnArKyAhPSAnLScpIHdlbGxGb3Jt
ZWQgPSBOTzsKKyAgICBpZiAoIXdlbGxGb3JtZWQgfHwgIXJlYWQyRGlnaXROdW1iZXIoJnAsICZk
YXRlLmRheSkgfHwgKnArKyAhPSAnVCcpIHdlbGxGb3JtZWQgPSBOTzsKKyAgICBpZiAoIXdlbGxG
b3JtZWQgfHwgIXJlYWQyRGlnaXROdW1iZXIoJnAsICZkYXRlLmhvdXIpIHx8ICpwKysgIT0gJzon
KSB3ZWxsRm9ybWVkID0gTk87CisgICAgaWYgKCF3ZWxsRm9ybWVkIHx8ICFyZWFkMkRpZ2l0TnVt
YmVyKCZwLCAmZGF0ZS5taW51dGUpIHx8ICpwKysgIT0gJzonKSB3ZWxsRm9ybWVkID0gTk87Cisg
ICAgaWYgKCF3ZWxsRm9ybWVkIHx8ICFyZWFkMkRpZ2l0TnVtYmVyKCZwLCAmc2VjdmFsKSB8fCAq
cCsrICE9ICdaJykgd2VsbEZvcm1lZCA9IE5POworICAgIGlmICh3ZWxsRm9ybWVkKSBkYXRlLnNl
Y29uZCA9IHNlY3ZhbDsKICAgICByZXR1cm4gd2VsbEZvcm1lZCA/IFsoTlNEYXRlICopQ0ZEYXRl
Q3JlYXRlKE5VTEwsIENGR3JlZ29yaWFuRGF0ZUdldEFic29sdXRlVGltZShkYXRlLCBOVUxMKSkg
YXV0b3JlbGVhc2VdIDogbmlsOwogfQogCiBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJlKGlk
IGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiB7Ci0gICAgTlNJbnRlZ2VyIGNvbDEgPSBbKE5T
VGV4dFRhYmxlQmxvY2sgKilibG9jazEgc3RhcnRpbmdDb2x1bW5dOwotICAgIE5TSW50ZWdlciBj
b2wyID0gWyhOU1RleHRUYWJsZUJsb2NrICopYmxvY2syIHN0YXJ0aW5nQ29sdW1uXTsKKyAgICBO
U0ludGVnZXIgY29sMSA9IFsoTlNUZXh0VGFibGVCbG9jayAqKWJsb2NrMSBzdGFydGluZ0NvbHVt
bl0sIGNvbDIgPSBbKE5TVGV4dFRhYmxlQmxvY2sgKilibG9jazIgc3RhcnRpbmdDb2x1bW5dOwog
ICAgIHJldHVybiAoKGNvbDEgPCBjb2wyKSA/IE5TT3JkZXJlZEFzY2VuZGluZyA6ICgoY29sMSA9
PSBjb2wyKSA/IE5TT3JkZXJlZFNhbWUgOiBOU09yZGVyZWREZXNjZW5kaW5nKSk7CiB9CiAKLS0g
KHZvaWQpX3Byb2Nlc3NNZXRhRWxlbWVudFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgY29udGVu
dDooTlNTdHJpbmcgKiljb250ZW50IHsKLSAgICBOU1N0cmluZyAqa2V5ID0gbmlsOwotICAgIGlm
IChOU09yZGVyZWRTYW1lID09IFtAIkNvY29hVmVyc2lvbiIgY29tcGFyZTpuYW1lIG9wdGlvbnM6
TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdKSB7Ci0gICAgICAgIENHRmxvYXQgdmVyc2lvbk51bWJl
ciA9IFtjb250ZW50IGRvdWJsZVZhbHVlXTsKLSAgICAgICAgaWYgKHZlcnNpb25OdW1iZXIgPiAw
LjApIHsKLSAgICAgICAgICAgIC8vID8/PyB0aGlzIHNob3VsZCBiZSBrZXllZCBvZmYgb2YgdmVy
c2lvbiBudW1iZXIgaW4gZnV0dXJlCi0gICAgICAgICAgICBbX2RvY3VtZW50QXR0cnMgcmVtb3Zl
T2JqZWN0Rm9yS2V5Ok5TQ29udmVydGVkRG9jdW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICAgICAg
W19kb2N1bWVudEF0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2ZXJz
aW9uTnVtYmVyXSBmb3JLZXk6TlNDb2NvYVZlcnNpb25Eb2N1bWVudEF0dHJpYnV0ZV07Ci0gICAg
ICAgIH0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgfSBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09
IFtAIkdlbmVyYXRvciIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFy
Y2hdKSB7Ci0gICAgICAgIGtleSA9IE5TR2VuZXJhdG9yRG9jdW1lbnRBdHRyaWJ1dGU7Ci0jZW5k
aWYKLSAgICB9IGVsc2UgaWYgKE5TT3JkZXJlZFNhbWUgPT0gW0AiS2V5d29yZHMiIGNvbXBhcmU6
bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkgewotICAgICAgICBpZiAoY29u
dGVudCAmJiBbY29udGVudCBsZW5ndGhdID4gMCkgewotICAgICAgICAgICAgTlNBcnJheSAqYXJy
YXk7Ci0gICAgICAgICAgICAvLyA/Pz8gbmVlZCBiZXR0ZXIgaGFuZGxpbmcgaGVyZSBhbmQgdGhy
b3VnaG91dAotICAgICAgICAgICAgaWYgKFtjb250ZW50IHJhbmdlT2ZTdHJpbmc6QCIsICJdLmxl
bmd0aCA9PSAwICYmIFtjb250ZW50IHJhbmdlT2ZTdHJpbmc6QCIsIl0ubGVuZ3RoID4gMCkKLSAg
ICAgICAgICAgICAgICBhcnJheSA9IFtjb250ZW50IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmlu
ZzpAIiwiXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtjb250ZW50IHJhbmdlT2ZTdHJpbmc6QCIs
ICJdLmxlbmd0aCA9PSAwICYmIFtjb250ZW50IHJhbmdlT2ZTdHJpbmc6QCIgIl0ubGVuZ3RoID4g
MCkKLSAgICAgICAgICAgICAgICBhcnJheSA9IFtjb250ZW50IGNvbXBvbmVudHNTZXBhcmF0ZWRC
eVN0cmluZzpAIiAiXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcnJheSA9
IFtjb250ZW50IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiwgIl07Ci0gICAgICAgICAg
ICBbX2RvY3VtZW50QXR0cnMgc2V0T2JqZWN0OmFycmF5IGZvcktleTpOU0tleXdvcmRzRG9jdW1l
bnRBdHRyaWJ1dGVdOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09
IFtAIkF1dGhvciIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hd
KQotICAgICAgICBrZXkgPSBOU0F1dGhvckRvY3VtZW50QXR0cmlidXRlOwotICAgIGVsc2UgaWYg
KE5TT3JkZXJlZFNhbWUgPT0gW0AiTGFzdEF1dGhvciIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlND
YXNlSW5zZW5zaXRpdmVTZWFyY2hdKQotICAgICAgICBrZXkgPSBOU0VkaXRvckRvY3VtZW50QXR0
cmlidXRlOwotICAgIGVsc2UgaWYgKE5TT3JkZXJlZFNhbWUgPT0gW0AiQ29tcGFueSIgY29tcGFy
ZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdKQotICAgICAgICBrZXkgPSBO
U0NvbXBhbnlEb2N1bWVudEF0dHJpYnV0ZTsKLSAgICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09
IFtAIkNvcHlyaWdodCIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFy
Y2hdKQotICAgICAgICBrZXkgPSBOU0NvcHlyaWdodERvY3VtZW50QXR0cmlidXRlOwotICAgIGVs
c2UgaWYgKE5TT3JkZXJlZFNhbWUgPT0gW0AiU3ViamVjdCIgY29tcGFyZTpuYW1lIG9wdGlvbnM6
TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdKQotICAgICAgICBrZXkgPSBOU1N1YmplY3REb2N1bWVu
dEF0dHJpYnV0ZTsKLSAgICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIkRlc2NyaXB0aW9u
IiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gfHwgTlNPcmRl
cmVkU2FtZSA9PSBbQCJDb21tZW50IiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNp
dGl2ZVNlYXJjaF0pCi0gICAgICAgIGtleSA9IE5TQ29tbWVudERvY3VtZW50QXR0cmlidXRlOwot
ICAgIGVsc2UgaWYgKE5TT3JkZXJlZFNhbWUgPT0gW0AiQ3JlYXRpb25UaW1lIiBjb21wYXJlOm5h
bWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0pIHsKLSAgICAgICAgaWYgKGNvbnRl
bnQgJiYgW2NvbnRlbnQgbGVuZ3RoXSA+IDApIHsKLSAgICAgICAgICAgIE5TRGF0ZSAqZGF0ZSA9
IF9kYXRlRm9yU3RyaW5nKGNvbnRlbnQpOwotICAgICAgICAgICAgaWYgKGRhdGUpCi0gICAgICAg
ICAgICAgICAgW19kb2N1bWVudEF0dHJzIHNldE9iamVjdDpkYXRlIGZvcktleTpOU0NyZWF0aW9u
VGltZURvY3VtZW50QXR0cmlidXRlXTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoTlNPcmRl
cmVkU2FtZSA9PSBbQCJNb2RpZmljYXRpb25UaW1lIiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nh
c2VJbnNlbnNpdGl2ZVNlYXJjaF0pIHsKLSAgICAgICAgaWYgKGNvbnRlbnQgJiYgW2NvbnRlbnQg
bGVuZ3RoXSA+IDApIHsKLSAgICAgICAgICAgIE5TRGF0ZSAqZGF0ZSA9IF9kYXRlRm9yU3RyaW5n
KGNvbnRlbnQpOwotICAgICAgICAgICAgaWYgKGRhdGUpCi0gICAgICAgICAgICAgICAgW19kb2N1
bWVudEF0dHJzIHNldE9iamVjdDpkYXRlIGZvcktleTpOU01vZGlmaWNhdGlvblRpbWVEb2N1bWVu
dEF0dHJpYnV0ZV07Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVs
c2UgaWYgKE5TT3JkZXJlZFNhbWUgPT0gW0AiRGlzcGxheU5hbWUiIGNvbXBhcmU6bmFtZSBvcHRp
b25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSB8fCBOU09yZGVyZWRTYW1lID09IFtAIkluZGV4
VGl0bGUiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkKLSAg
ICAgICAga2V5ID0gTlNEaXNwbGF5TmFtZURvY3VtZW50QXR0cmlidXRlOwotICAgIGVsc2UgaWYg
KE5TT3JkZXJlZFNhbWUgPT0gW0Aicm9ib3RzIiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nhc2VJ
bnNlbnNpdGl2ZVNlYXJjaF0pIHsKLSAgICAgICAgaWYgKFtjb250ZW50IHJhbmdlT2ZTdHJpbmc6
QCJub2luZGV4IiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXS5sZW5ndGggPiAwKQot
ICAgICAgICAgICAgW19kb2N1bWVudEF0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0
aEludGVnZXI6MV0gZm9yS2V5Ok5TTm9JbmRleERvY3VtZW50QXR0cmlidXRlXTsKLSAgICB9Ci0j
ZW5kaWYKLSAgICBpZiAoa2V5ICYmIGNvbnRlbnQgJiYgW2NvbnRlbnQgbGVuZ3RoXSA+IDApCi0g
ICAgICAgIFtfZG9jdW1lbnRBdHRycyBzZXRPYmplY3Q6Y29udGVudCBmb3JLZXk6a2V5XTsKLX0K
LQotLSAodm9pZClfcHJvY2Vzc0hlYWRFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCB7Ci0g
ICAgLy8gPz8/IHNob3VsZCBnYXRoZXIgZGF0YSBmcm9tIG90aGVyIHNvdXJjZXMgZS5nLiBXb3Jk
LCBidXQgZm9yIHRoYXQgd2Ugd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGdldCBjb21tZW50cyBm
cm9tIERPTQotICAgIE5TQXJyYXkgKmNoaWxkTm9kZXMgPSBbc2VsZiBfY2hpbGRyZW5Gb3JOb2Rl
OmVsZW1lbnRdOwotICAgIE5TVUludGVnZXIgY291bnQgPSBbY2hpbGROb2RlcyBjb3VudF07Ci0g
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBET01O
b2RlICpub2RlID0gW2NoaWxkTm9kZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgbm9kZVR5cGUgPSBbbm9kZSBub2RlVHlwZV07Ci0gICAgICAgIGlmIChET01fRUxF
TUVOVF9OT0RFID09IG5vZGVUeXBlKSB7Ci0gICAgICAgICAgICBET01FbGVtZW50ICplbGVtZW50
ID0gKERPTUVsZW1lbnQgKilub2RlOwotICAgICAgICAgICAgTlNTdHJpbmcgKnRhZyA9IFtlbGVt
ZW50IHRhZ05hbWVdOwotICAgICAgICAgICAgaWYgKFtAIk1FVEEiIGlzRXF1YWxUb1N0cmluZzp0
YWddICYmIFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobmFtZSldICYmIFtl
bGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGVudCldKSB7Ci0gICAgICAg
ICAgICAgICAgTlNTdHJpbmcgKm5hbWUgPSBbKERPTUhUTUxNZXRhRWxlbWVudCAqKWVsZW1lbnQg
bmFtZV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKmNvbnRlbnQgPSBbKERPTUhUTUxNZXRh
RWxlbWVudCAqKWVsZW1lbnQgY29udGVudF07Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYg
Y29udGVudCkKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgX3Byb2Nlc3NNZXRhRWxlbWVudFdp
dGhOYW1lOm5hbWUgY29udGVudDpjb250ZW50XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotLSAoQk9PTClfZW50ZXJFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCB0
YWc6KE5TU3RyaW5nICopdGFnIGRpc3BsYXk6KE5TU3RyaW5nICopZGlzcGxheVZhbCBlbWJlZGRl
ZDooQk9PTCllbWJlZGRlZAorLSAoQk9PTClfZW50ZXJFbGVtZW50OihET01FbGVtZW50ICopZWxl
bWVudCB0YWc6KE5TU3RyaW5nICopdGFnIGRpc3BsYXk6KE5TU3RyaW5nICopZGlzcGxheVZhbAog
ewotICAgIGlmIChbQCJIRUFEIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSAmJiAhZW1iZWRkZWQpCi0g
ICAgICAgIFtzZWxmIF9wcm9jZXNzSGVhZEVsZW1lbnQ6ZWxlbWVudF07Ci0gICAgZWxzZSBpZiAo
IWRpc3BsYXlWYWwgfHwgIShbQCJub25lIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gfHwg
W0AidGFibGUtY29sdW1uIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gfHwgW0AidGFibGUt
Y29sdW1uLWdyb3VwIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0pKSB7CisgICAgaWYgKCFk
aXNwbGF5VmFsIHx8ICEoW0Aibm9uZSIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdIHx8IFtA
InRhYmxlLWNvbHVtbiIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdIHx8IFtAInRhYmxlLWNv
bHVtbi1ncm91cCIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdKSkgewogICAgICAgICBpZiAo
W3NlbGYgX2VsZW1lbnRJc0Jsb2NrTGV2ZWw6ZWxlbWVudF0gJiYgIVtAIkJSIiBpc0VxdWFsVG9T
dHJpbmc6dGFnXSAmJiAhKFtAInRhYmxlLWNlbGwiIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFs
XSAmJiBbX3RleHRUYWJsZXMgY291bnRdID09IDApIAogICAgICAgICAgICAgJiYgIShbX3RleHRM
aXN0cyBjb3VudF0gPiAwICYmIFtAImJsb2NrIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0g
JiYgIVtAIkxJIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSAmJiAhW0AiVUwiIGlzRXF1YWxUb1N0cmlu
Zzp0YWddICYmICFbQCJPTCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pKQogICAgICAgICAgICAgW3Nl
bGYgX25ld1BhcmFncmFwaEZvckVsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGFsbG93RW1wdHk6Tk8g
c3VwcHJlc3NUcmFpbGluZ1NwYWNlOllFU107CkBAIC0xNjU4LDE3ICs5NzIsMTQgQEAgc3RhdGlj
IE5TSW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlkIGJsb2NrMiwgdm9pZCAqKQogCiAt
ICh2b2lkKV9hZGRUYWJsZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKil0YWJsZUVsZW1lbnQKIHsK
LSAgICBSZXRhaW5QdHI8TlNUZXh0VGFibGU+IHRhYmxlID0gYWRvcHROUyhbW1BsYXRmb3JtTlNU
ZXh0VGFibGUgYWxsb2NdIGluaXRdKTsKLSAgICBDR0Zsb2F0IGNlbGxTcGFjaW5nVmFsID0gMTsK
LSAgICBDR0Zsb2F0IGNlbGxQYWRkaW5nVmFsID0gMTsKKyAgICBOU1RleHRUYWJsZSAqdGFibGUg
PSBbW05TVGV4dFRhYmxlIGFsbG9jXSBpbml0XTsKKyAgICBDR0Zsb2F0IGNlbGxTcGFjaW5nVmFs
ID0gMSwgY2VsbFBhZGRpbmdWYWwgPSAxOwogICAgIFt0YWJsZSBzZXROdW1iZXJPZkNvbHVtbnM6
MV07CiAgICAgW3RhYmxlIHNldExheW91dEFsZ29yaXRobTpOU1RleHRUYWJsZUF1dG9tYXRpY0xh
eW91dEFsZ29yaXRobV07CiAgICAgW3RhYmxlIHNldENvbGxhcHNlc0JvcmRlcnM6Tk9dOwogICAg
IFt0YWJsZSBzZXRIaWRlc0VtcHR5Q2VsbHM6Tk9dOwogICAgIGlmICh0YWJsZUVsZW1lbnQpIHsK
LSAgICAgICAgTlNTdHJpbmcgKmJvcmRlckNvbGxhcHNlID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6
dGFibGVFbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWNvbGxhcHNlIl07Ci0gICAgICAgIE5TU3Ry
aW5nICplbXB0eUNlbGxzID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6dGFibGVFbGVtZW50IHByb3Bl
cnR5OkAiZW1wdHktY2VsbHMiXTsKLSAgICAgICAgTlNTdHJpbmcgKnRhYmxlTGF5b3V0ID0gW3Nl
bGYgX3N0cmluZ0Zvck5vZGU6dGFibGVFbGVtZW50IHByb3BlcnR5OkAidGFibGUtbGF5b3V0Il07
CisgICAgICAgIE5TU3RyaW5nICpib3JkZXJDb2xsYXBzZSA9IFtzZWxmIF9zdHJpbmdGb3JOb2Rl
OnRhYmxlRWxlbWVudCBwcm9wZXJ0eTpAImJvcmRlci1jb2xsYXBzZSJdLCAqZW1wdHlDZWxscyA9
IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRhYmxlRWxlbWVudCBwcm9wZXJ0eTpAImVtcHR5LWNlbGxz
Il0sICp0YWJsZUxheW91dCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRhYmxlRWxlbWVudCBwcm9w
ZXJ0eTpAInRhYmxlLWxheW91dCJdOwogICAgICAgICBpZiAoW3RhYmxlRWxlbWVudCByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNlbGxTcGFjaW5nKV0pIHsKICAgICAgICAgICAgIE5TU3Ry
aW5nICpjZWxsU3BhY2luZyA9IFsoRE9NSFRNTFRhYmxlRWxlbWVudCAqKXRhYmxlRWxlbWVudCBj
ZWxsU3BhY2luZ107CiAgICAgICAgICAgICBpZiAoY2VsbFNwYWNpbmcgJiYgW2NlbGxTcGFjaW5n
IGxlbmd0aF0gPiAwICYmICFbY2VsbFNwYWNpbmcgaGFzU3VmZml4OkAiJSJdKSBjZWxsU3BhY2lu
Z1ZhbCA9IFtjZWxsU3BhY2luZyBmbG9hdFZhbHVlXTsKQEAgLTE2NzcsNyArOTg4LDcgQEAgc3Rh
dGljIE5TSW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlkIGJsb2NrMiwgdm9pZCAqKQog
ICAgICAgICAgICAgTlNTdHJpbmcgKmNlbGxQYWRkaW5nID0gWyhET01IVE1MVGFibGVFbGVtZW50
ICopdGFibGVFbGVtZW50IGNlbGxQYWRkaW5nXTsKICAgICAgICAgICAgIGlmIChjZWxsUGFkZGlu
ZyAmJiBbY2VsbFBhZGRpbmcgbGVuZ3RoXSA+IDAgJiYgIVtjZWxsUGFkZGluZyBoYXNTdWZmaXg6
QCIlIl0pIGNlbGxQYWRkaW5nVmFsID0gW2NlbGxQYWRkaW5nIGZsb2F0VmFsdWVdOwogICAgICAg
ICB9Ci0gICAgICAgIFtzZWxmIF9maWxsSW5CbG9jazp0YWJsZS5nZXQoKSBmb3JFbGVtZW50OnRh
YmxlRWxlbWVudCBiYWNrZ3JvdW5kQ29sb3I6bmlsIGV4dHJhTWFyZ2luOjAgZXh0cmFQYWRkaW5n
OjAgaXNUYWJsZTpZRVNdOworICAgICAgICBbc2VsZiBfZmlsbEluQmxvY2s6dGFibGUgZm9yRWxl
bWVudDp0YWJsZUVsZW1lbnQgYmFja2dyb3VuZENvbG9yOm5pbCBleHRyYU1hcmdpbjowIGV4dHJh
UGFkZGluZzowIGlzVGFibGU6WUVTXTsKICAgICAgICAgaWYgKFtAImNvbGxhcHNlIiBpc0VxdWFs
VG9TdHJpbmc6Ym9yZGVyQ29sbGFwc2VdKSB7CiAgICAgICAgICAgICBbdGFibGUgc2V0Q29sbGFw
c2VzQm9yZGVyczpZRVNdOwogICAgICAgICAgICAgY2VsbFNwYWNpbmdWYWwgPSAwOwpAQCAtMTY4
NSw4MCArOTk2LDY5IEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBp
ZCBibG9jazIsIHZvaWQgKikKICAgICAgICAgaWYgKFtAImhpZGUiIGlzRXF1YWxUb1N0cmluZzpl
bXB0eUNlbGxzXSkgW3RhYmxlIHNldEhpZGVzRW1wdHlDZWxsczpZRVNdOwogICAgICAgICBpZiAo
W0AiZml4ZWQiIGlzRXF1YWxUb1N0cmluZzp0YWJsZUxheW91dF0pIFt0YWJsZSBzZXRMYXlvdXRB
bGdvcml0aG06TlNUZXh0VGFibGVGaXhlZExheW91dEFsZ29yaXRobV07CiAgICAgfQotICAgIFtf
dGV4dFRhYmxlcyBhZGRPYmplY3Q6dGFibGUuZ2V0KCldOworICAgIFtfdGV4dFRhYmxlcyBhZGRP
YmplY3Q6dGFibGVdOwogICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgYWRkT2JqZWN0OltOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOmNlbGxTcGFjaW5nVmFsXV07CiAgICAgW190ZXh0VGFibGVQYWRk
aW5ncyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Y2VsbFBhZGRpbmdWYWxd
XTsKICAgICBbX3RleHRUYWJsZVJvd3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50
ZWdlcjowXV07CiAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgYWRkT2JqZWN0OltOU011dGFibGVB
cnJheSBhcnJheV1dOworICAgIFt0YWJsZSByZWxlYXNlXTsKIH0KIAogLSAodm9pZClfYWRkVGFi
bGVDZWxsRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKXRhYmxlQ2VsbEVsZW1lbnQKIHsKICAgICBO
U1RleHRUYWJsZSAqdGFibGUgPSBbX3RleHRUYWJsZXMgbGFzdE9iamVjdF07Ci0gICAgTlNJbnRl
Z2VyIHJvd051bWJlciA9IFtbX3RleHRUYWJsZVJvd3MgbGFzdE9iamVjdF0gaW50ZWdlclZhbHVl
XTsKLSAgICBOU0ludGVnZXIgY29sdW1uTnVtYmVyID0gMDsKLSAgICBOU0ludGVnZXIgcm93U3Bh
biA9IDE7Ci0gICAgTlNJbnRlZ2VyIGNvbFNwYW4gPSAxOworICAgIE5TSW50ZWdlciByb3dOdW1i
ZXIgPSBbW190ZXh0VGFibGVSb3dzIGxhc3RPYmplY3RdIGludGVnZXJWYWx1ZV0sIGNvbHVtbk51
bWJlciA9IDAsIHJvd1NwYW4gPSAxLCBjb2xTcGFuID0gMTsKICAgICBOU011dGFibGVBcnJheSAq
cm93QXJyYXkgPSBbX3RleHRUYWJsZVJvd0FycmF5cyBsYXN0T2JqZWN0XTsKLSAgICBOU1VJbnRl
Z2VyIGNvdW50ID0gW3Jvd0FycmF5IGNvdW50XTsKLSAgICBQbGF0Zm9ybUNvbG9yICpjb2xvciA9
IChbX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgY291bnRdID4gMCkgPyBbX3RleHRUYWJs
ZVJvd0JhY2tncm91bmRDb2xvcnMgbGFzdE9iamVjdF0gOiBuaWw7Ci0gICAgTlNUZXh0VGFibGVC
bG9jayAqcHJldmlvdXNCbG9jazsKKyAgICBOU1VJbnRlZ2VyIGksIGNvdW50ID0gW3Jvd0FycmF5
IGNvdW50XTsKKyAgICBOU0NvbG9yICpjb2xvciA9IChbX3RleHRUYWJsZVJvd0JhY2tncm91bmRD
b2xvcnMgY291bnRdID4gMCkgPyBbX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgbGFzdE9i
amVjdF0gOiBuaWw7CisgICAgTlNUZXh0VGFibGVCbG9jayAqYmxvY2ssICpwcmV2aW91c0Jsb2Nr
OwogICAgIENHRmxvYXQgY2VsbFNwYWNpbmdWYWwgPSBbW190ZXh0VGFibGVTcGFjaW5ncyBsYXN0
T2JqZWN0XSBmbG9hdFZhbHVlXTsKLSAgICBpZiAoW2NvbG9yIGlzRXF1YWw6W1BsYXRmb3JtQ29s
b3JDbGFzcyBjbGVhckNvbG9yXV0pIGNvbG9yID0gbmlsOwotICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICBpZiAoW2NvbG9yIGlzRXF1YWw6W05TQ29sb3Ig
Y2xlYXJDb2xvcl1dKSBjb2xvciA9IG5pbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgewogICAgICAgICBwcmV2aW91c0Jsb2NrID0gW3Jvd0FycmF5IG9iamVjdEF0SW5kZXg6aV07
Ci0gICAgICAgIGlmIChjb2x1bW5OdW1iZXIgPj0gW3ByZXZpb3VzQmxvY2sgc3RhcnRpbmdDb2x1
bW5dICYmIGNvbHVtbk51bWJlciA8IFtwcmV2aW91c0Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSArIFtw
cmV2aW91c0Jsb2NrIGNvbHVtblNwYW5dKQotICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gW3By
ZXZpb3VzQmxvY2sgc3RhcnRpbmdDb2x1bW5dICsgW3ByZXZpb3VzQmxvY2sgY29sdW1uU3Bhbl07
CisgICAgICAgIGlmIChjb2x1bW5OdW1iZXIgPj0gW3ByZXZpb3VzQmxvY2sgc3RhcnRpbmdDb2x1
bW5dICYmIGNvbHVtbk51bWJlciA8IFtwcmV2aW91c0Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSArIFtw
cmV2aW91c0Jsb2NrIGNvbHVtblNwYW5dKSBjb2x1bW5OdW1iZXIgPSBbcHJldmlvdXNCbG9jayBz
dGFydGluZ0NvbHVtbl0gKyBbcHJldmlvdXNCbG9jayBjb2x1bW5TcGFuXTsKICAgICB9CiAgICAg
aWYgKHRhYmxlQ2VsbEVsZW1lbnQpIHsKICAgICAgICAgaWYgKFt0YWJsZUNlbGxFbGVtZW50IHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iocm93U3BhbildKSB7CiAgICAgICAgICAgICByb3dT
cGFuID0gWyhET01IVE1MVGFibGVDZWxsRWxlbWVudCAqKXRhYmxlQ2VsbEVsZW1lbnQgcm93U3Bh
bl07Ci0gICAgICAgICAgICBpZiAocm93U3BhbiA8IDEpCi0gICAgICAgICAgICAgICAgcm93U3Bh
biA9IDE7CisgICAgICAgICAgICBpZiAocm93U3BhbiA8IDEpIHJvd1NwYW4gPSAxOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChbdGFibGVDZWxsRWxlbWVudCByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGNvbFNwYW4pXSkgewogICAgICAgICAgICAgY29sU3BhbiA9IFsoRE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQgKil0YWJsZUNlbGxFbGVtZW50IGNvbFNwYW5dOwotICAgICAgICAgICAgaWYg
KGNvbFNwYW4gPCAxKQotICAgICAgICAgICAgICAgIGNvbFNwYW4gPSAxOworICAgICAgICAgICAg
aWYgKGNvbFNwYW4gPCAxKSBjb2xTcGFuID0gMTsKICAgICAgICAgfQogICAgIH0KLSAgICBSZXRh
aW5QdHI8TlNUZXh0VGFibGVCbG9jaz4gYmxvY2sgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRU
YWJsZUJsb2NrIGFsbG9jXSBpbml0V2l0aFRhYmxlOnRhYmxlIHN0YXJ0aW5nUm93OnJvd051bWJl
ciByb3dTcGFuOnJvd1NwYW4gc3RhcnRpbmdDb2x1bW46Y29sdW1uTnVtYmVyIGNvbHVtblNwYW46
Y29sU3Bhbl0pOworICAgIGJsb2NrID0gW1tOU1RleHRUYWJsZUJsb2NrIGFsbG9jXSBpbml0V2l0
aFRhYmxlOnRhYmxlIHN0YXJ0aW5nUm93OnJvd051bWJlciByb3dTcGFuOnJvd1NwYW4gc3RhcnRp
bmdDb2x1bW46Y29sdW1uTnVtYmVyIGNvbHVtblNwYW46Y29sU3Bhbl07CiAgICAgaWYgKHRhYmxl
Q2VsbEVsZW1lbnQpIHsKICAgICAgICAgTlNTdHJpbmcgKnZlcnRpY2FsQWxpZ24gPSBbc2VsZiBf
c3RyaW5nRm9yTm9kZTp0YWJsZUNlbGxFbGVtZW50IHByb3BlcnR5OkAidmVydGljYWwtYWxpZ24i
XTsKLSAgICAgICAgW3NlbGYgX2ZpbGxJbkJsb2NrOmJsb2NrLmdldCgpIGZvckVsZW1lbnQ6dGFi
bGVDZWxsRWxlbWVudCBiYWNrZ3JvdW5kQ29sb3I6Y29sb3IgZXh0cmFNYXJnaW46Y2VsbFNwYWNp
bmdWYWwgLyAyIGV4dHJhUGFkZGluZzowIGlzVGFibGU6Tk9dOwotICAgICAgICBpZiAoW0AibWlk
ZGxlIiBpc0VxdWFsVG9TdHJpbmc6dmVydGljYWxBbGlnbl0pCi0gICAgICAgICAgICBbYmxvY2sg
c2V0VmVydGljYWxBbGlnbm1lbnQ6TlNUZXh0QmxvY2tNaWRkbGVBbGlnbm1lbnRdOwotICAgICAg
ICBlbHNlIGlmIChbQCJib3R0b20iIGlzRXF1YWxUb1N0cmluZzp2ZXJ0aWNhbEFsaWduXSkKLSAg
ICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1RleHRCbG9ja0JvdHRvbUFs
aWdubWVudF07Ci0gICAgICAgIGVsc2UgaWYgKFtAImJhc2VsaW5lIiBpc0VxdWFsVG9TdHJpbmc6
dmVydGljYWxBbGlnbl0pCi0gICAgICAgICAgICBbYmxvY2sgc2V0VmVydGljYWxBbGlnbm1lbnQ6
TlNUZXh0QmxvY2tCYXNlbGluZUFsaWdubWVudF07Ci0gICAgICAgIGVsc2UgaWYgKFtAInRvcCIg
aXNFcXVhbFRvU3RyaW5nOnZlcnRpY2FsQWxpZ25dKQotICAgICAgICAgICAgW2Jsb2NrIHNldFZl
cnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJsb2NrVG9wQWxpZ25tZW50XTsKLSAgICB9Ci0gICAgW190
ZXh0QmxvY2tzIGFkZE9iamVjdDpibG9jay5nZXQoKV07Ci0gICAgW3Jvd0FycmF5IGFkZE9iamVj
dDpibG9jay5nZXQoKV07CisgICAgICAgIFtzZWxmIF9maWxsSW5CbG9jazpibG9jayBmb3JFbGVt
ZW50OnRhYmxlQ2VsbEVsZW1lbnQgYmFja2dyb3VuZENvbG9yOmNvbG9yIGV4dHJhTWFyZ2luOmNl
bGxTcGFjaW5nVmFsIC8gMiBleHRyYVBhZGRpbmc6MCBpc1RhYmxlOk5PXTsKKyAgICAgICAgaWYg
KFtAIm1pZGRsZSIgaXNFcXVhbFRvU3RyaW5nOnZlcnRpY2FsQWxpZ25dKSBbYmxvY2sgc2V0VmVy
dGljYWxBbGlnbm1lbnQ6TlNUZXh0QmxvY2tNaWRkbGVBbGlnbm1lbnRdOworICAgICAgICBlbHNl
IGlmIChbQCJib3R0b20iIGlzRXF1YWxUb1N0cmluZzp2ZXJ0aWNhbEFsaWduXSkgW2Jsb2NrIHNl
dFZlcnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJsb2NrQm90dG9tQWxpZ25tZW50XTsKKyAgICAgICAg
ZWxzZSBpZiAoW0AiYmFzZWxpbmUiIGlzRXF1YWxUb1N0cmluZzp2ZXJ0aWNhbEFsaWduXSkgW2Js
b2NrIHNldFZlcnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJsb2NrQmFzZWxpbmVBbGlnbm1lbnRdOwor
ICAgICAgICBlbHNlIGlmIChbQCJ0b3AiIGlzRXF1YWxUb1N0cmluZzp2ZXJ0aWNhbEFsaWduXSkg
W2Jsb2NrIHNldFZlcnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJsb2NrVG9wQWxpZ25tZW50XTsKKyAg
ICB9CisgICAgW190ZXh0QmxvY2tzIGFkZE9iamVjdDpibG9ja107CisgICAgW3Jvd0FycmF5IGFk
ZE9iamVjdDpibG9ja107CiAgICAgW3Jvd0FycmF5IHNvcnRVc2luZ0Z1bmN0aW9uOl9jb2xDb21w
YXJlIGNvbnRleHQ6TlVMTF07CisgICAgW2Jsb2NrIHJlbGVhc2VdOwogfQogCiAtIChCT09MKV9w
cm9jZXNzRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgdGFnOihOU1N0cmluZyAqKXRhZyBk
aXNwbGF5OihOU1N0cmluZyAqKWRpc3BsYXlWYWwgZGVwdGg6KE5TSW50ZWdlcilkZXB0aAogewot
ICAgIEJPT0wgcmV0dmFsID0gWUVTOwotICAgIEJPT0wgaXNCbG9ja0xldmVsID0gW3NlbGYgX2Vs
ZW1lbnRJc0Jsb2NrTGV2ZWw6ZWxlbWVudF07Ci0gICAgaWYgKGlzQmxvY2tMZXZlbCkKKyAgICBC
T09MIHJldHZhbCA9IFlFUywgaXNCbG9ja0xldmVsID0gW3NlbGYgX2VsZW1lbnRJc0Jsb2NrTGV2
ZWw6ZWxlbWVudF07CisgICAgaWYgKGlzQmxvY2tMZXZlbCkgewogICAgICAgICBbX3dyaXRpbmdE
aXJlY3Rpb25BcnJheSByZW1vdmVBbGxPYmplY3RzXTsKLSAgICBlbHNlIHsKKyAgICB9IGVsc2Ug
ewogICAgICAgICBOU1N0cmluZyAqYmlkaSA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQg
cHJvcGVydHk6QCJ1bmljb2RlLWJpZGkiXTsKICAgICAgICAgaWYgKGJpZGkgJiYgW2JpZGkgaXNF
cXVhbFRvU3RyaW5nOkAiZW1iZWQiXSkgewogICAgICAgICAgICAgTlNVSW50ZWdlciB2YWwgPSBO
U1RleHRXcml0aW5nRGlyZWN0aW9uRW1iZWRkaW5nOwogICAgICAgICAgICAgTlNTdHJpbmcgKmRp
cmVjdGlvbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXJlY3Rp
b24iXTsKLSAgICAgICAgICAgIGlmIChbZGlyZWN0aW9uIGlzRXF1YWxUb1N0cmluZzpAInJ0bCJd
KQotICAgICAgICAgICAgICAgIHZhbCB8PSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsK
KyAgICAgICAgICAgIGlmIChbZGlyZWN0aW9uIGlzRXF1YWxUb1N0cmluZzpAInJ0bCJdKSB2YWwg
fD0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICBbX3dyaXRpbmdE
aXJlY3Rpb25BcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVn
ZXI6dmFsXV07CiAgICAgICAgIH0gZWxzZSBpZiAoYmlkaSAmJiBbYmlkaSBpc0VxdWFsVG9TdHJp
bmc6QCJiaWRpLW92ZXJyaWRlIl0pIHsKICAgICAgICAgICAgIE5TVUludGVnZXIgdmFsID0gTlNU
ZXh0V3JpdGluZ0RpcmVjdGlvbk92ZXJyaWRlOwogICAgICAgICAgICAgTlNTdHJpbmcgKmRpcmVj
dGlvbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXJlY3Rpb24i
XTsKLSAgICAgICAgICAgIGlmIChbZGlyZWN0aW9uIGlzRXF1YWxUb1N0cmluZzpAInJ0bCJdKQot
ICAgICAgICAgICAgICAgIHZhbCB8PSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAg
ICAgICAgICAgIGlmIChbZGlyZWN0aW9uIGlzRXF1YWxUb1N0cmluZzpAInJ0bCJdKSB2YWwgfD0g
TlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICBbX3dyaXRpbmdEaXJl
Y3Rpb25BcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6
dmFsXV07CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzY3LDE4ICsxMDY3LDE4IEBAIHN0YXRpYyBO
U0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBibG9jazIsIHZvaWQgKikKICAgICAg
ICAgaWYgKFtAInRhYmxlLXJvdy1ncm91cCIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdKSB7
CiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgc3RhcnRpbmcgaW4gbWVkaWFzIHJlcywgdGhlIGZp
cnN0IHRoaW5nIHdlIHNlZSBtYXkgYmUgdGhlIHRib2R5LCBzbyBnbyB1cCB0byB0aGUgdGFibGUK
ICAgICAgICAgICAgIHRhYmxlRWxlbWVudCA9IFtzZWxmIF9ibG9ja0xldmVsRWxlbWVudEZvck5v
ZGU6W2VsZW1lbnQgcGFyZW50Tm9kZV1dOwotICAgICAgICAgICAgaWYgKCFbQCJ0YWJsZSIgaXNF
cXVhbFRvU3RyaW5nOltzZWxmIF9zdHJpbmdGb3JOb2RlOnRhYmxlRWxlbWVudCBwcm9wZXJ0eTpA
ImRpc3BsYXkiXV0pCi0gICAgICAgICAgICAgICAgdGFibGVFbGVtZW50ID0gZWxlbWVudDsKKyAg
ICAgICAgICAgIGlmICghW0AidGFibGUiIGlzRXF1YWxUb1N0cmluZzpbc2VsZiBfc3RyaW5nRm9y
Tm9kZTp0YWJsZUVsZW1lbnQgcHJvcGVydHk6QCJkaXNwbGF5Il1dKSB0YWJsZUVsZW1lbnQgPSBl
bGVtZW50OwogICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdID4g
W190ZXh0QmxvY2tzIGNvdW50XSkKKyAgICAgICAgd2hpbGUgKFtfdGV4dFRhYmxlcyBjb3VudF0g
PiBbX3RleHRCbG9ja3MgY291bnRdKSB7CiAgICAgICAgICAgICBbc2VsZiBfYWRkVGFibGVDZWxs
Rm9yRWxlbWVudDpuaWxdOworICAgICAgICB9CiAgICAgICAgIFtzZWxmIF9hZGRUYWJsZUZvckVs
ZW1lbnQ6dGFibGVFbGVtZW50XTsKICAgICB9IGVsc2UgaWYgKFtAInRhYmxlLWZvb3Rlci1ncm91
cCIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAw
KSB7CiAgICAgICAgIFtfdGV4dFRhYmxlRm9vdGVycyBzZXRPYmplY3Q6ZWxlbWVudCBmb3JLZXk6
W05TVmFsdWUgdmFsdWVXaXRoTm9ucmV0YWluZWRPYmplY3Q6W190ZXh0VGFibGVzIGxhc3RPYmpl
Y3RdXV07CiAgICAgICAgIHJldHZhbCA9IE5POwogICAgIH0gZWxzZSBpZiAoW0AidGFibGUtcm93
IiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gJiYgW190ZXh0VGFibGVzIGNvdW50XSA+IDAp
IHsKLSAgICAgICAgUGxhdGZvcm1Db2xvciAqY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVs
ZW1lbnQgcHJvcGVydHk6QCJiYWNrZ3JvdW5kLWNvbG9yIl07Ci0gICAgICAgIGlmICghY29sb3Ip
IGNvbG9yID0gW1BsYXRmb3JtQ29sb3JDbGFzcyBjbGVhckNvbG9yXTsKKyAgICAgICAgTlNDb2xv
ciAqY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJiYWNrZ3Jv
dW5kLWNvbG9yIl07CisgICAgICAgIGlmICghY29sb3IpIGNvbG9yID0gW05TQ29sb3IgY2xlYXJD
b2xvcl07CiAgICAgICAgIFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBhZGRPYmplY3Q6
Y29sb3JdOwogICAgIH0gZWxzZSBpZiAoW0AidGFibGUtY2VsbCIgaXNFcXVhbFRvU3RyaW5nOmRp
c3BsYXlWYWxdKSB7CiAgICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdIDwgW190ZXh0
QmxvY2tzIGNvdW50XSArIDEpIHsKQEAgLTE3OTAsNDEgKzEwOTAsMjYgQEAgc3RhdGljIE5TSW50
ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlkIGJsb2NrMiwgdm9pZCAqKQogICAgICAgICBp
ZiAodXJsU3RyaW5nICYmIFt1cmxTdHJpbmcgbGVuZ3RoXSA+IDApIHsKICAgICAgICAgICAgIE5T
VVJMICp1cmwgPSBjb3JlKFtlbGVtZW50IG93bmVyRG9jdW1lbnRdKS0+Y29tcGxldGVVUkwoc3Ry
aXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykpOwogICAgICAgICAgICAg
aWYgKCF1cmwpIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6W3VybFN0cmluZyBzdHJp
bmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5k
TmV3bGluZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9VUkw6X2Jhc2VVUkxdOwotI2lmIFBMQVRG
T1JNKElPUykKLSAgICAgICAgICAgIEJPT0wgdXNlUGxhY2Vob2xkZXJJbWFnZSA9IE5POwotI2Vs
c2UKLSAgICAgICAgICAgIEJPT0wgdXNlUGxhY2Vob2xkZXJJbWFnZSA9IFlFUzsKLSNlbmRpZgot
ICAgICAgICAgICAgaWYgKHVybCkKLSAgICAgICAgICAgICAgICBbc2VsZiBfYWRkQXR0YWNobWVu
dEZvckVsZW1lbnQ6ZWxlbWVudCBVUkw6dXJsIG5lZWRzUGFyYWdyYXBoOmlzQmxvY2tMZXZlbCB1
c2VQbGFjZWhvbGRlcjp1c2VQbGFjZWhvbGRlckltYWdlXTsKKyAgICAgICAgICAgIGlmICh1cmwp
IFtzZWxmIF9hZGRBdHRhY2htZW50Rm9yRWxlbWVudDplbGVtZW50IFVSTDp1cmwgbmVlZHNQYXJh
Z3JhcGg6aXNCbG9ja0xldmVsIHVzZVBsYWNlaG9sZGVyOllFU107CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dmFsID0gTk87CiAgICAgfSBlbHNlIGlmIChbQCJPQkpFQ1QiIGlzRXF1YWxUb1N0cmlu
Zzp0YWddKSB7Ci0gICAgICAgIE5TU3RyaW5nICpiYXNlU3RyaW5nID0gW2VsZW1lbnQgZ2V0QXR0
cmlidXRlOkAiY29kZWJhc2UiXTsKLSAgICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtlbGVt
ZW50IGdldEF0dHJpYnV0ZTpAImRhdGEiXTsKLSAgICAgICAgTlNTdHJpbmcgKmRlY2xhcmVTdHJp
bmcgPSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJkZWNsYXJlIl07CisgICAgICAgIE5TU3RyaW5n
ICpiYXNlU3RyaW5nID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAiY29kZWJhc2UiXSwgKnVybFN0
cmluZyA9IFtlbGVtZW50IGdldEF0dHJpYnV0ZTpAImRhdGEiXSwgKmRlY2xhcmVTdHJpbmcgPSBb
ZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJkZWNsYXJlIl07CiAgICAgICAgIGlmICh1cmxTdHJpbmcg
JiYgW3VybFN0cmluZyBsZW5ndGhdID4gMCAmJiAhW0AidHJ1ZSIgaXNFcXVhbFRvU3RyaW5nOmRl
Y2xhcmVTdHJpbmddKSB7Ci0gICAgICAgICAgICBOU1VSTCAqYmFzZVVSTCA9IG5pbDsKLSAgICAg
ICAgICAgIE5TVVJMICp1cmwgPSBuaWw7CisgICAgICAgICAgICBOU1VSTCAqYmFzZVVSTCA9IG5p
bCwgKnVybCA9IG5pbDsKICAgICAgICAgICAgIGlmIChiYXNlU3RyaW5nICYmIFtiYXNlU3RyaW5n
IGxlbmd0aF0gPiAwKSB7CiAgICAgICAgICAgICAgICAgYmFzZVVSTCA9IGNvcmUoW2VsZW1lbnQg
b3duZXJEb2N1bWVudF0pLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxT
cGFjZXMoYmFzZVN0cmluZykpOwotICAgICAgICAgICAgICAgIGlmICghYmFzZVVSTCkKLSAgICAg
ICAgICAgICAgICAgICAgYmFzZVVSTCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6W2Jhc2VT
dHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hp
dGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXSByZWxhdGl2ZVRvVVJMOl9iYXNlVVJMXTsK
KyAgICAgICAgICAgICAgICBpZiAoIWJhc2VVUkwpIGJhc2VVUkwgPSBbTlNVUkwgX3dlYl9VUkxX
aXRoU3RyaW5nOltiYXNlU3RyaW5nIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05T
Q2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVsYXRpdmVU
b1VSTDpfYmFzZVVSTF07CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmFzZVVSTCkK
LSAgICAgICAgICAgICAgICB1cmwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOlt1cmxTdHJp
bmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVz
cGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXSByZWxhdGl2ZVRvVVJMOmJhc2VVUkxdOwotICAg
ICAgICAgICAgaWYgKCF1cmwpCi0gICAgICAgICAgICAgICAgdXJsID1jb3JlKFtlbGVtZW50IG93
bmVyRG9jdW1lbnRdKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3Bh
Y2VzKHVybFN0cmluZykpOwotICAgICAgICAgICAgaWYgKCF1cmwpCi0gICAgICAgICAgICAgICAg
dXJsID0gW05TVVJMIF93ZWJfVVJMV2l0aFN0cmluZzpbdXJsU3RyaW5nIHN0cmluZ0J5VHJpbW1p
bmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hh
cmFjdGVyU2V0XV0gcmVsYXRpdmVUb1VSTDpfYmFzZVVSTF07Ci0gICAgICAgICAgICBpZiAodXJs
KQotICAgICAgICAgICAgICAgIHJldHZhbCA9ICFbc2VsZiBfYWRkQXR0YWNobWVudEZvckVsZW1l
bnQ6ZWxlbWVudCBVUkw6dXJsIG5lZWRzUGFyYWdyYXBoOmlzQmxvY2tMZXZlbCB1c2VQbGFjZWhv
bGRlcjpOT107CisgICAgICAgICAgICBpZiAoYmFzZVVSTCkgdXJsID0gW05TVVJMIF93ZWJfVVJM
V2l0aFN0cmluZzpbdXJsU3RyaW5nIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05T
Q2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVsYXRpdmVU
b1VSTDpiYXNlVVJMXTsKKyAgICAgICAgICAgIGlmICghdXJsKSB1cmwgPWNvcmUoW2VsZW1lbnQg
b3duZXJEb2N1bWVudF0pLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxT
cGFjZXModXJsU3RyaW5nKSk7CisgICAgICAgICAgICBpZiAoIXVybCkgdXJsID0gW05TVVJMIF93
ZWJfVVJMV2l0aFN0cmluZzpbdXJsU3RyaW5nIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5T
ZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVs
YXRpdmVUb1VSTDpfYmFzZVVSTF07CisgICAgICAgICAgICBpZiAodXJsKSByZXR2YWwgPSAhW3Nl
bGYgX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50OmVsZW1lbnQgVVJMOnVybCBuZWVkc1BhcmFncmFw
aDppc0Jsb2NrTGV2ZWwgdXNlUGxhY2Vob2xkZXI6Tk9dOwogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmIChbQCJGUkFNRSIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKICAgICAgICAgaWYgKFtlbGVt
ZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGVudERvY3VtZW50KV0pIHsKICAg
ICAgICAgICAgIERPTURvY3VtZW50ICpjb250ZW50RG9jdW1lbnQgPSBbKERPTUhUTUxGcmFtZUVs
ZW1lbnQgKillbGVtZW50IGNvbnRlbnREb2N1bWVudF07Ci0gICAgICAgICAgICBpZiAoY29udGVu
dERvY3VtZW50KQotICAgICAgICAgICAgICAgIFtzZWxmIF90cmF2ZXJzZU5vZGU6Y29udGVudERv
Y3VtZW50IGRlcHRoOmRlcHRoICsgMSBlbWJlZGRlZDpZRVNdOworICAgICAgICAgICAgaWYgKGNv
bnRlbnREb2N1bWVudCkgW3NlbGYgX3RyYXZlcnNlTm9kZTpjb250ZW50RG9jdW1lbnQgZGVwdGg6
ZGVwdGggKyAxIGVtYmVkZGVkOllFU107CiAgICAgICAgIH0KICAgICAgICAgcmV0dmFsID0gTk87
CiAgICAgfSBlbHNlIGlmIChbQCJJRlJBTUUiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7CkBAIC0x
ODM5LDMxICsxMTI0LDMzIEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sx
LCBpZCBibG9jazIsIHZvaWQgKikKICAgICAgICAgRE9NRWxlbWVudCAqYmxvY2tFbGVtZW50ID0g
W3NlbGYgX2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZTpbZWxlbWVudCBwYXJlbnROb2RlXV07CiAg
ICAgICAgIE5TU3RyaW5nICpicmVha0NsYXNzID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAiY2xh
c3MiXSwgKmJsb2NrVGFnID0gW2Jsb2NrRWxlbWVudCB0YWdOYW1lXTsKICAgICAgICAgQk9PTCBp
c0V4dHJhQnJlYWsgPSBbQCJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIiBpc0VxdWFsVG9TdHJp
bmc6YnJlYWtDbGFzc10sIGJsb2NrRWxlbWVudElzUGFyYWdyYXBoID0gKFtAIlAiIGlzRXF1YWxU
b1N0cmluZzpibG9ja1RhZ10gfHwgW0AiTEkiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwg
KFtibG9ja1RhZyBoYXNQcmVmaXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkpOwot
ICAgICAgICBpZiAoaXNFeHRyYUJyZWFrKQorICAgICAgICBpZiAoaXNFeHRyYUJyZWFrKSB7CiAg
ICAgICAgICAgICBfZmxhZ3MuaGFzVHJhaWxpbmdOZXdsaW5lID0gWUVTOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQgJiYgYmxvY2tFbGVtZW50SXNQYXJhZ3Jh
cGgpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYmxvY2tFbGVtZW50ICYmIGJs
b2NrRWxlbWVudElzUGFyYWdyYXBoKSB7CiAgICAgICAgICAgICAgICAgW3NlbGYgX25ld0xpbmVG
b3JFbGVtZW50OmVsZW1lbnRdOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBbc2VsZiBfbmV3UGFyYWdyYXBoRm9yRWxlbWVudDplbGVtZW50
IHRhZzp0YWcgYWxsb3dFbXB0eTpZRVMgc3VwcHJlc3NUcmFpbGluZ1NwYWNlOk5PXTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoW0AiVUwiIGlzRXF1YWxUb1N0cmlu
Zzp0YWddKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU1RleHRMaXN0PiBsaXN0OworICAgICAgICBO
U1RleHRMaXN0ICpsaXN0OwogICAgICAgICBOU1N0cmluZyAqbGlzdFN0eWxlVHlwZSA9IFtzZWxm
IF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJsaXN0LXN0eWxlLXR5cGUiXTsKLSAg
ICAgICAgaWYgKCFsaXN0U3R5bGVUeXBlIHx8IFtsaXN0U3R5bGVUeXBlIGxlbmd0aF0gPT0gMCkK
LSAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSBAImRpc2MiOwotICAgICAgICBsaXN0ID0gYWRv
cHROUyhbW1BsYXRmb3JtTlNUZXh0TGlzdCBhbGxvY10gaW5pdFdpdGhNYXJrZXJGb3JtYXQ6W05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JUB9IiwgbGlzdFN0eWxlVHlwZV0gb3B0aW9uczow
XSk7Ci0gICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDpsaXN0LmdldCgpXTsKKyAgICAgICAg
aWYgKCFsaXN0U3R5bGVUeXBlIHx8IFtsaXN0U3R5bGVUeXBlIGxlbmd0aF0gPT0gMCkgbGlzdFN0
eWxlVHlwZSA9IEAiZGlzYyI7CisgICAgICAgIGxpc3QgPSBbW05TVGV4dExpc3QgYWxsb2NdIGlu
aXRXaXRoTWFya2VyRm9ybWF0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieyVAfSIsIGxp
c3RTdHlsZVR5cGVdIG9wdGlvbnM6MF07CisgICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDps
aXN0XTsKKyAgICAgICAgW2xpc3QgcmVsZWFzZV07CiAgICAgfSBlbHNlIGlmIChbQCJPTCIgaXNF
cXVhbFRvU3RyaW5nOnRhZ10pIHsKLSAgICAgICAgUmV0YWluUHRyPE5TVGV4dExpc3Q+IGxpc3Q7
CisgICAgICAgIE5TVGV4dExpc3QgKmxpc3Q7CiAgICAgICAgIE5TU3RyaW5nICpsaXN0U3R5bGVU
eXBlID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImxpc3Qtc3R5bGUt
dHlwZSJdOwogICAgICAgICBpZiAoIWxpc3RTdHlsZVR5cGUgfHwgW2xpc3RTdHlsZVR5cGUgbGVu
Z3RoXSA9PSAwKSBsaXN0U3R5bGVUeXBlID0gQCJkZWNpbWFsIjsKLSAgICAgICAgbGlzdCA9IGFk
b3B0TlMoW1tQbGF0Zm9ybU5TVGV4dExpc3QgYWxsb2NdIGluaXRXaXRoTWFya2VyRm9ybWF0OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieyVAfS4iLCBsaXN0U3R5bGVUeXBlXSBvcHRpb25z
OjBdKTsKKyAgICAgICAgbGlzdCA9IFtbTlNUZXh0TGlzdCBhbGxvY10gaW5pdFdpdGhNYXJrZXJG
b3JtYXQ6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JUB9LiIsIGxpc3RTdHlsZVR5cGVd
IG9wdGlvbnM6MF07CiAgICAgICAgIGlmIChbZWxlbWVudCByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHN0YXJ0KV0pIHsKICAgICAgICAgICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1i
ZXIgPSBbKERPTUhUTUxPTGlzdEVsZW1lbnQgKillbGVtZW50IHN0YXJ0XTsKICAgICAgICAgICAg
IFtsaXN0IHNldFN0YXJ0aW5nSXRlbU51bWJlcjpzdGFydGluZ0l0ZW1OdW1iZXJdOwogICAgICAg
ICB9Ci0gICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDpsaXN0LmdldCgpXTsKKyAgICAgICAg
W190ZXh0TGlzdHMgYWRkT2JqZWN0Omxpc3RdOworICAgICAgICBbbGlzdCByZWxlYXNlXTsKICAg
ICB9IGVsc2UgaWYgKFtAIlEiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7CiAgICAgICAgIFtzZWxm
IF9hZGRRdW90ZUZvckVsZW1lbnQ6ZWxlbWVudCBvcGVuaW5nOllFUyBsZXZlbDpfcXVvdGVMZXZl
bCsrXTsKICAgICB9IGVsc2UgaWYgKFtAIklOUFVUIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkgewpA
QCAtMTg4NCwzNiArMTE3MSwyNSBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJlKGlkIGJs
b2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAtICh2b2lkKV9hZGRNYXJrZXJzVG9MaXN0OihOU1Rl
eHRMaXN0ICopbGlzdCByYW5nZTooTlNSYW5nZSlyYW5nZQogewogICAgIE5TSW50ZWdlciBpdGVt
TnVtID0gW2xpc3Qgc3RhcnRpbmdJdGVtTnVtYmVyXTsKLSAgICBOU1N0cmluZyAqc3RyaW5nID0g
W19hdHRyU3RyIHN0cmluZ107Ci0gICAgTlNTdHJpbmcgKnN0cmluZ1RvSW5zZXJ0OworICAgIE5T
U3RyaW5nICpzdHJpbmcgPSBbX2F0dHJTdHIgc3RyaW5nXSwgKnN0cmluZ1RvSW5zZXJ0OwogICAg
IE5TRGljdGlvbmFyeSAqYXR0cnNUb0luc2VydCA9IG5pbDsKLSAgICBQbGF0Zm9ybUZvbnQgKmZv
bnQ7CisgICAgTlNGb250ICpmb250OwogICAgIE5TUGFyYWdyYXBoU3R5bGUgKnBhcmFncmFwaFN0
eWxlOwogICAgIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlICpuZXdTdHlsZTsKLSAgICBOU1RleHRU
YWIgKnRhYiA9IG5pbDsKLSAgICBOU1RleHRUYWIgKnRhYlRvUmVtb3ZlOwotICAgIE5TUmFuZ2Ug
cGFyYWdyYXBoUmFuZ2U7Ci0gICAgTlNSYW5nZSBzdHlsZVJhbmdlOwotICAgIE5TVUludGVnZXIg
dGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAgIE5TVUludGVnZXIgbGlzdEluZGV4
OwotICAgIE5TVUludGVnZXIgaW5zZXJ0TGVuZ3RoOwotICAgIE5TVUludGVnZXIgaTsKLSAgICBO
U1VJbnRlZ2VyIGNvdW50OworICAgIE5TVGV4dFRhYiAqdGFiID0gbmlsLCAqdGFiVG9SZW1vdmU7
CisgICAgTlNSYW5nZSBwYXJhZ3JhcGhSYW5nZSwgc3R5bGVSYW5nZTsKKyAgICBOU1VJbnRlZ2Vy
IHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXSwgbGlzdEluZGV4LCBpZHgsIGluc2VydExl
bmd0aCwgaSwgY291bnQ7CiAgICAgTlNBcnJheSAqdGV4dExpc3RzOwotICAgIENHRmxvYXQgbWFy
a2VyTG9jYXRpb247Ci0gICAgQ0dGbG9hdCBsaXN0TG9jYXRpb247Ci0gICAgQ0dGbG9hdCBwb2lu
dFNpemU7CisgICAgQ0dGbG9hdCBtYXJrZXJMb2NhdGlvbiwgbGlzdExvY2F0aW9uLCBwb2ludFNp
emU7CiAgICAgCi0gICAgaWYgKHJhbmdlLmxlbmd0aCA9PSAwIHx8IHJhbmdlLmxvY2F0aW9uID49
IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoTlNNYXhSYW5nZShyYW5nZSkg
PiB0ZXh0TGVuZ3RoKQotICAgICAgICByYW5nZS5sZW5ndGggPSB0ZXh0TGVuZ3RoIC0gcmFuZ2Uu
bG9jYXRpb247CisgICAgaWYgKHJhbmdlLmxlbmd0aCA9PSAwIHx8IHJhbmdlLmxvY2F0aW9uID49
IHRleHRMZW5ndGgpIHJldHVybjsKKyAgICBpZiAoTlNNYXhSYW5nZShyYW5nZSkgPiB0ZXh0TGVu
Z3RoKSByYW5nZS5sZW5ndGggPSB0ZXh0TGVuZ3RoIC0gcmFuZ2UubG9jYXRpb247CiAgICAgcGFy
YWdyYXBoU3R5bGUgPSBbX2F0dHJTdHIgYXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1
dGVOYW1lIGF0SW5kZXg6cmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6TlVMTF07CiAgICAg
aWYgKHBhcmFncmFwaFN0eWxlKSB7CiAgICAgICAgIHRleHRMaXN0cyA9IFtwYXJhZ3JhcGhTdHls
ZSB0ZXh0TGlzdHNdOwogICAgICAgICBsaXN0SW5kZXggPSBbdGV4dExpc3RzIGluZGV4T2ZPYmpl
Y3Q6bGlzdF07CiAgICAgICAgIGlmICh0ZXh0TGlzdHMgJiYgbGlzdEluZGV4ICE9IE5TTm90Rm91
bmQpIHsKLSAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpZHggPSByYW5nZS5sb2NhdGlvbjsg
aWR4IDwgTlNNYXhSYW5nZShyYW5nZSk7KSB7CisgICAgICAgICAgICBmb3IgKGlkeCA9IHJhbmdl
LmxvY2F0aW9uOyBpZHggPCBOU01heFJhbmdlKHJhbmdlKTspIHsKICAgICAgICAgICAgICAgICBw
YXJhZ3JhcGhSYW5nZSA9IFtzdHJpbmcgcGFyYWdyYXBoUmFuZ2VGb3JSYW5nZTpOU01ha2VSYW5n
ZShpZHgsIDApXTsKICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTdHlsZSA9IFtfYXR0clN0ciBh
dHRyaWJ1dGU6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDppZHggZWZmZWN0
aXZlUmFuZ2U6JnN0eWxlUmFuZ2VdOwogICAgICAgICAgICAgICAgIGZvbnQgPSBbX2F0dHJTdHIg
YXR0cmlidXRlOk5TRm9udEF0dHJpYnV0ZU5hbWUgYXRJbmRleDppZHggZWZmZWN0aXZlUmFuZ2U6
TlVMTF07CkBAIC0xOTIxLDkgKzExOTcsNyBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJl
KGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAgICAgICAgICAgICAgICAgaWYgKFtbcGFy
YWdyYXBoU3R5bGUgdGV4dExpc3RzXSBjb3VudF0gPT0gbGlzdEluZGV4ICsgMSkgewogICAgICAg
ICAgICAgICAgICAgICBzdHJpbmdUb0luc2VydCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiXHQlQFx0IiwgW2xpc3QgbWFya2VyRm9ySXRlbU51bWJlcjppdGVtTnVtKytdXTsKICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0TGVuZ3RoID0gW3N0cmluZ1RvSW5zZXJ0IGxlbmd0aF07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcgJiYgIV9mbGFncy5pc1Rl
c3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICBhdHRyc1RvSW5zZXJ0ID0gW1BsYXRmb3Jt
TlNUZXh0TGlzdCBfc3RhbmRhcmRNYXJrZXJBdHRyaWJ1dGVzRm9yQXR0cmlidXRlczpbX2F0dHJT
dHIgYXR0cmlidXRlc0F0SW5kZXg6cGFyYWdyYXBoUmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFu
Z2U6TlVMTF1dOwotCisgICAgICAgICAgICAgICAgICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcg
JiYgIV9mbGFncy5pc1Rlc3RpbmcpIGF0dHJzVG9JbnNlcnQgPSBbTlNUZXh0TGlzdCBfc3RhbmRh
cmRNYXJrZXJBdHRyaWJ1dGVzRm9yQXR0cmlidXRlczpbX2F0dHJTdHIgYXR0cmlidXRlc0F0SW5k
ZXg6cGFyYWdyYXBoUmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6TlVMTF1dOwogICAgICAg
ICAgICAgICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJh
bmdlKHBhcmFncmFwaFJhbmdlLmxvY2F0aW9uLCAwKSB3aXRoU3RyaW5nOnN0cmluZ1RvSW5zZXJ0
XTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNJbmRleGluZyAmJiAhX2ZsYWdz
LmlzVGVzdGluZykgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnNUb0luc2VydCByYW5nZTpO
U01ha2VSYW5nZShwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiwgaW5zZXJ0TGVuZ3RoKV07CiAgICAg
ICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCArPSBpbnNlcnRMZW5ndGg7CkBAIC0xOTQyLDE0
ICsxMjE2LDEwIEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBi
bG9jazIsIHZvaWQgKikKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0YWJUb1JlbW92ZSkgW25ld1N0eWxlIHJlbW92ZVRhYlN0b3A6dGFiXTsg
ZWxzZSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0
YWIgPSBbW1BsYXRmb3JtTlNUZXh0VGFiIGFsbG9jXSBpbml0V2l0aFR5cGU6TlNMZWZ0VGFiU3Rv
cFR5cGUgbG9jYXRpb246bWFya2VyTG9jYXRpb25dOworICAgICAgICAgICAgICAgICAgICB0YWIg
PSBbW05TVGV4dFRhYiBhbGxvY10gaW5pdFdpdGhUeXBlOk5TTGVmdFRhYlN0b3BUeXBlIGxvY2F0
aW9uOm1hcmtlckxvY2F0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgW25ld1N0eWxlIGFkZFRh
YlN0b3A6dGFiXTsKICAgICAgICAgICAgICAgICAgICAgW3RhYiByZWxlYXNlXTsKLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgICAgICAgICAgICAgICAgIHRhYiA9IFtbUGxhdGZvcm1OU1RleHRUYWIg
YWxsb2NdIGluaXRXaXRoVGV4dEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnROYXR1cmFsIGxvY2F0
aW9uOmxpc3RMb2NhdGlvbiBvcHRpb25zOm5pbF07Ci0jZWxzZQotICAgICAgICAgICAgICAgICAg
ICB0YWIgPSBbW1BsYXRmb3JtTlNUZXh0VGFiIGFsbG9jXSBpbml0V2l0aFRleHRBbGlnbm1lbnQ6
TlNOYXR1cmFsVGV4dEFsaWdubWVudCBsb2NhdGlvbjpsaXN0TG9jYXRpb24gb3B0aW9uczpuaWxd
OwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIHRhYiA9IFtbTlNUZXh0VGFiIGFsbG9jXSBp
bml0V2l0aFRleHRBbGlnbm1lbnQ6TlNOYXR1cmFsVGV4dEFsaWdubWVudCBsb2NhdGlvbjpsaXN0
TG9jYXRpb24gb3B0aW9uczpuaWxdOwogICAgICAgICAgICAgICAgICAgICBbbmV3U3R5bGUgYWRk
VGFiU3RvcDp0YWJdOwogICAgICAgICAgICAgICAgICAgICBbdGFiIHJlbGVhc2VdOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nICYmICFfZmxhZ3MuaXNUZXN0aW5n
KSBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lIHZh
bHVlOm5ld1N0eWxlIHJhbmdlOnBhcmFncmFwaFJhbmdlXTsKQEAgLTE5NjksMTYgKzEyMzksMTIg
QEAgc3RhdGljIE5TSW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlkIGJsb2NrMiwgdm9p
ZCAqKQogewogICAgIE5TUmFuZ2UgcmFuZ2UgPSBOU01ha2VSYW5nZShzdGFydEluZGV4LCBbX2F0
dHJTdHIgbGVuZ3RoXSAtIHN0YXJ0SW5kZXgpOwogICAgIGlmIChyYW5nZS5sZW5ndGggPiAwICYm
IFtAIkEiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7Ci0gICAgICAgIE5TU3RyaW5nICp1cmxTdHJp
bmcgPSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJocmVmIl07Ci0gICAgICAgIE5TU3RyaW5nICpz
dHJpcHBlZFN0cmluZyA9IFt1cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNl
dDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKKyAg
ICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtlbGVtZW50IGdldEF0dHJpYnV0ZTpAImhyZWYi
XSwgKnN0cmlwcGVkU3RyaW5nID0gW3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVy
c0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1d
OwogICAgICAgICBpZiAodXJsU3RyaW5nICYmIFt1cmxTdHJpbmcgbGVuZ3RoXSA+IDAgJiYgc3Ry
aXBwZWRTdHJpbmcgJiYgW3N0cmlwcGVkU3RyaW5nIGxlbmd0aF0gPiAwICYmICFbc3RyaXBwZWRT
dHJpbmcgaGFzUHJlZml4OkAiIyJdKSB7CiAgICAgICAgICAgICBOU1VSTCAqdXJsID0gY29yZShb
ZWxlbWVudCBvd25lckRvY3VtZW50XSktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWls
aW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKLSAgICAgICAgICAgIGlmICghdXJsKQotICAgICAg
ICAgICAgICAgIHVybCA9IGNvcmUoW2VsZW1lbnQgb3duZXJEb2N1bWVudF0pLT5jb21wbGV0ZVVS
TChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoc3RyaXBwZWRTdHJpbmcpKTsKLSAg
ICAgICAgICAgIGlmICghdXJsKQotICAgICAgICAgICAgICAgIHVybCA9IFtOU1VSTCBfd2ViX1VS
TFdpdGhTdHJpbmc6c3RyaXBwZWRTdHJpbmcgcmVsYXRpdmVUb1VSTDpfYmFzZVVSTF07Ci0gICAg
ICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nICYmICFfZmxhZ3MuaXNUZXN0aW5nKQotICAg
ICAgICAgICAgICAgIFtfYXR0clN0ciBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2
YWx1ZTp1cmwgPyAoaWQpdXJsIDogKGlkKXVybFN0cmluZyByYW5nZTpyYW5nZV07CisgICAgICAg
ICAgICBpZiAoIXVybCkgdXJsID0gY29yZShbZWxlbWVudCBvd25lckRvY3VtZW50XSktPmNvbXBs
ZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzdHJpcHBlZFN0cmluZykp
OworICAgICAgICAgICAgaWYgKCF1cmwpIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6
c3RyaXBwZWRTdHJpbmcgcmVsYXRpdmVUb1VSTDpfYmFzZVVSTF07CisgICAgICAgICAgICBpZiAo
IV9mbGFncy5pc0luZGV4aW5nICYmICFfZmxhZ3MuaXNUZXN0aW5nKSBbX2F0dHJTdHIgYWRkQXR0
cmlidXRlOk5TTGlua0F0dHJpYnV0ZU5hbWUgdmFsdWU6dXJsID8gKGlkKXVybCA6IChpZCl1cmxT
dHJpbmcgcmFuZ2U6cmFuZ2VdOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghX2ZsYWdzLnJl
YWNoZWRFbmQgJiYgW3NlbGYgX2VsZW1lbnRJc0Jsb2NrTGV2ZWw6ZWxlbWVudF0pIHsKQEAgLTIw
MDAsOCArMTI2Niw5IEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBp
ZCBibG9jazIsIHZvaWQgKikKICAgICBpZiAoW0AidGFibGUiIGlzRXF1YWxUb1N0cmluZzpkaXNw
bGF5VmFsXSAmJiBbX3RleHRUYWJsZXMgY291bnRdID4gMCkgewogICAgICAgICBOU1ZhbHVlICpr
ZXkgPSBbTlNWYWx1ZSB2YWx1ZVdpdGhOb25yZXRhaW5lZE9iamVjdDpbX3RleHRUYWJsZXMgbGFz
dE9iamVjdF1dOwogICAgICAgICBET01Ob2RlICpmb290ZXIgPSBbX3RleHRUYWJsZUZvb3RlcnMg
b2JqZWN0Rm9yS2V5OmtleV07Ci0gICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdIDwg
W190ZXh0QmxvY2tzIGNvdW50XSArIDEpCisgICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291
bnRdIDwgW190ZXh0QmxvY2tzIGNvdW50XSArIDEpIHsKICAgICAgICAgICAgIFtfdGV4dEJsb2Nr
cyByZW1vdmVMYXN0T2JqZWN0XTsKKyAgICAgICAgfQogICAgICAgICBpZiAoZm9vdGVyKSB7CiAg
ICAgICAgICAgICBbc2VsZiBfdHJhdmVyc2VGb290ZXJOb2RlOmZvb3RlciBkZXB0aDpkZXB0aCAr
IDFdOwogICAgICAgICAgICAgW190ZXh0VGFibGVGb290ZXJzIHJlbW92ZU9iamVjdEZvcktleTpr
ZXldOwpAQCAtMjAzNiwxNCArMTMwMywxMiBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJl
KGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAgICAgICAgICAgICAgICAgaWYgKG9wZW5D
b2x1bW4gPj0gW2Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSAmJiBvcGVuQ29sdW1uIDwgW2Jsb2NrIHN0
YXJ0aW5nQ29sdW1uXSArIFtibG9jayBjb2x1bW5TcGFuXSkgb3BlbkNvbHVtbiA9IFtibG9jayBz
dGFydGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl07CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gd2hpbGUgKG9wZW5Db2x1bW4gPj0gbnVtYmVyT2ZDb2x1bW5zKTsKLSAgICAgICAgaWYg
KChOU1VJbnRlZ2VyKW51bWJlck9mQ29sdW1ucyA+IFt0YWJsZSBudW1iZXJPZkNvbHVtbnNdKQot
ICAgICAgICAgICAgW3RhYmxlIHNldE51bWJlck9mQ29sdW1uczpudW1iZXJPZkNvbHVtbnNdOwor
ICAgICAgICBpZiAoKE5TVUludGVnZXIpbnVtYmVyT2ZDb2x1bW5zID4gW3RhYmxlIG51bWJlck9m
Q29sdW1uc10pIFt0YWJsZSBzZXROdW1iZXJPZkNvbHVtbnM6bnVtYmVyT2ZDb2x1bW5zXTsKICAg
ICAgICAgW190ZXh0VGFibGVSb3dzIHJlbW92ZUxhc3RPYmplY3RdOwogICAgICAgICBbX3RleHRU
YWJsZVJvd3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpyb3dOdW1iZXJd
XTsKICAgICAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgcmVtb3ZlTGFzdE9iamVjdF07CiAgICAg
ICAgIFtfdGV4dFRhYmxlUm93QXJyYXlzIGFkZE9iamVjdDpyb3dBcnJheV07Ci0gICAgICAgIGlm
IChbX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgY291bnRdID4gMCkKLSAgICAgICAgICAg
IFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyByZW1vdmVMYXN0T2JqZWN0XTsKKyAgICAg
ICAgaWYgKFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBjb3VudF0gPiAwKSBbX3RleHRU
YWJsZVJvd0JhY2tncm91bmRDb2xvcnMgcmVtb3ZlTGFzdE9iamVjdF07CiAgICAgfSBlbHNlIGlm
IChbQCJ0YWJsZS1jZWxsIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gJiYgW190ZXh0Qmxv
Y2tzIGNvdW50XSA+IDApIHsKICAgICAgICAgd2hpbGUgKFtfdGV4dFRhYmxlcyBjb3VudF0gPiBb
X3RleHRCbG9ja3MgY291bnRdKSB7CiAgICAgICAgICAgICBbX3RleHRUYWJsZXMgcmVtb3ZlTGFz
dE9iamVjdF07CkBAIC0yMDY4LDggKzEzMzMsNyBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21w
YXJlKGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAgICAgICAgICAgICBtdXRhYmxlU3Ry
aW5nID0gW19hdHRyU3RyIG11dGFibGVTdHJpbmddOwogICAgICAgICAgICAgZm9yIChpID0gcmFu
Z2UubG9jYXRpb247IGkgPCBOU01heFJhbmdlKHJhbmdlKTsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgYyA9IFttdXRhYmxlU3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6aV07Ci0gICAgICAgICAgICAg
ICAgaWYgKDB4YTAgPT0gYykKLSAgICAgICAgICAgICAgICAgICAgW211dGFibGVTdHJpbmcgcmVw
bGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKGksIDEpIHdpdGhTdHJpbmc6QCIgIl07
CisgICAgICAgICAgICAgICAgaWYgKDB4YTAgPT0gYykgW211dGFibGVTdHJpbmcgcmVwbGFjZUNo
YXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKGksIDEpIHdpdGhTdHJpbmc6QCIgIl07CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoW0AiQXBwbGUtY29udmVydGVkLXRhYiIgaXNF
cXVhbFRvU3RyaW5nOmNsYXNzTmFtZV0pIHsKICAgICAgICAgICAgIG11dGFibGVTdHJpbmcgPSBb
X2F0dHJTdHIgbXV0YWJsZVN0cmluZ107CkBAIC0yMDc4LDExICsxMzQyLDkgQEAgc3RhdGljIE5T
SW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlkIGJsb2NrMiwgdm9pZCAqKQogICAgICAg
ICAgICAgICAgIGMgPSBbbXV0YWJsZVN0cmluZyBjaGFyYWN0ZXJBdEluZGV4OmldOwogICAgICAg
ICAgICAgICAgIGlmICgnICcgPT0gYyB8fCAweGEwID09IGMpIHsKICAgICAgICAgICAgICAgICAg
ICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID49IDQgfHwgaSArIDEg
Pj0gTlNNYXhSYW5nZShyYW5nZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZVRvUmVw
bGFjZSA9IE5TTWFrZVJhbmdlKGkgKyAxIC0gY291bnQsIGNvdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvdW50ID49IDQgfHwgaSArIDEgPj0gTlNNYXhSYW5nZShyYW5nZSkpIHJhbmdl
VG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UoaSArIDEgLSBjb3VudCwgY291bnQpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApCi0gICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKGkgLSBjb3Vu
dCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKSByYW5nZVRvUmVw
bGFjZSA9IE5TTWFrZVJhbmdlKGkgLSBjb3VudCwgY291bnQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpZiAocmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkgewogICAgICAg
ICAgICAgICAgICAgICBbbXV0YWJsZVN0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFu
Z2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpAIlx0Il07CkBAIC0yMTAyLDE3ICsxMzY0LDEwIEBAIHN0
YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBibG9jazIsIHZvaWQgKikK
IAogLSAodm9pZClfcHJvY2Vzc1RleHQ6KERPTUNoYXJhY3RlckRhdGEgKil0ZXh0CiB7Ci0gICAg
TlNTdHJpbmcgKmluc3RyID0gW3RleHQgZGF0YV07Ci0gICAgTlNTdHJpbmcgKm91dHN0ciA9IGlu
c3RyOwotICAgIE5TU3RyaW5nICp3aGl0ZXNwYWNlVmFsOwotICAgIE5TU3RyaW5nICp0cmFuc2Zv
cm1WYWw7Ci0gICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07Ci0g
ICAgTlNVSW50ZWdlciBzdGFydE9mZnNldCA9IDA7Ci0gICAgTlNVSW50ZWdlciBlbmRPZmZzZXQg
PSBbaW5zdHIgbGVuZ3RoXTsKKyAgICBOU1N0cmluZyAqaW5zdHIgPSBbdGV4dCBkYXRhXSwgKm91
dHN0ciA9IGluc3RyLCAqd2hpdGVzcGFjZVZhbCwgKnRyYW5zZm9ybVZhbDsKKyAgICBOU1VJbnRl
Z2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXSwgc3RhcnRPZmZzZXQgPSAwLCBlbmRP
ZmZzZXQgPSBbaW5zdHIgbGVuZ3RoXTsKICAgICB1bmljaGFyIGxhc3RDaGFyID0gKHRleHRMZW5n
dGggPiAwKSA/IFtbX2F0dHJTdHIgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OnRleHRMZW5ndGgg
LSAxXSA6ICdcbic7Ci0gICAgQk9PTCB3YXNTcGFjZSA9IE5POwotICAgIEJPT0wgd2FzTGVhZGlu
ZyA9IFlFUzsKLSAgICBCT09MIHN1cHByZXNzTGVhZGluZ1NwYWNlID0gKChfZmxhZ3MuaXNTb2Z0
ICYmIGxhc3RDaGFyID09ICcgJykgfHwgbGFzdENoYXIgPT0gJ1xuJyB8fCBsYXN0Q2hhciA9PSAn
XHInIHx8IGxhc3RDaGFyID09ICdcdCcgfHwgbGFzdENoYXIgPT0gTlNQYXJhZ3JhcGhTZXBhcmF0
b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGxh
c3RDaGFyID09IE5TRm9ybUZlZWRDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gV2ViTmV4dExpbmVD
aGFyYWN0ZXIpOworICAgIEJPT0wgd2FzU3BhY2UgPSBOTywgd2FzTGVhZGluZyA9IFlFUywgc3Vw
cHJlc3NMZWFkaW5nU3BhY2UgPSAoKF9mbGFncy5pc1NvZnQgJiYgbGFzdENoYXIgPT0gJyAnKSB8
fCBsYXN0Q2hhciA9PSAnXG4nIHx8IGxhc3RDaGFyID09ICdccicgfHwgbGFzdENoYXIgPT0gJ1x0
JyB8fCBsYXN0Q2hhciA9PSBOU1BhcmFncmFwaFNlcGFyYXRvckNoYXJhY3RlciB8fCBsYXN0Q2hh
ciA9PSBOU0xpbmVTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gTlNGb3JtRmVlZENo
YXJhY3RlciB8fCBsYXN0Q2hhciA9PSBXZWJOZXh0TGluZUNoYXJhY3Rlcik7CiAgICAgTlNSYW5n
ZSByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOwogICAgIENGTXV0
YWJsZVN0cmluZ1JlZiBtdXRzdHIgPSBOVUxMOwogICAgIHdoaXRlc3BhY2VWYWwgPSBbc2VsZiBf
c3RyaW5nRm9yTm9kZTp0ZXh0IHByb3BlcnR5OkAid2hpdGUtc3BhY2UiXTsKQEAgLTIxMzYsOCAr
MTM5MSw3IEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBibG9j
azIsIHZvaWQgKikKICAgICBpZiAoW3doaXRlc3BhY2VWYWwgaGFzUHJlZml4OkAicHJlIl0pIHsK
ICAgICAgICAgaWYgKHRleHRMZW5ndGggPiAwICYmIFtpbnN0ciBsZW5ndGhdID4gMCAmJiBfZmxh
Z3MuaXNTb2Z0KSB7CiAgICAgICAgICAgICB1bmljaGFyIGMgPSBbaW5zdHIgY2hhcmFjdGVyQXRJ
bmRleDowXTsKLSAgICAgICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0g
TlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgYyA9PSBOU0xpbmVTZXBhcmF0b3JDaGFy
YWN0ZXIgfHwgYyA9PSBOU0Zvcm1GZWVkQ2hhcmFjdGVyIHx8IGMgPT0gV2ViTmV4dExpbmVDaGFy
YWN0ZXIpCi0gICAgICAgICAgICAgICAgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0
TGVuZ3RoIC0gMSwgMSk7CisgICAgICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8
fCBjID09IE5TUGFyYWdyYXBoU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGMgPT0gTlNMaW5lU2VwYXJh
dG9yQ2hhcmFjdGVyIHx8IGMgPT0gTlNGb3JtRmVlZENoYXJhY3RlciB8fCBjID09IFdlYk5leHRM
aW5lQ2hhcmFjdGVyKSByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGggLSAx
LCAxKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIENGU3RyaW5nSW5saW5lQnVm
ZmVyIGlubGluZUJ1ZmZlcjsKQEAgLTIxNTMsOCArMTQwNyw3IEBAIHN0YXRpYyBOU0ludGVnZXIg
X2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBibG9jazIsIHZvaWQgKikKICAgICAgICAgICAgIGlm
IChjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1x0JyB8fCBjID09
IDB4YyB8fCBjID09IDB4MjAwYikgewogICAgICAgICAgICAgICAgIHdhc1NwYWNlID0gKCF3YXNM
ZWFkaW5nIHx8ICFzdXBwcmVzc0xlYWRpbmdTcGFjZSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmICh3YXNTcGFjZSkKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVy
W2lkeCsrXSA9ICcgJzsKKyAgICAgICAgICAgICAgICBpZiAod2FzU3BhY2UpIGJ1ZmZlcltpZHgr
K10gPSAnICc7CiAgICAgICAgICAgICAgICAgYnVmZmVyW2lkeCsrXSA9IGM7CiAgICAgICAgICAg
ICAgICAgaWYgKGlkeCA+PSBUZXh0QnVmZmVyU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBD
RlN0cmluZ0FwcGVuZENoYXJhY3RlcnMobXV0c3RyLCBidWZmZXIsIGlkeCk7CkBAIC0yMTYzLDU5
ICsxNDE2LDQxIEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBi
bG9jazIsIHZvaWQgKikKICAgICAgICAgICAgICAgICB3YXNTcGFjZSA9IHdhc0xlYWRpbmcgPSBO
TzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAod2FzU3BhY2UpCi0gICAg
ICAgICAgICBidWZmZXJbaWR4KytdID0gJyAnOwotICAgICAgICBpZiAoaWR4ID4gMCkKLSAgICAg
ICAgICAgIENGU3RyaW5nQXBwZW5kQ2hhcmFjdGVycyhtdXRzdHIsIGJ1ZmZlciwgaWR4KTsKKyAg
ICAgICAgaWYgKHdhc1NwYWNlKSBidWZmZXJbaWR4KytdID0gJyAnOworICAgICAgICBpZiAoaWR4
ID4gMCkgQ0ZTdHJpbmdBcHBlbmRDaGFyYWN0ZXJzKG11dHN0ciwgYnVmZmVyLCBpZHgpOwogICAg
ICAgICBvdXRzdHIgPSAoTlNTdHJpbmcgKiltdXRzdHI7CiAgICAgfQogICAgIGlmIChbb3V0c3Ry
IGxlbmd0aF0gPiAwKSB7Ci0gICAgICAgIGlmIChbQCJjYXBpdGFsaXplIiBpc0VxdWFsVG9TdHJp
bmc6dHJhbnNmb3JtVmFsXSkKKyAgICAgICAgaWYgKFtAImNhcGl0YWxpemUiIGlzRXF1YWxUb1N0
cmluZzp0cmFuc2Zvcm1WYWxdKSB7CiAgICAgICAgICAgICBvdXRzdHIgPSBbb3V0c3RyIGNhcGl0
YWxpemVkU3RyaW5nXTsKLSAgICAgICAgZWxzZSBpZiAoW0AidXBwZXJjYXNlIiBpc0VxdWFsVG9T
dHJpbmc6dHJhbnNmb3JtVmFsXSkKKyAgICAgICAgfSBlbHNlIGlmIChbQCJ1cHBlcmNhc2UiIGlz
RXF1YWxUb1N0cmluZzp0cmFuc2Zvcm1WYWxdKSB7CiAgICAgICAgICAgICBvdXRzdHIgPSBbb3V0
c3RyIHVwcGVyY2FzZVN0cmluZ107Ci0gICAgICAgIGVsc2UgaWYgKFtAImxvd2VyY2FzZSIgaXNF
cXVhbFRvU3RyaW5nOnRyYW5zZm9ybVZhbF0pCisgICAgICAgIH0gZWxzZSBpZiAoW0AibG93ZXJj
YXNlIiBpc0VxdWFsVG9TdHJpbmc6dHJhbnNmb3JtVmFsXSkgewogICAgICAgICAgICAgb3V0c3Ry
ID0gW291dHN0ciBsb3dlcmNhc2VTdHJpbmddOworICAgICAgICB9CiAgICAgICAgIFtfYXR0clN0
ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpvdXRz
dHJdOwogICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbb3V0c3RyIGxlbmd0aF07CiAg
ICAgICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+IGF0dHJzOworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyczsKICAg
ICAgICAgICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKXRleHQ7Ci0gICAg
ICAgICAgICB3aGlsZSAoZWxlbWVudCkgewotICAgICAgICAgICAgICAgIC8vIEZpbGwgYXR0cnMg
ZGljdGlvbmFyeSB3aXRoIGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQgbm9kZXMsIG5vdCBvdmVyd3Jp
dGluZyBvbmVzIGRlZXBlciBpbiB0aGUgdHJlZQotICAgICAgICAgICAgICAgIGlmKFtlbGVtZW50
IG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBuZXdBdHRycyA9IGFkb3B0TlMoW1tzZWxmIF9h
dHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XSBtdXRhYmxlQ29weV0pOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0cnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkt
c2V0IGF0dHJpYnV0ZXMgKGZyb20gbG93ZXIgaW4gdGhlIHRyZWUpIG92ZXJ3cml0ZSB0aGUgaGln
aGVyIG9uZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBbbmV3QXR0cnMgYWRkRW50cmllc0Zy
b21EaWN0aW9uYXJ5OmF0dHJzLmdldCgpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBhdHRycyA9IG5ld0F0dHJzOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbGVtZW50ID0gKERPTUVsZW1lbnQgKilbZWxlbWVudCBwYXJlbnROb2RlXTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5n
ZVRvUmVwbGFjZS5sZW5ndGggPiAwKQotICAgICAgICAgICAgICAgIFtfYXR0clN0ciBzZXRBdHRy
aWJ1dGVzOmF0dHJzLmdldCgpIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKKyAgICAgICAgICAgIHdo
aWxlIChlbGVtZW50ICYmIFtlbGVtZW50IG5vZGVUeXBlXSAhPSBET01fRUxFTUVOVF9OT0RFKSBl
bGVtZW50ID0gKERPTUVsZW1lbnQgKilbZWxlbWVudCBwYXJlbnROb2RlXTsKKyAgICAgICAgICAg
IGF0dHJzID0gW3NlbGYgX2F0dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOworICAgICAgICAg
ICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApIFtf
YXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKICAgICAg
ICAgfQogICAgICAgICBfZmxhZ3MuaXNTb2Z0ID0gd2FzU3BhY2U7CiAgICAgfQotICAgIGlmICht
dXRzdHIpCi0gICAgICAgIENGUmVsZWFzZShtdXRzdHIpOworICAgIGlmIChtdXRzdHIpIENGUmVs
ZWFzZShtdXRzdHIpOwogfQogCiAtICh2b2lkKV90cmF2ZXJzZU5vZGU6KERPTU5vZGUgKilub2Rl
IGRlcHRoOihOU0ludGVnZXIpZGVwdGggZW1iZWRkZWQ6KEJPT0wpZW1iZWRkZWQKIHsKICAgICB1
bnNpZ25lZCBzaG9ydCBub2RlVHlwZTsKICAgICBOU0FycmF5ICpjaGlsZE5vZGVzOwotICAgIE5T
VUludGVnZXIgY291bnQ7Ci0gICAgTlNVSW50ZWdlciBzdGFydE9mZnNldDsKLSAgICBOU1VJbnRl
Z2VyIGVuZE9mZnNldDsKLSAgICBCT09MIGlzU3RhcnQgPSBOTzsKLSAgICBCT09MIGlzRW5kID0g
Tk87Ci0KLSAgICBpZiAoX2ZsYWdzLnJlYWNoZWRFbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoX2RvbVJhbmdlICYmICFfZmxhZ3MucmVhY2hlZFN0YXJ0ICYmIF9kb21TdGFydEFuY2VzdG9y
cyAmJiAhW19kb21TdGFydEFuY2VzdG9ycyBjb250YWluc09iamVjdDpub2RlXSkKLSAgICAgICAg
cmV0dXJuOworICAgIE5TVUludGVnZXIgaSwgY291bnQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ7
CisgICAgQk9PTCBpc1N0YXJ0ID0gTk8sIGlzRW5kID0gTk87CisKKyAgICBpZiAoX2ZsYWdzLnJl
YWNoZWRFbmQpIHJldHVybjsKKyAgICBpZiAoX2RvbVJhbmdlICYmICFfZmxhZ3MucmVhY2hlZFN0
YXJ0ICYmIF9kb21TdGFydEFuY2VzdG9ycyAmJiAhW19kb21TdGFydEFuY2VzdG9ycyBjb250YWlu
c09iamVjdDpub2RlXSkgcmV0dXJuOwogICAgIAogICAgIG5vZGVUeXBlID0gW25vZGUgbm9kZVR5
cGVdOwogICAgIGNoaWxkTm9kZXMgPSBbc2VsZiBfY2hpbGRyZW5Gb3JOb2RlOm5vZGVdOwpAQCAt
MjIzNiwxNSArMTQ3MSwxMSBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJlKGlkIGJsb2Nr
MSwgaWQgYmxvY2syLCB2b2lkICopCiAgICAgfQogICAgIAogICAgIGlmIChub2RlVHlwZSA9PSBE
T01fRE9DVU1FTlRfTk9ERSB8fCBub2RlVHlwZSA9PSBET01fRE9DVU1FTlRfRlJBR01FTlRfTk9E
RSkgewotICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpID09IHN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAg
ICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICAgICAgICAg
IGlmICgoIWlzU3RhcnQgfHwgc3RhcnRPZmZzZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRPZmZz
ZXQgPiBpKSkKLSAgICAgICAgICAgICAgICBbc2VsZiBfdHJhdmVyc2VOb2RlOltjaGlsZE5vZGVz
IG9iamVjdEF0SW5kZXg6aV0gZGVwdGg6ZGVwdGggKyAxIGVtYmVkZGVkOmVtYmVkZGVkXTsKLSAg
ICAgICAgICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBlbmRPZmZzZXQpCi0gICAgICAgICAgICAg
ICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7Ci0gICAgICAgICAgICBpZiAoX3RodW1ibmFpbExp
bWl0ID4gMCAmJiBbX2F0dHJTdHIgbGVuZ3RoXSA+PSBfdGh1bWJuYWlsTGltaXQpCi0gICAgICAg
ICAgICAgICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7CisgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpID09IHN0YXJ0T2Zm
c2V0KSBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07CisgICAgICAgICAg
ICBpZiAoKCFpc1N0YXJ0IHx8IHN0YXJ0T2Zmc2V0IDw9IGkpICYmICghaXNFbmQgfHwgZW5kT2Zm
c2V0ID4gaSkpIFtzZWxmIF90cmF2ZXJzZU5vZGU6W2NoaWxkTm9kZXMgb2JqZWN0QXRJbmRleDpp
XSBkZXB0aDpkZXB0aCArIDEgZW1iZWRkZWQ6ZW1iZWRkZWRdOworICAgICAgICAgICAgaWYgKGlz
RW5kICYmIGkgKyAxID49IGVuZE9mZnNldCkgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7CisgICAg
ICAgICAgICBpZiAoX3RodW1ibmFpbExpbWl0ID4gMCAmJiBbX2F0dHJTdHIgbGVuZ3RoXSA+PSBf
dGh1bWJuYWlsTGltaXQpIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwogICAgICAgICAgICAgaWYg
KF9mbGFncy5yZWFjaGVkRW5kKSBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobm9k
ZVR5cGUgPT0gRE9NX0VMRU1FTlRfTk9ERSkgewpAQCAtMjI1NywxOCArMTQ4OCwxNCBAQCBzdGF0
aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJlKGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAg
ICAgICAgICAgICBpc0Jsb2NrTGV2ZWwgPSAoW0AiYmxvY2siIGlzRXF1YWxUb1N0cmluZzpkaXNw
bGF5VmFsXSB8fCBbQCJsaXN0LWl0ZW0iIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSB8fCBb
ZGlzcGxheVZhbCBoYXNQcmVmaXg6QCJ0YWJsZSJdKTsKICAgICAgICAgfQogICAgICAgICBbX2Vs
ZW1lbnRJc0Jsb2NrTGV2ZWwgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDppc0Js
b2NrTGV2ZWxdIGZvcktleTplbGVtZW50XTsKLSAgICAgICAgaWYgKFtzZWxmIF9lbnRlckVsZW1l
bnQ6ZWxlbWVudCB0YWc6dGFnIGRpc3BsYXk6ZGlzcGxheVZhbCBlbWJlZGRlZDplbWJlZGRlZF0p
IHsKKyAgICAgICAgaWYgKFtzZWxmIF9lbnRlckVsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGRpc3Bs
YXk6ZGlzcGxheVZhbF0pIHsKICAgICAgICAgICAgIE5TVUludGVnZXIgc3RhcnRJbmRleCA9IFtf
YXR0clN0ciBsZW5ndGhdOwogICAgICAgICAgICAgaWYgKFtzZWxmIF9wcm9jZXNzRWxlbWVudDpl
bGVtZW50IHRhZzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsIGRlcHRoOmRlcHRoXSkgewotICAgICAg
ICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBzdGFydE9mZnNldCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAm
JiAoIWlzRW5kIHx8IGVuZE9mZnNldCA+IGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgW3Nl
bGYgX3RyYXZlcnNlTm9kZTpbY2hpbGROb2RlcyBvYmplY3RBdEluZGV4OmldIGRlcHRoOmRlcHRo
ICsgMSBlbWJlZGRlZDplbWJlZGRlZF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0VuZCAm
JiBpICsgMSA+PSBlbmRPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBfZmxhZ3MucmVh
Y2hlZEVuZCA9IFlFUzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKF9mbGFncy5yZWFjaGVkRW5k
KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RhcnQg
JiYgaSA9PSBzdGFydE9mZnNldCkgX2RvbVJhbmdlU3RhcnRJbmRleCA9IFtfYXR0clN0ciBsZW5n
dGhdOworICAgICAgICAgICAgICAgICAgICBpZiAoKCFpc1N0YXJ0IHx8IHN0YXJ0T2Zmc2V0IDw9
IGkpICYmICghaXNFbmQgfHwgZW5kT2Zmc2V0ID4gaSkpIFtzZWxmIF90cmF2ZXJzZU5vZGU6W2No
aWxkTm9kZXMgb2JqZWN0QXRJbmRleDppXSBkZXB0aDpkZXB0aCArIDEgZW1iZWRkZWQ6ZW1iZWRk
ZWRdOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0
KSBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9mbGFn
cy5yZWFjaGVkRW5kKSBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
W3NlbGYgX2V4aXRFbGVtZW50OmVsZW1lbnQgdGFnOnRhZyBkaXNwbGF5OmRpc3BsYXlWYWwgZGVw
dGg6ZGVwdGggc3RhcnRJbmRleDpzdGFydEluZGV4XTsKICAgICAgICAgICAgIH0KQEAgLTIyODUs
MTYgKzE1MTIsMTEgQEAgc3RhdGljIE5TSW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlk
IGJsb2NrMiwgdm9pZCAqKQogICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAq
KW5vZGU7CiAgICAgTlNBcnJheSAqY2hpbGROb2RlcyA9IFtzZWxmIF9jaGlsZHJlbkZvck5vZGU6
bm9kZV07CiAgICAgTlNTdHJpbmcgKnRhZyA9IEAiVEJPRFkiLCAqZGlzcGxheVZhbCA9IEAidGFi
bGUtcm93LWdyb3VwIjsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2NoaWxkTm9kZXMgY291bnRd
OwotICAgIE5TVUludGVnZXIgc3RhcnRPZmZzZXQgPSAwOwotICAgIE5TVUludGVnZXIgZW5kT2Zm
c2V0ID0gY291bnQ7Ci0gICAgQk9PTCBpc1N0YXJ0ID0gTk87Ci0gICAgQk9PTCBpc0VuZCA9IE5P
OwotCi0gICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KF9kb21SYW5nZSAmJiAhX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiBfZG9tU3RhcnRBbmNlc3RvcnMg
JiYgIVtfZG9tU3RhcnRBbmNlc3RvcnMgY29udGFpbnNPYmplY3Q6bm9kZV0pCi0gICAgICAgIHJl
dHVybjsKKyAgICBOU1VJbnRlZ2VyIGksIGNvdW50ID0gW2NoaWxkTm9kZXMgY291bnRdLCBzdGFy
dE9mZnNldCA9IDAsIGVuZE9mZnNldCA9IGNvdW50OworICAgIEJPT0wgaXNTdGFydCA9IE5PLCBp
c0VuZCA9IE5POworCisgICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKSByZXR1cm47CisgICAgaWYg
KF9kb21SYW5nZSAmJiAhX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiBfZG9tU3RhcnRBbmNlc3RvcnMg
JiYgIVtfZG9tU3RhcnRBbmNlc3RvcnMgY29udGFpbnNPYmplY3Q6bm9kZV0pIHJldHVybjsKICAg
ICBpZiAoX2RvbVJhbmdlKSB7CiAgICAgICAgIGlmIChub2RlID09IFtfZG9tUmFuZ2Ugc3RhcnRD
b250YWluZXJdKSB7CiAgICAgICAgICAgICBzdGFydE9mZnNldCA9IChOU1VJbnRlZ2VyKVtfZG9t
UmFuZ2Ugc3RhcnRPZmZzZXRdOwpAQCAtMjMwNiwyNCArMTUyOCwxOSBAQCBzdGF0aWMgTlNJbnRl
Z2VyIF9jb2xDb21wYXJlKGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAgICAgICAgICAg
ICBpc0VuZCA9IFlFUzsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoW3NlbGYgX2VudGVyRWxl
bWVudDplbGVtZW50IHRhZzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsIGVtYmVkZGVkOllFU10pIHsK
KyAgICBpZiAoW3NlbGYgX2VudGVyRWxlbWVudDplbGVtZW50IHRhZzp0YWcgZGlzcGxheTpkaXNw
bGF5VmFsXSkgewogICAgICAgICBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVu
Z3RoXTsKICAgICAgICAgaWYgKFtzZWxmIF9wcm9jZXNzRWxlbWVudDplbGVtZW50IHRhZzp0YWcg
ZGlzcGxheTpkaXNwbGF5VmFsIGRlcHRoOmRlcHRoXSkgewotICAgICAgICAgICAgZm9yIChOU1VJ
bnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpc1N0
YXJ0ICYmIGkgPT0gc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIF9kb21SYW5nZVN0
YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBpZiAoKCFpc1N0
YXJ0IHx8IHN0YXJ0T2Zmc2V0IDw9IGkpICYmICghaXNFbmQgfHwgZW5kT2Zmc2V0ID4gaSkpCi0g
ICAgICAgICAgICAgICAgICAgIFtzZWxmIF90cmF2ZXJzZU5vZGU6W2NoaWxkTm9kZXMgb2JqZWN0
QXRJbmRleDppXSBkZXB0aDpkZXB0aCArIDEgZW1iZWRkZWQ6WUVTXTsKLSAgICAgICAgICAgICAg
ICBpZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KQotICAgICAgICAgICAgICAgICAgICBf
ZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKLSAgICAgICAgICAgICAgICBpZiAoX2ZsYWdzLnJlYWNo
ZWRFbmQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpID09
IHN0YXJ0T2Zmc2V0KSBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07Cisg
ICAgICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAmJiAoIWlz
RW5kIHx8IGVuZE9mZnNldCA+IGkpKSBbc2VsZiBfdHJhdmVyc2VOb2RlOltjaGlsZE5vZGVzIG9i
amVjdEF0SW5kZXg6aV0gZGVwdGg6ZGVwdGggKyAxIGVtYmVkZGVkOllFU107CisgICAgICAgICAg
ICAgICAgaWYgKGlzRW5kICYmIGkgKyAxID49IGVuZE9mZnNldCkgX2ZsYWdzLnJlYWNoZWRFbmQg
PSBZRVM7CisgICAgICAgICAgICAgICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKSBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIFtzZWxmIF9leGl0RWxlbWVudDplbGVtZW50IHRhZzp0
YWcgZGlzcGxheTpkaXNwbGF5VmFsIGRlcHRoOmRlcHRoIHN0YXJ0SW5kZXg6c3RhcnRJbmRleF07
CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGlzRW5kKQotICAgICAgICBfZmxhZ3MucmVhY2hl
ZEVuZCA9IFlFUzsKKyAgICBpZiAoaXNFbmQpIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwogfQog
CiAtICh2b2lkKV9hZGp1c3RUcmFpbGluZ05ld2xpbmUKQEAgLTIzMzgsMzAgKzE1NTUsMjQgQEAg
c3RhdGljIE5TSW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlkIGJsb2NrMiwgdm9pZCAq
KQogLSAodm9pZClfbG9hZEZyb21ET01SYW5nZQogewogICAgIGlmICgtMSA9PSBfZXJyb3JDb2Rl
KSB7Ci0gICAgICAgIERPTU5vZGUgKmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gW19kb21SYW5n
ZSBjb21tb25BbmNlc3RvckNvbnRhaW5lcl07Ci0gICAgICAgIERPTU5vZGUgKmFuY2VzdG9yQ29u
dGFpbmVyID0gW19kb21SYW5nZSBzdGFydENvbnRhaW5lcl07CisgICAgICAgIERPTU5vZGUgKmNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyID0gW19kb21SYW5nZSBjb21tb25BbmNlc3RvckNvbnRhaW5l
cl0sICphbmNlc3RvckNvbnRhaW5lciA9IFtfZG9tUmFuZ2Ugc3RhcnRDb250YWluZXJdOwogICAg
ICAgICAKICAgICAgICAgX2RvbVN0YXJ0QW5jZXN0b3JzID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07CiAgICAgICAgIHdoaWxlIChhbmNlc3RvckNvbnRhaW5lcikgewogICAgICAgICAg
ICAgW19kb21TdGFydEFuY2VzdG9ycyBhZGRPYmplY3Q6YW5jZXN0b3JDb250YWluZXJdOwotICAg
ICAgICAgICAgaWYgKGFuY2VzdG9yQ29udGFpbmVyID09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ29udGFp
bmVyID09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSBicmVhazsKICAgICAgICAgICAgIGFuY2Vz
dG9yQ29udGFpbmVyID0gW2FuY2VzdG9yQ29udGFpbmVyIHBhcmVudE5vZGVdOwogICAgICAgICB9
CiAgICAgICAgIF9kb2N1bWVudCA9IFtjb21tb25BbmNlc3RvckNvbnRhaW5lciBvd25lckRvY3Vt
ZW50XTsKICAgICAgICAgX2RhdGFTb3VyY2UgPSAoRG9jdW1lbnRMb2FkZXIgKiljb3JlKF9kb2N1
bWVudCktPmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgICAgIGlmIChf
dGV4dFNpemVNdWx0aXBsaWVyIDw9IDAuMCkKLSAgICAgICAgICAgIF90ZXh0U2l6ZU11bHRpcGxp
ZXIgPSAxOwotICAgICAgICBpZiAoX2RlZmF1bHRGb250U2l6ZSA8PSAwLjApCi0gICAgICAgICAg
ICBfZGVmYXVsdEZvbnRTaXplID0gMTI7Ci0gICAgICAgIGlmIChfbWluaW11bUZvbnRTaXplIDwg
MS4wKQotICAgICAgICAgICAgX21pbmltdW1Gb250U2l6ZSA9IDE7CisgICAgICAgIGlmIChfdGV4
dFNpemVNdWx0aXBsaWVyIDw9IDAuMCkgX3RleHRTaXplTXVsdGlwbGllciA9IDE7CisgICAgICAg
IGlmIChfZGVmYXVsdEZvbnRTaXplIDw9IDAuMCkgX2RlZmF1bHRGb250U2l6ZSA9IDEyOworICAg
ICAgICBpZiAoX21pbmltdW1Gb250U2l6ZSA8IDEuMCkgX21pbmltdW1Gb250U2l6ZSA9IDE7CiAg
ICAgICAgIGlmIChfZG9jdW1lbnQgJiYgX2RhdGFTb3VyY2UpIHsKICAgICAgICAgICAgIF9kb21S
YW5nZVN0YXJ0SW5kZXggPSAwOwogICAgICAgICAgICAgX2Vycm9yQ29kZSA9IDA7CiAgICAgICAg
ICAgICBbc2VsZiBfdHJhdmVyc2VOb2RlOmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGRlcHRoOjAg
ZW1iZWRkZWQ6Tk9dOwotICAgICAgICAgICAgaWYgKF9kb21SYW5nZVN0YXJ0SW5kZXggPiAwICYm
IF9kb21SYW5nZVN0YXJ0SW5kZXggPD0gW19hdHRyU3RyIGxlbmd0aF0pCi0gICAgICAgICAgICAg
ICAgW19hdHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kb21S
YW5nZVN0YXJ0SW5kZXgpXTsKKyAgICAgICAgICAgIGlmIChfZG9tUmFuZ2VTdGFydEluZGV4ID4g
MCAmJiBfZG9tUmFuZ2VTdGFydEluZGV4IDw9IFtfYXR0clN0ciBsZW5ndGhdKSBbX2F0dHJTdHIg
ZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgX2RvbVJhbmdlU3RhcnRJbmRl
eCldOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjM2OSw3ICsxNTgwLDYgQEAgc3RhdGljIE5T
SW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEsIGlkIGJsb2NrMiwgdm9pZCAqKQogLSAodm9p
ZClkZWFsbG9jCiB7CiAgICAgW19hdHRyU3RyIHJlbGVhc2VdOwotICAgIFtfZG9jdW1lbnRBdHRy
cyByZWxlYXNlXTsKICAgICBbX2RvbVJhbmdlIHJlbGVhc2VdOwogICAgIFtfZG9tU3RhcnRBbmNl
c3RvcnMgcmVsZWFzZV07CiAgICAgW19zdGFuZGFyZEZvbnRGYW1pbHkgcmVsZWFzZV07CkBAIC0y
Mzk3LDExICsxNjA3LDkgQEAgc3RhdGljIE5TSW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9jazEs
IGlkIGJsb2NrMiwgdm9pZCAqKQogLSAoaWQpaW5pdAogewogICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOworICAgIGlmICghc2VsZikg
cmV0dXJuIG5pbDsKICAgICAKICAgICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdF07Ci0gICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwogCiAgICAgX3RleHRMaXN0cyA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdOwogICAgIF90ZXh0QmxvY2tzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF07CkBAIC0yNDQwLDggKzE2NDgsNyBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJl
KGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAtIChpZClpbml0V2l0aERPTVJhbmdlOihE
T01SYW5nZSAqKWRvbVJhbmdlCiB7CiAgICAgc2VsZiA9IFtzZWxmIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoIXNlbGYpIHJldHVybiBuaWw7CiAg
ICAgX2RvbVJhbmdlID0gW2RvbVJhbmdlIHJldGFpbl07CiAgICAgcmV0dXJuIHNlbGY7CiB9CkBA
IC0yNDUwLDEwICsxNjU3LDkgQEAgc3RhdGljIE5TSW50ZWdlciBfY29sQ29tcGFyZShpZCBibG9j
azEsIGlkIGJsb2NrMiwgdm9pZCAqKQogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRl
ZFN0cmluZwogewogICAgIFtzZWxmIF9sb2FkRnJvbURPTVJhbmdlXTsKLSAgICByZXR1cm4gKCFf
ZXJyb3JDb2RlKSA/IFtbX2F0dHJTdHIgcmV0YWluXSBhdXRvcmVsZWFzZV0gOiBuaWw7CisgICAg
cmV0dXJuICgwID09IF9lcnJvckNvZGUpID8gW1tfYXR0clN0ciByZXRhaW5dIGF1dG9yZWxlYXNl
XSA6IG5pbDsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCiAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMg
VGV4dEl0ZXJhdG9yLCB3aGljaCBtYWtlcyBvZmZzZXRzIGluIGl0cyByZXN1bHQgY29tcGF0aWJs
ZSB3aXRoIEhUTUwgZWRpdGluZy4KICsgKE5TQXR0cmlidXRlZFN0cmluZyAqKWVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlOihSYW5nZSopcmFuZ2UKIHsKQEAgLTI0NzEsNyArMTY3Nyw3
IEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBibG9jazIsIHZv
aWQgKikKICAgICAgICAgCiAgICAgICAgIGlmIChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWlu
ZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEpKSB7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gc3RhcnRDb250YWluZXItPmNoaWxkTm9kZShzdGFydE9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsKKyAgICAgICAgICAg
IGlmIChub2RlICYmIGlzSFRNTEltYWdlRWxlbWVudChub2RlKSkgewogICAgICAgICAgICAgICAg
IE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JFbGVtZW50KHRvRWxl
bWVudChub2RlKSk7CiAgICAgICAgICAgICAgICAgTlNUZXh0QXR0YWNobWVudCogYXR0YWNobWVu
dCA9IFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhGaWxlV3JhcHBlcjpmaWxlV3Jh
cHBlcl07CiAgICAgICAgICAgICAgICAgW3N0cmluZyBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltO
U0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OmF0dGFjaG1l
bnRdXTsKQEAgLTI0OTAsNiArMTY5Niw4IEBAIHN0YXRpYyBOU0ludGVnZXIgX2NvbENvbXBhcmUo
aWQgYmxvY2sxLCBpZCBibG9jazIsIHZvaWQgKikKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGlmIChzdHlsZS0+dGV4dERlY29yYXRpb25z
SW5FZmZlY3QoKSAmIFRleHREZWNvcmF0aW9uVW5kZXJsaW5lKQogICAgICAgICAgICAgW2F0dHJz
LmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVT
dHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICAg
ICAgaWYgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25M
aW5lVGhyb3VnaCkKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1N0cmlr
ZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAoTlNGb250ICpmb250ID0g
c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKICAgICAgICAgICAgIFth
dHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAg
ICAgICAgIGVsc2UKQEAgLTI1MTEsMTAgKzE3MTksOSBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xD
b21wYXJlKGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCiAKICAgICByZXR1cm4gW3N0cmlu
ZyBhdXRvcmVsZWFzZV07CiB9Ci0jZW5kaWYKKwogQGVuZAogCi0jaWYgIVBMQVRGT1JNKElPUykK
IHN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvclVSTChEb2N1bWVudExvYWRlciAq
ZGF0YVNvdXJjZSwgTlNVUkwgKlVSTCkKIHsKICAgICBpZiAoW1VSTCBpc0ZpbGVVUkxdKSB7CkBA
IC0yNTY3LDQgKzE3NzQsMyBAQCBzdGF0aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KLSNlbmRp
Zgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>