[Mono-list] monostyle: a csharp code beautifier.

Adam Treat manyoso@yahoo.com
Wed, 27 Mar 2002 01:02:20 -0800


--------------Boundary-00=_WRJM69BO3F17YP4615SE
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Hello everyone,

I've made a code-beautifier that parses and clean's up csharp source code, 
refactoring it into the mono's coding-standard according to this post: 
http://lists.ximian.com/archives/public/mono-list/2001-July/000582.html

It is just a bunch of methods utilizing System.Text.RegularExpressions and a 
StringCollection type, so theoritically it should run on Mono ;-)  At the 
least it tests out Dan's RegularExpression implementation.  If this is useful 
to anyone, then let me know and I'll put it into mcs/tools...

Cheers,

Adam
--------------Boundary-00=_WRJM69BO3F17YP4615SE
Content-Type: text/x-c++;
  charset="iso-8859-1";
  name="monostyle.cs"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="monostyle.cs"

Ly8JbW9ub3N0eWxlLmNzCi8vCi8vCUFkYW0gVHJlYXQgKG1hbnlvc29AeWFob28uY29tKQovLwko
QykgMjAwMiBBZGFtIFRyZWF0Ci8vCi8vCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci8vCWl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci8vCXRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yCi8vCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgp1c2luZyBTeXN0
ZW07CnVzaW5nIFN5c3RlbS5JTzsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25z
Owp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuU3BlY2lhbGl6ZWQ7CgpuYW1lc3BhY2UgTW9uby5V
dGlsIHsKCgljbGFzcyBNb25vU3R5bGUgewoKCQlzdHJpbmcgZmlsZTsKCQlTdHJpbmdDb2xsZWN0
aW9uIGZpbGVidWZmZXI7CgkJYm9vbCBsaW5lc3BhY2UgPSB0cnVlOwoKCQl2b2lkIFVzYWdlKCkK
CQl7CgkJCUNvbnNvbGUuV3JpdGUgKAoJCQkJIm1vbm9zdHlsZSAtbCA8dHJ1ZXxmYWxzZT4gZmls
ZS5jcyA+IG91dHB1dC5jc1xuXG4iICsKCQkJCSIgICAtbCB8fCAvLWwgfHwgLS1saW5lICA8dHJ1
ZXxmYWxzZT4gICBTcGVjaWZpZXMgd2V0aGVyIHRvIHVzZSBsaW5lIHNwYWNpbmcuXG5cbiIpOwoJ
CX0KCgkJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKHN0cmluZ1tdIGFyZ3MpCgkJewoJCQlNb25v
U3R5bGUgc3R5bGUgPSBuZXcgTW9ub1N0eWxlKGFyZ3MpOwoJCX0KCgkJcHVibGljIE1vbm9TdHls
ZSAoc3RyaW5nW10gYXJncykKCQl7CgkJCWludCBhcmdjID0gYXJncy5MZW5ndGg7CgkJCWZvcihp
bnQgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKCQkJCXN0cmluZyBhcmcgPSBhcmdzW2ldOwoJCQkJ
Ly8gVGhlICIvIiBzd2l0Y2ggaXMgdGhlcmUgZm9yIHdpbmUgdXNlcnMsIGxpa2UgbWUgOy0pCgkJ
CQlpZihhcmcuU3RhcnRzV2l0aCgiLSIpIHx8IGFyZy5TdGFydHNXaXRoKCIvIikpIHsKCQkJCQlz
d2l0Y2goYXJnKSB7CgkJCQkJCWNhc2UgIi1sIjogY2FzZSAiLy1sIjogY2FzZSAiLS1saW5lIjoK
CQkJCQkJaWYoKGkgKyAxKSA+PSBhcmdjKSB7CgkJCQkJCQlVc2FnZSgpOwoJCQkJCQkJcmV0dXJu
OwoJCQkJCQl9CgkJCQkJCWlmIChhcmdzW2krK10gPT0gImZhbHNlIikgewoJCQkJCQkJbGluZXNw
YWNlID0gZmFsc2U7CgkJCQkJCX0KCQkJCQkJY29udGludWU7CgkJCQkJCWNhc2UgIi1mIjogY2Fz
ZSAiLy1mIjogY2FzZSAiLS1maWxlIjoKCQkJCQkJaWYoKGkgKyAxKSA+PSBhcmdjKSB7CgkJCQkJ
CQlVc2FnZSgpOwoJCQkJCQkJcmV0dXJuOwoJCQkJCQl9CgkJCQkJCWZpbGUgPSBhcmdzWysraV07
CgkJCQkJCWNvbnRpbnVlOwoJCQkJCQlkZWZhdWx0OgoJCQkJCQlVc2FnZSgpOwoJCQkJCQlyZXR1
cm47CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmKGZpbGUgPT0gbnVsbCkgewoJCQkJVXNhZ2UoKTsK
CQkJCXJldHVybjsKCQkJfQoJCQlmaWxlYnVmZmVyID0gbmV3IFN0cmluZ0NvbGxlY3Rpb24oKTsK
CQkJU3RyZWFtUmVhZGVyIHNyID0gbmV3IFN0cmVhbVJlYWRlcihmaWxlKTsKCQkJRmlsbEJ1ZmZl
cihzcik7CgkJCUZpeE1vbm9TdHlsZSgpOwoJCQlQcmludFRvQ29uc29sZSgpOwoJCX0KCgkJcHVi
bGljIHZvaWQgRmlsbEJ1ZmZlcihTdHJlYW1SZWFkZXIgc3IpCgkJewoJCQlzci5CYXNlU3RyZWFt
LlNlZWsoMCwgU2Vla09yaWdpbi5CZWdpbik7CgkJCXdoaWxlIChzci5QZWVrKCkgPiAtMSkgewoJ
CQkJZmlsZWJ1ZmZlci5BZGQoc3IuUmVhZExpbmUoKSk7CgkJCX0KCQkJc3IuQ2xvc2UoKTsKCQl9
CgoJCXB1YmxpYyB2b2lkIEZpeE1vbm9TdHlsZSgpCgkJewoJCQlmb3IgKGludCBpPTA7IGkgPCBm
aWxlYnVmZmVyLkNvdW50OyBpKyspIHsKCQkJCUlzQmFkTW9ub1N0eWxlKGZpbGVidWZmZXJbaV0p
OwoJCQl9CgkJfQoKCQlwdWJsaWMgdm9pZCBQcmludFRvQ29uc29sZSgpCgkJewoJCQlmb3IgKGlu
dCBpPTA7IGkgPCBmaWxlYnVmZmVyLkNvdW50OyBpKyspIHsKCQkJCUNvbnNvbGUuV3JpdGVMaW5l
KGZpbGVidWZmZXJbaV0pOwoJCQl9CgkJfQoKCQlwdWJsaWMgdm9pZCBJc0JhZE1vbm9TdHlsZShT
dHJpbmcgc3RyKQoJCXsKCQkJaWYgKElzQmFkTW9ub1R5cGUoc3RyKSkgewoJCQkJRml4SGFuZ2lu
Z0JyYWNlKHN0cik7CgkJCX0gZWxzZSBpZihJc0JhZE1vbm9GbG93KHN0cikpIHsKCQkJCUZpeEhh
bmdpbmdCcmFjZShzdHIpOwoJCQl9IGVsc2UgaWYoSXNCYWRNb25vRnVuY3Rpb24oc3RyKSkgewoJ
CQkJRml4RW5kQnJhY2Uoc3RyKTsKCQkJfSBlbHNlIGlmKElzQmFkTW9ub1Byb3BlcnR5KHN0cikp
IHsKCQkJCUZpeEhhbmdpbmdCcmFjZShzdHIpOwoJCQl9IGVsc2UgewoJCQl9CiAgIAkJfQoKCQlw
dWJsaWMgdm9pZCBGaXhIYW5naW5nQnJhY2UoU3RyaW5nIHN0cikKCQl7CgkJCWludCBzdHJsb2Mg
PSBmaWxlYnVmZmVyLkluZGV4T2Yoc3RyKTsKCQkJaW50IGJyY2xvYyA9IEZpbmRIYW5naW5nQnJh
Y2Uoc3RybG9jKTsKCQkJaW50IGRpZmYgPSBicmNsb2MgLSBzdHJsb2M7CgkJCWlmIChicmNsb2Mg
PiAwKSB7CgkJCQlmb3IgKGludCBpID0gMDsgaSA8IGRpZmYrMTsgaSsrKSB7CgkJCQkJZmlsZWJ1
ZmZlci5SZW1vdmVBdChzdHJsb2MpOwoJCQkJfQoJCQkJZmlsZWJ1ZmZlci5JbnNlcnQoc3RybG9j
LCBzdHIgKyAiIHsiKTsKCQkJCWlmIChsaW5lc3BhY2UpIHsKCQkJCQlmaWxlYnVmZmVyLkluc2Vy
dChzdHJsb2MrMSwgIiIpOwoJCQkJfQoJCQl9IGVsc2Uge30KCQl9CgoJCXB1YmxpYyBpbnQgRmlu
ZEhhbmdpbmdCcmFjZShpbnQgc3RybG9jKQoJCXsKCQkJc3RybG9jKys7CgkJCWJvb2wgZm91bmQg
PSBmYWxzZTsKCQkJd2hpbGUgKCFmb3VuZCkgewoJCQkJdHJ5IHsKCQkJCQlzdHJpbmcgc3RyID0g
ZmlsZWJ1ZmZlcltzdHJsb2MrK107CgkJCQkJZm91bmQgPSBJc0hhbmdpbmdCcmFjZShzdHIpOwoJ
CQkJCWlmICghZm91bmQgJiYgIUlzQmxhbmtMaW5lKHN0cikpIHsKCQkJCQkJcmV0dXJuIC0xOwoJ
CQkJCX0KCQkJCSB9IGNhdGNoIChFeGNlcHRpb24pIHsKCQkJCQlyZXR1cm4gLTE7CgkJCQl9CgkJ
CX0KCQkJcmV0dXJuIHN0cmxvYyAtMTsKICAgCQl9CgoJCXB1YmxpYyB2b2lkIEZpeEVuZEJyYWNl
KFN0cmluZyBzdHIpCgkJewoJCQlpbnQgc3RybG9jID0gZmlsZWJ1ZmZlci5JbmRleE9mKHN0cik7
CgkJCWZpbGVidWZmZXIuUmVtb3ZlQXQoc3RybG9jKTsKCQkJZmlsZWJ1ZmZlci5JbnNlcnQoc3Ry
bG9jLCBSZW1vdmVFbmRCcmFjZShzdHIpKTsKCQkJZmlsZWJ1ZmZlci5JbnNlcnQoc3RybG9jKzEs
IEFkZEhhbmdpbmdCcmFjZShzdHIpKTsKCQl9CgoJCXB1YmxpYyBzdGF0aWMgYm9vbCBJc0JhZE1v
bm9UeXBlKFN0cmluZyBzdHIpCgkJewoJCQlpZiAoIElzVHlwZShzdHIpICYmICFFbmRXaXRoQnJh
Y2Uoc3RyKSkgewoJCQkJcmV0dXJuIHRydWU7CgkJCX0gZWxzZSB7CgkJCQlyZXR1cm4gZmFsc2U7
CgkJCX0KICAgCQl9CgoJCXB1YmxpYyBzdGF0aWMgYm9vbCBJc0JhZE1vbm9GbG93KFN0cmluZyBz
dHIpCgkJewoJCQlpZiAoSXNGbG93KHN0cikgJiYgIUVuZFdpdGhCcmFjZShzdHIpKSB7CgkJCQly
ZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQogICAJCX0KCgkJ
cHVibGljIHN0YXRpYyBib29sIElzQmFkTW9ub0Z1bmN0aW9uKFN0cmluZyBzdHIpCgkJewoJCQlp
ZiAoSXNGdW5jdGlvbihzdHIpICYmIEVuZFdpdGhCcmFjZShzdHIpKSB7CgkJCQlyZXR1cm4gdHJ1
ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCgkJcHVibGljIHN0YXRp
YyBib29sIElzQmFkTW9ub1Byb3BlcnR5KFN0cmluZyBzdHIpCgkJewoJCQlpZiAoSXNQcm9wZXJ0
eShzdHIpICYmICFFbmRXaXRoQnJhY2Uoc3RyKSkgewoJCQkJcmV0dXJuIHRydWU7CgkJCX0gZWxz
ZSB7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgoJCXB1YmxpYyBzdGF0aWMgYm9vbCBJc1R5
cGUoU3RyaW5nIHN0cikKCQl7CgkJCWlmICgJIUlzQ29tbWVudChzdHIpICYmICgKCQkJCQlJc05h
bWVTcGFjZShzdHIpIHx8CgkJCQkJSXNDbGFzcyhzdHIpIHx8CgkJCQkJSXNTdHJ1Y3Qoc3RyKSB8
fAoJCQkJCUlzRW51bShzdHIpICkpIHsKCQkJCXJldHVybiB0cnVlOwoJCQl9IGVsc2UgewoJCQkJ
cmV0dXJuIGZhbHNlOwoJCQl9CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGljIGJvb2wgSXNGbG93KFN0
cmluZyBzdHIpCgkJewoJCQlpZiAoCSFJc0NvbW1lbnQoc3RyKSAmJiAoCgkJCQkJSXNJZihzdHIp
IHx8CgkJCQkJSXNFbHNlKHN0cikgfHwKCQkJCQlJc0Vsc2VJZihzdHIpIHx8CgkJCQkJSXNUcnko
c3RyKSB8fAoJCQkJCUlzQ2F0Y2goc3RyKSB8fAoJCQkJCUlzRmluYWxseShzdHIpIHx8CgkJCQkJ
SXNGb3Ioc3RyKSB8fAoJCQkJCUlzRm9yRWFjaChzdHIpIHx8CgkJCQkJSXNXaGlsZShzdHIpIHx8
CgkJCQkJSXNTd2l0Y2goc3RyKSB8fAoJCQkJCUlzQ2FzZShzdHIpICkpIHsKCQkJCXJldHVybiB0
cnVlOwoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CiAgIAkJfQoKCQlwdWJsaWMg
c3RhdGljIGJvb2wgSXNGdW5jdGlvbihTdHJpbmcgc3RyKQoJCXsKCQkJaWYgKAlSZWdleC5Jc01h
dGNoKHN0ciwgQCJeXHMqKFx3KylccysoXHcrKS4qXCgrIikgJiYKCQkJCQkhSXNEZWNsYXJhdGlv
bihzdHIpICYmCgkJCQkJIUlzQ29tbWVudChzdHIpICYmCgkJCQkJIUlzVHlwZShzdHIpICYmCgkJ
CQkJIUlzRmxvdyhzdHIpICkgewoJCQkJcmV0dXJuIHRydWU7CgkJCX0gZWxzZSB7CgkJCQlyZXR1
cm4gZmFsc2U7CgkJCX0KCQl9CgoJCXB1YmxpYyBzdGF0aWMgYm9vbCBJc1Byb3BlcnR5KFN0cmlu
ZyBzdHIpCgkJewoJCQlpZiAoCVJlZ2V4LklzTWF0Y2goc3RyLCBAIl5ccyooXHcrKVxzKyhcdysp
LioiKSAmJgoJCQkJCSFJc0RlY2xhcmF0aW9uKHN0cikgJiYKCQkJCQkhSXNDb21tZW50KHN0cikg
JiYKCQkJCQkhSXNUeXBlKHN0cikgJiYKCQkJCQkhSXNGbG93KHN0cikgJiYKCQkJCQkhSXNGdW5j
dGlvbihzdHIpICkgewoJCQkJcmV0dXJuIHRydWU7CgkJCX0gZWxzZSB7CgkJCQlyZXR1cm4gZmFs
c2U7CgkJCX0KCQl9CgoJCXB1YmxpYyBzdGF0aWMgc3RyaW5nIFJlbW92ZUVuZEJyYWNlKFN0cmlu
ZyBzdHIpCgkJewoJCQlSZWdleCByZyA9IG5ldyBSZWdleChAIlx7XHMqJCIpOwoJCQlyZXR1cm4g
cmcuUmVwbGFjZShzdHIsICIiKTsKICAgCQl9CgoJCXB1YmxpYyBzdGF0aWMgc3RyaW5nIEFkZEhh
bmdpbmdCcmFjZShTdHJpbmcgc3RyKQoJCXsKCQkJUmVnZXggcmcgPSBuZXcgUmVnZXgoQCJcUytc
cyoiKTsKCQkJc3RyaW5nIGJsYW5rID0gcmcuUmVwbGFjZShzdHIsIiIpOwoJCQlyZXR1cm4gYmxh
bmsgKyAieyI7CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGljIGJvb2wgSXNEZWNsYXJhdGlvbihTdHJp
bmcgc3RyKQoJCXsKCQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIlw7XHMqJCIpOwoJCX0K
CgkJcHVibGljIHN0YXRpYyBib29sIElzQ29tbWVudChTdHJpbmcgc3RyKQoJCXsKCQkJcmV0dXJu
IFJlZ2V4LklzTWF0Y2goc3RyLCBAIl4oXHMqXC8rfFxzKlwqK3xccypcIyspIik7CiAgIAkJfQoK
CQlwdWJsaWMgc3RhdGljIGJvb2wgRW5kV2l0aEJyYWNlKFN0cmluZyBzdHIpCgkJewoJCQlyZXR1
cm4gUmVnZXguSXNNYXRjaChzdHIsIEAiXHtccyokIik7CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGlj
IGJvb2wgSXNIYW5naW5nQnJhY2UoU3RyaW5nIHN0cikKCQl7CgkJCXJldHVybiBSZWdleC5Jc01h
dGNoKHN0ciwgQCIoXnxccyspXHsiKTsKICAgCQl9CgoJCXB1YmxpYyBzdGF0aWMgYm9vbCBJc0Js
YW5rTGluZShTdHJpbmcgc3RyKQoJCXsKCQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIl5c
cyokIik7CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGljIGJvb2wgSXNOYW1lU3BhY2UoU3RyaW5nIHN0
cikKCQl7CgkJCXJldHVybiBSZWdleC5Jc01hdGNoKHN0ciwgQCIoXnxccyspbmFtZXNwYWNlXHMr
Iik7CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGljIGJvb2wgSXNDbGFzcyhTdHJpbmcgc3RyKQoJCXsK
CQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIlxzK2NsYXNzXHMrIik7CiAgIAkJfQoKCQlw
dWJsaWMgc3RhdGljIGJvb2wgSXNTdHJ1Y3QoU3RyaW5nIHN0cikKCQl7CgkJCXJldHVybiBSZWdl
eC5Jc01hdGNoKHN0ciwgQCJccytzdHJ1Y3RccysiKTsKICAgCQl9CgoJCXB1YmxpYyBzdGF0aWMg
Ym9vbCBJc0VudW0oU3RyaW5nIHN0cikKCQl7CgkJCXJldHVybiBSZWdleC5Jc01hdGNoKHN0ciwg
QCJccytlbnVtXHMrIik7CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGljIGJvb2wgSXNJZihTdHJpbmcg
c3RyKQoJCXsKCQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIihefFxzK3xcfSspaWYoXHMr
fFwoK3wkKSIpOwogICAJCX0KCgkJcHVibGljIHN0YXRpYyBib29sIElzRWxzZShTdHJpbmcgc3Ry
KQoJCXsKCQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIihefFxzK3xcfSspZWxzZShccyt8
XHsrfCQpIik7CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGljIGJvb2wgSXNFbHNlSWYoU3RyaW5nIHN0
cikKCQl7CgkJCXJldHVybiBSZWdleC5Jc01hdGNoKHN0ciwgQCIoXnxccyt8XH0rKWVsc2UgaWYo
XHMrfFwoK3wkKSIpOwogICAJCX0KCgkJcHVibGljIHN0YXRpYyBib29sIElzVHJ5KFN0cmluZyBz
dHIpCgkJewoJCQlyZXR1cm4gUmVnZXguSXNNYXRjaChzdHIsIEAiKF58XHMrfFx9Kyl0cnkoXHMr
fFwoK3wkKSIpOwogICAJCX0KCgkJcHVibGljIHN0YXRpYyBib29sIElzQ2F0Y2goU3RyaW5nIHN0
cikKCQl7CgkJCXJldHVybiBSZWdleC5Jc01hdGNoKHN0ciwgQCIoXnxccyt8XH0rKWNhdGNoKFxz
K3xcKCt8JCkiKTsKICAgCQl9CgoJCXB1YmxpYyBzdGF0aWMgYm9vbCBJc0ZpbmFsbHkoU3RyaW5n
IHN0cikKCQl7CgkJCXJldHVybiBSZWdleC5Jc01hdGNoKHN0ciwgQCIoXnxccyt8XH0rKWZpbmFs
bHkoXHMrfFx7K3wkKSIpOwogICAJCX0KCgkJcHVibGljIHN0YXRpYyBib29sIElzRm9yKFN0cmlu
ZyBzdHIpCgkJewoJCQlyZXR1cm4gUmVnZXguSXNNYXRjaChzdHIsIEAiKF58XHMrfFx9Kylmb3Io
XHMrfFwoK3wkKSIpOwogICAJCX0KCgkJcHVibGljIHN0YXRpYyBib29sIElzRm9yRWFjaChTdHJp
bmcgc3RyKQoJCXsKCQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIihefFxzK3xcfSspZm9y
ZWFjaChccyt8XCgrfCQpIik7CiAgIAkJfQoKCQlwdWJsaWMgc3RhdGljIGJvb2wgSXNXaGlsZShT
dHJpbmcgc3RyKQoJCXsKCQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIihefFxzK3xcfSsp
d2hpbGUoXHMrfFwoK3wkKSIpOwogICAJCX0KCgkJcHVibGljIHN0YXRpYyBib29sIElzU3dpdGNo
KFN0cmluZyBzdHIpCgkJewoJCQlyZXR1cm4gUmVnZXguSXNNYXRjaChzdHIsIEAiKF58XHMrfFx9
Kylzd2l0Y2goXHMrfFwoK3wkKSIpOwogICAJCX0KCgkJcHVibGljIHN0YXRpYyBib29sIElzQ2Fz
ZShTdHJpbmcgc3RyKQoJCXsKCQkJcmV0dXJuIFJlZ2V4LklzTWF0Y2goc3RyLCBAIihefFxzK3xc
fSspY2FzZShccyt8XCgrfCQpIik7CiAgIAkJfQoJfQp9Cg==

--------------Boundary-00=_WRJM69BO3F17YP4615SE--