Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#1 2020-07-12 17:18:51

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,473

rah_post_versions plugin and Textpattern 4.8.x

I was absent from the forum for a very long time, life was not easy and there was not enough time for everything. But the development of Textpattern continued and there are many important new features. I want to thank everyone who contributed to it for the great work!

I started to update some installations, which went well so far without any problems.

Only for one plugin I am missing a current version, rah_post_versions. I’m using version 0.9.1 (2016-06-04 changed by jpdupont for Textpattern 4.6 campatibility), but since Textpattern 4.8 it doesn’t register any changes and doesn’t send emails anymore.

Does anyone know anything about this?

Offline

#2 2020-07-12 21:20:57

bici
Member
From: vancouver
Registered: 2004-02-24
Posts: 2,072
Website Mastodon

Re: rah_post_versions plugin and Textpattern 4.8.x

mucho tiempo sin verte…. welcome back!

Since you have been away we have a new plugin source to check > plugins.textpattern.com

i don’t see an updated version of the plugin you are looking for herein


…. texted postive

Offline

#3 2020-07-12 21:46:14

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,473

Re: rah_post_versions plugin and Textpattern 4.8.x

Sí, bastante tiempo, gracias. ;-)

In GitHub it’s been saying the same thing for many months, rah_post_versions upcoming, and the emailing feature will be removed. This function was for me the most important part of the plugin.

Offline

#4 2020-07-12 22:14:24

etc
Developer
Registered: 2010-11-11
Posts: 5,028
Website GitHub

Re: rah_post_versions plugin and Textpattern 4.8.x

Have you also switched to php 7? Then it will not work, mysql_insert_id() function (among others) has been deprecated.

Offline

#5 2020-07-12 22:22:18

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,473

Re: rah_post_versions plugin and Textpattern 4.8.x

Yes, it’s on PHP 7.4, so that’s the reason. Thanks for the information.

Offline

#6 2020-07-12 22:43:52

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,473

Re: rah_post_versions plugin and Textpattern 4.8.x

This version rah_post_versions_v1.0beta by jakob works, but unfortunately without emailing feature.

Last edited by GugUser (2020-07-13 00:08:46)

Offline

#7 2020-07-12 23:59:43

towndock
Member
From: Oriental, NC USA
Registered: 2007-04-06
Posts: 329
Website

Re: rah_post_versions plugin and Textpattern 4.8.x

Was happy to see rah_post_versions had an update compatible with 4.8. Put it on a site with 4.8.0 (upgrading from plugin version 0.80).

The front end of the site started serving blank pages. Turned new plugin off. Site back as normal. I didn’t do detailed troubleshooting, as this is a high traffic revenue site (and I didn’t want more outages).

Will try it on a less critical site in the future. While I’ll proceed with caution, I am pleased this plugin has a likely future.

Offline

#8 2020-07-13 00:08:22

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,473

Re: rah_post_versions plugin and Textpattern 4.8.x

I was wrong, rah_post_versions_v1.0beta doesn’t work on Textpattern 4.8. Later I saw in the front end:

Fatal error: Uncaught Error: Call to undefined function register_tab()

Offline

#9 2020-07-13 06:37:47

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 11,250
Website GitHub

Re: rah_post_versions plugin and Textpattern 4.8.x

Fatal error: Uncaught Error: Call to undefined function register_tab()

That’s a one-line fix to include lib/txplib_admin.php before that function is used. Or (better) alter the plugin structure slightly so tab registration only occurs on the admin side.


The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.

Txp Builders – finely-crafted code, design and Txp

Offline

#10 2020-07-13 08:35:14

etc
Developer
Registered: 2010-11-11
Posts: 5,028
Website GitHub

Re: rah_post_versions plugin and Textpattern 4.8.x

Try this, who knows..

# Name: rah_post_versions v1.0beta 
# Type: Admin/AJAX plugin
# Revision control
# Author: Jukka Svahn
# URL: http://rahforum.biz
# Recommended load order: 5

# .....................................................................
# This is a plugin for Textpattern CMS - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# .....................................................................

