porting of m2crypto on python 3

Matej Cepl <[email protected]> Sat, 19 Jan 2013 20:28:51 +0100
Newsgroups gmane.comp.python.cryptography
Message-ID <[email protected]>
SGksCgpJIGhhdmUgdHJpZWQgdG8gZ2l2ZSBhbm90aGVyIHNob3QgdG8KaHR0cHM6Ly9idWd6aWxs
YS5vc2Fmb3VuZGF0aW9uLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NTMgKCJQeXRob24gMy4qCnN1
cHBvcnQiIGZvciBtMmNyeXB0bykuIE15IGN1cnJlbnQgcmVwbyBpcwpodHRwOi8vbHV0aGVyLmNl
cGxvdmkuY3ovZ2l0L20yY3J5cHRvLmdpdC8gKGJyYW5jaCAicHl0aG9uMyIpLgoKQnVpbGQgcnVu
cyB3aXRob3V0IGVycm9ycyAoYnV0IHdpdGggdG9ucyBvZiB3YXJuaW5nczsgc2VlIGJlbG93IHRo
ZSBsb2cKb2YgcHl0aG9uMyBzZXR1cC5weSBidWlsZCksIGJ1dCB3aGVuIEkgdHJ5IHRvIGltcG9y
dCBjcmVhdGVkIGJ1aWxkIEkgZ2V0CnVuZGVmaW5lZCBzeW1ib2w6CgptYXRlakB3eWNsaWZmOiBN
MkNyeXB0byAocHl0aG9uMyAlKSQgcHl0aG9uMwpQeXRob24gMy4zLjAgKGRlZmF1bHQsIE9jdCAg
MiAyMDEyLCAwOToyNzoxMSkKW0dDQyA0LjcuMiAyMDEyMDkyMSAoUmVkIEhhdCA0LjcuMi0yKV0g
b24gbGludXgKVHlwZSAiaGVscCIsICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2Ui
IGZvciBtb3JlIGluZm9ybWF0aW9uLgo+Pj4gaW1wb3J0IF9fbTJjcnlwdG8KVHJhY2ViYWNrICht
b3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1
bGU+CkltcG9ydEVycm9yOiAuL19fbTJjcnlwdG8uY3B5dGhvbi0zM20uc286IHVuZGVmaW5lZCBz
eW1ib2w6IFB5RmlsZV9DaGVjawo+Pj4KClRoYXQncyBwcm9iYWJseSBwcm9ibGVtIHdpdGggU1dJ
RywgaXNuJ3QgKEkgZG9uJ3QgaGF2ZSBQeUZpbGVfQ2hlY2sKYW55d2hlcmUgaW4gbXkgc291cmNl
IGZpbGVzKT8gRG9lcyBhbnlib2R5IGhhdmUgYW55IGlkZWEgaG93IHRvIHdvcmsKYXJvdW5kIGl0
PwoKQmVzdCwKCk1hdMSbagotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQptYXRlakB3eWNsaWZmOiBtMmNyeXB0byAocHl0aG9u
MykkIC4vZmVkb3JhX3NldHVwLnNoIGJ1aWxkCnJ1bm5pbmcgYnVpbGQKcnVubmluZyBidWlsZF9w
eQpjcmVhdGluZyBidWlsZApjcmVhdGluZyBidWlsZC9saWIubGludXgteDg2XzY0LTMuMwpjcmVh
dGluZyBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRv
L3V0aWwucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlwdG8KY29weWluZyBN
MkNyeXB0by90aHJlYWRpbmcucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlw
dG8KY29weWluZyBNMkNyeXB0by9tMnhtbHJwY2xpYi5weSAtPiBidWlsZC9saWIubGludXgteDg2
XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL20ydXJsbGliMi5weSAtPiBidWlsZC9s
aWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL20ydXJsbGliLnB5
IC0+IGJ1aWxkL2xpYi5saW51eC14ODZfNjQtMy4zL00yQ3J5cHRvCmNvcHlpbmcgTTJDcnlwdG8v
bTIucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlwdG8KY29weWluZyBNMkNy
eXB0by9odHRwc2xpYi5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpj
b3B5aW5nIE0yQ3J5cHRvL2Z0cHNsaWIucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMv
TTJDcnlwdG8KY29weWluZyBNMkNyeXB0by9jYWxsYmFjay5weSAtPiBidWlsZC9saWIubGludXgt
eDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL19faW5pdF9fLnB5IC0+IGJ1aWxk
L2xpYi5saW51eC14ODZfNjQtMy4zL00yQ3J5cHRvCmNvcHlpbmcgTTJDcnlwdG8vWDUwOS5weSAt
PiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL1NN
SU1FLnB5IC0+IGJ1aWxkL2xpYi5saW51eC14ODZfNjQtMy4zL00yQ3J5cHRvCmNvcHlpbmcgTTJD
cnlwdG8vUmFuZC5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5
aW5nIE0yQ3J5cHRvL1JTQS5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0
bwpjb3B5aW5nIE0yQ3J5cHRvL1JDNC5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9N
MkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL0Vyci5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0
LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL0VuZ2luZS5weSAtPiBidWlsZC9saWIubGlu
dXgteDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL0VWUC5weSAtPiBidWlsZC9s
aWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5nIE0yQ3J5cHRvL0VDLnB5IC0+IGJ1
aWxkL2xpYi5saW51eC14ODZfNjQtMy4zL00yQ3J5cHRvCmNvcHlpbmcgTTJDcnlwdG8vRFNBLnB5
IC0+IGJ1aWxkL2xpYi5saW51eC14ODZfNjQtMy4zL00yQ3J5cHRvCmNvcHlpbmcgTTJDcnlwdG8v
REgucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlwdG8KY29weWluZyBNMkNy
eXB0by9CTi5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpjb3B5aW5n
IE0yQ3J5cHRvL0JJTy5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0bwpj
b3B5aW5nIE0yQ3J5cHRvL0F1dGhDb29raWUucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0z
LjMvTTJDcnlwdG8KY29weWluZyBNMkNyeXB0by9BU04xLnB5IC0+IGJ1aWxkL2xpYi5saW51eC14
ODZfNjQtMy4zL00yQ3J5cHRvCmNyZWF0aW5nIGJ1aWxkL2xpYi5saW51eC14ODZfNjQtMy4zL00y
Q3J5cHRvL1NTTApjb3B5aW5nIE0yQ3J5cHRvL1NTTC90aW1lb3V0LnB5IC0+IGJ1aWxkL2xpYi5s
aW51eC14ODZfNjQtMy4zL00yQ3J5cHRvL1NTTApjb3B5aW5nIE0yQ3J5cHRvL1NTTC9zc2xfZGlz
cGF0Y2hlci5weSAtPgpidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0by9TU0wKY29w
eWluZyBNMkNyeXB0by9TU0wvY2IucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJD
cnlwdG8vU1NMCmNvcHlpbmcgTTJDcnlwdG8vU1NML19faW5pdF9fLnB5IC0+IGJ1aWxkL2xpYi5s
aW51eC14ODZfNjQtMy4zL00yQ3J5cHRvL1NTTApjb3B5aW5nIE0yQ3J5cHRvL1NTTC9Ud2lzdGVk
UHJvdG9jb2xXcmFwcGVyLnB5IC0+CmJ1aWxkL2xpYi5saW51eC14ODZfNjQtMy4zL00yQ3J5cHRv
L1NTTApjb3B5aW5nIE0yQ3J5cHRvL1NTTC9TZXNzaW9uLnB5IC0+IGJ1aWxkL2xpYi5saW51eC14
ODZfNjQtMy4zL00yQ3J5cHRvL1NTTApjb3B5aW5nIE0yQ3J5cHRvL1NTTC9TU0xTZXJ2ZXIucHkg
LT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlwdG8vU1NMCmNvcHlpbmcgTTJDcnlw
dG8vU1NML0NvbnRleHQucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlwdG8v
U1NMCmNvcHlpbmcgTTJDcnlwdG8vU1NML0Nvbm5lY3Rpb24ucHkgLT4KYnVpbGQvbGliLmxpbnV4
LXg4Nl82NC0zLjMvTTJDcnlwdG8vU1NMCmNvcHlpbmcgTTJDcnlwdG8vU1NML0NpcGhlci5weSAt
PiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0by9TU0wKY29weWluZyBNMkNyeXB0
by9TU0wvQ2hlY2tlci5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0by9T
U0wKY3JlYXRpbmcgYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlwdG8vUEdQCmNvcHlp
bmcgTTJDcnlwdG8vUEdQL3BhY2tldC5weSAtPiBidWlsZC9saWIubGludXgteDg2XzY0LTMuMy9N
MkNyeXB0by9QR1AKY29weWluZyBNMkNyeXB0by9QR1AvUlNBLnB5IC0+IGJ1aWxkL2xpYi5saW51
eC14ODZfNjQtMy4zL00yQ3J5cHRvL1BHUApjb3B5aW5nIE0yQ3J5cHRvL1BHUC9QdWJsaWNLZXlS
aW5nLnB5IC0+CmJ1aWxkL2xpYi5saW51eC14ODZfNjQtMy4zL00yQ3J5cHRvL1BHUApjb3B5aW5n
IE0yQ3J5cHRvL1BHUC9QdWJsaWNLZXkucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMv
TTJDcnlwdG8vUEdQCmNvcHlpbmcgTTJDcnlwdG8vUEdQL2NvbnN0YW50cy5weSAtPiBidWlsZC9s
aWIubGludXgteDg2XzY0LTMuMy9NMkNyeXB0by9QR1AKY29weWluZyBNMkNyeXB0by9QR1AvX19p
bml0X18ucHkgLT4gYnVpbGQvbGliLmxpbnV4LXg4Nl82NC0zLjMvTTJDcnlwdG8vUEdQCnJ1bm5p
bmcgYnVpbGRfZXh0CmJ1aWxkaW5nICdNMkNyeXB0by5fX20yY3J5cHRvJyBleHRlbnNpb24Kc3dp
Z2dpbmcgU1dJRy9fbTJjcnlwdG8uaSB0byBTV0lHL19tMmNyeXB0b193cmFwLmMKc3dpZyAtcHl0
aG9uIC1JL3Vzci9pbmNsdWRlL3B5dGhvbjMuM20gLUkvdXNyL2luY2x1ZGUgLWluY2x1ZGVhbGwg
LW8KU1dJRy9fbTJjcnlwdG9fd3JhcC5jIFNXSUcvX20yY3J5cHRvLmkKL3Vzci9pbmNsdWRlL29w
ZW5zc2wvb3BlbnNzbGNvbmYteDg2XzY0Lmg6NTogV2FybmluZyAyMDU6IENQUCAjZXJyb3IKIiJE
b24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSwgdXNlIDxvcGVuc3NsL29wZW5zc2xjb25m
Lmg+IGluc3RlYWQhIiIuClNXSUcvX2Jpby5pOjY0OiBXYXJuaW5nIDQ1NDogU2V0dGluZyBhIHBv
aW50ZXIvcmVmZXJlbmNlIHZhcmlhYmxlIG1heQpsZWFrIG1lbW9yeS4KU1dJRy9fcmFuZC5pOjIx
OiBXYXJuaW5nIDQ1NDogU2V0dGluZyBhIHBvaW50ZXIvcmVmZXJlbmNlIHZhcmlhYmxlIG1heQps
ZWFrIG1lbW9yeS4KU1dJRy9fZXZwLmk6MTYyOiBXYXJuaW5nIDQ1NDogU2V0dGluZyBhIHBvaW50
ZXIvcmVmZXJlbmNlIHZhcmlhYmxlIG1heQpsZWFrIG1lbW9yeS4KU1dJRy9fZGguaTozNjogV2Fy
bmluZyA0NTQ6IFNldHRpbmcgYSBwb2ludGVyL3JlZmVyZW5jZSB2YXJpYWJsZSBtYXkKbGVhayBt
ZW1vcnkuClNXSUcvX3JzYS5pOjQzOiBXYXJuaW5nIDQ1NDogU2V0dGluZyBhIHBvaW50ZXIvcmVm
ZXJlbmNlIHZhcmlhYmxlIG1heQpsZWFrIG1lbW9yeS4KU1dJRy9fZHNhLmk6MzE6IFdhcm5pbmcg
NDU0OiBTZXR0aW5nIGEgcG9pbnRlci9yZWZlcmVuY2UgdmFyaWFibGUgbWF5CmxlYWsgbWVtb3J5
LgpTV0lHL19zc2wuaToyMTQ6IFdhcm5pbmcgNDU0OiBTZXR0aW5nIGEgcG9pbnRlci9yZWZlcmVu
Y2UgdmFyaWFibGUgbWF5CmxlYWsgbWVtb3J5LgpTV0lHL194NTA5Lmk6MzMyOiBXYXJuaW5nIDQ1
NDogU2V0dGluZyBhIHBvaW50ZXIvcmVmZXJlbmNlIHZhcmlhYmxlIG1heQpsZWFrIG1lbW9yeS4K
U1dJRy9fcGtjczcuaTo0NDogV2FybmluZyA0NTQ6IFNldHRpbmcgYSBwb2ludGVyL3JlZmVyZW5j
ZSB2YXJpYWJsZSBtYXkKbGVhayBtZW1vcnkuClNXSUcvX3BrY3M3Lmk6NDQ6IFdhcm5pbmcgNDU0
OiBTZXR0aW5nIGEgcG9pbnRlci9yZWZlcmVuY2UgdmFyaWFibGUgbWF5CmxlYWsgbWVtb3J5LgpT
V0lHL191dGlsLmk6MTE6IFdhcm5pbmcgNDU0OiBTZXR0aW5nIGEgcG9pbnRlci9yZWZlcmVuY2Ug
dmFyaWFibGUgbWF5CmxlYWsgbWVtb3J5LgpTV0lHL19lbmdpbmUuaToxNjg6IFdhcm5pbmcgNDU0
OiBTZXR0aW5nIGEgcG9pbnRlci9yZWZlcmVuY2UgdmFyaWFibGUKbWF5IGxlYWsgbWVtb3J5Lgpj
cmVhdGluZyBidWlsZC90ZW1wLmxpbnV4LXg4Nl82NC0zLjMKY3JlYXRpbmcgYnVpbGQvdGVtcC5s
aW51eC14ODZfNjQtMy4zL1NXSUcKZ2NjIC1wdGhyZWFkIC1Xbm8tdW51c2VkLXJlc3VsdCAtRERZ
TkFNSUNfQU5OT1RBVElPTlNfRU5BQkxFRD0xIC1ETkRFQlVHCi1PMiAtZyAtcGlwZSAtV2FsbCAt
V3AsLURfRk9SVElGWV9TT1VSQ0U9MiAtZmV4Y2VwdGlvbnMKLWZzdGFjay1wcm90ZWN0b3IgLS1w
YXJhbT1zc3AtYnVmZmVyLXNpemU9NCAtbTY0IC1tdHVuZT1nZW5lcmljCi1EX0dOVV9TT1VSQ0Ug
LWZQSUMgLWZ3cmFwdiAtTzIgLWcgLXBpcGUgLVdhbGwgLVdwLC1EX0ZPUlRJRllfU09VUkNFPTIK
LWZleGNlcHRpb25zIC1mc3RhY2stcHJvdGVjdG9yIC0tcGFyYW09c3NwLWJ1ZmZlci1zaXplPTQg
LW02NAotbXR1bmU9Z2VuZXJpYyAtRF9HTlVfU09VUkNFIC1mUElDIC1md3JhcHYgLWZQSUMKLUkv
dXNyL2luY2x1ZGUvcHl0aG9uMy4zbSAtSS91c3IvaW5jbHVkZSAtSS90bXAvbTJjcnlwdG8vU1dJ
RyAtYwpTV0lHL19tMmNyeXB0b193cmFwLmMgLW8KYnVpbGQvdGVtcC5saW51eC14ODZfNjQtMy4z
L1NXSUcvX20yY3J5cHRvX3dyYXAubyAtRFRIUkVBRElORwpTV0lHL19tMmNyeXB0b193cmFwLmM6
IEluIGZ1bmN0aW9uIOKAmHNzbF92ZXJpZnlfY2FsbGJhY2vigJk6ClNXSUcvX20yY3J5cHRvX3dy
YXAuYzozNDMyOjk6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMSBvZgrigJhQeVR5cGVfR2Vu
ZXJpY05ld+KAmSBmcm9tIGluY29tcGF0aWJsZSBwb2ludGVyIHR5cGUgW2VuYWJsZWQgYnkgZGVm
YXVsdF0KSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC91c3IvaW5jbHVkZS9weXRob24zLjNtL3B5dGlt
ZS5oOjY6MCwKICAgICAgICAgICAgICAgICBmcm9tIC91c3IvaW5jbHVkZS9weXRob24zLjNtL1B5
dGhvbi5oOjY1LAogICAgICAgICAgICAgICAgIGZyb20gU1dJRy9fbTJjcnlwdG9fd3JhcC5jOjEy
NjoKL3Vzci9pbmNsdWRlL3B5dGhvbjMuM20vb2JqZWN0Lmg6NDgxOjEyOiBub3RlOiBleHBlY3Rl
ZCDigJhzdHJ1Y3QKUHlUeXBlT2JqZWN0ICrigJkgYnV0IGFyZ3VtZW50IGlzIG9mIHR5cGUg4oCY
c3RydWN0IFB5T2JqZWN0ICrigJkKU1dJRy9fbTJjcnlwdG9fd3JhcC5jOiBJbiBmdW5jdGlvbiDi
gJhibl9yYW5kX3Jhbmdl4oCZOgpTV0lHL19tMmNyeXB0b193cmFwLmM6NDEzODoxNDogd2Fybmlu
ZzogYXNzaWdubWVudCBmcm9tIGluY29tcGF0aWJsZQpwb2ludGVyIHR5cGUgW2VuYWJsZWQgYnkg
ZGVmYXVsdF0KU1dJRy9fbTJjcnlwdG9fd3JhcC5jOiBJbiBmdW5jdGlvbiDigJhwa2V5X2dldF9t
b2R1bHVz4oCZOgpTV0lHL19tMmNyeXB0b193cmFwLmM6NDc1ODoxMzogd2FybmluZzogdmFsdWUg
Y29tcHV0ZWQgaXMgbm90IHVzZWQKWy1XdW51c2VkLXZhbHVlXQpTV0lHL19tMmNyeXB0b193cmFw
LmM6NDc4OToxMzogd2FybmluZzogdmFsdWUgY29tcHV0ZWQgaXMgbm90IHVzZWQKWy1XdW51c2Vk
LXZhbHVlXQpTV0lHL19tMmNyeXB0b193cmFwLmM6IEluIGZ1bmN0aW9uIOKAmHJzYV9wcml2YXRl
X2RlY3J5cHTigJk6ClNXSUcvX20yY3J5cHRvX3dyYXAuYzo1MzczOjU6IHdhcm5pbmc6IGltcGxp
Y2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uCuKAmFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXpl
4oCZIFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQpTV0lHL19tMmNyeXB0b193cmFw
LmM6NTM3Mzo5OiB3YXJuaW5nOiBhc3NpZ25tZW50IG1ha2VzIHBvaW50ZXIgZnJvbQppbnRlZ2Vy
IHdpdGhvdXQgYSBjYXN0IFtlbmFibGVkIGJ5IGRlZmF1bHRdClNXSUcvX20yY3J5cHRvX3dyYXAu
YzogSW4gZnVuY3Rpb24g4oCYcnNhX3BhZGRpbmdfYWRkX3BrY3MxX3Bzc+KAmToKU1dJRy9fbTJj
cnlwdG9fd3JhcC5jOjU0NDk6OTogd2FybmluZzogYXNzaWdubWVudCBtYWtlcyBwb2ludGVyIGZy
b20KaW50ZWdlciB3aXRob3V0IGEgY2FzdCBbZW5hYmxlZCBieSBkZWZhdWx0XQpTV0lHL19tMmNy
eXB0b193cmFwLmM6IEluIGZ1bmN0aW9uIOKAmHg1MDl2M19saGFzaOKAmToKU1dJRy9fbTJjcnlw
dG9fd3JhcC5jOjY2NTk6NTogd2FybmluZzogcmV0dXJuIGZyb20gaW5jb21wYXRpYmxlIHBvaW50
ZXIKdHlwZSBbZW5hYmxlZCBieSBkZWZhdWx0XQpTV0lHL19tMmNyeXB0b193cmFwLmM6IEluIGZ1
bmN0aW9uIOKAmGFzbjFfaW50ZWdlcl9zZXTigJk6ClNXSUcvX20yY3J5cHRvX3dyYXAuYzo2ODcz
Ojk6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uCuKAmFB5SW50X0FT
X0xPTkfigJkgWy1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dClNXSUcvX20yY3J5cHRv
X3dyYXAuYzogSW4gZnVuY3Rpb24g4oCYdXRpbF9zdHJpbmdfdG9faGV44oCZOgpTV0lHL19tMmNy
eXB0b193cmFwLmM6NzE3Njo5OiB3YXJuaW5nOiBhc3NpZ25tZW50IG1ha2VzIHBvaW50ZXIgZnJv
bQppbnRlZ2VyIHdpdGhvdXQgYSBjYXN0IFtlbmFibGVkIGJ5IGRlZmF1bHRdClNXSUcvX20yY3J5
cHRvX3dyYXAuYzogSW4gZnVuY3Rpb24g4oCYX3dyYXBfZXJyX3ByaW50X2Vycm9yc19mcOKAmToK
U1dJRy9fbTJjcnlwdG9fd3JhcC5jOjg1NDU6NTogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRp
b24gb2YgZnVuY3Rpb24K4oCYUHlGaWxlX0NoZWNr4oCZIFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRl
Y2xhcmF0aW9uXQpTV0lHL19tMmNyeXB0b193cmFwLmM6ODU0OTo1OiB3YXJuaW5nOiBpbXBsaWNp
dCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbgrigJhQeUZpbGVfQXNGaWxl4oCZIFstV2ltcGxpY2l0
LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQpTV0lHL19tMmNyeXB0b193cmFwLmM6ODU0OTo5OiB3YXJu
aW5nOiBhc3NpZ25tZW50IG1ha2VzIHBvaW50ZXIgZnJvbQppbnRlZ2VyIHdpdGhvdXQgYSBjYXN0
IFtlbmFibGVkIGJ5IGRlZmF1bHRdClNXSUcvX20yY3J5cHRvX3dyYXAuYzogSW4gZnVuY3Rpb24g
4oCYX3dyYXBfYmlvX25ld19mcOKAmToKU1dJRy9fbTJjcnlwdG9fd3JhcC5jOjg4NjQ6OTogd2Fy
bmluZzogYXNzaWdubWVudCBtYWtlcyBwb2ludGVyIGZyb20KaW50ZWdlciB3aXRob3V0IGEgY2Fz
dCBbZW5hYmxlZCBieSBkZWZhdWx0XQpTV0lHL19tMmNyeXB0b193cmFwLmM6IEluIGZ1bmN0aW9u
IOKAmF93cmFwX3g1MDlfd3JpdGVfcGVtX2ZpbGXigJk6ClNXSUcvX20yY3J5cHRvX3dyYXAuYzox
OTMwMzo5OiB3YXJuaW5nOiBhc3NpZ25tZW50IG1ha2VzIHBvaW50ZXIgZnJvbQppbnRlZ2VyIHdp
dGhvdXQgYSBjYXN0IFtlbmFibGVkIGJ5IGRlZmF1bHRdClNXSUcvX20yY3J5cHRvX3dyYXAuYzog
SW4gZnVuY3Rpb24g4oCYX3dyYXBfeDUwOV9uYW1lX3ByaW50X2V4X2Zw4oCZOgpTV0lHL19tMmNy
eXB0b193cmFwLmM6MjAwODY6OTogd2FybmluZzogYXNzaWdubWVudCBtYWtlcyBwb2ludGVyIGZy
b20KaW50ZWdlciB3aXRob3V0IGEgY2FzdCBbZW5hYmxlZCBieSBkZWZhdWx0XQpTV0lHL19tMmNy
eXB0b193cmFwLmM6IEluIGZ1bmN0aW9uIOKAmFNXSUdfSW5pdGlhbGl6ZU1vZHVsZeKAmToKU1dJ
Ry9fbTJjcnlwdG9fd3JhcC5jOjI2NTUwOjM6IHdhcm5pbmc6IHN0YXRlbWVudCB3aXRoIG5vIGVm
ZmVjdApbLVd1bnVzZWQtdmFsdWVdCmdjYyAtcHRocmVhZCAtc2hhcmVkIC1XbCwteixyZWxybwpi
dWlsZC90ZW1wLmxpbnV4LXg4Nl82NC0zLjMvU1dJRy9fbTJjcnlwdG9fd3JhcC5vIC1ML3Vzci9s
aWI2NAotTC91c3IvbGliIC1scHl0aG9uMy4zbSAtbHNzbCAtbGNyeXB0byAtbwpidWlsZC9saWIu
bGludXgteDg2XzY0LTMuMy9NMkNyeXB0by9fX20yY3J5cHRvLmNweXRob24tMzNtLnNvCm1hdGVq
QHd5Y2xpZmY6IG0yY3J5cHRvIChweXRob24zICUpJAoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KcHl0aG9uLWNyeXB0byBtYWlsaW5nIGxpc3QKcHl0aG9u
LWNyeXB0b0BweXRob24ub3JnCmh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5m
by9weXRob24tY3J5cHRvCg==