<?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>216166</bug_id>
          
          <creation_ts>2020-09-03 20:57:46 -0700</creation_ts>
          <short_desc>[LFC][IFC] Rename LineLayoutContext to LineBuilder</short_desc>
          <delta_ts>2020-09-04 07:40:19 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1685551</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-03 20:57:46 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685552</commentid>
    <comment_count>1</comment_count>
      <attachid>407942</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-03 20:59:38 -0700</bug_when>
    <thetext>Created attachment 407942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685632</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-04 07:39:23 -0700</bug_when>
    <thetext>Committed r266605: &lt;https://trac.webkit.org/changeset/266605&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407942.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685633</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-04 07:40:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/68345228&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407942</attachid>
            <date>2020-09-03 20:59:38 -0700</date>
            <delta_ts>2020-09-04 07:39:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216166-20200903205937.patch</filename>
            <type>text/plain</type>
            <size>81252</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDA3MmQ3ZGEwMjU3ZTVi
NjFmZTRlMzI3MzdjZGQyYmM2YjMzODE2ZS4uNGFhMDY2YzQ3NzcyYWUzYjI1OTNlNGIwMmY2ZmYy
Nzk4MzQzMzcxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTA5LTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBSZW5hbWUg
TGluZUxheW91dENvbnRleHQgdG8gTGluZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjE2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIExpbmVMYXlvdXRDb250ZXh0IGJ1aWxkcyB0aGUgbGlu
ZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhGb3JDb25z
dHJhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjplbmRzV2l0aFNvZnRXcmFwT3Bwb3J0dW5pdHkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc0F0U29mdFdyYXBPcHBvcnR1bml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om5leHRXcmFwT3Bwb3J0dW5pdHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJbmxpbmVDb250ZW50OjpydW5zIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVu
dDo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNh
bmRpZGF0ZTo6SW5saW5lQ29udGVudDo6dHJhaWxpbmdMaW5lQnJlYWsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJbmxpbmVDb250ZW50OjphcHBlbmRM
aW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJbmxp
bmVDb250ZW50OjpzZXRUcmFpbGluZ0xpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDYW5kaWRhdGU6OkZsb2F0Q29udGVudDo6bGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVDYW5kaWRhdGU6OkZsb2F0Q29udGVudDo6aW50cnVzaXZlV2lk
dGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJbmxp
bmVDb250ZW50OjphcHBlbmRJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpGbG9hdENvbnRlbnQ6OmFwcGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVDYW5kaWRhdGU6OkZsb2F0Q29udGVudDo6cmVzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpyZXNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjppbmxpbmVJdGVtV2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGF5b3V0SW5saW5lQ29udGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpuZXh0Q29udGVudEZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29tbWl0UGFydGlh
bENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cmVidWls
ZExpbmUpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9MaW5lTGF5b3V0Q29udGV4dC5oLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVp
bGRlcjo6SW5saW5lSXRlbVJhbmdlOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5nZTo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpyb290IGNvbnN0KToK
KwogMjAyMC0wOS0wMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbmFtZSBMaW5lQnVpbGRlciB0byBMaW5lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGVlYjFkNjA0YWQ0
ZWNmN2MyMDQ3NjJkNmRmNDU3ZDAyZmVkMDViM2MuLjZiZWRhZjkzNzIxOGNmMmU4YTdiNTk0ZDhm
MGIzNThmNDdkYWY3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDQzLDExICsxNDQzLDExIEBAIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5j
cHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uY3BwCitsYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJv
eC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAotbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAKK2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
VGV4dEl0ZW0uY3BwCi1sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5j
cHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcAogbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkNWU0MGE2YWM4NjMwNzEyMmU3
NTlkYTljODRkMDU1OGIzM2M3YmMyLi44Y2Y0MGVlNzljNjJhZWE0NzVhODQ1OGZkYWIxNmNhNjkz
OWFhZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yMDYxLDcgKzIwNjEsNyBAQAogCQk2RjE3MjY0RjI0NzBDNjBCMDA1MThD
OTYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYxNzI2NEUyNDcwQzYwQTAwNTE4Qzk2
IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjFDQzFERTIyNUY4QjQ5MDA3MjBB
RDIgLyogSW5saW5lVGV4dEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMjZC
QjZDMjMzNDNFNkYwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyog
TGF5b3V0Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTZGMjZFQjQ4MjM0MDA0QTUwMDY5MDZFMiAvKiBMaW5lTGF5b3V0Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVCNDYy
MzQwMDRBNTAwNjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0LmggKi87IH07CisJCTZGMjZFQjQ4
MjM0MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8q
IElubGluZUxpbmVCdWlsZGVyLmggKi87IH07CiAJCTZGMzYwRTUwMjM5OTk0MjEwMDE1MTJBNyAv
KiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkYzNjBFNEUyMzk5OTQyMDAwMTUxMkE3IC8qIElubGluZVNvZnRM
aW5lQnJlYWtJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkY2MzgzRjYyNDI3QUY0QTAwREFCQTUzIC8qIExheW91dEluaXRpYWxDb250YWlu
aW5nQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGNjM4M0Y0MjQyN0FGNDkwMERBQkE1MyAvKiBMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2Nr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3
Nzg2ODgyMzQ5MUFEODAwNEQ5NjM2IC8qIERpc3BsYXlQYWludGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Rjc3ODY4NzIzNDkxQUQ3MDA0RDk2MzYg
LyogRGlzcGxheVBhaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtOTU2MiwxMCArOTU2MiwxMCBAQAogCQk2RjFDQzFERDIyNUY4QjQyMDA3
MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFB
IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIy
Qjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMjVCMjAwMjIwQTg1QUIw
MDAwMDExQiAvKiBMaW5lTGF5b3V0Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5l
TGF5b3V0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMjVCMjAw
MjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVMaW5lQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbmxpbmVMaW5lQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGMjZCQjY5MjMzNDNFNUEwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExheW91dENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMYXlvdXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMjZF
QjQ2MjM0MDA0QTUwMDY5MDZFMiAvKiBMaW5lTGF5b3V0Q29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5b3V0Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZUJ1aWxkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0
IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMzYwRTRFMjM5OTk0MjAwMDE1MTJBNyAv
KiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjRBNUJENTIyRjlGMTZCMDBBODBGMjUgLyogTGF5b3V0UGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTc0NjcsOCArMTc0NjcsOCBAQAogCQkJCTZGMzYwRTRFMjM5OTk0MjAwMDE1MTJBNyAvKiBJ
bmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oICovLAogCQkJCTZGMUNDMURDMjI1RjhCNDEwMDcyMEFE
MiAvKiBJbmxpbmVUZXh0SXRlbS5jcHAgKi8sCiAJCQkJNkYxQ0MxREQyMjVGOEI0MjAwNzIwQUQy
IC8qIElubGluZVRleHRJdGVtLmggKi8sCi0JCQkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8q
IExpbmVMYXlvdXRDb250ZXh0LmNwcCAqLywKLQkJCQk2RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIg
LyogTGluZUxheW91dENvbnRleHQuaCAqLywKKwkJCQk2RjI1QjIwMDIyMEE4NUFCMDAwMDAxMUIg
LyogSW5saW5lTGluZUJ1aWxkZXIuY3BwICovLAorCQkJCTZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZF
MiAvKiBJbmxpbmVMaW5lQnVpbGRlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBpbmxpbmVmb3Jt
YXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMyNjU4LDcgKzMyNjU4LDcg
QEAKIAkJCQk4NDczMEQ5MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3OTY1MEQwMEJGMjIwMDcxQjc4MiAvKiBMaW5lYXJHcmFkaWVudEF0
dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCMzFDOTFFMTBBRTFCOEUwMDBDN0I5MiAv
KiBMaW5lQ2xhbXBWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkYyNkVCNDgyMzQwMDRBNTAw
NjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjI2RUI0
ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZGRUZBQjJBMTgzODBEQTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBMaW5lTGF5b3V0VHJhdmVy
c2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYgLyogTGlu
ZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBiNDBhNWRjZDVmN2RiMGIyYzFlMWM2ZmYzY2Jj
YmJlZGRmN2FjNzk2Li4zMDdlZmI1NTMxOTUzZjJjY2I2YjM2Y2ZkM2I1ZmQ1YWY0MWM5MzM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0xMzIsMTYgKzEzMiwxNiBA
QCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFs
aWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpbwogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5n
Q29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbRW5kXSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250
ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290KCkgPDwgIikiKTsKIH0KIAotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRl
bXMsIExpbmVMYXlvdXRDb250ZXh0OjpJbmxpbmVJdGVtUmFuZ2UgbmVlZHNMYXlvdXRSYW5nZSwg
Y29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKK3ZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1z
LCBMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJhbmdlIG5lZWRzTGF5b3V0UmFuZ2UsIGNvbnN0IENv
bnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgY29uc3RyYWludHMpCiB7CiAgICAgYXV0byBsaW5l
TG9naWNhbFRvcCA9IGNvbnN0cmFpbnRzLnZlcnRpY2FsLmxvZ2ljYWxUb3A7CiAgICAgc3RydWN0
IFByZXZpb3VzTGluZSB7Ci0gICAgICAgIExpbmVMYXlvdXRDb250ZXh0OjpJbmxpbmVJdGVtUmFu
Z2UgcmFuZ2U7CisgICAgICAgIExpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUmFuZ2UgcmFuZ2U7CiAg
ICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0NvbnRlbnRMZW5ndGg7CiAgICAgfTsK
ICAgICBPcHRpb25hbDxQcmV2aW91c0xpbmU+IHByZXZpb3VzTGluZTsKICAgICBhdXRvIGxpbmUg
PSBMaW5lIHsgKnRoaXMgfTsKLSAgICBhdXRvIGxpbmVMYXlvdXRDb250ZXh0ID0gTGluZUxheW91
dENvbnRleHQgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9OworICAgIGF1dG8gbGluZUJ1
aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCksIGlubGluZUl0ZW1zIH07CiAKICAg
ICB3aGlsZSAoIW5lZWRzTGF5b3V0UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8gbGlu
ZUNvbnN0cmFpbnRzID0gY29uc3RyYWludHNGb3JMaW5lKGNvbnN0cmFpbnRzLmhvcml6b250YWws
IGxpbmVMb2dpY2FsVG9wKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91
dENvbgogICAgICAgICAvLyBUdXJuIHByZXZpb3VzIGxpbmUncyBvdmVyZmxvdyBjb250ZW50IGxl
bmd0aCBpbnRvIHRoZSBuZXh0IGxpbmUncyBsZWFkaW5nIGNvbnRlbnQgcGFydGlhbCBsZW5ndGgu
CiAgICAgICAgIC8vICJzcFs8LWxpbmUgYnJlYWstPl1saXRfY29udGVudCIgLT4gb3ZlcmZsb3cg
bGVuZ3RoOiAxMSAtPiBsZWFkaW5nIHBhcnRpYWwgY29udGVudCBsZW5ndGg6IDExLgogICAgICAg
ICBhdXRvIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHByZXZpb3VzTGluZSA/IHByZXZp
b3VzTGluZS0+b3ZlcmZsb3dDb250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0OwotICAgICAgICBh
dXRvIGxpbmVDb250ZW50ID0gbGluZUxheW91dENvbnRleHQubGF5b3V0SW5saW5lQ29udGVudChs
aW5lLCBuZWVkc0xheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOworICAg
ICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5lQ29udGVudChs
aW5lLCBuZWVkc0xheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwogICAg
ICAgICBhdXRvIGxpbmVDb250ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2U7
CiAgICAgICAgIGF1dG8gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID0gWyZdIHsKICAgICAg
ICAgICAgIGlmIChsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudCkKQEAgLTI3MSwxMiArMjcxLDEy
IEBAIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50
cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KEluCiAgICAgYXV0byYgaW5saW5lSXRlbXMgPSBmb3Jt
YXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpOwogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0aCA9
IElubGluZUxheW91dFVuaXQgeyB9OwogICAgIGF1dG8gbGluZSA9IExpbmUgeyAqdGhpcyB9Owot
ICAgIGF1dG8gbGluZUxheW91dENvbnRleHQgPSBMaW5lTGF5b3V0Q29udGV4dCB7ICp0aGlzLCBy
b290KCksIGlubGluZUl0ZW1zIH07Ci0gICAgYXV0byBsYXlvdXRSYW5nZSA9IExpbmVMYXlvdXRD
b250ZXh0OjpJbmxpbmVJdGVtUmFuZ2UgeyAwICwgaW5saW5lSXRlbXMuc2l6ZSgpIH07CisgICAg
YXV0byBsaW5lQnVpbGRlciA9IExpbmVCdWlsZGVyIHsgKnRoaXMsIHJvb3QoKSwgaW5saW5lSXRl
bXMgfTsKKyAgICBhdXRvIGxheW91dFJhbmdlID0gTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5n
ZSB7IDAgLCBpbmxpbmVJdGVtcy5zaXplKCkgfTsKICAgICB3aGlsZSAoIWxheW91dFJhbmdlLmlz
RW1wdHkoKSkgewogICAgICAgICAvLyBPbmx5IHRoZSBob3JpenRvbmFsIGF2YWlsYWJsZSB3aWR0
aCBpcyBjb25zdHJhaW5lZCB3aGVuIGNvbXB1dGluZyBpbnRyaW5zaWMgd2lkdGguCiAgICAgICAg
IGxpbmUub3BlbihhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBs
aW5lTGF5b3V0Q29udGV4dC5sYXlvdXRJbmxpbmVDb250ZW50KGxpbmUsIGxheW91dFJhbmdlLCB7
IH0pOworICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5l
Q29udGVudChsaW5lLCBsYXlvdXRSYW5nZSwgeyB9KTsKICAgICAgICAgLy8gRklYTUU6IEZpbmQg
b3V0IGlmIG1pbi9tYXggbmVlZHMgdG8gc2V0IHRoZSBpc0xhc3RMaW5lIGJpdC4KICAgICAgICAg
bGluZS5jbG9zZShmYWxzZSk7CiAgICAgICAgIGxheW91dFJhbmdlLnN0YXJ0ID0gbGluZUNvbnRl
bnQuaW5saW5lSXRlbVJhbmdlLmVuZDsKQEAgLTQ4NCw3ICs0ODQsNyBAQCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25z
dHJhaW50c0ZvcgogICAgIHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVm
dCwgbGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwg
bGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IH07CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUxheW91dENvbnRleHQ6Okxp
bmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCit2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVy
OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1
dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwogICAgIGlmICgh
bGluZUNvbnRlbnQuZmxvYXRzLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKaW5kZXggNTJjYTgzNWM5ODczNTM3ZDJkYTUzNmUyY2I2NzAwY2Y1ZGYwMWJkZi4uZGM0
ZjNjNTE5MDJmNDgwZDYxMWFiODY3Nzc0NWRlYTA1NDEzOTU4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIkxpbmVMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4
LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsgfQog
Ci0gICAgdm9pZCBsaW5lTGF5b3V0KElubGluZUl0ZW1zJiwgTGluZUxheW91dENvbnRleHQ6Oklu
bGluZUl0ZW1SYW5nZSwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jik7CisgICAg
dm9pZCBsaW5lTGF5b3V0KElubGluZUl0ZW1zJiwgTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5n
ZSwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jik7CiAKICAgICB2b2lkIGNvbXB1
dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYpOwogICAgIElubGlu
ZUxheW91dFVuaXQgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW5saW5lTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKICAgICB9
OwogICAgIExpbmVDb25zdHJhaW50cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0gICAgdm9p
ZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29u
dGVudCYsIGNvbnN0IExpbmVCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKKyAg
ICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250
ZW50JiwgY29uc3QgTGluZUJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogICAg
IHZvaWQgaW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYp
OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdD
b250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45YzcyY2RhOWNkODkxODExNmUwNzNjNTlkZTdjY2I3NzA3YzhkMTg5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsNTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCdWlsZGVyLmgiCisKKyNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKKyNp
bmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEJveC5o
IgorI2luY2x1ZGUgIlRleHRVdGlsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBMYXlvdXQgeworCitzdGF0aWMgaW5saW5lIGJvb2wgZW5kc1dpdGhTb2Z0V3JhcE9wcG9ydHVu
aXR5KGNvbnN0IElubGluZVRleHRJdGVtJiBjdXJyZW50VGV4dEl0ZW0sIGNvbnN0IElubGluZVRl
eHRJdGVtJiBuZXh0SW5saW5lVGV4dEl0ZW0pCit7CisgICAgQVNTRVJUKCFuZXh0SW5saW5lVGV4
dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpOworICAgIC8vIFdlIGFyZSBhdCB0aGUgcG9zaXRpb24gYWZ0
ZXIgYSB3aGl0ZXNwYWNlLgorICAgIGlmIChjdXJyZW50VGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIFdoZW4gYm90aCB0aGVzZSBub24td2hpdGVz
cGFjZSBydW5zIGJlbG9uZyB0byB0aGUgc2FtZSBsYXlvdXQgYm94LCBpdCdzIGd1YXJhbnRlZWQg
dGhhdAorICAgIC8vIHRoZXkgYXJlIHNwbGl0IGF0IGEgc29mdCBicmVha2luZyBvcHBvcnR1bml0
eS4gU2VlIElubGluZVRleHRJdGVtOjptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24uCisgICAg
aWYgKCZjdXJyZW50VGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpID09ICZuZXh0SW5saW5lVGV4dEl0
ZW0uaW5saW5lVGV4dEJveCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBOb3cgd2Ug
bmVlZCB0byBjb2xsZWN0IGF0IGxlYXN0IDMgYWRqYWNlbnQgY2hhcmFjdGVycyB0byBiZSBhYmxl
IHRvIG1ha2UgYSBkZWNpc2lvbiB3aGV0aGVyIHRoZSBwcmV2aW91cyB0ZXh0IGl0ZW0gZW5kcyB3
aXRoIGJyZWFraW5nIG9wcG9ydHVuaXR5LgorICAgIC8vIFtleC1dW2FtcGxlXSA8LSBzZWNvbmQg
dG8gbGFzdFt4XSBsYXN0Wy1dIGN1cnJlbnRbYV0KKyAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDEg
Y2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IGlubGluZSB0ZXh0IGl0ZW0gYW5kIDIgbW9yZSBmcm9t
IHByZXZpb3VzIGlubGluZSBpdGVtcy4KKyAgICBhdXRvIHByZXZpb3VzQ29udGVudCA9IGN1cnJl
bnRUZXh0SXRlbS5pbmxpbmVUZXh0Qm94KCkuY29udGVudCgpOworICAgIGF1dG8gbGluZUJyZWFr
SXRlcmF0b3IgPSBMYXp5TGluZUJyZWFrSXRlcmF0b3IgeyBuZXh0SW5saW5lVGV4dEl0ZW0uaW5s
aW5lVGV4dEJveCgpLmNvbnRlbnQoKSB9OworICAgIGF1dG8gcHJldmlvdXNDb250ZW50TGVuZ3Ro
ID0gcHJldmlvdXNDb250ZW50Lmxlbmd0aCgpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9v
ayBpbnRvIHRoZSBlbnRpcmUgdW5jb21taXR0ZWQgY29udGVudCBmb3IgbW9yZSB0ZXh0IGNvbnRl
eHQuCisgICAgVUNoYXIgbGFzdENoYXJhY3RlciA9IHByZXZpb3VzQ29udGVudExlbmd0aCA/IHBy
ZXZpb3VzQ29udGVudFtwcmV2aW91c0NvbnRlbnRMZW5ndGggLSAxXSA6IDA7CisgICAgVUNoYXIg
c2Vjb25kVG9MYXN0Q2hhcmFjdGVyID0gcHJldmlvdXNDb250ZW50TGVuZ3RoID4gMSA/IHByZXZp
b3VzQ29udGVudFtwcmV2aW91c0NvbnRlbnRMZW5ndGggLSAyXSA6IDA7CisgICAgbGluZUJyZWFr
SXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJh
Y3Rlcik7CisgICAgLy8gTm93IGNoZWNrIGlmIHdlIGNhbiBicmVhayByaWdodCBhdCB0aGUgaW5s
aW5lIGl0ZW0gYm91bmRhcnkuCisgICAgLy8gV2l0aCB0aGUgW2V4LWFtcGxlXSwgZmluZE5leHRC
cmVha2FibGVQb3NpdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBzdGFydFBvc2l0aW9uICgwKS4KKyAg
ICAvLyBGSVhNRTogQ2hlY2sgaWYgdGhlcmUncyBhIG1vcmUgY29ycmVjdCB3YXkgb2YgZmluZGlu
ZyBicmVha2luZyBvcHBvcnR1bml0aWVzLgorICAgIHJldHVybiAhVGV4dFV0aWw6OmZpbmROZXh0
QnJlYWthYmxlUG9zaXRpb24obGluZUJyZWFrSXRlcmF0b3IsIDAsIG5leHRJbmxpbmVUZXh0SXRl
bS5zdHlsZSgpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQXRTb2Z0V3JhcE9wcG9ydHVu
aXR5KGNvbnN0IElubGluZUl0ZW0mIGN1cnJlbnQsIGNvbnN0IElubGluZUl0ZW0mIG5leHQpCit7
CisgICAgLy8gImlzIGF0IiBzaW1wbGUgbWVhbnMgdGhhdCB0aGVyZSdzIGEgc29mdCB3cmFwIG9w
cG9ydHVuaXR5IHJpZ2h0IGFmdGVyIHRoZSBbY3VycmVudF0uCisgICAgLy8gW3RleHRdWyBdW3Rl
eHRdW2NvbnRhaW5lciBzdGFydF0uLi4gKDxkaXY+dGV4dCBjb250ZW50PHNwYW4+Li48L2Rpdj4p
CisgICAgLy8gc29mdCB3cmFwIGluZGV4ZXM6IDAgYW5kIDEgZGVmaW5pdGVseSwgMiBkZXBlbmRz
IG9uIHRoZSBjb250ZW50IGFmdGVyIHRoZSBbY29udGFpbmVyIHN0YXJ0XS4KKworICAgIC8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdGV4dC0zLyNsaW5lLWJyZWFrLWRldGFpbHMKKyAg
ICAvLyBGaWd1cmUgb3V0IGlmIHRoZSBuZXcgaW5jb21pbmcgY29udGVudCBwdXRzIHRoZSB1bmNv
bW1pdHRlZCBjb250ZW50IG9uIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5LgorICAgIC8vIGUuZy4g
W2NvbnRhaW5lciBzdGFydF1bcHJpb3JfY29udGludW91c19jb250ZW50XVtjb250YWluZXIgZW5k
XSAoPHNwYW4+cHJpb3JfY29udGludW91c19jb250ZW50PC9zcGFuPikKKyAgICAvLyBBbiBpbmNv
bWluZyA8aW1nPiBib3ggd291bGQgZW5hYmxlIHVzIHRvIGNvbW1pdCB0aGUgIjxzcGFuPnByaW9y
X2NvbnRpbnVvdXNfY29udGVudDwvc3Bhbj4iIGNvbnRlbnQKKyAgICAvLyBidXQgYW4gaW5jb21p
bmcgdGV4dCBjb250ZW50IHdvdWxkIG5vdCBuZWNlc3NhcmlseS4KKyAgICBBU1NFUlQoY3VycmVu
dC5pc1RleHQoKSB8fCBjdXJyZW50LmlzQm94KCkpOworICAgIEFTU0VSVChuZXh0LmlzVGV4dCgp
IHx8IG5leHQuaXNCb3goKSk7CisgICAgaWYgKGN1cnJlbnQuaXNUZXh0KCkgJiYgbmV4dC5pc1Rl
eHQoKSkgeworICAgICAgICBhdXRvJiBjdXJyZW50SW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJ
bmxpbmVUZXh0SXRlbT4oY3VycmVudCk7CisgICAgICAgIGF1dG8mIG5leHRJbmxpbmVUZXh0SXRl
bSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihuZXh0KTsKKyAgICAgICAgaWYgKGN1cnJlbnRJ
bmxpbmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSkgeworICAgICAgICAgICAgLy8gWyBdW3RleHRd
IDogYWZ0ZXIgW3doaXRlc3BhY2VdIHBvc2l0aW9uIGlzIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5
LgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5leHRJ
bmxpbmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSkgeworICAgICAgICAgICAgLy8gW3RleHRdWyBd
ICg8c3Bhbj50ZXh0PC9zcGFuPiApCisgICAgICAgICAgICAvLyB3aGl0ZS1zcGFjZTogYnJlYWst
c3BhY2VzOiBsaW5lIGJyZWFraW5nIG9wcG9ydHVuaXR5IGV4aXN0cyBhZnRlciBldmVyeSBwcmVz
ZXJ2ZWQgd2hpdGUgc3BhY2UgY2hhcmFjdGVyLCBidXQgbm90IGJlZm9yZS4KKyAgICAgICAgICAg
IHJldHVybiBuZXh0SW5saW5lVGV4dEl0ZW0uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVT
cGFjZTo6QnJlYWtTcGFjZXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnJlbnQuc3R5bGUo
KS5saW5lQnJlYWsoKSA9PSBMaW5lQnJlYWs6OkFueXdoZXJlIHx8IG5leHQuc3R5bGUoKS5saW5l
QnJlYWsoKSA9PSBMaW5lQnJlYWs6OkFueXdoZXJlKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBp
cyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eSBhcm91bmQgZXZlcnkgdHlwb2dyYXBoaWMgY2hhcmFj
dGVyIHVuaXQsIGluY2x1ZGluZyBhcm91bmQgYW55IHB1bmN0dWF0aW9uIGNoYXJhY3RlcgorICAg
ICAgICAgICAgLy8gb3IgcHJlc2VydmVkIHdoaXRlIHNwYWNlcywgb3IgaW4gdGhlIG1pZGRsZSBv
ZiB3b3Jkcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8v
IEJvdGggY3VycmVudCBhbmQgbmV4dCBpdGVtcyBhcmUgbm9uLXdoaXRlc3BhY2UgdGV4dC4KKyAg
ICAgICAgLy8gW3RleHRdW3RleHRdIDogaXMgYSBjb250aW51b3VzIGNvbnRlbnQuCisgICAgICAg
IC8vIFt0ZXh0LV1bdGV4dF0gOiBhZnRlciBbaHlwaGVuXSBwb3NpdGlvbiBpcyBhIHNvZnQgd3Jh
cCBvcHBvcnR1bml0eS4KKyAgICAgICAgcmV0dXJuIGVuZHNXaXRoU29mdFdyYXBPcHBvcnR1bml0
eShjdXJyZW50SW5saW5lVGV4dEl0ZW0sIG5leHRJbmxpbmVUZXh0SXRlbSk7CisgICAgfQorICAg
IGlmIChjdXJyZW50LmlzQm94KCkgfHwgbmV4dC5pc0JveCgpKSB7CisgICAgICAgIC8vIFt0ZXh0
XVtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5lciBlbmRdW2lubGluZSBib3hdICh0ZXh0PHNwYW4+
PC9zcGFuPjxpbWc+KSA6IHRoZXJlJ3MgYSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHkgYmV0d2VlbiB0
aGUgW3RleHRdIGFuZCBbaW1nXS4KKyAgICAgICAgLy8gVGhlIGxpbmUgYnJlYWtpbmcgYmVoYXZp
b3Igb2YgYSByZXBsYWNlZCBlbGVtZW50IG9yIG90aGVyIGF0b21pYyBpbmxpbmUgaXMgZXF1aXZh
bGVudCB0byBhbiBpZGVvZ3JhcGhpYyBjaGFyYWN0ZXIuCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGlubGluZSBzaXplX3QgbmV4dFdyYXBPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJdGVt
cyYgaW5saW5lQ29udGVudCwgc2l6ZV90IHN0YXJ0SW5kZXgsIGNvbnN0IExpbmVCdWlsZGVyOjpJ
bmxpbmVJdGVtUmFuZ2UgbGF5b3V0UmFuZ2UpCit7CisgICAgLy8gMS4gRmluZCB0aGUgc3RhcnQg
Y2FuZGlkYXRlIGJ5IHNraXBwaW5nIGxlYWRpbmcgbm9uLWNvbnRlbnQgaXRlbXMgZS5nIDxzcGFu
PjxzcGFuPnN0YXJ0IDogc2tpcCAiPHNwYW4+PHNwYW4+IgorICAgIC8vIDIuIEZpbmQgdGhlIGVu
ZCBjYW5kaWRhdGUgYnkgc2tpcHBpbmcgbm9uLWNvbnRlbnQgaXRlbXMgaW5iZXR3ZWVuIGUuZy4g
PHNwYW4+PHNwYW4+c3RhcnQ8L3NwYW4+ZW5kOiBza2lwICI8L3NwYW4+IgorICAgIC8vIDMuIENo
ZWNrIGlmIHRoZXJlJ3MgYSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHkgYmV0d2VlbiB0aGUgMiBjYW5k
aWRhdGUgaW5saW5lIGl0ZW1zIGFuZCByZXBlYXQuCisgICAgLy8gNC4gQW55IGZvcmNlIGxpbmUg
YnJlYWsgaW5iZXR3ZWVuIGlzIGNvbnNpZGVyZWQgYXMgYSB3cmFwIG9wcG9ydHVuaXR5LgorCisg
ICAgLy8gW2V4LV1bY29udGFpbmVyIHN0YXJ0XVtjb250YWluZXIgZW5kXVtmbG9hdF1bYW1wbGVd
IChleC08c3Bhbj48L3NwYW4+PGRpdiBzdHlsZT0iZmxvYXQ6bGVmdCI+PC9kaXY+YW1wbGUpIDog
d3JhcCBpbmRleCBpcyBhdCBbZXgtXS4KKyAgICAvLyBbZXhdW2NvbnRhaW5lciBzdGFydF1bYW1w
LV1bY29udGFpbmVyIHN0YXJ0XVtsZV0gKGV4PHNwYW4+YW1wLTxzcGFuPmFtcGxlKSA6IHdyYXAg
aW5kZXggaXMgYXQgW2FtcC1dLgorICAgIC8vIFtleC1dW2NvbnRhaW5lciBzdGFydF1bbGluZSBi
cmVha11bYW1wbGVdIChleC08c3Bhbj48YnI+YW1wbGUpIDogd3JhcCBpbmRleCBpcyBhZnRlciBb
YnJdLgorICAgIGF1dG8gaXNBdExpbmVCcmVhayA9IGZhbHNlOworCisgICAgYXV0byBpbmxpbmVJ
dGVtSW5kZXhXaXRoQ29udGVudCA9IFsmXSAoYXV0byBpbmRleCkgeworICAgICAgICAvLyBOb3Rl
IHRoYXQgZmxvYXRzIGFyZSBub3QgcGFydCBvZiB0aGUgaW5saW5lIGNvbnRlbnQuIFdlIHNob3Vs
ZCB0cmVhdCB0aGVtIGFzIGlmIHRoZXkgd2VyZSBub3QgaGVyZSBhcyBmYXIgYXMgd3JhcCBvcHBv
cnR1bml0aWVzIGFyZSBjb25jZXJuZWQuCisgICAgICAgIC8vIFt0ZXh0XVtmbG9hdCBib3hdW3Rl
eHRdIGlzIGVzc2VudGlhbGx5IGp1c3QgW3RleHRdW3RleHRdCisgICAgICAgIGZvciAoOyBpbmRl
eCA8IGxheW91dFJhbmdlLmVuZDsgKytpbmRleCkgeworICAgICAgICAgICAgYXV0byYgaW5saW5l
SXRlbSA9IGlubGluZUNvbnRlbnRbaW5kZXhdOworICAgICAgICAgICAgaWYgKGlubGluZUl0ZW0u
aXNUZXh0KCkgfHwgaW5saW5lSXRlbS5pc0JveCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICAgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpIHsKKyAgICAg
ICAgICAgICAgICBpc0F0TGluZUJyZWFrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxheW91dFJh
bmdlLmVuZDsKKyAgICB9OworCisgICAgLy8gU3RhcnQgYXQgdGhlIGZpcnN0IGlubGluZSBpdGVt
IHdpdGggY29udGVudC4KKyAgICAvLyBbY29udGFpbmVyIHN0YXJ0XVtleC1dIDogc3RhcnQgYXQg
W2V4LV0KKyAgICBhdXRvIHN0YXJ0Q29udGVudEluZGV4ID0gaW5saW5lSXRlbUluZGV4V2l0aENv
bnRlbnQoc3RhcnRJbmRleCk7CisgICAgaWYgKGlzQXRMaW5lQnJlYWspIHsKKyAgICAgICAgLy8g
Q29udGVudCBzdGFydHMgd2l0aCBhIGxpbmUgYnJlYWsuIFRoZSB3cmFwIHBvc2l0aW9uIGlzIGFm
dGVyIHRoZSBsaW5lIGJyZWFrLgorICAgICAgICByZXR1cm4gc3RhcnRDb250ZW50SW5kZXggKyAx
OworICAgIH0KKworICAgIHdoaWxlIChzdGFydENvbnRlbnRJbmRleCA8IGxheW91dFJhbmdlLmVu
ZCkgeworICAgICAgICAvLyAxLiBGaW5kIHRoZSBuZXh0IGlubGluZSBpdGVtIHdpdGggY29udGVu
dC4KKyAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlcmUncyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0
eSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgdGhlIG5leHQgaW5saW5lIGl0ZW0uCisgICAgICAgIGF1
dG8gbmV4dENvbnRlbnRJbmRleCA9IGlubGluZUl0ZW1JbmRleFdpdGhDb250ZW50KHN0YXJ0Q29u
dGVudEluZGV4ICsgMSk7CisgICAgICAgIGlmIChuZXh0Q29udGVudEluZGV4ID09IGxheW91dFJh
bmdlLmVuZCkKKyAgICAgICAgICAgIHJldHVybiBuZXh0Q29udGVudEluZGV4OworICAgICAgICBp
ZiAoaXNBdExpbmVCcmVhaykgeworICAgICAgICAgICAgLy8gV2UgYWx3YXlzIHN0b3AgYXQgbGlu
ZSBicmVha3MuIFRoZSB3cmFwIHBvc2l0aW9uIGlzIGFmdGVyIHRoZSBsaW5lIGJyZWFrLgorICAg
ICAgICAgICAgcmV0dXJuIG5leHRDb250ZW50SW5kZXggKyAxOworICAgICAgICB9CisgICAgICAg
IGlmIChpc0F0U29mdFdyYXBPcHBvcnR1bml0eShpbmxpbmVDb250ZW50W3N0YXJ0Q29udGVudElu
ZGV4XSwgaW5saW5lQ29udGVudFtuZXh0Q29udGVudEluZGV4XSkpIHsKKyAgICAgICAgICAgIC8v
IFRoZXJlJ3MgYSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHkgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIHRo
ZSBuZXh0Q29udGVudC4KKyAgICAgICAgICAgIC8vIE5vdyBmb3J3YXJkLWZpbmQgZnJvbSB0aGUg
c3RhcnQgcG9zaXRpb24gdG8gc2VlIHdoZXJlIHdlIGNhbiBhY3R1YWxseSB3cmFwLgorICAgICAg
ICAgICAgLy8gW2V4LV1bYW1wbGVdIHZzLiBbZXgtXVtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5l
ciBlbmRdW2FtcGxlXQorICAgICAgICAgICAgLy8gd2hlcmUgW2V4LV0gaXMgc3RhcnRDb250ZW50
IGFuZCBbYW1wbGVdIGlzIHRoZSBuZXh0Q29udGVudC4KKyAgICAgICAgICAgIGZvciAoYXV0byBj
YW5kaWRhdGVJbmRleCA9IHN0YXJ0Q29udGVudEluZGV4ICsgMTsgY2FuZGlkYXRlSW5kZXggPCBu
ZXh0Q29udGVudEluZGV4OyArK2NhbmRpZGF0ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYg
KGlubGluZUNvbnRlbnRbY2FuZGlkYXRlSW5kZXhdLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBpbmxpbmUgY29udGVudCBhbmQgW2NvbnRhaW5lciBzdGFydF0g
YW5kIFtjb250YWluZXIgZW5kXSBmb3JtIHVuYnJlYWthYmxlIGNvbnRlbnQuCisgICAgICAgICAg
ICAgICAgICAgIC8vIGV4LTxzcGFuPjwvc3Bhbj5hbXBsZSAgOiB3cmFwIG9wcG9ydHVuaXR5IGlz
IGFmdGVyICJleC0iLgorICAgICAgICAgICAgICAgICAgICAvLyBleC08L3NwYW4+PC9zcGFuPmFt
cGxlIDogd3JhcCBvcHBvcnR1bml0eSBpcyBhZnRlciAiZXgtPC9zcGFuPjwvc3Bhbj4iLgorICAg
ICAgICAgICAgICAgICAgICAvLyBleC08L3NwYW4+PHNwYW4+YW1wbGU8L3NwYW4+IDogd3JhcCBv
cHBvcnR1bml0eSBpcyBhZnRlciAiZXgtPC9zcGFuPiIuCisgICAgICAgICAgICAgICAgICAgIC8v
IGV4LTxzcGFuPjxzcGFuPmFtcGxlPC9zcGFuPjwvc3Bhbj4gOiB3cmFwIG9wcG9ydHVuaXR5IGlz
IGFmdGVyICJleC0iLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlSW5kZXg7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5l
eHRDb250ZW50SW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgc3RhcnRDb250ZW50SW5kZXggPSBu
ZXh0Q29udGVudEluZGV4OworICAgIH0KKyAgICByZXR1cm4gbGF5b3V0UmFuZ2UuZW5kOworfQor
CitzdHJ1Y3QgTGluZUNhbmRpZGF0ZSB7CisgICAgdm9pZCByZXNldCgpOworCisgICAgc3RydWN0
IElubGluZUNvbnRlbnQgeworICAgICAgICBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVu
cygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lUnVuczsgfQorICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fTG9naWNhbFdpZHRoOyB9CisgICAg
ICAgIGNvbnN0IElubGluZUl0ZW0qIHRyYWlsaW5nTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4g
bV90cmFpbGluZ0xpbmVCcmVhazsgfQorCisgICAgICAgIHZvaWQgYXBwZW5kSW5saW5lSXRlbShj
b25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOworICAgICAg
ICB2b2lkIGFwcGVuZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKSB7IHNl
dFRyYWlsaW5nTGluZUJyZWFrKGlubGluZUl0ZW0pOyB9CisgICAgICAgIHZvaWQgcmVzZXQoKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0VHJhaWxpbmdMaW5lQnJlYWsoY29uc3Qg
SW5saW5lSXRlbSYgbGluZUJyZWFrSXRlbSkgeyBtX3RyYWlsaW5nTGluZUJyZWFrID0gJmxpbmVC
cmVha0l0ZW07IH0KKworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fTG9naWNhbFdpZHRoIHsg
MCB9OworICAgICAgICBMaW5lQnJlYWtlcjo6UnVuTGlzdCBtX2lubGluZVJ1bnM7CisgICAgICAg
IGNvbnN0IElubGluZUl0ZW0qIG1fdHJhaWxpbmdMaW5lQnJlYWsgeyBudWxscHRyIH07CisgICAg
fTsKKworICAgIHN0cnVjdCBGbG9hdENvbnRlbnQgeworICAgICAgICB2b2lkIGFwcGVuZChjb25z
dCBJbmxpbmVJdGVtJiBmbG9hdEl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBi
b29sIGlzSW50cnVzaXZlKTsKKworICAgICAgICBzdHJ1Y3QgRmxvYXQgeworICAgICAgICAgICAg
Y29uc3QgSW5saW5lSXRlbSogaXRlbSB7IG51bGxwdHIgfTsKKyAgICAgICAgICAgIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFdpZHRoIHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0ludHJ1c2l2
ZSB7IHRydWUgfTsKKyAgICAgICAgfTsKKyAgICAgICAgdXNpbmcgRmxvYXRMaXN0ID0gVmVjdG9y
PEZsb2F0PjsKKyAgICAgICAgY29uc3QgRmxvYXRMaXN0JiBsaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9mbG9hdExpc3Q7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBpbnRydXNpdmVXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1faW50cnVzaXZlV2lkdGg7IH0KKworICAgICAgICB2b2lkIHJlc2V0
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBGbG9hdExpc3QgbV9mbG9hdExpc3Q7CisgICAg
ICAgIElubGluZUxheW91dFVuaXQgbV9pbnRydXNpdmVXaWR0aCB7IDAgfTsKKyAgICB9OworICAg
IC8vIENhbmRpZGF0ZSBjb250ZW50IGlzIGEgY29sbGVjdGlvbiBvZiBpbmxpbmUgaXRlbXMgYW5k
L29yIGZsb2F0IGJveGVzLgorICAgIElubGluZUNvbnRlbnQgaW5saW5lQ29udGVudDsKKyAgICBG
bG9hdENvbnRlbnQgZmxvYXRDb250ZW50OworfTsKKworaW5saW5lIHZvaWQgTGluZUNhbmRpZGF0
ZTo6SW5saW5lQ29udGVudDo6YXBwZW5kSW5saW5lSXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKK3sKKyAgICBtX0xvZ2ljYWxX
aWR0aCArPSBsb2dpY2FsV2lkdGg7CisgICAgbV9pbmxpbmVSdW5zLmFwcGVuZCh7IGlubGluZUl0
ZW0sIGxvZ2ljYWxXaWR0aCB9KTsKK30KKworaW5saW5lIHZvaWQgTGluZUNhbmRpZGF0ZTo6SW5s
aW5lQ29udGVudDo6cmVzZXQoKQoreworICAgIG1fTG9naWNhbFdpZHRoID0geyB9OworICAgIG1f
aW5saW5lUnVucy5jbGVhcigpOworICAgIG1fdHJhaWxpbmdMaW5lQnJlYWsgPSB7IH07Cit9CisK
K2lubGluZSB2b2lkIExpbmVDYW5kaWRhdGU6OkZsb2F0Q29udGVudDo6YXBwZW5kKGNvbnN0IElu
bGluZUl0ZW0mIGZsb2F0SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wg
aXNJbnRydXNpdmUpCit7CisgICAgaWYgKGlzSW50cnVzaXZlKQorICAgICAgICBtX2ludHJ1c2l2
ZVdpZHRoICs9IGxvZ2ljYWxXaWR0aDsKKyAgICBtX2Zsb2F0TGlzdC5hcHBlbmQoeyAmZmxvYXRJ
dGVtLCBsb2dpY2FsV2lkdGgsIGlzSW50cnVzaXZlIH0pOworfQorCitpbmxpbmUgdm9pZCBMaW5l
Q2FuZGlkYXRlOjpGbG9hdENvbnRlbnQ6OnJlc2V0KCkKK3sKKyAgICBtX2Zsb2F0TGlzdC5jbGVh
cigpOworICAgIG1faW50cnVzaXZlV2lkdGggPSB7IH07Cit9CisKK2lubGluZSB2b2lkIExpbmVD
YW5kaWRhdGU6OnJlc2V0KCkKK3sKKyAgICBmbG9hdENvbnRlbnQucmVzZXQoKTsKKyAgICBpbmxp
bmVDb250ZW50LnJlc2V0KCk7Cit9CisKK0lubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6Omlu
bGluZUl0ZW1XaWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3QKK3sKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0
ZW0+KGlubGluZUl0ZW0pKSB7CisgICAgICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93bmNh
c3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOworICAgICAgICBpZiAoYXV0byBjb250ZW50
V2lkdGggPSBpbmxpbmVUZXh0SXRlbS53aWR0aCgpKQorICAgICAgICAgICAgcmV0dXJuICpjb250
ZW50V2lkdGg7CisgICAgICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzaWJs
ZSgpID8gaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSArIDEgOiBpbmxpbmVUZXh0SXRlbS5lbmQoKTsK
KyAgICAgICAgcmV0dXJuIFRleHRVdGlsOjp3aWR0aChpbmxpbmVUZXh0SXRlbSwgaW5saW5lVGV4
dEl0ZW0uc3RhcnQoKSwgZW5kLCBjb250ZW50TG9naWNhbExlZnQpOworICAgIH0KKworICAgIGlm
IChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0
byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKKyAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
KTsKKworICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAg
cmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveFdpZHRoKCk7CisKKyAgICBpZiAobGF5b3V0Qm94
LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LndpZHRoKCk7CisK
KyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkpCisgICAgICAgIHJldHVybiBi
b3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpICsgYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpICsgYm94
R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOworCisgICAgaWYgKGlubGluZUl0ZW0u
aXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkVuZCgp
ICsgYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgp
LnZhbHVlT3IoMCk7CisKKyAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxp
bmUtYmxvY2spCisgICAgcmV0dXJuIGJveEdlb21ldHJ5LndpZHRoKCk7Cit9CisKK0xpbmVCdWls
ZGVyOjpMaW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9y
bWF0dGluZ0NvbnRleHQsIGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290
LCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCisgICAgOiBtX2lubGluZUZvcm1hdHRp
bmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9mb3JtYXR0aW5nQ29u
dGV4dFJvb3QoZm9ybWF0dGluZ0NvbnRleHRSb290KQorICAgICwgbV9pbmxpbmVJdGVtcyhpbmxp
bmVJdGVtcykKK3sKK30KKworTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjps
YXlvdXRJbmxpbmVDb250ZW50KExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5
b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgp
Cit7CisgICAgQVNTRVJUKG1fZmxvYXRzLmlzRW1wdHkoKSk7CisgICAgbV9wYXJ0aWFsTGVhZGlu
Z1RleHRJdGVtID0geyB9OworICAgIG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0gPSB7IH07Cisg
ICAgYXV0byBsaW5lQnJlYWtlciA9IExpbmVCcmVha2VyIHsgfTsKKyAgICBhdXRvIGN1cnJlbnRJ
dGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydDsKKyAgICB1bnNpZ25lZCBjb21taXR0ZWRJbmxp
bmVJdGVtQ291bnQgPSAwOworICAgIGF1dG8gbGluZUNhbmRpZGF0ZSA9IExpbmVDYW5kaWRhdGUg
eyB9OworICAgIHdoaWxlIChjdXJyZW50SXRlbUluZGV4IDwgbGF5b3V0UmFuZ2UuZW5kKSB7Cisg
ICAgICAgIC8vIDEuIENvbGxlY3QgdGhlIHNldCBvZiBydW5zIHRoYXQgd2UgY2FuIGNvbW1pdCB0
byB0aGUgbGluZSBhcyBvbmUgZW50aXR5IGUuZy4gPHNwYW4+dGV4dF9hbmRfc3Bhbl9zdGFydF9z
cGFuX2VuZDwvc3Bhbj4uCisgICAgICAgIC8vIDIuIEFwcGx5IGZsb2F0cyBhbmQgc2hyaW5rIHRo
ZSBhdmFpbGFibGUgaG9yaXpvbnRhbCBzcGFjZSBlLmcuIDxzcGFuPmludHJ1XzxkaXYgc3R5bGU9
ImZsb2F0OiBsZWZ0Ij48L2Rpdj5zaXZlX2Zsb2F0PC9zcGFuPi4KKyAgICAgICAgLy8gMy4gQ2hl
Y2sgaWYgdGhlIGNvbnRlbnQgZml0cyB0aGUgbGluZSBhbmQgY29tbWl0IHRoZSBjb250ZW50IGFj
Y29yZGluZ2x5IChmdWxsLCBwYXJ0aWFsIG9yIG5vdCBjb21taXQgYXQgYWxsKS4KKyAgICAgICAg
Ly8gNC4gUmV0dXJuIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGVpdGhlciBieSBu
b3QgYmVpbmcgYWJsZSB0byBmaXQgbW9yZSBjb250ZW50IG9yIGJlY2F1c2Ugb2YgYW4gZXhwbGlj
aXQgbGluZSBicmVhay4KKyAgICAgICAgbmV4dENvbnRlbnRGb3JMaW5lKGxpbmVDYW5kaWRhdGUs
IGN1cnJlbnRJdGVtSW5kZXgsIGxheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5n
dGgsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSArIGxpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgp
LCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CisgICAgICAgIC8vIE5vdyBjaGVjayBpZiB3
ZSBjYW4gcHV0IHRoaXMgY29udGVudCBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICBhdXRv
IHJlc3VsdCA9IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQobGluZUJyZWFrZXIsIGxpbmUs
IGxheW91dFJhbmdlLCBsaW5lQ2FuZGlkYXRlKTsKKyAgICAgICAgY29tbWl0dGVkSW5saW5lSXRl
bUNvdW50ID0gcmVzdWx0LmNvbW1pdHRlZENvdW50LmlzUmV2ZXJ0ID8gcmVzdWx0LmNvbW1pdHRl
ZENvdW50LnZhbHVlIDogY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ICsgcmVzdWx0LmNvbW1pdHRl
ZENvdW50LnZhbHVlOworICAgICAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gbGluZUNhbmRpZGF0
ZS5pbmxpbmVDb250ZW50OworICAgICAgICBhdXRvIGlubGluZUNvbnRlbnRJc0Z1bGx5Q29tbWl0
dGVkID0gaW5saW5lQ29udGVudC5ydW5zKCkuc2l6ZSgpID09IHJlc3VsdC5jb21taXR0ZWRDb3Vu
dC52YWx1ZSAmJiAhcmVzdWx0LnBhcnRpYWxDb250ZW50OworICAgICAgICBhdXRvIGlzRW5kT2ZM
aW5lID0gcmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVz
OworCisgICAgICAgIGlmIChpbmxpbmVDb250ZW50SXNGdWxseUNvbW1pdHRlZCAmJiBpbmxpbmVD
b250ZW50LnRyYWlsaW5nTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIC8vIEZ1bGx5IGNvbW1p
dGVkIChvciBlbXB0eSkgY29udGVudCBmb2xsb3dlZCBieSBhIGxpbmUgYnJlYWsgbWVhbnMgImVu
ZCBvZiBsaW5lIi4KKyAgICAgICAgICAgIGxpbmUuYXBwZW5kKCppbmxpbmVDb250ZW50LnRyYWls
aW5nTGluZUJyZWFrKCksIHsgfSk7CisgICAgICAgICAgICArK2NvbW1pdHRlZElubGluZUl0ZW1D
b3VudDsKKyAgICAgICAgICAgIGlzRW5kT2ZMaW5lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaXNFbmRPZkxpbmUpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IHBsYWNlIGFueSBt
b3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgICAgICByZXR1cm4gY2xvc2Uo
bGluZSwgbGF5b3V0UmFuZ2UsIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgcmVzdWx0LnBhcnRp
YWxDb250ZW50KTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50SXRlbUluZGV4ID0gbGF5b3V0
UmFuZ2Uuc3RhcnQgKyBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyBtX2Zsb2F0cy5zaXplKCk7
CisgICAgICAgIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHsgfTsKKyAgICB9CisgICAg
Ly8gTG9va3MgbGlrZSB3ZSd2ZSBydW4gb3V0IG9mIHJ1bnMuCisgICAgcmV0dXJuIGNsb3NlKGxp
bmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHsgfSk7Cit9CisKK0xp
bmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5lQnVpbGRlcjo6Y2xvc2UoY29uc3QgTGluZSYgbGlu
ZSwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVk
SW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+IHBh
cnRpYWxDb250ZW50KQoreworICAgIEFTU0VSVF9VTlVTRUQobGluZSwgY29tbWl0dGVkSW5saW5l
SXRlbUNvdW50IHx8ICFtX2Zsb2F0cy5pc0VtcHR5KCkgfHwgbGluZS5oYXNJbnRydXNpdmVGbG9h
dCgpKTsKKyAgICBhdXRvIG51bWJlck9mQ29tbWl0dGVkSXRlbXMgPSBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQgKyBtX2Zsb2F0cy5zaXplKCk7CisgICAgYXV0byB0cmFpbGluZ0lubGluZUl0ZW1J
bmRleCA9IGxheW91dFJhbmdlLnN0YXJ0ICsgbnVtYmVyT2ZDb21taXR0ZWRJdGVtcyAtIDE7Cisg
ICAgYXV0byBsaW5lUmFuZ2UgPSBJbmxpbmVJdGVtUmFuZ2UgeyBsYXlvdXRSYW5nZS5zdGFydCwg
dHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggKyAxIH07CisgICAgQVNTRVJUKGxpbmVSYW5nZS5lbmQg
PD0gbGF5b3V0UmFuZ2UuZW5kKTsKKyAgICAvLyBBZGp1c3QgaHlwaGVuYXRlZCBsaW5lIGNvdW50
LgorICAgIG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQgPSBwYXJ0aWFsQ29udGVudCAm
JiBwYXJ0aWFsQ29udGVudC0+dHJhaWxpbmdDb250ZW50SGFzSHlwaGVuID8gbV9zdWNjZXNzaXZl
SHlwaGVuYXRlZExpbmVDb3VudCArIDEgOiAwOworICAgIHJldHVybiBMaW5lQ29udGVudCB7IHBh
cnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIFdURk1vdmUobV9mbG9hdHMpLCBsaW5lLnJ1bnMoKSB9
OworfQorCit2b2lkIExpbmVCdWlsZGVyOjpuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0
ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3VycmVudElubGluZUl0ZW1JbmRleCwgY29uc3Qg
SW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxM
ZWFkaW5nQ29udGVudExlbmd0aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgs
IElubGluZUxheW91dFVuaXQgY3VycmVudExvZ2ljYWxSaWdodCkKK3sKKyAgICBBU1NFUlQoY3Vy
cmVudElubGluZUl0ZW1JbmRleCA8IGxheW91dFJhbmdlLmVuZCk7CisgICAgbGluZUNhbmRpZGF0
ZS5yZXNldCgpOworICAgIC8vIDEuIFNpbXBseSBhZGQgYW55IG92ZXJmbG93IGNvbnRlbnQgZnJv
bSB0aGUgcHJldmlvdXMgbGluZSB0byB0aGUgY2FuZGlkYXRlIGNvbnRlbnQuIEl0J3MgYWx3YXlz
IGEgdGV4dCBjb250ZW50LgorICAgIC8vIDIuIEZpbmQgdGhlIG5leHQgc29mdCB3cmFwIHBvc2l0
aW9uIG9yIGV4cGxpY2l0IGxpbmUgYnJlYWsuCisgICAgLy8gMy4gQ29sbGVjdCBmbG9hdHMgYmV0
d2VlbiB0aGUgaW5saW5lIGNvbnRlbnQuCisgICAgYXV0byBzb2Z0V3JhcE9wcG9ydHVuaXR5SW5k
ZXggPSBuZXh0V3JhcE9wcG9ydHVuaXR5KG1faW5saW5lSXRlbXMsIGN1cnJlbnRJbmxpbmVJdGVt
SW5kZXgsIGxheW91dFJhbmdlKTsKKyAgICAvLyBzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXggPT0g
bGF5b3V0UmFuZ2UuZW5kIG1lYW5zIHdlIGRvbid0IGhhdmUgYW55IHdyYXAgb3Bwb3J0dW5pdHkg
aW4gdGhpcyBjb250ZW50LgorICAgIEFTU0VSVChzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXggPD0g
bGF5b3V0UmFuZ2UuZW5kKTsKKworICAgIGlmIChwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgp
IHsKKyAgICAgICAgLy8gSGFuZGxlIGxlYWRpbmcgcGFydGlhbCBjb250ZW50IGZpcnN0IChzcGxp
dCB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUpLgorICAgICAgICAvLyBDb25zdHJ1Y3QgYSBw
YXJ0aWFsIGxlYWRpbmcgaW5saW5lIGl0ZW0uCisgICAgICAgIG1fcGFydGlhbExlYWRpbmdUZXh0
SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihtX2lubGluZUl0ZW1zW2N1cnJlbnRJbmxp
bmVJdGVtSW5kZXhdKS5yaWdodCgqcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICAg
ICAgYXV0byBpdGVtV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgoKm1fcGFydGlhbExlYWRpbmdUZXh0
SXRlbSwgY3VycmVudExvZ2ljYWxSaWdodCk7CisgICAgICAgIGxpbmVDYW5kaWRhdGUuaW5saW5l
Q29udGVudC5hcHBlbmRJbmxpbmVJdGVtKCptX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0sIGl0ZW1X
aWR0aCk7CisgICAgICAgIGN1cnJlbnRMb2dpY2FsUmlnaHQgKz0gaXRlbVdpZHRoOworICAgICAg
ICArK2N1cnJlbnRJbmxpbmVJdGVtSW5kZXg7CisgICAgfQorCisgICAgYXV0byBhY2N1bXVsYXRl
ZFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgZm9yIChhdXRvIGluZGV4ID0gY3Vy
cmVudElubGluZUl0ZW1JbmRleDsgaW5kZXggPCBzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXg7ICsr
aW5kZXgpIHsKKyAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IG1faW5saW5lSXRlbXNbaW5kZXhd
OworICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0Zsb2F0KCkpIHsKKyAgICAgICAgICAgIC8vIEZs
b2F0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGxpbmUgY29udGV4dC4KKyAgICAgICAgICAgIGF1dG8g
ZmxvYXRXaWR0aCA9IGlubGluZUl0ZW1XaWR0aChpbmxpbmVJdGVtLCB7IH0pOworICAgICAgICAg
ICAgbGluZUNhbmRpZGF0ZS5mbG9hdENvbnRlbnQuYXBwZW5kKGlubGluZUl0ZW0sIGZsb2F0V2lk
dGgsIGZsb2F0V2lkdGggPD0gKGF2YWlsYWJsZUxpbmVXaWR0aCAtIGFjY3VtdWxhdGVkV2lkdGgp
KTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVkV2lkdGggKz0gZmxvYXRXaWR0aDsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzVGV4dCgp
IHx8IGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IGlubGluZUl0ZW0uaXNDb250YWlu
ZXJFbmQoKSB8fCBpbmxpbmVJdGVtLmlzQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaW5saW5l
SXRlbm1XaWR0aCA9IGlubGluZUl0ZW1XaWR0aChpbmxpbmVJdGVtLCBjdXJyZW50TG9naWNhbFJp
Z2h0KTsKKyAgICAgICAgICAgIGxpbmVDYW5kaWRhdGUuaW5saW5lQ29udGVudC5hcHBlbmRJbmxp
bmVJdGVtKGlubGluZUl0ZW0sIGlubGluZUl0ZW5tV2lkdGgpOworICAgICAgICAgICAgY3VycmVu
dExvZ2ljYWxSaWdodCArPSBpbmxpbmVJdGVubVdpZHRoOworICAgICAgICAgICAgYWNjdW11bGF0
ZWRXaWR0aCArPSBpbmxpbmVJdGVubVdpZHRoOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAg
ICAgbGluZUNhbmRpZGF0ZS5pbmxpbmVDb250ZW50LmFwcGVuZExpbmVCcmVhayhpbmxpbmVJdGVt
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRzKExp
bmUmIGxpbmUsIGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1
c2l2ZUZsb2F0c09ubHkgY29tbWl0SW50cnVzaXZlT25seSkKK3sKKyAgICBhdXRvJiBmbG9hdENv
bnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmZsb2F0Q29udGVudDsKKyAgICBhdXRvIGxlZnRJbnRydXNp
dmVGbG9hdHNXaWR0aCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGF1dG8gcmlnaHRJbnRy
dXNpdmVGbG9hdHNXaWR0aCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGF1dG8gaGFzSW50
cnVzaXZlRmxvYXQgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byYgZmxvYXRDYW5kaWRhdGUgOiBm
bG9hdENvbnRlbnQubGlzdCgpKSB7CisgICAgICAgIGlmICghZmxvYXRDYW5kaWRhdGUuaXNJbnRy
dXNpdmUgJiYgY29tbWl0SW50cnVzaXZlT25seSA9PSBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5
OjpZZXMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9mbG9hdHMuYXBwZW5kKHsg
ZmxvYXRDYW5kaWRhdGUuaXNJbnRydXNpdmUsIGZsb2F0Q2FuZGlkYXRlLml0ZW0gfSk7CisgICAg
ICAgIGlmIChmbG9hdENhbmRpZGF0ZS5pc0ludHJ1c2l2ZSkgeworICAgICAgICAgICAgaGFzSW50
cnVzaXZlRmxvYXQgPSB0cnVlOworICAgICAgICAgICAgLy8gVGhpcyBmbG9hdCBpcyBpbnRydXNp
dmUgYW5kIGl0IHNocmlua3MgdGhlIGN1cnJlbnQgbGluZS4KKyAgICAgICAgICAgIC8vIFNocmlu
ayBhdmFpbGFibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGluZS4KKyAgICAgICAgICAgIGlmIChmbG9h
dENhbmRpZGF0ZS5pdGVtLT5sYXlvdXRCb3goKS5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSkK
KyAgICAgICAgICAgICAgICBsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGggKz0gZmxvYXRDYW5kaWRh
dGUubG9naWNhbFdpZHRoOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJpZ2h0
SW50cnVzaXZlRmxvYXRzV2lkdGggKz0gZmxvYXRDYW5kaWRhdGUubG9naWNhbFdpZHRoOworICAg
ICAgICB9CisgICAgfQorICAgIGxpbmUuc2V0SGFzSW50cnVzaXZlRmxvYXQoaGFzSW50cnVzaXZl
RmxvYXQpOworICAgIGlmIChsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGggfHwgcmlnaHRJbnRydXNp
dmVGbG9hdHNXaWR0aCkgeworICAgICAgICBpZiAobGVmdEludHJ1c2l2ZUZsb2F0c1dpZHRoKQor
ICAgICAgICAgICAgbGluZS5tb3ZlTG9naWNhbExlZnQobGVmdEludHJ1c2l2ZUZsb2F0c1dpZHRo
KTsKKyAgICAgICAgaWYgKHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpCisgICAgICAgICAgICBs
aW5lLm1vdmVMb2dpY2FsUmlnaHQocmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CisgICAgfQor
fQorCitMaW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxp
bmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5lQnJlYWtlciwgTGluZSYgbGluZSwgY29uc3QgSW5s
aW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRp
ZGF0ZSkKK3sKKyAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gbGluZUNhbmRpZGF0ZS5pbmxpbmVD
b250ZW50OworICAgIGF1dG8mIGNhbmRpZGF0ZVJ1bnMgPSBpbmxpbmVDb250ZW50LnJ1bnMoKTsK
KyAgICBpZiAoY2FuZGlkYXRlUnVucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tbWl0RmxvYXRz
KGxpbmUsIGxpbmVDYW5kaWRhdGUpOworICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNF
bmRPZkxpbmU6Ok5vIH07CisgICAgfQorCisgICAgYXV0byBzaG91bGREaXNhYmxlSHlwaGVuYXRp
b24gPSBbJl0geworICAgICAgICBhdXRvJiBzdHlsZSA9IHJvb3QoKS5zdHlsZSgpOworICAgICAg
ICB1bnNpZ25lZCBsaW1pdExpbmVzID0gc3R5bGUuaHlwaGVuYXRpb25MaW1pdExpbmVzKCkgPT0g
UmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvbkxpbWl0TGluZXMoKSA/IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRMaW5lcygp
OworICAgICAgICByZXR1cm4gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA+PSBsaW1p
dExpbmVzOworICAgIH07CisgICAgaWYgKHNob3VsZERpc2FibGVIeXBoZW5hdGlvbigpKQorICAg
ICAgICBsaW5lQnJlYWtlci5zZXRIeXBoZW5hdGlvbkRpc2FibGVkKCk7CisKKyAgICBhdXRvJiBm
bG9hdENvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmZsb2F0Q29udGVudDsKKyAgICAvLyBDaGVjayBp
ZiB0aGlzIG5ldyBjb250ZW50IGZpdHMuCisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmUu
YXZhaWxhYmxlV2lkdGgoKSAtIGZsb2F0Q29udGVudC5pbnRydXNpdmVXaWR0aCgpOworICAgIGF1
dG8gaXNMaW5lQ29uc2lkZXJlZEVtcHR5ID0gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSAmJiAhbGlu
ZS5oYXNJbnRydXNpdmVGbG9hdCgpOworICAgIGF1dG8gbGluZVN0YXR1cyA9IExpbmVCcmVha2Vy
OjpMaW5lU3RhdHVzIHsgYXZhaWxhYmxlV2lkdGgsIGxpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0
aCgpLCBsaW5lLmlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpLCBpc0xpbmVDb25zaWRlcmVk
RW1wdHkgfTsKKyAgICBhdXRvIHJlc3VsdCA9IGxpbmVCcmVha2VyLnNob3VsZFdyYXBJbmxpbmVD
b250ZW50KGNhbmRpZGF0ZVJ1bnMsIGlubGluZUNvbnRlbnQubG9naWNhbFdpZHRoKCksIGxpbmVT
dGF0dXMpOworICAgIGlmIChyZXN1bHQubGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0pCisgICAgICAg
IG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0gPSByZXN1bHQubGFzdFdyYXBPcHBvcnR1bml0eUl0
ZW07CisgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9u
OjpLZWVwKSB7CisgICAgICAgIC8vIFRoaXMgY29udGludW91cyBjb250ZW50IGNhbiBiZSBmdWxs
eSBwbGFjZWQgb24gdGhlIGN1cnJlbnQgbGluZSBpbmNsdWRpbmcgbm9uLWludHJ1c2l2ZSBmbG9h
dHMuCisgICAgICAgIGZvciAoYXV0byYgcnVuIDogY2FuZGlkYXRlUnVucykKKyAgICAgICAgICAg
IGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAg
Y29tbWl0RmxvYXRzKGxpbmUsIGxpbmVDYW5kaWRhdGUpOworICAgICAgICByZXR1cm4geyByZXN1
bHQuaXNFbmRPZkxpbmUsIHsgY2FuZGlkYXRlUnVucy5zaXplKCksIGZhbHNlIH0gfTsKKyAgICB9
CisgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpQ
dXNoKSB7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXNFbmRPZkxpbmUgPT0gTGluZUJyZWFrZXI6
OklzRW5kT2ZMaW5lOjpZZXMpOworICAgICAgICAvLyBUaGlzIGNvbnRpbnVvdXMgY29udGVudCBj
YW4ndCBiZSBwbGFjZWQgb24gdGhlIGN1cnJlbnQgbGluZS4gTm90aGluZyB0byBjb21taXQgYXQg
dGhpcyB0aW1lLgorICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6Olll
cyB9OworICAgIH0KKyAgICBpZiAocmVzdWx0LmFjdGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0
OjpBY3Rpb246OlJldmVydFRvTGFzdFdyYXBPcHBvcnR1bml0eSkgeworICAgICAgICBBU1NFUlQo
cmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKKyAg
ICAgICAgLy8gTm90IG9ubHkgdGhpcyBjb250ZW50IGNhbid0IGJlIHBsYWNlZCBvbiB0aGUgY3Vy
cmVudCBsaW5lLCBidXQgd2UgZXZlbiBuZWVkIHRvIHJldmVydCB0aGUgbGluZSBiYWNrIHRvIGFu
IGVhcmxpZXIgcG9zaXRpb24uCisgICAgICAgIEFTU0VSVChtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJ
dGVtKTsKKyAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsg
cmVidWlsZExpbmUobGluZSwgbGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsKKyAgICB9CisgICAgaWYg
KHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpTcGxpdCkgewor
ICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9m
TGluZTo6WWVzKTsKKyAgICAgICAgLy8gQ29tbWl0IHRoZSBjb21iaW5hdGlvbiBvZiBmdWxsIGFu
ZCBwYXJ0aWFsIGNvbnRlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KKyAgICAgICAgY29tbWl0Rmxv
YXRzKGxpbmUsIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHk6Olllcyk7
CisgICAgICAgIEFTU0VSVChyZXN1bHQucGFydGlhbFRyYWlsaW5nQ29udGVudCk7CisgICAgICAg
IGNvbW1pdFBhcnRpYWxDb250ZW50KGxpbmUsIGNhbmRpZGF0ZVJ1bnMsICpyZXN1bHQucGFydGlh
bFRyYWlsaW5nQ29udGVudCk7CisgICAgICAgIC8vIFdoZW4gc3BsaXR0aW5nIG11bHRpcGxlIHJ1
bnMgPHNwYW4gc3R5bGU9IndvcmQtYnJlYWs6IGJyZWFrLWFsbCI+dGV4dDwvc3Bhbj48c3Bhbj5j
b250ZW50PC9zcGFuPiwgd2UgbWlnaHQgZW5kIHVwIHNwbGl0dGluZyB0aGVtIGF0IHJ1biBib3Vu
ZGFyeS4KKyAgICAgICAgLy8gSXQgc2ltcGx5IG1lYW5zIHdlIGRvbid0IHJlYWxseSBoYXZlIGEg
cGFydGlhbCBydW4uIFBhcnRpYWwgY29udGVudCB5ZXMsIGJ1dCBub3QgcGFydGlhbCBydW4uCisg
ICAgICAgIGF1dG8gdHJhaWxpbmdSdW5JbmRleCA9IHJlc3VsdC5wYXJ0aWFsVHJhaWxpbmdDb250
ZW50LT50cmFpbGluZ1J1bkluZGV4OworICAgICAgICBhdXRvIGNvbW1pdHRlZElubGluZUl0ZW1D
b3VudCA9IHRyYWlsaW5nUnVuSW5kZXggKyAxOworICAgICAgICBpZiAoIXJlc3VsdC5wYXJ0aWFs
VHJhaWxpbmdDb250ZW50LT5wYXJ0aWFsUnVuKQorICAgICAgICAgICAgcmV0dXJuIHsgTGluZUJy
ZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBmYWxz
ZSB9IH07CisKKyAgICAgICAgYXV0byBwYXJ0aWFsUnVuID0gKnJlc3VsdC5wYXJ0aWFsVHJhaWxp
bmdDb250ZW50LT5wYXJ0aWFsUnVuOworICAgICAgICBhdXRvJiB0cmFpbGluZ0lubGluZVRleHRJ
dGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGNhbmRpZGF0ZVJ1bnNbdHJhaWxpbmdSdW5J
bmRleF0uaW5saW5lSXRlbSk7CisgICAgICAgIEFTU0VSVChwYXJ0aWFsUnVuLmxlbmd0aCA8IHRy
YWlsaW5nSW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpOworICAgICAgICBhdXRvIG92ZXJmbG93TGVu
Z3RoID0gdHJhaWxpbmdJbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSAtIHBhcnRpYWxSdW4ubGVuZ3Ro
OworICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6OlllcywgeyBjb21t
aXR0ZWRJbmxpbmVJdGVtQ291bnQsIGZhbHNlIH0sIExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVu
dCB7IHBhcnRpYWxSdW4ubmVlZHNIeXBoZW4sIG92ZXJmbG93TGVuZ3RoIH0gfTsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5k
T2ZMaW5lOjpObyB9OworfQorCit2b2lkIExpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVu
dChMaW5lJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVucywgY29uc3QgTGlu
ZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFydGlhbFRyYWlsaW5n
Q29udGVudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcnVucy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgcnVuID0gcnVuc1tpbmRleF07CisgICAgICAg
IGlmIChwYXJ0aWFsVHJhaWxpbmdDb250ZW50LnRyYWlsaW5nUnVuSW5kZXggPT0gaW5kZXgpIHsK
KyAgICAgICAgICAgIEFTU0VSVChydW4uaW5saW5lSXRlbS5pc1RleHQoKSk7CisgICAgICAgICAg
ICAvLyBDcmVhdGUgYW5kIGNvbW1pdCBwYXJ0aWFsIHRyYWlsaW5nIGl0ZW0uCisgICAgICAgICAg
ICBpZiAoYXV0byBwYXJ0aWFsUnVuID0gcGFydGlhbFRyYWlsaW5nQ29udGVudC5wYXJ0aWFsUnVu
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgdHJhaWxpbmdJbmxpbmVUZXh0SXRlbSA9IGRvd25j
YXN0PElubGluZVRleHRJdGVtPihydW5zW3BhcnRpYWxUcmFpbGluZ0NvbnRlbnQudHJhaWxpbmdS
dW5JbmRleF0uaW5saW5lSXRlbSk7CisgICAgICAgICAgICAgICAgYXV0byBwYXJ0aWFsVHJhaWxp
bmdUZXh0SXRlbSA9IHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0ubGVmdChwYXJ0aWFsUnVuLT5sZW5n
dGgpOworICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kUGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0o
cGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4tPmxvZ2ljYWxXaWR0aCwgcGFydGlh
bFJ1bi0+bmVlZHNIeXBoZW4pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIFRoZSBwYXJ0aWFsIHJ1biBpcyB0aGUgbGFzdCBjb250ZW50IHRv
IGNvbW1pdC4KKyAgICAgICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9n
aWNhbFdpZHRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsaW5l
LmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxvZ2ljYWxXaWR0aCk7CisgICAgfQorfQorCitz
aXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0
ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCit7CisgICAgLy8gQ2xlYXIgdGhlIGxpbmUgYW5kIHN0YXJ0
IGFwcGVuZGluZyB0aGUgaW5saW5lIGl0ZW1zIGNsb3Npbmcgd2l0aCB0aGUgbGFzdCB3cmFwIG9w
cG9ydHVuaXR5IHJ1bi4KKyAgICBsaW5lLmNsZWFyQ29udGVudCgpOworICAgIGF1dG8gY3VycmVu
dEl0ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0YXJ0OworICAgIGF1dG8gbG9naWNhbFJpZ2h0ID0g
SW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgaWYgKG1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSkg
eworICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1XaWR0aCgqbV9wYXJ0aWFs
TGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsUmlnaHQpOworICAgICAgICBsaW5lLmFwcGVuZCgqbV9w
YXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsV2lkdGgpOworICAgICAgICBsb2dpY2FsUmln
aHQgKz0gbG9naWNhbFdpZHRoOworICAgICAgICBpZiAoJm1fcGFydGlhbExlYWRpbmdUZXh0SXRl
bS52YWx1ZSgpID09IG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0pCisgICAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgKytjdXJyZW50SXRlbUluZGV4OworICAgIH0KKyAgICBmb3IgKDsgY3Vy
cmVudEl0ZW1JbmRleCA8IGxheW91dFJhbmdlLmVuZDsgKytjdXJyZW50SXRlbUluZGV4KSB7Cisg
ICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBtX2lubGluZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXhd
OworICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1XaWR0aChpbmxpbmVJdGVt
LCBsb2dpY2FsUmlnaHQpOworICAgICAgICBsaW5lLmFwcGVuZChpbmxpbmVJdGVtLCBsb2dpY2Fs
V2lkdGgpOworICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOworICAgICAgICBp
ZiAoJmlubGluZUl0ZW0gPT0gbV9sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSkKKyAgICAgICAgICAg
IHJldHVybiBjdXJyZW50SXRlbUluZGV4IC0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyAxOworICAgIH0K
KyAgICByZXR1cm4gbGF5b3V0UmFuZ2Uuc2l6ZSgpOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg4MDc5MjFjYjFhNWEyNzZmYzNjNjgxNzVjYTBl
MjNlMzg2YThlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCisKKyNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFr
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK3N0cnVj
dCBMaW5lQ2FuZGlkYXRlOworCitjbGFzcyBMaW5lQnVpbGRlciB7CitwdWJsaWM6CisgICAgTGlu
ZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBDb250YWluZXJC
b3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSW5saW5lSXRlbXMmKTsKKworICAgIHN0
cnVjdCBJbmxpbmVJdGVtUmFuZ2UgeworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBzdGFydCA9PSBlbmQ7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBlbmQgLSBzdGFydDsgfQorICAgICAgICBzaXplX3Qgc3RhcnQgeyAwIH07CisgICAgICAgIHNp
emVfdCBlbmQgeyAwIH07CisgICAgfTsKKyAgICBzdHJ1Y3QgTGluZUNvbnRlbnQgeworICAgICAg
ICBzdHJ1Y3QgUGFydGlhbENvbnRlbnQgeworICAgICAgICAgICAgYm9vbCB0cmFpbGluZ0NvbnRl
bnRIYXNIeXBoZW4geyBmYWxzZSB9OworICAgICAgICAgICAgdW5zaWduZWQgb3ZlcmZsb3dDb250
ZW50TGVuZ3RoIHsgMCB9OworICAgICAgICB9OworICAgICAgICBPcHRpb25hbDxQYXJ0aWFsQ29u
dGVudD4gcGFydGlhbENvbnRlbnQ7CisgICAgICAgIElubGluZUl0ZW1SYW5nZSBpbmxpbmVJdGVt
UmFuZ2U7CisgICAgICAgIHN0cnVjdCBGbG9hdCB7CisgICAgICAgICAgICBib29sIGlzSW50cnVz
aXZlIHsgdHJ1ZSB9OworICAgICAgICAgICAgY29uc3QgSW5saW5lSXRlbSogaXRlbSB7IG51bGxw
dHIgfTsKKyAgICAgICAgfTsKKyAgICAgICAgdXNpbmcgRmxvYXRMaXN0ID0gVmVjdG9yPEZsb2F0
PjsKKyAgICAgICAgRmxvYXRMaXN0IGZsb2F0czsKKyAgICAgICAgY29uc3QgTGluZTo6UnVuTGlz
dCYgcnVuczsKKyAgICB9OworICAgIExpbmVDb250ZW50IGxheW91dElubGluZUNvbnRlbnQoTGlu
ZSYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVh
ZGluZ0NvbnRlbnRMZW5ndGgpOworCitwcml2YXRlOgorICAgIHZvaWQgbmV4dENvbnRlbnRGb3JM
aW5lKExpbmVDYW5kaWRhdGUmLCB1bnNpZ25lZCBpbmxpbmVJdGVtSW5kZXgsIGNvbnN0IElubGlu
ZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0xlbmd0
aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQg
Y3VycmVudExvZ2ljYWxSaWdodCk7CisgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgIExpbmVC
cmVha2VyOjpJc0VuZE9mTGluZSBpc0VuZE9mTGluZSB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGlu
ZTo6Tm8gfTsKKyAgICAgICAgc3RydWN0IENvbW1pdHRlZENvbnRlbnRDb3VudCB7CisgICAgICAg
ICAgICBzaXplX3QgdmFsdWUgeyAwIH07CisgICAgICAgICAgICBib29sIGlzUmV2ZXJ0IHsgZmFs
c2UgfTsKKyAgICAgICAgfTsKKyAgICAgICAgQ29tbWl0dGVkQ29udGVudENvdW50IGNvbW1pdHRl
ZENvdW50IHsgfTsKKyAgICAgICAgT3B0aW9uYWwgPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVu
dD4gcGFydGlhbENvbnRlbnQgeyB9OworICAgIH07CisgICAgZW51bSBjbGFzcyBDb21taXRJbnRy
dXNpdmVGbG9hdHNPbmx5IHsgTm8sIFllcyB9OworICAgIHZvaWQgY29tbWl0RmxvYXRzKExpbmUm
LCBjb25zdCBMaW5lQ2FuZGlkYXRlJiwgQ29tbWl0SW50cnVzaXZlRmxvYXRzT25seSA9IENvbW1p
dEludHJ1c2l2ZUZsb2F0c09ubHk6Ok5vKTsKKyAgICBSZXN1bHQgaGFuZGxlRmxvYXRzQW5kSW5s
aW5lQ29udGVudChMaW5lQnJlYWtlciYsIExpbmUmLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxh
eW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJik7CisgICAgc2l6ZV90IHJlYnVpbGRMaW5l
KExpbmUmLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlKTsKKyAgICB2b2lkIGNv
bW1pdFBhcnRpYWxDb250ZW50KExpbmUmLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYsIGNv
bnN0IExpbmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQmKTsKKyAgICBM
aW5lQ29udGVudCBjbG9zZShjb25zdCBMaW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlv
dXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxMaW5l
Q29udGVudDo6UGFydGlhbENvbnRlbnQ+KTsKKworICAgIElubGluZUxheW91dFVuaXQgaW5saW5l
SXRlbVdpZHRoKGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsTGVmdCkgY29uc3Q7CisKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
OyB9CisgICAgY29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gbV9mb3Jt
YXR0aW5nQ29udGV4dFJvb3Q7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0
JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIGNvbnN0IENvbnRhaW5lckJveCYgbV9m
b3JtYXR0aW5nQ29udGV4dFJvb3Q7CisgICAgY29uc3QgSW5saW5lSXRlbXMmIG1faW5saW5lSXRl
bXM7CisgICAgTGluZUNvbnRlbnQ6OkZsb2F0TGlzdCBtX2Zsb2F0czsKKyAgICBPcHRpb25hbDxJ
bmxpbmVUZXh0SXRlbT4gbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtOworICAgIGNvbnN0IElubGlu
ZUl0ZW0qIG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0geyBudWxscHRyIH07CisgICAgdW5zaWdu
ZWQgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCB7IDAgfTsKK307CisKK30KK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
TGluZUxheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MmIwYTUyZmNiZjdkNWRhMWUyODNiMWU4NTIzMTYzZmRiNTlkMmU0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkxpbmVMYXlvdXRDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKLQotI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKLSNpbmNsdWRlICJJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1ZGUgIlRleHRVdGls
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1zdGF0aWMg
aW5saW5lIGJvb2wgZW5kc1dpdGhTb2Z0V3JhcE9wcG9ydHVuaXR5KGNvbnN0IElubGluZVRleHRJ
dGVtJiBjdXJyZW50VGV4dEl0ZW0sIGNvbnN0IElubGluZVRleHRJdGVtJiBuZXh0SW5saW5lVGV4
dEl0ZW0pCi17Ci0gICAgQVNTRVJUKCFuZXh0SW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkp
OwotICAgIC8vIFdlIGFyZSBhdCB0aGUgcG9zaXRpb24gYWZ0ZXIgYSB3aGl0ZXNwYWNlLgotICAg
IGlmIChjdXJyZW50VGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIC8vIFdoZW4gYm90aCB0aGVzZSBub24td2hpdGVzcGFjZSBydW5zIGJlbG9uZyB0byB0
aGUgc2FtZSBsYXlvdXQgYm94LCBpdCdzIGd1YXJhbnRlZWQgdGhhdAotICAgIC8vIHRoZXkgYXJl
IHNwbGl0IGF0IGEgc29mdCBicmVha2luZyBvcHBvcnR1bml0eS4gU2VlIElubGluZVRleHRJdGVt
Ojptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24uCi0gICAgaWYgKCZjdXJyZW50VGV4dEl0ZW0u
aW5saW5lVGV4dEJveCgpID09ICZuZXh0SW5saW5lVGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBOb3cgd2UgbmVlZCB0byBjb2xsZWN0IGF0IGxl
YXN0IDMgYWRqYWNlbnQgY2hhcmFjdGVycyB0byBiZSBhYmxlIHRvIG1ha2UgYSBkZWNpc2lvbiB3
aGV0aGVyIHRoZSBwcmV2aW91cyB0ZXh0IGl0ZW0gZW5kcyB3aXRoIGJyZWFraW5nIG9wcG9ydHVu
aXR5LgotICAgIC8vIFtleC1dW2FtcGxlXSA8LSBzZWNvbmQgdG8gbGFzdFt4XSBsYXN0Wy1dIGN1
cnJlbnRbYV0KLSAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDEgY2hhcmFjdGVyIGluIHRoZSBjdXJy
ZW50IGlubGluZSB0ZXh0IGl0ZW0gYW5kIDIgbW9yZSBmcm9tIHByZXZpb3VzIGlubGluZSBpdGVt
cy4KLSAgICBhdXRvIHByZXZpb3VzQ29udGVudCA9IGN1cnJlbnRUZXh0SXRlbS5pbmxpbmVUZXh0
Qm94KCkuY29udGVudCgpOwotICAgIGF1dG8gbGluZUJyZWFrSXRlcmF0b3IgPSBMYXp5TGluZUJy
ZWFrSXRlcmF0b3IgeyBuZXh0SW5saW5lVGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpLmNvbnRlbnQo
KSB9OwotICAgIGF1dG8gcHJldmlvdXNDb250ZW50TGVuZ3RoID0gcHJldmlvdXNDb250ZW50Lmxl
bmd0aCgpOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayBpbnRvIHRoZSBlbnRpcmUgdW5j
b21taXR0ZWQgY29udGVudCBmb3IgbW9yZSB0ZXh0IGNvbnRleHQuCi0gICAgVUNoYXIgbGFzdENo
YXJhY3RlciA9IHByZXZpb3VzQ29udGVudExlbmd0aCA/IHByZXZpb3VzQ29udGVudFtwcmV2aW91
c0NvbnRlbnRMZW5ndGggLSAxXSA6IDA7Ci0gICAgVUNoYXIgc2Vjb25kVG9MYXN0Q2hhcmFjdGVy
ID0gcHJldmlvdXNDb250ZW50TGVuZ3RoID4gMSA/IHByZXZpb3VzQ29udGVudFtwcmV2aW91c0Nv
bnRlbnRMZW5ndGggLSAyXSA6IDA7Ci0gICAgbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250
ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7Ci0gICAgLy8gTm93IGNo
ZWNrIGlmIHdlIGNhbiBicmVhayByaWdodCBhdCB0aGUgaW5saW5lIGl0ZW0gYm91bmRhcnkuCi0g
ICAgLy8gV2l0aCB0aGUgW2V4LWFtcGxlXSwgZmluZE5leHRCcmVha2FibGVQb3NpdGlvbiBzaG91
bGQgcmV0dXJuIHRoZSBzdGFydFBvc2l0aW9uICgwKS4KLSAgICAvLyBGSVhNRTogQ2hlY2sgaWYg
dGhlcmUncyBhIG1vcmUgY29ycmVjdCB3YXkgb2YgZmluZGluZyBicmVha2luZyBvcHBvcnR1bml0
aWVzLgotICAgIHJldHVybiAhVGV4dFV0aWw6OmZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24obGlu
ZUJyZWFrSXRlcmF0b3IsIDAsIG5leHRJbmxpbmVUZXh0SXRlbS5zdHlsZSgpKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGlzQXRTb2Z0V3JhcE9wcG9ydHVuaXR5KGNvbnN0IElubGluZUl0ZW0m
IGN1cnJlbnQsIGNvbnN0IElubGluZUl0ZW0mIG5leHQpCi17Ci0gICAgLy8gImlzIGF0IiBzaW1w
bGUgbWVhbnMgdGhhdCB0aGVyZSdzIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5IHJpZ2h0IGFmdGVy
IHRoZSBbY3VycmVudF0uCi0gICAgLy8gW3RleHRdWyBdW3RleHRdW2NvbnRhaW5lciBzdGFydF0u
Li4gKDxkaXY+dGV4dCBjb250ZW50PHNwYW4+Li48L2Rpdj4pCi0gICAgLy8gc29mdCB3cmFwIGlu
ZGV4ZXM6IDAgYW5kIDEgZGVmaW5pdGVseSwgMiBkZXBlbmRzIG9uIHRoZSBjb250ZW50IGFmdGVy
IHRoZSBbY29udGFpbmVyIHN0YXJ0XS4KLQotICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9y
Zy9jc3MtdGV4dC0zLyNsaW5lLWJyZWFrLWRldGFpbHMKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHRo
ZSBuZXcgaW5jb21pbmcgY29udGVudCBwdXRzIHRoZSB1bmNvbW1pdHRlZCBjb250ZW50IG9uIGEg
c29mdCB3cmFwIG9wcG9ydHVuaXR5LgotICAgIC8vIGUuZy4gW2NvbnRhaW5lciBzdGFydF1bcHJp
b3JfY29udGludW91c19jb250ZW50XVtjb250YWluZXIgZW5kXSAoPHNwYW4+cHJpb3JfY29udGlu
dW91c19jb250ZW50PC9zcGFuPikKLSAgICAvLyBBbiBpbmNvbWluZyA8aW1nPiBib3ggd291bGQg
ZW5hYmxlIHVzIHRvIGNvbW1pdCB0aGUgIjxzcGFuPnByaW9yX2NvbnRpbnVvdXNfY29udGVudDwv
c3Bhbj4iIGNvbnRlbnQKLSAgICAvLyBidXQgYW4gaW5jb21pbmcgdGV4dCBjb250ZW50IHdvdWxk
IG5vdCBuZWNlc3NhcmlseS4KLSAgICBBU1NFUlQoY3VycmVudC5pc1RleHQoKSB8fCBjdXJyZW50
LmlzQm94KCkpOwotICAgIEFTU0VSVChuZXh0LmlzVGV4dCgpIHx8IG5leHQuaXNCb3goKSk7Ci0g
ICAgaWYgKGN1cnJlbnQuaXNUZXh0KCkgJiYgbmV4dC5pc1RleHQoKSkgewotICAgICAgICBhdXRv
JiBjdXJyZW50SW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oY3VycmVu
dCk7Ci0gICAgICAgIGF1dG8mIG5leHRJbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRl
eHRJdGVtPihuZXh0KTsKLSAgICAgICAgaWYgKGN1cnJlbnRJbmxpbmVUZXh0SXRlbS5pc1doaXRl
c3BhY2UoKSkgewotICAgICAgICAgICAgLy8gWyBdW3RleHRdIDogYWZ0ZXIgW3doaXRlc3BhY2Vd
IHBvc2l0aW9uIGlzIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5LgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5leHRJbmxpbmVUZXh0SXRlbS5pc1doaXRl
c3BhY2UoKSkgewotICAgICAgICAgICAgLy8gW3RleHRdWyBdICg8c3Bhbj50ZXh0PC9zcGFuPiAp
Ci0gICAgICAgICAgICAvLyB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzOiBsaW5lIGJyZWFraW5n
IG9wcG9ydHVuaXR5IGV4aXN0cyBhZnRlciBldmVyeSBwcmVzZXJ2ZWQgd2hpdGUgc3BhY2UgY2hh
cmFjdGVyLCBidXQgbm90IGJlZm9yZS4KLSAgICAgICAgICAgIHJldHVybiBuZXh0SW5saW5lVGV4
dEl0ZW0uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6QnJlYWtTcGFjZXM7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnQuc3R5bGUoKS5saW5lQnJlYWsoKSA9PSBMaW5l
QnJlYWs6OkFueXdoZXJlIHx8IG5leHQuc3R5bGUoKS5saW5lQnJlYWsoKSA9PSBMaW5lQnJlYWs6
OkFueXdoZXJlKSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHNvZnQgd3JhcCBvcHBvcnR1
bml0eSBhcm91bmQgZXZlcnkgdHlwb2dyYXBoaWMgY2hhcmFjdGVyIHVuaXQsIGluY2x1ZGluZyBh
cm91bmQgYW55IHB1bmN0dWF0aW9uIGNoYXJhY3RlcgotICAgICAgICAgICAgLy8gb3IgcHJlc2Vy
dmVkIHdoaXRlIHNwYWNlcywgb3IgaW4gdGhlIG1pZGRsZSBvZiB3b3Jkcy4KLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEJvdGggY3VycmVudCBhbmQgbmV4
dCBpdGVtcyBhcmUgbm9uLXdoaXRlc3BhY2UgdGV4dC4KLSAgICAgICAgLy8gW3RleHRdW3RleHRd
IDogaXMgYSBjb250aW51b3VzIGNvbnRlbnQuCi0gICAgICAgIC8vIFt0ZXh0LV1bdGV4dF0gOiBh
ZnRlciBbaHlwaGVuXSBwb3NpdGlvbiBpcyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eS4KLSAgICAg
ICAgcmV0dXJuIGVuZHNXaXRoU29mdFdyYXBPcHBvcnR1bml0eShjdXJyZW50SW5saW5lVGV4dEl0
ZW0sIG5leHRJbmxpbmVUZXh0SXRlbSk7Ci0gICAgfQotICAgIGlmIChjdXJyZW50LmlzQm94KCkg
fHwgbmV4dC5pc0JveCgpKSB7Ci0gICAgICAgIC8vIFt0ZXh0XVtjb250YWluZXIgc3RhcnRdW2Nv
bnRhaW5lciBlbmRdW2lubGluZSBib3hdICh0ZXh0PHNwYW4+PC9zcGFuPjxpbWc+KSA6IHRoZXJl
J3MgYSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHkgYmV0d2VlbiB0aGUgW3RleHRdIGFuZCBbaW1nXS4K
LSAgICAgICAgLy8gVGhlIGxpbmUgYnJlYWtpbmcgYmVoYXZpb3Igb2YgYSByZXBsYWNlZCBlbGVt
ZW50IG9yIG90aGVyIGF0b21pYyBpbmxpbmUgaXMgZXF1aXZhbGVudCB0byBhbiBpZGVvZ3JhcGhp
YyBjaGFyYWN0ZXIuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3Qg
bmV4dFdyYXBPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lQ29udGVudCwgc2l6
ZV90IHN0YXJ0SW5kZXgsIGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpJbmxpbmVJdGVtUmFuZ2Ug
bGF5b3V0UmFuZ2UpCi17Ci0gICAgLy8gMS4gRmluZCB0aGUgc3RhcnQgY2FuZGlkYXRlIGJ5IHNr
aXBwaW5nIGxlYWRpbmcgbm9uLWNvbnRlbnQgaXRlbXMgZS5nIDxzcGFuPjxzcGFuPnN0YXJ0IDog
c2tpcCAiPHNwYW4+PHNwYW4+IgotICAgIC8vIDIuIEZpbmQgdGhlIGVuZCBjYW5kaWRhdGUgYnkg
c2tpcHBpbmcgbm9uLWNvbnRlbnQgaXRlbXMgaW5iZXR3ZWVuIGUuZy4gPHNwYW4+PHNwYW4+c3Rh
cnQ8L3NwYW4+ZW5kOiBza2lwICI8L3NwYW4+IgotICAgIC8vIDMuIENoZWNrIGlmIHRoZXJlJ3Mg
YSBzb2Z0IHdyYXAgb3Bwb3J0dW5pdHkgYmV0d2VlbiB0aGUgMiBjYW5kaWRhdGUgaW5saW5lIGl0
ZW1zIGFuZCByZXBlYXQuCi0gICAgLy8gNC4gQW55IGZvcmNlIGxpbmUgYnJlYWsgaW5iZXR3ZWVu
IGlzIGNvbnNpZGVyZWQgYXMgYSB3cmFwIG9wcG9ydHVuaXR5LgotCi0gICAgLy8gW2V4LV1bY29u
dGFpbmVyIHN0YXJ0XVtjb250YWluZXIgZW5kXVtmbG9hdF1bYW1wbGVdIChleC08c3Bhbj48L3Nw
YW4+PGRpdiBzdHlsZT0iZmxvYXQ6bGVmdCI+PC9kaXY+YW1wbGUpIDogd3JhcCBpbmRleCBpcyBh
dCBbZXgtXS4KLSAgICAvLyBbZXhdW2NvbnRhaW5lciBzdGFydF1bYW1wLV1bY29udGFpbmVyIHN0
YXJ0XVtsZV0gKGV4PHNwYW4+YW1wLTxzcGFuPmFtcGxlKSA6IHdyYXAgaW5kZXggaXMgYXQgW2Ft
cC1dLgotICAgIC8vIFtleC1dW2NvbnRhaW5lciBzdGFydF1bbGluZSBicmVha11bYW1wbGVdIChl
eC08c3Bhbj48YnI+YW1wbGUpIDogd3JhcCBpbmRleCBpcyBhZnRlciBbYnJdLgotICAgIGF1dG8g
aXNBdExpbmVCcmVhayA9IGZhbHNlOwotCi0gICAgYXV0byBpbmxpbmVJdGVtSW5kZXhXaXRoQ29u
dGVudCA9IFsmXSAoYXV0byBpbmRleCkgewotICAgICAgICAvLyBOb3RlIHRoYXQgZmxvYXRzIGFy
ZSBub3QgcGFydCBvZiB0aGUgaW5saW5lIGNvbnRlbnQuIFdlIHNob3VsZCB0cmVhdCB0aGVtIGFz
IGlmIHRoZXkgd2VyZSBub3QgaGVyZSBhcyBmYXIgYXMgd3JhcCBvcHBvcnR1bml0aWVzIGFyZSBj
b25jZXJuZWQuCi0gICAgICAgIC8vIFt0ZXh0XVtmbG9hdCBib3hdW3RleHRdIGlzIGVzc2VudGlh
bGx5IGp1c3QgW3RleHRdW3RleHRdCi0gICAgICAgIGZvciAoOyBpbmRleCA8IGxheW91dFJhbmdl
LmVuZDsgKytpbmRleCkgewotICAgICAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZUNv
bnRlbnRbaW5kZXhdOwotICAgICAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNUZXh0KCkgfHwgaW5s
aW5lSXRlbS5pc0JveCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAg
ICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgICAgICBpc0F0
TGluZUJyZWFrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxheW91dFJhbmdlLmVuZDsKLSAgICB9
OwotCi0gICAgLy8gU3RhcnQgYXQgdGhlIGZpcnN0IGlubGluZSBpdGVtIHdpdGggY29udGVudC4K
LSAgICAvLyBbY29udGFpbmVyIHN0YXJ0XVtleC1dIDogc3RhcnQgYXQgW2V4LV0KLSAgICBhdXRv
IHN0YXJ0Q29udGVudEluZGV4ID0gaW5saW5lSXRlbUluZGV4V2l0aENvbnRlbnQoc3RhcnRJbmRl
eCk7Ci0gICAgaWYgKGlzQXRMaW5lQnJlYWspIHsKLSAgICAgICAgLy8gQ29udGVudCBzdGFydHMg
d2l0aCBhIGxpbmUgYnJlYWsuIFRoZSB3cmFwIHBvc2l0aW9uIGlzIGFmdGVyIHRoZSBsaW5lIGJy
ZWFrLgotICAgICAgICByZXR1cm4gc3RhcnRDb250ZW50SW5kZXggKyAxOwotICAgIH0KLQotICAg
IHdoaWxlIChzdGFydENvbnRlbnRJbmRleCA8IGxheW91dFJhbmdlLmVuZCkgewotICAgICAgICAv
LyAxLiBGaW5kIHRoZSBuZXh0IGlubGluZSBpdGVtIHdpdGggY29udGVudC4KLSAgICAgICAgLy8g
Mi4gQ2hlY2sgaWYgdGhlcmUncyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBz
dGFydCBhbmQgdGhlIG5leHQgaW5saW5lIGl0ZW0uCi0gICAgICAgIGF1dG8gbmV4dENvbnRlbnRJ
bmRleCA9IGlubGluZUl0ZW1JbmRleFdpdGhDb250ZW50KHN0YXJ0Q29udGVudEluZGV4ICsgMSk7
Ci0gICAgICAgIGlmIChuZXh0Q29udGVudEluZGV4ID09IGxheW91dFJhbmdlLmVuZCkKLSAgICAg
ICAgICAgIHJldHVybiBuZXh0Q29udGVudEluZGV4OwotICAgICAgICBpZiAoaXNBdExpbmVCcmVh
aykgewotICAgICAgICAgICAgLy8gV2UgYWx3YXlzIHN0b3AgYXQgbGluZSBicmVha3MuIFRoZSB3
cmFwIHBvc2l0aW9uIGlzIGFmdGVyIHRoZSBsaW5lIGJyZWFrLgotICAgICAgICAgICAgcmV0dXJu
IG5leHRDb250ZW50SW5kZXggKyAxOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0F0U29mdFdy
YXBPcHBvcnR1bml0eShpbmxpbmVDb250ZW50W3N0YXJ0Q29udGVudEluZGV4XSwgaW5saW5lQ29u
dGVudFtuZXh0Q29udGVudEluZGV4XSkpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlJ3MgYSBzb2Z0
IHdyYXAgb3Bwb3J0dW5pdHkgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIHRoZSBuZXh0Q29udGVudC4K
LSAgICAgICAgICAgIC8vIE5vdyBmb3J3YXJkLWZpbmQgZnJvbSB0aGUgc3RhcnQgcG9zaXRpb24g
dG8gc2VlIHdoZXJlIHdlIGNhbiBhY3R1YWxseSB3cmFwLgotICAgICAgICAgICAgLy8gW2V4LV1b
YW1wbGVdIHZzLiBbZXgtXVtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5lciBlbmRdW2FtcGxlXQot
ICAgICAgICAgICAgLy8gd2hlcmUgW2V4LV0gaXMgc3RhcnRDb250ZW50IGFuZCBbYW1wbGVdIGlz
IHRoZSBuZXh0Q29udGVudC4KLSAgICAgICAgICAgIGZvciAoYXV0byBjYW5kaWRhdGVJbmRleCA9
IHN0YXJ0Q29udGVudEluZGV4ICsgMTsgY2FuZGlkYXRlSW5kZXggPCBuZXh0Q29udGVudEluZGV4
OyArK2NhbmRpZGF0ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlubGluZUNvbnRlbnRb
Y2FuZGlkYXRlSW5kZXhdLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBpbmxpbmUgY29udGVudCBhbmQgW2NvbnRhaW5lciBzdGFydF0gYW5kIFtjb250YWluZXIg
ZW5kXSBmb3JtIHVuYnJlYWthYmxlIGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgICAgIC8vIGV4
LTxzcGFuPjwvc3Bhbj5hbXBsZSAgOiB3cmFwIG9wcG9ydHVuaXR5IGlzIGFmdGVyICJleC0iLgot
ICAgICAgICAgICAgICAgICAgICAvLyBleC08L3NwYW4+PC9zcGFuPmFtcGxlIDogd3JhcCBvcHBv
cnR1bml0eSBpcyBhZnRlciAiZXgtPC9zcGFuPjwvc3Bhbj4iLgotICAgICAgICAgICAgICAgICAg
ICAvLyBleC08L3NwYW4+PHNwYW4+YW1wbGU8L3NwYW4+IDogd3JhcCBvcHBvcnR1bml0eSBpcyBh
ZnRlciAiZXgtPC9zcGFuPiIuCi0gICAgICAgICAgICAgICAgICAgIC8vIGV4LTxzcGFuPjxzcGFu
PmFtcGxlPC9zcGFuPjwvc3Bhbj4gOiB3cmFwIG9wcG9ydHVuaXR5IGlzIGFmdGVyICJleC0iLgot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlSW5kZXg7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5leHRDb250ZW50SW5kZXg7
Ci0gICAgICAgIH0KLSAgICAgICAgc3RhcnRDb250ZW50SW5kZXggPSBuZXh0Q29udGVudEluZGV4
OwotICAgIH0KLSAgICByZXR1cm4gbGF5b3V0UmFuZ2UuZW5kOwotfQotCi1zdHJ1Y3QgTGluZUNh
bmRpZGF0ZSB7Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgc3RydWN0IElubGluZUNvbnRlbnQg
ewotICAgICAgICBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVucygpIGNvbnN0IHsgcmV0
dXJuIG1faW5saW5lUnVuczsgfQotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fTG9naWNhbFdpZHRoOyB9Ci0gICAgICAgIGNvbnN0IElubGlu
ZUl0ZW0qIHRyYWlsaW5nTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ0xpbmVC
cmVhazsgfQotCi0gICAgICAgIHZvaWQgYXBwZW5kSW5saW5lSXRlbShjb25zdCBJbmxpbmVJdGVt
JiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwotICAgICAgICB2b2lkIGFwcGVuZExp
bmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKSB7IHNldFRyYWlsaW5nTGluZUJy
ZWFrKGlubGluZUl0ZW0pOyB9Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgc2V0VHJhaWxpbmdMaW5lQnJlYWsoY29uc3QgSW5saW5lSXRlbSYgbGlu
ZUJyZWFrSXRlbSkgeyBtX3RyYWlsaW5nTGluZUJyZWFrID0gJmxpbmVCcmVha0l0ZW07IH0KLQot
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fTG9naWNhbFdpZHRoIHsgMCB9OwotICAgICAgICBM
aW5lQnJlYWtlcjo6UnVuTGlzdCBtX2lubGluZVJ1bnM7Ci0gICAgICAgIGNvbnN0IElubGluZUl0
ZW0qIG1fdHJhaWxpbmdMaW5lQnJlYWsgeyBudWxscHRyIH07Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBGbG9hdENvbnRlbnQgewotICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiBm
bG9hdEl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIGlzSW50cnVzaXZl
KTsKLQotICAgICAgICBzdHJ1Y3QgRmxvYXQgewotICAgICAgICAgICAgY29uc3QgSW5saW5lSXRl
bSogaXRlbSB7IG51bGxwdHIgfTsKLSAgICAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bFdpZHRoIHsgMCB9OwotICAgICAgICAgICAgYm9vbCBpc0ludHJ1c2l2ZSB7IHRydWUgfTsKLSAg
ICAgICAgfTsKLSAgICAgICAgdXNpbmcgRmxvYXRMaXN0ID0gVmVjdG9yPEZsb2F0PjsKLSAgICAg
ICAgY29uc3QgRmxvYXRMaXN0JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9mbG9hdExpc3Q7IH0K
LSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBpbnRydXNpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1faW50cnVzaXZlV2lkdGg7IH0KLQotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBGbG9hdExpc3QgbV9mbG9hdExpc3Q7Ci0gICAgICAgIElubGluZUxheW91
dFVuaXQgbV9pbnRydXNpdmVXaWR0aCB7IDAgfTsKLSAgICB9OwotICAgIC8vIENhbmRpZGF0ZSBj
b250ZW50IGlzIGEgY29sbGVjdGlvbiBvZiBpbmxpbmUgaXRlbXMgYW5kL29yIGZsb2F0IGJveGVz
LgotICAgIElubGluZUNvbnRlbnQgaW5saW5lQ29udGVudDsKLSAgICBGbG9hdENvbnRlbnQgZmxv
YXRDb250ZW50OwotfTsKLQotaW5saW5lIHZvaWQgTGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVu
dDo6YXBwZW5kSW5saW5lSXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKLXsKLSAgICBtX0xvZ2ljYWxXaWR0aCArPSBsb2dpY2Fs
V2lkdGg7Ci0gICAgbV9pbmxpbmVSdW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGxvZ2ljYWxXaWR0
aCB9KTsKLX0KLQotaW5saW5lIHZvaWQgTGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVudDo6cmVz
ZXQoKQotewotICAgIG1fTG9naWNhbFdpZHRoID0geyB9OwotICAgIG1faW5saW5lUnVucy5jbGVh
cigpOwotICAgIG1fdHJhaWxpbmdMaW5lQnJlYWsgPSB7IH07Ci19Ci0KLWlubGluZSB2b2lkIExp
bmVDYW5kaWRhdGU6OkZsb2F0Q29udGVudDo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGZsb2F0
SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgaXNJbnRydXNpdmUpCi17
Ci0gICAgaWYgKGlzSW50cnVzaXZlKQotICAgICAgICBtX2ludHJ1c2l2ZVdpZHRoICs9IGxvZ2lj
YWxXaWR0aDsKLSAgICBtX2Zsb2F0TGlzdC5hcHBlbmQoeyAmZmxvYXRJdGVtLCBsb2dpY2FsV2lk
dGgsIGlzSW50cnVzaXZlIH0pOwotfQotCi1pbmxpbmUgdm9pZCBMaW5lQ2FuZGlkYXRlOjpGbG9h
dENvbnRlbnQ6OnJlc2V0KCkKLXsKLSAgICBtX2Zsb2F0TGlzdC5jbGVhcigpOwotICAgIG1faW50
cnVzaXZlV2lkdGggPSB7IH07Ci19Ci0KLWlubGluZSB2b2lkIExpbmVDYW5kaWRhdGU6OnJlc2V0
KCkKLXsKLSAgICBmbG9hdENvbnRlbnQucmVzZXQoKTsKLSAgICBpbmxpbmVDb250ZW50LnJlc2V0
KCk7Ci19Ci0KLUlubGluZUxheW91dFVuaXQgTGluZUxheW91dENvbnRleHQ6OmlubGluZUl0ZW1X
aWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRl
bnRMb2dpY2FsTGVmdCkgY29uc3QKLXsKLSAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGlu
ZUl0ZW0pKSB7Ci0gICAgICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5l
VGV4dEl0ZW0+KGlubGluZUl0ZW0pOwotICAgICAgICBpZiAoYXV0byBjb250ZW50V2lkdGggPSBp
bmxpbmVUZXh0SXRlbS53aWR0aCgpKQotICAgICAgICAgICAgcmV0dXJuICpjb250ZW50V2lkdGg7
Ci0gICAgICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzaWJsZSgpID8gaW5s
aW5lVGV4dEl0ZW0uc3RhcnQoKSArIDEgOiBpbmxpbmVUZXh0SXRlbS5lbmQoKTsKLSAgICAgICAg
cmV0dXJuIFRleHRVdGlsOjp3aWR0aChpbmxpbmVUZXh0SXRlbSwgaW5saW5lVGV4dEl0ZW0uc3Rh
cnQoKSwgZW5kLCBjb250ZW50TG9naWNhbExlZnQpOwotICAgIH0KLQotICAgIGlmIChpbmxpbmVJ
dGVtLmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byYgbGF5b3V0
Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IG1f
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLQotICAg
IGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5Lm1hcmdpbkJveFdpZHRoKCk7Ci0KLSAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFj
ZWRCb3goKSkKLSAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LndpZHRoKCk7Ci0KLSAgICBpZiAo
aW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkpCi0gICAgICAgIHJldHVybiBib3hHZW9tZXRy
eS5tYXJnaW5TdGFydCgpICsgYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpICsgYm94R2VvbWV0cnku
cGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwotCi0gICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWlu
ZXJFbmQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpICsgYm94R2Vv
bWV0cnkuYm9yZGVyUmlnaHQoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3Io
MCk7Ci0KLSAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2sp
Ci0gICAgcmV0dXJuIGJveEdlb21ldHJ5LndpZHRoKCk7Ci19Ci0KLUxpbmVMYXlvdXRDb250ZXh0
OjpMaW5lTGF5b3V0Q29udGV4dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRS
b290LCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCi0gICAgOiBtX2lubGluZUZvcm1h
dHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9mb3JtYXR0aW5n
Q29udGV4dFJvb3QoZm9ybWF0dGluZ0NvbnRleHRSb290KQotICAgICwgbV9pbmxpbmVJdGVtcyhp
bmxpbmVJdGVtcykKLXsKLX0KLQotTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50IExpbmVM
YXlvdXRDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50KExpbmUmIGxpbmUsIGNvbnN0IElubGlu
ZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGlu
Z0NvbnRlbnRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1fZmxvYXRzLmlzRW1wdHkoKSk7Ci0gICAg
bV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtID0geyB9OwotICAgIG1fbGFzdFdyYXBPcHBvcnR1bml0
eUl0ZW0gPSB7IH07Ci0gICAgYXV0byBsaW5lQnJlYWtlciA9IExpbmVCcmVha2VyIHsgfTsKLSAg
ICBhdXRvIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydDsKLSAgICB1bnNpZ25l
ZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSAwOwotICAgIGF1dG8gbGluZUNhbmRpZGF0ZSA9
IExpbmVDYW5kaWRhdGUgeyB9OwotICAgIHdoaWxlIChjdXJyZW50SXRlbUluZGV4IDwgbGF5b3V0
UmFuZ2UuZW5kKSB7Ci0gICAgICAgIC8vIDEuIENvbGxlY3QgdGhlIHNldCBvZiBydW5zIHRoYXQg
d2UgY2FuIGNvbW1pdCB0byB0aGUgbGluZSBhcyBvbmUgZW50aXR5IGUuZy4gPHNwYW4+dGV4dF9h
bmRfc3Bhbl9zdGFydF9zcGFuX2VuZDwvc3Bhbj4uCi0gICAgICAgIC8vIDIuIEFwcGx5IGZsb2F0
cyBhbmQgc2hyaW5rIHRoZSBhdmFpbGFibGUgaG9yaXpvbnRhbCBzcGFjZSBlLmcuIDxzcGFuPmlu
dHJ1XzxkaXYgc3R5bGU9ImZsb2F0OiBsZWZ0Ij48L2Rpdj5zaXZlX2Zsb2F0PC9zcGFuPi4KLSAg
ICAgICAgLy8gMy4gQ2hlY2sgaWYgdGhlIGNvbnRlbnQgZml0cyB0aGUgbGluZSBhbmQgY29tbWl0
IHRoZSBjb250ZW50IGFjY29yZGluZ2x5IChmdWxsLCBwYXJ0aWFsIG9yIG5vdCBjb21taXQgYXQg
YWxsKS4KLSAgICAgICAgLy8gNC4gUmV0dXJuIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBs
aW5lIGVpdGhlciBieSBub3QgYmVpbmcgYWJsZSB0byBmaXQgbW9yZSBjb250ZW50IG9yIGJlY2F1
c2Ugb2YgYW4gZXhwbGljaXQgbGluZSBicmVhay4KLSAgICAgICAgbmV4dENvbnRlbnRGb3JMaW5l
KGxpbmVDYW5kaWRhdGUsIGN1cnJlbnRJdGVtSW5kZXgsIGxheW91dFJhbmdlLCBwYXJ0aWFsTGVh
ZGluZ0NvbnRlbnRMZW5ndGgsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSArIGxpbmUudHJpbW1hYmxl
VHJhaWxpbmdXaWR0aCgpLCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7Ci0gICAgICAgIC8v
IE5vdyBjaGVjayBpZiB3ZSBjYW4gcHV0IHRoaXMgY29udGVudCBvbiB0aGUgY3VycmVudCBsaW5l
LgotICAgICAgICBhdXRvIHJlc3VsdCA9IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQobGlu
ZUJyZWFrZXIsIGxpbmUsIGxheW91dFJhbmdlLCBsaW5lQ2FuZGlkYXRlKTsKLSAgICAgICAgY29t
bWl0dGVkSW5saW5lSXRlbUNvdW50ID0gcmVzdWx0LmNvbW1pdHRlZENvdW50LmlzUmV2ZXJ0ID8g
cmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlIDogY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ICsg
cmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlOwotICAgICAgICBhdXRvJiBpbmxpbmVDb250ZW50
ID0gbGluZUNhbmRpZGF0ZS5pbmxpbmVDb250ZW50OwotICAgICAgICBhdXRvIGlubGluZUNvbnRl
bnRJc0Z1bGx5Q29tbWl0dGVkID0gaW5saW5lQ29udGVudC5ydW5zKCkuc2l6ZSgpID09IHJlc3Vs
dC5jb21taXR0ZWRDb3VudC52YWx1ZSAmJiAhcmVzdWx0LnBhcnRpYWxDb250ZW50OwotICAgICAg
ICBhdXRvIGlzRW5kT2ZMaW5lID0gcmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJ
c0VuZE9mTGluZTo6WWVzOwotCi0gICAgICAgIGlmIChpbmxpbmVDb250ZW50SXNGdWxseUNvbW1p
dHRlZCAmJiBpbmxpbmVDb250ZW50LnRyYWlsaW5nTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAg
IC8vIEZ1bGx5IGNvbW1pdGVkIChvciBlbXB0eSkgY29udGVudCBmb2xsb3dlZCBieSBhIGxpbmUg
YnJlYWsgbWVhbnMgImVuZCBvZiBsaW5lIi4KLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKCppbmxp
bmVDb250ZW50LnRyYWlsaW5nTGluZUJyZWFrKCksIHsgfSk7Ci0gICAgICAgICAgICArK2NvbW1p
dHRlZElubGluZUl0ZW1Db3VudDsKLSAgICAgICAgICAgIGlzRW5kT2ZMaW5lID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaXNFbmRPZkxpbmUpIHsKLSAgICAgICAgICAgIC8vIFdlIGNh
bid0IHBsYWNlIGFueSBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgICAg
ICByZXR1cm4gY2xvc2UobGluZSwgbGF5b3V0UmFuZ2UsIGNvbW1pdHRlZElubGluZUl0ZW1Db3Vu
dCwgcmVzdWx0LnBhcnRpYWxDb250ZW50KTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50SXRl
bUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyBt
X2Zsb2F0cy5zaXplKCk7Ci0gICAgICAgIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHsg
fTsKLSAgICB9Ci0gICAgLy8gTG9va3MgbGlrZSB3ZSd2ZSBydW4gb3V0IG9mIHJ1bnMuCi0gICAg
cmV0dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQs
IHsgfSk7Ci19Ci0KLUxpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29u
dGV4dDo6Y2xvc2UoY29uc3QgTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlv
dXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxMaW5l
Q29udGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxDb250ZW50KQotewotICAgIEFTU0VSVF9V
TlVTRUQobGluZSwgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50IHx8ICFtX2Zsb2F0cy5pc0VtcHR5
KCkgfHwgbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKLSAgICBhdXRvIG51bWJlck9mQ29tbWl0
dGVkSXRlbXMgPSBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyBtX2Zsb2F0cy5zaXplKCk7Ci0g
ICAgYXV0byB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0YXJ0ICsgbnVt
YmVyT2ZDb21taXR0ZWRJdGVtcyAtIDE7Ci0gICAgYXV0byBsaW5lUmFuZ2UgPSBJbmxpbmVJdGVt
UmFuZ2UgeyBsYXlvdXRSYW5nZS5zdGFydCwgdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggKyAxIH07
Ci0gICAgQVNTRVJUKGxpbmVSYW5nZS5lbmQgPD0gbGF5b3V0UmFuZ2UuZW5kKTsKLSAgICAvLyBB
ZGp1c3QgaHlwaGVuYXRlZCBsaW5lIGNvdW50LgotICAgIG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRM
aW5lQ291bnQgPSBwYXJ0aWFsQ29udGVudCAmJiBwYXJ0aWFsQ29udGVudC0+dHJhaWxpbmdDb250
ZW50SGFzSHlwaGVuID8gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCArIDEgOiAwOwot
ICAgIHJldHVybiBMaW5lQ29udGVudCB7IHBhcnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIFdURk1v
dmUobV9mbG9hdHMpLCBsaW5lLnJ1bnMoKSB9OwotfQotCi12b2lkIExpbmVMYXlvdXRDb250ZXh0
OjpuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWdu
ZWQgY3VycmVudElubGluZUl0ZW1JbmRleCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRS
YW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVu
dExvZ2ljYWxSaWdodCkKLXsKLSAgICBBU1NFUlQoY3VycmVudElubGluZUl0ZW1JbmRleCA8IGxh
eW91dFJhbmdlLmVuZCk7Ci0gICAgbGluZUNhbmRpZGF0ZS5yZXNldCgpOwotICAgIC8vIDEuIFNp
bXBseSBhZGQgYW55IG92ZXJmbG93IGNvbnRlbnQgZnJvbSB0aGUgcHJldmlvdXMgbGluZSB0byB0
aGUgY2FuZGlkYXRlIGNvbnRlbnQuIEl0J3MgYWx3YXlzIGEgdGV4dCBjb250ZW50LgotICAgIC8v
IDIuIEZpbmQgdGhlIG5leHQgc29mdCB3cmFwIHBvc2l0aW9uIG9yIGV4cGxpY2l0IGxpbmUgYnJl
YWsuCi0gICAgLy8gMy4gQ29sbGVjdCBmbG9hdHMgYmV0d2VlbiB0aGUgaW5saW5lIGNvbnRlbnQu
Ci0gICAgYXV0byBzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXggPSBuZXh0V3JhcE9wcG9ydHVuaXR5
KG1faW5saW5lSXRlbXMsIGN1cnJlbnRJbmxpbmVJdGVtSW5kZXgsIGxheW91dFJhbmdlKTsKLSAg
ICAvLyBzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXggPT0gbGF5b3V0UmFuZ2UuZW5kIG1lYW5zIHdl
IGRvbid0IGhhdmUgYW55IHdyYXAgb3Bwb3J0dW5pdHkgaW4gdGhpcyBjb250ZW50LgotICAgIEFT
U0VSVChzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXggPD0gbGF5b3V0UmFuZ2UuZW5kKTsKLQotICAg
IGlmIChwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpIHsKLSAgICAgICAgLy8gSGFuZGxlIGxl
YWRpbmcgcGFydGlhbCBjb250ZW50IGZpcnN0IChzcGxpdCB0ZXh0IGZyb20gdGhlIHByZXZpb3Vz
IGxpbmUpLgotICAgICAgICAvLyBDb25zdHJ1Y3QgYSBwYXJ0aWFsIGxlYWRpbmcgaW5saW5lIGl0
ZW0uCi0gICAgICAgIG1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRl
eHRJdGVtPihtX2lubGluZUl0ZW1zW2N1cnJlbnRJbmxpbmVJdGVtSW5kZXhdKS5yaWdodCgqcGFy
dGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgYXV0byBpdGVtV2lkdGggPSBpbmxp
bmVJdGVtV2lkdGgoKm1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSwgY3VycmVudExvZ2ljYWxSaWdo
dCk7Ci0gICAgICAgIGxpbmVDYW5kaWRhdGUuaW5saW5lQ29udGVudC5hcHBlbmRJbmxpbmVJdGVt
KCptX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0sIGl0ZW1XaWR0aCk7Ci0gICAgICAgIGN1cnJlbnRM
b2dpY2FsUmlnaHQgKz0gaXRlbVdpZHRoOwotICAgICAgICArK2N1cnJlbnRJbmxpbmVJdGVtSW5k
ZXg7Ci0gICAgfQotCi0gICAgYXV0byBhY2N1bXVsYXRlZFdpZHRoID0gSW5saW5lTGF5b3V0VW5p
dCB7IH07Ci0gICAgZm9yIChhdXRvIGluZGV4ID0gY3VycmVudElubGluZUl0ZW1JbmRleDsgaW5k
ZXggPCBzb2Z0V3JhcE9wcG9ydHVuaXR5SW5kZXg7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byYg
aW5saW5lSXRlbSA9IG1faW5saW5lSXRlbXNbaW5kZXhdOwotICAgICAgICBpZiAoaW5saW5lSXRl
bS5pc0Zsb2F0KCkpIHsKLSAgICAgICAgICAgIC8vIEZsb2F0cyBhcmUgbm90IHBhcnQgb2YgdGhl
IGxpbmUgY29udGV4dC4KLSAgICAgICAgICAgIGF1dG8gZmxvYXRXaWR0aCA9IGlubGluZUl0ZW1X
aWR0aChpbmxpbmVJdGVtLCB7IH0pOwotICAgICAgICAgICAgbGluZUNhbmRpZGF0ZS5mbG9hdENv
bnRlbnQuYXBwZW5kKGlubGluZUl0ZW0sIGZsb2F0V2lkdGgsIGZsb2F0V2lkdGggPD0gKGF2YWls
YWJsZUxpbmVXaWR0aCAtIGFjY3VtdWxhdGVkV2lkdGgpKTsKLSAgICAgICAgICAgIGFjY3VtdWxh
dGVkV2lkdGggKz0gZmxvYXRXaWR0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChpbmxpbmVJdGVtLmlzVGV4dCgpIHx8IGlubGluZUl0ZW0uaXNDb250YWlu
ZXJTdGFydCgpIHx8IGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSB8fCBpbmxpbmVJdGVtLmlz
Qm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8gaW5saW5lSXRlbm1XaWR0aCA9IGlubGluZUl0ZW1X
aWR0aChpbmxpbmVJdGVtLCBjdXJyZW50TG9naWNhbFJpZ2h0KTsKLSAgICAgICAgICAgIGxpbmVD
YW5kaWRhdGUuaW5saW5lQ29udGVudC5hcHBlbmRJbmxpbmVJdGVtKGlubGluZUl0ZW0sIGlubGlu
ZUl0ZW5tV2lkdGgpOwotICAgICAgICAgICAgY3VycmVudExvZ2ljYWxSaWdodCArPSBpbmxpbmVJ
dGVubVdpZHRoOwotICAgICAgICAgICAgYWNjdW11bGF0ZWRXaWR0aCArPSBpbmxpbmVJdGVubVdp
ZHRoOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlubGlu
ZUl0ZW0uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgbGluZUNhbmRpZGF0ZS5pbmxpbmVD
b250ZW50LmFwcGVuZExpbmVCcmVhayhpbmxpbmVJdGVtKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQot
dm9pZCBMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0RmxvYXRzKExpbmUmIGxpbmUsIGNvbnN0IExp
bmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgY29t
bWl0SW50cnVzaXZlT25seSkKLXsKLSAgICBhdXRvJiBmbG9hdENvbnRlbnQgPSBsaW5lQ2FuZGlk
YXRlLmZsb2F0Q29udGVudDsKLSAgICBhdXRvIGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCA9IElu
bGluZUxheW91dFVuaXQgeyB9OwotICAgIGF1dG8gcmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCA9
IElubGluZUxheW91dFVuaXQgeyB9OwotICAgIGF1dG8gaGFzSW50cnVzaXZlRmxvYXQgPSBmYWxz
ZTsKLQotICAgIGZvciAoYXV0byYgZmxvYXRDYW5kaWRhdGUgOiBmbG9hdENvbnRlbnQubGlzdCgp
KSB7Ci0gICAgICAgIGlmICghZmxvYXRDYW5kaWRhdGUuaXNJbnRydXNpdmUgJiYgY29tbWl0SW50
cnVzaXZlT25seSA9PSBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5OjpZZXMpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgbV9mbG9hdHMuYXBwZW5kKHsgZmxvYXRDYW5kaWRhdGUuaXNJ
bnRydXNpdmUsIGZsb2F0Q2FuZGlkYXRlLml0ZW0gfSk7Ci0gICAgICAgIGlmIChmbG9hdENhbmRp
ZGF0ZS5pc0ludHJ1c2l2ZSkgewotICAgICAgICAgICAgaGFzSW50cnVzaXZlRmxvYXQgPSB0cnVl
OwotICAgICAgICAgICAgLy8gVGhpcyBmbG9hdCBpcyBpbnRydXNpdmUgYW5kIGl0IHNocmlua3Mg
dGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgICAgIC8vIFNocmluayBhdmFpbGFibGUgc3BhY2Ug
Zm9yIGN1cnJlbnQgbGluZS4KLSAgICAgICAgICAgIGlmIChmbG9hdENhbmRpZGF0ZS5pdGVtLT5s
YXlvdXRCb3goKS5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICBs
ZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGggKz0gZmxvYXRDYW5kaWRhdGUubG9naWNhbFdpZHRoOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lk
dGggKz0gZmxvYXRDYW5kaWRhdGUubG9naWNhbFdpZHRoOwotICAgICAgICB9Ci0gICAgfQotICAg
IGxpbmUuc2V0SGFzSW50cnVzaXZlRmxvYXQoaGFzSW50cnVzaXZlRmxvYXQpOwotICAgIGlmIChs
ZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGggfHwgcmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCkgewot
ICAgICAgICBpZiAobGVmdEludHJ1c2l2ZUZsb2F0c1dpZHRoKQotICAgICAgICAgICAgbGluZS5t
b3ZlTG9naWNhbExlZnQobGVmdEludHJ1c2l2ZUZsb2F0c1dpZHRoKTsKLSAgICAgICAgaWYgKHJp
Z2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpCi0gICAgICAgICAgICBsaW5lLm1vdmVMb2dpY2FsUmln
aHQocmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCk7Ci0gICAgfQotfQotCi1MaW5lTGF5b3V0Q29u
dGV4dDo6UmVzdWx0IExpbmVMYXlvdXRDb250ZXh0OjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250
ZW50KExpbmVCcmVha2VyJiBsaW5lQnJlYWtlciwgTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRl
bVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSkK
LXsKLSAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gbGluZUNhbmRpZGF0ZS5pbmxpbmVDb250ZW50
OwotICAgIGF1dG8mIGNhbmRpZGF0ZVJ1bnMgPSBpbmxpbmVDb250ZW50LnJ1bnMoKTsKLSAgICBp
ZiAoY2FuZGlkYXRlUnVucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tbWl0RmxvYXRzKGxpbmUs
IGxpbmVDYW5kaWRhdGUpOwotICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxp
bmU6Ok5vIH07Ci0gICAgfQotCi0gICAgYXV0byBzaG91bGREaXNhYmxlSHlwaGVuYXRpb24gPSBb
Jl0gewotICAgICAgICBhdXRvJiBzdHlsZSA9IHJvb3QoKS5zdHlsZSgpOwotICAgICAgICB1bnNp
Z25lZCBsaW1pdExpbmVzID0gc3R5bGUuaHlwaGVuYXRpb25MaW1pdExpbmVzKCkgPT0gUmVuZGVy
U3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvbkxpbWl0TGluZXMoKSA/IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRMaW5lcygpOwotICAg
ICAgICByZXR1cm4gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA+PSBsaW1pdExpbmVz
OwotICAgIH07Ci0gICAgaWYgKHNob3VsZERpc2FibGVIeXBoZW5hdGlvbigpKQotICAgICAgICBs
aW5lQnJlYWtlci5zZXRIeXBoZW5hdGlvbkRpc2FibGVkKCk7Ci0KLSAgICBhdXRvJiBmbG9hdENv
bnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmZsb2F0Q29udGVudDsKLSAgICAvLyBDaGVjayBpZiB0aGlz
IG5ldyBjb250ZW50IGZpdHMuCi0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmUuYXZhaWxh
YmxlV2lkdGgoKSAtIGZsb2F0Q29udGVudC5pbnRydXNpdmVXaWR0aCgpOwotICAgIGF1dG8gaXNM
aW5lQ29uc2lkZXJlZEVtcHR5ID0gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSAmJiAhbGluZS5oYXNJ
bnRydXNpdmVGbG9hdCgpOwotICAgIGF1dG8gbGluZVN0YXR1cyA9IExpbmVCcmVha2VyOjpMaW5l
U3RhdHVzIHsgYXZhaWxhYmxlV2lkdGgsIGxpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBs
aW5lLmlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpLCBpc0xpbmVDb25zaWRlcmVkRW1wdHkg
fTsKLSAgICBhdXRvIHJlc3VsdCA9IGxpbmVCcmVha2VyLnNob3VsZFdyYXBJbmxpbmVDb250ZW50
KGNhbmRpZGF0ZVJ1bnMsIGlubGluZUNvbnRlbnQubG9naWNhbFdpZHRoKCksIGxpbmVTdGF0dXMp
OwotICAgIGlmIChyZXN1bHQubGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0pCi0gICAgICAgIG1fbGFz
dFdyYXBPcHBvcnR1bml0eUl0ZW0gPSByZXN1bHQubGFzdFdyYXBPcHBvcnR1bml0eUl0ZW07Ci0g
ICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpLZWVw
KSB7Ci0gICAgICAgIC8vIFRoaXMgY29udGludW91cyBjb250ZW50IGNhbiBiZSBmdWxseSBwbGFj
ZWQgb24gdGhlIGN1cnJlbnQgbGluZSBpbmNsdWRpbmcgbm9uLWludHJ1c2l2ZSBmbG9hdHMuCi0g
ICAgICAgIGZvciAoYXV0byYgcnVuIDogY2FuZGlkYXRlUnVucykKLSAgICAgICAgICAgIGxpbmUu
YXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKLSAgICAgICAgY29tbWl0
RmxvYXRzKGxpbmUsIGxpbmVDYW5kaWRhdGUpOwotICAgICAgICByZXR1cm4geyByZXN1bHQuaXNF
bmRPZkxpbmUsIHsgY2FuZGlkYXRlUnVucy5zaXplKCksIGZhbHNlIH0gfTsKLSAgICB9Ci0gICAg
aWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpQdXNoKSB7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXNFbmRPZkxpbmUgPT0gTGluZUJyZWFrZXI6OklzRW5k
T2ZMaW5lOjpZZXMpOwotICAgICAgICAvLyBUaGlzIGNvbnRpbnVvdXMgY29udGVudCBjYW4ndCBi
ZSBwbGFjZWQgb24gdGhlIGN1cnJlbnQgbGluZS4gTm90aGluZyB0byBjb21taXQgYXQgdGhpcyB0
aW1lLgotICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6OlllcyB9Owot
ICAgIH0KLSAgICBpZiAocmVzdWx0LmFjdGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rp
b246OlJldmVydFRvTGFzdFdyYXBPcHBvcnR1bml0eSkgewotICAgICAgICBBU1NFUlQocmVzdWx0
LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKLSAgICAgICAg
Ly8gTm90IG9ubHkgdGhpcyBjb250ZW50IGNhbid0IGJlIHBsYWNlZCBvbiB0aGUgY3VycmVudCBs
aW5lLCBidXQgd2UgZXZlbiBuZWVkIHRvIHJldmVydCB0aGUgbGluZSBiYWNrIHRvIGFuIGVhcmxp
ZXIgcG9zaXRpb24uCi0gICAgICAgIEFTU0VSVChtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtKTsK
LSAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgcmVidWls
ZExpbmUobGluZSwgbGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsKLSAgICB9Ci0gICAgaWYgKHJlc3Vs
dC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpTcGxpdCkgewotICAgICAg
ICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6
WWVzKTsKLSAgICAgICAgLy8gQ29tbWl0IHRoZSBjb21iaW5hdGlvbiBvZiBmdWxsIGFuZCBwYXJ0
aWFsIGNvbnRlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgY29tbWl0RmxvYXRzKGxp
bmUsIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHk6Olllcyk7Ci0gICAg
ICAgIEFTU0VSVChyZXN1bHQucGFydGlhbFRyYWlsaW5nQ29udGVudCk7Ci0gICAgICAgIGNvbW1p
dFBhcnRpYWxDb250ZW50KGxpbmUsIGNhbmRpZGF0ZVJ1bnMsICpyZXN1bHQucGFydGlhbFRyYWls
aW5nQ29udGVudCk7Ci0gICAgICAgIC8vIFdoZW4gc3BsaXR0aW5nIG11bHRpcGxlIHJ1bnMgPHNw
YW4gc3R5bGU9IndvcmQtYnJlYWs6IGJyZWFrLWFsbCI+dGV4dDwvc3Bhbj48c3Bhbj5jb250ZW50
PC9zcGFuPiwgd2UgbWlnaHQgZW5kIHVwIHNwbGl0dGluZyB0aGVtIGF0IHJ1biBib3VuZGFyeS4K
LSAgICAgICAgLy8gSXQgc2ltcGx5IG1lYW5zIHdlIGRvbid0IHJlYWxseSBoYXZlIGEgcGFydGlh
bCBydW4uIFBhcnRpYWwgY29udGVudCB5ZXMsIGJ1dCBub3QgcGFydGlhbCBydW4uCi0gICAgICAg
IGF1dG8gdHJhaWxpbmdSdW5JbmRleCA9IHJlc3VsdC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50LT50
cmFpbGluZ1J1bkluZGV4OwotICAgICAgICBhdXRvIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCA9
IHRyYWlsaW5nUnVuSW5kZXggKyAxOwotICAgICAgICBpZiAoIXJlc3VsdC5wYXJ0aWFsVHJhaWxp
bmdDb250ZW50LT5wYXJ0aWFsUnVuKQotICAgICAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6
OklzRW5kT2ZMaW5lOjpZZXMsIHsgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBmYWxzZSB9IH07
Ci0KLSAgICAgICAgYXV0byBwYXJ0aWFsUnVuID0gKnJlc3VsdC5wYXJ0aWFsVHJhaWxpbmdDb250
ZW50LT5wYXJ0aWFsUnVuOwotICAgICAgICBhdXRvJiB0cmFpbGluZ0lubGluZVRleHRJdGVtID0g
ZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGNhbmRpZGF0ZVJ1bnNbdHJhaWxpbmdSdW5JbmRleF0u
aW5saW5lSXRlbSk7Ci0gICAgICAgIEFTU0VSVChwYXJ0aWFsUnVuLmxlbmd0aCA8IHRyYWlsaW5n
SW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpOwotICAgICAgICBhdXRvIG92ZXJmbG93TGVuZ3RoID0g
dHJhaWxpbmdJbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSAtIHBhcnRpYWxSdW4ubGVuZ3RoOwotICAg
ICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6OlllcywgeyBjb21taXR0ZWRJ
bmxpbmVJdGVtQ291bnQsIGZhbHNlIH0sIExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudCB7IHBh
cnRpYWxSdW4ubmVlZHNIeXBoZW4sIG92ZXJmbG93TGVuZ3RoIH0gfTsKLSAgICB9Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5l
OjpObyB9OwotfQotCi12b2lkIExpbmVMYXlvdXRDb250ZXh0Ojpjb21taXRQYXJ0aWFsQ29udGVu
dChMaW5lJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVucywgY29uc3QgTGlu
ZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFydGlhbFRyYWlsaW5n
Q29udGVudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcnVucy5zaXpl
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gcnVuc1tpbmRleF07Ci0gICAgICAg
IGlmIChwYXJ0aWFsVHJhaWxpbmdDb250ZW50LnRyYWlsaW5nUnVuSW5kZXggPT0gaW5kZXgpIHsK
LSAgICAgICAgICAgIEFTU0VSVChydW4uaW5saW5lSXRlbS5pc1RleHQoKSk7Ci0gICAgICAgICAg
ICAvLyBDcmVhdGUgYW5kIGNvbW1pdCBwYXJ0aWFsIHRyYWlsaW5nIGl0ZW0uCi0gICAgICAgICAg
ICBpZiAoYXV0byBwYXJ0aWFsUnVuID0gcGFydGlhbFRyYWlsaW5nQ29udGVudC5wYXJ0aWFsUnVu
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgdHJhaWxpbmdJbmxpbmVUZXh0SXRlbSA9IGRvd25j
YXN0PElubGluZVRleHRJdGVtPihydW5zW3BhcnRpYWxUcmFpbGluZ0NvbnRlbnQudHJhaWxpbmdS
dW5JbmRleF0uaW5saW5lSXRlbSk7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJ0aWFsVHJhaWxp
bmdUZXh0SXRlbSA9IHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0ubGVmdChwYXJ0aWFsUnVuLT5sZW5n
dGgpOwotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kUGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0o
cGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4tPmxvZ2ljYWxXaWR0aCwgcGFydGlh
bFJ1bi0+bmVlZHNIeXBoZW4pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIFRoZSBwYXJ0aWFsIHJ1biBpcyB0aGUgbGFzdCBjb250ZW50IHRv
IGNvbW1pdC4KLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9n
aWNhbFdpZHRoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsaW5l
LmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxvZ2ljYWxXaWR0aCk7Ci0gICAgfQotfQotCi1z
aXplX3QgTGluZUxheW91dENvbnRleHQ6OnJlYnVpbGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElu
bGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCi17Ci0gICAgLy8gQ2xlYXIgdGhlIGxpbmUgYW5k
IHN0YXJ0IGFwcGVuZGluZyB0aGUgaW5saW5lIGl0ZW1zIGNsb3Npbmcgd2l0aCB0aGUgbGFzdCB3
cmFwIG9wcG9ydHVuaXR5IHJ1bi4KLSAgICBsaW5lLmNsZWFyQ29udGVudCgpOwotICAgIGF1dG8g
Y3VycmVudEl0ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0YXJ0OwotICAgIGF1dG8gbG9naWNhbFJp
Z2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgaWYgKG1fcGFydGlhbExlYWRpbmdUZXh0
SXRlbSkgewotICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1XaWR0aCgqbV9w
YXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsUmlnaHQpOwotICAgICAgICBsaW5lLmFwcGVu
ZCgqbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsV2lkdGgpOwotICAgICAgICBsb2dp
Y2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOwotICAgICAgICBpZiAoJm1fcGFydGlhbExlYWRpbmdU
ZXh0SXRlbS52YWx1ZSgpID09IG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0pCi0gICAgICAgICAg
ICByZXR1cm4gMTsKLSAgICAgICAgKytjdXJyZW50SXRlbUluZGV4OwotICAgIH0KLSAgICBmb3Ig
KDsgY3VycmVudEl0ZW1JbmRleCA8IGxheW91dFJhbmdlLmVuZDsgKytjdXJyZW50SXRlbUluZGV4
KSB7Ci0gICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBtX2lubGluZUl0ZW1zW2N1cnJlbnRJdGVt
SW5kZXhdOwotICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1XaWR0aChpbmxp
bmVJdGVtLCBsb2dpY2FsUmlnaHQpOwotICAgICAgICBsaW5lLmFwcGVuZChpbmxpbmVJdGVtLCBs
b2dpY2FsV2lkdGgpOwotICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOwotICAg
ICAgICBpZiAoJmlubGluZUl0ZW0gPT0gbV9sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSkKLSAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50SXRlbUluZGV4IC0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyAxOwot
ICAgIH0KLSAgICByZXR1cm4gbGF5b3V0UmFuZ2Uuc2l6ZSgpOwotfQotCi19Ci19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGlu
ZUxheW91dENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0xpbmVMYXlvdXRDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MjFm
NmI4MzY3ZmY3Y2QxMzNiNDZiMjBlMzU5MTg0Y2Y5N2JhYzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiSW5saW5lTGluZS5oIgotI2luY2x1ZGUgIklubGlu
ZUxpbmVCcmVha2VyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQg
ewotCi1zdHJ1Y3QgTGluZUNhbmRpZGF0ZTsKLQotY2xhc3MgTGluZUxheW91dENvbnRleHQgewot
cHVibGljOgotICAgIExpbmVMYXlvdXRDb250ZXh0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0JiwgY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IElu
bGluZUl0ZW1zJik7Ci0KLSAgICBzdHJ1Y3QgSW5saW5lSXRlbVJhbmdlIHsKLSAgICAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc3RhcnQgPT0gZW5kOyB9Ci0gICAgICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gZW5kIC0gc3RhcnQ7IH0KLSAgICAgICAgc2l6ZV90IHN0
YXJ0IHsgMCB9OwotICAgICAgICBzaXplX3QgZW5kIHsgMCB9OwotICAgIH07Ci0gICAgc3RydWN0
IExpbmVDb250ZW50IHsKLSAgICAgICAgc3RydWN0IFBhcnRpYWxDb250ZW50IHsKLSAgICAgICAg
ICAgIGJvb2wgdHJhaWxpbmdDb250ZW50SGFzSHlwaGVuIHsgZmFsc2UgfTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIG92ZXJmbG93Q29udGVudExlbmd0aCB7IDAgfTsKLSAgICAgICAgfTsKLSAgICAg
ICAgT3B0aW9uYWw8UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxDb250ZW50OwotICAgICAgICBJbmxp
bmVJdGVtUmFuZ2UgaW5saW5lSXRlbVJhbmdlOwotICAgICAgICBzdHJ1Y3QgRmxvYXQgewotICAg
ICAgICAgICAgYm9vbCBpc0ludHJ1c2l2ZSB7IHRydWUgfTsKLSAgICAgICAgICAgIGNvbnN0IElu
bGluZUl0ZW0qIGl0ZW0geyBudWxscHRyIH07Ci0gICAgICAgIH07Ci0gICAgICAgIHVzaW5nIEZs
b2F0TGlzdCA9IFZlY3RvcjxGbG9hdD47Ci0gICAgICAgIEZsb2F0TGlzdCBmbG9hdHM7Ci0gICAg
ICAgIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnM7Ci0gICAgfTsKLSAgICBMaW5lQ29udGVudCBs
YXlvdXRJbmxpbmVDb250ZW50KExpbmUmLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmLCBPcHRpb25h
bDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIG5leHRDb250ZW50Rm9yTGluZShMaW5lQ2FuZGlkYXRlJiwgdW5zaWduZWQgaW5saW5l
SXRlbUluZGV4LCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCBPcHRpb25hbDx1
bnNpZ25lZD4gb3ZlcmZsb3dMZW5ndGgsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlTGluZVdp
ZHRoLCBJbmxpbmVMYXlvdXRVbml0IGN1cnJlbnRMb2dpY2FsUmlnaHQpOwotICAgIHN0cnVjdCBS
ZXN1bHQgewotICAgICAgICBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmUgaXNFbmRPZkxpbmUgeyBM
aW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6Ok5vIH07Ci0gICAgICAgIHN0cnVjdCBDb21taXR0ZWRD
b250ZW50Q291bnQgewotICAgICAgICAgICAgc2l6ZV90IHZhbHVlIHsgMCB9OwotICAgICAgICAg
ICAgYm9vbCBpc1JldmVydCB7IGZhbHNlIH07Ci0gICAgICAgIH07Ci0gICAgICAgIENvbW1pdHRl
ZENvbnRlbnRDb3VudCBjb21taXR0ZWRDb3VudCB7IH07Ci0gICAgICAgIE9wdGlvbmFsIDxMaW5l
Q29udGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxDb250ZW50IHsgfTsKLSAgICB9OwotICAg
IGVudW0gY2xhc3MgQ29tbWl0SW50cnVzaXZlRmxvYXRzT25seSB7IE5vLCBZZXMgfTsKLSAgICB2
b2lkIGNvbW1pdEZsb2F0cyhMaW5lJiwgY29uc3QgTGluZUNhbmRpZGF0ZSYsIENvbW1pdEludHJ1
c2l2ZUZsb2F0c09ubHkgPSBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5OjpObyk7Ci0gICAgUmVz
dWx0IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImLCBMaW5lJiwgY29u
c3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYpOwot
ICAgIHNpemVfdCByZWJ1aWxkTGluZShMaW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlv
dXRSYW5nZSk7Ci0gICAgdm9pZCBjb21taXRQYXJ0aWFsQ29udGVudChMaW5lJiwgY29uc3QgTGlu
ZUJyZWFrZXI6OlJ1bkxpc3QmLCBjb25zdCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJh
aWxpbmdDb250ZW50Jik7Ci0gICAgTGluZUNvbnRlbnQgY2xvc2UoY29uc3QgTGluZSYsIGNvbnN0
IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0
ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6OlBhcnRpYWxDb250ZW50Pik7Ci0KLSAgICBJ
bmxpbmVMYXlvdXRVbml0IGlubGluZUl0ZW1XaWR0aChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5l
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OwotCi0gICAgY29uc3QgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQotICAgIGNvbnN0IENvbnRhaW5lckJveCYgcm9vdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHRSb290OyB9Ci0KLSAgICBjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICBj
b25zdCBDb250YWluZXJCb3gmIG1fZm9ybWF0dGluZ0NvbnRleHRSb290OwotICAgIGNvbnN0IElu
bGluZUl0ZW1zJiBtX2lubGluZUl0ZW1zOwotICAgIExpbmVDb250ZW50OjpGbG9hdExpc3QgbV9m
bG9hdHM7Ci0gICAgT3B0aW9uYWw8SW5saW5lVGV4dEl0ZW0+IG1fcGFydGlhbExlYWRpbmdUZXh0
SXRlbTsKLSAgICBjb25zdCBJbmxpbmVJdGVtKiBtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtIHsg
bnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQg
eyAwIH07Ci19OwotCi19Ci19Ci0jZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>