YToxMTp7czo0OiJuYW1lIjtzOjE3OiJyYWhfcG9zdF92ZXJzaW9ucyI7czo2OiJhdXRob3Ii
O3M6MTE6Ikp1a2thIFN2YWhuIjtzOjEwOiJhdXRob3JfdXJpIjtzOjE5OiJodHRwOi8vcmFo
Zm9ydW0uYml6IjtzOjc6InZlcnNpb24iO3M6NzoiMS4wYmV0YSI7czoxMToiZGVzY3JpcHRp
b24iO3M6MTY6IlJldmlzaW9uIGNvbnRyb2wiO3M6NDoiY29kZSI7czozMjg0ODoiLyoqDQog
KiBSYWhfcG9zdF92ZXJzaW9ucyBwbHVnaW4gZm9yIFRleHRwYXR0ZXJuIENNUy4NCiAqDQog
KiBAYXV0aG9yICBKdWtrYSBTdmFobg0KICogQGRhdGUgICAgMjAxMC0NCiAqIEBsaWNlbnNl
IEdOVSBHUEx2Mg0KICogQGxpbmsgICAgaHR0cDovL3JhaGZvcnVtLmJpei9wbHVnaW5zL3Jh
aF9wb3N0X3ZlcnNpb25zDQogKg0KICogQ29weXJpZ2h0IChDKSAyMDEyIEp1a2thIFN2YWhu
IGh0dHA6Ly9yYWhmb3J1bS5iaXoNCiAqIExpY2Vuc2VkIHVuZGVyIEdOVSBHZW5yYWwgUHVi
bGljIExpY2Vuc2UgdmVyc2lvbiAyDQogKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv
Z3BsLTIuMC5odG1sDQogKi8NCg0KCXJhaF9wb3N0X3ZlcnNpb25zOjpnZXQoKTsNCg0KLyoq
DQogKiBUaGUgcGx1Z2luIGNsYXNzLg0KICovDQoNCmNsYXNzIHJhaF9wb3N0X3ZlcnNpb25z
DQp7DQoJLyoqDQoJICogVmVyc2lvbiBudW1iZXIuDQoJICoNCgkgKiBAdmFyIHN0cmluZw0K
CSAqLw0KDQoJc3RhdGljIHB1YmxpYyAkdmVyc2lvbiA9ICcxLjAnOw0KDQoJLyoqDQoJICog
U3RvcmVzIGluc3RhbmNlcy4NCgkgKg0KCSAqIEB2YXIgcmFoX3Bvc3RfdmVyc2lvbnMNCgkg
Ki8NCg0KCXN0YXRpYyBwdWJsaWMgJGluc3RhbmNlID0gTlVMTDsNCg0KCS8qKg0KCSAqIExp
c3Qgb2YgZXZlbnQgbGFiZWxzLg0KCSAqDQoJICogQHZhciBhcnJheQ0KCSAqLw0KDQoJcHJv
dGVjdGVkICRldmVudHMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogUGF0aCB0byByZXBvc2l0
b3J5Lg0KCSAqDQoJICogQHZhciBzdHJpbmcNCgkgKi8NCg0KCXByb3RlY3RlZCAkc3RhdGlj
X2RpciA9IGZhbHNlOw0KDQoJLyoqDQoJICogU3RhdGljIGhlYWRpbmcuDQoJICoNCgkgKiBA
dmFyIHN0cmluZw0KCSAqLw0KDQoJcHJvdGVjdGVkICRzdGF0aWNfaGVhZGVyID0gJyc7DQoN
CgkvKioNCgkgKiBXcml0ZSBzdGF0dXMuDQoJICoNCgkgKiBAdmFyIGJvb2wNCgkgKi8NCg0K
CXByb3RlY3RlZCAkbm93cml0ZSA9IGZhbHNlOw0KDQoJLyoqDQoJICogQ29tcHJlc3Mgb3Ig
bm90Lg0KCSAqDQoJICogQHZhciBib29sDQoJICovDQoNCglwcm90ZWN0ZWQgJGNvbXByZXNz
ID0gZmFsc2U7DQoNCgkvKioNCgkgKiBJbnN0YWxsZXIuDQoJICoNCgkgKiBAcGFyYW0gc3Ry
aW5nICRldmVudCBQbHVnaW4tbGlmZWN5Y2xlIGV2ZW50DQoJICogQHBhcmFtIHN0cmluZyAk
c3RlcCAgUGx1Z2luLWxpZmVjeWNsZSBzdGVwDQoJICovDQoNCglzdGF0aWMgcHVibGljIGZ1
bmN0aW9uIGluc3RhbGwoJGV2ZW50ID0gJycsICRzdGVwID0gJycpDQoJew0KCQlnbG9iYWwg
JHByZWZzOw0KDQoJCWlmICgkc3RlcCA9PSAnZGVsZXRlZCcpDQoJCXsNCgkJCXNhZmVfZGVs
ZXRlKA0KCQkJCSd0eHBfcHJlZnMnLA0KCQkJCSJuYW1lIGxpa2UgJ3JhaFxfcG9zdFxfdmVy
c2lvbnNcXyUnIg0KCQkJKTsNCg0KCQkJQHNhZmVfcXVlcnkoDQoJCQkJJ0RST1AgVEFCTEUg
SUYgRVhJU1RTICcuDQoJCQkJc2FmZV9wZngoJ3JhaF9wb3N0X3ZlcnNpb25zJykuJywgJy4N
CgkJCQlzYWZlX3BmeCgncmFoX3Bvc3RfdmVyc2lvbnNfc2V0cycpDQoJCQkpOw0KDQoJCQly
ZXR1cm47DQoJCX0NCg0KCQlpZiAoKHN0cmluZykgZ2V0X3ByZWYoJ3JhaF9wb3N0X3ZlcnNp
b25zX3ZlcnNpb24nKSA9PT0gc2VsZjo6JHZlcnNpb24pDQoJCXsNCgkJCXJldHVybjsNCgkJ
fQ0KDQoJCXNhZmVfcXVlcnkoDQoJCQknQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJy5z
YWZlX3BmeCgncmFoX3Bvc3RfdmVyc2lvbnNfc2V0cycpLiIgKA0KCQkJCWBpZGAgSU5UKDEx
KSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwNCgkJCQlgZXZlbnRgIFZBUkNIQVIoMjU1KSBO
T1QgTlVMTCwNCgkJCQlgc3RlcGAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLA0KCQkJCWBncmlk
YCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsDQoJCQkJYHRpdGxlYCBWQVJDSEFSKDI1NSkgTk9U
IE5VTEwsDQoJCQkJYG1vZGlmaWVkYCBEQVRFVElNRSBOT1QgTlVMTCwNCgkJCQlgY2hhbmdl
c2AgSU5UKDEyKSBOT1QgTlVMTCBkZWZhdWx0IDAsDQoJCQkJUFJJTUFSWSBLRVkoYGlkYCks
DQoJCQkJS0VZIGBldmVudF9ncmlkX2lkeGAgKGBldmVudGAoMjQpLGBncmlkYCgzMikpDQoJ
CQkpIFBBQ0tfS0VZUz0xIEFVVE9fSU5DUkVNRU5UPTEgQ0hBUlNFVD11dGY4Ig0KCQkpOw0K
DQoJCXNhZmVfcXVlcnkoDQoJCQknQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJy5zYWZl
X3BmeCgncmFoX3Bvc3RfdmVyc2lvbnMnKS4iICgNCgkJCQlgaWRgIElOVCgxMSkgTk9UIE5V
TEwgYXV0b19pbmNyZW1lbnQsDQoJCQkJYGV2ZW50YCBWQVJDSEFSKDI1NSkgTk9UIE5VTEws
DQoJCQkJYHN0ZXBgIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwNCgkJCQlgdGl0bGVgIFZBUkNI
QVIoMjU1KSBOT1QgTlVMTCwNCgkJCQlgZ3JpZGAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLA0K
CQkJCWBzZXRpZGAgSU5UKDExKSBOT1QgTlVMTCwNCgkJCQlgYXV0aG9yYCBWQVJDSEFSKDY0
KSBOT1QgTlVMTCwNCgkJCQlgcG9zdGVkYCBEQVRFVElNRSBOT1QgTlVMTCwNCgkJCQlgZGF0
YWAgTE9OR1RFWFQgTk9UIE5VTEwsDQoJCQkJUFJJTUFSWSBLRVkoYGlkYCksDQoJCQkJS0VZ
IGBzZXRpZF9pZHhgIChgc2V0aWRgKQ0KCQkJKSBQQUNLX0tFWVM9MSBBVVRPX0lOQ1JFTUVO
VD0xIENIQVJTRVQ9dXRmOCINCgkJKTsNCg0KCQkkcG9zaXRpb24gPSAyNTA7DQoNCgkJZm9y
ZWFjaCAoDQoJCQlhcnJheSgNCgkJCQknZ3ppcCcgICAgICAgICAgICA9PiBhcnJheSgneWVz
bm9yYWRpbycsIDApLA0KCQkJCSdyZXBvc2l0b3J5X3BhdGgnID0+IGFycmF5KCd0ZXh0X2lu
cHV0JywgJycpLA0KCQkJKSBhcyAkbmFtZSA9PiAkdmFsDQoJCSkNCgkJew0KCQkJJG4gPSAn
cmFoX3Bvc3RfdmVyc2lvbnNfJy4kbmFtZTsNCg0KCQkJaWYgKCFpc3NldCgkcHJlZnNbJG5d
KSkNCgkJCXsNCgkJCQlzZXRfcHJlZigkbiwgJHZhbFsxXSwgJ3JhaF9wb3N0dmVyJywgUFJF
Rl9QTFVHSU4sICR2YWxbMF0sICRwb3NpdGlvbik7DQoJCQl9DQoNCgkJCSRwb3NpdGlvbisr
Ow0KCQl9DQoNCgkJc2V0X3ByZWYoJ3JhaF9wb3N0X3ZlcnNpb25zX3ZlcnNpb24nLCBzZWxm
OjokdmVyc2lvbiwgJ3JhaF9wb3N0dmVyJywgUFJFRl9ISURERU4pOw0KCX0NCg0KCS8qKg0K
CSAqIFJlZGlyZWN0cyB0byB0aGUgcGx1Z2luJ3MgYWRtaW4tc2lkZSBwYW5lbC4NCgkgKi8N
Cg0KCXB1YmxpYyBmdW5jdGlvbiBwcmVmcygpDQoJew0KCQloZWFkZXIoJ0xvY2F0aW9uOiA/
ZXZlbnQ9cmFoX3Bvc3RfdmVyc2lvbnMnKTsNCg0KCQllY2hvIA0KCQkJJzxwPicubi4NCgkJ
CScJPGEgaHJlZj0iP2V2ZW50PXJhaF9wb3N0X3ZlcnNpb25zIj4nLmdUeHQoJ2NvbnRpbnVl
JykuJzwvYT4nLm4uDQoJCQknPC9wPic7DQoJfQ0KDQoJLyoqDQoJICogQ29uc3RydWN0b3Iu
DQoJICovDQoNCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KCXsNCgkJaWYgKHR4
cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJCQlhZGRfcHJpdnMoJ3JhaF9wb3N0X3ZlcnNp
b25zJywgJzEsMicpOw0KCQkJYWRkX3ByaXZzKCdyYWhfcG9zdF92ZXJzaW9uc19kZWxldGVf
aXRlbScsICcxJyk7DQoJCQlhZGRfcHJpdnMoJ3JhaF9wb3N0X3ZlcnNpb25zX2RlbGV0ZV9y
ZXZpc2lvbicsICcxJyk7DQoJCQlhZGRfcHJpdnMoJ3JhaF9wb3N0X3ZlcnNpb25zX2RpZmYn
LCAnMSwyJyk7DQoJCQlhZGRfcHJpdnMoJ3JhaF9wb3N0X3ZlcnNpb25zX3ByZWZlcmVuY2Vz
JywgJzEnKTsNCgkJCWFkZF9wcml2cygncGx1Z2luX3ByZWZzLnJhaF9wb3N0X3ZlcnNpb25z
JywgJzEsMicpOw0KCQkJYWRkX3ByaXZzKCdwcmVmcy5yYWhfcG9zdHZlcicsICcxJyk7DQoN
CgkJCXJlZ2lzdGVyX2NhbGxiYWNrKGFycmF5KF9fQ0xBU1NfXywgJ2luc3RhbGwnKSwgJ3Bs
dWdpbl9saWZlY3ljbGUucmFoX3Bvc3RfdmVyc2lvbnMnKTsNCgkJCXJlZ2lzdGVyX2NhbGxi
YWNrKGFycmF5KCR0aGlzLCAncGFuZXMnKSwgJ3JhaF9wb3N0X3ZlcnNpb25zJyk7DQoJCQly
ZWdpc3Rlcl9jYWxsYmFjayhhcnJheSgkdGhpcywgJ3ByZWZzJyksICdwbHVnaW5fcHJlZnMu
cmFoX3Bvc3RfdmVyc2lvbnMnKTsNCgkJCXJlZ2lzdGVyX3RhYignZXh0ZW5zaW9ucycsJ3Jh
aF9wb3N0X3ZlcnNpb25zJywgZ1R4dCgncmFoX3Bvc3RfdmVyc2lvbnMnKSk7DQoNCgkJCSR0
aGlzLT5pbml0aWFsaXplKCk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBJbml0aWFsaXplcy4N
CgkgKi8NCg0KCXB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplKCkNCgl7DQoJCWdsb2JhbCAk
cHJlZnM7DQoNCgkJaWYgKCFkZWZpbmVkKCdyYWhfcG9zdF92ZXJzaW9uc19zdGF0aWNfZGly
JykpDQoJCXsNCgkJCWRlZmluZSgncmFoX3Bvc3RfdmVyc2lvbnNfc3RhdGljX2RpcicsIHRy
dWUpOw0KCQl9DQoNCgkJaWYgKCRwcmVmc1sncmFoX3Bvc3RfdmVyc2lvbnNfZ3ppcCddICYm
IGZ1bmN0aW9uX2V4aXN0cygnZ3plbmNvZGUnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2d6aW5m
bGF0ZScpKQ0KCQl7DQoJCQkkdGhpcy0+Y29tcHJlc3MgPSB0cnVlOw0KCQl9DQoNCgkJJHRo
aXMtPmdvX3N0YXRpYygpOw0KCX0NCg0KCS8qKg0KCSAqIEdldHMgYW4gaW5zdGFuY2UuDQoJ
ICoNCgkgKiBAcmV0dXJuIHJhaF9wb3N0X3ZlcnNpb25zDQoJICovDQoNCglzdGF0aWMgcHVi
bGljIGZ1bmN0aW9uIGdldCgpDQoJew0KCQlpZiAoc2VsZjo6JGluc3RhbmNlID09PSBudWxs
KQ0KCQl7DQoJCQlzZWxmOjokaW5zdGFuY2UgPSBuZXcgcmFoX3Bvc3RfdmVyc2lvbnMoKTsN
CgkJfQ0KDQoJCXJldHVybiBzZWxmOjokaW5zdGFuY2U7DQoJfQ0KDQoJLyoqDQoJICogU2hv
d3MgcmVxdWVzdGVkIGFkbWluLXNpZGUgcGFnZS4NCgkgKi8NCg0KCXB1YmxpYyBmdW5jdGlv
biBwYW5lcygpDQoJew0KCQlyZXF1aXJlX3ByaXZzKCdyYWhfcG9zdF92ZXJzaW9ucycpOw0K
DQoJCWdsb2JhbCAkc3RlcDsNCg0KCQkkc3RlcHMgPSBhcnJheSgNCgkJCSdicm93c2VyJyAg
ICA9PiBmYWxzZSwNCgkJCSdjaGFuZ2VzJyAgICA9PiBmYWxzZSwNCgkJCSdkaWZmJyAgICAg
ICA9PiBmYWxzZSwNCgkJCSdtdWx0aV9lZGl0JyA9PiB0cnVlLA0KCQkJJ3JldmVydCcgICAg
ID0+IHRydWUsDQoJCSk7DQoNCgkJaWYgKCEkc3RlcCB8fCAhYm91bmNlcigkc3RlcCwgJHN0
ZXBzKSkNCgkJew0KCQkJJHN0ZXAgPSAnYnJvd3Nlcic7DQoJCX0NCg0KCQkkdGhpcy0+JHN0
ZXAoKTsNCgl9DQoNCgkvKioNCgkgKiBMaXN0cyBhZG1pbi1zaWRlIGV2ZW50IG5hbWVzIGFu
ZCBsYWJlbHMuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5DQoJICovDQoNCglwcm90ZWN0ZWQg
ZnVuY3Rpb24gcG9wX2V2ZW50cygpDQoJew0KCQlpZiAoJHRoaXMtPmV2ZW50cyB8fCAhZnVu
Y3Rpb25fZXhpc3RzKCdhcmVhcycpIHx8ICFpc19hcnJheShhcmVhcygpKSkNCgkJew0KCQkJ
cmV0dXJuICR0aGlzLT5ldmVudHM7DQoJCX0NCg0KCQlmb3JlYWNoIChhcmVhcygpIGFzICR0
YWJfZ3JvdXApDQoJCXsNCgkJCWZvcmVhY2ggKCR0YWJfZ3JvdXAgYXMgJGxhYmVsID0+ICRl
dmVudCkNCgkJCXsNCgkJCQkkdGhpcy0+ZXZlbnRzWyRldmVudF0gPSAkbGFiZWw7DQoJCQl9
DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmV2ZW50czsNCgl9DQoNCgkvKioNCgkgKiBHZXQg
YSByZXZpc2lvbiBmcm9tIHRoZSBkYXRhYmFzZS4NCgkgKg0KCSAqIEBwYXJhbSAgc3RyaW5n
ICR3aGVyZSBTUUwgd2hlcmUgY2xhdXNlDQoJICogQHJldHVybiBhcnJheQ0KCSAqLw0KDQoJ
cHVibGljIGZ1bmN0aW9uIGdldF9yZXZpc2lvbigkd2hlcmUpDQoJew0KCQlnbG9iYWwgJHBy
ZWZzOw0KDQoJCSRyID0gc2FmZV9yb3coJyonLCAncmFoX3Bvc3RfdmVyc2lvbnMnLCAkd2hl
cmUpOw0KDQoJCWlmICghJHIpDQoJCXsNCgkJCXJldHVybiBhcnJheSgpOw0KCQl9DQoNCgkJ
aWYgKCR0aGlzLT5ub3dyaXRlID09IHRydWUpDQoJCXsNCgkJCSRyWydkYXRhJ10gPSAnJzsN
CgkJfQ0KDQoJCWlmICgkciAmJiAkdGhpcy0+c3RhdGljX2RpcikNCgkJew0KCQkJJGZpbGUg
PSAkdGhpcy0+c3RhdGljX2RpciAuIERTIC4gJHJbJ3NldGlkJ10gLiAnX3InIC4gJHJbJ2lk
J10gLiAnLnBocCc7DQoNCgkJCWlmIChmaWxlX2V4aXN0cygkZmlsZSkgJiYgaXNfZmlsZSgk
ZmlsZSkgJiYgaXNfcmVhZGFibGUoJGZpbGUpKQ0KCQkJew0KCQkJCW9iX3N0YXJ0KCk7DQoJ
CQkJaW5jbHVkZSAkZmlsZTsNCgkJCQkkclsnZGF0YSddID0gb2JfZ2V0X2NvbnRlbnRzKCk7
DQoJCQkJb2JfZW5kX2NsZWFuKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHJbJ2Rh
dGEnXSA9ICcnOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKCFlbXB0eSgkclsnZGF0YSddKSkNCgkJ
ew0KCQkJQCRyWydkYXRhJ10gPSBiYXNlNjRfZGVjb2RlKCRyWydkYXRhJ10pOw0KDQoJCQlp
ZiAoJHRoaXMtPmNvbXByZXNzICYmIHN0cm5jbXAoJHJbJ2RhdGEnXSwgIlx4MUZceDhCIiwg
MikgPT09IDApDQoJCQl7DQoJCQkJJHJbJ2RhdGEnXSA9IGd6aW5mbGF0ZShzdWJzdHIoJHJb
J2RhdGEnXSwgMTApKTsNCgkJCX0NCg0KCQkJQCRyWydkYXRhJ10gPSB1bnNlcmlhbGl6ZSgk
clsnZGF0YSddKTsNCgkJfQ0KDQoJCXJldHVybiAkcjsNCgl9DQoNCgkvKioNCgkgKiBDcmVh
dGVzIGEgbmV3IHJldmlzaW9uLg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgJGdyaWQgICBH
cm91cCBpZGVudGlmaWVyDQoJICogQHBhcmFtICBzdHJpbmcgJHRpdGxlICBUaGUgdGl0bGUN
CgkgKiBAcGFyYW0gIHN0cmluZyAkYXV0aG9yIFRoZSBhdXRob3INCgkgKiBAcGFyYW0gIHN0
cmluZyAkZXZlbnQgIFRoZSBldmVudA0KCSAqIEBwYXJhbSAgc3RyaW5nICRzdGVwICAgVGhl
IHN0ZXANCgkgKiBAcGFyYW0gIGFycmF5ICAkZGF0YSAgIFRoZSByZXZpc2lvbiBkYXRhDQoJ
ICogQHJldHVybiBib29sICAgRkFMU0Ugb24gZmFpbHVyZQ0KCSAqLw0KDQoJcHVibGljIGZ1
bmN0aW9uIGNyZWF0ZV9yZXZpc2lvbigkZ3JpZCwgJHRpdGxlLCAkYXV0aG9yLCAkZXZlbnQs
ICRzdGVwLCAkZGF0YSkNCgl7DQoJCWdsb2JhbCAkcHJlZnM7DQoNCgkJaWYgKCR0aGlzLT5u
b3dyaXRlIHx8ICEkZ3JpZCB8fCAhJGV2ZW50IHx8ICEkc3RlcCkNCgkJew0KCQkJcmV0dXJu
IGZhbHNlOw0KCQl9DQoNCgkJZm9yZWFjaCAoYXJyYXkoJ2dyaWQnLCAndGl0bGUnLCAnYXV0
aG9yJywgJ2V2ZW50JywgJ3N0ZXAnKSBhcyAkbmFtZSkNCgkJew0KCQkJJHNxbFskbmFtZV0g
PSAkbmFtZS4iPSciLmRvU2xhc2goJCRuYW1lKS4iJyI7DQoJCX0NCg0KCQlpZiAoJHRpdGxl
ID09PSAnJykNCgkJew0KCQkJJHNxbFsndGl0bGUnXSA9ICJ0aXRsZT0nIi5kb1NsYXNoKCRn
cmlkKS4iJyI7DQoJCX0NCg0KCQkkc3FsWydwb3N0ZWQnXSA9ICdwb3N0ZWQ9bm93KCknOw0K
DQoJCSRzZXRpZCA9IHNhZmVfZmllbGQoDQoJCQknaWQnLA0KCQkJJ3JhaF9wb3N0X3ZlcnNp
b25zX3NldHMnLA0KCQkJJHNxbFsnZXZlbnQnXS4nIGFuZCAnLiRzcWxbJ2dyaWQnXS4nIGxp
bWl0IDEnDQoJCSk7DQoNCgkJaWYgKCEkc2V0aWQpDQoJCXsNCgkJCSRzZXRpZCA9IHNhZmVf
aW5zZXJ0KA0KCQkJCSdyYWhfcG9zdF92ZXJzaW9uc19zZXRzJywNCgkJCQknbW9kaWZpZWQ9
bm93KCksIGNoYW5nZXM9MSwnLg0KCQkJCSRzcWxbJ3RpdGxlJ10uJywnLg0KCQkJCSRzcWxb
J2V2ZW50J10uJywnLg0KCQkJCSRzcWxbJ3N0ZXAnXS4nLCcuDQoJCQkJJHNxbFsnZ3JpZCdd
DQoJCQkpOw0KDQoJCQlpZiAoJHNldGlkID09PSBmYWxzZSkNCgkJCXsNCgkJCQlyZXR1cm4g
ZmFsc2U7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQl7CQ0KCQkJJGxhdGVzdCA9ICR0aGlzLT5n
ZXRfcmV2aXNpb24oInNldGlkPSciLmRvU2xhc2goJHNldGlkKS4iJyBPUkRFUiBCWSBpZCBk
ZXNjIik7DQoNCgkJCWlmICgkbGF0ZXN0ICYmICRkYXRhID09PSAkbGF0ZXN0WydkYXRhJ10p
DQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoNCgkJCWlmICgNCgkJCQlzYWZlX3Vw
ZGF0ZSgNCgkJCQkJJ3JhaF9wb3N0X3ZlcnNpb25zX3NldHMnLA0KCQkJCQknbW9kaWZpZWQ9
bm93KCksIGNoYW5nZXM9Y2hhbmdlcysxICcuKCR0aXRsZSA/ICcsJy4kc3FsWyd0aXRsZSdd
IDogJycgKSwNCgkJCQkJImlkPSciLmRvU2xhc2goJHNldGlkKS4iJyINCgkJCQkpID09IGZh
bHNlDQoJCQkpDQoJCQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoNCgkJaWYg
KCR0aGlzLT5jb21wcmVzcykNCgkJew0KCQkJJGRhdGEgPSBiYXNlNjRfZW5jb2RlKGd6ZW5j
b2RlKHNlcmlhbGl6ZSgkZGF0YSkpKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkYXRhID0g
YmFzZTY0X2VuY29kZShzZXJpYWxpemUoJGRhdGEpKTsNCgkJfQ0KDQoJCWlmICghJHRoaXMt
PnN0YXRpY19kaXIpDQoJCXsNCgkJCSRzcWxbJ2RhdGEnXSA9ICJkYXRhPSciLmRvU2xhc2go
JGRhdGEpLiInIjsNCgkJfQ0KDQoJCSRzcWxbJ3NldGlkJ10gPSAic2V0aWQ9JyIuZG9TbGFz
aCgkc2V0aWQpLiInIjsNCg0KCQkkaWQgPSBzYWZlX2luc2VydCgNCgkJCSdyYWhfcG9zdF92
ZXJzaW9ucycsDQoJCQlpbXBsb2RlKCcsJywgJHNxbCkNCgkJKTsNCgkNCgkJaWYgKCRpZCA9
PT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkdGhpcy0+
c3RhdGljX2RpcikNCgkJew0KCQkJaWYgKA0KCQkJCWZpbGVfcHV0X2NvbnRlbnRzKA0KCQkJ
CQkkdGhpcy0+c3RhdGljX2Rpci4nLycuJHNldGlkLidfcicuJGlkLicucGhwJywNCgkJCQkJ
JHRoaXMtPnN0YXRpY19oZWFkZXIuJGRhdGENCgkJCQkpID09PSBmYWxzZQ0KCQkJKQ0KCQkJ
ew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KDQoJCWNhbGxiYWNrX2V2ZW50KCdy
YWhfcG9zdF92ZXJzaW9ucy5yZXZpc2lvbl9jcmVhdGVkJywgJycsIDAsICRkYXRhKTsNCgkJ
cmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJICogRXhwb3J0cyByZXZpc2lvbiBkYXRhIGZy
b20gdGhlIGRhdGFiYXNlIHRvIHN0YXRpYyBmaWxlcy4NCgkgKg0KCSAqIEByZXR1cm4gYm9v
bHxudWxsIEZBTFNFIG9uIGVycm9yLCBUUlVFIG9uIHN1Y2Nlc3MuIE5VTEwgd2hlbiBleHBv
cnQgaXNuJ3QgcmVxdWlyZWQuDQoJICovDQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ29fc3Rh
dGljKCkNCgl7DQoJCWdsb2JhbCAkcHJlZnM7DQoNCgkJaWYgKCR0aGlzLT5zdGF0aWNfZGly
ICE9PSBmYWxzZSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJJHRoaXMtPnN0YXRpY19o
ZWFkZXIgPSANCgkJCSc8P3BocCBpZighZGVmaW5lZCgicmFoX3Bvc3RfdmVyc2lvbnNfc3Rh
dGljX2RpciIpKSBkaWUoInJhaF9wb3N0X3ZlcnNpb25zX3N0YXRpY19kaXIgdW5kZWZpbmVk
Iik7ID8+JzsNCg0KCQkkZGlyID0gdHJpbShydHJpbSgkcHJlZnNbJ3JhaF9wb3N0X3ZlcnNp
b25zX3JlcG9zaXRvcnlfcGF0aCddLCAnL1xcJykpOw0KDQoJCWlmICgkZGlyICYmIHN0cnBv
cygkZGlyLCAnLi8nKSA9PT0gMCkNCgkJew0KCQkJJGRpciA9IHR4cGF0aC5EUy5zdWJzdHIo
JGRpciwgMik7DQoJCX0NCg0KCQlpZiAoJGRpciAmJiBmaWxlX2V4aXN0cygkZGlyKSAmJiBp
c19kaXIoJGRpcikgJiYgaXNfcmVhZGFibGUoJGRpcikgJiYgaXNfd3JpdGFibGUoJGRpcikp
DQoJCXsNCgkJCSR0aGlzLT5zdGF0aWNfZGlyID0gJGRpcjsNCgkJfQ0KDQoJCWlmICghJHRo
aXMtPnN0YXRpY19kaXIgJiYgaXNzZXQoJHByZWZzWydyYWhfcG9zdF92ZXJzaW9uc19zdGF0
aWMnXSkpDQoJCXsNCgkJCSR0aGlzLT5ub3dyaXRlID0gdHJ1ZTsNCgkJCXJldHVybjsNCgkJ
fQ0KDQoJCWlmICghJHRoaXMtPnN0YXRpY19kaXIgfHwgaXNzZXQoJHByZWZzWydyYWhfcG9z
dF92ZXJzaW9uc19zdGF0aWMnXSkpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCSRyID0g
QGdldFRoaW5ncygnZGVzY3JpYmUgJy5zYWZlX3BmeCgncmFoX3Bvc3RfdmVyc2lvbnMnKSk7
DQoNCgkJaWYgKCEkciB8fCAhaXNfYXJyYXkoJHIpIHx8ICFpbl9hcnJheSgnZGF0YScsICRy
KSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJJHJzID0gc2FmZV9yb3dzKA0KCQkJJ2Rh
dGEsIHNldGlkLCBpZCcsDQoJCQkncmFoX3Bvc3RfdmVyc2lvbnMnLA0KCQkJJzE9MScNCgkJ
KTsNCg0KCQlmb3JlYWNoICgkcnMgYXMgJGEpDQoJCXsNCgkJCSRmaWxlID0gJHRoaXMtPnN0
YXRpY19kaXIgLiBEUyAuICRhWydzZXRpZCddIC4gJ19yJyAuICRhWydpZCddIC4gJy5waHAn
Ow0KDQoJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlKSAmJiBmaWxlX3B1dF9jb250ZW50cygk
ZmlsZSwgJHRoaXMtPnN0YXRpY19oZWFkZXIgLiAkYVsnZGF0YSddKSA9PT0gZmFsc2UpDQoJ
CQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKHNhZmVfYWx0ZXIo
J3JhaF9wb3N0X3ZlcnNpb25zJywgJ0RST1AgZGF0YScpID09PSBmYWxzZSkNCgkJew0KCQkJ
cmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJc2V0X3ByZWYoJ3JhaF9wb3N0X3ZlcnNpb25zX3N0
YXRpYycsIDEsICdyYWhfcG9zdHZlcicsIDIsICcnLCAwKTsNCgkJJHByZWZzWydyYWhfcG9z
dF92ZXJzaW9uc19zdGF0aWMnXSA9IDE7DQoNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoq
DQoJICogTGlzdHMgYWxsIGl0ZW1zLg0KCSAqDQoJICogQHBhcmFtIHN0cmluZ3xhcnJheSAk
bWVzc2FnZSBUaGUgYWN0aXZpdHkgbWVzc2FnZQ0KCSAqLw0KDQoJcHVibGljIGZ1bmN0aW9u
IGJyb3dzZXIoJG1lc3NhZ2UgPSAnJykNCgl7CQ0KCQlnbG9iYWwgJGV2ZW50Ow0KDQoJCWV4
dHJhY3QoZ3BzYShhcnJheSgNCgkJCSdmaWx0ZXJfZXZlbnQnLA0KCQkJJ3NvcnQnLA0KCQkJ
J2RpcicsDQoJCSkpKTsNCg0KCQkkbWV0aG9kcyA9IGFycmF5KCk7DQoJCSRjb2x1bW5zID0g
YXJyYXkoJ2lkJywgJ2V2ZW50JywgJ3RpdGxlJywgJ21vZGlmaWVkJywgJ2NoYW5nZXMnKTsN
Cg0KCQlpZiAoaGFzX3ByaXZzKCdyYWhfcG9zdF92ZXJzaW9uc19kZWxldGVfaXRlbScpKQ0K
CQl7DQoJCQkkbWV0aG9kc1snZGVsZXRlX2l0ZW0nXSA9IGdUeHQoJ2RlbGV0ZScpOw0KCQl9
DQoNCgkJaWYgKCRkaXIgIT09ICdkZXNjJyAmJiAkZGlyICE9PSAnYXNjJykNCgkJew0KCQkJ
JGRpciA9IGdldF9wcmVmKCRldmVudC4nX2Jyb3dzZXJfZGlyJywgJ2Rlc2MnKTsNCgkJfQ0K
DQoJCWlmICghaW5fYXJyYXkoKHN0cmluZykgJHNvcnQsICRjb2x1bW5zKSkNCgkJew0KCQkJ
JHNvcnQgPSBnZXRfcHJlZigkZXZlbnQuJ19icm93c2VyX2NvbHVtbicsICdtb2RpZmllZCcp
Ow0KCQl9DQoNCgkJc2V0X3ByZWYoJGV2ZW50LidfYnJvd3Nlcl9jb2x1bW4nLCAkc29ydCwg
JGV2ZW50LCAyLCAnJywgMCwgUFJFRl9QUklWQVRFKTsNCgkJc2V0X3ByZWYoJGV2ZW50Lidf
YnJvd3Nlcl9kaXInLCAkZGlyLCAkZXZlbnQsIDIsICcnLCAwLCBQUkVGX1BSSVZBVEUpOw0K
DQoJCSRzcWwgPSBhcnJheSgnMT0xJyk7DQoNCgkJaWYgKCRmaWx0ZXJfZXZlbnQpDQoJCXsN
CgkJCSRzcWxbXSA9ICJldmVudD0nIi5kb1NsYXNoKCRmaWx0ZXJfZXZlbnQpLiInIjsNCgkJ
fQ0KDQoJCSR0b3RhbCA9IHNhZmVfY291bnQoDQoJCQkncmFoX3Bvc3RfdmVyc2lvbnNfc2V0
cycsDQoJCQlpbXBsb2RlKCcgYW5kICcsICRzcWwpDQoJCSk7DQoNCgkJJGxpbWl0ID0gMTU7
DQoNCgkJbGlzdCgkcGFnZSwgJG9mZnNldCwgJG51bV9wYWdlcykgPSBwYWdlcigkdG90YWws
ICRsaW1pdCwgZ3BzKCdwYWdlJykpOw0KDQoJCWlmICgkbWV0aG9kcykNCgkJew0KCQkJJGNv
bHVtbltdID0gaENlbGwoZklucHV0KCdjaGVja2JveCcsICdzZWxlY3RfYWxsJywgMSwgJycs
ICcnLCAnJywgJycsICcnLCAnc2VsZWN0X2FsbCcpLCAnJywgJyB0aXRsZT0iJy5nVHh0KCd0
b2dnbGVfYWxsX3NlbGVjdGVkJykuJyIgY2xhc3M9Im11bHRpLWVkaXQiJyk7DQoJCX0NCg0K
CQlmb3JlYWNoICgkY29sdW1ucyBhcyAkbmFtZSkNCgkJew0KCQkJJGNvbHVtbltdID0gY29s
dW1uX2hlYWQoJGV2ZW50LidfJy4kbmFtZSwgJG5hbWUsICRldmVudCwgdHJ1ZSwgJG5hbWUg
PT09ICRzb3J0ICYmICRkaXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYycsICcnLCAnJywg
KCRuYW1lID09PSAkc29ydCA/ICRkaXIgOiAnJykpOw0KCQl9DQoNCgkJaWYgKGhhc19wcml2
cygncmFoX3Bvc3RfdmVyc2lvbnNfcHJlZmVyZW5jZXMnKSkNCgkJew0KCQkJJG91dFtdID0g
JzxwIGNsYXNzPSJ0eHAtYnV0dG9ucyI+PGEgaHJlZj0iP2V2ZW50PXByZWZzJmFtcDtzdGVw
PWFkdmFuY2VkX3ByZWZzI3ByZWZzLXJhaF9wb3N0X3ZlcnNpb25zX2d6aXAiPicuZ1R4dCgn
cmFoX3Bvc3RfdmVyc2lvbnNfcHJlZmVyZW5jZXMnKS4nPC9hPjwvcD4nOw0KCQl9DQoNCgkJ
JG91dFtdID0NCgkJCSc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaW5kZXgucGhwIiBj
bGFzcz0ibXVsdGlfZWRpdF9mb3JtIj4nLg0KCQkJZUlucHV0KCRldmVudCkuDQoJCQl0SW5w
dXQoKS4NCgkJCSc8ZGl2IGNsYXNzPSJ0eHAtbGlzdHRhYmxlcyI+Jy4NCgkJCSc8dGFibGUg
Y2xhc3M9InR4cC1saXN0Ij4nLg0KCQkJJzx0aGVhZD4nLnRyKGltcGxvZGUoJycsICRjb2x1
bW4pKS4nPC90aGVhZD4nLg0KCQkJJzx0Ym9keT4nOw0KDQoJCSRycyA9IHNhZmVfcm93cygN
CgkJCSdpZCwgZXZlbnQsIHN0ZXAsIGdyaWQsIHRpdGxlLCBtb2RpZmllZCwgY2hhbmdlcycs
DQoJCQkncmFoX3Bvc3RfdmVyc2lvbnNfc2V0cycsDQoJCQlpbXBsb2RlKCcgYW5kICcsICRz
cWwpIC4gIiBvcmRlciBieSB7JHNvcnR9IHskZGlyfSBsaW1pdCB7JG9mZnNldH0sIHskbGlt
aXR9Ig0KCQkpOw0KDQoJCSRldmVudHMgPSAkdGhpcy0+cG9wX2V2ZW50cygpOw0KDQoJCWZv
cmVhY2ggKCRycyBhcyAkYSkNCgkJewkJDQoJCQlpZiAodHJpbSgkYVsndGl0bGUnXSkgPT09
ICcnKQ0KCQkJew0KCQkJCSRhWyd0aXRsZSddID0gZ1R4dCgndW50aXRsZWQnKTsNCgkJCX0N
CgkNCgkJCWlmIChpc3NldCgkZXZlbnRzWyRhWydldmVudCddXSkpDQoJCQl7DQoJCQkJJGFb
J2V2ZW50J10gPSAkZXZlbnRzWyRhWydldmVudCddXTsNCgkJCX0NCg0KCQkJJGNvbHVtbiA9
IGFycmF5KCk7DQoNCgkJCWlmICgkbWV0aG9kcykNCgkJCXsNCgkJCQkkY29sdW1uW10gPSB0
ZChmSW5wdXQoJ2NoZWNrYm94JywgJ3NlbGVjdGVkW10nLCAkYVsnaWQnXSksICcnLCAnbXVs
dGktZWRpdCcpOw0KCQkJfQ0KDQoJCQkkY29sdW1uW10gPSB0ZCgkYVsnaWQnXSk7DQoJCQkk
Y29sdW1uW10gPSB0ZCh0eHBzcGVjaWFsY2hhcnMoJGFbJ2V2ZW50J10pKTsNCgkJCSRjb2x1
bW5bXSA9IHRkKCc8YSBocmVmPSI/ZXZlbnQ9Jy4kZXZlbnQuJyZhbXA7c3RlcD1jaGFuZ2Vz
JmFtcDtpdGVtPScuJGFbJ2lkJ10uJyI+Jy50eHBzcGVjaWFsY2hhcnMoJGFbJ3RpdGxlJ10p
Lic8L2E+Jyk7DQoJCQkkY29sdW1uW10gPSB0ZChzYWZlX3N0cmZ0aW1lKGdUeHQoJ3JhaF9w
b3N0X3ZlcnNpb25zX2RhdGVfZm9ybWF0JyksIHN0cnRvdGltZSgkYVsnbW9kaWZpZWQnXSkp
KTsNCgkJCSRjb2x1bW5bXSA9IHRkKCRhWydjaGFuZ2VzJ10pOw0KDQoJCQkkb3V0W10gPSB0
cihpbXBsb2RlKCcnLCAkY29sdW1uKSk7DQoJCX0NCg0KCQlpZiAoISRycykNCgkJew0KCQkJ
JG91dFtdID0gdHIoJzx0ZCBjb2xzcGFuPSInLmNvdW50KCRjb2x1bW4pLiciPicuZ1R4dCgn
cmFoX3Bvc3RfdmVyc2lvbnNfbm9fY2hhbmdlcycpLic8L3RkPicpOw0KCQl9DQoNCgkJJG91
dFtdID0gDQoJCQknPC90Ym9keT4nLm4uDQoJCQknPC90YWJsZT4nLm4uDQoJCQknPC9kaXY+
Jy5uOw0KDQoJCWlmICgkbWV0aG9kcykNCgkJew0KCQkJJG91dFtdID0gbXVsdGlfZWRpdCgk
bWV0aG9kcywgJGV2ZW50LCAnbXVsdGlfZWRpdCcpOw0KCQl9DQoNCgkJJG91dFtdID0gDQoJ
CQknPC9mb3JtPicuDQoJCQkkdGhpcy0+cGFnZXMoJ2Jyb3dzZXInLCAkdG90YWwsICRsaW1p
dCk7DQoNCgkJJHRoaXMtPnBhbmUoJG91dCwgJG1lc3NhZ2UpOw0KCX0NCg0KCS8qKg0KCSAq
IE91dHB1dHMgYSBwYW5lbC4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICAgICAgJGNvbnRl
bnQgUGFuZSdzIEhUTUwgbWFya3VwDQoJICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbWVzc2Fn
ZSBUaGUgYWN0aXZpdHkgbWVzc2FnZQ0KCSAqLw0KDQoJcHJpdmF0ZSBmdW5jdGlvbiBwYW5l
KCRjb250ZW50LCAkbWVzc2FnZSA9ICcnKQ0KCXsJDQoJCWdsb2JhbCAkZXZlbnQ7DQoNCgkJ
cGFnZXRvcChnVHh0KCdyYWhfcG9zdF92ZXJzaW9ucycpLCAkbWVzc2FnZSA/ICRtZXNzYWdl
IDogJycpOw0KDQoJCWlmIChpc19hcnJheSgkY29udGVudCkpDQoJCXsNCgkJCSRjb250ZW50
ID0gaW1wbG9kZShuLCAkY29udGVudCk7DQoJCX0NCg0KCQllY2hvICc8aDEgY2xhc3M9InR4
cC1oZWFkaW5nIj4nLmdUeHQoJ3JhaF9wb3N0X3ZlcnNpb25zJykuJzwvaDE+Jy5uOw0KDQoJ
CWlmICgkdGhpcy0+bm93cml0ZSA9PSB0cnVlKQ0KCQl7DQoJCQllY2hvICc8cCBjbGFzcz0i
YWxlcnQtYmxvY2sgd2FybmluZyI+Jy5nVHh0KCdyYWhfcG9zdF92ZXJzaW9uc19yZXBvc2l0
b3J5X2RhdGFfbWlzc2luZycpLic8L3A+JzsNCgkJfQ0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9
InR4cC1jb250YWluZXIiPicubi4NCgkJCSRjb250ZW50Lm4uDQoJCQknPC9kaXY+Jy5uOw0K
CX0NCg0KCS8qKg0KCSAqIExpc3RzIGNoYW5nZXMgY29tbWl0dGVkIHRvIGFuIGl0ZW0uDQoJ
ICoNCgkgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRtZXNzYWdlIFRoZSBhY3Rpdml0eSBtZXNz
YWdlDQoJICovDQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gY2hhbmdlcygkbWVzc2FnZSA9ICcn
KQ0KCXsNCgkJZ2xvYmFsICRldmVudDsNCg0KCQlleHRyYWN0KGdwc2EoYXJyYXkoDQoJCQkn
aXRlbScsDQoJCQknc29ydCcsDQoJCQknZGlyJywNCgkJKSkpOw0KDQoJCWlmICgNCgkJCSFz
YWZlX3JvdygNCgkJCQknaWQnLA0KCQkJCSdyYWhfcG9zdF92ZXJzaW9uc19zZXRzJywNCgkJ
CQkiaWQ9JyIuZG9TbGFzaCgkaXRlbSkuIicgTElNSVQgMCwgMSINCgkJCSkNCgkJKQ0KCQl7
DQoJCQkkdGhpcy0+YnJvd3NlcihhcnJheShnVHh0KCdyYWhfcG9zdF92ZXJzaW9uc191bmtu
b3duX3NlbGVjdGlvbicpLCBFX1dBUk5JTkcpKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCSRt
ZXRob2RzID0gYXJyYXkoKTsNCgkJJGNvbHVtbnMgPSBhcnJheSgnaWQnLCAndGl0bGUnLCAn
cG9zdGVkJywgJ3N0ZXAnLCAnYXV0aG9yJyk7DQoNCgkJaWYgKGhhc19wcml2cygncmFoX3Bv
c3RfdmVyc2lvbnNfZGlmZicpKQ0KCQl7DQoJCQkkbWV0aG9kc1snZGlmZiddID0gZ1R4dCgn
cmFoX3Bvc3RfdmVyc2lvbnNfZGlmZicpOw0KCQl9DQoNCgkJaWYgKGhhc19wcml2cygncmFo
X3Bvc3RfdmVyc2lvbnNfZGVsZXRlX3JldmlzaW9uJykpDQoJCXsNCgkJCSRtZXRob2RzWydk
ZWxldGVfcmV2aXNpb24nXSA9IGdUeHQoJ2RlbGV0ZScpOw0KCQl9DQoJCQ0KCQlpZiAoJGRp
ciAhPT0gJ2Rlc2MnICYmICRkaXIgIT09ICdhc2MnKQ0KCQl7DQoJCQkkZGlyID0gZ2V0X3By
ZWYoJGV2ZW50LidfY2hhbmdlc19kaXInLCAnZGVzYycpOw0KCQl9DQoJCQ0KCQlpZiAoISRz
b3J0KQ0KCQl7DQoJCQkkc29ydCA9IGdldF9wcmVmKCRldmVudC4nX2NoYW5nZXNfY29sdW1u
JywgJ3Bvc3RlZCcpOw0KCQl9DQoNCgkJaWYgKCFpbl9hcnJheSgoc3RyaW5nKSAkc29ydCwg
JGNvbHVtbnMpKQ0KCQl7DQoJCQkkc29ydCA9ICdwb3N0ZWQnOw0KCQl9DQoNCgkJc2V0X3By
ZWYoJGV2ZW50LidfY2hhbmdlc19jb2x1bW4nLCAkc29ydCwgJGV2ZW50LCAyLCAnJywgMCwg
UFJFRl9QUklWQVRFKTsNCgkJc2V0X3ByZWYoJGV2ZW50LidfY2hhbmdlc19kaXInLCAkZGly
LCAkZXZlbnQsIDIsICcnLCAwLCBQUkVGX1BSSVZBVEUpOw0KDQoJCSR0b3RhbCA9IHNhZmVf
Y291bnQoDQoJCQkncmFoX3Bvc3RfdmVyc2lvbnMnLA0KCQkJInNldGlkPSciLmRvU2xhc2go
JGl0ZW0pLiInIg0KCQkpOw0KDQoJCSRsaW1pdCA9IDE1Ow0KDQoJCWxpc3QoJHBhZ2UsICRv
ZmZzZXQsICRudW1fcGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQsIGdwcygncGFnZScp
KTsNCg0KCQlpZiAoJG1ldGhvZHMpDQoJCXsNCgkJCSRjb2x1bW5bXSA9IGhDZWxsKGZJbnB1
dCgnY2hlY2tib3gnLCAnc2VsZWN0X2FsbCcsIDEsICcnLCAnJywgJycsICcnLCAnJywgJ3Nl
bGVjdF9hbGwnKSwgJycsICcgdGl0bGU9IicuZ1R4dCgndG9nZ2xlX2FsbF9zZWxlY3RlZCcp
LiciIGNsYXNzPSJtdWx0aS1lZGl0IicpOw0KCQl9DQoNCgkJZm9yZWFjaCAoJGNvbHVtbnMg
YXMgJG5hbWUpDQoJCXsNCgkJCSRjb2x1bW5bXSA9IGhDZWxsKCc8YSBocmVmPSI/ZXZlbnQ9
Jy4kZXZlbnQuYS4nc3RlcD1jaGFuZ2VzJy5hLidpdGVtPScudXJsZW5jb2RlKGdwcygnaXRl
bScpKS5hLidwYWdlPScuJHBhZ2UuYS4nc29ydD0nLiRuYW1lLmEuJ2Rpcj0nLigkbmFtZSA9
PT0gJHNvcnQgJiYgJGRpciA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJykuJyI+Jy5nVHh0
KCRldmVudC4nXycuJG5hbWUpLic8L2E+JywgJycsICAoJG5hbWUgPT09ICRzb3J0ID8gJyBj
bGFzcz0iJy4kZGlyLiciJyA6ICcnKSk7DQoJCX0NCg0KCQkkb3V0W10gPSAnPHAgY2xhc3M9
InR4cC1idXR0b25zIj4nOw0KCQkkb3V0W10gPSAnPGEgaHJlZj0iP2V2ZW50PScuJGV2ZW50
LiciPicuZ1R4dCgncmFoX3Bvc3RfdmVyc2lvbnNfbWFpbicpLic8L2E+JzsNCg0KCQlpZiAo
aGFzX3ByaXZzKCdyYWhfcG9zdF92ZXJzaW9uc19wcmVmZXJlbmNlcycpKQ0KCQl7DQoJCQkk
b3V0W10gPSAnPGEgaHJlZj0iP2V2ZW50PXByZWZzJmFtcDtzdGVwPWFkdmFuY2VkX3ByZWZz
I3ByZWZzLXJhaF9wb3N0X3ZlcnNpb25zX2d6aXAiPicuZ1R4dCgncmFoX3Bvc3RfdmVyc2lv
bnNfcHJlZmVyZW5jZXMnKS4nPC9hPicubjsNCgkJfQ0KDQoJCSRvdXRbXSA9ICc8L3A+JzsN
Cg0KCQkkb3V0W10gPSANCgkJCSc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaW5kZXgu
cGhwIiBjbGFzcz0ibXVsdGlfZWRpdF9mb3JtIj4nLm4uDQoJCQllSW5wdXQoJGV2ZW50KS5u
Lg0KCQkJaElucHV0KCdpdGVtJywgJGl0ZW0pLm4uDQoJCQl0SW5wdXQoKS5uLg0KCQkJJzxk
aXYgY2xhc3M9InR4cC1saXN0dGFibGVzIj4nLm4uDQoJCQknPHRhYmxlIGNsYXNzPSJ0eHAt
bGlzdCI+Jy5uLg0KCQkJJzx0aGVhZD4nLnRyKGltcGxvZGUoJycsICRjb2x1bW4pKS4nPC90
aGVhZD4nLg0KCQkJJzx0Ym9keT4nLm47DQoNCgkJJHJzID0gc2FmZV9yb3dzKA0KCQkJJ2lk
LCB0aXRsZSwgcG9zdGVkLCBhdXRob3IsIHN0ZXAnLA0KCQkJJ3JhaF9wb3N0X3ZlcnNpb25z
JywNCgkJCSJzZXRpZD0nIi5kb1NsYXNoKCRpdGVtKS4iJyBPUkRFUiBCWSB7JHNvcnR9IHsk
ZGlyfSBMSU1JVCB7JG9mZnNldH0sIHskbGltaXR9Ig0KCQkpOw0KDQoJCWZvcmVhY2ggKCRy
cyBhcyAkYSkNCgkJew0KCQkJJGNvbHVtbiA9IGFycmF5KCk7DQoJCQkNCgkJCWlmICgkbWV0
aG9kcykNCgkJCXsNCgkJCQkkY29sdW1uW10gPSB0ZChmSW5wdXQoJ2NoZWNrYm94JywgJ3Nl
bGVjdGVkW10nLCAkYVsnaWQnXSksICcnLCAnbXVsdGktZWRpdCcpOw0KCQkJfQ0KDQoJCQkk
Y29sdW1uW10gPSB0ZCgkYVsnaWQnXSk7DQoJCQkkY29sdW1uW10gPSB0ZCgnPGEgaHJlZj0i
P2V2ZW50PScuJGV2ZW50LicmYW1wO3N0ZXA9ZGlmZiZhbXA7aXRlbT0nLiRpdGVtLicmYW1w
O3I9Jy4kYVsnaWQnXS4nIj4nLnR4cHNwZWNpYWxjaGFycygkYVsndGl0bGUnXSkuJzwvYT4n
KTsNCgkJCSRjb2x1bW5bXSA9IHRkKHNhZmVfc3RyZnRpbWUoZ1R4dCgncmFoX3Bvc3RfdmVy
c2lvbnNfZGF0ZV9mb3JtYXQnKSwgc3RydG90aW1lKCRhWydwb3N0ZWQnXSkpKTsNCgkJCSRj
b2x1bW5bXSA9IHRkKHR4cHNwZWNpYWxjaGFycygkYVsnc3RlcCddKSk7DQoJCQkkY29sdW1u
W10gPSB0ZCh0eHBzcGVjaWFsY2hhcnMoZ2V0X2F1dGhvcl9uYW1lKCRhWydhdXRob3InXSkp
KTsNCg0KCQkJJG91dFtdID0gdHIoaW1wbG9kZSgnJywgJGNvbHVtbikpOw0KCQl9DQoNCgkJ
aWYgKCEkcnMpDQoJCXsNCgkJCSRvdXRbXSA9DQoJCQkJJzx0cj4nLm4uDQoJCQkJJwk8dGQg
Y29sc3Bhbj0iJy5jb3VudCgkY29sdW1uKS4nIj4nLmdUeHQoJ3JhaF9wb3N0X3ZlcnNpb25z
X25vX2NoYW5nZXMnKS4nPC90ZD4nLm4uDQoJCQkJJzwvdHI+Jy5uOw0KCQl9DQoNCgkJJG91
dFtdID0NCgkJCSc8L3Rib2R5Picubi4NCgkJCSc8L3RhYmxlPicubi4NCgkJCSc8L2Rpdj4n
Lm47DQoNCgkJaWYgKCRtZXRob2RzKQ0KCQl7DQoJCQkkb3V0W10gPSBtdWx0aV9lZGl0KCRt
ZXRob2RzLCAkZXZlbnQsICdtdWx0aV9lZGl0Jyk7DQoJCX0NCg0KCQkkb3V0W10gPQ0KCQkJ
JzwvZm9ybT4nLg0KCQkJJHRoaXMtPnBhZ2VzKCdjaGFuZ2VzJywgJHRvdGFsLCAkbGltaXQp
Ow0KDQoJCSR0aGlzLT5wYW5lKCRvdXQsICRtZXNzYWdlKTsNCgl9DQoNCgkvKioNCgkgKiBT
aG93cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byByZXZpc2lvbnMuDQoJICovDQoNCglwdWJs
aWMgZnVuY3Rpb24gZGlmZigpDQoJewkNCgkJZ2xvYmFsICRldmVudDsNCg0KCQlleHRyYWN0
KGdwc2EoYXJyYXkoDQoJCQkncicsDQoJCQknaXRlbScsDQoJCQkncGxhaW4nLA0KCQkpKSk7
DQoNCgkJJG5ldyA9ICRvbGQgPSBOVUxMOw0KDQoJCWlmICghJHIgfHwgIWlzX3N0cmluZygk
cikpDQoJCXsNCgkJCSR0aGlzLT5jaGFuZ2VzKGFycmF5KGdUeHQoJ3JhaF9wb3N0X3ZlcnNp
b25zX3NlbGVjdF9zb21ldGhpbmcnKSwgRV9XQVJOSU5HKSk7DQoJCQlyZXR1cm47DQoJCX0N
Cg0KCQkkciA9IGV4cGxvZGUoJy0nLCAkcik7DQoNCgkJaWYgKGNvdW50KCRyKSA9PT0gMSAm
JiAoJGlkID0gKGludCkgJHJbMF0pKQ0KCQl7DQoJCQkkbmV3ID0gJHRoaXMtPmdldF9yZXZp
c2lvbigiaWQ9eyRpZH0gYW5kIHNldGlkPSciLmRvU2xhc2goJGl0ZW0pLiInIik7DQoJCQkk
b2xkID0gJHRoaXMtPmdldF9yZXZpc2lvbigiaWQgPCB7JGlkfSBhbmQgc2V0aWQ9JyIuZG9T
bGFzaCgkaXRlbSkuIicgT1JERVIgQlkgaWQgZGVzYyBMSU1JVCAxIik7DQoJCX0NCgkJZWxz
ZQ0KCQl7DQoJCQkkb2xkID0gJHRoaXMtPmdldF9yZXZpc2lvbigiaWQ9JyIuZG9TbGFzaCgk
clswXSkuIicgYW5kIHNldGlkPSciLmRvU2xhc2goJGl0ZW0pLiInIik7DQoJCQkkbmV3ID0g
JHRoaXMtPmdldF9yZXZpc2lvbigiaWQ9JyIuZG9TbGFzaCgkclsxXSkuIicgYW5kIHNldGlk
PSciLmRvU2xhc2goJGl0ZW0pLiInIik7DQoJCX0NCg0KCQlpZiAoISRvbGQgJiYgISRuZXcp
DQoJCXsNCgkJCSR0aGlzLT5jaGFuZ2VzKGFycmF5KGdUeHQoJ3JhaF9wb3N0X3ZlcnNpb25z
X3Vua25vd25fc2VsZWN0aW9uJyksIEVfV0FSTklORykpOw0KCQkJcmV0dXJuOw0KCQl9DQoN
CgkJJG91dFtdID0gJzxwPicuDQoNCgkJCWdUeHQoDQoJCQkJJ3JhaF9wb3N0X3ZlcnNpb25z
X3ZpZXdfb3RoZXJfcmV2aXNpb25zJywNCgkJCQlhcnJheSgNCgkJCQkJJ3twcmV2aW91c30n
ID0+ICgkb2xkID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRldmVudC4nJmFtcDtzdGVwPWRpZmYm
YW1wO2l0ZW09Jy4kaXRlbS4nJmFtcDtyPScuJG9sZFsnaWQnXS4nIj5yJy4kb2xkWydpZCdd
Lic8L2E+JyA6ICctJyksDQoJCQkJCSd7Y3VycmVudH0nID0+ICc8YSBocmVmPSI/ZXZlbnQ9
Jy4kZXZlbnQuJyZhbXA7c3RlcD1kaWZmJmFtcDtpdGVtPScuJGl0ZW0uJyZhbXA7cj0nLiRu
ZXdbJ2lkJ10uJyI+cicuJG5ld1snaWQnXS4nPC9hPicNCgkJCQkpLA0KCQkJCWZhbHNlDQoJ
CQkpLiAnICcgLg0KDQoJCQlnVHh0KA0KCQkJCSdyYWhfcG9zdF92ZXJzaW9uc19yZXZpc2lv
bl9pdGVtX25hbWUnLA0KCQkJCWFycmF5KA0KCQkJCQkne25hbWV9JyA9PiAnPGEgaHJlZj0i
P2V2ZW50PScuJGV2ZW50LicmYW1wO3N0ZXA9Y2hhbmdlcyZhbXA7aXRlbT0nLiRuZXdbJ3Nl
dGlkJ10uJyI+Jy50eHBzcGVjaWFsY2hhcnMoJG5ld1sndGl0bGUnXSkuJzwvYT4nDQoJCQkJ
KSwNCgkJCQlmYWxzZQ0KCQkJKSAuICcgJyAuDQoNCgkJCWdUeHQoDQoJCQkJJ3JhaF9wb3N0
X3ZlcnNpb25zX3JldmlzaW9uX2NvbW1pdHRlZF9ieScsDQoJCQkJYXJyYXkoDQoJCQkJCSd7
YXV0aG9yfScgPT4gdHhwc3BlY2lhbGNoYXJzKGdldF9hdXRob3JfbmFtZSgkbmV3WydhdXRo
b3InXSkpLA0KCQkJCQkne3Bvc3RlZH0nID0+IHNhZmVfc3RyZnRpbWUoZ1R4dCgncmFoX3Bv
c3RfdmVyc2lvbnNfZGF0ZV9mb3JtYXQnKSwgc3RydG90aW1lKCRuZXdbJ3Bvc3RlZCddKSks
DQoJCQkJKSwNCgkJCQlmYWxzZQ0KCQkJKS4gJyAnIC4NCg0KCQkJZ1R4dCgNCgkJCQkncmFo
X3Bvc3RfdmVyc2lvbnNfcmV2aXNpb25fZnJvbV9wYW5lbCcsDQoJCQkJYXJyYXkoDQoJCQkJ
CSd7ZXZlbnR9JyA9PiAnPGEgaHJlZj0iP2V2ZW50PScuJGV2ZW50LicmYW1wO2ZpbHRlcl9l
dmVudD0nLnR4cHNwZWNpYWxjaGFycygkbmV3WydldmVudCddKS4nIj4nLnR4cHNwZWNpYWxj
aGFycygkbmV3WydldmVudCddKS4nPC9hPicsDQoJCQkJCSd7c3RlcH0nID0+IHR4cHNwZWNp
YWxjaGFycygkbmV3WydzdGVwJ10pDQoJCQkJKSwNCgkJCQlmYWxzZQ0KCQkJKS4gJyAnIC4N
Cg0KCQkJJzwvcD4nOw0KDQoJCWlmICgkb2xkICYmICRvbGRbJ2RhdGEnXSA9PT0gJG5ld1sn
ZGF0YSddKQ0KCQl7DQoJCQkkb3V0W10gPSAnPHAgY2xhc3M9Indhcm5pbmcgYWxlcnQtYmxv
Y2siPicuZ1R4dCgncmFoX3Bvc3RfdmVyc2lvbnNfcmV2aXNpb25zX21hdGNoJykuJzwvcD4n
Ow0KCQl9DQoNCgkJaWYgKCRwbGFpbikNCgkJew0KCQkJJG91dFtdID0gJzxoMj5yJy4kbmV3
WydpZCddLic8L2gyPic7DQoNCgkJCWZvcmVhY2ggKCRuZXdbJ2RhdGEnXSBhcyAka2V5ID0+
ICR2YWwpDQoJCQl7DQoJCQkJaWYgKCR2YWwgIT09ICcnKQ0KCQkJCXsNCgkJCQkJJG91dFtd
ID0gDQoJCQkJCQknPHA+Jy50eHBzcGVjaWFsY2hhcnMoJGtleSkuJzwvcD4nLm4uDQoJCQkJ
CQknPHByZT4nLnR4cHNwZWNpYWxjaGFycygkdmFsKS4nPC9wcmU+JzsNCgkJCQl9DQoJCQl9
DQoNCgkJCWlmICghZW1wdHkoJG9sZFsnZGF0YSddKSkNCgkJCXsNCgkJCQkkb3V0W10gPSAn
PGgyPnInLiRvbGRbJ2lkJ10uJzwvaDI+JzsNCg0KCQkJCWZvcmVhY2ggKCRvbGRbJ2RhdGEn
XSBhcyAka2V5ID0+ICR2YWwpDQoJCQkJew0KCQkJCQlpZiAoJHZhbCAhPT0gJycpDQoJCQkJ
CXsNCgkJCQkJCSRvdXRbXSA9IA0KCQkJCQkJCSc8cD4nLnR4cHNwZWNpYWxjaGFycygka2V5
KS4nPC9wPicubi4NCgkJCQkJCQknPHByZT4nLnR4cHNwZWNpYWxjaGFycygkdmFsKS4nPC9w
cmU+JzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkaWZm
ID0gbmV3IHJhaF9wb3N0X3ZlcnNpb25zX2RpZmYoKTsNCg0KCQkJZm9yZWFjaCAoJG5ld1sn
ZGF0YSddIGFzICRrZXkgPT4gJHZhbCkNCgkJCXsNCgkJCQlpZiAoIWlzc2V0KCRvbGRbJ2Rh
dGEnXVska2V5XSkpDQoJCQkJew0KCQkJCQkkb2xkWydkYXRhJ11bJGtleV0gPSAnJzsNCgkJ
CQl9DQoNCgkJCQlpZiAoJG9sZFsnZGF0YSddWyRrZXldID09PSAkdmFsKQ0KCQkJCXsNCgkJ
CQkJdW5zZXQoJG9sZFsnZGF0YSddWyRrZXldKTsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0K
DQoJCQkJJGRpZmYtPm9sZCA9ICRvbGRbJ2RhdGEnXVska2V5XTsNCgkJCQkkZGlmZi0+bmV3
ID0gJHZhbDsNCg0KCQkJCSRvdXRbXSA9IA0KCQkJCQknPHA+Jy50eHBzcGVjaWFsY2hhcnMo
JGtleSkuJzwvcD4nLm4uDQoJCQkJCSc8cHJlPicuJGRpZmYtPmh0bWwoKS4nPC9wcmU+JzsN
Cg0KCQkJCXVuc2V0KCRvbGRbJ2RhdGEnXVska2V5XSwgJG5ld1snZGF0YSddWyRrZXldKTsN
CgkJCX0NCg0KCQkJaWYgKCFlbXB0eSgkb2xkWydkYXRhJ10pICYmIGlzX2FycmF5KCRvbGRb
J2RhdGEnXSkpDQoJCQl7DQoJCQkJZm9yZWFjaCgkb2xkWydkYXRhJ10gYXMgJGtleSA9PiAk
dmFsKQ0KCQkJCXsNCgkJCQkJJG91dFtdID0gDQoJCQkJCQknPHA+Jy50eHBzcGVjaWFsY2hh
cnMoJGtleSkuJzwvcD4nLm4uDQoJCQkJCQknPHByZT4nLg0KCQkJCQkJCSc8c3BhbiBjbGFz
cz0iZXJyb3IiPicuDQoJCQkJCQkJCXR4cHNwZWNpYWxjaGFycygkdmFsKS4NCgkJCQkJCQkn
PC9zcGFuPicuDQoJCQkJCQknPC9wcmU+Jy5uOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCSR0
aGlzLT5wYW5lKCRvdXQpOw0KCX0NCg0KCS8qKg0KCSAqIFJldmVydHMgdG8gcmV2aXNpb24u
DQoJICovDQoNCglwdWJsaWMgZnVuY3Rpb24gcmV2ZXJ0KCkNCgl7CQ0KCQlleHRyYWN0KGdw
c2EoYXJyYXkoDQoJCQkncmV2ZXJ0JywNCgkJKSkpOw0KDQoJCSRkYXRhID0gJHRoaXMtPmdl
dF9yZXZpc2lvbigiaWQ9JyIuZG9TbGFzaCgkcmV2ZXJ0KS4iJyIpOw0KCQljYWxsYmFja19l
dmVudCgncmFoX3Bvc3RfdmVyc2lvbnMucmV2ZXJ0JywgJycsIDAsICRkYXRhKTsNCgkJJHRo
aXMtPmRpZmYoKTsNCgl9DQoNCgkvKioNCgkgKiBIYW5kbGVzIG11bHRpLWVkaXQgbWV0aG9k
cy4NCgkgKi8NCg0KCXB1YmxpYyBmdW5jdGlvbiBtdWx0aV9lZGl0KCkNCgl7CQ0KCQlleHRy
YWN0KHBzYShhcnJheSgNCgkJCSdzZWxlY3RlZCcsDQoJCQknZWRpdF9tZXRob2QnLA0KCQkp
KSk7DQoNCgkJcmVxdWlyZV9wcml2cygncmFoX3Bvc3RfdmVyc2lvbnNfJy4oKHN0cmluZykg
JGVkaXRfbWV0aG9kKSk7DQoNCgkJaWYgKCFpc19zdHJpbmcoJGVkaXRfbWV0aG9kKSB8fCBl
bXB0eSgkc2VsZWN0ZWQpIHx8ICFpc19hcnJheSgkc2VsZWN0ZWQpKQ0KCQl7DQoJCQkkdGhp
cy0+YnJvd3NlcihhcnJheShnVHh0KCdyYWhfcG9zdF92ZXJzaW9uc19zZWxlY3Rfc29tZXRo
aW5nJyksIEVfV0FSTklORykpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJJG1ldGhvZCA9ICdt
dWx0aV9vcHRpb25fJyAuICRlZGl0X21ldGhvZDsNCg0KCQlpZiAoIW1ldGhvZF9leGlzdHMo
JHRoaXMsICRtZXRob2QpKQ0KCQl7DQoJCQkkbWV0aG9kID0gJ2Jyb3dzZSc7DQoJCX0NCg0K
CQkkdGhpcy0+JG1ldGhvZCgpOw0KCX0NCg0KCS8qKg0KCSAqIFJlbW92ZXMgaXRlbXMgYW5k
IGFsbCB0aGVpciByZXZpc2lvbnMuDQoJICovDQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gbXVs
dGlfb3B0aW9uX2RlbGV0ZV9pdGVtKCkNCgl7CQ0KCQkkc2VsZWN0ZWQgPSBwcygnc2VsZWN0
ZWQnKTsNCgkJJGluID0gaW1wbG9kZSgnLCcsIHF1b3RlX2xpc3QoJHNlbGVjdGVkKSk7DQoN
CgkJaWYgKA0KCQkJc2FmZV9kZWxldGUoDQoJCQkJJ3JhaF9wb3N0X3ZlcnNpb25zJywNCgkJ
CQknc2V0aWQgaW4oJy4kaW4uJyknDQoJCQkpID09IGZhbHNlIHx8DQoJCQlzYWZlX2RlbGV0
ZSgNCgkJCQkncmFoX3Bvc3RfdmVyc2lvbnNfc2V0cycsDQoJCQkJJ2lkIGluKCcuJGluLicp
Jw0KCQkJKSA9PSBmYWxzZQ0KCQkpDQoJCXsNCgkJCSR0aGlzLT5icm93c2VyKGFycmF5KGdU
eHQoJ3JhaF9wb3N0X3ZlcnNpb25zX2Vycm9yX3JlbW92aW5nJyksIEVfRVJST1IpKTsNCgkJ
CXJldHVybjsNCgkJfQ0KDQoJCWlmICgkdGhpcy0+c3RhdGljX2RpcikNCgkJew0KCQkJJGRp
ciA9IHByZWdfcmVwbGFjZSgnLyhcKnxcP3xcWykvJywgJ1skMV0nLCAkdGhpcy0+c3RhdGlj
X2Rpcik7DQoNCgkJCWZvcmVhY2ggKCRzZWxlY3RlZCBhcyAkaWQpDQoJCQl7DQoJCQkJJGlk
ID0gKGludCkgJGlkOw0KDQoJCQkJZm9yZWFjaCAoZ2xvYigkZGlyLkRTLiRpZC4nX3IqLnBo
cCcpIGFzICRmaWxlKQ0KCQkJCXsNCgkJCQkJdW5saW5rKCRmaWxlKTsNCgkJCQl9DQoJCQl9
DQoJCX0NCg0KCQkkdGhpcy0+YnJvd3NlcihnVHh0KCdyYWhfcG9zdF92ZXJzaW9uc19yZW1v
dmVkJykpOw0KCX0NCg0KCS8qKg0KCSAqIFJlbW92ZXMgaW5kaXZpZHVhbCByZXZpc2lvbnMu
DQoJICovDQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gbXVsdGlfb3B0aW9uX2RlbGV0ZV9yZXZp
c2lvbigpDQoJewkNCgkJJHNlbGVjdGVkID0gcHMoJ3NlbGVjdGVkJyk7DQoJCSRpbiA9IGlt
cGxvZGUoJywnLCBxdW90ZV9saXN0KCRzZWxlY3RlZCkpOw0KCQkkc2V0aWQgPSAoaW50KSBw
cygnaXRlbScpOw0KDQoJCWlmICgNCgkJCXNhZmVfZGVsZXRlKA0KCQkJCSdyYWhfcG9zdF92
ZXJzaW9ucycsDQoJCQkJImlkIGluKCIuJGluLiIpIGFuZCBzZXRpZCA9ICciLmRvU2xhc2go
JHNldGlkKS4iJyINCgkJCSkgPT0gZmFsc2UNCgkJKQ0KCQl7DQoJCQkkdGhpcy0+Y2hhbmdl
cyhhcnJheShnVHh0KCdyYWhfcG9zdF92ZXJzaW9uc19lcnJvcl9yZW1vdmluZycpLCBFX0VS
Uk9SKSk7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoJHRoaXMtPnN0YXRpY19kaXIpDQoJ
CXsNCgkJCWZvcmVhY2ggKCRzZWxlY3RlZCBhcyAkaWQpDQoJCQl7DQoJCQkJJGlkID0gKGlu
dCkgJGlkOw0KCQkJCUB1bmxpbmsoJHRoaXMtPnN0YXRpY19kaXIuRFMuJHNldGlkLidfcicu
JGlkLicucGhwJyk7DQoJCQl9DQoJCX0NCg0KCQkkdGhpcy0+Y2hhbmdlcyhnVHh0KCdyYWhf
cG9zdF92ZXJzaW9uc19yZW1vdmVkJykpOw0KCX0NCg0KCS8qKg0KCSAqIFNob3dzIGRpZmZz
Lg0KCSAqLw0KDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG11bHRpX29wdGlvbl9kaWZmKCkNCgl7
DQoJCSRzZWxlY3RlZCA9IHBzKCdzZWxlY3RlZCcpOw0KDQoJCWlmIChjb3VudCgkc2VsZWN0
ZWQpICE9PSAyKQ0KCQl7DQoJCQkkdGhpcy0+Y2hhbmdlcyhhcnJheShnVHh0KCdyYWhfcG9z
dF92ZXJzaW9uc19zZWxlY3RfdHdvX2l0ZW1zJyksIEVfRVJST1IpKTsNCgkJCXJldHVybjsN
CgkJfQ0KDQoJCSRzZWxlY3RlZCA9IGRvQXJyYXkoJHNlbGVjdGVkLCAnaW50dmFsJyk7DQoJ
CXNvcnQoJHNlbGVjdGVkKTsNCgkJJF9HRVRbJ3InXSA9ICRzZWxlY3RlZFswXSAuICctJyAu
IGVuZCgkc2VsZWN0ZWQpOw0KCQkkdGhpcy0+ZGlmZigpOw0KCX0NCg0KCS8qKg0KCSAqIEdl
bmVyYXRlcyBwYWdpbmF0aW9uLg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgJHN0ZXAgIFRo
ZSBzdGVwDQoJICogQHBhcmFtICBpbnQgICAgJHRvdGFsIFRvdGFsIGl0ZW1zICANCgkgKiBA
cGFyYW0gIGludCAgICAkbGltaXQgVGhlIGxpbWl0DQoJICogQHJldHVybiBzdHJpbmcgSFRN
TA0KCSAqLw0KDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHBhZ2VzKCRzdGVwLCAkdG90YWwsICRs
aW1pdCkNCgl7CQ0KCQlnbG9iYWwgJGV2ZW50Ow0KDQoJCWxpc3QoJHBhZ2UsICRvZmZzZXQs
ICRudW1fcGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQsIGdwcygncGFnZScpKTsNCg0K
CQlpZiAoJG51bV9wYWdlcyA8PSAxKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkkc3Rh
cnQgPSBtYXgoMSwgJHBhZ2UtNSk7DQoJCSRlbmQgPSBtaW4oJG51bV9wYWdlcywgJHN0YXJ0
KzEwKTsNCg0KCQlpZiAoJHBhZ2UgPiAxICYmICRudW1fcGFnZXMgPiAxKQ0KCQl7DQoJCQkk
b3V0W10gPSAnPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRldmVudC5hLidz
dGVwPScuJHN0ZXAuYS4naXRlbT0nLnVybGVuY29kZShncHMoJ2l0ZW0nKSkuYS4ncGFnZT0n
LigkcGFnZS0xKS4nIj4nLmdUeHQoJ3ByZXYnKS4nPC9hPic7DQoJCX0NCgkJZWxzZQ0KCQl7
DQoJCQkkb3V0W10gPSAnPHNwYW4gY2xhc3M9Im5hdmxpbmstZGlzYWJsZWQiPicuZ1R4dCgn
cHJldicpLic8L3NwYW4+JzsNCgkJfQ0KDQoJCWZvciAoJHBnID0gJHN0YXJ0OyAkcGcgPD0g
JGVuZDsgJHBnKyspDQoJCXsJDQoJCQlpZiAoJHBnID09ICRwYWdlKQ0KCQkJew0KCQkJCSRj
bGFzcyA9ICduYXZsaW5rLWFjdGl2ZSc7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGNs
YXNzID0gJ25hdmxpbmsnOw0KCQkJfQ0KDQoJCQkkb3V0W10gPSAnPGEgY2xhc3M9IicuJGNs
YXNzLiciIGhyZWY9Ij9ldmVudD0nLiRldmVudC5hLidzdGVwPScuJHN0ZXAuYS4naXRlbT0n
LnVybGVuY29kZShncHMoJ2l0ZW0nKSkuYS4ncGFnZT0nLiRwZy4nIj4nLiRwZy4nPC9hPic7
DQoJCX0NCg0KCQlpZiAoJHBhZ2UgPCAkbnVtX3BhZ2VzICYmICRudW1fcGFnZXMgPiAxKQ0K
CQl7DQoJCQkkb3V0W10gPSAnPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRl
dmVudC5hLidzdGVwPScuJHN0ZXAuYS4naXRlbT0nLnVybGVuY29kZShncHMoJ2l0ZW0nKSku
YS4ncGFnZT0nLigkcGFnZSsxKS4nIj4nLmdUeHQoJ25leHQnKS4nPC9hPic7DQoJCX0NCgkJ
ZWxzZQ0KCQl7DQoJCQkkb3V0W10gPSAnPHNwYW4gY2xhc3M9Im5hdmxpbmstZGlzYWJsZWQi
PicuZ1R4dCgnbmV4dCcpLic8L3NwYW4+JzsNCgkJfQ0KDQoJCXJldHVybiAnPHAgY2xhc3M9
Im5hdi10ZXJ0aWFyeSI+Jy5pbXBsb2RlKCcnLCAkb3V0KS4nPC9wPic7DQoJfQ0KfQ0KDQoN
Ci8qKg0KICogR2VuZXJhdGVzIEhUTUwgaW5saW5lIGRpZmZzLCBhIGNvbXBhcmlzb24gdG9v
bC4NCiAqDQogKiBVc2VzIFBhdWwgQnV0bGVyJ3MgU2ltcGxlIERpZmYgQWxnb3JpdGhtLg0K
ICoNCiAqIEBwYWNrYWdlIHJhaF9wb3N0X3ZlcnNpb25zDQogKiBAYXV0aG9yICBKdWtrYSBT
dmFobg0KICogQGRhdGUgICAgMjAxMC0NCiAqIEBsaWNlbnNlIEdOVSBHUEx2Mg0KICogQGxp
bmsgICAgaHR0cDovL3JhaGZvcnVtLmJpei9wbHVnaW5zL3JhaF9wb3N0X3ZlcnNpb25zDQog
Kg0KICogQ29weXJpZ2h0IChDKSAyMDEyIEp1a2thIFN2YWhuIGh0dHA6Ly9yYWhmb3J1bS5i
aXoNCiAqIExpY2Vuc2VkIHVuZGVyIEdOVSBHZW5yYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv
biAyDQogKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sDQogKg0K
ICogVGhlIGRpZmYgZ2VuZXJhdG9yIHVzZXMgUGF1bCBCdXRsZXIncyBTaW1wbGUgRGlmZiBB
bGdvcml0aG0uDQogKg0KICogQGF1dGhvciAgUGF1bCBCdXRsZXINCiAqIEBsaWNlbnNlIHps
aWIvbGlicG5nDQogKiBAbGluayAgICBodHRwOi8vd3d3LnBhdWxidXRsZXIub3JnDQogKiBA
bGluayAgICBodHRwczovL2dpdGh1Yi5jb20vcGF1bGdiL3NpbXBsZWRpZmYNCiAqLw0KDQpj
bGFzcyByYWhfcG9zdF92ZXJzaW9uc19kaWZmDQp7DQoJLyoqDQoJICogT2xkIHZhbHVlLg0K
CSAqDQoJICogQHZhciBzdHJpbmcNCgkgKi8NCg0KCXB1YmxpYyAkb2xkOw0KDQoJLyoqDQoJ
ICogTmV3IHZhbHVlLg0KCSAqDQoJICogQHZhciBzdHJpbmcNCgkgKi8NCg0KCXB1YmxpYyAk
bmV3Ow0KDQoJLyoqDQoJICogTGluZSBkZWxpbWl0ZXIuDQoJICoNCgkgKiBAdmFyIHN0cmlu
Zw0KCSAqLw0KDQoJcHJvdGVjdGVkICRkZWxpbWl0ZXIgPSBuOw0KDQoJLyoqDQoJICogQ2xl
YW4gbGluZSBicmVha3MuDQoJICoNCgkgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAkc3RyaW5n
DQoJICogQHJldHVybiBhcnJheQ0KCSAqLw0KDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxpbmVz
KCRzdHJpbmcpDQoJew0KCQlpZiAoaXNfYXJyYXkoJHN0cmluZykpDQoJCXsNCgkJCSRzdHJp
bmcgPSBqc29uX2VuY29kZSgkc3RyaW5nKTsNCgkJfQ0KDQoJCXJldHVybiAJZXhwbG9kZSgk
dGhpcy0+ZGVsaW1pdGVyLA0KCQkJc3RyX3JlcGxhY2UoYXJyYXkoIlxyXG4iLCJcciIpLCBu
LCBodG1sc3BlY2lhbGNoYXJzKCRzdHJpbmcpKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIFJl
dHVybnMgSFRNTCBwcmVzZW50YXRpb24gb2YgdGhlIGRpZmYuDQoJICoNCgkgKiBAcmV0dXJu
IHN0cmluZyBIVE1MIG1hcmt1cC4NCgkgKi8NCg0KCXB1YmxpYyBmdW5jdGlvbiBodG1sKCkN
Cgl7CQ0KCQkkdGhpcy0+b2xkID0gJHRoaXMtPmxpbmVzKCR0aGlzLT5vbGQpOw0KCQkkdGhp
cy0+bmV3ID0gJHRoaXMtPmxpbmVzKCR0aGlzLT5uZXcpOw0KDQoJCWZvcmVhY2ggKCR0aGlz
LT5kaWZmKCR0aGlzLT5vbGQsICR0aGlzLT5uZXcpIGFzICRrZXkgPT4gJGxpbmUpDQoJCXsN
CgkJCWlmIChpc19hcnJheSgkbGluZSkpDQoJCQl7DQoJCQkJaWYgKA0KCQkJCQkhZW1wdHko
JGxpbmVbJ2QnXSkgJiYNCgkJCQkJKCRkID0gaW1wbG9kZSgkdGhpcy0+ZGVsaW1pdGVyLCRs
aW5lWydkJ10pKSAhPT0gJycNCgkJCQkpDQoJCQkJew0KCQkJCQkkb3V0W10gPSAnPHNwYW4g
Y2xhc3M9ImVycm9yIj4nLiRkLic8L3NwYW4+JzsNCgkJCQl9DQoNCgkJCQlpZiAoIWVtcHR5
KCRsaW5lWydpJ10pKQ0KCQkJCXsNCgkJCQkJJG91dFtdID0gDQoJCQkJCQknPHNwYW4gY2xh
c3M9InN1Y2Nlc3MiPicuDQoJCQkJCQkJaW1wbG9kZSgkdGhpcy0+ZGVsaW1pdGVyLCAkbGlu
ZVsnaSddKS4NCgkJCQkJCSc8L3NwYW4+JzsNCgkJCQl9DQoJCQl9DQoJCQllbHNlDQoJCQl7
DQoJCQkJJG91dFtdID0gJGxpbmU7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gaW1wbG9kZSgk
dGhpcy0+ZGVsaW1pdGVyLCAkb3V0KTsNCgl9DQoNCgkvKioNCgkgKiBDb21wYXJlcyBsaW5l
cy93b3JkcyBhbmQgcmV0dW5zIGRpZmZlcmVuY2VzIG1hcmtlZC4NCgkgKg0KCSAqIEBwYXJh
bSAgYXJyYXkgJG9sZCBDb250ZW50cyBvZiBvbGQgcmV2aXNpb24uDQoJICogQHBhcmFtICBh
cnJheSAkbmV3IENvbnRlbnRzIG9mIG5ldyByZXZpc2lvbi4NCgkgKiBAcmV0dXJuIGFycmF5
DQoJICovDQoNCglwdWJsaWMgZnVuY3Rpb24gZGlmZigkb2xkLCAkbmV3KQ0KCXsNCgkJLyoN
CgkJCVRoaXMgKHJhaF9wb3N0X3ZlcnNpb25zX2RpZmY6OmRpZmYoKSkgbWV0aG9kcydzIGNv
bnRlbnRzIGFyZSBiYXNlZCBvbjoNCgkJCQ0KCQkJUGF1bCdzIFNpbXBsZSBEaWZmIEFsZ29y
aXRobSB2IDAuMQ0KCQkJKEMpIFBhdWwgQnV0bGVyIDIwMDcgPGh0dHA6Ly93d3cucGF1bGJ1
dGxlci5vcmcvPg0KCQkJTWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB6
bGliL2xpYnBuZyBsaWNlbnNlLg0KDQoJCQlUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdh
cy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZA0KCQkJd2FycmFudHkuIElu
IG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1h
Z2VzDQoJCQlhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLg0KDQoJCQlQ
ZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZv
ciBhbnkgcHVycG9zZSwNCgkJCWluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywg
YW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQNCgkJCWZyZWVseSwgc3ViamVj
dCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoNCg0KCQkJMS4gVGhlIG9yaWdpbiBv
ZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBu
b3QNCgkJCWNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYg
eW91IHVzZSB0aGlzIHNvZnR3YXJlDQoJCQlpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdt
ZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUNCgkJCWFwcHJlY2lh
dGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuDQoNCgkJCTIuIEFsdGVyZWQgc291cmNlIHZlcnNp
b25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlDQoJ
CQltaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuDQoNCgkJ
CTMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55
IHNvdXJjZQ0KCQkJZGlzdHJpYnV0aW9uLg0KCQkqLw0KDQoJCSRtYXhsZW4gPSAwOw0KDQoJ
CWZvcmVhY2ggKCRvbGQgYXMgJG9pbmRleCA9PiAkb3ZhbHVlKQ0KCQl7DQoJCQkkbmtleXMg
PSBhcnJheV9rZXlzKCRuZXcsICRvdmFsdWUpOw0KDQoJCQlmb3JlYWNoICgkbmtleXMgYXMg
JG5pbmRleCkNCgkJCXsNCgkJCQkkbWF0cml4WyRvaW5kZXhdWyRuaW5kZXhdID0gDQoJCQkJ
CWlzc2V0KCRtYXRyaXhbJG9pbmRleCAtIDFdWyRuaW5kZXggLSAxXSkgPyANCgkJCQkJCSRt
YXRyaXhbJG9pbmRleCAtIDFdWyRuaW5kZXggLSAxXSArIDEgOiAxOw0KDQoJCQkJaWYgKCRt
YXRyaXhbJG9pbmRleF1bJG5pbmRleF0gPiAkbWF4bGVuKQ0KCQkJCXsNCgkJCQkJJG1heGxl
biA9ICRtYXRyaXhbJG9pbmRleF1bJG5pbmRleF07DQoJCQkJCSRvbWF4ID0gJG9pbmRleCAr
IDEgLSAkbWF4bGVuOw0KCQkJCQkkbm1heCA9ICRuaW5kZXggKyAxIC0gJG1heGxlbjsNCgkJ
CQl9DQoJCQl9DQoJCX0NCg0KCQlpZiAoJG1heGxlbiA9PSAwKQ0KCQl7DQoJCQlyZXR1cm4g
YXJyYXkoYXJyYXkoJ2QnID0+ICRvbGQsICdpJyA9PiAkbmV3KSk7DQoJCX0NCg0KCQlyZXR1
cm4gDQoJCQlhcnJheV9tZXJnZSgNCgkJCQkkdGhpcy0+ZGlmZigNCgkJCQkJYXJyYXlfc2xp
Y2UoJG9sZCwgMCwgJG9tYXgpLA0KCQkJCQlhcnJheV9zbGljZSgkbmV3LCAwLCAkbm1heCkN
CgkJCQkpLA0KCQkJCWFycmF5X3NsaWNlKCRuZXcsICRubWF4LCAkbWF4bGVuKSwNCgkJCQkk
dGhpcy0+ZGlmZigNCgkJCQkJYXJyYXlfc2xpY2UoJG9sZCwgJG9tYXggKyAkbWF4bGVuKSwN
CgkJCQkJYXJyYXlfc2xpY2UoJG5ldywgJG5tYXggKyAkbWF4bGVuKQ0KCQkJCSkNCgkJCSkN
CgkJOw0KCX0NCn0NCg0KDQoNCi8qKg0KICogVHJhY2tzIGNoYW5nZXMgYW5kIGNyZWF0ZXMg
cmV2aXNpb25zDQogKg0KICogQGF1dGhvciAgSnVra2EgU3ZhaG4NCiAqIEBkYXRlICAgIDIw
MTAtDQogKiBAbGljZW5zZSBHTlUgR1BMdjINCiAqIEBsaW5rICAgIGh0dHA6Ly9yYWhmb3J1
bS5iaXovcGx1Z2lucy9yYWhfcG9zdF92ZXJzaW9ucw0KICoNCiAqIENvcHlyaWdodCAoQykg
MjAxMiBKdWtrYSBTdmFobiBodHRwOi8vcmFoZm9ydW0uYml6DQogKiBMaWNlbnNlZCB1bmRl
ciBHTlUgR2VucmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMg0KICogaHR0cDovL3d3dy5n
bnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbA0KICovDQoNCm5ldyByYWhfcG9zdF92ZXJz
aW9uc190cmFjaygpOw0KDQovKioNCiAqIFRyYWNrcyBjaGFuZ2VzLg0KICovDQoNCmNsYXNz
IHJhaF9wb3N0X3ZlcnNpb25zX3RyYWNrDQp7DQoJLyoqDQoJICogVGhlIGZvcm0gZGF0YS4N
CgkgKg0KCSAqIEB2YXIgYXJyYXkNCgkgKi8NCg0KCXByaXZhdGUgJGZvcm0gPSBhcnJheSgp
Ow0KDQoJLyoqDQoJICogQ29uc3RydWN0b3IuDQoJICovDQoNCglwdWJsaWMgZnVuY3Rpb24g
X19jb25zdHJ1Y3QoKQ0KCXsNCgkJaWYgKCFlbXB0eSgkX1BPU1QpKQ0KCQl7DQoJCQkkdGhp
cy0+Zm9ybSA9IHBzYShhcnJheV9rZXlzKCRfUE9TVCkpOw0KCQkJdW5zZXQoJHRoaXMtPmZv
cm1bJ190eHBfdG9rZW4nXSk7DQoJCX0NCg0KCQlyZWdpc3Rlcl9jYWxsYmFjayhhcnJheSgk
dGhpcywgJ3B1c2hfYXJ0aWNsZScpLCAnYXJ0aWNsZV9zYXZlZCcpOw0KCQlyZWdpc3Rlcl9j
YWxsYmFjayhhcnJheSgkdGhpcywgJ3B1c2hfYXJ0aWNsZScpLCAnYXJ0aWNsZV9wb3N0ZWQn
KTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soYXJyYXkoJHRoaXMsICdwdXNoX25hbWVkJyksICdw
YWdlJyk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKGFycmF5KCR0aGlzLCAncHVzaF9uYW1lZCcp
LCAnZm9ybScpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjayhhcnJheSgkdGhpcywgJ3B1c2hfbmFt
ZWQnKSwgJ2NzcycpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjayhhcnJheSgkdGhpcywgJ3B1c2hf
bmFtZWQnKSwgJ3NlY3Rpb24nKTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soYXJyYXkoJHRoaXMs
ICdwdXNoX2xpbmsnKSwgJ2xpbmsnKTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soYXJyYXkoJHRo
aXMsICdwdXNoX211bHRpX2VkaXQnKSwgJ2xpc3QnKTsNCgl9DQoNCgkvKioNCgkgKiBUcmFj
a3MgYXJ0aWNsZXMuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRldmVudA0KCSAqIEBwYXJh
bSBzdHJpbmcgJHN0ZXANCgkgKiBAcGFyYW0gYXJyYXkgICRyDQoJICovDQoNCglwdWJsaWMg
ZnVuY3Rpb24gcHVzaF9hcnRpY2xlKCRlLCAkcywgJHIpDQoJew0KCQlnbG9iYWwgJHR4cF91
c2VyLCAkZXZlbnQsICRzdGVwOw0KDQoJCXJhaF9wb3N0X3ZlcnNpb25zOjpnZXQoKS0+Y3Jl
YXRlX3JldmlzaW9uKA0KCQkJKHN0cmluZykgJHJbJ0lEJ10sIChzdHJpbmcpICRyWydUaXRs
ZSddLCAkdHhwX3VzZXIsICRldmVudCwgJHN0ZXAsICR0aGlzLT5mb3JtDQoJCSk7DQoJfQ0K
DQoJLyoqDQoJICogVHJhY2sgcG9zdHMuDQoJICovDQoNCglwdWJsaWMgZnVuY3Rpb24gcHVz
aF9uYW1lZCgpDQoJew0KCQlnbG9iYWwgJHR4cF91c2VyLCAkZXZlbnQsICRzdGVwOw0KDQoJ
CWlmICghJHRoaXMtPmZvcm0gfHwgIXBzKCduYW1lJykpDQoJCXsNCgkJCXJldHVybjsNCgkJ
fQ0KDQoJCXJhaF9wb3N0X3ZlcnNpb25zOjpnZXQoKS0+Y3JlYXRlX3JldmlzaW9uKA0KCQkJ
KHN0cmluZykgcHMoJ25hbWUnKSwgKHN0cmluZykgcHMoJ25hbWUnKSwgJHR4cF91c2VyLCAk
ZXZlbnQsICRzdGVwLCAkdGhpcy0+Zm9ybQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIFRyYWNr
cyBsaW5rcy4NCgkgKi8NCg0KCXB1YmxpYyBmdW5jdGlvbiBwdXNoX2xpbmsoKQ0KCXsNCgkJ
Z2xvYmFsICR0eHBfdXNlciwgJGV2ZW50LCAkc3RlcCwgJElEOw0KDQoJCWlmICghJHRoaXMt
PmZvcm0gfHwgIXBzKCdpZCcpKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlyYWhfcG9z
dF92ZXJzaW9uczo6Z2V0KCktPmNyZWF0ZV9yZXZpc2lvbigNCgkJCShzdHJpbmcpIHBzKCdp
ZCcpLCAoc3RyaW5nKSBwcygnbGlua25hbWUnKSwgJHR4cF91c2VyLCAkZXZlbnQsICRzdGVw
LCAkdGhpcy0+Zm9ybQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIE11bHRpLWVkaXQgdHJhY2tp
bmcuDQoJICovDQoNCglwdWJsaWMgZnVuY3Rpb24gcHVzaF9tdWx0aV9lZGl0KCkNCgl7DQoJ
CWdsb2JhbCAkdHhwX3VzZXIsICRldmVudCwgJHN0ZXAsICRJRDsNCg0KCQlpZiAoISR0aGlz
LT5mb3JtIHx8ICFwcygnZWRpdF9tZXRob2QnKSB8fCAhcHMoJ3NlbGVjdGVkJykgfHwgIWlz
X2FycmF5KHBzKCdzZWxlY3RlZCcpKSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJZm9y
ZWFjaCAocHMoJ3NlbGVjdGVkJykgYXMgJGlkKQ0KCQl7DQoJCQlyYWhfcG9zdF92ZXJzaW9u
czo6Z2V0KCktPmNyZWF0ZV9yZXZpc2lvbigNCgkJCQkoc3RyaW5nKSAkaWQsICcnLCAkdHhw
X3VzZXIsICRldmVudCwgcHMoJ2VkaXRfbWV0aG9kJyksICR0aGlzLT5mb3JtDQoJCQkpOw0K
CQl9DQoJfQ0KfSI7czo0OiJ0eXBlIjtzOjE6IjQiO3M6NToib3JkZXIiO3M6MToiNSI7czo1
OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6MTQ5MjI6IjxoMT5yYWhfcG9zdF92ZXJz
aW9uczwvaDE+Cgo8cD5TdG9yZSBhbmQgcmV2aXZlIG9sZCB2ZXJzaW9ucyBvZiBhcnRpY2xl
cywgY2F0ZWdvcmllcywgc2VjdGlvbnMsIGZvcm1zIGFuZCBwYWdlcy4gUmFoX3Bvc3RfdmVy
c2lvbnMgZW1iZWRzIHJldmlzaW9uIGNvbnRyb2wgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy50
ZXh0cGF0dGVybi5jb20iIHJlbD0ibm9mb2xsb3ciPlRleHRwYXR0ZXJuJiM4MjE3O3M8L2E+
IGFkbWluLXNpZGUgdXNlciBpbnRlcmZhY2UuIFRoZSBwbHVnaW4gbW9uaXRvcnMgY2hhbmdl
cyBtYWRlIGZyb20gdGhlIHdlYi1iYXNlZCBhZG1pbiBpbnRlcmZhY2UgYW5kIHN0b3JlcyB0
aGUgcmV2ZXJzaW9ucyBpbiBhIHJlcG9zaXRvcnkuPC9wPgoKPGgyPkxpc3Qgb2YgZmVhdHVy
ZXM8L2gyPgoKPHVsPgoJPGxpPlRyYWNrcyBjaGFuZ2VzIG1hZGUgdmlhIFRleHRwYXR0ZXJu
JiM4MjE3O3MgaW50ZXJmYWNlLjwvbGk+Cgk8bGk+QnkgZGVmYXVsdCB0aGUgcGx1Z2luIHRy
YWNrcyBlZGl0cyBhbmQgc2F2ZXMgb2YgYXJ0aWNsZXMsIHBhZ2VzLCBmb3JtcywgcHJlZmVy
ZW5jZXMsIGNhdGVnb3JpZXMsIHNlY3Rpb25zLCBzdHlsZXMsIGRpc2N1c3Npb24gYW5kIGxp
bmtzLiBUaGUgcGx1Z2luJiM4MjE3O3MgdHJhY2tpbmcgY2FuIGJlIGV4dGVuZGVkIHRvIG90
aGVyIGFyZWFzIGZyb20gdGhlIHBsdWdpbiYjODIxNztzIHByZWZlcmVuY2VzLjwvbGk+Cgk8
bGk+QWJpbGl0eSB0byByZXZlcnQgZWRpdHMgdG8gYSBwcmV2aW91cyByZXZpc2lvbi48L2xp
Pgo8L3VsPgoKPGgyPkJhc2ljIGNvbmNlcHQ8L2gyPgoKPHA+VGhlIHJhaF9wb3N0X3ZlcnNp
b25zIHRyYWNrcyB0aGUgY2hhbmdlcyBtYWRlIHZpYSBUZXh0cGF0dGVybiYjODIxNztzIGlu
dGVyZmFjZS4gSW5zdGVhZCBpdCB0cmFja2luZyB0aGUgZGF0YWJhc2UsIGl0IHRyYWNrcyB0
aGUgZGF0YSBzZW50IGJ5IHlvdXIgYnJvd3NlciBhbmQgcmVjZWl2ZWQgYnkgdGhlIHNlcnZl
ci4gQWZ0ZXIgaXQgaGFzIGNvbGxlY3RlZCB0aGUgYXBwcm9wcmlhdGUgZGF0YSBhbmQgZmls
dGVyZWQgaXQgdG8gYmUgdmFsaWQsIGl0IHN0YXJ0cyBpZGVudGlmeWluZyBwcm9jZXNzLiBB
ZnRlciBpdCBoYXMgdGhlIGV4YWN0IGluZm8gd2hhdCB0aGUgY2hhbmdlIGlzIGFuZCB3aGVy
ZSBpdCBzaG91bGQgZ28sIGl0IHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIHJldmlz
aW9uIGNvbnRyb2wsIHRocmVhZGVkIHVuZGVyIGFwcHJvcHJpYXRlIGl0ZW0uIDwvcD4KCjxo
Mj5SZXF1aXJlbWVudHM8L2gyPgoKPHA+UmFoX3Bvc3RfdmVyc2lvbnPigJwgbWluaW11bSBy
ZXF1aXJlbWVudHM6PC9wPgoKPHVsPgoJPGxpPlRleHRwYXR0ZXJuIDQuNS4wIG9yIG5ld2Vy
LjwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gNS4yLjAgb3IgbmV3
ZXIuPC9saT4KPC91bD4KCjxoMj5JbnN0YWxsYXRpb248L2gyPgoKPHA+VGhlIGdlbmVyYWwg
YmVoYXZpb3Igc3RhbmRzOjwvcD4KCjxvbD4KCTxsaT5HbyB0byB5b3VyIFRleHRwYXR0ZXJu
IGluc3RhbGxhdGlvbiYjODIxNztzIGFkbWluIHBhbmVsLjwvbGk+Cgk8bGk+TmF2aWdhdGUg
dG8gPGVtPkFkbWluIC8gUGx1Z2luczwvZW0+LjwvbGk+Cgk8bGk+RG93bmxvYWQgYW5kIG9w
ZW4gdGhlIHBsdWdpbiBjb2RlLjwvbGk+Cgk8bGk+Q29weSB0aGUgcGx1Z2luIGNvZGUgdG8g
dGhlIGluc3RhbGwgcGx1Z2luIGJveC48L2xpPgoJPGxpPkNsaWNrIGluc3RhbGwgYW5kIGdv
IHRocnUgdGhlIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24gcHJvY2Vzcy48L2xpPgoJPGxpPkFm
dGVyIGluc3RhbGxhdGlvbiBmaW5kIHRoZSBwbHVnaW4gZnJvbSB0aGUgcGx1Z2luIGxpc3Qg
YW5kIGNsaWNrIEFjdGl2YXRlLjwvbGk+Cgk8bGk+Tm93IHRoZSBwbHVnaW4gaXMgaW5zdGFs
bGVkIGFuZCByZWFkeSB0byBiZSB1c2VkLiBUaGUgcGx1Z2luJiM4MjE3O3MgaW50ZXJmYWNl
IGNhbiBiZSBub3cgZm91bmQgZnJvbSA8ZW0+RXh0ZW5zaW9ucy9Qb3N0IFZlcnNpb25zPC9l
bT4uPC9saT4KPC9vbD4KCjxoMj5JbnRlcmZhY2U8L2gyPgoKPHA+QWZ0ZXIgYSBzdWNjZXNz
ZnVsIGluc3RhbGxhdGlvbiB5b3UgY2FuIGZpbmQgcmFoX3Bvc3RfdmVyc2lvbnPigJwgaW50
ZXJmYWNlIHVuZGVyIDxlbT5FeHRlbnNpb25zL1Bvc3QgVmVyc2lvbnM8L2VtPi4gVGhlIGlu
dGVyZmFjZSBpcyBkaXZpZGVkIHRvIHR3byBtYWluIGFyZWFzOyA8ZW0+U3VidmVyc2lvbiBy
ZXBvc2l0b3J5IGJyb3dzZXI8L2VtPiwgdGhhdCBpcyB0aGUgPGVtPm1haW48L2VtPiB0YWIs
IGFuZCA8ZW0+UHJlZmVyZW5jZXM8L2VtPi48L3A+Cgo8aDM+VGhlIE1haW4gYXJlYSwgcmVw
b3NpdG9yeSBicm93c2VyPC9oMz4KCjxwPldoZW4geW91IG9wZW4gdGhlIE1haW4gYXJlYSB5
b3Ugd2lsbCBzZWUgdGhlIGRlZmF1bHQgdmlldzsgYSBsaXN0IG9mIGl0ZW1zLiBUaGUgbGlz
dCBjb25zaXN0cyB0aGUgaXRlbXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3Igc2F2ZWQs
IGFuZCByZXZpc2lvbmVkLiBXaGVuIHlvdSBjbGljayBvbmUgb2YgdGhlc2UgaXRlbXMsIHRo
ZSBpdGVtJiM4MjE3O3MgY2hhbmdlc2V0IHdpbGwgZXhwYW5kLCBhbmQgeW91IHdpbGwgc2Vl
IHRoZSBsaXN0IG9mIGluZGl2aWR1YWwgY2hhbmdlcyBtYWRlIHRvIHRoYXQgc3BlY2lmaWMg
aXRlbS4gVGhlIGNoYW5nZXMgY2FuIGJlIHZpZXdlZCB0b28uPC9wPgoKPGgzPlByZWZlcmVu
Y2VzIHBhbmVsPC9oMz4KCjxwPlByZWZlcmVuY2VzIHBhbmVsIGxldHMgdGhlIHVzZXIgY2hh
bmdlIHNvbWUgb2YgdGhlIGNvbW1vbiBzZXR0aW5ncy4gVGhlc2UgaW5jbHVkZSBleGNsdWRl
IGZvcm0gZmllbGRzIGZyb20gdHJhY2tpbmcsIGV4Y2x1ZGUgY2hhbmdlcyBtYWRlIGJ5IHNw
ZWNpZmljIGF1dGhvcnMsIHNldCB3aGljaCBwYWdlcywgb3IgZXZlbnRzLCB0byB0cmFjaywg
YW5kIHNldCBpZGVudGlmaWNhdGlvbiBjb2RlLiBXaGVuIHlvdSBvcGVuIHRoZSBQcmVmZXJl
bmNlcyBwYW5lbCwgeW91IHdpbGwgc2VlIHRoYXQgdGhlIDxlbT5pZGVudGlmaWNhdGlvbiBj
b2RlPC9lbT4gaXMgc21hbGwgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gc25pcHBl
dC4gSXQgd2lsbCBnZW5lcmF0ZSB0aGUgcmVxdWlyZWQgaWRlbnRpZmljYXRpb24gZm9yIGEg
cG9zdGVkIGNoYW5nZS4gV2l0aG91dCBwcm9wZXIgSUQsIGEgY2hhbmdlIGNhbiBub3QgYmUg
dGhyZWFkZWQgdG8gY29ycmVjdCBzZXQgb2YgY2hhbmdlcy48L3A+Cgo8aDI+UHJlZmVyZW5j
ZXMgYW5kIGNvbmZpZ3VyYXRpb248L2gyPgoKPHA+UHJlZmVyZW5jZXMgcGFuZWwgbGV0cyB0
aGUgdXNlciBjaGFuZ2Ugc29tZSBvZiB0aGUgY29tbW9uIHNldHRpbmdzLiBBdmFpbGFibGUg
c2V0dGluZ3MgYXJlIGFzIGZvbGxvd3MuPC9wPgoKPGgzPkNvbXByZXNzIHJlcG9zaXRvcnkg
ZGF0YT88L2gzPgoKPHA+SWYgc2V0IHRvIHllcywgY3JlYXRlZCByZXBvc2l0b3J5IGRhdGEg
aXMgY29tcHJlc3NlZCB1c2luZyBHemlwLjwvcD4KCjxoMz5JZ25vcmVkIGF1dGhvcnM8L2gz
PgoKPHA+Q2hhbmdlcyBkb25lIGJ5IGF1dGhvcnMgbGlzdGVkIGFyZSBub3Qgc3RvcmVkIGlu
IHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLiBUaGV5IGZpZWxkIHRha2VzIGNvbW1hLXNl
cGFyYXRlZCBsaXN0IG9mIGxvZ2luIG5hbWVzLiBCeSBkZWZhdWx0IG5vIGF1dGhvcnMgYXJl
IGlnbm9yZWQuPC9wPgoKPGgzPlBhdGggdG8gcmVwb3NpdG9yeSBkaXJlY3Rvcnk8L2gzPgoK
PHA+TmVlZHMgZGVzY3JpcHRpb24uPC9wPgoKPGgyPkZvciBEZXZlbG9wZXJzPC9oMj4KCjxw
PkFzIG9mIHZlcnNpb24gMS4wLCByYWhfcG9zdF92ZXJzaW9ucyBoYXMgcHJvdmlkZWQgdG9v
bHMgZm9yIGRldmVsb3BlcnMuIFRoZXNlIHRvb2xzLCBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+
QVBJPC9zcGFuPiBhbmQgYWRkZWQgaG9va2luZyBwb2ludHMsIGFsbG93IGRldmVsb3BlcnMg
dG8gZXh0ZW5kIHBsdWdpbiYjODIxNztzIGZ1bmN0aW9uYWxpdHksIGFuZCBmb3IgaW5zdGFu
Y2UsIGNyZWF0ZSByZXZpc2lvbnMgZGlyZWN0bHkgZnJvbSB0aGVpciBjb2RlLCBhcyBlYXNp
bHkgYXMgY2FsbGluZyBzaW5nbGUgY2xhc3MgbWV0aG9kLjwvcD4KCjxoMz48c3BhbiBjbGFz
cz0iY2FwcyI+QVBJPC9zcGFuPjwvaDM+Cgo8cD5UaGUgPHNwYW4gY2xhc3M9ImNhcHMiPkFQ
STwvc3Bhbj4gYWxsb3dzIHBpY2tpbmcgdXAgY2hhbmdlcyAoY29tbWl0cyksIGFuZCBjcmVh
dGluZyBuZXcgcmV2aXNpb25zIGRpcmVjdGx5IGZyb20gcGx1Z2lucywgYW5kIG90aGVyIDxz
cGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGNvZGUgc25pcHBldHMuIFRoZSA8c3BhbiBj
bGFzcz0iY2FwcyI+QVBJPC9zcGFuPiBjYW4gYmUgdXNlZCB0byBtYWtlIHJhaF9wb3N0X3Zl
cnNpb25zIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNoYW5nZXMgZG9uZSB2aWEgcGx1Z2luJiM4
MjE3O3MgZWRpdG9yIGludGVyZmFjZS48L3A+Cgo8cD5DcmVhdGluZyBhIG5ldyByZXZpc2lv
biBpcyBhcyBlYXN5IGFzIGNhbGxpbmcgYSBzaW5nbGUgY2xhc3MgbWV0aG9kLCA8c3Ryb25n
PnJhaF9wb3N0X3ZlcnNpb25zOjpjcmVhdGVfcmV2aXNpb24obWl4ZWQgJGdyaWQsIHN0cmlu
ZyAkdGl0bGUsIHN0cmluZyAkYXV0aG9yLCBzdHJpbmcgJGV2ZW50LCBzdHJpbmcgJHN0ZXAs
IGFycmF5ICRkYXRhKTwvc3Ryb25nPi4gVGhlIGFyZ3VtZW50cyBhcmUgYXMgZm9sbG93cy48
L3A+Cgo8cD48c3Ryb25nPmdyaWQ8L3N0cm9uZz4gKHN0cmluZywgMS0yNTUgYnl0ZXMsIHJl
cXVpcmVkKTxiciAvPgpJcyBhIHVuaXF1ZSBJRCB3aGljaCBpcyB1c2VkIHRvZ2V0aGVyIHdp
dGggPGNvZGU+ZXZlbnQ8L2NvZGU+IHRvIGRldGVjdCB3aGljaCBpdGVtIHRoZSByZXZpc2lv
biBiZWxvbmdzIHRvLiBUaGUgPGNvZGU+Z3JpZDwvY29kZT4mIzgyMTc7cyB2YWx1ZSBjYW4g
YmUgYW55IHN0cmluZyBiZXR3ZWVuIDEtMjU1IGJ5dGVzLCBhcyBsb25nIGFzIGl0IGhlbHBz
IHRvIGRldGVjdCB0aGUgaXRlbSBjb3JyZWN0bHkuIE90aGVyd2lzZSB0aGUgcmV2aXNpb24g
ZG9lc24mIzgyMTc7dCBrbm93IHdoaWNoIGl0ZW0gaXQgYmVsb25ncyB0by48L3A+Cgo8cD48
c3Ryb25nPnRpdGxlPC9zdHJvbmc+IChzdHJpbmcsIDEtMjU1IGJ5dGVzLCByZXF1aXJlZCk8
YnIgLz4KSXRlbSYjODIxNztzIHRpdGxlL25hbWUuIEl0JiM4MjE3O3MgdGhlIHRoaW5nIHRo
YXQgaXMgc2hvd24gYXMgdGhlIGl0ZW0mIzgyMTc7cyBuYW1lIGluIHRoZSByZXBvc2l0b3J5
IGJyb3dzZXIuPC9wPgoKPHA+PHN0cm9uZz5hdXRob3I8L3N0cm9uZz4gKHN0cmluZywgMS02
NCBieXRlcywgcmVxdWlyZWQpPGJyIC8+ClJldmlzaW9uJiM4MjE3O3MgYXV0aG9yLiBUaGUg
PGNvZGU+YXV0aG9yPC9jb2RlPiB3aWxsIG5lZWQgdG8gYmUgYSB2YWxpZCB1c2VybmFtZS4g
VXNlcyBsb2dpbiBuYW1lcy5UIGhlcmUgaXMgbm8gbGltaXRhdGlvbiB0byBzZXQgd2hpY2gg
dXNlciBncm91cCB0aGUgdXNlciBoYXMgYmVsb25nIHRvLCBidXQgaXQgd2lsbCBoYXZlIHRv
IGJlIGEgcmVhbCB1c2VyLjwvcD4KCjxwPjxzdHJvbmc+ZXZlbnQ8L3N0cm9uZz4gKHN0cmlu
ZywgMS0yNTUgYnl0ZXMsIHJlcXVpcmVkKTxiciAvPgpBZG1pbi1zaWRlIGV2ZW50IHRoZSBy
ZXZpc2lvbiBjb21lcyBmcm9tIG9yIGJlbG9uZ3MgdG8uIFVzdWFsbHkgdGhlIDxjb2RlPmV2
ZW50PC9jb2RlPiB3b3VsZCBiZSBhIGFkbWluLXNpZGUgcGFuZWwmIzgyMTc7cyBuYW1lL2V2
ZW50LCBidXQgaXQgY2FuIHJlYWxseSBiZSBhbnl0aGluZy4gSWYgdGhlIGNvbW1pdCBjb21l
cyBmcm9tIGFuIGFkbWluLXNpZGUgcGFuZSAoYWRtaW4tc2lkZSBwbHVnaW4gZXRjKSwgdXNl
IHRoZSBwYW5lJiM4MjE3O3MgZXZlbnQsIGlmIGVsc2V3aGVyZSwgdXNlIHdoYXQgc291bmRz
IG1vc3QgYXBwcm9wcmlhdGUsIHVuaXF1ZSwgYW5kIG1vc3QgcmVjb2duaXphYmxlLjwvcD4K
CjxwPjxzdHJvbmc+c3RlcDwvc3Ryb25nPiAoc3RyaW5nLCAxLTI1NSBieXRlcywgcmVxdWly
ZWQpPGJyIC8+CkFkbWluLXNpZGUgc3RlcCB0aGUgcmV2aXNpb24gY29tZXMgZnJvbSwgb3Ig
YWN0aW9uIGNvbW1pdHRlZCAoZGVsZXRlLCBzYXZlLCBjcmVhdGUgZXRjKS4gU2FtZSBydWxl
cyBhcHBseSBhcyB0byB0aGUgPGNvZGU+ZXZlbnQ8L2NvZGU+IGFib3ZlLjwvcD4KCjxwPjxz
dHJvbmc+ZGF0YTwvc3Ryb25nPiAoYXJyYXksIHVwIHRvIDQgR0IsIHJlcXVpcmVkKTxiciAv
PgpUaGUgPGNvZGU+ZGF0YTwvY29kZT4gaXMgdGhlIGFjdHVhbCBjb21taXR0ZWQgcmV2aXNp
b24gZGF0YS4gVGhlIDxjb2RlPmRhdGE8L2NvZGU+IHRha2UmIzgyMTc7cyBhbiBhcnJheSBt
YXAsIGNvbnRhaW5pbmcgPGNvZGU+RmllbGROYW1lID0mZ3Q7IEZpZWxkRGF0YTwvY29kZT4g
cHJvcGVydHkgcGFpcnMuPC9wPgoKPHA+PGNvZGU+cmFoX3Bvc3RfdmVyc2lvbnM6OmNyZWF0
ZV9yZXZpc2lvbigpPC9jb2RlPiByZXR1cm5zIDxjb2RlPkZBTFNFPC9jb2RlPiBvbiBlcnJv
ciwgYW5kIDxjb2RlPlRSVUU8L2NvZGU+IG9uIHN1Y2Nlc3Mgb3Igd2hlbiBuZXcgcmV2aXNp
b24gaXNuJiM4MjE3O3QgbmVlZGVkLiBOZXcgcmV2aXNpb24gaXNuJiM4MjE3O3QgbmVlZGVk
IGlmIGNvbW1pdHRlZCBkYXRhIG1hdGNoZXMgbGFzdCByZXZpc2lvbi48L3A+Cgo8cD48c3Ry
b25nPkJhc2ljIHVzYWdlPC9zdHJvbmc+PC9wPgoKPHByZT48Y29kZT4vKiBTb21lIGRhdGEg
Zm9yIHRoZSByZXZpc2lvbiAqLwoKJGRhdGEgPSBhcnJheSgKCSdjb250ZW50JyA9Jmd0OyAn
SGVsbG8gV29ybGQhJywKCSdhY3RpdmUnID0mZ3Q7IDEsCgknc2t5JyA9Jmd0OyAnQmx1ZScs
CgkncGFyZW50X2l0ZW0nID0mZ3Q7ICdVbml2ZXJzZScsCik7CgovKiBDcmVhdGUgdGhlIHJl
dmlzaW9uICovCgpyYWhfcG9zdF92ZXJzaW9uczo6Z2V0KCktJmd0O2NyZWF0ZV9yZXZpc2lv
bignbXlfaXRlbV9zcGVjaWZpY19pZCcsICdJdGVtIE5hbWUnLCAnbG9naW5uYW1lJywgJ3h4
eF9teXBsdWdpbl9ldmVudCcsICdzYXZlJywgJGRhdGEpOzwvY29kZT48L3ByZT4KCjxoMz5I
b29raW5nIGFuZCBjYWxsYmFja3M8L2gzPgoKPHA+T3RoZXIgd2F5IG9mIGV4dGVuZGluZyBw
bHVnaW4mIzgyMTc7cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3NzaWJpbGl0aWVzIGFyZSB0aGUg
aG9va3MuIFRoZSBjYWxsYmFjayBmdW5jdGlvbmFsaXR5IHVzZXMgVGV4dHBhdHRlcm4gNC54
JiM4MjE3O3MgcmVndWxhciB3YXkgb2YgaGFuZGxpbmcgY2FsbGJhY2tzLCB0aGUgc2FtZSBz
dHVmZiB1c2VkIGluIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRl
eC5waHA/dGl0bGU9UGx1Z2luX0RldmVsb3BtZW50X0d1aWRlbGluZXMjQ2FsbGJhY2tzIiBy
ZWw9Im5vZm9sbG93Ij5QbHVnZ2FibGUgVUkgYW5kIG90aGVyIGNhbGxiYWNrIHJlZ2lzdGVy
aW5nPC9hPi4gUmFoX3Bvc3RfdmVyc2lvbiYjODIxNztzIGNhbGxiYWNrcyBhcmUgYXMgZm9s
bG93cy48L3A+Cgo8cD48c3Ryb25nPnJhaF9wb3N0X3ZlcnNpb25zLnJldmlzaW9uX2NyZWF0
ZWQ8L3N0cm9uZz48YnIgLz4KSXMgY2FsbGVkIHdoZW4gYSBuZXcgcmV2aXNpb24gaXMgc3Vj
Y2Vzc2Z1bGx5IGNyZWF0ZWQuIFJldmlzaW9uIGRhdGEgaXMgcGFzc2VkIHRvIHRoZSBob29r
ZWQgZnVuY3Rpb24uIFRoZSByZXZpc2lvbiBkYXRhIGlzIHRoZSBzYW1lIGFycmF5IG1hcCBh
cyBwYXNzZWQgdG8gdGhlIDxhIGhyZWY9IiNyYWhfcG9zdF92ZXJzaW9ucy1jcmVhdGVfcmV2
aXNpb24iIHJlbD0ibm9mb2xsb3ciPnJhaF9wb3N0X3ZlcnNpb246OmNyZWF0ZV9yZXZpc2lv
bjwvYT4gbWV0aG9kLjwvcD4KCjxoMj5MaW1pdGF0aW9uczwvaDI+Cgo8cD5UaGVyZSBhcmUg
c29tZSBsaW1pdGF0aW9ucywgYmVjYXVzZSB0aGUgd2F5IHRoZSBwbHVnaW4gd29ya3MgaXMg
d2hhdCBpdCBpcy4gTW9zdCBvYnZpb3VzIGlzIHRoYXQgaXQgd2lsbCBvbmx5IHRyYWNrIHRo
ZSBmb3JtIHN1Ym1pdHMuIElmIHNvbWUgaW50ZXJmYWNlIGRvZXNuJiM4MjE3O3QgdXNlIGZv
cm0gc3VibWl0cywgb3Igd29ya3Mgb3V0c2lkZSB5b3VyIGJyb3dzZXIgKGRlc2t0b3AgY2xp
ZW50IG9yIHNpbWlsYXIpLCBpdCB3b24mIzgyMTc7dCB0cmFjayBpdC4gTmVpdGhlciB0aGUg
cGx1Z2luIGlzIGluZm9ybWVkIGFib3V0IGRlbGV0ZSwgYW5kIHJlbmFtaW5nIGZvcm1zLCBv
ciBwYWdlcyB3aWxsIHN0YXJ0IGEgbmV3IHNldCBvZiBjaGFuZ2VzIHVuZGVyIGEgbmV3IGl0
ZW0uPC9wPgoKPGgyPkNoYW5nZWxvZzwvaDI+Cgo8aDM+VmVyc2lvbiAxLjAgJiM4MjExOyB1
cGNvbWluZzwvaDM+Cgo8dWw+Cgk8bGk+Rml4ZWQ6IFRyaW1zIGl0ZW0gbmFtZSBmcm9tIHVu
bmVlZGVkIHdoaXRlc3BhY2UgYmVmb3JlIHNhdmluZyB0aGUgcmV2aXNpb24uIEZpeGVzIGlz
c3VlIHdoZXJlIGEgbmFtZWxlc3MgaXRlbSBjb3VsZCBwb3RlbnRpYWxseSBiZSBhZGRlZCB0
byB0aGUgcmV2aXNpb24gYnJvd3Nlci48L2xpPgoJPGxpPkZpeGVkOiBpc3N1ZSB3aGVyZSBh
ZG1pbi1zaWRlIDxjb2RlPnN0ZXA8L2NvZGU+IHdhcyB1c2VkIGRpcmVjdGx5IGluIGxpbmtz
4oCcIHRhcmdldC4gSW4gc29tZSBjYXNlcyBzb21lIGxpbmtzIGNvdWxkIGJlY29tZSBpbnZh
bGlkLCBvciBjYXVzZSBleHRyYSB1bm5lZWRlZCBwcm9jZXNzaW5nIHdoaWxlIHN0aWxsIHdv
cmtpbmcuPC9saT4KPC91bD4KCjx1bD4KCTxsaT5BZGRlZDogPHNwYW4gY2xhc3M9ImNhcHMi
PkFQSTwvc3Bhbj4gYW5kIGhvb2tpbmcgcG9pbnRzIGZvciBkZXZlbG9wZXJzLiBFeHRyYSBm
dW5jdGlvbmFsaXR5IGNhbiBiZSBhZGRlZCBieSBob29raW5nIHRvIGNhbGxiYWNrIGV2ZW50
cywgYW5kIGRldmVsb3BlcnMgY2FuIGNyZWF0ZSByZXZpc2lvbnMgZGlyZWN0bHkgZnJvbSB0
aGVpciBjb2RlIChwbHVnaW5zIGV0Yykgd2l0aCBhIHNpbmdsZSBjbGFzcyBtZXRob2QuPC9s
aT4KCTxsaT5BZGRlZDogT3B0aW9uYWwgc3VwcG9ydCBmb3Igc3RvcmluZyByZXZpc2lvbiBk
YXRhIGluIHN0YXRpYyBmaWxlcywgbGVhdmluZyBvbmx5IGxlc3Mgc3RvcmFnZSBzcGFjZSBy
ZXF1aXJpbmcgbWV0YSBkYXRhIHRvIHRoZSBkYXRhYmFzZSB0YWJsZS48L2xpPgoJPGxpPkFk
ZGVkOiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NSRjwvc3Bhbj4gcHJvdGVjdGlvbi48L2xpPgoJ
PGxpPkFkZGVkOiBEb2VzbiYjODIxNzt0IHNhdmUgYSByZXZpc2lvbiBpZiBub3RoaW5nIGNo
YW5nZWQgZnJvbSB0aGUgbGF0ZXN0IHJldmlzaW9uLjwvbGk+Cgk8bGk+QWRkZWQ6IEFkbWlu
LXNpZGUgaW50ZXJmYWNlIHVzZXMgbGFuZ3VhZ2Ugc3RyaW5ncy4gVGhlIGludGVyZmFjZSBp
cyB0cmFuc2xhdGFibGUgdXNpbmcgVGV4dHBhdHRlcm4mIzgyMTc7cyBUZXh0cGFja3MuPC9s
aT4KCTxsaT5BZGRlZDogUmVtZW1iZXJzIGxpc3Rz4oCcIHNvcnRpbmcgYW5kIGZpbHRlcmlu
ZyBvcHRpb25zIGFjcm9zcyBzZXNzaW9ucy48L2xpPgoJPGxpPkFkZGVkOiBSZW5hbWluZyBh
biBpdGVtIGlzIHJlZmxlY3RlZCBpbiB0aGUgbWFpbiBpdGVtIGxpc3RpbmcsIGluc3RlYWQg
b2YgdGhlIGl0ZW0ga2VlcGluZyB0aGUgb3JpZ2luYWwgbmFtZS48L2xpPgoJPGxpPkFkZGVk
OiBMaXN0cyBjYW4gbm93IGJlIGFycmFuZ2VkIGJ5IGNsaWNraW5nIGNvbHVtbiBoZWFkaW5n
cy48L2xpPgoJPGxpPkFkZGVkOiBHcm91cCBwZXJtaXNzaW9uIGludGVncmF0aW9uLiBGb3Ig
aW5zdGFuY2UsIG5vdyBvbmx5IFB1Ymxpc2hlcnMgY2FuIHJlbW92ZSBpdGVtcywgYW5kIG9u
bHkgYXBwcm9wcmlhdGUgaW50ZXJmYWNlIGVsZW1lbnRzIGFyZSBzaG93biB0byB1c2VycyB3
aXRoIGRpZmZlcmVudCBwZXJtaXNzaW9ucy48L2xpPgoJPGxpPkFkZGVkOiBEaXJlY3QgbGlu
ayB0byBkaWZmIHRvb2wgb24gaW5kaXZpZHVhbCBpdGVtJiM4MjE3O3MgcGFnZS4gTWFrZXMg
aXQgZWFzaWVyIHRvIGNvbXBhcmUgY2hhbmdlcyB0byB0aGUgb2xkZXIgcmV2aXNpb24uPC9s
aT4KCTxsaT5DaGFuZ2VkOiBJbnRlZ3JhdGVkIHBsdWdpbiYjODIxNztzIHByZWZlcmVuY2Vz
IHRvIFRleHRwYXR0ZXJuJiM4MjE3O3MgbmF0aXZlIGFkbWluLXNpZGUgcHJlZmVyZW5jZXMg
cGFuZWwuIEFzIHN1Y2gsIGVkaXRpbmcgcHJlZmVyZW5jZXMgaXMgcmVzdHJpY3RlZCBieSBn
cm91cCBwZXJtaXNzaW9ucy48L2xpPgoJPGxpPkNoYW5nZWQ6IERpZmYgdG9vbCBub3cgdGFr
ZXMgbmV3ZXN0IGFuZCBvbGRlc3QgcmV2aXNpb24gZnJvbSB0aGUgc2VsZWN0aW9uLCBpbnN0
ZWFkIG9mIHRoZSBmaXJzdCB0d28uPC9saT4KCTxsaT5DaGFuZ2VkOiBEb2VzbiYjODIxNzt0
IGNhcnJ5IHNvcnRpbmcgb3B0aW9ucyBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu
PnMuPC9saT4KCTxsaT5JbXByb3ZlZDogU3R5bGluZywgSmF2YVNjcmlwdCBhbmQgPHNwYW4g
Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IG1hcmt1cCBzdHJ1Y3R1cmUgaW4gZ2VuZXJhbC48
L2xpPgoJPGxpPkltcHJvdmVkOiBSZWR1Y2VkIGNvbnRpbnVlcyA8Y29kZT5odG1sc3BlY2lh
bGNoYXJzKCk8L2NvZGU+IGNhbGxzIGNhdXNlZCBieSB0aGUgZGlmZiBhbGdvcml0aG0uPC9s
aT4KCTxsaT5JbXByb3ZlZDogRGF0YWJhc2UgcXVlcnkgZWZmaWNpZW5jeS4gTmV3IGluc3Rh
bGxzIGdldCBzb21lIG5ldyBpbmRleGVzIHRvby48L2xpPgoJPGxpPlJlbW92ZWQ6IEVtYWls
aW5nIGZlYXR1cmUuIFJlbGF0aXZlbHkgcG9pbnRsZXNzLCBhbmQgZGlkbiYjODIxNzt0IGRv
IGFueXRoaW5nLjwvbGk+Cgk8bGk+UmVtb3ZlZDogRmlsdGVyaW5nIGJhci4gQWxsIHRoZSBv
cHRpb25zIGFyZSBpbnRlZ3JhdGVkIHRvIGVsc2V3aGVyZSwgdG8gYXBwcm9wcmlhdGUgbG9j
YXRpb25zLiBBcyBzdWNoLCBzZXBhcmF0ZSBjbHVua3kgZmlsdGVyaW5nIGJhciBpc24mIzgy
MTc7dCBuZWVkZWQuPC9saT4KCTxsaT5SZW1vdmVkOiBwcmVmZXJlbmNlIGZpZWxkcywgaW5j
bHVkaW5nIGlkZW50aWZpY2F0aW9uIGNvZGUsIGV4Y2x1ZGVkLSBhbmQgaGlkZGVuLWZpZWxk
cyBhbmQgdHJhY2tlZCBldmVudHMuPC9saT4KCTxsaT5SZS13cml0dGVuIGluIFBIUDUtbGV2
ZWwgPHNwYW4gY2xhc3M9ImNhcHMiPk9PUDwvc3Bhbj4uIFRha2VzIGFkdmFudGFnZSBvZiBj
aGFpbmluZyBhbmQgc28gb24uPC9saT4KCTxsaT5Ob3cgcmVxdWlyZXMgVGV4dHBhdHRlcm4g
dmVyc2lvbiA0LjUuMCBvciBuZXdlci48L2xpPgo8L3VsPgoKPGgzPlZlcnNpb24gMC45ICYj
ODIxMTsgMjAxMS8wNi8xODwvaDM+Cgo8dWw+Cgk8bGk+Rml4ZWQ6IERvZXNuJiM4MjE3O3Qg
c3BpdCBvdXQgZXh0cmEgY29udGVudCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlIGlmIEphdmFT
Y3JpcHQgaXMgZGlzYWJsZWQuPC9saT4KCTxsaT5GaXhlZDogRXJyb3IgaW4gY29uZGl0aW9u
IHRoYXQgY2hvc2UgaWYgSmF2YVNjcmlwdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHBhZ2Ug
b3Igbm90LjwvbGk+Cgk8bGk+QWRkZWQ6IE5vdyBpbmZvcm1zIHRoZSB1c2VyIGlmIHJlbW92
aW5nIGl0ZW1zIGZyb20gdGhlIGRhdGFiYXNlIGZhaWxlZC48L2xpPgoJPGxpPkFkZGVkOiBV
bmluc3RhbGxlciB0aGF0IGlzIHJhbiB3aGVuIHBsdWdpbiBpcyBkZWxldGVkLiBEcm9wcyBw
bHVnaW4gc3BlY2lmaWMgdGFibGVzLjwvbGk+Cgk8bGk+Q2hhbmdlZDogTmV3IGRhdGFiYXNl
IHRhYmxlcyBnZXQgPHNwYW4gY2xhc3M9ImNhcHMiPlVURjwvc3Bhbj4tOCBhcyB0aGVpciBj
aGFyc2V0IGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiB1c2luZyBzZXJ2ZXIgZGVmYXVsdC48L2xp
PgoJPGxpPkNoYW5nZWQ6IE1ha2Ugc3VyZSBzZWxlY3Rpb24gaXNuJiM4MjE3O3QgZW1wdHku
PC9saT4KCTxsaT5DaGFuZ2VkOiBJbXByb3ZlZCBKYXZhU2NyaXB0IGJhc2VkIG11bHRpLWVk
aXQgc2NyaXB0LjwvbGk+Cgk8bGk+Tm93IGNvbXBhdGlibGUgd2l0aCBUZXh0cGF0dGVybiA0
LjQuMSBhbmQgbmV3ZXI7IHN1cHBvcnRzIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1JGPC9zcGFu
PiBwcm90ZWN0aW9uIGFkZGVkIGluIDQuNC4xLCBmcm9tIG5vdyBvbiBkb2VzbiYjODIxNzt0
IHN0b3JlIHRva2VucyBhbmQgdXNlcyB0b2tlbnMgd2hlbiByZXZlcnRpbmcgdG8gb2xkZXIg
dmVyc2lvbi48L2xpPgo8L3VsPgoKPGgzPlZlcnNpb24gMC44ICYjODIxMTsgMjAxMC8xMC8x
OTwvaDM+Cgo8dWw+Cgk8bGk+QWRkZWQgdG9vbC10aXBzIHRvIHRoZSBwYWdpbmF0aW9uJiM4
MjE3O3MganVtcCBsaW5rcyAoPGVtPkdvIHRvIHRoZSBmaXJzdCBwYWdlPC9lbT4gYW5kIDxl
bT5HbyB0byB0aGUgbGFzdCBwYWdlPC9lbT4pLjwvbGk+Cgk8bGk+UmVtb3ZlZCB1c2VybmFt
ZSBmcm9tIHNob3dpbmcgdXAgaW4gdGhlIG1haWxzLjwvbGk+Cgk8bGk+VW5pZmllZCBjb25k
aXRpb25hbCBzdGF0ZW1lbnRzOyBub3cgYWxsIHVzZSA8Y29kZT58fDwvY29kZT4gYW5kIDxj
b2RlPiZhbXA7JmFtcDs8L2NvZGU+IG9wZXJhdG9ycyBpbnN0ZWFkIG9mIHN5bm9ueW0gbWFz
aG1peG1lc3MuPC9saT4KPC91bD4KCjxoMz5WZXJzaW9uIDAuNyAmIzgyMTE7IDIwMTAvMDYv
MjE8L2gzPgoKPHVsPgoJPGxpPkZpeC9jaGFuZ2U6IERpZmYgdG9vbCBzaG93cy9jb21wYXJl
cyBhcnJheSBkYXRhIGFzIGJsb2Nrcy4gQXJyYXkmIzgyMTc7cyBhcmUgaW1wbG9kZWQgYW5k
IHZhbHVlcyBhcmUgc2VwYXJhdGVkIHdpdGggbGluZSBicmVha3MuPC9saT4KPC91bD4KCjxo
Mz5WZXJzaW9uIDAuNiAmIzgyMTE7IDIwMTAvMDYvMjA8L2gzPgoKPHVsPgoJPGxpPkZpeGVk
OiBpbnN0YW5jZXMgb2YgbWlzc2luZyA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4g
ZXNjYXBpbmcgKDxzcGFuIGNsYXNzPSJjYXBzIj5QT1NUPC9zcGFuPiBrZXlzKS48L2xpPgoJ
PGxpPkZpeGVkOiBub3cgdGhlIHBsdWdpbiBjaGVja3MgaWYgdGhlIHJldmlzaW9uZWQgZGF0
YSBjb250YWlucyBhbiBhcnJheSAoPGNvZGU+Jmx0O2lucHV0IG5hbWU9JnF1b3Q7Zm9vW2Jh
cl0mcXVvdDsgLyZndDs8L2NvZGU+IGV0YykgYW5kIHNob3dzIGl0IGNvcnJlY3RseS4gPGEg
aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0y
MzA1NDEjcDIzMDU0MSIgcmVsPSJub2ZvbGxvdyI+VGhhbmsgeW91IGZvciByZXBvcnRpbmcs
IFRKPC9hPi48L2xpPgo8L3VsPgoKPGgzPlZlcnNpb24gMC41ICYjODIxMTsgMjAxMC8wNi8x
NTwvaDM+Cgo8dWw+Cgk8bGk+UmVtb3ZlZCB0d2ljZSBwcmVzZW50ZWQgY29uZGl0aW9uYWwu
PC9saT4KPC91bD4KCjxoMz5WZXJzaW9uIDAuNCAmIzgyMTE7IDIwMTAvMDYvMTE8L2gzPgoK
PHVsPgoJPGxpPkFkZGVkIGRpZmYgdG9vbC4gVGhlIGZlYXR1cmUgaXMgZm91bmQgZnJvbSB0
aGUgbGlzdCB2aWV3JiM4MjE3O3MgbXVsdGllZGl0OiBjaGVjayB0d28gcmV2aXNpb25zIGFu
ZCBzZWxlY3QgPGVtPsKrRGlmZsK7PC9lbT4gZnJvbSB0aGUgZHJvcC1kb3duLiBUaGUgZGlm
ZiBmZWF0dXJlIHVzZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5wYXVsYnV0bGVyLm9yZyIgcmVs
PSJub2ZvbGxvdyI+UGF1bCBCdXRsZXImIzgyMTc7czwvYT4gPGEgaHJlZj0iaHR0cDovL3Bh
dWxidXRsZXIub3JnL2FyY2hpdmVzL2Etc2ltcGxlLWRpZmYtYWxnb3JpdGhtLWluLXBocC8i
IHJlbD0ibm9mb2xsb3ciPlNpbXBsZSBEaWZmIEFsZ29yaXRobTwvYT4uPC9saT4KCTxsaT5B
ZGRlZCA8ZW0+QXJlIHlvdSBzdXJlPzwvZW0+IGNoZWNrcyB0byB0aGUgbXVsdGllZGl0Ljwv
bGk+CjwvdWw+Cgo8aDM+VmVyc2lvbiAwLjMgJiM4MjExOyAyMDEwLzA2LzA5PC9oMz4KCjx1
bD4KCTxsaT5GaXhlZDogbm8gbG9uZ2VyIHVuc2V0cyBJRCBhbmQgVGl0bGUgZnJvbSB0aGUg
Zm9ybXMuIFRoZXNlIHdlcmUgbGVmdG92ZXJzIGZyb20gdGhlIGRldmVsb3BtZW50IHBlcmlv
ZC4gPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhw
P3BpZD0yMjk5NDMjcDIyOTk0MyIgcmVsPSJub2ZvbGxvdyI+VGhhbmsgeW91IGZvciByZXBv
cnRpbmcsIEphbjwvYT4uPC9saT4KPC91bD4KCjxoMz5WZXJzaW9uIDAuMiAmIzgyMTE7IDIw
MTAvMDYvMDc8L2gzPgoKPHVsPgoJPGxpPlVwZGF0ZWQgb3JpZ2luYWwgaW5zdGFsbGVyIHRv
IGFkZCBtb3JlIG1vbml0b3JlZCBwYWdlcy4gPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRw
YXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0yMjk4NTIjcDIyOTg1MiIgcmVsPSJub2Zv
bGxvdyI+VGhhbmsgeW91IGZvciByZS1wb3N0aW5nLCBEYWxlPC9hPi4gQ3VycmVudCB1c2Vy
cyBjYW4gYWRkIHRvIHRoZSBmaWVsZCBmb2xsb3dpbmcgY29kZTogPGNvZGU+YXJ0aWNsZTpl
ZGl0LCBhcnRpY2xlOmNyZWF0ZSwgYXJ0aWNsZTpwdWJsaXNoLCBhcnRpY2xlOnNhdmUsIHBh
Z2U6cGFnZV9jcmVhdGUsIHBhZ2U6cGFnZV9lZGl0LCBwYWdlOnBhZ2Vfc2F2ZSwgZm9ybTpm
b3JtX2NyZWF0ZSwgZm9ybTpmb3JtX2VkaXQsIGZvcm06Zm9ybV9zYXZlLCBwcmVmczpwcmVm
c19zYXZlLCBwcmVmczphZHZhbmNlZF9wcmVmc19zYXZlLCBjYXRlZ29yeTpjYXRfYXJ0aWNs
ZV9jcmVhdGUsIGNhdGVnb3J5OmNhdF9pbWFnZV9jcmVhdGUsIGNhdGVnb3J5OmNhdF9maWxl
X2NyZWF0ZSwgY2F0ZWdvcnk6Y2F0X2xpbmtfY3JlYXRlLCBjYXRlZ29yeTpjYXRfYXJ0aWNs
ZV9zYXZlLCBjYXRlZ29yeTpjYXRfaW1hZ2Vfc2F2ZSwgY2F0ZWdvcnk6Y2F0X2ZpbGVfc2F2
ZSwgY2F0ZWdvcnk6Y2F0X2xpbmtfc2F2ZSwgc2VjdGlvbjpzZWN0aW9uX2NyZWF0ZSwgc2Vj
dGlvbjpzZWN0aW9uX3NhdmUsIGxpbms6bGlua19wb3N0LCBsaW5rOmxpbmtfc2F2ZSwgZGlz
Y3VzczpkaXNjdXNzX3NhdmUsIGltYWdlOmltYWdlX3NhdmUsIGZpbGU6ZmlsZV9zYXZlLCBj
c3M6Y3NzX3NhdmU8L2NvZGU+PC9saT4KPC91bD4KCjxoMz5WZXJzaW9uIDAuMSAmIzgyMTE7
IDIwMTAvMDYvMDc8L2gzPgoKPHVsPgoJPGxpPkluaXRpYWwgcmVsZWFzZS48L2xpPgo8L3Vs
PiI7czozOiJtZDUiO3M6MzI6IjYxN2I3N2EzYzNjZjZlNzUxODEwNjllZTkzZmMxMTM0Ijt9

Offline

#11 2020-07-13 15:57:11

towndock
Member
From: Oriental, NC USA
Registered: 2007-04-06
Posts: 329
Website

Re: rah_post_versions plugin and Textpattern 4.8.x

etc wrote #324471:

Try this, who knows..

I’m pleased to report this works

Offline

#12 2020-07-13 18:51:18

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,473

Re: rah_post_versions plugin and Textpattern 4.8.x

etc wrote #324471:

Try this, who knows..

# Name: rah_post_versions v1.0beta...

Thank you very much, it works.

It would be great if someone would continue working on this plugin. The plugin’s provisional status remains, for example the preferences are not accessible.

Offline

Board footer

Powered by FluxBB