[Distutils] MSVC 7.0 compiler support

D. John Anderson john@AppMagic.com
Wed Sep 25 15:28:38 2002


This is a multi-part message in MIME format.
--------------050205080106050805010408
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Distutils doesn't work with the current version of the Microsoft 
compiler (7.0). I've got a patch that fixes it (context diffs of 
msvccompiler.py against the current code in CVS, see attachment). What's 
the best way to get the patch into the project?

John Anderson



--------------050205080106050805010408
Content-Type: application/x-java-applet;version=1.1.1;
 name="DistutilsPatch"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="DistutilsPatch"

KioqIEQ6L0pvaG4vb3NhZi9kaXN0dXRpbHMvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQlU
dWUgSnVuIDE4IDEyOjA4OjQwIDIwMDIKLS0tIEQ6L0pvaG4vb3NhZi9iaW4vTGliL3NpdGUt
cGFja2FnZXMvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQlXZWQgU2VwIDI1IDA5OjMwOjI0
IDIwMDIKKioqKioqKioqKioqKioqIGZvciB0aGUgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8u
IiIiCioqKiA3LDE2ICoqKioKICAjIGNyZWF0ZWQgMTk5OS8wOC8xOSwgUGVycnkgU3RvbGwK
ICAjIGhhY2tlZCBieSBSb2JpbiBCZWNrZXIgYW5kIFRob21hcyBIZWxsZXIgdG8gZG8gYSBi
ZXR0ZXIgam9iIG9mCiAgIyAgIGZpbmRpbmcgRGV2U3R1ZGlvICh0aHJvdWdoIHRoZSByZWdp
c3RyeSkKICAKICBfX3JldmlzaW9uX18gPSAiJElkOiBtc3ZjY29tcGlsZXIucHksdiAxLjQ5
IDIwMDIvMDYvMTggMTk6MDg6NDAgamh5bHRvbiBFeHAgJCIKICAKISBpbXBvcnQgc3lzLCBv
cywgc3RyaW5nCiAgZnJvbSB0eXBlcyBpbXBvcnQgKgogIGZyb20gZGlzdHV0aWxzLmVycm9y
cyBpbXBvcnQgXAogICAgICAgRGlzdHV0aWxzRXhlY0Vycm9yLCBEaXN0dXRpbHNQbGF0Zm9y
bUVycm9yLCBcCi0tLSA3LDIyIC0tLS0KICAjIGNyZWF0ZWQgMTk5OS8wOC8xOSwgUGVycnkg
U3RvbGwKICAjIGhhY2tlZCBieSBSb2JpbiBCZWNrZXIgYW5kIFRob21hcyBIZWxsZXIgdG8g
ZG8gYSBiZXR0ZXIgam9iIG9mCiAgIyAgIGZpbmRpbmcgRGV2U3R1ZGlvICh0aHJvdWdoIHRo
ZSByZWdpc3RyeSkKKyAjCisgIyBSZWhhY2tlZCBieSBKb2huIEFuZGVyc29uIHRvIGZpeCBw
cm9ibGVtcyB3aXRoIGZpbmRpbmcgRGV2U3R1ZGlvCisgIyAgIHRocm91Z2ggdGhlIHJlZ2lz
dHJ5LiBVc2luZyB0aGUgcmVnaXN0cnkgaXMgYWx3YXlzIGdvaW5nIHRvIGJlCisgIyAgIGFu
IGluZXhhY3Qgc2NpZW5jZSwgc2luY2UgTWljcm9zb2Z0IGNhbiBhbHdheXMgY2hhbmdlIGhv
dyB0aGV5CisgIyAgIHN0b3JlIGRhdGEgaW4gdGhlIHJlZ2lzdHJ5IGFuZCB0aGUgZGF0YSBp
biB0aGUgcmVnaXN0cnkgaXNuJ3QKKyAjICAgZG9jdW1lbnRlZC4KICAKICBfX3JldmlzaW9u
X18gPSAiJElkOiBtc3ZjY29tcGlsZXIucHksdiAxLjQ5IDIwMDIvMDYvMTggMTk6MDg6NDAg
amh5bHRvbiBFeHAgJCIKICAKISBpbXBvcnQgc3lzLCBvcywgc3RyaW5nLCBsb2cKICBmcm9t
IHR5cGVzIGltcG9ydCAqCiAgZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBcCiAgICAg
ICBEaXN0dXRpbHNFeGVjRXJyb3IsIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIFwKKioqKioq
KioqKioqKioqIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKioqIDQ0LDQ5ICoqKioKLS0tIDUwLDU5
IC0tLS0KICAgICAgICAgIFJlZ0Vycm9yID0gd2luMzJhcGkuZXJyb3IKICAKICAgICAgZXhj
ZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgbG9nLmluZm8oIldhcm5pbmc6IENhbid0IHJl
YWQgcmVnaXN0cnkgdG8gZmluZCB0aGUgIgorICAgICAgICAgICAgICAgICAgIm5lY2Vzc2Fy
eSBjb21waWxlciBzZXR0aW5nXG4iCisgICAgICAgICAgICAgICAgICAiTWFrZSBzdXJlIHRo
YXQgUHl0aG9uIG1vZHVsZXMgX3dpbnJlZywgIgorICAgICAgICAgICAgICAgICAgIndpbjMy
YXBpIG9yIHdpbjMyY29uIGFyZSBpbnN0YWxsZWQuIikKICAgICAgICAgIHBhc3MKICAKICBp
ZiBfY2FuX3JlYWRfcmVnOgoqKioqKioqKioqKioqKiogZGVmIGdldF9kZXZzdHVkaW9fdmVy
c2lvbnMgKCk6CioqKiA2NCw3MCAqKioqCiAgICAgIGlmIG5vdCBfY2FuX3JlYWRfcmVnOgog
ICAgICAgICAgcmV0dXJuIFtdCiAgCiEgICAgIEsgPSAnU29mdHdhcmVcXE1pY3Jvc29mdFxc
RGV2c3R1ZGlvJwogICAgICBMID0gW10KICAgICAgZm9yIGJhc2UgaW4gKEhLRVlfQ0xBU1NF
U19ST09ULAogICAgICAgICAgICAgICAgICAgSEtFWV9MT0NBTF9NQUNISU5FLAotLS0gNzQs
ODAgLS0tLQogICAgICBpZiBub3QgX2Nhbl9yZWFkX3JlZzoKICAgICAgICAgIHJldHVybiBb
XQogIAohICAgICBLID0gJ1NPRlRXQVJFXFxNaWNyb3NvZnRcXFZpc3VhbFN0dWRpbycKICAg
ICAgTCA9IFtdCiAgICAgIGZvciBiYXNlIGluIChIS0VZX0NMQVNTRVNfUk9PVCwKICAgICAg
ICAgICAgICAgICAgIEhLRVlfTE9DQUxfTUFDSElORSwKKioqKioqKioqKioqKioqIGRlZiBn
ZXRfZGV2c3R1ZGlvX3ZlcnNpb25zICgpOgoqKiogODMsODggKioqKgotLS0gOTMsMTAwIC0t
LS0KICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCiAgICAgICAgICBleGNlcHQgUmVnRXJy
b3I6CiAgICAgICAgICAgICAgcGFzcworICAgICBpZiBub3QgTDoKKyAgICAgICAgIGxvZy5p
bmZvKCJXYXJuaW5nOiBDYW4ndCBmaW5kIHRoZSBNaWNyb3NvZnQgY29tcGlsZXIgaW4gdGhl
IHJlZ2lzdHJ5IikKICAgICAgTC5zb3J0KCkKICAgICAgTC5yZXZlcnNlKCkKICAgICAgcmV0
dXJuIEwKKioqKioqKioqKioqKioqIGRlZiBnZXRfZGV2c3R1ZGlvX3ZlcnNpb25zICgpOgoq
KiogOTAsOTUgKioqKgotLS0gMTAyLDE5MCAtLS0tCiAgIyBnZXRfZGV2c3R1ZGlvX3ZlcnNp
b25zICgpCiAgCiAgCisgZGVmIGNvbnZlcnRfbWJjcyAoc3RyaW5nKToKKyAgICAgIiIiQ29u
dmVydCBmcm9tIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0IChtYmNzKSBpZiBwb3NzaWJsZS4i
IiIKKyAKKyAgICAgaWYgaGFzYXR0cihzdHJpbmcsICJlbmNvZGUiKToKKyAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuZW5jb2RlKCJtYmNzIikKKyAgICAg
ICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CisgICAgICAgICAgICAgcGFzcworICAgICByZXR1
cm4gc3RyaW5nCisgIyBjb252ZXJ0X21iY3MoKQorIAorIAorIGRlZiByZWFkX2tleSAoYmFz
ZSwga2V5LCBsb3dlckNhc2VLZXlzKToKKyAgICAgIiIiT3BlbiB0aGUgcmVnaXN0cnkga2V5
IGFuZCByZXR1cm5zIGEgZGljdGlvbmFyeSBvZiB0aGUgbmFtZSB2YWx1ZXMKKyAgICAgICAg
cGFpcnMuIENvbnZlcnRzIGFsbCB0aGUgbmFtZXMgdG8gbG93ZXJDYXNlS2V5cyB3aGVuIGxv
d2VyQ2FzZUtleXMgaXMgdHJ1ZS4iIiIKKyAKKyAgICAgaGFuZGxlID0gUmVnT3BlbktleUV4
KGJhc2UsIGtleSkKKyAgICAgZGljdCA9IHt9CisgICAgIGkgPSAwCisgICAgIHdoaWxlIDE6
CisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgKG5hbWUsIHZhbHVlLCB0eXBlKSA9IFJl
Z0VudW1WYWx1ZShoYW5kbGUsIGkpCisgICAgICAgICAgICAgaWYgbG93ZXJDYXNlS2V5czoK
KyAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQorICAgICAgICAgICAgIGRp
Y3RbY29udmVydF9tYmNzKG5hbWUpXSA9IGNvbnZlcnRfbWJjcyh2YWx1ZSkKKyAgICAgICAg
IGV4Y2VwdCBSZWdFcnJvcjoKKyAgICAgICAgICAgICBicmVhaworICAgICAgICAgaSA9IGkg
KyAxCisgICAgIHJldHVybiBkaWN0CisgIyByZWFkX2tleSgpCisgCisgCisgVkNfSU5TVEFM
TF9ESVIgPSAiJChWQ0luc3RhbGxEaXIpIgorIFZTX0lOU1RBTExfRElSID0gIiQoVlNJbnN0
YWxsRGlyKSIKKyBGUkFNRVdPUktfRElSID0gIiQoRnJhbWV3b3JrRGlyKSIKKyBGUkFNRVdP
UktfU0RLX0RJUiA9ICIkKEZyYW1ld29ya1NES0RpcikiCisgRlJBTUVXT1JLX1ZFUlNJT04g
PSAiJChGcmFtZXdvcmtWZXJzaW9uKSIKKyBfaW5pdGlhbGl6ZWRNYWNyb3MgPSAwCisgCisg
ZGVmIGV4cGFuZF9tYWNyb3MgKHN0cmluZywgYmFzZSwgdmVyc2lvbiwgbnVtZXJpY1ZlcnNp
b24pOgorICAgICAiIiJFeHBhbmQgbWFjcm9zIG9mIHRoZSBmb3JtICQoVkNJbnN0YWxsRGly
KSwgJChWQ0luc3RhbGxEaXIpLAorICAgICAgICAkKEZyYW1ld29ya0RpciksICQoRnJhbWV3
b3JrU0RLRGlyKSBpbiBwYXRocy4KKyAgICAgICAgVGhlIGxvY2F0aW9ucyBvZiB0aGVzZSBt
YWNyb3MgaW4gdGhlIHJlZ2lzdHJ5IGFwcGFyZW50bHkgYXJlCisgICAgICAgIG5vdCBkb2N1
bWVudGVkLCBzbyB0aGV5IHdlcmUgZGV0ZXJtaW5lZCBieSBqdXN0IGxvb2tpbmcgYXJvdW5k
CisgICAgICAgIGluIHJlZ2VkaXQuIENvbnNlcXVlbnRseSAiIiIKKyAKKyAgICAgZ2xvYmFs
IF9pbml0aWFsaXplZE1hY3JvcywgVkNfSU5TVEFMTF9ESVIsIFZTX0lOU1RBTExfRElSCisg
ICAgIGdsb2JhbCBGUkFNRVdPUktfRElSLCBGUkFNRVdPUktfU0RLX0RJUgorICAgICBpZiBu
dW1lcmljVmVyc2lvbiA+PSA3LjA6CisgICAgICAgICBpZiBub3QgX2luaXRpYWxpemVkTWFj
cm9zOgorICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgX2luaXRpYWxpemVk
TWFjcm9zID0gMQorIAorICAgICAgICAgICAgICAgICBrZXkgPSAoJ1NPRlRXQVJFXFxNaWNy
b3NvZnRcXFZpc3VhbFN0dWRpb1xcJXNcXFNldHVwXFxWQycpICUgKHZlcnNpb24pCisgICAg
ICAgICAgICAgICAgIHBhaXJzID0gcmVhZF9rZXkoYmFzZSwga2V5LCAxKQorICAgICAgICAg
ICAgICAgICBWQ19JTlNUQUxMX0RJUiA9IHBhaXJzWydwcm9kdWN0ZGlyJ10KKyAKKyAgICAg
ICAgICAgICAgICAga2V5ID0gKCdTT0ZUV0FSRVxcTWljcm9zb2Z0XFxWaXN1YWxTdHVkaW9c
XCVzXFxTZXR1cFxcVlMnKSAlICh2ZXJzaW9uKQorICAgICAgICAgICAgICAgICBwYWlycyA9
IHJlYWRfa2V5KGJhc2UsIGtleSwgMSkKKyAgICAgICAgICAgICAgICAgVlNfSU5TVEFMTF9E
SVIgPSBwYWlyc1sncHJvZHVjdGRpciddCisgCisgICAgICAgICAgICAgICAgIHBhaXJzID0g
cmVhZF9rZXkgKGJhc2UsICdTT0ZUV0FSRVxcTWljcm9zb2Z0XFwuTkVURnJhbWV3b3JrJywg
MSkKKyAgICAgICAgICAgICAgICAgRlJBTUVXT1JLX0RJUiA9IHBhaXJzWydpbnN0YWxscm9v
dCddCisgICAgICAgICAgICAgICAgIEZSQU1FV09SS19TREtfRElSID0gcGFpcnNbJ3Nka2lu
c3RhbGxyb290J10KKyAgICAgICAgIAorICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9ICdT
T0ZUV0FSRVxcTWljcm9zb2Z0XFxORVQgRnJhbWV3b3JrIFNldHVwXFxQcm9kdWN0JzsKKyAg
ICAgICAgICAgICAgICAgaGFuZGxlID0gUmVnT3BlbktleUV4KGJhc2UsIGxvY2F0aW9uKQor
ICAgICAgICAgICAgICAgICBrZXkgPSBSZWdFbnVtS2V5KGhhbmRsZSwgMCkKKyAgICAgICAg
ICAgICAgICAgcGFpcnMgPSByZWFkX2tleSAoYmFzZSwgbG9jYXRpb24gKyAnXFwnICsga2V5
LCAxKQorICAgICAgICAgICAgICAgICBGUkFNRVdPUktfVkVSU0lPTiA9IHBhaXJzWyd2ZXJz
aW9uJ10KKyAKKyAgICAgICAgICAgICBleGNlcHQgUmVnRXJyb3I6CisgICAgICAgICAgICAg
ICAgIGxvZy5pbmZvKCJXYXJuaW5nOiBDYW4ndCByZWFkIHJlZ2lzdHJ5IG5vZGU6ICIgKyBr
ZXkpCisgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICBs
b2cuaW5mbygiV2FybmluZzogQ2FuJ3QgcmVhZCByZWdpc3RyeSBrZXk6IiArIEtleUVycm9y
KQorICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UgKCckKFZDSW5zdGFsbERpcikn
LCBWQ19JTlNUQUxMX0RJUikKKyAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlICgn
JChWU0luc3RhbGxEaXIpJywgVlNfSU5TVEFMTF9ESVIpCisgICAgICAgICBzdHJpbmcgPSBz
dHJpbmcucmVwbGFjZSAoJyQoRnJhbWV3b3JrRGlyKScsIEZSQU1FV09SS19ESVIpCisgICAg
ICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSAoJyQoRnJhbWV3b3JrU0RLRGlyKScsIEZS
QU1FV09SS19TREtfRElSKQorICAgICByZXR1cm4gc3RyaW5nCisgIyBleHBhbmRfbWFjcm9z
KCkKKyAKKyAKICBkZWYgZ2V0X21zdmNfcGF0aHMgKHBhdGgsIHZlcnNpb249JzYuMCcsIHBs
YXRmb3JtPSd4ODYnKToKICAgICAgIiIiR2V0IGEgbGlzdCBvZiBkZXZzdHVkaW8gZGlyZWN0
b3JpZXMgKGluY2x1ZGUsIGxpYiBvciBwYXRoKS4gIFJldHVybgogICAgICAgICBhIGxpc3Qg
b2Ygc3RyaW5nczsgd2lsbCBiZSBlbXB0eSBsaXN0IGlmIHVuYWJsZSB0byBhY2Nlc3MgdGhl
CioqKioqKioqKioqKioqKiBkZWYgZ2V0X21zdmNfcGF0aHMgKHBhdGgsIHZlcnNpb249JzYu
MCcsCioqKiAxMDEsMTM0ICoqKioKICAgICAgTCA9IFtdCiAgICAgIGlmIHBhdGg9PSdsaWIn
OgogICAgICAgICAgcGF0aD0gJ0xpYnJhcnknCiEgICAgIHBhdGggPSBzdHJpbmcudXBwZXIo
cGF0aCArICcgRGlycycpCiEgICAgIEsgPSAoJ1NvZnR3YXJlXFxNaWNyb3NvZnRcXERldnN0
dWRpb1xcJXNcXCcgKwohICAgICAgICAgICdCdWlsZCBTeXN0ZW1cXENvbXBvbmVudHNcXFBs
YXRmb3Jtc1xcV2luMzIgKCVzKVxcRGlyZWN0b3JpZXMnKSAlIFwKISAgICAgICAgICh2ZXJz
aW9uLHBsYXRmb3JtKQogICAgICBmb3IgYmFzZSBpbiAoSEtFWV9DTEFTU0VTX1JPT1QsCiAg
ICAgICAgICAgICAgICAgICBIS0VZX0xPQ0FMX01BQ0hJTkUsCiAgICAgICAgICAgICAgICAg
ICBIS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAgIEhLRVlfVVNFUlMpOgog
ICAgICAgICAgdHJ5OgohICAgICAgICAgICAgIGsgPSBSZWdPcGVuS2V5RXgoYmFzZSxLKQoh
ICAgICAgICAgICAgIGkgPSAwCiEgICAgICAgICAgICAgd2hpbGUgMToKISAgICAgICAgICAg
ICAgICAgdHJ5OgohICAgICAgICAgICAgICAgICAgICAgKHAsdix0KSA9IFJlZ0VudW1WYWx1
ZShrLGkpCiEgICAgICAgICAgICAgICAgICAgICBpZiBzdHJpbmcudXBwZXIocCkgPT0gcGF0
aDoKISAgICAgICAgICAgICAgICAgICAgICAgICBWID0gc3RyaW5nLnNwbGl0KHYsJzsnKQoh
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2IGluIFY6CiEgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGhhc2F0dHIodiwgImVuY29kZSIpOgohICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5OgohICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHYgPSB2LmVuY29kZSgibWJjcyIpCiEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgohICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhc3MKISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdiA9
PSAnJyBvciB2IGluIEw6IGNvbnRpbnVlCiEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEwuYXBwZW5kKHYpCiEgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKISAgICAgICAg
ICAgICAgICAgICAgIGkgPSBpICsgMQohICAgICAgICAgICAgICAgICBleGNlcHQgUmVnRXJy
b3I6CiEgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgZXhjZXB0IFJlZ0Vy
cm9yOgogICAgICAgICAgICAgIHBhc3MKICAgICAgcmV0dXJuIEwKLS0tIDE5NiwyMzAgLS0t
LQogICAgICBMID0gW10KICAgICAgaWYgcGF0aD09J2xpYic6CiAgICAgICAgICBwYXRoPSAn
TGlicmFyeScKISAgICAgcGF0aCA9IHN0cmluZy5sb3dlcihwYXRoICsgJyBEaXJzJykKISAg
ICAgbnVtZXJpY1ZlcnNpb24gPSA2LjA7CiEgICAgIHRyeToKISAgICAgICAgIG51bWVyaWNW
ZXJzaW9uID0gZmxvYXQgKHZlcnNpb24pCiEgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgohICAg
ICAgICAgcGFzcwohICAgICAKISAgICAgaWYgbnVtZXJpY1ZlcnNpb24gPCA3LjA6IAohICAg
ICAgICAga2V5ID0gKCdTT0ZUV0FSRVxcTWljcm9zb2Z0XFxEZXZzdHVkaW9cXCVzXFwnCiEg
ICAgICAgICAgICAgICAgJ0J1aWxkIFN5c3RlbVxcQ29tcG9uZW50c1xcUGxhdGZvcm1zXFwn
CiEgICAgICAgICAgICAgICAgJ1dpbjMyICglcylcXERpcmVjdG9yaWVzJykgJSAodmVyc2lv
biwgcGxhdGZvcm0pCiEgICAgIGVsc2U6CiEgICAgICAgICBrZXkgPSAoJ1NPRlRXQVJFXFxN
aWNyb3NvZnRcXFZpc3VhbFN0dWRpb1xcJXNcXCcKISAgICAgICAgICAgICAgICAnVkNcXFZD
X09CSkVDVFNfUExBVEZPUk1fSU5GT1xcV2luMzJcXERpcmVjdG9yaWVzJykgJSAodmVyc2lv
bikKISAKICAgICAgZm9yIGJhc2UgaW4gKEhLRVlfQ0xBU1NFU19ST09ULAogICAgICAgICAg
ICAgICAgICAgSEtFWV9MT0NBTF9NQUNISU5FLAogICAgICAgICAgICAgICAgICAgSEtFWV9D
VVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgICBIS0VZX1VTRVJTKToKICAgICAgICAg
IHRyeToKISAgICAgICAgICAgICBwYWlycyA9IHJlYWRfa2V5KGJhc2UsIGtleSwgMSkKISAg
ICAgICAgICAgICBpZiBwYWlycy5oYXNfa2V5KHBhdGgpOgohICAgICAgICAgICAgICAgICBm
b3IgcyBpbiBzdHJpbmcuc3BsaXQoZXhwYW5kX21hY3JvcyhwYWlyc1twYXRoXSwKISAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwK
ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbiwKISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtZXJpY1ZlcnNpb24pLCc7Jyk6CiEgICAgICAgICAgICAgICAgICAgICBp
ZiBub3QgKHMgaW4gTCk6CiEgICAgICAgICAgICAgICAgICAgICAgICAgTC5hcHBlbmQocykK
ISAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgIGV4Y2VwdCBSZWdFcnJvcjoKICAg
ICAgICAgICAgICBwYXNzCiAgICAgIHJldHVybiBMCioqKioqKioqKioqKioqKiBjbGFzcyBN
U1ZDQ29tcGlsZXIgKENDb21waWxlcikgOgoqKiogMjIwLDIyNiAqKioqCiAgICAgICAgICAg
ICAgcGF0aD1nZXRfbXN2Y19wYXRocygncGF0aCcsIHZlcnNpb24pCiAgICAgICAgICAgICAg
dHJ5OgogICAgICAgICAgICAgICAgICBmb3IgcCBpbiBzdHJpbmcuc3BsaXQob3MuZW52aXJv
blsncGF0aCddLCc7Jyk6CiEgICAgICAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChwKQog
ICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgcGFzcwog
ICAgICAgICAgICAgIG9zLmVudmlyb25bJ3BhdGgnXSA9IHN0cmluZy5qb2luKHBhdGgsJzsn
KQotLS0gMzE2LDMyMyAtLS0tCiAgICAgICAgICAgICAgcGF0aD1nZXRfbXN2Y19wYXRocygn
cGF0aCcsIHZlcnNpb24pCiAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICBm
b3IgcCBpbiBzdHJpbmcuc3BsaXQob3MuZW52aXJvblsncGF0aCddLCc7Jyk6CiEgICAgICAg
ICAgICAgICAgICAgICBpZiBub3QgKHAgaW4gcGF0aCk6CiEgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0aC5hcHBlbmQocCkKICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAg
ICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICBvcy5lbnZpcm9uWydwYXRoJ10g
PSBzdHJpbmcuam9pbihwYXRoLCc7JykK
--------------050205080106050805010408--