<?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>207371</bug_id>
          
          <creation_ts>2020-02-06 17:46:04 -0800</creation_ts>
          <short_desc>[Cocoa] Rename LocaleMac to LocaleCocoa</short_desc>
          <delta_ts>2020-02-06 20:13:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>annulen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1615963</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-02-06 17:46:04 -0800</bug_when>
    <thetext>[Cocoa] Rename LocaleMac to LocaleCocoa</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615966</commentid>
    <comment_count>1</comment_count>
      <attachid>390036</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-02-06 17:54:50 -0800</bug_when>
    <thetext>Created attachment 390036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616011</commentid>
    <comment_count>2</comment_count>
      <attachid>390045</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-02-06 19:14:11 -0800</bug_when>
    <thetext>Created attachment 390045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616033</commentid>
    <comment_count>3</comment_count>
      <attachid>390045</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-06 20:12:44 -0800</bug_when>
    <thetext>Comment on attachment 390045
Patch

Clearing flags on attachment: 390045

Committed r256007: &lt;https://trac.webkit.org/changeset/256007&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616034</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-06 20:12:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616035</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-06 20:13:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/59249351&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390036</attachid>
            <date>2020-02-06 17:54:50 -0800</date>
            <delta_ts>2020-02-06 19:14:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207371-20200206175449.patch</filename>
            <type>text/plain</type>
            <size>44867</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1OTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDljMjI3NzBkNzQzODhj
