[Mailman-Developers] migration from Majordomo to Mailman

Heiko Rommel rommel@suse.de
Fri, 8 Mar 2002 15:16:36 +0100 (CET)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--168463740-4823034-1015596996=:8017
Content-Type: TEXT/PLAIN; charset=US-ASCII


Hi,

just in case somebody finds it usefull I'm including a perl script
that will largely easy the migration from Majordomo to Mailman 2.0 -
especially if you have more than a few lists.

The process of migration is only half-automatic since there are a
bunch of params in Majordomo which have no exact counterpart in
Mailman.  On the other hand, there are some new params in Mailman
which had to be set to a default value.

The script is far from being perfect - but it worked from me and the
208 lists I had to migrate ;-)

Heiko Rommel            phone  +49-911-740 53 696
SuSE GmbH               fax    +49-911-741 77 55
Deutschherrnstr. 15-19  mail   rommel@suse.de
90429 Nuernberg         www    http://www.suse.de/
Germany


--168463740-4823034-1015596996=:8017
Content-Type: APPLICATION/x-perl; name="majordomo2mailman.pl"
Content-Transfer-Encoding: BASE64
Content-Description: 
Content-Disposition: attachment; filename="majordomo2mailman.pl"

IyEvdXNyL2Jpbi9wZXJsIC13CgojIG1ham9yZG9tbzJtYWlsbWFuLnBsIC0g
TWlncmF0ZSBNYWpvcmRvbW8gbWFpbGluZyBsaXN0cyB0byBNYWlsbWFuIG1h
aWxpbmcgbGlzdHMKIyAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgSGVp
a28gUm9tbWVsIChyb21tZWxAc3VzZS5kZSkKCiMKIyBjb21tZW50cyBvbiBw
b3NzaWJsZSBkZWJ1ZyBtZXNzYWdlcyBkdXJpbmcgdGhlIGNvbnZlcnNpb246
CiMKIyAibm90IGFuIHZhbGlkIGVtYWlsIGFkZHJlc3MiIDogdGhvc2UgYWRk
cmVzc2VzIGFyZSByZWplY3RlZCwgaS5lLiBub3QgaW1wb3J0ZWQgaW50byB0
aGUgTWFpbG1hbiBsaXN0CiMgIm5vdCBhIG51bWVyaWMgdmFsdWUiIDogc3Vj
aCBhIHZhbHVlIHdpbGwgYmUgY29udmVydGVkIHRvIDAgKHouQi4gbWF4bGVu
Z3RoKQojICJhbHJlYWR5IHN1YnNjcmliZWQiIDogd2lsbCBvbmx5IG9uY2Ug
YmUgc3Vic2NyaWJlZCBvbiB0aGUgTWFpbG1hbiBsaXN0CiMgIi4uLnVtYnJl
bGxhLi4uIiBvciAiLi4udGFib28uLi4iIC0+IE1haWxtYW4tQWRtaW4tR3Vp
ZGUKCnVzZSBzdHJpY3Q7CnVzZSBHZXRvcHQ6Okxvbmc7CnVzZSBGY250bDsK
dXNlIFBPU0lYIHF3ICh0bXBuYW0pOwoKdXNlIHZhcnMgcXcgKAoJICAgICAk
bWFqb3Jkb21vICRteWRvbWFpbiAkbXl1cmwKCSAgICAgJGFsaWFzaW4gJGxp
c3RkaXIKCSAgICAgJGFsaWFzb3V0ICRtYWlsbWFuYmluCgkgICAgICR1bWJy
ZWxsYV9tZW1iZXJfc3VmZml4ICRwcml2YXRlIAoJICAgICAkbmV3c3NlcnZl
ciAkbmV3c3ByZWZpeAoJICAgICAkc3VzZWhhY2sgJHN1c2VhcmNodXNlcgoJ
ICAgICAkaGVscCAkZGVidWcgJHVwZGF0ZSAkYWxsICR1c2FnZW1zZwoJICAg
ICAqRkgKCSAgICAgJW1sYWxpYXNlcyAlbWxvd25lcnMgJW1sYXBwcm92ZXJz
CgkgICAgICVkZWZhdWx0bWxjb25mICVtbGNvbmYKCSAgICAgJWRlZmF1bHRt
bWNvbmYgJW1tY29uZgopOwoKIwojIGFkanVzdCB5b3VyIHNpdGUtc3BlY2lm
aWMgc2V0dGluZ3MgaGVyZQojCgokbXlkb21haW4gICAgICAgICAgICAgICA9
ICJteS5kb21haW4iOwokbWFqb3Jkb21vICAgICAgICAgICAgICA9ICJtYWpv
cmRvbW8iOyAjIHRoZSBtYXN0ZXIgTWFqb3Jkb21vIGFkZHJlc3MgZm9yIHlv
dXIgc2l0ZQokYWxpYXNpbiAgICAgICAgICAgICAgICA9ICIvdmFyL2xpYi9t
YWpvcmRvbW8vYWxpYXNlcyI7CiRsaXN0ZGlyICAgICAgICAgICAgICAgID0g
Ii92YXIvbGliL21ham9yZG9tby9saXN0cyI7CiRhbGlhc291dCAgICAgICAg
ICAgICAgID0gIi90bXAvYWxpYXNlcyI7CiRteXVybCAgICAgICAgICAgICAg
ICAgID0gImh0dHA6Ly9teS5kb21haW4vbWFpbG1hbi8iOwokbWFpbG1hbmJp
biAgICAgICAgICAgICA9ICIvdXNyL2xpYi9tYWlsbWFuL2JpbiI7CiR1bWJy
ZWxsYV9tZW1iZXJfc3VmZml4ID0gIi1vd25lciI7CiRwcml2YXRlICAgICAg
ICAgICAgICAgID0gInllcyI7ICMgaXMgdGhpcyBhIHByaXZhdGUvSW50cmFu
ZXQgc2l0ZSA/CiRuZXdzc2VydmVyICAgICAgICAgICAgID0gIm5ld3MubXku
ZG9tYWluIjsKJG5ld3NwcmVmaXggICAgICAgICAgICAgPSAiaW50ZXJuLiI7
Cgokc3VzZWhhY2sgPSAibm8iOwokc3VzZWFyY2h1c2VyID0gImFyY2hkdW1t
eSI7CgojCiMgMCkKIyBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50
cwojCgokdXNhZ2Vtc2cgPSAidXNhZ2U6IG1ham9yZG9tbzJtYWlsbWFuIFst
aHwtLWhlbHBdIFstZHwtLWRlYnVnXSBbLXV8LS11cGRhdGVdIDwgKC1hfC0t
YWxsKSB8IGxpc3Qtb2YtbWFpbGluZ2xpc3RzID4iOwoKR2V0T3B0aW9ucygK
ICAgICAgICAgICAiaHxoZWxwIiA9PiBcJGhlbHAsCgkgICAiZHxkZWJ1ZyIg
PT4gXCRkZWJ1ZywKCSAgICJhfGFsbCIgPT4gXCRhbGwsCgkgICAidXx1cGRh
dGUiID0+IFwkdXBkYXRlCikgb3IgZGllICIkdXNhZ2Vtc2dcbiI7CgppZiAo
ZGVmaW5lZCgkaGVscCkpIHsgZGllICIkdXNhZ2Vtc2dcbiI7IH0KCmlmICgo
bm90IGRlZmluZWQoJGFsbCkpIGFuZCAoQEFSR1Y8MSkpIHsgZGllICIkdXNh
Z2Vtc2dcbiI7IH0KCmlmICgkPCkgeyBkaWUgInRoaXMgc2NyaXB0IG11c3Qg
YmUgcnVuIGFzIHJvb3QhXG4iOyB9CgojCiMgMSkKIyBidWlsZCBhIGxpc3Qg
b2YgYWxsIGFsaWFzZXMgYW5kIGV4dHJhY3QgdGhlIG5hbWUgb2YgbWFpbGlu
ZyBsaXN0cyBwbHVzIHRoZWlyIG93bmVycwojCgolbWxhbGlhc2VzID0gJW1s
b3duZXJzID0gJW1sYXBwcm92ZXJzID0gKCk7CgpvcGVuIChGSCwgIjwgJGFs
aWFzaW4iKSBvciBkaWUgImNhbid0IG9wZW4gJGFsaWFzaW5cbiI7Cgp3aGls
ZSAoPEZIPikgewogICMgZmlyc3QsIGJ1aWxkIGEgbGlzdCBvZiBhbGwgYWN0
aXZlIGFsaWFzZXMgYW5kIHRoZWlyIHJlc29sdXRpb24KICBpZiAoL14oW15c
IzpdKylccyo6XHMqKC4qKSQvKSB7CiAgICAkbWxhbGlhc2VzeyQxfSA9ICQy
OwogIH0KfQoKbXkgJG1sYWxpYXM7CmZvciAkbWxhbGlhcyAoa2V5cyAlbWxh
bGlhc2VzKSB7CiAgIyBpZiB3ZSBlbmNvdW50ZXIgYW4gYWxpYXMgd2l0aCA6
aW5jbHVkZTogYXMgZXhwYW5zaW9uCiAgIyBpdCBpcyBzYXZlIHRvIGFzc3Vt
ZSB0aGF0IHRoZSBhbGlhcyBoYXMgdGhlIGZvcm0KICAjIDxtYWlsaW5nbGlz
dD4tb3V0Z29pbmcgLQogICMgdGhhdCB3YXkgd2UgZmluZCB0aGUgbmFtZXMg
b2YgYWxsIGFjdGl2ZSBtYWlsaW5nIGxpc3RzCiAgaWYgKCRtbGFsaWFzZXN7
JG1sYWxpYXN9ID1+IC9cOmluY2x1ZGVcOi8pIHsKICAgIG15ICRtbDsKICAg
ICgkbWwgPSAkbWxhbGlhcykgPX4gcy8tb3V0Z29pbmcvL2c7CiAgICAkbWxv
d25lcnN7JG1sfSA9ICRtbGFsaWFzZXN7Im93bmVyLSRtbCJ9OwogICAgJG1s
YXBwcm92ZXJzeyRtbH0gPSAkbWxhbGlhc2VzeyIkbWwtYXBwcm92YWwifTsK
ICB9Cn0KCmNsb3NlIChGSCk7CgojCiMgMikKIyBmb3IgZWFjaCBsaXN0IHJl
YWQgdGhlIE1ham9yZG9tbyBjb25maWd1cmF0aW9uIHBhcmFtcwojIGFuZCBj
cmVhdGUgYSBNYWlsbWFuIGNsb25lCiMKCm15ICRtbDsKZm9yICRtbCAoKGRl
ZmluZWQgKCRhbGwpKSA/IHNvcnQga2V5cyAlbWxvd25lcnMgOiBAQVJHVikg
ewoKICBpbml0X2RlZmF1bHRtbGNvbmYoJG1sKTsKICAlbWxjb25mID0gJWRl
ZmF1bHRtbGNvbmY7CgogIGluaXRfZGVmYXVsdG1tY29uZigkbWwpOwogICVt
bWNvbmYgPSAlZGVmYXVsdG1tY29uZjsKCiAgbXkgQHByaXZpbGVnZWQ7ICMg
YWRkcmVzc2VzIHRoYXQgYXJlIG1lbnRpb25lZCBpbiByZXN0cmljdF9wb3N0
CiAgbXkgQG1lbWJlcnM7CiAgbXkgKCRwcmltYXJ5b3duZXIsIEBzZWNvbmRh
cnlvd25lcik7CiAgbXkgKCRwcmltYXJ5YXBwcm92ZXIsIEBzZWNvbmRhcnlh
cHByb3Zlcik7CgogIG15ICgkc2tleSwgJHRlcm1pbmF0b3IpOwogIG15ICRm
aWxlbmFtZTsKICBteSBAYXJnczsKCiAgIwogICMgYSkKICAjIHBhcnNlIHRo
ZSBjb25maWd1cmF0aW9uIGZpbGUKICAjCgogIG9wZW4gKEZILCAiPCAkbGlz
dGRpci8kbWwuY29uZmlnIikgb3IgZGllICJjYW4ndCBvcGVuICRsaXN0ZGly
LyRtbC5jb25maWdcbiI7CgogIHdoaWxlICg8Rkg+KSB7CiAgICAjIGtleSA9
IHZhbHVlID8KICAgIGlmICgvXlxzKihbXj1cI1xzXSspXHMqPVxzKiguKilc
cyokLykgewogICAgICAkbWxjb25meyQxfSA9ICQyOwogICAgfQogICAgIyBr
ZXkgPDwgRU9GCiAgICAjIHZhbHVlCiAgICAjIEVPRiA/CiAgICBlbHNpZiAo
L15ccyooW148XCNcc10rKVxzKjw8XHMqKC4qKVxzKiQvKSB7CiAgICAgICgk
c2tleSwgJHRlcm1pbmF0b3IpID0gKCQxLCAkMik7CiAgICAgIHdoaWxlICg8
Rkg+KSB7CglsYXN0IGlmICgvXiR0ZXJtaW5hdG9yXHMqJC8pOwoJJG1sY29u
Znskc2tleX0gLj0gJF87CiAgICAgIH0KICAgICAgY2hvbXAgJG1sY29uZnsk
c2tleX07CiAgICB9CiAgfQoKICBjbG9zZSAoRkgpOwoKICAjCiAgIyBiKQog
ICMgdGVzdCBpZiB0aGVyZSBhcmUgc28tY2FsbGVkIGZsYWcgZmlsZXMgKGNs
dWUgdGhhdCB0aGlzIGlzIGFuIG9sZC1zdHlsZSBNYWpvcmRvbW8gbGlzdHMp
CiAgIyBhbmQgb3ZlcndyaXRlIHByZXZpb3VzbHkgcGFyc2VkIHZhbHVlcwog
ICMgKHN0b2xlbiBmcm9tIG1ham9yZG9tbzo6Y29uZmlnX3BhcnNlLnBsOiBo
YW5kbGVfZmxhZ19maWxlcygpKQogICMKCiAgaWYgKCAtZSAiJGxpc3RkaXIv
JG1sLnByaXZhdGUiKSB7CiAgICAkbWxjb25meyJnZXRfYWNjZXNzIn0gPSAi
Y2xvc2VkIjsKICAgICRtbGNvbmZ7ImluZGV4X2FjY2VzcyJ9ID0gImNsb3Nl
ZCI7CiAgICAkbWxjb25meyJ3aG9fYWNjZXNzIn0gPSAiY2xvc2VkIjsKICAg
ICRtbGNvbmZ7IndoaWNoX2FjY2VzcyJ9ID0gImNsb3NlZCI7CiAgfQoKICAk
bWxjb25meyJzdWJzY3JpYmVfcG9saWN5In0gPSAiY2xvc2VkIiBpZiAoIC1l
ICIkbGlzdGRpci8kbWwuY2xvc2VkIik7CiAgJG1sY29uZnsidW5zdWJzY3Jp
YmVfcG9saWN5In0gPSAiY2xvc2VkIiBpZiAoIC1lICIkbGlzdGRpci8kbWwu
Y2xvc2VkIik7CgogIGlmICggLWUgIiRsaXN0ZGlyLyRtbC5hdXRvIiAmJiAt
ZSAiJGxpc3RkaXIvJG1sLmNsb3NlZCIpIHsKICAgIHByaW50IFNUREVSUiAi
c293b2hsICRtbC5hdXRvIGFscyBhdWNoICRtbC5jbG9zZWQgZXhpc3RpZXJl
bi4gV+RobGUgJG1sLmNsb3NlZFxuIjsgCiAgfQogIGVsc2UgewogICAgJG1s
Y29uZnsic3Vic2NyaWJlX3BvbGljeSJ9ID0gImF1dG8iIGlmICggLWUiJGxp
c3RkaXIvJG1sLmF1dG8iKTsgCiAgICAkbWxjb25meyJ1bnN1YnNjcmliZV9w
b2xpY3kifSA9ICJhdXRvIiBpZiAoIC1lIiRsaXN0ZGlyLyRtbC5hdXRvIik7
IAogIH0KCiAgJG1sY29uZnsic3RyaXAifSA9IDEgaWYgKCAtZSAiJGxpc3Rk
aXIvJG1sLnN0cmlwIik7CiAgJG1sY29uZnsibm9hZHZlcnRpc2UifSA9ICIv
LiovIiBpZiAoIC1lICIkbGlzdGRpci8kbWwuaGlkZGVuIik7CgogICMgYWRt
aW5fcGFzc3dkOgogICRmaWxlbmFtZSA9ICIkbGlzdGRpci8iIC4gJG1sY29u
ZnsiYWRtaW5fcGFzc3dkIn07CiAgaWYgKCAtZSAiJGxpc3RkaXIvJG1sLnBh
c3N3ZCIgKSB7CiAgICAkbWxjb25meyJhZG1pbl9wYXNzd2QifSA9IHJlYWRf
ZnJvbV9maWxlKCIkbGlzdGRpci8kbWwucGFzc3dkIik7CiAgfQogIGVsc2lm
ICggLWUgIiRmaWxlbmFtZSIgKSB7CiAgICAkbWxjb25meyJhZG1pbl9wYXNz
d2QifSA9IHJlYWRfZnJvbV9maWxlKCIkZmlsZW5hbWUiKTsKICB9CiAgIyBl
bHNlIHRha2UgaXQgdmVyYmF0aW0KCiAgIyBhcHByb3ZlX3Bhc3N3ZDoKICAk
ZmlsZW5hbWUgPSAiJGxpc3RkaXIvIiAuICRtbGNvbmZ7ImFwcHJvdmVfcGFz
c3dkIn07CiAgaWYgKCAtZSAiJGxpc3RkaXIvJG1sLnBhc3N3ZCIgKSB7CiAg
ICAkbWxjb25meyJhcHByb3ZlX3Bhc3N3ZCJ9ID0gcmVhZF9mcm9tX2ZpbGUo
IiRsaXN0ZGlyLyRtbC5wYXNzd2QiKTsKICB9CiAgZWxzaWYgKCAtZSAiJGZp
bGVuYW1lIiApIHsKICAgICRtbGNvbmZ7ImFwcHJvdmVfcGFzc3dkIn0gPSBy
ZWFkX2Zyb21fZmlsZSgiJGZpbGVuYW1lIik7CiAgfQogICMgZWxzZSB0YWtl
IGl0IHZlcmJhdGltCgogICMKICAjIGMpCiAgIyBhZGQgc29tZSBpbmZvcm1h
dGlvbiBmcm9tIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlcwogICMK
CiAgIyByZXN0cmljdF9wb3N0CiAgaWYgKGRlZmluZWQgKCRtbGNvbmZ7InJl
c3RyaWN0X3Bvc3QifSkpIHsKICAgIEBwcml2aWxlZ2VkID0gKCk7CiAgICBm
b3IgJGZpbGVuYW1lIChzcGxpdCAvXHMrLywgJG1sY29uZnsicmVzdHJpY3Rf
cG9zdCJ9KSB7CiAgICAgIG9wZW4gKEZILCAiPCAkbGlzdGRpci8kZmlsZW5h
bWUiKSBvciBkaWUgImNhbid0IG9wZW4gJGxpc3RkaXIvJGZpbGVuYW1lXG4i
OwogICAgICBwdXNoIChAcHJpdmlsZWdlZCwgPEZIPik7CiAgICAgIGNob21w
IEBwcml2aWxlZ2VkOwogICAgICBjbG9zZSAoRkgpOwogICAgfQogIH0KCiAg
aWYgKCRzdXNlaGFjayA9fiBtL3llcy9pKSB7CiAgICBAcHJpdmlsZWdlZCA9
IGdyZXAoIS8kc3VzZWFyY2h1c2VyXEAkbXlkb21haW4vaSwgQHByaXZpbGVn
ZWQpOwogIH0KCiAgJG1sY29uZnsicHJpdmlsZWdlZCJ9ID0gXEBwcml2aWxl
Z2VkOwoKICAjIG1lbWJlcnMKICBAbWVtYmVycyA9ICgpOwogIG9wZW4gKEZI
LCAiPCAkbGlzdGRpci8kbWwiKSBvciBkaWUgImNhbid0IG9wZW4gJGxpc3Rk
aXIvJG1sXG4iOwogIHB1c2ggKEBtZW1iZXJzLCA8Rkg+KTsKICBjaG9tcCBA
bWVtYmVyczsKICBjbG9zZSAoRkgpOwoKICAkbWxjb25meyJnYXRlZCJ9ID0g
Im5vIjsKCiAgaWYgKCRzdXNlaGFjayA9fiBtL3llcy9pKSB7CiAgICBpZiAo
Z3JlcCgvJHN1c2VhcmNodXNlclxAJG15ZG9tYWluL2ksIEBtZW1iZXJzKSkg
ewogICAgICAkbWxjb25meyJnYXRlZCJ9ID0gInllcyI7CiAgICB9CiAgICBA
bWVtYmVycyA9IGdyZXAoIS8kc3VzZWFyY2h1c2VyXEAkbXlkb21haW4vaSwg
QG1lbWJlcnMpOwogIH0KCiAgJG1sY29uZnsibWVtYmVycyJ9ID0gXEBtZW1i
ZXJzOwoKICAjIGludHJvIG1lc3NhZ2UKICBpZiAob3BlbiAoRkgsICI8ICRs
aXN0ZGlyLyRtbC5pbnRybyIpKSB7CiAgICB7IGxvY2FsICQvOyAkbWxjb25m
eyJpbnRybyJ9ID0gPEZIPjsgfQogIH0KICBlbHNlIHsgJG1sY29uZnsiaW50
cm8ifSA9ICIiOyB9CgogICMgaW5mbyBtZXNzYWdlCiAgaWYgKG9wZW4gKEZI
LCAiPCAkbGlzdGRpci8kbWwuaW5mbyIpKSB7CiAgICB7IGxvY2FsICQvOyAk
bWxjb25meyJpbmZvIn0gPSA8Rkg+OyB9CiAgfQogIGVsc2UgeyAkbWxjb25m
eyJpbmZvIn0gPSAiIjsgfQogIAogICMKICAjIGQpCiAgIyB0YWtlIG92ZXIg
c29tZSBvdGhlciBwYXJhbXMgaW50byB0aGUgY29uZmlndXJhdGlvbiB0YWJs
ZQogICMKCiAgJG1sY29uZnsibmFtZSJ9ID0gIiRtbCI7CgogICgkcHJpbWFy
eW93bmVyLCBAc2Vjb25kYXJ5b3duZXIpID0gCiAgICBleHBhbmRfYWxpYXMg
KHNwbGl0ICgvXHMqLFxzKi8sIGFsaWFzc3ViKCRtbG93bmVyc3skbWx9KSkp
OwoKICAoJHByaW1hcnlhcHByb3ZlciwgQHNlY29uZGFyeWFwcHJvdmVyKSA9
CiAgICBleHBhbmRfYWxpYXMgKHNwbGl0ICgvXHMqLFxzKi8sIGFsaWFzc3Vi
KCRtbGFwcHJvdmVyc3skbWx9KSkpOwoKICAkbWxjb25meyJwcmltYXJ5b3du
ZXIifSA9ICRwcmltYXJ5b3duZXI7CiAgJG1sY29uZnsic2Vjb25kYXJ5b3du
ZXIifSA9IFxAc2Vjb25kYXJ5b3duZXI7CgogICRtbGNvbmZ7InByaW1hcnlh
cHByb3ZlciJ9ID0gJHByaW1hcnlhcHByb3ZlcjsKICAkbWxjb25meyJzZWNv
bmRhcnlhcHByb3ZlciJ9ID0gXEBzZWNvbmRhcnlhcHByb3ZlcjsKCiAgIwog
ICMgZGVidWdnaW5nIG91dHB1dAogICMKCiAgaWYgKGRlZmluZWQgKCRkZWJ1
ZykpIHsKICAgIHByaW50ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMgJG1sICMj
IyMjIyMjIyMjIyMjIyMjIyMjXG4iOwogICAgZm9yICRza2V5IChzb3J0IGtl
eXMgJW1sY29uZikgewogICAgICBpZiAoZGVmaW5lZCAoJG1sY29uZnskc2tl
eX0pKSB7IHByaW50ICIkc2tleSA9ICRtbGNvbmZ7JHNrZXl9XG4iOyB9CiAg
ICAgIGVsc2UgeyBwcmludCAiJHNrZXkgPSAoPylcbiI7IH0KICAgIH0KICAg
IG15ICRwcml2OwogICAgZm9yICRwcml2IChAcHJpdmlsZWdlZCkgewogICAg
ICBwcmludCAiXHQkbWw6ICRwcml2XG4iOwogICAgfQogIH0KCiAgIwogICMg
ZSkKICAjIHdpdGggdGhlIGhlbHAgb2YgTWFpbG1hbiBjb21tYW5kcyAtIGNy
ZWF0ZSBhIG5ldyBsaXN0IGFuZCBzdWJzY3JpYmUgdGhlIG9sZCBzdGFmZgog
ICMKCiAgaWYgKGRlZmluZWQoJHVwZGF0ZSkpIHsKICAgIHByaW50ICJ1cGRh
dGluZyBjb25maWd1cmF0aW9uIG9mIFwiJG1sXCJcbiI7CiAgfQogIGVsc2Ug
ewogICAgIyBNYWlsbWFuIGxpc3RzIGNhbiBpbml0aWFsbHkgYmUgb25seSBj
cmVhdGVkIHdpdGggb25lIG93bmVyCiAgICBAYXJncyA9ICgiJG1haWxtYW5i
aW4vbmV3bGlzdCIsICItcSIsICItbyIsICIkYWxpYXNvdXQiLCAiJG1sIiwg
JG1sY29uZnsicHJpbWFyeW93bmVyIn0sICRtbGNvbmZ7ImFkbWluX3Bhc3N3
ZCJ9KTsKICAgIHN5c3RlbSAoQGFyZ3MpID09IDAgb3IgZGllICJzeXN0ZW0g
QGFyZ3MgZmFpbGVkOiAkPyI7CiAgfQogICAKICAjIE1haWxtYW4gYWNjZXB0
cyBvbmx5IHN1YnNjcmliZXIgbGlzdHMgPiAwCiAgaWYgKEBtZW1iZXJzID4g
MCkgewogICAgJGZpbGVuYW1lID0gdG1wbmFtKCk7CiAgICBvcGVuIChGSCwg
Ij4gJGZpbGVuYW1lIikgb3IgZGllICJjYW4ndCBvcGVuICRmaWxlbmFtZVxu
IjsKICAgIGZvciAkc2tleSAoQG1lbWJlcnMpIHsKICAgICAgcHJpbnQgRkgg
IiRza2V5IiAuICJcbiI7CiAgICB9CiAgICBjbG9zZSAoRkgpOwogICAgQGFy
Z3MgPSAoIiRtYWlsbWFuYmluL2FkZF9tZW1iZXJzIiwgIi1uIiwgIiRmaWxl
bmFtZSIsICItLXdlbGNvbWUtbXNnPW4iLCAiJG1sIik7CiAgICBzeXN0ZW0g
KEBhcmdzKSA9PSAwIG9yIGRpZSAic3lzdGVtIEBhcmdzIGZhaWxlZDogJD8i
OwogIH0KCiAgIwogICMgZikKICAjICJ0cmFuc2xhdGUiIHRoZSBNYWpvcmRv
bW8gbGlzdCBjb25maWd1cmF0aW9uCiAgIwoKICBtMm0oKTsKCiAgIyB3cml0
ZSB0aGUgTWFpbG1hbiBjb25maWcKCiAgJGZpbGVuYW1lID0gdG1wbmFtKCk7
CgogIG9wZW4gKEZILCAiPiAkZmlsZW5hbWUiKSBvciBkaWUgImNhbid0IG9w
ZW4gJGZpbGVuYW1lXG4iOwogIGZvciAkc2tleSAoc29ydCBrZXlzICVtbWNv
bmYpIHsKICAgIHByaW50IEZIICIkc2tleSA9ICIgLiAkbW1jb25meyRza2V5
fSAuICJcbiI7CiAgfQogIGNsb3NlIChGSCk7CgogIEBhcmdzID0gKCIkbWFp
bG1hbmJpbi9jb25maWdfbGlzdCIsICItaSIsICIkZmlsZW5hbWUiLCAiJG1s
Iik7CiAgc3lzdGVtIChAYXJncykgPT0gMCBvciBkaWUgInN5c3RlbSBAYXJn
cyBmYWlsZWQ6ICQ/IjsKCiAgdW5saW5rKCRmaWxlbmFtZSkgb3IgcHJpbnQg
U1RERVJSICJ1bmFibGUgdG8gdW5saW5rIFwiJGZpbGVuYW1lXCIhXG4iOwoK
fQoKZXhpdCAwOwoKIyMjIyMjIyMjIyMjIwojIHN1YnMKIyMjIyMjIyMjIyMj
IwoKIwojIEkgZG9uJ3Qga25vdyBob3cgdG8gd3JpdGUgUGVybCBjb2RlCiMg
dGhlcmVmb3IgSSBuZWVkIHRoaXMgc3R1cGlkIHByb2NlZHVyZSB0byBjbGVh
bmx5IHJlYWQgYSB2YWx1ZSBmcm9tIGZpbGUKIwoKc3ViIHJlYWRfZnJvbV9m
aWxlIHsKICBteSAkdmFsdWU7CiAgbG9jYWwgKkZIOwoKICBvcGVuIChGSCwg
IjwgJF9bMF0iKSBvciBkaWUgImNhbid0IG9wZW4gJF9bMF1cbiI7CiAgJHZh
bHVlID0gPEZIPjsKICBjaG9tcCAkdmFsdWU7CiAgY2xvc2UgKEZIKTsKCiAg
cmV0dXJuICR2YWx1ZTsKfQoKCiMKIyBhZGQgIkAkbXlkb21haW4iIHRvIGVh
Y2ggZWxlbWVudCB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSAiQCIKIwoKc3Vi
IGV4cGFuZF9hbGlhcyB7CiAgcmV0dXJuIG1hcCAgeyAobm90ICRfID1+IC9A
LykgPyAkXyAuPSAiXEAkbXlkb21haW4iIDogJF8gfSBAXzsKfQoKIwojIHJl
cGxhY2UgdGhlIHR5cGljYWwgb3duZXItbWFqb3Jkb21vIGFsaWFzZXMKIwoK
c3ViIGFsaWFzc3ViIHsKICBteSAkc3RyaW5nID0gJF9bMF07CgogICRzdHJp
bmcgPX4gcy8ob3duZXItJG1ham9yZG9tb3wkbWFqb3Jkb21vLW93bmVyKS9t
YWlsbWFuLW93bmVyL2dpOwoKICByZXR1cm4gJHN0cmluZzsKfQoKIwojIGRl
ZmF1bHQgdmFsdWVzIG9mIE1ham9yZG9tbyBtYWlsaW5nIGxpc3RzCiMgKHN0
b2xlbiBmcm9tIG1ham9yZG9tbzo6Y29uZmlnX3BhcnNlLnBsOiAla25vd25f
a2V5cykKIwoKc3ViIGluaXRfZGVmYXVsdG1sY29uZiB7CiAgbXkgJG1sID0g
JF9bMF07CgogICVkZWZhdWx0bWxjb25mPSggIAoJCSAgICAgJ3dlbGNvbWUn
LAkieWVzIiwKCQkgICAgICdhbm5vdW5jZW1lbnRzJywJInllcyIsCgkJICAg
ICAnZ2V0X2FjY2VzcycsCSJvcGVuIiwKCQkgICAgICdpbmRleF9hY2Nlc3Mn
LAkib3BlbiIsCgkJICAgICAnd2hvX2FjY2VzcycsCSJvcGVuIiwKCQkgICAg
ICd3aGljaF9hY2Nlc3MnLAkib3BlbiIsCgkJICAgICAnaW5mb19hY2Nlc3Mn
LAkib3BlbiIsCgkJICAgICAnaW50cm9fYWNjZXNzJywJIm9wZW4iLAoJCSAg
ICAgJ2FkdmVydGlzZScsCSIiLAoJCSAgICAgJ25vYWR2ZXJ0aXNlJywJIiIs
CgkJICAgICAnZGVzY3JpcHRpb24nLAkiIiwKCQkgICAgICdzdWJzY3JpYmVf
cG9saWN5JywJIm9wZW4iLAoJCSAgICAgJ3Vuc3Vic2NyaWJlX3BvbGljeScs
CSJvcGVuIiwKCQkgICAgICdtdW5nZWRvbWFpbicsCSJubyIsCgkJICAgICAn
YWRtaW5fcGFzc3dkJywJIiRtbC5hZG1pbiIsCgkJICAgICAnc3RyaXAnLAkJ
InllcyIsCgkJICAgICAnZGF0ZV9pbmZvJywJInllcyIsCgkJICAgICAnZGF0
ZV9pbnRybycsCSJ5ZXMiLAoJCSAgICAgJ2FyY2hpdmVfZGlyJywJIiIsCgkJ
ICAgICAnbW9kZXJhdGUnLAkibm8iLAoJCSAgICAgJ21vZGVyYXRvcicsCSIi
LAoJCSAgICAgJ2FwcHJvdmVfcGFzc3dkJywgIiRtbC5wYXNzIiwKCQkgICAg
ICdzZW5kZXInLCAJIm93bmVyLSRtbCIsCgkJICAgICAnbWF4bGVuZ3RoJywg
CSI0MDAwMCIsCgkJICAgICAncHJlY2VkZW5jZScsIAkiYnVsayIsCgkJICAg
ICAncmVwbHlfdG8nLCAJIiIsCgkJICAgICAncmVzdHJpY3RfcG9zdCcsCSIi
LAoJCSAgICAgJ3B1cmdlX3JlY2VpdmVkJywgIm5vIiwKCQkgICAgICdhZG1p
bmlzdHJpdmlhJywgCSJ5ZXMiLAoJCSAgICAgJ3Jlc2VuZF9ob3N0JywgCSIi
LAoJCSAgICAgJ2RlYnVnJywgCQkibm8iLAoJCSAgICAgJ21lc3NhZ2VfZnJv
bnRlcicsICIiLAoJCSAgICAgJ21lc3NhZ2VfZm9vdGVyJywgICIiLAoJCSAg
ICAgJ21lc3NhZ2VfaGVhZGVycycsICIiLAoJCSAgICAgJ3N1YmplY3RfcHJl
Zml4JywJIiIsCgkJICAgICAndGFib29faGVhZGVycycsCSIiLAoJCSAgICAg
J3RhYm9vX2JvZHknLAkiIiwKCQkgICAgICdkaWdlc3Rfdm9sdW1lJywJIjEi
LAoJCSAgICAgJ2RpZ2VzdF9pc3N1ZScsCSIxIiwKCQkgICAgICdkaWdlc3Rf
d29ya19kaXInLCAiIiwKCQkgICAgICdkaWdlc3RfbmFtZScsCSIkbWwiLAoJ
CSAgICAgJ2RpZ2VzdF9hcmNoaXZlJywJIiIsCgkJICAgICAnZGlnZXN0X3Jt
X2Zvb3RlcicsICAgICIiLAoJCSAgICAgJ2RpZ2VzdF9ybV9mcm9udGVyJywg
ICAiIiwgIAoJCSAgICAgJ2RpZ2VzdF9tYXhsaW5lcycsICIiLAoJCSAgICAg
J2RpZ2VzdF9tYXhkYXlzJywJIiIsCgkJICAgICAnY29tbWVudHMnLAkiIgoJ
CSAgICApOwp9CgoKIwojIE1haWxtYW4gbWFpbGluZyBsaXN0IHBhcmFtcyB0
aGF0IGFyZSBub3QgZGVyaXZlZCBmcm9tIE1ham9yZG9tbyBtYWlsaW5nIGxp
c3RzIHBhcmFtcwojIChlLmcuIGJvdW5jZV9tYXRjaGluZ19oZWFkZXJzK2Zv
cmJiaWRlbl9wb3N0ZXJzIHZzLiB0YWJvb19oZWFkZXJzK3RhYm9vX2JvZHkp
CiMgSWYgeW91IG5lZWQgb25lIG9mIHRoaXMgcGFyYW1zIHRvIGJlIHZhcmlh
YmxlIHJlbW92ZSBpdCBoZXJlIGFuZCBhZGQgc29tZSBjb2RlIHRvIHRoZSAK
IyBtYWluIHByb2NlZHVyZTsgYWRkaXRpb25hbGx5LCB5b3Ugc2hvdWxkIGNv
bXBhcmUgaXQgd2l0aCB3aGF0IHlvdSBoYXZlIGluCiMgL3Vzci9saWIvbWFp
bG1hbi9NYWlsbWFuL21tX2NmZy5weQojCgpzdWIgaW5pdF9kZWZhdWx0bW1j
b25mIHsKCiAgJWRlZmF1bHRtbWNvbmY9KCAgCgkJICAnZ29vZGJ5ZV9tc2cn
LCAiXCdcJyIsCgkJICAndW1icmVsbGFfbGlzdCcsICIwIiwKCQkgICd1bWJy
ZWxsYV9tZW1iZXJfc3VmZml4JywgIlwnJHVtYnJlbGxhX21lbWJlcl9zdWZm
aXhcJyIsCgkJICAnc2VuZF9yZW1pbmRlcnMnLCAiMCIsCgkJICAnYWRtaW5f
aW1tZWRfbm90aWZ5JywgIjEiLAoJCSAgJ2FkbWluX25vdGlmeV9tY2hhbmdl
cycsICIwIiwKCQkgICdkb250X3Jlc3BvbmRfdG9fcG9zdF9yZXF1ZXN0cycs
ICIwIiwKCQkgICdvYnNjdXJlX2FkZHJlc3NlcycsICIxIiwKCQkgICdyZXF1
aXJlX2V4cGxpY2l0X2Rlc3RpbmF0aW9uJywgIjEiLAoJCSAgJ2FjY2VwdGFi
bGVfYWxpYXNlcycsICJcIlwiXCJcblwiXCJcIlxuIiwKCQkgICdtYXhfbnVt
X3JlY2lwaWVudHMnLCAiMTAiLAoJCSAgJ2ZvcmJpZGRlbl9wb3N0ZXJzJywg
IltdIiwKCQkgICdib3VuY2VfbWF0Y2hpbmdfaGVhZGVycycsICAiXCJcIlwi
XG5cIlwiXCJcbiIsCgkJICAnYW5vbnltb3VzX2xpc3QnLCAiMCIsCgkJICAn
bm9uZGlnZXN0YWJsZScsICIxIiwKCQkgICdkaWdlc3RhYmxlJywgIjEiLAoJ
CSAgJ2RpZ2VzdF9pc19kZWZhdWx0JywgIjAiLAoJCSAgJ21pbWVfaXNfZGVm
YXVsdF9kaWdlc3QnLCAiMCIsCgkJICAnZGlnZXN0X3NpemVfdGhyZXNoaG9s
ZCcsICI0MCIsCgkJICAnZGlnZXN0X3NlbmRfcGVyaW9kaWMnLCAiMSIsCgkJ
ICAnZGlnZXN0X2hlYWRlcicsICJcJ1wnIiwKCQkgICdib3VuY2VfcHJvY2Vz
c2luZycsICIxIiwKCQkgICdtaW5pbXVtX3JlbW92YWxfZGF0ZScsICI0IiwK
CQkgICdtaW5pbXVtX3Bvc3RfY291bnRfYmVmb3JlX2JvdW5jZV9hY3Rpb24n
LCAiMyIsCgkJICAnbWF4X3Bvc3RzX2JldHdlZW5fYm91bmNlcycsICI1IiwK
CQkgICdhdXRvbWF0aWNfYm91bmNlX2FjdGlvbicsICIzIiwKCQkgICdhcmNo
aXZlX3ByaXZhdGUnLCAiMCIsCgkJICAnY2xvYmJlcl9kYXRlJywgIjEiLAoJ
CSAgJ2FyY2hpdmVfdm9sdW1lX2ZyZXF1ZW5jeScsICIxIiwKCQkgICdhdXRv
cmVzcG9uZF9wb3N0aW5ncycsICIwIiwKCQkgICdhdXRvcmVzcG9uc2VfcG9z
dGluZ3NfdGV4dCcsICJcJ1wnIiwKCQkgICdhdXRvcmVzcG9uZF9hZG1pbics
ICIwIiwKCQkgICdhdXRvcmVzcG9uc2VfYWRtaW5fdGV4dCcsICJcJ1wnIiwK
CQkgICdhdXRvcmVzcG9uZF9yZXF1ZXN0cycsICIwIiwKCQkgICdhdXRvcmVz
cG9uc2VfcmVxdWVzdF90ZXh0JywgIlwnXCciLAoJCSAgJ2F1dG9yZXNwb25z
ZV9ncmFjZXBlcmlvZCcsICI5MCIKCQkgKTsKfQoKIwojIGNvbnZlcnQgYSBN
YWpvcmRvbW8gbWFpbGluZyBsaXN0IGNvbmZpZ3VyYXRpb24gKCVtbGNvbmYp
IGludG8gYSAKIyBNYWlsbWFuIG1haWxpbmcgbGlzdCBjb25maWd1cmF0aW9u
ICglbW1jb25mKQojIG9ubHkgdGhvc2UgcGFyYW1zIGFyZSBhZmZlY3RlZCB3
aGljaCBjYW4gYmUgZGVyaXZlZCBmcm9tIE1ham9yZG9tbyAKIyBtYWlsaW5n
IGxpc3QgY29uZmlndXJhdGlvbnMKIwoKc3ViIG0ybSB7CgogIG15ICRlbGVt
OwogIG15ICRhZG1pbjsKCiAgJG1tY29uZnsicmVhbF9uYW1lIn0gPSAiXCci
IC4gJG1sY29uZnsibmFtZSJ9IC4gIlwnIjsKCiAgIyBNYWlsbWFuIGRvZXMg
bm90IGtub3cgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvd25lciBhbmQgYXBw
cm92ZXIKICBmb3IgJGFkbWluICgoJG1sY29uZnsicHJpbWFyeW93bmVyIn0s
IEB7JG1sY29uZnsic2Vjb25kYXJ5b3duZXIifX0sCgkgICAgICAgJG1sY29u
ZnsicHJpbWFyeWFwcHJvdmVyIn0sIEB7JG1sY29uZnsic2Vjb25kYXJhcHBy
b3ZlciJ9fSkpIHsKICAgICMgbWVyZ2luZyBvd25lcnMgYW5kIGFwcHJvdmVy
cyBtYXkgcmVzdWx0IGluIGEgbG9vcDoKICAgIGlmIChsYygkYWRtaW4pIG5l
IGxjKCJvd25lci0iIC4gJG1sY29uZnsibmFtZSJ9IC4gIlxAIiAuICRteWRv
bWFpbikpIHsKICAgICAgJG1tY29uZnsib3duZXIifSAuPSAiLFwnIiAuICIk
YWRtaW4iIC4gIlwnIjsKICAgIH0KICB9CiAgJG1tY29uZnsib3duZXIifSA9
fiBzL14sLy9nOwogICRtbWNvbmZ7Im93bmVyIn0gPSAiXFsiIC4gJG1tY29u
Znsib3duZXIifSAuICJcXSI7CgogICMgcmVtb3ZlIGNoYXJhY3RlcnMgdGhh
dCB3aWxsIGJyZWFrIFB5dGhvbgogICgkbW1jb25meyJkZXNjcmlwdGlvbiJ9
ID0gJG1sY29uZnsiZGVzY3JpcHRpb24ifSkgPX4gcy9cJy9cXFwnL2c7CiAg
JG1tY29uZnsiZGVzY3JpcHRpb24ifSA9ICJcJyIgLiAkbW1jb25meyJkZXNj
cmlwdGlvbiJ9IC4gIlwnIjsKCiAgJG1tY29uZnsiaW5mbyJ9ID0gIlwiXCJc
IlxuIiAuICRtbGNvbmZ7ImluZm8ifSAuICJcIlwiXCJcbiI7CgogICRtbWNv
bmZ7InN1YmplY3RfcHJlZml4In0gPSAiXCciIC4gJG1sY29uZnsic3ViamVj
dF9wcmVmaXgifSAuICJcJyI7CgogICRtbWNvbmZ7IndlbGNvbWVfbXNnIn0g
PSAiXCJcIlwiXG4iIC4gJG1sY29uZnsiaW50cm8ifSAuICJcIlwiXCJcbiI7
CgogICMgSSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyBiZWNhdXNl
IHRoZSByZXBseV90byBwYXJhbSBpbiB0aGUgbGlzdHMKICAjIEkgaGFkIHdl
cmUgbm90IGNvbmZpZ3VyZWQgY29uc2lzdGVudGx5CiAgaWYgKCRtbGNvbmZ7
InJlcGx5X3RvIn0gPX4gL1xTKy8pIHsKICAgIGlmICgkbWxjb25meyJuYW1l
In0gLiAiXEAiID1+IG0vJG1sY29uZnsicmVwbHlfdG8ifS9pKSB7CiAgICAg
ICRtbWNvbmZ7InJlcGx5X2dvZXNfdG9fbGlzdCJ9ID0gIjEiOwogICAgICAk
bW1jb25meyJyZXBseV90b19hZGRyZXNzIn0gPSAiXCdcJyI7CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgJG1tY29uZnsicmVwbHlfZ29lc190b19saXN0In0g
PSAiMiI7CiAgICAgICRtbWNvbmZ7InJlcGx5X3RvX2FkZHJlc3MifSA9ICJc
JyIgLiAkbWxjb25meyJyZXBseV90byJ9IC4gIlwnIjsKICAgIH0KICB9CiAg
ZWxzZSB7CiAgICAkbW1jb25meyJyZXBseV9nb2VzX3RvX2xpc3QifSA9ICIw
IjsKICAgICRtbWNvbmZ7InJlcGx5X3RvX2FkZHJlc3MifSA9ICJcJ1wnIjsK
ICB9CgogICRtbWNvbmZ7ImFkbWluaXN0cml2aWEifSA9ICgkbWxjb25meyJh
ZG1pbmlzdHJpdmlhIn0gPX4gbS95ZXMvaSkgPyAiMSIgOiAiMCI7CiAgJG1t
Y29uZnsic2VuZF93ZWxjb21lX21zZyJ9ID0gKCRtbGNvbmZ7IndlbGNvbWUi
fSA9fiBtL3llcy9pKSA/ICIxIiA6ICIwIjsKCiAgJG1tY29uZnsibWF4X21l
c3NhZ2Vfc2l6ZSJ9ID0gaW50ICgkbWxjb25meyJtYXhsZW5ndGgifSAvIDEw
MDApOwoKICAkbW1jb25meyJob3N0X25hbWUifSA9ICgkbWxjb25meyJyZXNl
bmRfaG9zdCJ9ID1+IC9cUysvKSA/IAogICAgJG1sY29uZnsicmVzZW5kX2hv
c3QifSA6ICJcJyIgLiAkbXlkb21haW4gLiAiXCciOwoKICAkbW1jb25meyJ3
ZWJfcGFnZV91cmwifSA9ICJcJyIgLiAkbXl1cmwgLiAiXCciOwoKICAjIHBy
b2JsZW1hdGljIHNpbmNlIE1haWxtYW4gZG9lcyBub3Qga25vdyBhY2Nlc3Mg
cGF0dGVybnMKICAjIEkgYXNzdW1lLCB0aGF0IGlmIHRoZXJlIHdhcyBnaXZl
biBhIG5vYWR2ZXJ0aXNlIHBhdHRlcm4sIHRoZQogICMgbGlzdCBzaG91bGRu
J3QgYmUgdmlzaWJsZSBhdCBhbGwKICAkbW1jb25meyJhZHZlcnRpc2VkIn0g
PSAoJG1sY29uZnsibm9hZHZlcnRpc2UifSA9fiAvXC5cKi8pID8gIjAiIDog
IjEiOwoKICAjIGNvbmZpcm0rYXBwcm92YWwgaXMgbXVjaCB0byBsb25nIHdp
bmRlZCBmb3IgcHJpdmF0ZSBzaXRlcwogICRtbWNvbmZ7InN1YnNjcmliZV9w
b2xpY3kifSA9IAogICAgKCRtbGNvbmZ7InN1YnNjcmliZV9wb2xpY3kifSA9
fiBtLyhvcGVufGF1dG8pL2kpID8gIjEiIDogCiAgICAgICgkcHJpdmF0ZSA9
fiBtL3llcy9pKSA/ICIyIiA6ICIzIjsKCiAgIyBpbiBjYXNlIHRoaXMgaXMg
YSBwcml2YXRlIHNpdGUgYWxsb3cgbGlzdCB2aXNpYmxpdHkgYXQgbW9zdAog
ICRtbWNvbmZ7InByaXZhdGVfcm9zdGVyIn0gPQogICAgKCRtbGNvbmZ7Indo
b19hY2Nlc3MifSA9fiBtL29wZW4vaSBhbmQgbm90ICRwcml2YXRlID1+IG0v
eWVzL2kpID8gIjAiIDoKICAgICAgKCRtbGNvbmZ7Indob19hY2Nlc3MifSA9
fiBtL29wZW58bGlzdC9pKSA/ICIxIiA6ICIyIjsKCiAgJG1tY29uZnsibW9k
ZXJhdGVkIn0gPSAoJG1sY29uZnsibW9kZXJhdGUifSA9fiBtL3llcy9pKSA/
ICIxIiA6ICIwIjsKICAjIHRoZXJlIGlzIG5vIHdheSB0byBhIHNldCBhIHNl
cGFyYXRlIG1vZGVyYXRvciBpbiBNYWlsbWFuCgogICMgZXh0ZXJuYWwsIHNp
bmNlIGxlbmd0aHkKICBtbV9wb3N0ZXJzKCk7CgogIGlmICgkbWxjb25meyJt
ZXNzYWdlX2Zyb250ZXIifSA9fiAvXFMrLykgewogICAgJG1tY29uZnsibXNn
X2hlYWRlciJ9ID0gIlwiXCJcIlxuIiAuICRtbGNvbmZ7Im1lc3NhZ2VfZnJv
bnRlciJ9IC4gIlwiXCJcIlxuIjsKICB9CiAgZWxzZSB7CiAgICAkbW1jb25m
eyJtc2dfaGVhZGVyIn0gPSAiXCdcJyI7CiAgfQoKICBpZiAoJG1sY29uZnsi
bWVzc2FnZV9mb290ZXIifSA9fiAvXFMrLykgewogICAgJG1tY29uZnsibXNn
X2Zvb3RlciJ9ID0gIlwiXCJcIlxuIiAuICRtbGNvbmZ7Im1lc3NhZ2VfZm9v
dGVyIn0gLiAiXCJcIlwiXG4iOwogIH0KICBlbHNlIHsKICAgICRtbWNvbmZ7
Im1zZ19mb290ZXIifSA9ICJcJ1wnIjsKICB9CgogICMgZ2F0ZXdheSB0byBu
ZXdzCiAgJG1tY29uZnsibm50cF9ob3N0In0gPSAiXCciIC4gJG5ld3NzZXJ2
ZXIgLiAiXCciOwogICRtbWNvbmZ7ImxpbmtlZF9uZXdzZ3JvdXAifSA9ICJc
JyIgLiAkbmV3c3ByZWZpeCAuICRtbGNvbmZ7Im5hbWUifSAuICJcJyI7Cgog
IGlmICgkbWxjb25meyJnYXRlZCJ9ID1+IG0veWVzL2kpIHsKICAgICRtbWNv
bmZ7ImdhdGV3YXlfdG9fbmV3cyJ9ID0gIjEiOwogICAgJG1tY29uZnsiZ2F0
ZXdheV90b19tYWlsIn0gPSAiMSI7CiAgICAkbW1jb25meyJhcmNoaXZlIn0g
PSAiMSI7CiAgfQogIGVsc2UgewogICAgJG1tY29uZnsiZ2F0ZXdheV90b19u
ZXdzIn0gPSAiMCI7CiAgICAkbW1jb25meyJnYXRld2F5X3RvX21haWwifSA9
ICIwIjsKICAgICRtbWNvbmZ7ImFyY2hpdmUifSA9ICIwIjsKICB9CgogICMg
cHJpbnQgd2FybmluZ3MgaWYgdGhpcyBzZWVtcyB0byBiZSBhbiB1bWJyZWxs
YSBsaXN0CiAgZm9yICRlbGVtIChAeyRtbGNvbmZ7InByaXZpbGVnZWQifX0s
IEB7JG1sY29uZnsibWVtYmVycyJ9fSkgewogICAgJGVsZW0gPX4gcy9cQCRt
eWRvbWFpbi8vZ2k7CiAgICBpZiAoZGVmaW5lZCgkbWxhbGlhc2VzeyRlbGVt
IC4gJHVtYnJlbGxhX21lbWJlcl9zdWZmaXh9KSkgewogICAgICBwcmludCBT
VERFUlIgIlwiIiAuICRtbGNvbmZ7Im5hbWUifSAuCgkgIlwiIHBvc3NpYmx5
IGZvcm1zIHBhcnQgb2ZmL2lzIGFuIHVtYnJlbGxhIGxpc3QsIHNpbmNlIFwi
JGVsZW1cIiBpcyBhIGxvY2FsIG1haWxpbmcgbGlzdCBhbGlhc1xuIjsgICAK
ICAgIH0KICB9CgogICMgcHJpbnQgd2FybmluZ3MgaWYgd2UgZW5jb3VudGVy
ZWQgYSBUYWJvby1IZWFkZXIgb3IgVGFib28tQm9keQogIGlmICgkbWxjb25m
eyJ0YWJvb19oZWFkZXJzIn0gPX4gL1xTKy8gb3IgJG1sY29uZnsidGFib29f
Ym9keSJ9ID1+IC9cUysvKSB7CiAgICBwcmludCBTVERFUlIgIlwiIiAuICRt
bGNvbmZ7Im5hbWUifSAuICJcIiB0YWJvb19oZWFkZXJzIG9yIHRhYm9vX2Jv
ZHkgc2VlbSB0byBiZSBzZXQgLSBwbGVhc2UgY2hlY2sgbWFudWFsbHkuXG4i
OwogIH0KfQoKIwojIHdpdGggc29tZSBzZXQgdGhlb3J5IG9uIHRoZSBtZW1i
ZXIgYW5kIHByaXZpbGlnZWQgbGlzdCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSBw
YXJhbXMKIyAkbW1jb25meyJtZW1iZXJfcG9zdGluZ19vbmx5In0gYW5kICRt
bWNvbmZ7InBvc3RlcnMifQojCgpzdWIgbW1fcG9zdGVycyB7CiAgaWYgKCRt
bGNvbmZ7InJlc3RyaWN0X3Bvc3QifSA9fiAvXFMrLykgewogICAgbXkgJXBy
aXZpbGVnZWQgPSAoKTsKICAgIG15ICVtZW1iZXJzID0gKCk7CiAgICBteSAk
a2V5OwoKICAgIGZvcmVhY2ggJGtleSAoQHskbWxjb25meyJwcml2aWxlZ2Vk
In19KSB7ICRwcml2aWxlZ2VkeyRrZXl9ID0gIk9LIjsgfQogICAgZm9yZWFj
aCAka2V5IChAeyRtbGNvbmZ7Im1lbWJlcnMifX0pIHsgJG1lbWJlcnN7JGtl
eX0gPSAiT0siOyB9CgogICAgIyBhcmUgYWxsIG1lbWJlcnMgcHJpdmlsZWdl
ZCwgdG9vID8KICAgIG15ICRpbmNsdWRlZCA9IDE7CiAgICBmb3JlYWNoICRr
ZXkgKGtleXMgJW1lbWJlcnMpIHsKICAgICAgaWYgKG5vdCBleGlzdHMgJHBy
aXZpbGVnZWR7JGtleX0pIHsKCSRpbmNsdWRlZCA9IDA7CglsYXN0OwogICAg
ICB9CiAgICB9CiAgICBpZiAoJGluY2x1ZGVkKSB7CiAgICAgICRtbWNvbmZ7
Im1lbWJlcl9wb3N0aW5nX29ubHkifSA9ICIxIjsKCiAgICAgICMgcG9zdGVy
cyA9IHByaXZpbGVnZWQgLSBtZW1iZXJzOgogICAgICBteSAlZGlmZiA9ICVw
cml2aWxlZ2VkOwogICAgICBmb3JlYWNoICRrZXkgKGtleXMgJW1lbWJlcnMp
IHsKCWRlbGV0ZSAkZGlmZnska2V5fSBpZiBleGlzdHMgJG1lbWJlcnN7JGtl
eX07CiAgICAgIH0KCiAgICAgICRtbWNvbmZ7InBvc3RlcnMifSA9ICIiOwog
ICAgICBmb3IgJGtleSAoc29ydCBrZXlzICVkaWZmKSB7CgkkbW1jb25meyJw
b3N0ZXJzIn0gLj0gIixcJyIgLiAka2V5IC4gIlwnIjsKICAgICAgfQogICAg
ICAkbW1jb25meyJwb3N0ZXJzIn0gPX4gcy9eLC8vZzsKICAgICAgJG1tY29u
ZnsicG9zdGVycyJ9ID0gIlsiIC4gJG1tY29uZnsicG9zdGVycyJ9IC4gIl0i
OwogICAgfQogICAgZWxzZSB7CiAgICAgICRtbWNvbmZ7Im1lbWJlcl9wb3N0
aW5nX29ubHkifSA9ICIwIjsKCiAgICAgICMgcG9zdGVycyA9IHByaXZpbGVn
ZWQ6CiAgICAgICRtbWNvbmZ7InBvc3RlcnMifSA9ICIiOwogICAgICBmb3Ig
JGtleSAoc29ydCBrZXlzICVwcml2aWxlZ2VkKSB7CgkkbW1jb25meyJwb3N0
ZXJzIn0gLj0gIixcJyIgLiAka2V5IC4gIlwnIjsKICAgICAgfQogICAgICAk
bW1jb25meyJwb3N0ZXJzIn0gPX4gcy9eLC8vZzsKICAgICAgJG1tY29uZnsi
cG9zdGVycyJ9ID0gIlsiIC4gJG1tY29uZnsicG9zdGVycyJ9IC4gIl0iOwog
ICAgfQogIH0KICBlbHNlIHsKICAgICRtbWNvbmZ7Im1lbWJlcl9wb3N0aW5n
X29ubHkifSA9ICIwIjsKICAgICRtbWNvbmZ7InBvc3RlcnMifSA9ICJbXSI7
CiAgfQp9Cgo=
--168463740-4823034-1015596996=:8017--