import java.text.*;
import java.util.*;
class Main
{
{
for(int i = 0; i < 256 ; ++i) {
char c = (char) i;
System.
out.
printf("\\u%04x", i
); System.
out.
println(" -> " + c
+ " : is letter or digit or space"); } else {
System.
out.
println(" -> " + c
+ " : is NOT letter or digit or space"); }/**/
}
System.
out.
println("---------------------------------------------------"); System.
out.
println("Separator!!"); System.
out.
println("SPACE SEPARATOR: "); System.
out.
println("LINE SEPARATOR: "); System.
out.
println("PARAGRAPH SEPARATOR: ");
/*String str = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000a\u000b\u000c\u000d\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u003a\u003b\u003c\u003d\u003e\u003f\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004a\u004b\u004c\u004d\u004e\u004f\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058\u0059\u005a\u005b\u005c\u005d\u005e\u005f\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006a\u006b\u006c\u006d\u006e\u006f\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007a\u007b\u007c\u007d\u007e\u007f";
for (int i = 0 ; i < str.length() ; i++) {
char c = str.charAt(i);
if (Character.isLetterOrDigit(c)) {
System.out.println((i+1) + ": " + c);
}
}*/
}
public static void printSMS()
{
System.
out.
println("Convert to unicode"); {
"星展銀行: <提示>閣下已於<DD-MM-YYYY HH:MM>重設iBanking密碼。請於下次登入時使用新密碼。",
"星展銀行:轉賬至海外戶口<a/c no.>,<ccy><transaction amount>,交易編號 <the last 10 digits of the txn ref. no.>,OTP: <opaque>-<OTP>。",
"星展銀行:<提示>閣下於<DD-MM-YYYY HH:MM>遞交指示,轉賬<ccy><transaction amount>至海外戶口<a/c no.>。",
"星展銀行:<提示>閣下轉賬<ccy><transaction amount>至海外戶口<a/c no.>的指示已經辦妥。",
"星展銀行:<提示>閣下轉賬<ccy><transaction amount>至海外戶口<a/c no.>的指示已經被拒。",
"星展銀行:<提示>閣下轉賬<ccy><transaction amount>至海外戶口<a/c no.>的指示已經取消。"
};
int c = 0;
for(int i = 0 ; i < chiStr.length ; ++i) {
System.
out.
print((i
+1) + ": " + chiStr
[i
] + "\n -> "); for(int j = 0 ; j < chiStr[i].length() ; j++) {
c = (int)chiStr[i].charAt(j);
if (c > 128) {
System.
out.
printf("\\u%04x", c
); } else {
System.
out.
printf("%c",
(char)c
); }
}
}
System.
out.
println("---------------------------------------------------"); System.
out.
println("Convert from unicode!!!"); {
"DBS Bank: <Alert>You have reset iBanking Password on <<DATE>>. Please use this new Password for your next logon.",
"\u661f\u5c55\u9280\u884c\uff1a <\u63d0\u793a>\u95a3\u4e0b\u5df2\u65bc<<DATE>>\u91cd\u8a2diBanking\u5bc6\u78bc\u3002\u8acb\u65bc\u4e0b\u6b21\u767b\u5165\u6642\u4f7f\u7528\u65b0\u5bc6\u78bc\u3002",
"DBS Bank: Funds transfer (overseas) to <<AC>>, Amount: <<TXN_CUR>><<TXN_AMO>>, Tran Ref:<<TXN_REF>>, OTP: <<OTP>>.",
"\u661f\u5c55\u9280\u884c\uff1a\u8f49\u8cec\u81f3\u6d77\u5916\u6236\u53e3<<AC>>\uff0c<<TXN_CUR>><<TXN_AMO>>\uff0c\u4ea4\u6613\u7de8\u865f<<TXN_REF>>\uff0cOTP: <<OTP>>\u3002",
"DBS Bank: <Alert>You have submitted a funds transfer (overseas) instruction of <<TXN_CUR>><<TXN_AMO>> to <<AC>> on <<DATE>>.",
"\u661f\u5c55\u9280\u884c\uff1a<\u63d0\u793a>\u95a3\u4e0b\u65bc<<DATE>>\u905e\u4ea4\u6307\u793a\uff0c\u8f49\u8cec<<TXN_CUR>><<TXN_AMO>>\u81f3\u6d77\u5916\u6236\u53e3<<AC>>\u3002",
"DBS Bank: <Alert>Your funds transfer (overseas) instruction of <<TXN_CUR>><<TXN_AMO>> to <<AC>> has been processed.",
"\u661f\u5c55\u9280\u884c\uff1a<\u63d0\u793a>\u95a3\u4e0b\u8f49\u8cec<<TXN_CUR>><<TXN_AMO>>\u81f3\u6d77\u5916\u6236\u53e3<<AC>>\u7684\u6307\u793a\u5df2\u7d93\u8fa6\u59a5\u3002",
"DBS Bank: <Alert>Your funds transfer (overseas) instruction of <<TXN_CUR>><<TXN_AMO>> to <<AC>> has been rejected.",
"\u661f\u5c55\u9280\u884c\uff1a<\u63d0\u793a>\u95a3\u4e0b\u8f49\u8cec<<TXN_CUR>><<TXN_AMO>>\u81f3\u6d77\u5916\u6236\u53e3<<AC>>\u7684\u6307\u793a\u5df2\u7d93\u88ab\u62d2\u3002",
"DBS Bank: <Alert>Your funds transfer (overseas) instruction of <<TXN_CUR>><<TXN_AMO>> to <<AC>> has been cancelled.",
"\u661f\u5c55\u9280\u884c\uff1a<\u63d0\u793a>\u95a3\u4e0b\u8f49\u8cec<<TXN_CUR>><<TXN_AMO>>\u81f3\u6d77\u5916\u6236\u53e3<<AC>>\u7684\u6307\u793a\u5df2\u7d93\u53d6\u6d88\u3002"
};
for(int i = 0 ; i < unicode.length ; ++i) {
System.
out.
println((i
+1) + " -> " + unicode
[i
] + "\n"); }
System.
out.
println("---------------------------------------------------"); System.
out.
println("Sequence of TAG!!!"); for(int i = 0 ; i < unicode.length ; ++i) {
System.
out.
print((i
+1) + " -> "); for (int j = 0 ; j < unicode[i].length() ; ++j) {
if(unicode[i].charAt(j) < 128) {
System.
out.
print(unicode
[i
].
charAt(j
)); }
}
}
}
}
aW1wb3J0IGphdmEudGV4dC4qOwppbXBvcnQgamF2YS51dGlsLio7CmNsYXNzIE1haW4KewogICAgICAgCiAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCiAgICAgICAgewogICAgICAgIAlmb3IoaW50IGkgPSAwOyBpIDwgMjU2IDsgKytpKSB7CiAgICAgICAgCQljaGFyIGMgPSAoY2hhcikgaTsKICAgICAgICAJCVN5c3RlbS5vdXQucHJpbnRmKCJcXHUlMDR4IiwgaSk7CiAgICAgICAgCQlpZiAoQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjKSB8fCBDaGFyYWN0ZXIuaXNTcGFjZUNoYXIoYykpIHsKICAgICAgICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAtPiAiICsgYyArICIgOiBpcyBsZXR0ZXIgb3IgZGlnaXQgb3Igc3BhY2UiKTsKICAgICAgICAJCX0gZWxzZSB7CiAgICAgICAgCQkJU3lzdGVtLm91dC5wcmludGxuKCIgLT4gIiArIGMgKyAiIDogaXMgTk9UIGxldHRlciBvciBkaWdpdCBvciBzcGFjZSIpOwogICAgICAgIAkJfS8qKi8KICAgICAgICAJfQogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VwYXJhdG9yISEiKTsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1BBQ0UgU0VQQVJBVE9SOiAiKTsKICAgICAgICAJU3lzdGVtLm91dC5wcmludGYoIlxcdSUwNHgiLCAoaW50KUNoYXJhY3Rlci5TUEFDRV9TRVBBUkFUT1IpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMSU5FIFNFUEFSQVRPUjogIik7CiAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRmKCJcXHUlMDR4IiwgKGludClDaGFyYWN0ZXIuTElORV9TRVBBUkFUT1IpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJBR1JBUEggU0VQQVJBVE9SOiAiKTsKICAgICAgICAJU3lzdGVtLm91dC5wcmludGYoIlxcdSUwNHgiLCAoaW50KUNoYXJhY3Rlci5QQVJBR1JBUEhfU0VQQVJBVE9SKTsKICAgICAgICAJCiAgICAgICAgCS8qU3RyaW5nIHN0ciA9ICJcdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcdTAwMDhcdTAwMDlcdTAwMGFcdTAwMGJcdTAwMGNcdTAwMGRcdTAwMGVcdTAwMGZcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWZcdTAwMjBcdTAwMjFcdTAwMjJcdTAwMjNcdTAwMjRcdTAwMjVcdTAwMjZcdTAwMjdcdTAwMjhcdTAwMjlcdTAwMmFcdTAwMmJcdTAwMmNcdTAwMmRcdTAwMmVcdTAwMmZcdTAwMzBcdTAwMzFcdTAwMzJcdTAwMzNcdTAwMzRcdTAwMzVcdTAwMzZcdTAwMzdcdTAwMzhcdTAwMzlcdTAwM2FcdTAwM2JcdTAwM2NcdTAwM2RcdTAwM2VcdTAwM2ZcdTAwNDBcdTAwNDFcdTAwNDJcdTAwNDNcdTAwNDRcdTAwNDVcdTAwNDZcdTAwNDdcdTAwNDhcdTAwNDlcdTAwNGFcdTAwNGJcdTAwNGNcdTAwNGRcdTAwNGVcdTAwNGZcdTAwNTBcdTAwNTFcdTAwNTJcdTAwNTNcdTAwNTRcdTAwNTVcdTAwNTZcdTAwNTdcdTAwNThcdTAwNTlcdTAwNWFcdTAwNWJcdTAwNWNcdTAwNWRcdTAwNWVcdTAwNWZcdTAwNjBcdTAwNjFcdTAwNjJcdTAwNjNcdTAwNjRcdTAwNjVcdTAwNjZcdTAwNjdcdTAwNjhcdTAwNjlcdTAwNmFcdTAwNmJcdTAwNmNcdTAwNmRcdTAwNmVcdTAwNmZcdTAwNzBcdTAwNzFcdTAwNzJcdTAwNzNcdTAwNzRcdTAwNzVcdTAwNzZcdTAwNzdcdTAwNzhcdTAwNzlcdTAwN2FcdTAwN2JcdTAwN2NcdTAwN2RcdTAwN2VcdTAwN2YiOwogICAgICAgIAlmb3IgKGludCBpID0gMCA7IGkgPCBzdHIubGVuZ3RoKCkgOyBpKyspIHsKICAgICAgICAJCWNoYXIgYyA9IHN0ci5jaGFyQXQoaSk7CiAgICAgICAgCQlpZiAoQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjKSkgewogICAgICAgIAkJCVN5c3RlbS5vdXQucHJpbnRsbigoaSsxKSArICI6ICIgKyBjKTsKICAgICAgICAJCX0KICAgICAgICAJfSovCiAgICAgICAgfQogICAgICAgIAogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFNNUygpCiAgICAgICAgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb252ZXJ0IHRvIHVuaWNvZGUiKTsKICAgICAgICAgICAgICAgIFN0cmluZ1tdIGNoaVN0ciA9IAogICAgICAgICAgICAgICAgewoJCSLmmJ/lsZXpioDooYzvvJogPOaPkOekuj7plqPkuIvlt7Lmlrw8REQtTU0tWVlZWSBISDpNTT7ph43oqK1pQmFua2luZ+WvhueivOOAguiri+aWvOS4i+asoeeZu+WFpeaZguS9v+eUqOaWsOWvhueivOOAgiIsIAogICAgICAgICAgICAgICAgIuaYn+WxlemKgOihjO+8mui9ieizrOiHs+a1t+WkluaItuWPozxhL2Mgbm8uPu+8jDxjY3k+PHRyYW5zYWN0aW9uIGFtb3VudD7vvIzkuqTmmJPnt6jomZ8gPHRoZSBsYXN0IDEwIGRpZ2l0cyBvZiB0aGUgdHhuIHJlZi4gbm8uPu+8jE9UUDogPG9wYXF1ZT4tPE9UUD7jgIIiLAogICAgICAgICAgICAgICAgIuaYn+WxlemKgOihjO+8mjzmj5DnpLo+6Zaj5LiL5pa8PERELU1NLVlZWVkgSEg6TU0+6YGe5Lqk5oyH56S677yM6L2J6LOsPGNjeT48dHJhbnNhY3Rpb24gYW1vdW50PuiHs+a1t+WkluaItuWPozxhL2Mgbm8uPuOAgiIsIAogICAgICAgICAgICAgICAgIuaYn+WxlemKgOihjO+8mjzmj5DnpLo+6Zaj5LiL6L2J6LOsPGNjeT48dHJhbnNhY3Rpb24gYW1vdW50PuiHs+a1t+WkluaItuWPozxhL2Mgbm8uPueahOaMh+ekuuW3sue2k+i+puWmpeOAgiIsCiAgICAgICAgICAgICAgICAi5pif5bGV6YqA6KGM77yaPOaPkOekuj7plqPkuIvovYnos6w8Y2N5Pjx0cmFuc2FjdGlvbiBhbW91bnQ+6Iez5rW35aSW5oi25Y+jPGEvYyBuby4+55qE5oyH56S65bey57aT6KKr5ouS44CCIiwgCiAgICAgICAgICAgICAgICAi5pif5bGV6YqA6KGM77yaPOaPkOekuj7plqPkuIvovYnos6w8Y2N5Pjx0cmFuc2FjdGlvbiBhbW91bnQ+6Iez5rW35aSW5oi25Y+jPGEvYyBuby4+55qE5oyH56S65bey57aT5Y+W5raI44CCIgogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGludCBjID0gMDsKICAgICAgICAgICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgY2hpU3RyLmxlbmd0aCA7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KChpKzEpICsgIjogIiArIGNoaVN0cltpXSArICJcbiAtPiAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBqID0gMCA7IGogPCBjaGlTdHJbaV0ubGVuZ3RoKCkgOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gKGludCljaGlTdHJbaV0uY2hhckF0KGopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4gMTI4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiXFx1JTA0eCIsIGMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiJWMiLCAoY2hhciljKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udmVydCBmcm9tIHVuaWNvZGUhISEiKTsKICAgICAgICAgICAgICAgIFN0cmluZ1tdIHVuaWNvZGUgPSAKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJEQlMgQmFuazogPEFsZXJ0PllvdSBoYXZlIHJlc2V0IGlCYW5raW5nIFBhc3N3b3JkIG9uIDw8REFURT4+LiBQbGVhc2UgdXNlIHRoaXMgbmV3IFBhc3N3b3JkIGZvciB5b3VyIG5leHQgbG9nb24uIiwKICAgICAgICAgICAgICAgICJcdTY2MWZcdTVjNTVcdTkyODBcdTg4NGNcdWZmMWEgPFx1NjNkMFx1NzkzYT5cdTk1YTNcdTRlMGJcdTVkZjJcdTY1YmM8PERBVEU+Plx1OTFjZFx1OGEyZGlCYW5raW5nXHU1YmM2XHU3OGJjXHUzMDAyXHU4YWNiXHU2NWJjXHU0ZTBiXHU2YjIxXHU3NjdiXHU1MTY1XHU2NjQyXHU0ZjdmXHU3NTI4XHU2NWIwXHU1YmM2XHU3OGJjXHUzMDAyIiwKICAgICAgICAgICAgICAgICJEQlMgQmFuazogRnVuZHMgdHJhbnNmZXIgKG92ZXJzZWFzKSB0byA8PEFDPj4sIEFtb3VudDogPDxUWE5fQ1VSPj48PFRYTl9BTU8+PiwgVHJhbiBSZWY6PDxUWE5fUkVGPj4sIE9UUDogPDxPVFA+Pi4iLAogICAgICAgICAgICAgICAgIlx1NjYxZlx1NWM1NVx1OTI4MFx1ODg0Y1x1ZmYxYVx1OGY0OVx1OGNlY1x1ODFmM1x1NmQ3N1x1NTkxNlx1NjIzNlx1NTNlMzw8QUM+Plx1ZmYwYzw8VFhOX0NVUj4+PDxUWE5fQU1PPj5cdWZmMGNcdTRlYTRcdTY2MTNcdTdkZThcdTg2NWY8PFRYTl9SRUY+Plx1ZmYwY09UUDogPDxPVFA+Plx1MzAwMiIsCiAgICAgICAgICAgICAgICAiREJTIEJhbms6IDxBbGVydD5Zb3UgaGF2ZSBzdWJtaXR0ZWQgYSBmdW5kcyB0cmFuc2ZlciAob3ZlcnNlYXMpIGluc3RydWN0aW9uIG9mIDw8VFhOX0NVUj4+PDxUWE5fQU1PPj4gdG8gPDxBQz4+IG9uIDw8REFURT4+LiIsCiAgICAgICAgICAgICAgICAiXHU2NjFmXHU1YzU1XHU5MjgwXHU4ODRjXHVmZjFhPFx1NjNkMFx1NzkzYT5cdTk1YTNcdTRlMGJcdTY1YmM8PERBVEU+Plx1OTA1ZVx1NGVhNFx1NjMwN1x1NzkzYVx1ZmYwY1x1OGY0OVx1OGNlYzw8VFhOX0NVUj4+PDxUWE5fQU1PPj5cdTgxZjNcdTZkNzdcdTU5MTZcdTYyMzZcdTUzZTM8PEFDPj5cdTMwMDIiLAogICAgICAgICAgICAgICAgIkRCUyBCYW5rOiA8QWxlcnQ+WW91ciBmdW5kcyB0cmFuc2ZlciAob3ZlcnNlYXMpIGluc3RydWN0aW9uIG9mIDw8VFhOX0NVUj4+PDxUWE5fQU1PPj4gdG8gPDxBQz4+IGhhcyBiZWVuIHByb2Nlc3NlZC4iLAogICAgICAgICAgICAgICAgIlx1NjYxZlx1NWM1NVx1OTI4MFx1ODg0Y1x1ZmYxYTxcdTYzZDBcdTc5M2E+XHU5NWEzXHU0ZTBiXHU4ZjQ5XHU4Y2VjPDxUWE5fQ1VSPj48PFRYTl9BTU8+Plx1ODFmM1x1NmQ3N1x1NTkxNlx1NjIzNlx1NTNlMzw8QUM+Plx1NzY4NFx1NjMwN1x1NzkzYVx1NWRmMlx1N2Q5M1x1OGZhNlx1NTlhNVx1MzAwMiIsCiAgICAgICAgICAgICAgICAiREJTIEJhbms6IDxBbGVydD5Zb3VyIGZ1bmRzIHRyYW5zZmVyIChvdmVyc2VhcykgaW5zdHJ1Y3Rpb24gb2YgPDxUWE5fQ1VSPj48PFRYTl9BTU8+PiB0byA8PEFDPj4gaGFzIGJlZW4gcmVqZWN0ZWQuIiwKICAgICAgICAgICAgICAgICJcdTY2MWZcdTVjNTVcdTkyODBcdTg4NGNcdWZmMWE8XHU2M2QwXHU3OTNhPlx1OTVhM1x1NGUwYlx1OGY0OVx1OGNlYzw8VFhOX0NVUj4+PDxUWE5fQU1PPj5cdTgxZjNcdTZkNzdcdTU5MTZcdTYyMzZcdTUzZTM8PEFDPj5cdTc2ODRcdTYzMDdcdTc5M2FcdTVkZjJcdTdkOTNcdTg4YWJcdTYyZDJcdTMwMDIiLAogICAgICAgICAgICAgICAgIkRCUyBCYW5rOiA8QWxlcnQ+WW91ciBmdW5kcyB0cmFuc2ZlciAob3ZlcnNlYXMpIGluc3RydWN0aW9uIG9mIDw8VFhOX0NVUj4+PDxUWE5fQU1PPj4gdG8gPDxBQz4+IGhhcyBiZWVuIGNhbmNlbGxlZC4iLAogICAgICAgICAgICAgICAgIlx1NjYxZlx1NWM1NVx1OTI4MFx1ODg0Y1x1ZmYxYTxcdTYzZDBcdTc5M2E+XHU5NWEzXHU0ZTBiXHU4ZjQ5XHU4Y2VjPDxUWE5fQ1VSPj48PFRYTl9BTU8+Plx1ODFmM1x1NmQ3N1x1NTkxNlx1NjIzNlx1NTNlMzw8QUM+Plx1NzY4NFx1NjMwN1x1NzkzYVx1NWRmMlx1N2Q5M1x1NTNkNlx1NmQ4OFx1MzAwMiIKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwIDsgaSA8IHVuaWNvZGUubGVuZ3RoIDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoaSsxKSArICIgLT4gIiArIHVuaWNvZGVbaV0gKyAiXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcXVlbmNlIG9mIFRBRyEhISIpOwogICAgICAgICAgICAgICAgZm9yKGludCBpID0gMCA7IGkgPCB1bmljb2RlLmxlbmd0aCA7ICsraSkgewogICAgICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoKGkrMSkgKyAiIC0+ICIpOwogICAgICAgICAgICAgICAgCWZvciAoaW50IGogPSAwIDsgaiA8IHVuaWNvZGVbaV0ubGVuZ3RoKCkgOyArK2opIHsKICAgICAgICAgICAgICAgIAkJaWYodW5pY29kZVtpXS5jaGFyQXQoaikgPCAxMjgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgCQlTeXN0ZW0ub3V0LnByaW50KHVuaWNvZGVbaV0uY2hhckF0KGopKTsKICAgICAgICAgICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0=