YmEzNWI0ZDkzMTZmZWI4NTVhNTY5MTM3NS4uMTBhMzA5NmRjZjdiYzljY2E3ODY4MzI3NmE1N2M4
NmE4YjFkMGJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIwLTAyLTA2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBS
ZW5hbWUgTG9jYWxlTWFjIHRvIExvY2FsZUNvY29hCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDczNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJdCdzIHVzZWQgYnkgYWxsIHRoZSBDb2NvYSBwbGF0Zm9y
bXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLm9yZGVyOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL2NvY29hL01lbW9yeVJl
bGVhc2VDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtUmVsZWFzZU1lbW9yeSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6YXBwbHlUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L21hYy9Mb2NhbGVNYWMubW06IFJlbW92ZWQuCisKIDIwMjAtMDItMDYgIEphbWVzIERhcnBpbmlh
biAgPGpkYXJwaW5pYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHdlYmdsLzEuMC4zL2NvbmZv
cm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy5odG1sIGlzIHRpbWlu
ZyBvdXQgb24gc29tZSBoYXJkd2FyZSBjb25maWd1cmF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQppbmRleCAxOTliNmRkMDEwYTJkY2IxMGJhNzc2YWI3Zjc5MTZmMzM3OGY4MTBkLi5iZjRh
ZDMyODYzNDIzMGYzMzQxMGJiMTIwMjIwOTFmMjJiMmUwOThhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQpAQCAtNDMwLDkgKzQzMCwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlv
blF1ZXVlRGVsZWdhdGUubW0KICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlVVJMUmVz
cG9uc2UubW0KIAorICAgIHBsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0KKwogICAg
IHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKIAotICAgIHBsYXRmb3JtL3RleHQv
bWFjL0xvY2FsZU1hYy5tbQogICAgIHBsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1t
CiAgICAgcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENoZWNraW5nTWFjLm1tCiAgICAgcGxhdGZvcm0v
dGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDRkZTc1ZGY4ZGYwYjhmOTBlNWIyNTgxNTdlYWRhNGE2OWQzYjU5MTYuLjI1N2MxMTMz
ZmY5MTA0NDdiN2MxNDQxYzRlYTNmY2FmNjZmNjVhYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtNTM3LDEwICs1MzcsMTEgQEAgcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJl
c3BvbnNlLm1tCiAKIHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKIAorcGxhdGZv
cm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbQorCiBwbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6
ZWREYXRlQ2FjaGUubW0KIHBsYXRmb3JtL3RleHQvaW9zL1RleHRFbmNvZGluZ1JlZ2lzdHJ5SU9T
Lm1tCiAKLXBsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQogcGxhdGZvcm0vdGV4dC9tYWMv
VGV4dEJvdW5kYXJpZXMubW0KIHBsYXRmb3JtL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbQog
cGxhdGZvcm0vdGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9y
ZGVyCmluZGV4IDM3ZDI0NWUxMWU4YmYzNjI2NTIzZjA3NmVhMmI5M2QyYzEwNmUxOWIuLjM0ZjFh
NzI1OTZmYjg5YzhiNjQ3ZmZmMzM0OGNjYTNkOTU5YzAxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpA
QCAtMjMxNzMsNyArMjMxNzMsNyBAQCBfX1pUVk43V2ViQ29yZTE0TGFiZWxzTm9kZUxpc3RFCiBf
X1pUVk43V2ViQ29yZTE2TGVnYWN5V2ViQXJjaGl2ZUUKIF9fWlRWTjdXZWJDb3JlMTBMaW5rTG9h
ZGVyRQogX19aVFZON1dlYkNvcmUxN0xvYWRhYmxlVGV4dFRyYWNrRQotX19aVFZON1dlYkNvcmU5
TG9jYWxlTWFjRQorX19aVFZON1dlYkNvcmU5TG9jYWxlQ29jb2FFCiBfX1paTjdXZWJDb3JlMTZz
Y3JpcHROYW1lVG9Db2RlRVJLTjNXVEY2U3RyaW5nRUUxOHNjcmlwdE5hbWVDb2RlTGlzdAogX19a
Wk43V2ViQ29yZTM0bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbkVSS04zV1RGNlN0
cmluZ0VFMTZsb2NhbGVTY3JpcHRMaXN0CiBfX1pUVk43V2ViQ29yZTE4TWFpblJlc291cmNlTG9h
ZGVyRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGZlYmYwNWViMDU5NzI4ZjZiZWE5ODE5MzQ2MjYwMDBmOGNiNTBhZTQuLjU2MDgw
MWQ0OWI4OWZmNTE4ZTNiZTNlZTIzNTE2NDMzYTdjNDVlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUwMTMsNyArNTAxMyw3
IEBACiAJCUY1NUIzRERDMTI1MUYxMkQwMDNFRjI2OSAvKiBUaW1lSW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0RBODEyNTFGMTJE
MDAzRUYyNjkgLyogVGltZUlucHV0VHlwZS5oICovOyB9OwogCQlGNTVCM0RERTEyNTFGMTJEMDAz
RUYyNjkgLyogVVJMSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTVCM0RBQTEyNTFGMTJEMDAzRUYyNjkgLyogVVJMSW5wdXRUeXBlLmgg
Ki87IH07CiAJCUY1NUIzREUwMTI1MUYxMkQwMDNFRjI2OSAvKiBXZWVrSW5wdXRUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0RBQzEyNTFG
MTJEMDAzRUYyNjkgLyogV2Vla0lucHV0VHlwZS5oICovOyB9OwotCQlGNTk3M0RFMDE1Q0ZCMjAz
MDAyN0Y4MDQgLyogTG9jYWxlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTk3M0RERTE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlTWFjLmggKi87
IH07CisJCUY1OTczREUwMTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVDb2NvYS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU5NzNEREUxNUNGQjIwMzAw
MjdGODA0IC8qIExvY2FsZUNvY29hLmggKi87IH07CiAJCUY1OUM5NjAwMTI1NUIyM0YwMDA2MjND
MCAvKiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1OUM5NUZFMTI1NUIyM0YwMDA2MjNDMCAvKiBCYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGUuaCAqLzsgfTsKIAkJRjVBMTU0MjgxMjc5NTM0RDAwRDBCMEMwIC8q
IFZhbGlkYXRpb25NZXNzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNUExNTQyNjEyNzk1MzREMDBEMEIwQzAgLyogVmFsaWRhdGlvbk1lc3NhZ2Uu
aCAqLzsgfTsKIAkJRjVDMDQxREIwRkZDQTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzA0
MUQ4MEZGQ0E3Q0UwMDgzOUQ0QSAvKiBIVE1MRGF0YUxpc3RFbGVtZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1NTMzLDggKzE1NTMzLDgg
QEAKIAkJRjU4Nzg2NDkwMkRFM0E5QTAxRUE0MTIyIC8qIENhY2hlUG9saWN5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlUG9saWN5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTg3ODY2MjAyREUzQjExMDFFQTQxMjIgLyogU1NMS2V5R2VuZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNTTEtleUdlbmVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJRjU4Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXJzb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1OTczRERF
MTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9jYWxlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY1OTcz
RERGMTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUY1OTczRERFMTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGNTk3M0RERjE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlQ29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBMb2NhbGVDb2NvYS5tbTsg
cGF0aCA9ICIuLi9jb2NvYS9Mb2NhbGVDb2NvYS5tbSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY1OUM5NUZEMTI1NUIyM0YwMDA2MjNDMCAvKiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU5Qzk1RkUx
MjU1QjIzRjAwMDYyM0MwIC8qIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjVBMTU0MjUxMjc5NTM0RDAwRDBCMEMwIC8qIFZhbGlk
YXRpb25NZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZh
bGlkYXRpb25NZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MzU0
LDYgKzE3MzU0LDE1IEBACiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwogCQl9OworCQkxQzE2NUU0RjIzRUNGNTVFMDBCMEZDRkIgLyogY29jb2EgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUY1OTczRERFMTVDRkIy
MDMwMDI3RjgwNCAvKiBMb2NhbGVDb2NvYS5oICovLAorCQkJCUY1OTczRERGMTVDRkIyMDMwMDI3
RjgwNCAvKiBMb2NhbGVDb2NvYS5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gY29jb2E7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzVGQUVDQTBEQ0ZEOEM5MDBENThGNzgg
LyogSW5zcGVjdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
QEAgLTI1MTQyLDYgKzI1MTUxLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJQjJCMjY0NTkwRDAwQTc3RTAwMEFDQzFEIC8qIGNmICovLAorCQkJCTFDMTY1RTRG
MjNFQ0Y1NUUwMEIwRkNGQiAvKiBjb2NvYSAqLywKIAkJCQlBNTE2RThCMjEzNkUwNEMwMDA3NkMz
QzAgLyogaW9zICovLAogCQkJCUIyQzNEOUY5MEQwMDZDMUQwMEVGNkYyNiAvKiBtYWMgKi8sCiAJ
CQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmNwcCAqLywKQEAgLTI1
MTk4LDggKzI1MjA4LDYgQEAKIAkJQjJDM0Q5RjkwRDAwNkMxRDAwRUY2RjI2IC8qIG1hYyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRjU5NzNEREUxNUNG
QjIwMzAwMjdGODA0IC8qIExvY2FsZU1hYy5oICovLAotCQkJCUY1OTczRERGMTVDRkIyMDMwMDI3
RjgwNCAvKiBMb2NhbGVNYWMubW0gKi8sCiAJCQkJQjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8q
IFRleHRCb3VuZGFyaWVzLm1tICovLAogCQkJCUNFQTg0NzIwMjEyNjIyQUQwMDk0MDgwOSAvKiBU
ZXh0Q2hlY2tpbmdNYWMubW0gKi8sCiAJCQkJQTFGNTVEQzQxRjU0RDNGMDAwRURCNzVGIC8qIFRl
eHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tICovLApAQCAtMzEzNTAsNyArMzEzNTgsNyBAQAogCQkJ
CTA2RTgxRUQ3MEFCNUQ1RTkwMEM4NzgzNyAvKiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFDNDNERTZCMjJBQjRCOEEwMDE1MjdEOSAvKiBMb2NhbEN1
cnJlbnRUcmFpdENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0NTc3NUU1MjA0NzJG
NzMwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlGNTk3M0RFMDE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlTWFjLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGNTk3M0RFMDE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlQ29jb2EuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc2MzNBNzI2MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1Njcmlw
dE1hcHBpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTZFOEI3MTM2RTA0REIwMDc2QzNDMCAv
KiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTIwN0JFMDlCRDQx
MEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KaW5kZXggN2NiODY4
MDg2MDQyY2ZlZWE2YTMzYWY0YzMxYzUwMWEzNzc3ZmQ2ZS4uNzNmODBiZGY4ZGFmZmU1N2U5YmYw
NmE1ZDY5MWY3NmIxODk3MGM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2Nv
YS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9N
ZW1vcnlSZWxlYXNlQ29jb2EubW0KQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgIkdDQ29udHJv
bGxlci5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiTGF5ZXJQb29sLmgi
Ci0jaW1wb3J0ICJMb2NhbGVNYWMuaCIKKyNpbXBvcnQgIkxvY2FsZUNvY29hLmgiCiAjaW1wb3J0
ICJTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIgogI2ltcG9ydCA8bm90aWZ5Lmg+CiAjaW1w
b3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CkBAIC01Niw3ICs1Niw3IEBA
IHZvaWQgcGxhdGZvcm1SZWxlYXNlTWVtb3J5KENyaXRpY2FsKQogICAgIEdTRm9udFB1cmdlRm9u
dENhY2hlKCk7CiAjZW5kaWYKIAotICAgIExvY2FsZU1hYzo6cmVsZWFzZU1lbW9yeSgpOworICAg
IExvY2FsZUNvY29hOjpyZWxlYXNlTWVtb3J5KCk7CiAKICAgICBmb3IgKGF1dG8mIHBvb2wgOiBM
YXllclBvb2w6OmFsbExheWVyUG9vbHMoKSkKICAgICAgICAgcG9vbC0+ZHJhaW4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpp
bmRleCA5M2I4YmIxY2MxNzJkYjNiZjdiY2MzM2NlMTE5OWY0YTZjODU2ODRjLi5kZmIwODBkMDBk
NmJiMzQ2YjgxNTE0NjA3ZTVkZGRlY2IxMjFiMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0
ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbXBvcnQgIkxvY2FsZU1hYy5oIgorI2ltcG9ydCAiTG9j
YWxlQ29jb2EuaCIKICNpbXBvcnQgIk9wZW5UeXBlQ0cuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZl
ci5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KQEAgLTU2MCw3ICs1NjAsNyBAQCB2
b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2ln
bmVkIGJlZ2lubmluZ0luZGV4LCBibwogICAgICAgICAqbmV3R2x5cGhzUG9pbnRlciA9IGdseXBo
QnVmZmVyLmdseXBocyhiZWdpbm5pbmdJbmRleCk7CiAgICAgICAgICpuZXdBZHZhbmNlc1BvaW50
ZXIgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdJbmRleCk7CiAgICAgfTsKLSAgICBD
VEZvbnRUcmFuc2Zvcm1HbHlwaHNXaXRoTGFuZ3VhZ2UobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdJbmRleCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dT
aXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nSW5kZXgpKSwgZ2x5cGhCdWZmZXIu
c2l6ZSgpIC0gYmVnaW5uaW5nSW5kZXgsIG9wdGlvbnMsIExvY2FsZU1hYzo6Y2Fub25pY2FsTGFu
Z3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2NhbGUpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIGhhbmRsZXIpOworICAgIENURm9udFRyYW5zZm9ybUdseXBoc1dpdGhMYW5ndWFn
ZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0lu
ZGV4KSwgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdp
bm5pbmdJbmRleCkpLCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdJbmRleCwgb3B0aW9u
cywgTG9jYWxlQ29jb2E6OmNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobG9j
YWxlKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBoYW5kbGVyKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGxvY2FsZSk7CiAgICAgQ1RGb250VHJhbnNmb3JtR2x5cGhzKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nSW5kZXgpLCBy
ZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0lu
ZGV4KSksIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0luZGV4LCBvcHRpb25zKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2Eu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41MzFjMTU5ZDdjNDM0YjQ3NzEzNDk1Y2MxYTMxYzcyZmY2NTUwODNiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2Nv
YS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQbGF0Zm9ybUxv
Y2FsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworT0JKQ19DTEFTUyBOU0NhbGVuZGFyOworT0JKQ19DTEFTUyBOU0RhdGVGb3JtYXR0
ZXI7CitPQkpDX0NMQVNTIE5TTG9jYWxlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IERhdGVDb21wb25lbnRzOworCitjbGFzcyBMb2NhbGVDb2NvYSA6IHB1YmxpYyBMb2NhbGUgewor
cHVibGljOgorICAgIGV4cGxpY2l0IExvY2FsZUNvY29hKE5TTG9jYWxlKik7CisgICAgfkxvY2Fs
ZUNvY29hKCk7CisKKyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKKyAgICBT
dHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmLCBGb3JtYXRUeXBlID0g
Rm9ybWF0VHlwZVVuc3BlY2lmaWVkKSBvdmVycmlkZTsKKworICAgIFN0cmluZyBkYXRlRm9ybWF0
KCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIG1vbnRoRm9ybWF0KCkgb3ZlcnJpZGU7CisgICAgU3Ry
aW5nIHNob3J0TW9udGhGb3JtYXQoKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGltZUZvcm1hdCgp
IG92ZXJyaWRlOworICAgIFN0cmluZyBzaG9ydFRpbWVGb3JtYXQoKSBvdmVycmlkZTsKKyAgICBT
dHJpbmcgZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kcygpIG92ZXJyaWRlOworICAgIFN0cmluZyBk
YXRlVGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIG1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHNob3J0TW9udGhMYWJlbHMoKSBvdmVycmlkZTsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7CisgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHRpbWVBTVBNTGFiZWxzKCkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAg
IHN0YXRpYyBBdG9tU3RyaW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmco
Y29uc3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VNZW1vcnkoKTsKKwor
cHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBzaG9ydERhdGVGb3JtYXR0
ZXIoKTsKKyAgICB2b2lkIGluaXRpYWxpemVMb2NhbGVEYXRhKCkgb3ZlcnJpZGU7CisKKyAgICBS
ZXRhaW5QdHI8TlNMb2NhbGU+IG1fbG9jYWxlOworICAgIFJldGFpblB0cjxOU0NhbGVuZGFyPiBt
X2dyZWdvcmlhbkNhbGVuZGFyOworI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVT
KQorICAgIFZlY3RvcjxTdHJpbmc+IG1fbW9udGhMYWJlbHM7CisgICAgUmV0YWluUHRyPE5TRGF0
ZUZvcm1hdHRlcj4gdGltZUZvcm1hdHRlcigpOworICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0
ZXI+IHNob3J0VGltZUZvcm1hdHRlcigpOworICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+
IGRhdGVUaW1lRm9ybWF0dGVyV2l0aFNlY29uZHMoKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBkYXRlVGltZUZvcm1hdHRlcldpdGhvdXRTZWNvbmRzKCk7CisKKyAgICBTdHJpbmcg
bV9kYXRlRm9ybWF0OworICAgIFN0cmluZyBtX21vbnRoRm9ybWF0OworICAgIFN0cmluZyBtX3No
b3J0TW9udGhGb3JtYXQ7CisgICAgU3RyaW5nIG1fdGltZUZvcm1hdFdpdGhTZWNvbmRzOworICAg
IFN0cmluZyBtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKKyAgICBTdHJpbmcgbV9kYXRlVGlt
ZUZvcm1hdFdpdGhTZWNvbmRzOworICAgIFN0cmluZyBtX2RhdGVUaW1lRm9ybWF0V2l0aG91dFNl
Y29uZHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9zaG9ydE1vbnRoTGFiZWxzOworICAgIFZlY3Rv
cjxTdHJpbmc+IG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzOworICAgIFZlY3RvcjxTdHJpbmc+IG1f
c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV90aW1lQU1Q
TUxhYmVsczsKKyNlbmRpZgorICAgIGJvb2wgbV9kaWRJbml0aWFsaXplTnVtYmVyRGF0YTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVlYjgyNmE0
OWI1NzAxYjE3YzE5MGFiMTAwYTM2OTkxNzE5OWE1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0KQEAgLTAsMCArMSwz
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxlQ29jb2EuaCIKKworI2lt
cG9ydCAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0RhdGVGb3Jt
YXR0ZXIuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNMb2NhbGUuaD4KKyNpbXBvcnQgPHd0Zi9E
YXRlTWF0aC5oPgorI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9MYW5ndWFn
ZS5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQXRvbVN0
cmluZ0hhc2guaD4KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW1wb3J0ICJMb2NhbGl6
ZWREYXRlQ2FjaGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBp
bmxpbmUgU3RyaW5nIGxhbmd1YWdlRnJvbUxvY2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSkKK3sK
KyAgICBTdHJpbmcgbm9ybWFsaXplZExvY2FsZSA9IGxvY2FsZTsKKyAgICBub3JtYWxpemVkTG9j
YWxlLnJlcGxhY2UoJy0nLCAnXycpOworICAgIHNpemVfdCBzZXBhcmF0b3JQb3NpdGlvbiA9IG5v
cm1hbGl6ZWRMb2NhbGUuZmluZCgnXycpOworICAgIGlmIChzZXBhcmF0b3JQb3NpdGlvbiA9PSBu
b3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRMb2NhbGU7CisgICAgcmV0dXJuIG5v
cm1hbGl6ZWRMb2NhbGUubGVmdChzZXBhcmF0b3JQb3NpdGlvbik7Cit9CisKK3N0YXRpYyBSZXRh
aW5QdHI8TlNMb2NhbGU+IGRldGVybWluZUxvY2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSkKK3sK
KyAgICBSZXRhaW5QdHI8TlNMb2NhbGU+IGN1cnJlbnRMb2NhbGUgPSBbTlNMb2NhbGUgY3VycmVu
dExvY2FsZV07CisgICAgU3RyaW5nIGN1cnJlbnRMb2NhbGVMYW5ndWFnZSA9IGxhbmd1YWdlRnJv
bUxvY2FsZShTdHJpbmcoW2N1cnJlbnRMb2NhbGUuZ2V0KCkgbG9jYWxlSWRlbnRpZmllcl0pKTsK
KyAgICBTdHJpbmcgbG9jYWxlTGFuZ3VhZ2UgPSBsYW5ndWFnZUZyb21Mb2NhbGUobG9jYWxlKTsK
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjdXJyZW50TG9jYWxlTGFuZ3VhZ2UsIGxv
Y2FsZUxhbmd1YWdlKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRMb2NhbGU7CisgICAgLy8gSXQg
c2VlbXMgaW5pdFdpdGhMb2NhbGVJZGVudGlmaWVyIGFjY2VwdHMgZGFzaC1zZXBhcmF0ZWQgbG9j
YWxlIGlkZW50aWZpZXIuCisgICAgcmV0dXJuIGFkb3B0TlMoW1tOU0xvY2FsZSBhbGxvY10gaW5p
dFdpdGhMb2NhbGVJZGVudGlmaWVyOmxvY2FsZV0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TG9j
YWxlPiBMb2NhbGU6OmNyZWF0ZShjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUpCit7CisgICAgcmV0
dXJuIG1ha2VVbmlxdWU8TG9jYWxlQ29jb2E+KGRldGVybWluZUxvY2FsZShsb2NhbGUuc3RyaW5n
KCkpLmdldCgpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGNyZWF0
ZURhdGVUaW1lRm9ybWF0dGVyKE5TTG9jYWxlKiBsb2NhbGUsIE5TQ2FsZW5kYXIqIGNhbGVuZGFy
LCBOU0RhdGVGb3JtYXR0ZXJTdHlsZSBkYXRlU3R5bGUsIE5TRGF0ZUZvcm1hdHRlclN0eWxlIHRp
bWVTdHlsZSkKK3sKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmZvcm1hdHRlciA9IFtbTlNEYXRlRm9y
bWF0dGVyIGFsbG9jXSBpbml0XTsKKyAgICBbZm9ybWF0dGVyIHNldExvY2FsZTpsb2NhbGVdOwor
ICAgIFtmb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOmRhdGVTdHlsZV07CisgICAgW2Zvcm1hdHRlciBz
ZXRUaW1lU3R5bGU6dGltZVN0eWxlXTsKKyAgICBbZm9ybWF0dGVyIHNldFRpbWVab25lOltOU1Rp
bWVab25lIHRpbWVab25lV2l0aEFiYnJldmlhdGlvbjpAIlVUQyJdXTsKKyAgICBbZm9ybWF0dGVy
IHNldENhbGVuZGFyOmNhbGVuZGFyXTsKKyAgICByZXR1cm4gYWRvcHROUyhmb3JtYXR0ZXIpOwor
fQorCitMb2NhbGVDb2NvYTo6TG9jYWxlQ29jb2EoTlNMb2NhbGUqIGxvY2FsZSkKKyAgICA6IG1f
bG9jYWxlKGxvY2FsZSkKKyAgICAsIG1fZ3JlZ29yaWFuQ2FsZW5kYXIoYWRvcHROUyhbW05TQ2Fs
ZW5kYXIgYWxsb2NdIGluaXRXaXRoQ2FsZW5kYXJJZGVudGlmaWVyOk5TQ2FsZW5kYXJJZGVudGlm
aWVyR3JlZ29yaWFuXSkpCisgICAgLCBtX2RpZEluaXRpYWxpemVOdW1iZXJEYXRhKGZhbHNlKQor
eworICAgIE5TQXJyYXkqIGF2YWlsYWJsZUxhbmd1YWdlcyA9IFtOU0xvY2FsZSBJU09MYW5ndWFn
ZUNvZGVzXTsKKyAgICAvLyBOU0xvY2FsZSByZXR1cm5zIGEgbG93ZXIgY2FzZSBOU0xvY2FsZUxh
bmd1YWdlQ29kZSBzbyB3ZSBkb24ndCBoYXZlIGNhcmUgYWJvdXQgY2FzZS4KKyAgICBOU1N0cmlu
ZyogbGFuZ3VhZ2UgPSBbbV9sb2NhbGUuZ2V0KCkgb2JqZWN0Rm9yS2V5Ok5TTG9jYWxlTGFuZ3Vh
Z2VDb2RlXTsKKyAgICBpZiAoW2F2YWlsYWJsZUxhbmd1YWdlcyBpbmRleE9mT2JqZWN0Omxhbmd1
YWdlXSA9PSBOU05vdEZvdW5kKQorICAgICAgICBtX2xvY2FsZSA9IGFkb3B0TlMoW1tOU0xvY2Fs
ZSBhbGxvY10gaW5pdFdpdGhMb2NhbGVJZGVudGlmaWVyOmRlZmF1bHRMYW5ndWFnZSgpXSk7Cisg
ICAgW21fZ3JlZ29yaWFuQ2FsZW5kYXIuZ2V0KCkgc2V0TG9jYWxlOm1fbG9jYWxlLmdldCgpXTsK
K30KKworTG9jYWxlQ29jb2E6On5Mb2NhbGVDb2NvYSgpCit7Cit9CisKK1JldGFpblB0cjxOU0Rh
dGVGb3JtYXR0ZXI+IExvY2FsZUNvY29hOjpzaG9ydERhdGVGb3JtYXR0ZXIoKQoreworICAgIHJl
dHVybiBjcmVhdGVEYXRlVGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVnb3JpYW5D
YWxlbmRhci5nZXQoKSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSwgTlNEYXRlRm9ybWF0dGVy
Tm9TdHlsZSk7Cit9CisKKyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKK1N0
cmluZyBMb2NhbGVDb2NvYTo6Zm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRh
dGVDb21wb25lbnRzLCBGb3JtYXRUeXBlKQoreworICAgIGRvdWJsZSBtc2VjID0gZGF0ZUNvbXBv
bmVudHMubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpOworICAgIERhdGVDb21wb25lbnRzOjpUeXBl
IHR5cGUgPSBkYXRlQ29tcG9uZW50cy50eXBlKCk7CisKKyAgICAvLyAid2VlayIgdHlwZSBub3Qg
c3VwcG9ydGVkLgorICAgIEFTU0VSVCh0eXBlICE9IERhdGVDb21wb25lbnRzOjpJbnZhbGlkKTsK
KyAgICBpZiAodHlwZSA9PSBEYXRlQ29tcG9uZW50czo6V2VlaykKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgLy8gSW5jb21pbmcgbXNlYyB2YWx1ZSBpcyBtaWxsaXNlY29uZHMgc2lu
Y2UgMTk3MC0wMS0wMSAwMDowMDowMCBVVEMuIFRoZSAxOTcwIGVwb2NoLgorICAgIE5TVGltZUlu
dGVydmFsIHNlY29uZHNTaW5jZTE5NzAgPSAobXNlYyAvIDEwMDApOworICAgIE5TRGF0ZSAqZGF0
ZSA9IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6c2Vjb25kc1NpbmNlMTk3
MF07CisKKyAgICAvLyBSZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nLgorICAgIE5TRGF0ZUZvcm1h
dHRlciAqZGF0ZUZvcm1hdHRlciA9IGxvY2FsaXplZERhdGVDYWNoZSgpLmZvcm1hdHRlckZvckRh
dGVUeXBlKHR5cGUpOworICAgIHJldHVybiBbZGF0ZUZvcm1hdHRlciBzdHJpbmdGcm9tRGF0ZTpk
YXRlXTsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZUNvY29hOjptb250aExhYmVs
cygpCit7CisgICAgaWYgKCFtX21vbnRoTGFiZWxzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1fbW9udGhMYWJlbHM7CisgICAgbV9tb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwor
ICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIG1vbnRoU3lt
Ym9sc107CisgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDEyOyArK2kpCisgICAgICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVu
ZChTdHJpbmcoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pKTsKKyAgICAgICAgcmV0dXJuIG1fbW9u
dGhMYWJlbHM7CisgICAgfQorICAgIGZvciAoYXV0byYgbmFtZSA6IFdURjo6bW9udGhGdWxsTmFt
ZSkKKyAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQobmFtZSk7CisgICAgcmV0dXJuIG1fbW9u
dGhMYWJlbHM7Cit9CisKK1JldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IExvY2FsZUNvY29hOjp0
aW1lRm9ybWF0dGVyKCkKK3sKKyAgICByZXR1cm4gY3JlYXRlRGF0ZVRpbWVGb3JtYXR0ZXIobV9s
b2NhbGUuZ2V0KCksIG1fZ3JlZ29yaWFuQ2FsZW5kYXIuZ2V0KCksIE5TRGF0ZUZvcm1hdHRlck5v
U3R5bGUsIE5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlKTsKK30KKworUmV0YWluUHRyPE5TRGF0
ZUZvcm1hdHRlcj4gTG9jYWxlQ29jb2E6OnNob3J0VGltZUZvcm1hdHRlcigpCit7CisgICAgcmV0
dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdldCgpLCBtX2dyZWdvcmlhbkNh
bGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlLCBOU0RhdGVGb3JtYXR0ZXJTaG9y
dFN0eWxlKTsKK30KKworUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlQ29jb2E6OmRh
dGVUaW1lRm9ybWF0dGVyV2l0aFNlY29uZHMoKQoreworICAgIHJldHVybiBjcmVhdGVEYXRlVGlt
ZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVnb3JpYW5DYWxlbmRhci5nZXQoKSwgTlNE
YXRlRm9ybWF0dGVyU2hvcnRTdHlsZSwgTlNEYXRlRm9ybWF0dGVyTWVkaXVtU3R5bGUpOworfQor
CitSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBMb2NhbGVDb2NvYTo6ZGF0ZVRpbWVGb3JtYXR0
ZXJXaXRob3V0U2Vjb25kcygpCit7CisgICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVy
KG1fbG9jYWxlLmdldCgpLCBtX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0
ZXJTaG9ydFN0eWxlLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlKTsKK30KKworU3RyaW5nIExv
Y2FsZUNvY29hOjpkYXRlRm9ybWF0KCkKK3sKKyAgICBpZiAoIW1fZGF0ZUZvcm1hdC5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIG1fZGF0ZUZvcm1hdDsKKyAgICBtX2RhdGVGb3JtYXQgPSBbc2hv
cnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgZGF0ZUZvcm1hdF07CisgICAgcmV0dXJuIG1fZGF0ZUZv
cm1hdDsKK30KKworU3RyaW5nIExvY2FsZUNvY29hOjptb250aEZvcm1hdCgpCit7CisgICAgaWYg
KCFtX21vbnRoRm9ybWF0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9tb250aEZvcm1hdDsK
KyAgICAvLyBHZXRzIGEgZm9ybWF0IGZvciAiTU1NTSIgYmVjYXVzZSBXaW5kb3dzIEFQSSBhbHdh
eXMgcHJvdmlkZXMgZm9ybWF0cyBmb3IKKyAgICAvLyAiTU1NTSIgaW4gc29tZSBsb2NhbGVzLgor
ICAgIG1fbW9udGhGb3JtYXQgPSBbTlNEYXRlRm9ybWF0dGVyIGRhdGVGb3JtYXRGcm9tVGVtcGxh
dGU6QCJ5eXl5TU1NTSIgb3B0aW9uczowIGxvY2FsZTptX2xvY2FsZS5nZXQoKV07CisgICAgcmV0
dXJuIG1fbW9udGhGb3JtYXQ7Cit9CisKK1N0cmluZyBMb2NhbGVDb2NvYTo6c2hvcnRNb250aEZv
cm1hdCgpCit7CisgICAgaWYgKCFtX3Nob3J0TW9udGhGb3JtYXQuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBtX3Nob3J0TW9udGhGb3JtYXQ7CisgICAgbV9zaG9ydE1vbnRoRm9ybWF0ID0gW05T
RGF0ZUZvcm1hdHRlciBkYXRlRm9ybWF0RnJvbVRlbXBsYXRlOkAieXl5eU1NTSIgb3B0aW9uczow
IGxvY2FsZTptX2xvY2FsZS5nZXQoKV07CisgICAgcmV0dXJuIG1fc2hvcnRNb250aEZvcm1hdDsK
K30KKworU3RyaW5nIExvY2FsZUNvY29hOjp0aW1lRm9ybWF0KCkKK3sKKyAgICBpZiAoIW1fdGlt
ZUZvcm1hdFdpdGhTZWNvbmRzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV90aW1lRm9ybWF0
V2l0aFNlY29uZHM7CisgICAgbV90aW1lRm9ybWF0V2l0aFNlY29uZHMgPSBbdGltZUZvcm1hdHRl
cigpLmdldCgpIGRhdGVGb3JtYXRdOworICAgIHJldHVybiBtX3RpbWVGb3JtYXRXaXRoU2Vjb25k
czsKK30KKworU3RyaW5nIExvY2FsZUNvY29hOjpzaG9ydFRpbWVGb3JtYXQoKQoreworICAgIGlm
ICghbV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBt
X3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKKyAgICBtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25k
cyA9IFtzaG9ydFRpbWVGb3JtYXR0ZXIoKS5nZXQoKSBkYXRlRm9ybWF0XTsKKyAgICByZXR1cm4g
bV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHM7Cit9CisKK1N0cmluZyBMb2NhbGVDb2NvYTo6ZGF0
ZVRpbWVGb3JtYXRXaXRoU2Vjb25kcygpCit7CisgICAgaWYgKCFtX2RhdGVUaW1lRm9ybWF0V2l0
aFNlY29uZHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX2RhdGVUaW1lRm9ybWF0V2l0aFNl
Y29uZHM7CisgICAgbV9kYXRlVGltZUZvcm1hdFdpdGhTZWNvbmRzID0gW2RhdGVUaW1lRm9ybWF0
dGVyV2l0aFNlY29uZHMoKS5nZXQoKSBkYXRlRm9ybWF0XTsKKyAgICByZXR1cm4gbV9kYXRlVGlt
ZUZvcm1hdFdpdGhTZWNvbmRzOworfQorCitTdHJpbmcgTG9jYWxlQ29jb2E6OmRhdGVUaW1lRm9y
bWF0V2l0aG91dFNlY29uZHMoKQoreworICAgIGlmICghbV9kYXRlVGltZUZvcm1hdFdpdGhvdXRT
ZWNvbmRzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9kYXRlVGltZUZvcm1hdFdpdGhvdXRT
ZWNvbmRzOworICAgIG1fZGF0ZVRpbWVGb3JtYXRXaXRob3V0U2Vjb25kcyA9IFtkYXRlVGltZUZv
cm1hdHRlcldpdGhvdXRTZWNvbmRzKCkuZ2V0KCkgZGF0ZUZvcm1hdF07CisgICAgcmV0dXJuIG1f
ZGF0ZVRpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4m
IExvY2FsZUNvY29hOjpzaG9ydE1vbnRoTGFiZWxzKCkKK3sKKyAgICBpZiAoIW1fc2hvcnRNb250
aExhYmVscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7Cisg
ICAgbV9zaG9ydE1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7CisgICAgTlNBcnJheSAq
YXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgc2hvcnRNb250aFN5bWJvbHNdOwor
ICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAxMjsgKytpKQorICAgICAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChb
YXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJl
bHM7CisgICAgfQorICAgIGZvciAoYXV0byYgbmFtZSA6IFdURjo6bW9udGhOYW1lKQorICAgICAg
ICBtX3Nob3J0TW9udGhMYWJlbHMuYXBwZW5kKG5hbWUpOworICAgIHJldHVybiBtX3Nob3J0TW9u
dGhMYWJlbHM7Cit9CisKK2NvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c3RhbmRB
bG9uZU1vbnRoTGFiZWxzKCkKK3sKKyAgICBpZiAoIW1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzOworICAgIE5T
QXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIHN0YW5kYWxvbmVNb250
aFN5bWJvbHNdOworICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CisgICAgICAgIG1fc3Rh
bmRBbG9uZU1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQorICAgICAgICAgICAgbV9zdGFuZEFsb25lTW9udGhM
YWJlbHMuYXBwZW5kKFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKKyAgICAgICAgcmV0dXJuIG1f
c3RhbmRBbG9uZU1vbnRoTGFiZWxzOworICAgIH0KKyAgICBtX3N0YW5kQWxvbmVNb250aExhYmVs
cyA9IHNob3J0TW9udGhMYWJlbHMoKTsKKyAgICByZXR1cm4gbV9zdGFuZEFsb25lTW9udGhMYWJl
bHM7Cit9CisKK2NvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c2hvcnRTdGFuZEFs
b25lTW9udGhMYWJlbHMoKQoreworICAgIGlmICghbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVs
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxz
OworICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIHNob3J0
U3RhbmRhbG9uZU1vbnRoU3ltYm9sc107CisgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsK
KyAgICAgICAgbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKKyAgICAgICAgICAg
IG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMuYXBwZW5kKFthcnJheSBvYmplY3RBdEluZGV4
OmldKTsKKyAgICAgICAgcmV0dXJuIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHM7CisgICAg
fQorICAgIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMgPSBzaG9ydE1vbnRoTGFiZWxzKCk7
CisgICAgcmV0dXJuIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHM7Cit9CisKK2NvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMoKQoreworICAgIGlmICgh
bV90aW1lQU1QTUxhYmVscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3RpbWVBTVBNTGFi
ZWxzOworICAgIG1fdGltZUFNUE1MYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDIpOworICAgIFJldGFp
blB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlciA9IHNob3J0VGltZUZvcm1hdHRlcigpOwor
ICAgIG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKFtmb3JtYXR0ZXIuZ2V0KCkgQU1TeW1ib2xdKTsK
KyAgICBtX3RpbWVBTVBNTGFiZWxzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIFBNU3ltYm9sXSk7
CisgICAgcmV0dXJuIG1fdGltZUFNUE1MYWJlbHM7Cit9CisKKyNlbmRpZgorCit1c2luZyBDYW5v
bmljYWxMb2NhbGVNYXAgPSBIYXNoTWFwPEF0b21TdHJpbmcsIEF0b21TdHJpbmc+OworCitzdGF0
aWMgQ2Fub25pY2FsTG9jYWxlTWFwJiBjYW5vbmljYWxMb2NhbGVNYXAoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxDYW5vbmljYWxMb2NhbGVNYXA+IGNhbm9uaWNhbExvY2FsZU1hcDsK
KyAgICByZXR1cm4gY2Fub25pY2FsTG9jYWxlTWFwLmdldCgpOworfQorCitBdG9tU3RyaW5nIExv
Y2FsZUNvY29hOjpjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nKGNvbnN0IEF0
b21TdHJpbmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gY2Fub25pY2FsTG9jYWxlTWFwKCkuZW5z
dXJlKHN0cmluZywgWyZdIHsKKyAgICAgICAgcmV0dXJuIFtOU0xvY2FsZSBjYW5vbmljYWxMYW5n
dWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nOnN0cmluZ107CisgICAgfSkuaXRlcmF0b3ItPnZhbHVl
OworfQorCit2b2lkIExvY2FsZUNvY29hOjpyZWxlYXNlTWVtb3J5KCkKK3sKKyAgICBjYW5vbmlj
YWxMb2NhbGVNYXAoKS5jbGVhcigpOworfQorCit2b2lkIExvY2FsZUNvY29hOjppbml0aWFsaXpl
TG9jYWxlRGF0YSgpCit7CisgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZU51bWJlckRhdGEpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2RpZEluaXRpYWxpemVOdW1iZXJEYXRhID0gdHJ1ZTsKKworICAg
IFJldGFpblB0cjxOU051bWJlckZvcm1hdHRlcj4gZm9ybWF0dGVyID0gYWRvcHROUyhbW05TTnVt
YmVyRm9ybWF0dGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2Zvcm1hdHRlci5nZXQoKSBzZXRMb2Nh
bGU6bV9sb2NhbGUuZ2V0KCldOworICAgIFtmb3JtYXR0ZXIuZ2V0KCkgc2V0TnVtYmVyU3R5bGU6
TlNOdW1iZXJGb3JtYXR0ZXJEZWNpbWFsU3R5bGVdOworICAgIFtmb3JtYXR0ZXIuZ2V0KCkgc2V0
VXNlc0dyb3VwaW5nU2VwYXJhdG9yOk5PXTsKKworICAgIFJldGFpblB0cjxOU051bWJlcj4gc2Ft
cGxlTnVtYmVyID0gYWRvcHROUyhbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aERvdWJsZTo5ODc2
NTQzMjEwXSk7CisgICAgU3RyaW5nIG5pbmVUb1plcm8oW2Zvcm1hdHRlci5nZXQoKSBzdHJpbmdG
cm9tTnVtYmVyOnNhbXBsZU51bWJlci5nZXQoKV0pOworICAgIGlmIChuaW5lVG9aZXJvLmxlbmd0
aCgpICE9IDEwKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFN0cmluZywgRGVjaW1hbFN5
bWJvbHNTaXplPiBzeW1ib2xzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDsgKytp
KQorICAgICAgICBzeW1ib2xzLmFwcGVuZChuaW5lVG9aZXJvLnN1YnN0cmluZyg5IC0gaSwgMSkp
OworICAgIEFTU0VSVChzeW1ib2xzLnNpemUoKSA9PSBEZWNpbWFsU2VwYXJhdG9ySW5kZXgpOwor
ICAgIHN5bWJvbHMuYXBwZW5kKFtmb3JtYXR0ZXIuZ2V0KCkgZGVjaW1hbFNlcGFyYXRvcl0pOwor
ICAgIEFTU0VSVChzeW1ib2xzLnNpemUoKSA9PSBHcm91cFNlcGFyYXRvckluZGV4KTsKKyAgICBz
eW1ib2xzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIGdyb3VwaW5nU2VwYXJhdG9yXSk7CisgICAg
QVNTRVJUKHN5bWJvbHMuc2l6ZSgpID09IERlY2ltYWxTeW1ib2xzU2l6ZSk7CisKKyAgICBTdHJp
bmcgcG9zaXRpdmVQcmVmaXgoW2Zvcm1hdHRlci5nZXQoKSBwb3NpdGl2ZVByZWZpeF0pOworICAg
IFN0cmluZyBwb3NpdGl2ZVN1ZmZpeChbZm9ybWF0dGVyLmdldCgpIHBvc2l0aXZlU3VmZml4XSk7
CisgICAgU3RyaW5nIG5lZ2F0aXZlUHJlZml4KFtmb3JtYXR0ZXIuZ2V0KCkgbmVnYXRpdmVQcmVm
aXhdKTsKKyAgICBTdHJpbmcgbmVnYXRpdmVTdWZmaXgoW2Zvcm1hdHRlci5nZXQoKSBuZWdhdGl2
ZVN1ZmZpeF0pOworICAgIHNldExvY2FsZURhdGEoc3ltYm9scywgcG9zaXRpdmVQcmVmaXgsIHBv
c2l0aXZlU3VmZml4LCBuZWdhdGl2ZVByZWZpeCwgbmVnYXRpdmVTdWZmaXgpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNWQ1YzRlNzFiNGU4NDBjZTU4NzkzZjAyNDdlNTdjNmEwY2Rj
MDViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIExvY2FsZU1hY19oCi0jZGVmaW5lIExvY2FsZU1hY19oCi0K
LSNpbmNsdWRlICJQbGF0Zm9ybUxvY2FsZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotT0JKQ19DTEFTUyBOU0NhbGVuZGFyOwotT0JK
Q19DTEFTUyBOU0RhdGVGb3JtYXR0ZXI7Ci1PQkpDX0NMQVNTIE5TTG9jYWxlOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGVDb21wb25lbnRzOwotCi1jbGFzcyBMb2NhbGVNYWMg
OiBwdWJsaWMgTG9jYWxlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBMb2NhbGVNYWMoTlNMb2Nh
bGUqKTsKLSAgICB+TG9jYWxlTWFjKCk7Ci0KLSNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBV
VF9UWVBFUykKLSAgICBTdHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
LCBGb3JtYXRUeXBlID0gRm9ybWF0VHlwZVVuc3BlY2lmaWVkKSBvdmVycmlkZTsKLQotICAgIFN0
cmluZyBkYXRlRm9ybWF0KCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIG1vbnRoRm9ybWF0KCkgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIHNob3J0TW9udGhGb3JtYXQoKSBvdmVycmlkZTsKLSAgICBTdHJp
bmcgdGltZUZvcm1hdCgpIG92ZXJyaWRlOwotICAgIFN0cmluZyBzaG9ydFRpbWVGb3JtYXQoKSBv
dmVycmlkZTsKLSAgICBTdHJpbmcgZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kcygpIG92ZXJyaWRl
OwotICAgIFN0cmluZyBkYXRlVGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzKCkgb3ZlcnJpZGU7Ci0g
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7Ci0gICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHNob3J0TW9udGhMYWJlbHMoKSBvdmVycmlkZTsKLSAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgc3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7Ci0gICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkgb3ZlcnJp
ZGU7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRpbWVBTVBNTGFiZWxzKCkgb3ZlcnJpZGU7
Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBBdG9tU3RyaW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRp
ZmllckZyb21TdHJpbmcoY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHJlbGVh
c2VNZW1vcnkoKTsKLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBz
aG9ydERhdGVGb3JtYXR0ZXIoKTsKLSAgICB2b2lkIGluaXRpYWxpemVMb2NhbGVEYXRhKCkgb3Zl
cnJpZGU7Ci0KLSAgICBSZXRhaW5QdHI8TlNMb2NhbGU+IG1fbG9jYWxlOwotICAgIFJldGFpblB0
cjxOU0NhbGVuZGFyPiBtX2dyZWdvcmlhbkNhbGVuZGFyOwotI2lmIEVOQUJMRShEQVRFX0FORF9U
SU1FX0lOUFVUX1RZUEVTKQotICAgIFZlY3RvcjxTdHJpbmc+IG1fbW9udGhMYWJlbHM7Ci0gICAg
UmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gdGltZUZvcm1hdHRlcigpOwotICAgIFJldGFpblB0
cjxOU0RhdGVGb3JtYXR0ZXI+IHNob3J0VGltZUZvcm1hdHRlcigpOwotICAgIFJldGFpblB0cjxO
U0RhdGVGb3JtYXR0ZXI+IGRhdGVUaW1lRm9ybWF0dGVyV2l0aFNlY29uZHMoKTsKLSAgICBSZXRh
aW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBkYXRlVGltZUZvcm1hdHRlcldpdGhvdXRTZWNvbmRzKCk7
Ci0KLSAgICBTdHJpbmcgbV9kYXRlRm9ybWF0OwotICAgIFN0cmluZyBtX21vbnRoRm9ybWF0Owot
ICAgIFN0cmluZyBtX3Nob3J0TW9udGhGb3JtYXQ7Ci0gICAgU3RyaW5nIG1fdGltZUZvcm1hdFdp
dGhTZWNvbmRzOwotICAgIFN0cmluZyBtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKLSAgICBT
dHJpbmcgbV9kYXRlVGltZUZvcm1hdFdpdGhTZWNvbmRzOwotICAgIFN0cmluZyBtX2RhdGVUaW1l
Rm9ybWF0V2l0aG91dFNlY29uZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9zaG9ydE1vbnRoTGFi
ZWxzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzOwotICAgIFZl
Y3RvcjxTdHJpbmc+IG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHM7Ci0gICAgVmVjdG9yPFN0
cmluZz4gbV90aW1lQU1QTUxhYmVsczsKLSNlbmRpZgotICAgIGJvb2wgbV9kaWRJbml0aWFsaXpl
TnVtYmVyRGF0YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZGMxNDBiM2NiMTFiMGMwZDI5NDllNTBlZjc5ODRiOGUwMTNjZmM3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0x
LDMzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsZU1hYy5oIgot
Ci0jaW1wb3J0ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9uL05TRGF0
ZUZvcm1hdHRlci5oPgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0xvY2FsZS5oPgotI2ltcG9ydCA8
d3RmL0RhdGVNYXRoLmg+Ci0jaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgotI2ltcG9ydCA8d3RmL0xh
bmd1YWdlLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9B
dG9tU3RyaW5nSGFzaC5oPgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbXBvcnQgIkxv
Y2FsaXplZERhdGVDYWNoZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIGlubGluZSBTdHJpbmcgbGFuZ3VhZ2VGcm9tTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxl
KQotewotICAgIFN0cmluZyBub3JtYWxpemVkTG9jYWxlID0gbG9jYWxlOwotICAgIG5vcm1hbGl6
ZWRMb2NhbGUucmVwbGFjZSgnLScsICdfJyk7Ci0gICAgc2l6ZV90IHNlcGFyYXRvclBvc2l0aW9u
ID0gbm9ybWFsaXplZExvY2FsZS5maW5kKCdfJyk7Ci0gICAgaWYgKHNlcGFyYXRvclBvc2l0aW9u
ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gbm9ybWFsaXplZExvY2FsZTsKLSAgICByZXR1
cm4gbm9ybWFsaXplZExvY2FsZS5sZWZ0KHNlcGFyYXRvclBvc2l0aW9uKTsKLX0KLQotc3RhdGlj
IFJldGFpblB0cjxOU0xvY2FsZT4gZGV0ZXJtaW5lTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxl
KQotewotICAgIFJldGFpblB0cjxOU0xvY2FsZT4gY3VycmVudExvY2FsZSA9IFtOU0xvY2FsZSBj
dXJyZW50TG9jYWxlXTsKLSAgICBTdHJpbmcgY3VycmVudExvY2FsZUxhbmd1YWdlID0gbGFuZ3Vh
Z2VGcm9tTG9jYWxlKFN0cmluZyhbY3VycmVudExvY2FsZS5nZXQoKSBsb2NhbGVJZGVudGlmaWVy
XSkpOwotICAgIFN0cmluZyBsb2NhbGVMYW5ndWFnZSA9IGxhbmd1YWdlRnJvbUxvY2FsZShsb2Nh
bGUpOwotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGN1cnJlbnRMb2NhbGVMYW5ndWFn
ZSwgbG9jYWxlTGFuZ3VhZ2UpKQotICAgICAgICByZXR1cm4gY3VycmVudExvY2FsZTsKLSAgICAv
LyBJdCBzZWVtcyBpbml0V2l0aExvY2FsZUlkZW50aWZpZXIgYWNjZXB0cyBkYXNoLXNlcGFyYXRl
ZCBsb2NhbGUgaWRlbnRpZmllci4KLSAgICByZXR1cm4gYWRvcHROUyhbW05TTG9jYWxlIGFsbG9j
XSBpbml0V2l0aExvY2FsZUlkZW50aWZpZXI6bG9jYWxlXSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxMb2NhbGU+IExvY2FsZTo6Y3JlYXRlKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSkKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxMb2NhbGVNYWM+KGRldGVybWluZUxvY2FsZShsb2NhbGUuc3Ry
aW5nKCkpLmdldCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGNy
ZWF0ZURhdGVUaW1lRm9ybWF0dGVyKE5TTG9jYWxlKiBsb2NhbGUsIE5TQ2FsZW5kYXIqIGNhbGVu
ZGFyLCBOU0RhdGVGb3JtYXR0ZXJTdHlsZSBkYXRlU3R5bGUsIE5TRGF0ZUZvcm1hdHRlclN0eWxl
IHRpbWVTdHlsZSkKLXsKLSAgICBOU0RhdGVGb3JtYXR0ZXIgKmZvcm1hdHRlciA9IFtbTlNEYXRl
Rm9ybWF0dGVyIGFsbG9jXSBpbml0XTsKLSAgICBbZm9ybWF0dGVyIHNldExvY2FsZTpsb2NhbGVd
OwotICAgIFtmb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOmRhdGVTdHlsZV07Ci0gICAgW2Zvcm1hdHRl
ciBzZXRUaW1lU3R5bGU6dGltZVN0eWxlXTsKLSAgICBbZm9ybWF0dGVyIHNldFRpbWVab25lOltO
U1RpbWVab25lIHRpbWVab25lV2l0aEFiYnJldmlhdGlvbjpAIlVUQyJdXTsKLSAgICBbZm9ybWF0
dGVyIHNldENhbGVuZGFyOmNhbGVuZGFyXTsKLSAgICByZXR1cm4gYWRvcHROUyhmb3JtYXR0ZXIp
OwotfQotCi1Mb2NhbGVNYWM6OkxvY2FsZU1hYyhOU0xvY2FsZSogbG9jYWxlKQotICAgIDogbV9s
b2NhbGUobG9jYWxlKQotICAgICwgbV9ncmVnb3JpYW5DYWxlbmRhcihhZG9wdE5TKFtbTlNDYWxl
bmRhciBhbGxvY10gaW5pdFdpdGhDYWxlbmRhcklkZW50aWZpZXI6TlNDYWxlbmRhcklkZW50aWZp
ZXJHcmVnb3JpYW5dKSkKLSAgICAsIG1fZGlkSW5pdGlhbGl6ZU51bWJlckRhdGEoZmFsc2UpCi17
Ci0gICAgTlNBcnJheSogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gW05TTG9jYWxlIElTT0xhbmd1YWdl
Q29kZXNdOwotICAgIC8vIE5TTG9jYWxlIHJldHVybnMgYSBsb3dlciBjYXNlIE5TTG9jYWxlTGFu
Z3VhZ2VDb2RlIHNvIHdlIGRvbid0IGhhdmUgY2FyZSBhYm91dCBjYXNlLgotICAgIE5TU3RyaW5n
KiBsYW5ndWFnZSA9IFttX2xvY2FsZS5nZXQoKSBvYmplY3RGb3JLZXk6TlNMb2NhbGVMYW5ndWFn
ZUNvZGVdOwotICAgIGlmIChbYXZhaWxhYmxlTGFuZ3VhZ2VzIGluZGV4T2ZPYmplY3Q6bGFuZ3Vh
Z2VdID09IE5TTm90Rm91bmQpCi0gICAgICAgIG1fbG9jYWxlID0gYWRvcHROUyhbW05TTG9jYWxl
IGFsbG9jXSBpbml0V2l0aExvY2FsZUlkZW50aWZpZXI6ZGVmYXVsdExhbmd1YWdlKCldKTsKLSAg
ICBbbV9ncmVnb3JpYW5DYWxlbmRhci5nZXQoKSBzZXRMb2NhbGU6bV9sb2NhbGUuZ2V0KCldOwot
fQotCi1Mb2NhbGVNYWM6On5Mb2NhbGVNYWMoKQotewotfQotCi1SZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBMb2NhbGVNYWM6OnNob3J0RGF0ZUZvcm1hdHRlcigpCi17Ci0gICAgcmV0dXJuIGNy
ZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdldCgpLCBtX2dyZWdvcmlhbkNhbGVuZGFy
LmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxl
KTsKLX0KLQotI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQotU3RyaW5nIExv
Y2FsZU1hYzo6Zm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21wb25l
bnRzLCBGb3JtYXRUeXBlKQotewotICAgIGRvdWJsZSBtc2VjID0gZGF0ZUNvbXBvbmVudHMubWls
bGlzZWNvbmRzU2luY2VFcG9jaCgpOwotICAgIERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUgPSBk
YXRlQ29tcG9uZW50cy50eXBlKCk7Ci0KLSAgICAvLyAid2VlayIgdHlwZSBub3Qgc3VwcG9ydGVk
LgotICAgIEFTU0VSVCh0eXBlICE9IERhdGVDb21wb25lbnRzOjpJbnZhbGlkKTsKLSAgICBpZiAo
dHlwZSA9PSBEYXRlQ29tcG9uZW50czo6V2VlaykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgLy8gSW5jb21pbmcgbXNlYyB2YWx1ZSBpcyBtaWxsaXNlY29uZHMgc2luY2UgMTk3MC0w
MS0wMSAwMDowMDowMCBVVEMuIFRoZSAxOTcwIGVwb2NoLgotICAgIE5TVGltZUludGVydmFsIHNl
Y29uZHNTaW5jZTE5NzAgPSAobXNlYyAvIDEwMDApOwotICAgIE5TRGF0ZSAqZGF0ZSA9IFtOU0Rh
dGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6c2Vjb25kc1NpbmNlMTk3MF07Ci0KLSAg
ICAvLyBSZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nLgotICAgIE5TRGF0ZUZvcm1hdHRlciAqZGF0
ZUZvcm1hdHRlciA9IGxvY2FsaXplZERhdGVDYWNoZSgpLmZvcm1hdHRlckZvckRhdGVUeXBlKHR5
cGUpOwotICAgIHJldHVybiBbZGF0ZUZvcm1hdHRlciBzdHJpbmdGcm9tRGF0ZTpkYXRlXTsKLX0K
LQotY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6bW9udGhMYWJlbHMoKQotewotICAg
IGlmICghbV9tb250aExhYmVscy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX21vbnRoTGFi
ZWxzOwotICAgIG1fbW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKLSAgICBOU0FycmF5
ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBtb250aFN5bWJvbHNdOwotICAg
IGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQoU3RyaW5nKFth
cnJheSBvYmplY3RBdEluZGV4OmldKSk7Ci0gICAgICAgIHJldHVybiBtX21vbnRoTGFiZWxzOwot
ICAgIH0KLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBXVEY6Om1vbnRoRnVsbE5hbWUpCi0gICAgICAg
IG1fbW9udGhMYWJlbHMuYXBwZW5kKG5hbWUpOwotICAgIHJldHVybiBtX21vbnRoTGFiZWxzOwot
fQotCi1SZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBMb2NhbGVNYWM6OnRpbWVGb3JtYXR0ZXIo
KQotewotICAgIHJldHVybiBjcmVhdGVEYXRlVGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwg
bV9ncmVnb3JpYW5DYWxlbmRhci5nZXQoKSwgTlNEYXRlRm9ybWF0dGVyTm9TdHlsZSwgTlNEYXRl
Rm9ybWF0dGVyTWVkaXVtU3R5bGUpOwotfQotCi1SZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBM
b2NhbGVNYWM6OnNob3J0VGltZUZvcm1hdHRlcigpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURhdGVU
aW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdldCgpLCBtX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpLCBO
U0RhdGVGb3JtYXR0ZXJOb1N0eWxlLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlKTsKLX0KLQot
UmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlTWFjOjpkYXRlVGltZUZvcm1hdHRlcldp
dGhTZWNvbmRzKCkKLXsKLSAgICByZXR1cm4gY3JlYXRlRGF0ZVRpbWVGb3JtYXR0ZXIobV9sb2Nh
bGUuZ2V0KCksIG1fZ3JlZ29yaWFuQ2FsZW5kYXIuZ2V0KCksIE5TRGF0ZUZvcm1hdHRlclNob3J0
U3R5bGUsIE5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlKTsKLX0KLQotUmV0YWluUHRyPE5TRGF0
ZUZvcm1hdHRlcj4gTG9jYWxlTWFjOjpkYXRlVGltZUZvcm1hdHRlcldpdGhvdXRTZWNvbmRzKCkK
LXsKLSAgICByZXR1cm4gY3JlYXRlRGF0ZVRpbWVGb3JtYXR0ZXIobV9sb2NhbGUuZ2V0KCksIG1f
Z3JlZ29yaWFuQ2FsZW5kYXIuZ2V0KCksIE5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGUsIE5TRGF0
ZUZvcm1hdHRlclNob3J0U3R5bGUpOwotfQotCi1TdHJpbmcgTG9jYWxlTWFjOjpkYXRlRm9ybWF0
KCkKLXsKLSAgICBpZiAoIW1fZGF0ZUZvcm1hdC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG1f
ZGF0ZUZvcm1hdDsKLSAgICBtX2RhdGVGb3JtYXQgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0
KCkgZGF0ZUZvcm1hdF07Ci0gICAgcmV0dXJuIG1fZGF0ZUZvcm1hdDsKLX0KLQotU3RyaW5nIExv
Y2FsZU1hYzo6bW9udGhGb3JtYXQoKQotewotICAgIGlmICghbV9tb250aEZvcm1hdC5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG1fbW9udGhGb3JtYXQ7Ci0gICAgLy8gR2V0cyBhIGZvcm1hdCBm
b3IgIk1NTU0iIGJlY2F1c2UgV2luZG93cyBBUEkgYWx3YXlzIHByb3ZpZGVzIGZvcm1hdHMgZm9y
Ci0gICAgLy8gIk1NTU0iIGluIHNvbWUgbG9jYWxlcy4KLSAgICBtX21vbnRoRm9ybWF0ID0gW05T
RGF0ZUZvcm1hdHRlciBkYXRlRm9ybWF0RnJvbVRlbXBsYXRlOkAieXl5eU1NTU0iIG9wdGlvbnM6
MCBsb2NhbGU6bV9sb2NhbGUuZ2V0KCldOwotICAgIHJldHVybiBtX21vbnRoRm9ybWF0OwotfQot
Ci1TdHJpbmcgTG9jYWxlTWFjOjpzaG9ydE1vbnRoRm9ybWF0KCkKLXsKLSAgICBpZiAoIW1fc2hv
cnRNb250aEZvcm1hdC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aEZvcm1h
dDsKLSAgICBtX3Nob3J0TW9udGhGb3JtYXQgPSBbTlNEYXRlRm9ybWF0dGVyIGRhdGVGb3JtYXRG
cm9tVGVtcGxhdGU6QCJ5eXl5TU1NIiBvcHRpb25zOjAgbG9jYWxlOm1fbG9jYWxlLmdldCgpXTsK
LSAgICByZXR1cm4gbV9zaG9ydE1vbnRoRm9ybWF0OwotfQotCi1TdHJpbmcgTG9jYWxlTWFjOjp0
aW1lRm9ybWF0KCkKLXsKLSAgICBpZiAoIW1fdGltZUZvcm1hdFdpdGhTZWNvbmRzLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gbV90aW1lRm9ybWF0V2l0aFNlY29uZHM7Ci0gICAgbV90aW1lRm9y
bWF0V2l0aFNlY29uZHMgPSBbdGltZUZvcm1hdHRlcigpLmdldCgpIGRhdGVGb3JtYXRdOwotICAg
IHJldHVybiBtX3RpbWVGb3JtYXRXaXRoU2Vjb25kczsKLX0KLQotU3RyaW5nIExvY2FsZU1hYzo6
c2hvcnRUaW1lRm9ybWF0KCkKLXsKLSAgICBpZiAoIW1fdGltZUZvcm1hdFdpdGhvdXRTZWNvbmRz
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHM7Ci0g
ICAgbV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHMgPSBbc2hvcnRUaW1lRm9ybWF0dGVyKCkuZ2V0
KCkgZGF0ZUZvcm1hdF07Ci0gICAgcmV0dXJuIG1fdGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzOwot
fQotCi1TdHJpbmcgTG9jYWxlTWFjOjpkYXRlVGltZUZvcm1hdFdpdGhTZWNvbmRzKCkKLXsKLSAg
ICBpZiAoIW1fZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kcy5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG1fZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kczsKLSAgICBtX2RhdGVUaW1lRm9ybWF0V2l0
aFNlY29uZHMgPSBbZGF0ZVRpbWVGb3JtYXR0ZXJXaXRoU2Vjb25kcygpLmdldCgpIGRhdGVGb3Jt
YXRdOwotICAgIHJldHVybiBtX2RhdGVUaW1lRm9ybWF0V2l0aFNlY29uZHM7Ci19Ci0KLVN0cmlu
ZyBMb2NhbGVNYWM6OmRhdGVUaW1lRm9ybWF0V2l0aG91dFNlY29uZHMoKQotewotICAgIGlmICgh
bV9kYXRlVGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
bV9kYXRlVGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzOwotICAgIG1fZGF0ZVRpbWVGb3JtYXRXaXRo
b3V0U2Vjb25kcyA9IFtkYXRlVGltZUZvcm1hdHRlcldpdGhvdXRTZWNvbmRzKCkuZ2V0KCkgZGF0
ZUZvcm1hdF07Ci0gICAgcmV0dXJuIG1fZGF0ZVRpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKLX0K
LQotY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6c2hvcnRNb250aExhYmVscygpCi17
Ci0gICAgaWYgKCFtX3Nob3J0TW9udGhMYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bV9zaG9ydE1vbnRoTGFiZWxzOwotICAgIG1fc2hvcnRNb250aExhYmVscy5yZXNlcnZlQ2FwYWNp
dHkoMTIpOwotICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgp
IHNob3J0TW9udGhTeW1ib2xzXTsKLSAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAxMikgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAgIG1fc2hv
cnRNb250aExhYmVscy5hcHBlbmQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOwotICAgICAgICBy
ZXR1cm4gbV9zaG9ydE1vbnRoTGFiZWxzOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBX
VEY6Om1vbnRoTmFtZSkKLSAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChuYW1lKTsK
LSAgICByZXR1cm4gbV9zaG9ydE1vbnRoTGFiZWxzOwotfQotCi1jb25zdCBWZWN0b3I8U3RyaW5n
PiYgTG9jYWxlTWFjOjpzdGFuZEFsb25lTW9udGhMYWJlbHMoKQotewotICAgIGlmICghbV9zdGFu
ZEFsb25lTW9udGhMYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9zdGFuZEFsb25l
TW9udGhMYWJlbHM7Ci0gICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCku
Z2V0KCkgc3RhbmRhbG9uZU1vbnRoU3ltYm9sc107Ci0gICAgaWYgKFthcnJheSBjb3VudF0gPT0g
MTIpIHsKLSAgICAgICAgbV9zdGFuZEFsb25lTW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEy
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAg
ICBtX3N0YW5kQWxvbmVNb250aExhYmVscy5hcHBlbmQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0p
OwotICAgICAgICByZXR1cm4gbV9zdGFuZEFsb25lTW9udGhMYWJlbHM7Ci0gICAgfQotICAgIG1f
c3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExhYmVscygpOwotICAgIHJldHVybiBt
X3N0YW5kQWxvbmVNb250aExhYmVsczsKLX0KLQotY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2Fs
ZU1hYzo6c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKQotewotICAgIGlmICghbV9zaG9ydFN0
YW5kQWxvbmVNb250aExhYmVscy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3Nob3J0U3Rh
bmRBbG9uZU1vbnRoTGFiZWxzOwotICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1h
dHRlcigpLmdldCgpIHNob3J0U3RhbmRhbG9uZU1vbnRoU3ltYm9sc107Ci0gICAgaWYgKFthcnJh
eSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscy5y
ZXNlcnZlQ2FwYWNpdHkoMTIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7
ICsraSkKLSAgICAgICAgICAgIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMuYXBwZW5kKFth
cnJheSBvYmplY3RBdEluZGV4OmldKTsKLSAgICAgICAgcmV0dXJuIG1fc2hvcnRTdGFuZEFsb25l
TW9udGhMYWJlbHM7Ci0gICAgfQotICAgIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMgPSBz
aG9ydE1vbnRoTGFiZWxzKCk7Ci0gICAgcmV0dXJuIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJl
bHM7Ci19Ci0KLWNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVNYWM6OnRpbWVBTVBNTGFiZWxz
KCkKLXsKLSAgICBpZiAoIW1fdGltZUFNUE1MYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbV90aW1lQU1QTUxhYmVsczsKLSAgICBtX3RpbWVBTVBNTGFiZWxzLnJlc2VydmVDYXBhY2l0
eSgyKTsKLSAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIgPSBzaG9ydFRp
bWVGb3JtYXR0ZXIoKTsKLSAgICBtX3RpbWVBTVBNTGFiZWxzLmFwcGVuZChbZm9ybWF0dGVyLmdl
dCgpIEFNU3ltYm9sXSk7Ci0gICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRlci5n
ZXQoKSBQTVN5bWJvbF0pOwotICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwotfQotCi0jZW5k
aWYKLQotdXNpbmcgQ2Fub25pY2FsTG9jYWxlTWFwID0gSGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9t
U3RyaW5nPjsKLQotc3RhdGljIENhbm9uaWNhbExvY2FsZU1hcCYgY2Fub25pY2FsTG9jYWxlTWFw
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2Fub25pY2FsTG9jYWxlTWFwPiBjYW5v
bmljYWxMb2NhbGVNYXA7Ci0gICAgcmV0dXJuIGNhbm9uaWNhbExvY2FsZU1hcC5nZXQoKTsKLX0K
LQotQXRvbVN0cmluZyBMb2NhbGVNYWM6OmNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21T
dHJpbmcoY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQotewotICAgIHJldHVybiBjYW5vbmljYWxM
b2NhbGVNYXAoKS5lbnN1cmUoc3RyaW5nLCBbJl0gewotICAgICAgICByZXR1cm4gW05TTG9jYWxl
IGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmc6c3RyaW5nXTsKLSAgICB9KS5p
dGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZvaWQgTG9jYWxlTWFjOjpyZWxlYXNlTWVtb3J5KCkKLXsK
LSAgICBjYW5vbmljYWxMb2NhbGVNYXAoKS5jbGVhcigpOwotfQotCi12b2lkIExvY2FsZU1hYzo6
aW5pdGlhbGl6ZUxvY2FsZURhdGEoKQotewotICAgIGlmIChtX2RpZEluaXRpYWxpemVOdW1iZXJE
YXRhKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kaWRJbml0aWFsaXplTnVtYmVyRGF0YSA9IHRy
dWU7Ci0KLSAgICBSZXRhaW5QdHI8TlNOdW1iZXJGb3JtYXR0ZXI+IGZvcm1hdHRlciA9IGFkb3B0
TlMoW1tOU051bWJlckZvcm1hdHRlciBhbGxvY10gaW5pdF0pOwotICAgIFtmb3JtYXR0ZXIuZ2V0
KCkgc2V0TG9jYWxlOm1fbG9jYWxlLmdldCgpXTsKLSAgICBbZm9ybWF0dGVyLmdldCgpIHNldE51
bWJlclN0eWxlOk5TTnVtYmVyRm9ybWF0dGVyRGVjaW1hbFN0eWxlXTsKLSAgICBbZm9ybWF0dGVy
LmdldCgpIHNldFVzZXNHcm91cGluZ1NlcGFyYXRvcjpOT107Ci0KLSAgICBSZXRhaW5QdHI8TlNO
dW1iZXI+IHNhbXBsZU51bWJlciA9IGFkb3B0TlMoW1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhE
b3VibGU6OTg3NjU0MzIxMF0pOwotICAgIFN0cmluZyBuaW5lVG9aZXJvKFtmb3JtYXR0ZXIuZ2V0
KCkgc3RyaW5nRnJvbU51bWJlcjpzYW1wbGVOdW1iZXIuZ2V0KCldKTsKLSAgICBpZiAobmluZVRv
WmVyby5sZW5ndGgoKSAhPSAxMCkKLSAgICAgICAgcmV0dXJuOwotICAgIFZlY3RvcjxTdHJpbmcs
IERlY2ltYWxTeW1ib2xzU2l6ZT4gc3ltYm9sczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMTA7ICsraSkKLSAgICAgICAgc3ltYm9scy5hcHBlbmQobmluZVRvWmVyby5zdWJzdHJpbmco
OSAtIGksIDEpKTsKLSAgICBBU1NFUlQoc3ltYm9scy5zaXplKCkgPT0gRGVjaW1hbFNlcGFyYXRv
ckluZGV4KTsKLSAgICBzeW1ib2xzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIGRlY2ltYWxTZXBh
cmF0b3JdKTsKLSAgICBBU1NFUlQoc3ltYm9scy5zaXplKCkgPT0gR3JvdXBTZXBhcmF0b3JJbmRl
eCk7Ci0gICAgc3ltYm9scy5hcHBlbmQoW2Zvcm1hdHRlci5nZXQoKSBncm91cGluZ1NlcGFyYXRv
cl0pOwotICAgIEFTU0VSVChzeW1ib2xzLnNpemUoKSA9PSBEZWNpbWFsU3ltYm9sc1NpemUpOwot
Ci0gICAgU3RyaW5nIHBvc2l0aXZlUHJlZml4KFtmb3JtYXR0ZXIuZ2V0KCkgcG9zaXRpdmVQcmVm
aXhdKTsKLSAgICBTdHJpbmcgcG9zaXRpdmVTdWZmaXgoW2Zvcm1hdHRlci5nZXQoKSBwb3NpdGl2
ZVN1ZmZpeF0pOwotICAgIFN0cmluZyBuZWdhdGl2ZVByZWZpeChbZm9ybWF0dGVyLmdldCgpIG5l
Z2F0aXZlUHJlZml4XSk7Ci0gICAgU3RyaW5nIG5lZ2F0aXZlU3VmZml4KFtmb3JtYXR0ZXIuZ2V0
KCkgbmVnYXRpdmVTdWZmaXhdKTsKLSAgICBzZXRMb2NhbGVEYXRhKHN5bWJvbHMsIHBvc2l0aXZl
UHJlZml4LCBwb3NpdGl2ZVN1ZmZpeCwgbmVnYXRpdmVQcmVmaXgsIG5lZ2F0aXZlU3VmZml4KTsK
LX0KLQotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390045</attachid>
            <date>2020-02-06 19:14:11 -0800</date>
            <delta_ts>2020-02-06 20:12:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207371-20200206191411.patch</filename>
            <type>text/plain</type>
            <size>44859</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1OTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDljMjI3NzBkNzQzODhj
YmEzNWI0ZDkzMTZmZWI4NTVhNTY5MTM3NS4uMTBhMzA5NmRjZjdiYzljY2E3ODY4MzI3NmE1N2M4
NmE4YjFkMGJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIwLTAyLTA2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBS
ZW5hbWUgTG9jYWxlTWFjIHRvIExvY2FsZUNvY29hCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDczNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJdCdzIHVzZWQgYnkgYWxsIHRoZSBDb2NvYSBwbGF0Zm9y
bXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLm9yZGVyOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL2NvY29hL01lbW9yeVJl
bGVhc2VDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtUmVsZWFzZU1lbW9yeSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6YXBwbHlUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L21hYy9Mb2NhbGVNYWMubW06IFJlbW92ZWQuCisKIDIwMjAtMDItMDYgIEphbWVzIERhcnBpbmlh
biAgPGpkYXJwaW5pYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHdlYmdsLzEuMC4zL2NvbmZv
cm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy5odG1sIGlzIHRpbWlu
ZyBvdXQgb24gc29tZSBoYXJkd2FyZSBjb25maWd1cmF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQppbmRleCAxOTliNmRkMDEwYTJkY2IxMGJhNzc2YWI3Zjc5MTZmMzM3OGY4MTBkLi5iZjRh
ZDMyODYzNDIzMGYzMzQxMGJiMTIwMjIwOTFmMjJiMmUwOThhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQpAQCAtNDMwLDkgKzQzMCwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlv
blF1ZXVlRGVsZWdhdGUubW0KICAgICBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlVVJMUmVz
cG9uc2UubW0KIAorICAgIHBsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0KKwogICAg
IHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKIAotICAgIHBsYXRmb3JtL3RleHQv
bWFjL0xvY2FsZU1hYy5tbQogICAgIHBsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1t
CiAgICAgcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENoZWNraW5nTWFjLm1tCiAgICAgcGxhdGZvcm0v
dGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDRkZTc1ZGY4ZGYwYjhmOTBlNWIyNTgxNTdlYWRhNGE2OWQzYjU5MTYuLjI1N2MxMTMz
ZmY5MTA0NDdiN2MxNDQxYzRlYTNmY2FmNjZmNjVhYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtNTM3LDEwICs1MzcsMTEgQEAgcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJl
c3BvbnNlLm1tCiAKIHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKIAorcGxhdGZv
cm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbQorCiBwbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6
ZWREYXRlQ2FjaGUubW0KIHBsYXRmb3JtL3RleHQvaW9zL1RleHRFbmNvZGluZ1JlZ2lzdHJ5SU9T
Lm1tCiAKLXBsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQogcGxhdGZvcm0vdGV4dC9tYWMv
VGV4dEJvdW5kYXJpZXMubW0KIHBsYXRmb3JtL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbQog
cGxhdGZvcm0vdGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9y
ZGVyCmluZGV4IDM3ZDI0NWUxMWU4YmYzNjI2NTIzZjA3NmVhMmI5M2QyYzEwNmUxOWIuLjM0ZjFh
NzI1OTZmYjg5YzhiNjQ3ZmZmMzM0OGNjYTNkOTU5YzAxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpA
QCAtMjMxNzMsNyArMjMxNzMsNyBAQCBfX1pUVk43V2ViQ29yZTE0TGFiZWxzTm9kZUxpc3RFCiBf
X1pUVk43V2ViQ29yZTE2TGVnYWN5V2ViQXJjaGl2ZUUKIF9fWlRWTjdXZWJDb3JlMTBMaW5rTG9h
ZGVyRQogX19aVFZON1dlYkNvcmUxN0xvYWRhYmxlVGV4dFRyYWNrRQotX19aVFZON1dlYkNvcmU5
TG9jYWxlTWFjRQorX19aVFZON1dlYkNvcmU5TG9jYWxlQ29jb2FFCiBfX1paTjdXZWJDb3JlMTZz
Y3JpcHROYW1lVG9Db2RlRVJLTjNXVEY2U3RyaW5nRUUxOHNjcmlwdE5hbWVDb2RlTGlzdAogX19a
Wk43V2ViQ29yZTM0bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbkVSS04zV1RGNlN0
cmluZ0VFMTZsb2NhbGVTY3JpcHRMaXN0CiBfX1pUVk43V2ViQ29yZTE4TWFpblJlc291cmNlTG9h
ZGVyRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGZlYmYwNWViMDU5NzI4ZjZiZWE5ODE5MzQ2MjYwMDBmOGNiNTBhZTQuLjU2MDgw
MWQ0OWI4OWZmNTE4ZTNiZTNlZTIzNTE2NDMzYTdjNDVlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUwMTMsNyArNTAxMyw3
IEBACiAJCUY1NUIzRERDMTI1MUYxMkQwMDNFRjI2OSAvKiBUaW1lSW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0RBODEyNTFGMTJE
MDAzRUYyNjkgLyogVGltZUlucHV0VHlwZS5oICovOyB9OwogCQlGNTVCM0RERTEyNTFGMTJEMDAz
RUYyNjkgLyogVVJMSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTVCM0RBQTEyNTFGMTJEMDAzRUYyNjkgLyogVVJMSW5wdXRUeXBlLmgg
Ki87IH07CiAJCUY1NUIzREUwMTI1MUYxMkQwMDNFRjI2OSAvKiBXZWVrSW5wdXRUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0RBQzEyNTFG
MTJEMDAzRUYyNjkgLyogV2Vla0lucHV0VHlwZS5oICovOyB9OwotCQlGNTk3M0RFMDE1Q0ZCMjAz
MDAyN0Y4MDQgLyogTG9jYWxlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTk3M0RERTE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlTWFjLmggKi87
IH07CisJCUY1OTczREUwMTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVDb2NvYS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU5NzNEREUxNUNGQjIwMzAw
MjdGODA0IC8qIExvY2FsZUNvY29hLmggKi87IH07CiAJCUY1OUM5NjAwMTI1NUIyM0YwMDA2MjND
MCAvKiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1OUM5NUZFMTI1NUIyM0YwMDA2MjNDMCAvKiBCYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGUuaCAqLzsgfTsKIAkJRjVBMTU0MjgxMjc5NTM0RDAwRDBCMEMwIC8q
IFZhbGlkYXRpb25NZXNzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNUExNTQyNjEyNzk1MzREMDBEMEIwQzAgLyogVmFsaWRhdGlvbk1lc3NhZ2Uu
aCAqLzsgfTsKIAkJRjVDMDQxREIwRkZDQTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzA0
MUQ4MEZGQ0E3Q0UwMDgzOUQ0QSAvKiBIVE1MRGF0YUxpc3RFbGVtZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1NTMzLDggKzE1NTMzLDgg
QEAKIAkJRjU4Nzg2NDkwMkRFM0E5QTAxRUE0MTIyIC8qIENhY2hlUG9saWN5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlUG9saWN5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTg3ODY2MjAyREUzQjExMDFFQTQxMjIgLyogU1NMS2V5R2VuZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNTTEtleUdlbmVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJRjU4Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXJzb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1OTczRERF
MTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9jYWxlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY1OTcz
RERGMTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUY1OTczRERFMTVDRkIyMDMwMDI3RjgwNCAvKiBMb2NhbGVDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGNTk3M0RERjE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlQ29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBMb2NhbGVDb2NvYS5tbTsg
cGF0aCA9ICIuLi9jb2NvYS9Mb2NhbGVDb2NvYS5tbSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY1OUM5NUZEMTI1NUIyM0YwMDA2MjNDMCAvKiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU5Qzk1RkUx
MjU1QjIzRjAwMDYyM0MwIC8qIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjVBMTU0MjUxMjc5NTM0RDAwRDBCMEMwIC8qIFZhbGlk
YXRpb25NZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZh
bGlkYXRpb25NZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MzU0
LDYgKzE3MzU0LDE1IEBACiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwogCQl9OworCQkxQzE2NUU0RjIzRUNGNTVFMDBCMEZDRkIgLyogY29jb2EgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUY1OTczRERFMTVDRkIy
MDMwMDI3RjgwNCAvKiBMb2NhbGVDb2NvYS5oICovLAorCQkJCUY1OTczRERGMTVDRkIyMDMwMDI3
RjgwNCAvKiBMb2NhbGVDb2NvYS5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gY29jb2E7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzVGQUVDQTBEQ0ZEOEM5MDBENThGNzgg
LyogSW5zcGVjdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
QEAgLTI1MTQyLDYgKzI1MTUxLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJQjJCMjY0NTkwRDAwQTc3RTAwMEFDQzFEIC8qIGNmICovLAorCQkJCTFDMTY1RTRG
MjNFQ0Y1NUUwMEIwRkNGQiAvKiBjb2NvYSAqLywKIAkJCQlBNTE2RThCMjEzNkUwNEMwMDA3NkMz
QzAgLyogaW9zICovLAogCQkJCUIyQzNEOUY5MEQwMDZDMUQwMEVGNkYyNiAvKiBtYWMgKi8sCiAJ
CQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmNwcCAqLywKQEAgLTI1
MTk4LDggKzI1MjA4LDYgQEAKIAkJQjJDM0Q5RjkwRDAwNkMxRDAwRUY2RjI2IC8qIG1hYyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRjU5NzNEREUxNUNG
QjIwMzAwMjdGODA0IC8qIExvY2FsZU1hYy5oICovLAotCQkJCUY1OTczRERGMTVDRkIyMDMwMDI3
RjgwNCAvKiBMb2NhbGVNYWMubW0gKi8sCiAJCQkJQjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8q
IFRleHRCb3VuZGFyaWVzLm1tICovLAogCQkJCUNFQTg0NzIwMjEyNjIyQUQwMDk0MDgwOSAvKiBU
ZXh0Q2hlY2tpbmdNYWMubW0gKi8sCiAJCQkJQTFGNTVEQzQxRjU0RDNGMDAwRURCNzVGIC8qIFRl
eHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tICovLApAQCAtMzEzNTAsNyArMzEzNTgsNyBAQAogCQkJ
CTA2RTgxRUQ3MEFCNUQ1RTkwMEM4NzgzNyAvKiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFDNDNERTZCMjJBQjRCOEEwMDE1MjdEOSAvKiBMb2NhbEN1
cnJlbnRUcmFpdENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0NTc3NUU1MjA0NzJG
NzMwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlGNTk3M0RFMDE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlTWFjLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGNTk3M0RFMDE1Q0ZCMjAzMDAyN0Y4MDQgLyogTG9jYWxlQ29jb2EuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc2MzNBNzI2MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1Njcmlw
dE1hcHBpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTZFOEI3MTM2RTA0REIwMDc2QzNDMCAv
KiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTIwN0JFMDlCRDQx
MEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KaW5kZXggN2NiODY4
MDg2MDQyY2ZlZWE2YTMzYWY0YzMxYzUwMWEzNzc3ZmQ2ZS4uNzNmODBiZGY4ZGFmZmU1N2U5YmYw
NmE1ZDY5MWY3NmIxODk3MGM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2Nv
YS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9N
ZW1vcnlSZWxlYXNlQ29jb2EubW0KQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgIkdDQ29udHJv
bGxlci5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiTGF5ZXJQb29sLmgi
Ci0jaW1wb3J0ICJMb2NhbGVNYWMuaCIKKyNpbXBvcnQgIkxvY2FsZUNvY29hLmgiCiAjaW1wb3J0
ICJTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIgogI2ltcG9ydCA8bm90aWZ5Lmg+CiAjaW1w
b3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CkBAIC01Niw3ICs1Niw3IEBA
IHZvaWQgcGxhdGZvcm1SZWxlYXNlTWVtb3J5KENyaXRpY2FsKQogICAgIEdTRm9udFB1cmdlRm9u
dENhY2hlKCk7CiAjZW5kaWYKIAotICAgIExvY2FsZU1hYzo6cmVsZWFzZU1lbW9yeSgpOworICAg
IExvY2FsZUNvY29hOjpyZWxlYXNlTWVtb3J5KCk7CiAKICAgICBmb3IgKGF1dG8mIHBvb2wgOiBM
YXllclBvb2w6OmFsbExheWVyUG9vbHMoKSkKICAgICAgICAgcG9vbC0+ZHJhaW4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpp
bmRleCA5M2I4YmIxY2MxNzJkYjNiZjdiY2MzM2NlMTE5OWY0YTZjODU2ODRjLi5kZmIwODBkMDBk
NmJiMzQ2YjgxNTE0NjA3ZTVkZGRlY2IxMjFiMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0
ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbXBvcnQgIkxvY2FsZU1hYy5oIgorI2ltcG9ydCAiTG9j
YWxlQ29jb2EuaCIKICNpbXBvcnQgIk9wZW5UeXBlQ0cuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZl
ci5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KQEAgLTU2MCw3ICs1NjAsNyBAQCB2
b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2ln
bmVkIGJlZ2lubmluZ0luZGV4LCBibwogICAgICAgICAqbmV3R2x5cGhzUG9pbnRlciA9IGdseXBo
QnVmZmVyLmdseXBocyhiZWdpbm5pbmdJbmRleCk7CiAgICAgICAgICpuZXdBZHZhbmNlc1BvaW50
ZXIgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdJbmRleCk7CiAgICAgfTsKLSAgICBD
VEZvbnRUcmFuc2Zvcm1HbHlwaHNXaXRoTGFuZ3VhZ2UobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdJbmRleCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dT
aXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nSW5kZXgpKSwgZ2x5cGhCdWZmZXIu
c2l6ZSgpIC0gYmVnaW5uaW5nSW5kZXgsIG9wdGlvbnMsIExvY2FsZU1hYzo6Y2Fub25pY2FsTGFu
Z3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2NhbGUpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIGhhbmRsZXIpOworICAgIENURm9udFRyYW5zZm9ybUdseXBoc1dpdGhMYW5ndWFn
ZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0lu
ZGV4KSwgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdp
bm5pbmdJbmRleCkpLCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdJbmRleCwgb3B0aW9u
cywgTG9jYWxlQ29jb2E6OmNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobG9j
YWxlKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBoYW5kbGVyKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGxvY2FsZSk7CiAgICAgQ1RGb250VHJhbnNmb3JtR2x5cGhzKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nSW5kZXgpLCBy
ZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0lu
ZGV4KSksIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0luZGV4LCBvcHRpb25zKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2Eu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMzUyZjJhNjJhMTYzN2MxM2MwMmMxNGE0MjQzMjNkMzdmMGExYmY4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2Nv
YS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQbGF0Zm9ybUxv
Y2FsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworT0JKQ19DTEFTUyBOU0NhbGVuZGFyOworT0JKQ19DTEFTUyBOU0RhdGVGb3JtYXR0
ZXI7CitPQkpDX0NMQVNTIE5TTG9jYWxlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IERhdGVDb21wb25lbnRzOworCitjbGFzcyBMb2NhbGVDb2NvYSA6IHB1YmxpYyBMb2NhbGUgewor
cHVibGljOgorICAgIGV4cGxpY2l0IExvY2FsZUNvY29hKE5TTG9jYWxlKik7CisgICAgfkxvY2Fs
ZUNvY29hKCk7CisKKyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKKyAgICBT
dHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmLCBGb3JtYXRUeXBlID0g
Rm9ybWF0VHlwZVVuc3BlY2lmaWVkKSBvdmVycmlkZTsKKworICAgIFN0cmluZyBkYXRlRm9ybWF0
KCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIG1vbnRoRm9ybWF0KCkgb3ZlcnJpZGU7CisgICAgU3Ry
aW5nIHNob3J0TW9udGhGb3JtYXQoKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGltZUZvcm1hdCgp
IG92ZXJyaWRlOworICAgIFN0cmluZyBzaG9ydFRpbWVGb3JtYXQoKSBvdmVycmlkZTsKKyAgICBT
dHJpbmcgZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kcygpIG92ZXJyaWRlOworICAgIFN0cmluZyBk
YXRlVGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIG1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHNob3J0TW9udGhMYWJlbHMoKSBvdmVycmlkZTsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7CisgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHRpbWVBTVBNTGFiZWxzKCkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAg
IHN0YXRpYyBBdG9tU3RyaW5nIGNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmco
Y29uc3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VNZW1vcnkoKTsKKwor
cHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBzaG9ydERhdGVGb3JtYXR0
ZXIoKTsKKyAgICB2b2lkIGluaXRpYWxpemVMb2NhbGVEYXRhKCkgb3ZlcnJpZGU7CisKKyAgICBS
ZXRhaW5QdHI8TlNMb2NhbGU+IG1fbG9jYWxlOworICAgIFJldGFpblB0cjxOU0NhbGVuZGFyPiBt
X2dyZWdvcmlhbkNhbGVuZGFyOworI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVT
KQorICAgIFZlY3RvcjxTdHJpbmc+IG1fbW9udGhMYWJlbHM7CisgICAgUmV0YWluUHRyPE5TRGF0
ZUZvcm1hdHRlcj4gdGltZUZvcm1hdHRlcigpOworICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0
ZXI+IHNob3J0VGltZUZvcm1hdHRlcigpOworICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+
IGRhdGVUaW1lRm9ybWF0dGVyV2l0aFNlY29uZHMoKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBkYXRlVGltZUZvcm1hdHRlcldpdGhvdXRTZWNvbmRzKCk7CisKKyAgICBTdHJpbmcg
bV9kYXRlRm9ybWF0OworICAgIFN0cmluZyBtX21vbnRoRm9ybWF0OworICAgIFN0cmluZyBtX3No
b3J0TW9udGhGb3JtYXQ7CisgICAgU3RyaW5nIG1fdGltZUZvcm1hdFdpdGhTZWNvbmRzOworICAg
IFN0cmluZyBtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKKyAgICBTdHJpbmcgbV9kYXRlVGlt
ZUZvcm1hdFdpdGhTZWNvbmRzOworICAgIFN0cmluZyBtX2RhdGVUaW1lRm9ybWF0V2l0aG91dFNl
Y29uZHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9zaG9ydE1vbnRoTGFiZWxzOworICAgIFZlY3Rv
cjxTdHJpbmc+IG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzOworICAgIFZlY3RvcjxTdHJpbmc+IG1f
c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV90aW1lQU1Q
TUxhYmVsczsKKyNlbmRpZgorICAgIGJvb2wgbV9kaWRJbml0aWFsaXplTnVtYmVyRGF0YTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZWI4MjZhNDliNTcwMWIx
N2MxOTBhYjEwMGEzNjk5MTcxOTlhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCkBAIC0wLDAgKzEsMzMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsZUNvY29hLmgiCisKKyNpbXBvcnQgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNEYXRlRm9ybWF0dGVyLmg+
CisjaW1wb3J0IDxGb3VuZGF0aW9uL05TTG9jYWxlLmg+CisjaW1wb3J0IDx3dGYvRGF0ZU1hdGgu
aD4KKyNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CisjaW1wb3J0IDx3dGYvTGFuZ3VhZ2UuaD4KKyNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2ltcG9ydCAiTG9jYWxpemVkRGF0ZUNh
Y2hlLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFN0
cmluZyBsYW5ndWFnZUZyb21Mb2NhbGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAgU3Ry
aW5nIG5vcm1hbGl6ZWRMb2NhbGUgPSBsb2NhbGU7CisgICAgbm9ybWFsaXplZExvY2FsZS5yZXBs
YWNlKCctJywgJ18nKTsKKyAgICBzaXplX3Qgc2VwYXJhdG9yUG9zaXRpb24gPSBub3JtYWxpemVk
TG9jYWxlLmZpbmQoJ18nKTsKKyAgICBpZiAoc2VwYXJhdG9yUG9zaXRpb24gPT0gbm90Rm91bmQp
CisgICAgICAgIHJldHVybiBub3JtYWxpemVkTG9jYWxlOworICAgIHJldHVybiBub3JtYWxpemVk
TG9jYWxlLmxlZnQoc2VwYXJhdG9yUG9zaXRpb24pOworfQorCitzdGF0aWMgUmV0YWluUHRyPE5T
TG9jYWxlPiBkZXRlcm1pbmVMb2NhbGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAgUmV0
YWluUHRyPE5TTG9jYWxlPiBjdXJyZW50TG9jYWxlID0gW05TTG9jYWxlIGN1cnJlbnRMb2NhbGVd
OworICAgIFN0cmluZyBjdXJyZW50TG9jYWxlTGFuZ3VhZ2UgPSBsYW5ndWFnZUZyb21Mb2NhbGUo
U3RyaW5nKFtjdXJyZW50TG9jYWxlLmdldCgpIGxvY2FsZUlkZW50aWZpZXJdKSk7CisgICAgU3Ry
aW5nIGxvY2FsZUxhbmd1YWdlID0gbGFuZ3VhZ2VGcm9tTG9jYWxlKGxvY2FsZSk7CisgICAgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY3VycmVudExvY2FsZUxhbmd1YWdlLCBsb2NhbGVMYW5n
dWFnZSkpCisgICAgICAgIHJldHVybiBjdXJyZW50TG9jYWxlOworICAgIC8vIEl0IHNlZW1zIGlu
aXRXaXRoTG9jYWxlSWRlbnRpZmllciBhY2NlcHRzIGRhc2gtc2VwYXJhdGVkIGxvY2FsZSBpZGVu
dGlmaWVyLgorICAgIHJldHVybiBhZG9wdE5TKFtbTlNMb2NhbGUgYWxsb2NdIGluaXRXaXRoTG9j
YWxlSWRlbnRpZmllcjpsb2NhbGVdKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPExvY2FsZT4gTG9j
YWxlOjpjcmVhdGUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlKQoreworICAgIHJldHVybiBtYWtl
VW5pcXVlPExvY2FsZUNvY29hPihkZXRlcm1pbmVMb2NhbGUobG9jYWxlLnN0cmluZygpKS5nZXQo
KSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBjcmVhdGVEYXRlVGlt
ZUZvcm1hdHRlcihOU0xvY2FsZSogbG9jYWxlLCBOU0NhbGVuZGFyKiBjYWxlbmRhciwgTlNEYXRl
Rm9ybWF0dGVyU3R5bGUgZGF0ZVN0eWxlLCBOU0RhdGVGb3JtYXR0ZXJTdHlsZSB0aW1lU3R5bGUp
Cit7CisgICAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXR0ZXIgPSBbW05TRGF0ZUZvcm1hdHRlciBh
bGxvY10gaW5pdF07CisgICAgW2Zvcm1hdHRlciBzZXRMb2NhbGU6bG9jYWxlXTsKKyAgICBbZm9y
bWF0dGVyIHNldERhdGVTdHlsZTpkYXRlU3R5bGVdOworICAgIFtmb3JtYXR0ZXIgc2V0VGltZVN0
eWxlOnRpbWVTdHlsZV07CisgICAgW2Zvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0
aW1lWm9uZVdpdGhBYmJyZXZpYXRpb246QCJVVEMiXV07CisgICAgW2Zvcm1hdHRlciBzZXRDYWxl
bmRhcjpjYWxlbmRhcl07CisgICAgcmV0dXJuIGFkb3B0TlMoZm9ybWF0dGVyKTsKK30KKworTG9j
YWxlQ29jb2E6OkxvY2FsZUNvY29hKE5TTG9jYWxlKiBsb2NhbGUpCisgICAgOiBtX2xvY2FsZShs
b2NhbGUpCisgICAgLCBtX2dyZWdvcmlhbkNhbGVuZGFyKGFkb3B0TlMoW1tOU0NhbGVuZGFyIGFs
bG9jXSBpbml0V2l0aENhbGVuZGFySWRlbnRpZmllcjpOU0NhbGVuZGFySWRlbnRpZmllckdyZWdv
cmlhbl0pKQorICAgICwgbV9kaWRJbml0aWFsaXplTnVtYmVyRGF0YShmYWxzZSkKK3sKKyAgICBO
U0FycmF5KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBbTlNMb2NhbGUgSVNPTGFuZ3VhZ2VDb2Rlc107
CisgICAgLy8gTlNMb2NhbGUgcmV0dXJucyBhIGxvd2VyIGNhc2UgTlNMb2NhbGVMYW5ndWFnZUNv
ZGUgc28gd2UgZG9uJ3QgaGF2ZSBjYXJlIGFib3V0IGNhc2UuCisgICAgTlNTdHJpbmcqIGxhbmd1
YWdlID0gW21fbG9jYWxlLmdldCgpIG9iamVjdEZvcktleTpOU0xvY2FsZUxhbmd1YWdlQ29kZV07
CisgICAgaWYgKFthdmFpbGFibGVMYW5ndWFnZXMgaW5kZXhPZk9iamVjdDpsYW5ndWFnZV0gPT0g
TlNOb3RGb3VuZCkKKyAgICAgICAgbV9sb2NhbGUgPSBhZG9wdE5TKFtbTlNMb2NhbGUgYWxsb2Nd
IGluaXRXaXRoTG9jYWxlSWRlbnRpZmllcjpkZWZhdWx0TGFuZ3VhZ2UoKV0pOworICAgIFttX2dy
ZWdvcmlhbkNhbGVuZGFyLmdldCgpIHNldExvY2FsZTptX2xvY2FsZS5nZXQoKV07Cit9CisKK0xv
Y2FsZUNvY29hOjp+TG9jYWxlQ29jb2EoKQoreworfQorCitSZXRhaW5QdHI8TlNEYXRlRm9ybWF0
dGVyPiBMb2NhbGVDb2NvYTo6c2hvcnREYXRlRm9ybWF0dGVyKCkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlRGF0ZVRpbWVGb3JtYXR0ZXIobV9sb2NhbGUuZ2V0KCksIG1fZ3JlZ29yaWFuQ2FsZW5kYXIu
Z2V0KCksIE5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGUsIE5TRGF0ZUZvcm1hdHRlck5vU3R5bGUp
OworfQorCisjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCitTdHJpbmcgTG9j
YWxlQ29jb2E6OmZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlQ29tcG9u
ZW50cywgRm9ybWF0VHlwZSkKK3sKKyAgICBkb3VibGUgbXNlYyA9IGRhdGVDb21wb25lbnRzLm1p
bGxpc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlID0g
ZGF0ZUNvbXBvbmVudHMudHlwZSgpOworCisgICAgLy8gIndlZWsiIHR5cGUgbm90IHN1cHBvcnRl
ZC4KKyAgICBBU1NFUlQodHlwZSAhPSBEYXRlQ29tcG9uZW50czo6SW52YWxpZCk7CisgICAgaWYg
KHR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6OldlZWspCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIC8vIEluY29taW5nIG1zZWMgdmFsdWUgaXMgbWlsbGlzZWNvbmRzIHNpbmNlIDE5NzAt
MDEtMDEgMDA6MDA6MDAgVVRDLiBUaGUgMTk3MCBlcG9jaC4KKyAgICBOU1RpbWVJbnRlcnZhbCBz
ZWNvbmRzU2luY2UxOTcwID0gKG1zZWMgLyAxMDAwKTsKKyAgICBOU0RhdGUgKmRhdGUgPSBbTlNE
YXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOnNlY29uZHNTaW5jZTE5NzBdOworCisg
ICAgLy8gUmV0dXJuIGEgZm9ybWF0dGVkIHN0cmluZy4KKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmRh
dGVGb3JtYXR0ZXIgPSBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5mb3JtYXR0ZXJGb3JEYXRlVHlwZSh0
eXBlKTsKKyAgICByZXR1cm4gW2RhdGVGb3JtYXR0ZXIgc3RyaW5nRnJvbURhdGU6ZGF0ZV07Cit9
CisKK2NvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6bW9udGhMYWJlbHMoKQorewor
ICAgIGlmICghbV9tb250aExhYmVscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX21vbnRo
TGFiZWxzOworICAgIG1fbW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKKyAgICBOU0Fy
cmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBtb250aFN5bWJvbHNdOwor
ICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAxMjsgKytpKQorICAgICAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQoU3RyaW5n
KFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7CisgICAgICAgIHJldHVybiBtX21vbnRoTGFiZWxz
OworICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBXVEY6Om1vbnRoRnVsbE5hbWUpCisgICAg
ICAgIG1fbW9udGhMYWJlbHMuYXBwZW5kKG5hbWUpOworICAgIHJldHVybiBtX21vbnRoTGFiZWxz
OworfQorCitSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBMb2NhbGVDb2NvYTo6dGltZUZvcm1h
dHRlcigpCit7CisgICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdl
dCgpLCBtX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlLCBO
U0RhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZSk7Cit9CisKK1JldGFpblB0cjxOU0RhdGVGb3JtYXR0
ZXI+IExvY2FsZUNvY29hOjpzaG9ydFRpbWVGb3JtYXR0ZXIoKQoreworICAgIHJldHVybiBjcmVh
dGVEYXRlVGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVnb3JpYW5DYWxlbmRhci5n
ZXQoKSwgTlNEYXRlRm9ybWF0dGVyTm9TdHlsZSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSk7
Cit9CisKK1JldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IExvY2FsZUNvY29hOjpkYXRlVGltZUZv
cm1hdHRlcldpdGhTZWNvbmRzKCkKK3sKKyAgICByZXR1cm4gY3JlYXRlRGF0ZVRpbWVGb3JtYXR0
ZXIobV9sb2NhbGUuZ2V0KCksIG1fZ3JlZ29yaWFuQ2FsZW5kYXIuZ2V0KCksIE5TRGF0ZUZvcm1h
dHRlclNob3J0U3R5bGUsIE5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlKTsKK30KKworUmV0YWlu
UHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlQ29jb2E6OmRhdGVUaW1lRm9ybWF0dGVyV2l0aG91
dFNlY29uZHMoKQoreworICAgIHJldHVybiBjcmVhdGVEYXRlVGltZUZvcm1hdHRlcihtX2xvY2Fs
ZS5nZXQoKSwgbV9ncmVnb3JpYW5DYWxlbmRhci5nZXQoKSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRT
dHlsZSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSk7Cit9CisKK1N0cmluZyBMb2NhbGVDb2Nv
YTo6ZGF0ZUZvcm1hdCgpCit7CisgICAgaWYgKCFtX2RhdGVGb3JtYXQuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBtX2RhdGVGb3JtYXQ7CisgICAgbV9kYXRlRm9ybWF0ID0gW3Nob3J0RGF0ZUZv
cm1hdHRlcigpLmdldCgpIGRhdGVGb3JtYXRdOworICAgIHJldHVybiBtX2RhdGVGb3JtYXQ7Cit9
CisKK1N0cmluZyBMb2NhbGVDb2NvYTo6bW9udGhGb3JtYXQoKQoreworICAgIGlmICghbV9tb250
aEZvcm1hdC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fbW9udGhGb3JtYXQ7CisgICAgLy8g
R2V0cyBhIGZvcm1hdCBmb3IgIk1NTU0iIGJlY2F1c2UgV2luZG93cyBBUEkgYWx3YXlzIHByb3Zp
ZGVzIGZvcm1hdHMgZm9yCisgICAgLy8gIk1NTU0iIGluIHNvbWUgbG9jYWxlcy4KKyAgICBtX21v
bnRoRm9ybWF0ID0gW05TRGF0ZUZvcm1hdHRlciBkYXRlRm9ybWF0RnJvbVRlbXBsYXRlOkAieXl5
eU1NTU0iIG9wdGlvbnM6MCBsb2NhbGU6bV9sb2NhbGUuZ2V0KCldOworICAgIHJldHVybiBtX21v
bnRoRm9ybWF0OworfQorCitTdHJpbmcgTG9jYWxlQ29jb2E6OnNob3J0TW9udGhGb3JtYXQoKQor
eworICAgIGlmICghbV9zaG9ydE1vbnRoRm9ybWF0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
bV9zaG9ydE1vbnRoRm9ybWF0OworICAgIG1fc2hvcnRNb250aEZvcm1hdCA9IFtOU0RhdGVGb3Jt
YXR0ZXIgZGF0ZUZvcm1hdEZyb21UZW1wbGF0ZTpAInl5eXlNTU0iIG9wdGlvbnM6MCBsb2NhbGU6
bV9sb2NhbGUuZ2V0KCldOworICAgIHJldHVybiBtX3Nob3J0TW9udGhGb3JtYXQ7Cit9CisKK1N0
cmluZyBMb2NhbGVDb2NvYTo6dGltZUZvcm1hdCgpCit7CisgICAgaWYgKCFtX3RpbWVGb3JtYXRX
aXRoU2Vjb25kcy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fdGltZUZvcm1hdFdpdGhTZWNv
bmRzOworICAgIG1fdGltZUZvcm1hdFdpdGhTZWNvbmRzID0gW3RpbWVGb3JtYXR0ZXIoKS5nZXQo
KSBkYXRlRm9ybWF0XTsKKyAgICByZXR1cm4gbV90aW1lRm9ybWF0V2l0aFNlY29uZHM7Cit9CisK
K1N0cmluZyBMb2NhbGVDb2NvYTo6c2hvcnRUaW1lRm9ybWF0KCkKK3sKKyAgICBpZiAoIW1fdGlt
ZUZvcm1hdFdpdGhvdXRTZWNvbmRzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV90aW1lRm9y
bWF0V2l0aG91dFNlY29uZHM7CisgICAgbV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHMgPSBbc2hv
cnRUaW1lRm9ybWF0dGVyKCkuZ2V0KCkgZGF0ZUZvcm1hdF07CisgICAgcmV0dXJuIG1fdGltZUZv
cm1hdFdpdGhvdXRTZWNvbmRzOworfQorCitTdHJpbmcgTG9jYWxlQ29jb2E6OmRhdGVUaW1lRm9y
bWF0V2l0aFNlY29uZHMoKQoreworICAgIGlmICghbV9kYXRlVGltZUZvcm1hdFdpdGhTZWNvbmRz
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9kYXRlVGltZUZvcm1hdFdpdGhTZWNvbmRzOwor
ICAgIG1fZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kcyA9IFtkYXRlVGltZUZvcm1hdHRlcldpdGhT
ZWNvbmRzKCkuZ2V0KCkgZGF0ZUZvcm1hdF07CisgICAgcmV0dXJuIG1fZGF0ZVRpbWVGb3JtYXRX
aXRoU2Vjb25kczsKK30KKworU3RyaW5nIExvY2FsZUNvY29hOjpkYXRlVGltZUZvcm1hdFdpdGhv
dXRTZWNvbmRzKCkKK3sKKyAgICBpZiAoIW1fZGF0ZVRpbWVGb3JtYXRXaXRob3V0U2Vjb25kcy5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fZGF0ZVRpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsK
KyAgICBtX2RhdGVUaW1lRm9ybWF0V2l0aG91dFNlY29uZHMgPSBbZGF0ZVRpbWVGb3JtYXR0ZXJX
aXRob3V0U2Vjb25kcygpLmdldCgpIGRhdGVGb3JtYXRdOworICAgIHJldHVybiBtX2RhdGVUaW1l
Rm9ybWF0V2l0aG91dFNlY29uZHM7Cit9CisKK2NvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVD
b2NvYTo6c2hvcnRNb250aExhYmVscygpCit7CisgICAgaWYgKCFtX3Nob3J0TW9udGhMYWJlbHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9zaG9ydE1vbnRoTGFiZWxzOworICAgIG1fc2hv
cnRNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOworICAgIE5TQXJyYXkgKmFycmF5ID0g
W3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIHNob3J0TW9udGhTeW1ib2xzXTsKKyAgICBpZiAo
W2FycmF5IGNvdW50XSA9PSAxMikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MTI7ICsraSkKKyAgICAgICAgICAgIG1fc2hvcnRNb250aExhYmVscy5hcHBlbmQoW2FycmF5IG9i
amVjdEF0SW5kZXg6aV0pOworICAgICAgICByZXR1cm4gbV9zaG9ydE1vbnRoTGFiZWxzOworICAg
IH0KKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBXVEY6Om1vbnRoTmFtZSkKKyAgICAgICAgbV9zaG9y
dE1vbnRoTGFiZWxzLmFwcGVuZChuYW1lKTsKKyAgICByZXR1cm4gbV9zaG9ydE1vbnRoTGFiZWxz
OworfQorCitjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlQ29jb2E6OnN0YW5kQWxvbmVNb250
aExhYmVscygpCit7CisgICAgaWYgKCFtX3N0YW5kQWxvbmVNb250aExhYmVscy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBtX3N0YW5kQWxvbmVNb250aExhYmVsczsKKyAgICBOU0FycmF5ICph
cnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBzdGFuZGFsb25lTW9udGhTeW1ib2xz
XTsKKyAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAxMikgeworICAgICAgICBtX3N0YW5kQWxvbmVN
b250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMTI7ICsraSkKKyAgICAgICAgICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFw
cGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgIHJldHVybiBtX3N0YW5kQWxv
bmVNb250aExhYmVsczsKKyAgICB9CisgICAgbV9zdGFuZEFsb25lTW9udGhMYWJlbHMgPSBzaG9y
dE1vbnRoTGFiZWxzKCk7CisgICAgcmV0dXJuIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzOworfQor
Citjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlQ29jb2E6OnNob3J0U3RhbmRBbG9uZU1vbnRo
TGFiZWxzKCkKK3sKKyAgICBpZiAoIW1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVsczsKKyAgICBO
U0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBzaG9ydFN0YW5kYWxv
bmVNb250aFN5bWJvbHNdOworICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CisgICAgICAg
IG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCisgICAgICAgICAgICBtX3Nob3J0
U3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7Cisg
ICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOworICAgIH0KKyAgICBt
X3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExhYmVscygpOworICAgIHJl
dHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOworfQorCitjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgTG9jYWxlQ29jb2E6OnRpbWVBTVBNTGFiZWxzKCkKK3sKKyAgICBpZiAoIW1fdGltZUFN
UE1MYWJlbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV90aW1lQU1QTUxhYmVsczsKKyAg
ICBtX3RpbWVBTVBNTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgyKTsKKyAgICBSZXRhaW5QdHI8TlNE
YXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIgPSBzaG9ydFRpbWVGb3JtYXR0ZXIoKTsKKyAgICBtX3Rp
bWVBTVBNTGFiZWxzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIEFNU3ltYm9sXSk7CisgICAgbV90
aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRlci5nZXQoKSBQTVN5bWJvbF0pOworICAgIHJl
dHVybiBtX3RpbWVBTVBNTGFiZWxzOworfQorCisjZW5kaWYKKwordXNpbmcgQ2Fub25pY2FsTG9j
YWxlTWFwID0gSGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPjsKKworc3RhdGljIENhbm9u
aWNhbExvY2FsZU1hcCYgY2Fub25pY2FsTG9jYWxlTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Q2Fub25pY2FsTG9jYWxlTWFwPiBjYW5vbmljYWxMb2NhbGVNYXA7CisgICAgcmV0
dXJuIGNhbm9uaWNhbExvY2FsZU1hcC5nZXQoKTsKK30KKworQXRvbVN0cmluZyBMb2NhbGVDb2Nv
YTo6Y2Fub25pY2FsTGFuZ3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhjb25zdCBBdG9tU3RyaW5n
JiBzdHJpbmcpCit7CisgICAgcmV0dXJuIGNhbm9uaWNhbExvY2FsZU1hcCgpLmVuc3VyZShzdHJp
bmcsIFsmXSB7CisgICAgICAgIHJldHVybiBbTlNMb2NhbGUgY2Fub25pY2FsTGFuZ3VhZ2VJZGVu
dGlmaWVyRnJvbVN0cmluZzpzdHJpbmddOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKK30KKwor
dm9pZCBMb2NhbGVDb2NvYTo6cmVsZWFzZU1lbW9yeSgpCit7CisgICAgY2Fub25pY2FsTG9jYWxl
TWFwKCkuY2xlYXIoKTsKK30KKwordm9pZCBMb2NhbGVDb2NvYTo6aW5pdGlhbGl6ZUxvY2FsZURh
dGEoKQoreworICAgIGlmIChtX2RpZEluaXRpYWxpemVOdW1iZXJEYXRhKQorICAgICAgICByZXR1
cm47CisgICAgbV9kaWRJbml0aWFsaXplTnVtYmVyRGF0YSA9IHRydWU7CisKKyAgICBSZXRhaW5Q
dHI8TlNOdW1iZXJGb3JtYXR0ZXI+IGZvcm1hdHRlciA9IGFkb3B0TlMoW1tOU051bWJlckZvcm1h
dHRlciBhbGxvY10gaW5pdF0pOworICAgIFtmb3JtYXR0ZXIuZ2V0KCkgc2V0TG9jYWxlOm1fbG9j
YWxlLmdldCgpXTsKKyAgICBbZm9ybWF0dGVyLmdldCgpIHNldE51bWJlclN0eWxlOk5TTnVtYmVy
Rm9ybWF0dGVyRGVjaW1hbFN0eWxlXTsKKyAgICBbZm9ybWF0dGVyLmdldCgpIHNldFVzZXNHcm91
cGluZ1NlcGFyYXRvcjpOT107CisKKyAgICBSZXRhaW5QdHI8TlNOdW1iZXI+IHNhbXBsZU51bWJl
ciA9IGFkb3B0TlMoW1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhEb3VibGU6OTg3NjU0MzIxMF0p
OworICAgIFN0cmluZyBuaW5lVG9aZXJvKFtmb3JtYXR0ZXIuZ2V0KCkgc3RyaW5nRnJvbU51bWJl
cjpzYW1wbGVOdW1iZXIuZ2V0KCldKTsKKyAgICBpZiAobmluZVRvWmVyby5sZW5ndGgoKSAhPSAx
MCkKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxTdHJpbmcsIERlY2ltYWxTeW1ib2xzU2l6
ZT4gc3ltYm9sczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICAg
ICAgc3ltYm9scy5hcHBlbmQobmluZVRvWmVyby5zdWJzdHJpbmcoOSAtIGksIDEpKTsKKyAgICBB
U1NFUlQoc3ltYm9scy5zaXplKCkgPT0gRGVjaW1hbFNlcGFyYXRvckluZGV4KTsKKyAgICBzeW1i
b2xzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIGRlY2ltYWxTZXBhcmF0b3JdKTsKKyAgICBBU1NF
UlQoc3ltYm9scy5zaXplKCkgPT0gR3JvdXBTZXBhcmF0b3JJbmRleCk7CisgICAgc3ltYm9scy5h
cHBlbmQoW2Zvcm1hdHRlci5nZXQoKSBncm91cGluZ1NlcGFyYXRvcl0pOworICAgIEFTU0VSVChz
eW1ib2xzLnNpemUoKSA9PSBEZWNpbWFsU3ltYm9sc1NpemUpOworCisgICAgU3RyaW5nIHBvc2l0
aXZlUHJlZml4KFtmb3JtYXR0ZXIuZ2V0KCkgcG9zaXRpdmVQcmVmaXhdKTsKKyAgICBTdHJpbmcg
cG9zaXRpdmVTdWZmaXgoW2Zvcm1hdHRlci5nZXQoKSBwb3NpdGl2ZVN1ZmZpeF0pOworICAgIFN0
cmluZyBuZWdhdGl2ZVByZWZpeChbZm9ybWF0dGVyLmdldCgpIG5lZ2F0aXZlUHJlZml4XSk7Cisg
ICAgU3RyaW5nIG5lZ2F0aXZlU3VmZml4KFtmb3JtYXR0ZXIuZ2V0KCkgbmVnYXRpdmVTdWZmaXhd
KTsKKyAgICBzZXRMb2NhbGVEYXRhKHN5bWJvbHMsIHBvc2l0aXZlUHJlZml4LCBwb3NpdGl2ZVN1
ZmZpeCwgbmVnYXRpdmVQcmVmaXgsIG5lZ2F0aXZlU3VmZml4KTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzVkNWM0ZTcxYjRlODQwY2U1ODc5M2YwMjQ3ZTU3YzZhMGNkYzA1Yi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBMb2NhbGVNYWNfaAotI2RlZmluZSBMb2NhbGVNYWNfaAotCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Mb2NhbGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLU9CSkNfQ0xBU1MgTlNDYWxlbmRhcjsKLU9CSkNfQ0xBU1Mg
TlNEYXRlRm9ybWF0dGVyOwotT0JKQ19DTEFTUyBOU0xvY2FsZTsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBEYXRlQ29tcG9uZW50czsKLQotY2xhc3MgTG9jYWxlTWFjIDogcHVibGlj
IExvY2FsZSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTG9jYWxlTWFjKE5TTG9jYWxlKik7Ci0g
ICAgfkxvY2FsZU1hYygpOwotCi0jaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMp
Ci0gICAgU3RyaW5nIGZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiwgRm9ybWF0
VHlwZSA9IEZvcm1hdFR5cGVVbnNwZWNpZmllZCkgb3ZlcnJpZGU7Ci0KLSAgICBTdHJpbmcgZGF0
ZUZvcm1hdCgpIG92ZXJyaWRlOwotICAgIFN0cmluZyBtb250aEZvcm1hdCgpIG92ZXJyaWRlOwot
ICAgIFN0cmluZyBzaG9ydE1vbnRoRm9ybWF0KCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRpbWVG
b3JtYXQoKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgc2hvcnRUaW1lRm9ybWF0KCkgb3ZlcnJpZGU7
Ci0gICAgU3RyaW5nIGRhdGVUaW1lRm9ybWF0V2l0aFNlY29uZHMoKSBvdmVycmlkZTsKLSAgICBT
dHJpbmcgZGF0ZVRpbWVGb3JtYXRXaXRob3V0U2Vjb25kcygpIG92ZXJyaWRlOwotICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBtb250aExhYmVscygpIG92ZXJyaWRlOwotICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBzaG9ydE1vbnRoTGFiZWxzKCkgb3ZlcnJpZGU7Ci0gICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHN0YW5kQWxvbmVNb250aExhYmVscygpIG92ZXJyaWRlOwotICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscygpIG92ZXJyaWRlOwotICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0aW1lQU1QTUxhYmVscygpIG92ZXJyaWRlOwotI2VuZGlm
Ci0KLSAgICBzdGF0aWMgQXRvbVN0cmluZyBjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9t
U3RyaW5nKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlTWVtb3J5
KCk7Ci0KLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gc2hvcnREYXRl
Rm9ybWF0dGVyKCk7Ci0gICAgdm9pZCBpbml0aWFsaXplTG9jYWxlRGF0YSgpIG92ZXJyaWRlOwot
Ci0gICAgUmV0YWluUHRyPE5TTG9jYWxlPiBtX2xvY2FsZTsKLSAgICBSZXRhaW5QdHI8TlNDYWxl
bmRhcj4gbV9ncmVnb3JpYW5DYWxlbmRhcjsKLSNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBV
VF9UWVBFUykKLSAgICBWZWN0b3I8U3RyaW5nPiBtX21vbnRoTGFiZWxzOwotICAgIFJldGFpblB0
cjxOU0RhdGVGb3JtYXR0ZXI+IHRpbWVGb3JtYXR0ZXIoKTsKLSAgICBSZXRhaW5QdHI8TlNEYXRl
Rm9ybWF0dGVyPiBzaG9ydFRpbWVGb3JtYXR0ZXIoKTsKLSAgICBSZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBkYXRlVGltZUZvcm1hdHRlcldpdGhTZWNvbmRzKCk7Ci0gICAgUmV0YWluUHRyPE5T
RGF0ZUZvcm1hdHRlcj4gZGF0ZVRpbWVGb3JtYXR0ZXJXaXRob3V0U2Vjb25kcygpOwotCi0gICAg
U3RyaW5nIG1fZGF0ZUZvcm1hdDsKLSAgICBTdHJpbmcgbV9tb250aEZvcm1hdDsKLSAgICBTdHJp
bmcgbV9zaG9ydE1vbnRoRm9ybWF0OwotICAgIFN0cmluZyBtX3RpbWVGb3JtYXRXaXRoU2Vjb25k
czsKLSAgICBTdHJpbmcgbV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHM7Ci0gICAgU3RyaW5nIG1f
ZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kczsKLSAgICBTdHJpbmcgbV9kYXRlVGltZUZvcm1hdFdp
dGhvdXRTZWNvbmRzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fc2hvcnRNb250aExhYmVsczsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBtX3N0YW5kQWxvbmVNb250aExhYmVsczsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1f
dGltZUFNUE1MYWJlbHM7Ci0jZW5kaWYKLSAgICBib29sIG1fZGlkSW5pdGlhbGl6ZU51bWJlckRh
dGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2RjMTQwYjNjYjExYjBjMGQyOTQ5ZTUwZWY3OTg0YjhlMDEzY2ZjNy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2NhbGVNYWMuaCIKLQotI2ltcG9y
dCAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0RhdGVGb3JtYXR0
ZXIuaD4KLSNpbXBvcnQgPEZvdW5kYXRpb24vTlNMb2NhbGUuaD4KLSNpbXBvcnQgPHd0Zi9EYXRl
TWF0aC5oPgotI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KLSNpbXBvcnQgPHd0Zi9MYW5ndWFnZS5o
PgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvQXRvbVN0cmlu
Z0hhc2guaD4KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW1wb3J0ICJMb2NhbGl6ZWRE
YXRlQ2FjaGUuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxp
bmUgU3RyaW5nIGxhbmd1YWdlRnJvbUxvY2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSkKLXsKLSAg
ICBTdHJpbmcgbm9ybWFsaXplZExvY2FsZSA9IGxvY2FsZTsKLSAgICBub3JtYWxpemVkTG9jYWxl
LnJlcGxhY2UoJy0nLCAnXycpOwotICAgIHNpemVfdCBzZXBhcmF0b3JQb3NpdGlvbiA9IG5vcm1h
bGl6ZWRMb2NhbGUuZmluZCgnXycpOwotICAgIGlmIChzZXBhcmF0b3JQb3NpdGlvbiA9PSBub3RG
b3VuZCkKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRMb2NhbGU7Ci0gICAgcmV0dXJuIG5vcm1h
bGl6ZWRMb2NhbGUubGVmdChzZXBhcmF0b3JQb3NpdGlvbik7Ci19Ci0KLXN0YXRpYyBSZXRhaW5Q
dHI8TlNMb2NhbGU+IGRldGVybWluZUxvY2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSkKLXsKLSAg
ICBSZXRhaW5QdHI8TlNMb2NhbGU+IGN1cnJlbnRMb2NhbGUgPSBbTlNMb2NhbGUgY3VycmVudExv
Y2FsZV07Ci0gICAgU3RyaW5nIGN1cnJlbnRMb2NhbGVMYW5ndWFnZSA9IGxhbmd1YWdlRnJvbUxv
Y2FsZShTdHJpbmcoW2N1cnJlbnRMb2NhbGUuZ2V0KCkgbG9jYWxlSWRlbnRpZmllcl0pKTsKLSAg
ICBTdHJpbmcgbG9jYWxlTGFuZ3VhZ2UgPSBsYW5ndWFnZUZyb21Mb2NhbGUobG9jYWxlKTsKLSAg
ICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjdXJyZW50TG9jYWxlTGFuZ3VhZ2UsIGxvY2Fs
ZUxhbmd1YWdlKSkKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRMb2NhbGU7Ci0gICAgLy8gSXQgc2Vl
bXMgaW5pdFdpdGhMb2NhbGVJZGVudGlmaWVyIGFjY2VwdHMgZGFzaC1zZXBhcmF0ZWQgbG9jYWxl
IGlkZW50aWZpZXIuCi0gICAgcmV0dXJuIGFkb3B0TlMoW1tOU0xvY2FsZSBhbGxvY10gaW5pdFdp
dGhMb2NhbGVJZGVudGlmaWVyOmxvY2FsZV0pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TG9jYWxl
PiBMb2NhbGU6OmNyZWF0ZShjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUpCi17Ci0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8TG9jYWxlTWFjPihkZXRlcm1pbmVMb2NhbGUobG9jYWxlLnN0cmluZygpKS5n
ZXQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBjcmVhdGVEYXRl
VGltZUZvcm1hdHRlcihOU0xvY2FsZSogbG9jYWxlLCBOU0NhbGVuZGFyKiBjYWxlbmRhciwgTlNE
YXRlRm9ybWF0dGVyU3R5bGUgZGF0ZVN0eWxlLCBOU0RhdGVGb3JtYXR0ZXJTdHlsZSB0aW1lU3R5
bGUpCi17Ci0gICAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXR0ZXIgPSBbW05TRGF0ZUZvcm1hdHRl
ciBhbGxvY10gaW5pdF07Ci0gICAgW2Zvcm1hdHRlciBzZXRMb2NhbGU6bG9jYWxlXTsKLSAgICBb
Zm9ybWF0dGVyIHNldERhdGVTdHlsZTpkYXRlU3R5bGVdOwotICAgIFtmb3JtYXR0ZXIgc2V0VGlt
ZVN0eWxlOnRpbWVTdHlsZV07Ci0gICAgW2Zvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9u
ZSB0aW1lWm9uZVdpdGhBYmJyZXZpYXRpb246QCJVVEMiXV07Ci0gICAgW2Zvcm1hdHRlciBzZXRD
YWxlbmRhcjpjYWxlbmRhcl07Ci0gICAgcmV0dXJuIGFkb3B0TlMoZm9ybWF0dGVyKTsKLX0KLQot
TG9jYWxlTWFjOjpMb2NhbGVNYWMoTlNMb2NhbGUqIGxvY2FsZSkKLSAgICA6IG1fbG9jYWxlKGxv
Y2FsZSkKLSAgICAsIG1fZ3JlZ29yaWFuQ2FsZW5kYXIoYWRvcHROUyhbW05TQ2FsZW5kYXIgYWxs
b2NdIGluaXRXaXRoQ2FsZW5kYXJJZGVudGlmaWVyOk5TQ2FsZW5kYXJJZGVudGlmaWVyR3JlZ29y
aWFuXSkpCi0gICAgLCBtX2RpZEluaXRpYWxpemVOdW1iZXJEYXRhKGZhbHNlKQotewotICAgIE5T
QXJyYXkqIGF2YWlsYWJsZUxhbmd1YWdlcyA9IFtOU0xvY2FsZSBJU09MYW5ndWFnZUNvZGVzXTsK
LSAgICAvLyBOU0xvY2FsZSByZXR1cm5zIGEgbG93ZXIgY2FzZSBOU0xvY2FsZUxhbmd1YWdlQ29k
ZSBzbyB3ZSBkb24ndCBoYXZlIGNhcmUgYWJvdXQgY2FzZS4KLSAgICBOU1N0cmluZyogbGFuZ3Vh
Z2UgPSBbbV9sb2NhbGUuZ2V0KCkgb2JqZWN0Rm9yS2V5Ok5TTG9jYWxlTGFuZ3VhZ2VDb2RlXTsK
LSAgICBpZiAoW2F2YWlsYWJsZUxhbmd1YWdlcyBpbmRleE9mT2JqZWN0Omxhbmd1YWdlXSA9PSBO
U05vdEZvdW5kKQotICAgICAgICBtX2xvY2FsZSA9IGFkb3B0TlMoW1tOU0xvY2FsZSBhbGxvY10g
aW5pdFdpdGhMb2NhbGVJZGVudGlmaWVyOmRlZmF1bHRMYW5ndWFnZSgpXSk7Ci0gICAgW21fZ3Jl
Z29yaWFuQ2FsZW5kYXIuZ2V0KCkgc2V0TG9jYWxlOm1fbG9jYWxlLmdldCgpXTsKLX0KLQotTG9j
YWxlTWFjOjp+TG9jYWxlTWFjKCkKLXsKLX0KLQotUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4g
TG9jYWxlTWFjOjpzaG9ydERhdGVGb3JtYXR0ZXIoKQotewotICAgIHJldHVybiBjcmVhdGVEYXRl
VGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVnb3JpYW5DYWxlbmRhci5nZXQoKSwg
TlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSwgTlNEYXRlRm9ybWF0dGVyTm9TdHlsZSk7Ci19Ci0K
LSNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKLVN0cmluZyBMb2NhbGVNYWM6
OmZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlQ29tcG9uZW50cywgRm9y
bWF0VHlwZSkKLXsKLSAgICBkb3VibGUgbXNlYyA9IGRhdGVDb21wb25lbnRzLm1pbGxpc2Vjb25k
c1NpbmNlRXBvY2goKTsKLSAgICBEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlID0gZGF0ZUNvbXBv
bmVudHMudHlwZSgpOwotCi0gICAgLy8gIndlZWsiIHR5cGUgbm90IHN1cHBvcnRlZC4KLSAgICBB
U1NFUlQodHlwZSAhPSBEYXRlQ29tcG9uZW50czo6SW52YWxpZCk7Ci0gICAgaWYgKHR5cGUgPT0g
RGF0ZUNvbXBvbmVudHM6OldlZWspCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8v
IEluY29taW5nIG1zZWMgdmFsdWUgaXMgbWlsbGlzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6
MDA6MDAgVVRDLiBUaGUgMTk3MCBlcG9jaC4KLSAgICBOU1RpbWVJbnRlcnZhbCBzZWNvbmRzU2lu
Y2UxOTcwID0gKG1zZWMgLyAxMDAwKTsKLSAgICBOU0RhdGUgKmRhdGUgPSBbTlNEYXRlIGRhdGVX
aXRoVGltZUludGVydmFsU2luY2UxOTcwOnNlY29uZHNTaW5jZTE5NzBdOwotCi0gICAgLy8gUmV0
dXJuIGEgZm9ybWF0dGVkIHN0cmluZy4KLSAgICBOU0RhdGVGb3JtYXR0ZXIgKmRhdGVGb3JtYXR0
ZXIgPSBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5mb3JtYXR0ZXJGb3JEYXRlVHlwZSh0eXBlKTsKLSAg
ICByZXR1cm4gW2RhdGVGb3JtYXR0ZXIgc3RyaW5nRnJvbURhdGU6ZGF0ZV07Ci19Ci0KLWNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVNYWM6Om1vbnRoTGFiZWxzKCkKLXsKLSAgICBpZiAoIW1f
bW9udGhMYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKLSAg
ICBtX21vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7Ci0gICAgTlNBcnJheSAqYXJyYXkg
PSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgbW9udGhTeW1ib2xzXTsKLSAgICBpZiAoW2Fy
cmF5IGNvdW50XSA9PSAxMikgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7
ICsraSkKLSAgICAgICAgICAgIG1fbW9udGhMYWJlbHMuYXBwZW5kKFN0cmluZyhbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSkpOwotICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKLSAgICB9Ci0g
ICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250aEZ1bGxOYW1lKQotICAgICAgICBtX21vbnRo
TGFiZWxzLmFwcGVuZChuYW1lKTsKLSAgICByZXR1cm4gbV9tb250aExhYmVsczsKLX0KLQotUmV0
YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlTWFjOjp0aW1lRm9ybWF0dGVyKCkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlRGF0ZVRpbWVGb3JtYXR0ZXIobV9sb2NhbGUuZ2V0KCksIG1fZ3JlZ29y
aWFuQ2FsZW5kYXIuZ2V0KCksIE5TRGF0ZUZvcm1hdHRlck5vU3R5bGUsIE5TRGF0ZUZvcm1hdHRl
ck1lZGl1bVN0eWxlKTsKLX0KLQotUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlTWFj
OjpzaG9ydFRpbWVGb3JtYXR0ZXIoKQotewotICAgIHJldHVybiBjcmVhdGVEYXRlVGltZUZvcm1h
dHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVnb3JpYW5DYWxlbmRhci5nZXQoKSwgTlNEYXRlRm9y
bWF0dGVyTm9TdHlsZSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSk7Ci19Ci0KLVJldGFpblB0
cjxOU0RhdGVGb3JtYXR0ZXI+IExvY2FsZU1hYzo6ZGF0ZVRpbWVGb3JtYXR0ZXJXaXRoU2Vjb25k
cygpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdldCgp
LCBtX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlLCBO
U0RhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZSk7Ci19Ci0KLVJldGFpblB0cjxOU0RhdGVGb3JtYXR0
ZXI+IExvY2FsZU1hYzo6ZGF0ZVRpbWVGb3JtYXR0ZXJXaXRob3V0U2Vjb25kcygpCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdldCgpLCBtX2dyZWdvcmlh
bkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlLCBOU0RhdGVGb3JtYXR0
ZXJTaG9ydFN0eWxlKTsKLX0KLQotU3RyaW5nIExvY2FsZU1hYzo6ZGF0ZUZvcm1hdCgpCi17Ci0g
ICAgaWYgKCFtX2RhdGVGb3JtYXQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBtX2RhdGVGb3Jt
YXQ7Ci0gICAgbV9kYXRlRm9ybWF0ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIGRhdGVG
b3JtYXRdOwotICAgIHJldHVybiBtX2RhdGVGb3JtYXQ7Ci19Ci0KLVN0cmluZyBMb2NhbGVNYWM6
Om1vbnRoRm9ybWF0KCkKLXsKLSAgICBpZiAoIW1fbW9udGhGb3JtYXQuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBtX21vbnRoRm9ybWF0OwotICAgIC8vIEdldHMgYSBmb3JtYXQgZm9yICJNTU1N
IiBiZWNhdXNlIFdpbmRvd3MgQVBJIGFsd2F5cyBwcm92aWRlcyBmb3JtYXRzIGZvcgotICAgIC8v
ICJNTU1NIiBpbiBzb21lIGxvY2FsZXMuCi0gICAgbV9tb250aEZvcm1hdCA9IFtOU0RhdGVGb3Jt
YXR0ZXIgZGF0ZUZvcm1hdEZyb21UZW1wbGF0ZTpAInl5eXlNTU1NIiBvcHRpb25zOjAgbG9jYWxl
Om1fbG9jYWxlLmdldCgpXTsKLSAgICByZXR1cm4gbV9tb250aEZvcm1hdDsKLX0KLQotU3RyaW5n
IExvY2FsZU1hYzo6c2hvcnRNb250aEZvcm1hdCgpCi17Ci0gICAgaWYgKCFtX3Nob3J0TW9udGhG
b3JtYXQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBtX3Nob3J0TW9udGhGb3JtYXQ7Ci0gICAg
bV9zaG9ydE1vbnRoRm9ybWF0ID0gW05TRGF0ZUZvcm1hdHRlciBkYXRlRm9ybWF0RnJvbVRlbXBs
YXRlOkAieXl5eU1NTSIgb3B0aW9uczowIGxvY2FsZTptX2xvY2FsZS5nZXQoKV07Ci0gICAgcmV0
dXJuIG1fc2hvcnRNb250aEZvcm1hdDsKLX0KLQotU3RyaW5nIExvY2FsZU1hYzo6dGltZUZvcm1h
dCgpCi17Ci0gICAgaWYgKCFtX3RpbWVGb3JtYXRXaXRoU2Vjb25kcy5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIG1fdGltZUZvcm1hdFdpdGhTZWNvbmRzOwotICAgIG1fdGltZUZvcm1hdFdpdGhT
ZWNvbmRzID0gW3RpbWVGb3JtYXR0ZXIoKS5nZXQoKSBkYXRlRm9ybWF0XTsKLSAgICByZXR1cm4g
bV90aW1lRm9ybWF0V2l0aFNlY29uZHM7Ci19Ci0KLVN0cmluZyBMb2NhbGVNYWM6OnNob3J0VGlt
ZUZvcm1hdCgpCi17Ci0gICAgaWYgKCFtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kcy5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG1fdGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzOwotICAgIG1fdGlt
ZUZvcm1hdFdpdGhvdXRTZWNvbmRzID0gW3Nob3J0VGltZUZvcm1hdHRlcigpLmdldCgpIGRhdGVG
b3JtYXRdOwotICAgIHJldHVybiBtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKLX0KLQotU3Ry
aW5nIExvY2FsZU1hYzo6ZGF0ZVRpbWVGb3JtYXRXaXRoU2Vjb25kcygpCi17Ci0gICAgaWYgKCFt
X2RhdGVUaW1lRm9ybWF0V2l0aFNlY29uZHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBtX2Rh
dGVUaW1lRm9ybWF0V2l0aFNlY29uZHM7Ci0gICAgbV9kYXRlVGltZUZvcm1hdFdpdGhTZWNvbmRz
ID0gW2RhdGVUaW1lRm9ybWF0dGVyV2l0aFNlY29uZHMoKS5nZXQoKSBkYXRlRm9ybWF0XTsKLSAg
ICByZXR1cm4gbV9kYXRlVGltZUZvcm1hdFdpdGhTZWNvbmRzOwotfQotCi1TdHJpbmcgTG9jYWxl
TWFjOjpkYXRlVGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzKCkKLXsKLSAgICBpZiAoIW1fZGF0ZVRp
bWVGb3JtYXRXaXRob3V0U2Vjb25kcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG1fZGF0ZVRp
bWVGb3JtYXRXaXRob3V0U2Vjb25kczsKLSAgICBtX2RhdGVUaW1lRm9ybWF0V2l0aG91dFNlY29u
ZHMgPSBbZGF0ZVRpbWVGb3JtYXR0ZXJXaXRob3V0U2Vjb25kcygpLmdldCgpIGRhdGVGb3JtYXRd
OwotICAgIHJldHVybiBtX2RhdGVUaW1lRm9ybWF0V2l0aG91dFNlY29uZHM7Ci19Ci0KLWNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVNYWM6OnNob3J0TW9udGhMYWJlbHMoKQotewotICAgIGlm
ICghbV9zaG9ydE1vbnRoTGFiZWxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fc2hvcnRN
b250aExhYmVsczsKLSAgICBtX3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsK
LSAgICBOU0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBzaG9ydE1v
bnRoU3ltYm9sc107Ci0gICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBtX3Nob3J0TW9udGhM
YWJlbHMuYXBwZW5kKFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKLSAgICAgICAgcmV0dXJuIG1f
c2hvcnRNb250aExhYmVsczsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250
aE5hbWUpCi0gICAgICAgIG1fc2hvcnRNb250aExhYmVscy5hcHBlbmQobmFtZSk7Ci0gICAgcmV0
dXJuIG1fc2hvcnRNb250aExhYmVsczsKLX0KLQotY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2Fs
ZU1hYzo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkKLXsKLSAgICBpZiAoIW1fc3RhbmRBbG9uZU1v
bnRoTGFiZWxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fc3RhbmRBbG9uZU1vbnRoTGFi
ZWxzOwotICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIHN0
YW5kYWxvbmVNb250aFN5bWJvbHNdOwotICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7Ci0g
ICAgICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbV9zdGFu
ZEFsb25lTW9udGhMYWJlbHMuYXBwZW5kKFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKLSAgICAg
ICAgcmV0dXJuIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzOwotICAgIH0KLSAgICBtX3N0YW5kQWxv
bmVNb250aExhYmVscyA9IHNob3J0TW9udGhMYWJlbHMoKTsKLSAgICByZXR1cm4gbV9zdGFuZEFs
b25lTW9udGhMYWJlbHM7Ci19Ci0KLWNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVNYWM6OnNo
b3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkKLXsKLSAgICBpZiAoIW1fc2hvcnRTdGFuZEFsb25l
TW9udGhMYWJlbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9zaG9ydFN0YW5kQWxvbmVN
b250aExhYmVsczsKLSAgICBOU0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5n
ZXQoKSBzaG9ydFN0YW5kYWxvbmVNb250aFN5bWJvbHNdOwotICAgIGlmIChbYXJyYXkgY291bnRd
ID09IDEyKSB7Ci0gICAgICAgIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMucmVzZXJ2ZUNh
cGFjaXR5KDEyKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0g
ICAgICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSk7Ci0gICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFi
ZWxzOwotICAgIH0KLSAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250
aExhYmVscygpOwotICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOwotfQot
Ci1jb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjp0aW1lQU1QTUxhYmVscygpCi17Ci0g
ICAgaWYgKCFtX3RpbWVBTVBNTGFiZWxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdGlt
ZUFNUE1MYWJlbHM7Ci0gICAgbV90aW1lQU1QTUxhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0g
ICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyID0gc2hvcnRUaW1lRm9ybWF0
dGVyKCk7Ci0gICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRlci5nZXQoKSBBTVN5
bWJvbF0pOwotICAgIG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKFtmb3JtYXR0ZXIuZ2V0KCkgUE1T
eW1ib2xdKTsKLSAgICByZXR1cm4gbV90aW1lQU1QTUxhYmVsczsKLX0KLQotI2VuZGlmCi0KLXVz
aW5nIENhbm9uaWNhbExvY2FsZU1hcCA9IEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmluZz47
Ci0KLXN0YXRpYyBDYW5vbmljYWxMb2NhbGVNYXAmIGNhbm9uaWNhbExvY2FsZU1hcCgpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhbm9uaWNhbExvY2FsZU1hcD4gY2Fub25pY2FsTG9j
YWxlTWFwOwotICAgIHJldHVybiBjYW5vbmljYWxMb2NhbGVNYXAuZ2V0KCk7Ci19Ci0KLUF0b21T
dHJpbmcgTG9jYWxlTWFjOjpjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nKGNv
bnN0IEF0b21TdHJpbmcmIHN0cmluZykKLXsKLSAgICByZXR1cm4gY2Fub25pY2FsTG9jYWxlTWFw
KCkuZW5zdXJlKHN0cmluZywgWyZdIHsKLSAgICAgICAgcmV0dXJuIFtOU0xvY2FsZSBjYW5vbmlj
YWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nOnN0cmluZ107Ci0gICAgfSkuaXRlcmF0b3It
PnZhbHVlOwotfQotCi12b2lkIExvY2FsZU1hYzo6cmVsZWFzZU1lbW9yeSgpCi17Ci0gICAgY2Fu
b25pY2FsTG9jYWxlTWFwKCkuY2xlYXIoKTsKLX0KLQotdm9pZCBMb2NhbGVNYWM6OmluaXRpYWxp
emVMb2NhbGVEYXRhKCkKLXsKLSAgICBpZiAobV9kaWRJbml0aWFsaXplTnVtYmVyRGF0YSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fZGlkSW5pdGlhbGl6ZU51bWJlckRhdGEgPSB0cnVlOwotCi0g
ICAgUmV0YWluUHRyPE5TTnVtYmVyRm9ybWF0dGVyPiBmb3JtYXR0ZXIgPSBhZG9wdE5TKFtbTlNO
dW1iZXJGb3JtYXR0ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbZm9ybWF0dGVyLmdldCgpIHNldExv
Y2FsZTptX2xvY2FsZS5nZXQoKV07Ci0gICAgW2Zvcm1hdHRlci5nZXQoKSBzZXROdW1iZXJTdHls
ZTpOU051bWJlckZvcm1hdHRlckRlY2ltYWxTdHlsZV07Ci0gICAgW2Zvcm1hdHRlci5nZXQoKSBz
ZXRVc2VzR3JvdXBpbmdTZXBhcmF0b3I6Tk9dOwotCi0gICAgUmV0YWluUHRyPE5TTnVtYmVyPiBz
YW1wbGVOdW1iZXIgPSBhZG9wdE5TKFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoRG91YmxlOjk4
NzY1NDMyMTBdKTsKLSAgICBTdHJpbmcgbmluZVRvWmVybyhbZm9ybWF0dGVyLmdldCgpIHN0cmlu
Z0Zyb21OdW1iZXI6c2FtcGxlTnVtYmVyLmdldCgpXSk7Ci0gICAgaWYgKG5pbmVUb1plcm8ubGVu
Z3RoKCkgIT0gMTApCi0gICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8U3RyaW5nLCBEZWNpbWFs
U3ltYm9sc1NpemU+IHN5bWJvbHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwOyAr
K2kpCi0gICAgICAgIHN5bWJvbHMuYXBwZW5kKG5pbmVUb1plcm8uc3Vic3RyaW5nKDkgLSBpLCAx
KSk7Ci0gICAgQVNTRVJUKHN5bWJvbHMuc2l6ZSgpID09IERlY2ltYWxTZXBhcmF0b3JJbmRleCk7
Ci0gICAgc3ltYm9scy5hcHBlbmQoW2Zvcm1hdHRlci5nZXQoKSBkZWNpbWFsU2VwYXJhdG9yXSk7
Ci0gICAgQVNTRVJUKHN5bWJvbHMuc2l6ZSgpID09IEdyb3VwU2VwYXJhdG9ySW5kZXgpOwotICAg
IHN5bWJvbHMuYXBwZW5kKFtmb3JtYXR0ZXIuZ2V0KCkgZ3JvdXBpbmdTZXBhcmF0b3JdKTsKLSAg
ICBBU1NFUlQoc3ltYm9scy5zaXplKCkgPT0gRGVjaW1hbFN5bWJvbHNTaXplKTsKLQotICAgIFN0
cmluZyBwb3NpdGl2ZVByZWZpeChbZm9ybWF0dGVyLmdldCgpIHBvc2l0aXZlUHJlZml4XSk7Ci0g
ICAgU3RyaW5nIHBvc2l0aXZlU3VmZml4KFtmb3JtYXR0ZXIuZ2V0KCkgcG9zaXRpdmVTdWZmaXhd
KTsKLSAgICBTdHJpbmcgbmVnYXRpdmVQcmVmaXgoW2Zvcm1hdHRlci5nZXQoKSBuZWdhdGl2ZVBy
ZWZpeF0pOwotICAgIFN0cmluZyBuZWdhdGl2ZVN1ZmZpeChbZm9ybWF0dGVyLmdldCgpIG5lZ2F0
aXZlU3VmZml4XSk7Ci0gICAgc2V0TG9jYWxlRGF0YShzeW1ib2xzLCBwb3NpdGl2ZVByZWZpeCwg
cG9zaXRpdmVTdWZmaXgsIG5lZ2F0aXZlUHJlZml4LCBuZWdhdGl2ZVN1ZmZpeCk7Ci19Ci0KLX0K
</data>

          </attachment>
      

    </bug>

</bugzilla>