retroforth/vm/nga-cxx/nga-arland.cxx
crc 5245935879 nga-cxx: add in initial image; formatting tweaks
FossilOrigin-Name: 35467c97aa2a9e99f8c84dafb3dc0887963977b266bcc964e8d3ba0ac081781b
2021-06-03 17:30:19 +00:00

955 lines
49 KiB
C++

/*
Fresh Retro 12 version 0.0-1a
KNOWN BUGS:
debug 2 is broken
Working on io! :/
*/
#include <iostream>
#include <vector>
using namespace std;
string replaceAll(string str, const string &from, const string &to) {
if(from.empty())
return str;
size_t start_pos = 0;
while((start_pos = str.find(from, start_pos)) != string::npos) {
str.replace(start_pos, from.length(), to);
start_pos += to.length();
}
return str;
} //Edited from https://stackoverflow.com/questions/3418231/replace-part-of-a-string-with-another-string
int index(string a[30], string find) {
for (int i=0; i<30; i++) {
if (a[i] == find) {
return i;
}
}
return -1;
}
class stack {
public:
int sp = 0;
int pop() {
int a = data[sp];
data[sp]=0;
sp--;
return a;
}
void append(int i) {
sp++;
data[sp]=i;
}
string display() {
cout << '[';
for(int i=1; i<=sp; i++) {
cout << data[i];
cout << ((i==sp)? "":", ");
}
cout << "]";
return "";
}
private:
int data[5112];
};
#define MEMORY_SIZE 3500000
int memory[MEMORY_SIZE];
int ip=0;
stack data;
stack address;
class basic_io {
public:
/*
reserved devices:
0:generic output
1:keyboard
2:floating point
3:block storage
4:unix files
5:gopher
6:http
7:sockets
8:unix
9:scripting hooks
10:random number
*/
int type = -1;
int version = 0;
void run() {
}
};
class general_output : basic_io {
public:
int type = 0;
void run()
{
printf("run:%c", data.pop());
//cout << chr(data.pop());
}
};
#define IO_DEVICES 2
basic_io IO[IO_DEVICES];
#define DEBUG_MODE 0 //1 for CRC style debuging, 2 for DUSK style debuging
//unpacked vars(for speed/simplicity)
int unpacked0;
int unpacked1;
int unpacked2;
int unpacked3;
void no(int a, int b) {
}
void li(int a, int b) {
ip++;
data.append(memory[ip]);
if (DEBUG_MODE == 2) {
cout << memory[ip];
}
}
void du(int a, int b) {
data.append(a);
data.append(a);
if (DEBUG_MODE == 2) {
cout << a;
}
}
void dr(int a, int b) {
if (DEBUG_MODE == 2) {
cout << a;
}
}
void sw(int a, int b) {
data.append(a);
data.append(b);
if (DEBUG_MODE == 2) {
cout << b << ' ' << a << " -> " << a << ' ' << b;
}
}
void pu(int a, int b) {
address.append(a);
if (DEBUG_MODE == 2) {
cout << a;
}
}
void po(int a, int b) {
data.append(address.pop());
if (DEBUG_MODE == 2) {
cout << a;
}
}
void ju(int a, int b) {
ip=a-1;
if (DEBUG_MODE == 2) {
cout << ip;
}
}
void ca(int a, int b) {
address.append(ip);
ip=a-1;
if (DEBUG_MODE == 2) {
cout << ip;
}
}
void cc(int a, int b) {
if (b != 0) {
address.append(ip);
ip = a-1;
if (DEBUG_MODE == 2) {
cout << ip;
}
}
else if (DEBUG_MODE==2) {
cout << "condition faied";
}
}
void re(int a, int b) {
ip = address.pop();
if (DEBUG_MODE == 2) {
cout << ip;
}
}
void eq(int a, int b) {
data.append((b==a) ? -1 : 0);
if (DEBUG_MODE==2) {
cout << b << "==" << a;
}
}
void ne(int a, int b) {
data.append((b!=a) ? -1 : 0);
if (DEBUG_MODE==2) {
cout << b << "!=" << a;
}
}
void lt(int a, int b) {
data.append((b<a) ? -1 : 0);
if (DEBUG_MODE==2) {
cout << b << "<" << a;
}
}
void gt(int a, int b) {
data.append((b>a) ? -1 : 0);
if (DEBUG_MODE==2) {
cout << b << ">" << a;
}
}
void fe(int a, int b) {
if (a<0) {
switch (a) {
case -1:
data.append(data.sp+1);
break;
case -2:
data.append(address.sp+1);
break;
case -3:
data.append(MEMORY_SIZE);
break;
case -4:
data.append(2147483647);
break;
case -5:
data.append(-2147483648);
break;
}
return;
}
data.append(memory[a]);
if (DEBUG_MODE==2) {
cout << memory[a] << " from " << a;
}
}
void st(int a, int b) {
memory[a] = b;
if (DEBUG_MODE == 2) {
cout << b << " into " << a;
}
}
void ad(int a, int b) {
data.append(b+a);
if (DEBUG_MODE==2) {
cout << b << "+" << a << "=" << a+b;
}
}
void su(int a, int b) {
data.append(b-a);
if (DEBUG_MODE==2) {
cout << b << "-" << a << "=" << a-b;
}
}
void mu(int a, int b) {
data.append(b*a);
if (DEBUG_MODE==2) {
cout << b << "*" << a << "=" << a*b;
}
}
void di(int a, int b) {
data.append(b%a);
data.append(b/a);
if (DEBUG_MODE==2) {
cout << b << "/%" << a << "=" << b/a << ' ' << b%a;
}
}
void an(int a, int b) {
data.append(b&a);
if (DEBUG_MODE==2) {
cout << b << "&" << a << "=" << (a&b);
}
}
void Or(int a, int b) {
data.append(b|a);
if (DEBUG_MODE==2) {
cout << b << "|" << a << "=" << (a|b);
}
}
void xo(int a, int b) {
data.append(b^a);
if (DEBUG_MODE==2) {
cout << b << "^" << a << "=" << (a^b);
}
}
void sh(int a, int b) {
if (a < 1) {
data.append(b<<(0-a));
return;
}
data.append(b>>a);
if (DEBUG_MODE==2) {
cout << b << "by" << a;
}
}
void zr(int a, int b) {
if (a == 0) {
ip = address.pop();
if (DEBUG_MODE==2) {
cout << ip;
}
return;
}
data.append(a);
if (DEBUG_MODE==2) {
cout << "condition failed";
}
}
void ha(int a, int b) {
ip = MEMORY_SIZE+5;
}
void ie(int a, int b) {
data.append(IO_DEVICES);
}
void iq(int a, int b) {
//As I have my IO devices in order, to get it to work with my hack I am cheating here
data.append(0);//data.append(IO[a].version);
data.append(a);//data.append(IO[a].type);
}
void ii(int a, int b) {
switch (a) {
case 0:
cout << (char)data.pop();
break;
case 1:
char ch;
ch = cin.get();
data.append((int)ch);
default:
break;
}
}
typedef void (*Handler)(int, int);
Handler op[30] = {
no,
li,
du,
dr,
sw,
pu,
po,
ju,
ca,
cc,
re,
eq,
ne,
lt,
gt,
fe,
st,
ad,
su,
mu,
di,
an,
Or,
xo,
sh,
zr,
ha,
ie,
iq,
ii
};
string op_names[30] = {
"no","li","du","dr","sw","pu","po",
"ju","ca","cc","re","eq","ne","lt",
"gt","fe","st","ad","su","mu","di","an",
"Or","xo","sh","zr","ha","ie","iq","ii"
};
int index(string s) {
for (int i = 0; i<30; i++) {
if (op_names[i] == s) {
return i;
}
}
return 0;
}
int pack(string l) {
l=l.append("nononono");
l=replaceAll(l,"..","no");
int a=index(l.substr(0,2));
int b=index(l.substr(2,2));
int c=index(l.substr(4,2));
int d=index(l.substr(6,2));
return (a<<0)+(b<<8)+(c<<16)+(d<<24);
}
void unpack(int instr) {
unpacked0=(instr&0x000000FF)>>0;
unpacked1=(instr&0x0000FF00)>>8;
unpacked2=(instr&0x00FF0000)>>16;
unpacked3=(instr&0xFF000000)>>24;
}
bool contains(int instr, int *selection, int checkLength) {
for (int i=0; i<checkLength; i++) {
if (instr == selection[i]) {
return true;
}
}
return false;
}
void excecute(int instr) {
if (DEBUG_MODE==1) {
cout << ip << ' ' << op_names[instr] << " \n " << data.display() << " \n " << address.display() << "\n\n";
}
if (DEBUG_MODE==2) {
cout << op_names[instr] << ' ';
}
int two[15] = {4,9,11,12,13,14,16,17,18,19,20,21,22,23,24};
int zero[6] = {0,1,6,10,26,27};
int one[9] = {2,3,5,7,8,15,25,28,29};
if (contains(instr, two, 15)) {
int a=data.pop();
int b=data.pop();
op[instr](a,b);
}
else if (contains(instr, zero, 6)) {
op[instr](0,0);
}
else if (contains(instr, one, 9)) {
op[instr](data.pop(),0);
}
else {
cout << "invalid instruction " << instr << " in " << ip << "\n";
ip=MEMORY_SIZE+5;
}
if (DEBUG_MODE==2) {
cout << "\ndata: " << data.display() << "\n";
cout << "address: " << address.display() << "\n\n";
}
}
void run() {
while ((ip < MEMORY_SIZE) and (ip >= 0)) {
int instr = memory[ip];
unpack(instr);
if (DEBUG_MODE) {
cout << "===============\n";
}
if (DEBUG_MODE==2) {
cout << "ip:" << ip << ' ' << instr << '\n';
string fu = op_names[unpacked0];
fu=fu.append(op_names[unpacked1]).append(op_names[unpacked2]).append(op_names[unpacked3]);
cout << "commands: " << replaceAll(fu, "no","..") << '\n';
}
excecute(unpacked0);
excecute(unpacked1);
excecute(unpacked2);
excecute(unpacked3);
ip++;
}
}
void patch(vector<int> o, int start) {
for (int i=0; i<o.size(); i++) {
memory[i+start] = o[i];
}
;
}
int main() {
vector<int> l = {
1793,9687,9677,9701,202107,377,349,1028,1535,0,10,1,10,2,10,3,10,4,10,
5,10,6,10,7,10,8,10,11,10,12,10,13,10,14,10,15,10,16,10,
17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,68223234,1,2575,
85000450,1,656912,112,157,268505089,63,62,285281281,0,63,2063,10,101384453,0,9,10,2049,56,25,
459011,76,524546,76,302256641,1,10,16974595,0,50529798,10,25,524547,95,50529798,10,17108738,1,251790353,101777669,
1,17565186,86,524545,90,64,167838467,-1,134287105,3,59,659457,3,459023,107,2049,56,25,2049,107,
1793,114,2049,114,117506307,0,107,0,524545,26,112,168820993,0,126,1642241,126,134283523,11,112,1793,
107,524545,2049,107,1793,107,16846593,126,140,157,1793,64,16846593,126,112,157,1793,64,7,10,
659713,1,659713,2,659713,3,1793,167,17108737,3,2,524559,107,2049,107,2049,107,2049,121,168820998,
2,533,1028,167841793,180,9,17826049,0,180,2,15,25,524546,163,134287105,181,95,2305,182,459023,
190,134287361,181,185,659201,180,10,659969,7,2049,56,25,17694978,58,206,9,84152833,48,319750404,205,
117507601,208,184618754,45,25,16974851,-1,168886532,1,134284289,1,221,134284289,0,208,660227,32,0,0,115,
105,103,105,108,58,115,0,285278479,238,6,2576,524546,81,1641217,1,167838467,235,2049,250,2049,
246,524545,238,200,17826050,237,0,2572,2563,2049,228,1793,133,459023,133,17760513,145,3,165,8,
251727617,3,2,2049,159,16,168820993,-1,126,2049,159,2575,2049,200,17563906,0,288,9,1793,133,
285282049,3,2,134287105,126,285,524545,1793,107,16846593,3,0,107,8,659201,3,524545,26,112,17043201,
3,11,2049,112,2049,107,268505092,126,1642241,126,656131,659201,3,524545,11,112,2049,107,459009,23,
112,459009,55,112,459009,19,112,459009,21,112,1793,9,10,524546,159,134284303,161,1807,1028,1642241,
237,285282049,357,1,459012,352,117509889,180,352,134287105,357,200,16845825,0,365,349,1793,64,1793,379,
17826050,357,256,8,117506305,358,368,64,2116,11340,11700,11400,13685,13104,12432,12402,9603,9801,11514,11413,
11110,12528,11948,10302,13340,9700,13455,12753,10500,10670,12654,13320,11960,13908,10088,10605,11865,11025,0,2049,
200,987393,1,1793,107,524546,455,2049,453,2049,453,17891588,2,455,8,17045505,-24,-16,17043736,-8,
1118488,1793,107,17043202,1,169021201,2049,56,25,33883396,101450758,6404,459011,445,34668804,2,2049,442,524545,387,
445,302056196,387,659969,1,0,13,151,100,117,112,0,464,15,151,100,114,111,112,0,
471,17,151,115,119,97,112,0,479,25,151,99,97,108,108,0,487,27,151,101,
113,63,0,495,29,151,45,101,113,63,0,502,31,151,108,116,63,0,510,33,
151,103,116,63,0,517,35,151,102,101,116,99,104,0,524,37,151,115,116,111,
114,101,0,533,39,151,43,0,542,41,151,45,0,547,43,151,42,0,552,45,
151,47,109,111,100,0,557,47,151,97,110,100,0,565,49,151,111,114,0,572,
51,151,120,111,114,0,578,53,151,115,104,105,102,116,0,585,343,157,112,117,
115,104,0,594,346,157,112,111,112,0,602,340,157,48,59,0,609,56,145,102,
101,116,99,104,45,110,101,120,116,0,615,59,145,115,116,111,114,101,45,110,
101,120,116,0,629,228,145,115,58,116,111,45,110,117,109,98,101,114,0,643,
95,145,115,58,101,113,63,0,658,81,145,115,58,108,101,110,103,116,104,0,
667,64,145,99,104,111,111,115,101,0,679,74,151,105,102,0,689,72,145,45,
105,102,0,695,267,157,115,105,103,105,108,58,40,0,702,126,133,67,111,109,
112,105,108,101,114,0,713,3,133,72,101,97,112,0,725,107,145,44,0,733,
121,145,115,44,0,738,127,157,59,0,744,299,157,91,0,749,315,157,93,0,
754,2,133,68,105,99,116,105,111,110,97,114,121,0,759,158,145,100,58,108,
105,110,107,0,773,159,145,100,58,120,116,0,783,161,145,100,58,99,108,97,
115,115,0,791,163,145,100,58,110,97,109,101,0,802,145,145,99,108,97,115,
115,58,119,111,114,100,0,812,157,145,99,108,97,115,115,58,109,97,99,114,
111,0,826,133,145,99,108,97,115,115,58,100,97,116,97,0,841,165,145,100,
58,97,100,100,45,104,101,97,100,101,114,0,855,268,157,115,105,103,105,108,
58,35,0,871,274,157,115,105,103,105,108,58,58,0,882,291,157,115,105,103,
105,108,58,38,0,893,272,157,115,105,103,105,108,58,36,0,904,330,157,114,
101,112,101,97,116,0,915,332,157,97,103,97,105,110,0,925,377,145,105,110,
116,101,114,112,114,101,116,0,934,200,145,100,58,108,111,111,107,117,112,0,
947,151,145,99,108,97,115,115,58,112,114,105,109,105,116,105,118,101,0,959,
4,133,86,101,114,115,105,111,110,0,978,424,145,105,0,989,107,145,100,0,
994,418,145,114,0,999,205,133,66,97,115,101,0,1004,349,145,101,114,114,58,
110,111,116,102,111,117,110,100,0,115,116,111,114,101,0,110,0,101,116,0,
101,114,118,101,0,115,0,0,0,0,0,63,64,91,92,93,94,96,123,124,
125,126,0,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,
89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1012,1543,145,
69,79,77,0,1,-3,15,10,1536,1556,145,100,101,112,116,104,0,1,-1,15,
10,1547,1570,145,100,58,108,97,115,116,0,1,2,15,10,1560,1587,145,100,58,
108,97,115,116,46,120,116,0,2049,1570,2049,159,15,10,1574,1609,145,100,58,108,
97,115,116,46,99,108,97,115,115,0,2049,1570,2049,161,15,10,1593,1630,145,100,
58,108,97,115,116,46,110,97,109,101,0,2049,1570,2049,163,10,1615,1646,145,114,
101,99,108,97,115,115,0,2049,1570,2049,161,16,10,1635,1665,145,105,109,109,101,
100,105,97,116,101,0,1,157,2049,1646,10,1652,1678,145,100,97,116,97,0,1,
133,2049,1646,10,1670,1696,145,112,114,105,109,105,116,105,118,101,0,1,151,2049,
1646,10,1683,1706,157,40,0,10,1701,1712,157,41,0,10,1707,1728,145,99,111,109,
112,105,108,101,58,108,105,116,0,1,1,2049,107,2049,107,10,1713,1751,145,99,
111,109,112,105,108,101,58,106,117,109,112,0,1,1793,2049,107,2049,107,10,1735,
1774,145,99,111,109,112,105,108,101,58,99,97,108,108,0,1,2049,2049,107,2049,
107,10,1758,1796,145,99,111,109,112,105,108,101,58,114,101,116,0,1,10,2049,
107,10,1781,1815,145,99,111,109,112,105,108,105,110,103,63,0,1,126,15,10,
1801,1830,157,115,105,103,105,108,58,96,0,2049,228,2049,107,10,1819,1846,157,115,
105,103,105,108,58,92,0,2049,424,10,1835,1860,157,115,105,103,105,108,58,94,
0,2049,418,10,1849,1871,145,104,101,114,101,0,1,3,15,10,1863,1886,157,115,
105,103,105,108,58,64,0,2049,200,2049,159,15,2049,1815,1793,1902,1,3841,2049,107,
2049,107,10,1,1895,1793,1908,15,10,1,1906,2049,64,10,1875,1924,157,115,105,103,
105,108,58,33,0,2049,200,2049,159,15,2049,1815,1793,1940,1,4097,2049,107,2049,107,
10,1,1933,1793,1946,16,10,1,1944,2049,64,10,1913,1963,145,100,58,99,114,101,
97,116,101,0,1,133,1,0,2049,165,2049,1871,2049,1570,2049,159,16,10,1951,1986,
145,118,97,114,45,110,0,2049,1963,2049,107,10,1977,1998,145,118,97,114,0,134284289,
0,1986,10,1991,2011,145,99,111,110,115,116,0,2049,1963,2049,1570,2049,159,16,10,
2002,2027,151,116,117,99,107,0,100926722,10,2019,2037,151,111,118,101,114,0,67502597,10,
2029,2046,151,110,105,112,0,772,10,2039,2061,151,100,114,111,112,45,112,97,105,
114,0,771,10,2048,2071,151,63,100,117,112,0,6402,10,2063,2085,145,100,117,112,
45,112,97,105,114,0,67502597,67502597,10,2073,2095,145,100,105,112,0,525572,6,10,2088,
2105,145,115,105,112,0,67502597,1,25,2049,2095,10,2098,2117,145,98,105,0,1,2105,
2049,2095,8,10,2111,2130,145,98,105,42,0,1,2095,2049,2095,8,10,2123,2143,145,
98,105,64,0,2,2049,2130,10,2136,2154,145,116,114,105,0,1793,2163,1,2105,2049,
2095,2049,2105,10,1,2156,2049,2095,8,10,2147,2177,145,116,114,105,42,0,1793,2194,
1793,2187,4,1,2095,2049,2095,10,1,2181,2049,2095,2049,2095,10,1,2179,2049,2095,8,
10,2169,2208,145,116,114,105,64,0,2,2,2049,2177,10,2200,2222,145,119,104,105,
108,101,0,1793,2231,525570,1639430,3,1,2224,7,10,1,2224,8,3,10,2213,2245,145,
117,110,116,105,108,0,1793,2256,525570,385942534,-1,25,3,1,2247,7,10,1,2247,8,
3,10,2236,2270,145,116,105,109,101,115,0,1793,2282,4,25,33886721,1,2053,1542,1,
2273,7,10,1,2272,8,3,10,2261,2298,157,115,105,103,105,108,58,124,0,2049,
200,1793,2306,2049,159,15,10,1,2302,1793,2314,2049,161,15,10,1,2310,2049,2117,2049,
1815,1793,2329,1,133,2049,2095,2049,1774,10,1,2322,1,25,2049,64,10,2287,2344,145,
84,82,85,69,0,1,-1,10,2336,2356,145,70,65,76,83,69,0,1,0,10,
2347,2367,145,99,97,115,101,0,1793,2372,67502597,11,10,1,2369,2049,2095,4,1793,2384,
772,8,2049,2344,10,1,2379,1793,2392,3,2049,2356,10,1,2388,2049,64,25,6,3,
3,10,2359,2411,145,115,58,99,97,115,101,0,1793,2417,67502597,2049,95,10,1,2413,
2049,2095,4,1793,2429,772,8,2049,2344,10,1,2424,1793,2437,3,2049,2356,10,1,2433,
2049,64,25,6,3,3,10,2401,2453,145,110,111,116,0,1,-1,23,10,2446,2466,
145,108,116,101,113,63,0,2049,2085,101516555,22,10,2457,2480,145,103,116,101,113,63,
0,4,2049,2466,10,2471,2493,145,110,58,77,65,88,0,1,-5,15,10,2484,2506,
145,110,58,77,73,78,0,1,-4,15,10,2497,2521,145,110,58,122,101,114,111,
63,0,1,0,11,10,2510,2537,145,110,58,45,122,101,114,111,63,0,1,0,
12,10,2525,2556,145,110,58,110,101,103,97,116,105,118,101,63,0,1,0,13,
10,2541,2575,145,110,58,112,111,115,105,116,105,118,101,63,0,1,-1,14,10,
2560,2603,145,110,58,115,116,114,105,99,116,108,121,45,112,111,115,105,116,105,
118,101,63,0,1,0,14,10,2579,2618,145,110,58,101,118,101,110,63,0,1,
2,20,3,2049,2521,10,2607,2635,145,110,58,111,100,100,63,0,2049,2618,2049,2453,
10,2625,2647,145,105,102,59,0,67502597,1,74,2049,2095,25,6,771,10,2640,2664,145,
45,105,102,59,0,67502597,1,72,2049,2095,2049,2453,25,6,771,10,2656,2682,157,105,
102,58,0,1,25,2049,107,1,3,2049,107,10,2675,2699,157,45,105,102,58,0,
1,1644289,2049,107,1,-1,2049,107,1,3,2049,107,10,2691,2719,151,114,111,116,0,
67503109,10,2712,2726,151,47,0,197652,10,2721,2735,151,109,111,100,0,788,10,2728,2746,
145,110,58,112,111,119,0,1,1,4,1793,2754,67502597,19,10,1,2751,2049,2270,772,
10,2737,2772,145,110,58,110,101,103,97,116,101,0,1,-1,19,10,2760,2788,145,
110,58,115,113,117,97,114,101,0,4866,10,2776,2800,145,110,58,115,113,114,116,
0,1,1,1793,2818,2049,2085,197652,67502597,18,1,2,197652,25,17,1,2804,7,10,1,
2804,8,772,10,2790,2832,145,110,58,109,105,110,0,2049,2085,13,1793,2839,3,10,
1,2837,1793,2845,772,10,1,2843,2049,64,10,2823,2859,145,110,58,109,97,120,0,
2049,2085,14,1793,2866,3,10,1,2864,1793,2872,772,10,1,2870,2049,64,10,2850,2886,
145,110,58,97,98,115,0,2,2049,2556,1,2772,9,10,2877,2904,145,110,58,108,
105,109,105,116,0,4,5,2049,2832,6,2049,2859,10,2893,2921,145,110,58,105,110,
99,0,1,1,17,10,2912,2934,145,110,58,100,101,99,0,1,1,18,10,2925,
2952,145,110,58,98,101,116,119,101,101,110,63,0,67503109,1793,2960,67503109,67503109,2049,2904,
10,1,2955,2049,2105,11,10,2938,2978,145,118,58,105,110,99,45,98,121,0,1793,
2982,4367,10,1,2980,2049,2105,16,10,2966,3000,145,118,58,100,101,99,45,98,121,
0,1793,3004,1180687,10,1,3002,2049,2105,16,10,2988,3019,145,118,58,105,110,99,0,
1,1,4,2049,2978,10,3010,3034,145,118,58,100,101,99,0,1,1,4,2049,3000,
10,3025,3051,145,118,58,108,105,109,105,116,0,251790597,1542,2049,2904,4100,10,3040,3065,
145,118,58,111,110,0,2049,2344,4100,10,3057,3078,145,118,58,111,102,102,0,2049,
2356,4100,10,3069,3091,145,97,108,108,111,116,0,1,3,2049,2978,10,3082,3110,145,
118,58,112,114,101,115,101,114,118,101,0,983556,1793,3118,1,25,2049,2095,10,1,
3113,2049,2095,4100,10,3096,3136,145,118,58,117,112,100,97,116,101,0,4,1793,3143,
15,4,8,10,1,3139,2049,2105,16,10,3124,3157,145,99,111,112,121,0,1793,3166,
285278725,1,33951492,268767489,1,6,10,1,3159,2049,2270,771,10,3149,3185,145,83,99,111,112,
101,76,105,115,116,0,9493,9591,10,3172,3194,145,123,123,0,2049,1570,2,1,3185,
2049,59,16,10,3188,3219,145,45,45,45,114,101,118,101,97,108,45,45,45,0,
2049,1570,1,3185,2049,2921,16,10,3203,3233,145,125,125,0,1,3185,2049,56,4,15,
11,1793,3247,3841,3185,4097,2,10,1,3242,1793,3273,3841,3185,1793,3268,1,2,983567,1,
3185,2049,2921,1641487,3,1,3257,7,10,1,3255,8,16,10,1,3251,2049,64,10,3227,
3287,133,115,116,97,114,116,0,0,10,3278,3296,133,101,110,100,0,0,10,3289,
3311,145,116,101,114,109,105,110,97,116,101,0,1,0,3841,3296,16,10,3227,3333,
145,98,117,102,102,101,114,58,115,116,97,114,116,0,3841,3287,10,3317,3350,145,
98,117,102,102,101,114,58,101,110,100,0,3841,3296,10,3336,3367,145,98,117,102,
102,101,114,58,97,100,100,0,3841,3296,16,1,3296,2049,3019,2049,3311,10,3353,3391,
145,98,117,102,102,101,114,58,103,101,116,0,1,3296,2049,3034,3841,3296,15,2049,
3311,10,3377,3417,145,98,117,102,102,101,114,58,101,109,112,116,121,0,3841,3287,
4097,3296,2049,3311,10,3401,3439,145,98,117,102,102,101,114,58,115,105,122,101,0,
3841,3296,3841,3287,18,10,3424,3459,145,98,117,102,102,101,114,58,115,101,116,0,
4097,3287,2049,3417,10,3445,3483,145,98,117,102,102,101,114,58,112,114,101,115,101,
114,118,101,0,3841,3287,3841,3296,1793,3496,1,25,2049,2095,4097,3287,10,1,3489,2049,
2095,4097,3296,10,3464,3518,133,84,101,109,112,83,116,114,105,110,103,115,0,32,
3503,3536,133,84,101,109,112,83,116,114,105,110,103,77,97,120,0,512,3519,3548,
145,83,84,82,73,78,71,83,0,2049,1543,3841,3518,3841,3536,19,18,10,3537,3568,
133,67,117,114,114,101,110,116,0,0,10,3557,3583,145,115,58,112,111,105,110,
116,101,114,0,3841,3568,3841,3536,19,2049,3548,17,10,3570,3602,145,115,58,110,101,
120,116,0,1,3568,2049,3019,3841,3568,3841,3518,11,1793,3618,1,0,4097,3568,10,1,
3613,9,10,3537,3632,145,115,58,116,101,109,112,0,2,2049,81,2049,2921,2049,3583,
4,2049,3157,2049,3583,2049,3602,10,3622,3658,145,115,58,101,109,112,116,121,0,2049,
3583,2049,3602,1,0,67502597,16,10,3647,3677,145,115,58,115,107,105,112,0,6,1793,
3685,68223234,1,786703,0,10,1,3680,2049,2222,2049,2934,5,10,3667,3703,145,115,58,107,
101,101,112,0,2049,1815,1793,3712,1,3677,2049,1774,10,1,3707,9,2049,1871,1,121,
2049,2095,2049,133,10,3693,3735,157,115,105,103,105,108,58,39,0,2049,1815,1,3703,
1,3632,2049,64,10,3724,3754,145,115,58,99,104,111,112,0,2049,3632,2,2049,81,
67502597,17,2049,2934,1,0,4,16,10,3744,3781,145,115,58,114,101,118,101,114,115,
101,0,1793,3823,2,2049,3632,2049,3459,1,81,1793,3799,2,2049,81,17,2049,2934,10,
1,3792,2049,2117,4,1793,3813,2,15,2049,3367,2049,2934,10,1,3806,2049,2270,3,2049,
3333,2049,3632,10,1,3783,2049,3483,10,3768,3841,145,115,58,112,114,101,112,101,110,
100,0,2049,3632,1793,3865,2,2049,81,17,1793,3857,2,2049,81,2049,2921,10,1,3851,
2049,2095,4,2049,3157,10,1,3845,2049,2105,10,3828,3882,145,115,58,97,112,112,101,
110,100,0,4,2049,3841,10,3870,3900,145,115,58,102,111,114,45,101,97,99,104,
0,1793,3915,67502597,6415,3,67502597,67502597,251987205,2054,101777670,1,1,3902,7,10,1,3902,8,771,
10,3886,3934,145,115,58,105,110,100,101,120,45,111,102,0,4,1793,3948,68223234,1,
6415,33883396,101450758,6404,3,1,3937,7,10,1,3937,1793,3957,18,2049,2934,772,10,1,3952,
1793,3966,2049,81,67502597,11,10,1,3961,2049,2154,1793,3976,3,1,-1,10,1,3972,9,
10,3920,4000,145,115,58,99,111,110,116,97,105,110,115,45,99,104,97,114,63,
0,2049,3934,1,-1,12,10,3980,4016,145,115,58,104,97,115,104,0,1,5381,4,
1793,4024,286458116,33,10,1,4021,2049,3900,10,4006,4036,133,83,114,99,0,0,4029,4044,
133,84,97,114,0,0,4037,4052,133,80,97,100,0,0,4045,4058,133,73,0,0,
4053,4064,133,70,0,0,4059,4071,133,65,116,0,0,4065,4085,145,116,101,114,109,
105,110,97,116,101,0,1,0,3841,4052,3841,4044,2049,81,17,16,10,4072,4107,145,
101,120,116,114,97,99,116,0,3841,4036,3841,4058,17,3841,4052,3841,4044,2049,81,2049,
3157,10,4096,4132,145,99,111,109,112,97,114,101,0,3841,4052,3841,4044,2049,95,3841,
4064,22,4097,4064,3841,4064,1793,4152,3841,4058,4097,4071,10,1,4147,2049,72,10,4121,4165,
145,110,101,120,116,0,1,4058,2049,3019,10,4006,4192,145,115,58,99,111,110,116,
97,105,110,115,45,115,116,114,105,110,103,63,0,4097,4044,4097,4036,2049,3658,4097,
4052,1,0,4097,4058,1,0,4097,4064,3841,4036,2049,81,1793,4223,2049,4107,2049,4085,2049,
4132,2049,4165,10,1,4214,2049,2270,3841,4064,10,4170,4237,133,83,116,114,0,0,4230,
4249,145,101,120,116,114,97,99,116,0,2049,2085,3841,4237,4,2049,3157,3841,-1,67502597,
17,1,0,4,16,10,4238,4274,145,99,104,101,99,107,0,1,4249,2049,2095,1793,
4285,1,2921,2049,2095,10,1,4280,2049,2095,3841,4237,2049,4016,67502597,11,10,4265,4308,145,
108,111,99,97,116,105,111,110,0,67503109,67503109,1793,4341,1793,4336,4,1793,4322,67502597,2049,
2521,21,10,1,4317,2049,2095,4,1793,4332,772,2,10,1,4329,9,10,1,4314,2049,
2095,10,1,4312,2049,2095,10,4296,4355,145,115,101,116,117,112,0,2049,3658,4097,4237,
1,0,67503109,67503109,1,81,1,4016,2049,2117,2049,3658,2049,3459,1793,4379,67502597,2049,81,10,
1,4375,2049,2095,4,10,4170,4406,145,115,58,105,110,100,101,120,45,111,102,45,
115,116,114,105,110,103,0,67502597,1793,4432,1793,4425,2049,4355,1793,4420,2049,4274,2049,4308,
10,1,4415,2049,2270,10,1,4411,2049,3483,771,3,10,1,4409,2049,2095,18,1,2,
18,1,-1,2049,2859,10,4385,4457,145,115,58,102,105,108,116,101,114,0,1793,4485,
2049,3658,2049,3459,4,1793,4477,2049,2085,4,8,1,3367,1,15,2049,64,10,1,4466,
2049,3900,3,2049,3333,10,1,4459,2049,3483,10,4445,4499,145,115,58,109,97,112,0,
1793,4521,2049,3658,2049,3459,4,1793,4513,67502597,8,2049,3367,10,1,4508,2049,3900,3,2049,
3333,10,1,4501,2049,3483,10,4490,4538,145,115,58,115,117,98,115,116,114,0,1793,
4544,17,2049,3658,10,1,4540,2049,2095,1793,4556,67502597,1,3157,2049,2095,10,1,4550,2049,
2105,67502597,1793,4569,17,1,0,4,16,10,1,4563,2049,2095,10,4526,4585,145,115,58,
114,105,103,104,116,0,67502597,2049,81,67502597,18,4,2049,4538,10,4574,4604,145,115,58,
108,101,102,116,0,1,0,4,2049,4538,10,4594,4628,145,115,58,98,101,103,105,
110,115,45,119,105,116,104,63,0,2,2049,81,1,17,2049,2095,2049,4604,2049,95,
10,4610,4656,145,115,58,101,110,100,115,45,119,105,116,104,63,0,2,2049,81,
1,17,2049,2095,2049,4585,2049,95,10,4640,4678,145,115,58,99,111,112,121,0,67502597,
2049,81,2049,2921,2049,3157,10,4668,4698,145,115,58,68,73,71,73,84,83,0,2049,
3677,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,0,1,4700,
10,4686,4741,145,115,58,65,83,67,73,73,45,76,79,87,69,82,67,65,83,
69,0,2049,3677,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
113,114,115,116,117,118,119,120,121,122,0,1,4743,10,4720,4794,145,115,58,65,
83,67,73,73,45,85,80,80,69,82,67,65,83,69,0,2049,3677,65,66,67,
68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,
88,89,90,0,1,4796,10,4773,4845,145,115,58,65,83,67,73,73,45,76,69,
84,84,69,82,83,0,2049,3677,97,98,99,100,101,102,103,104,105,106,107,108,
109,110,111,112,113,114,115,116,117,118,119,120,121,122,65,66,67,68,69,70,
71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
0,1,4847,10,4826,4920,145,115,58,80,85,78,67,84,85,65,84,73,79,78,
0,2049,3677,95,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,58,
59,60,61,62,63,64,91,92,93,94,96,123,124,125,126,0,1,4922,1,95,
67502597,16,10,4903,4978,133,115,58,87,72,73,84,69,83,80,65,67,69,0,32,
9,10,13,0,4962,4988,157,39,0,1,3658,2049,145,10,4983,4998,157,36,0,1,
0,2049,133,10,4993,0,133,65,83,67,73,73,58,78,85,76,0,5003,27,133,
65,83,67,73,73,58,69,83,67,0,5016,8,133,65,83,67,73,73,58,66,
83,0,5029,9,133,65,83,67,73,73,58,72,84,0,5041,10,133,65,83,67,
73,73,58,76,70,0,5053,11,133,65,83,67,73,73,58,86,84,0,5065,12,
133,65,83,67,73,73,58,70,70,0,5077,13,133,65,83,67,73,73,58,67,
82,0,5089,32,133,65,83,67,73,73,58,83,80,65,67,69,0,5101,127,133,
65,83,67,73,73,58,68,69,76,0,5116,1,133,65,83,67,73,73,58,83,
79,72,0,5129,2,133,65,83,67,73,73,58,83,84,88,0,5142,3,133,65,
83,67,73,73,58,69,84,88,0,5155,4,133,65,83,67,73,73,58,69,79,
84,0,5168,5,133,65,83,67,73,73,58,69,78,81,0,5181,6,133,65,83,
67,73,73,58,65,67,75,0,5194,7,133,65,83,67,73,73,58,66,69,76,
0,5207,14,133,65,83,67,73,73,58,83,79,0,5220,15,133,65,83,67,73,
73,58,83,73,0,5232,16,133,65,83,67,73,73,58,68,76,69,0,5244,17,
133,65,83,67,73,73,58,68,67,49,0,5257,18,133,65,83,67,73,73,58,
68,67,50,0,5270,19,133,65,83,67,73,73,58,68,67,51,0,5283,20,133,
65,83,67,73,73,58,68,67,52,0,5296,21,133,65,83,67,73,73,58,78,
65,75,0,5309,22,133,65,83,67,73,73,58,83,89,78,0,5322,23,133,65,
83,67,73,73,58,69,84,66,0,5335,24,133,65,83,67,73,73,58,67,65,
78,0,5348,25,133,65,83,67,73,73,58,69,77,0,5361,26,133,65,83,67,
73,73,58,83,85,66,0,5373,28,133,65,83,67,73,73,58,70,83,0,5386,
29,133,65,83,67,73,73,58,71,83,0,5398,30,133,65,83,67,73,73,58,
82,83,0,5410,31,133,65,83,67,73,73,58,85,83,0,5422,5450,145,99,58,
108,111,119,101,114,99,97,115,101,63,0,1,97,1,122,2049,2952,10,5434,5473,
145,99,58,117,112,112,101,114,99,97,115,101,63,0,1,65,1,90,2049,2952,
10,5457,5493,145,99,58,108,101,116,116,101,114,63,0,1,5450,1,5473,2049,2117,
22,10,5480,5513,145,99,58,100,105,103,105,116,63,0,1,48,1,57,2049,2952,
10,5501,5534,145,99,58,118,105,115,105,98,108,101,63,0,1,32,1,126,2049,
2952,10,5520,5553,145,99,58,118,111,119,101,108,63,0,2049,3677,97,101,105,111,
117,65,69,73,79,85,0,1,5555,4,2049,4000,10,5541,5588,145,99,58,99,111,
110,115,111,110,97,110,116,63,0,2,2049,5493,1793,5598,2049,5553,2049,2453,10,1,
5593,1793,5606,3,2049,2356,10,1,5602,2049,64,10,5572,5628,145,99,58,119,104,105,
116,101,115,112,97,99,101,63,0,1,4978,4,2049,4000,10,5611,5651,145,99,58,
45,108,111,119,101,114,99,97,115,101,63,0,2049,5450,2049,2453,10,5634,5673,145,
99,58,45,117,112,112,101,114,99,97,115,101,63,0,2049,5473,2049,2453,10,5656,
5691,145,99,58,45,100,105,103,105,116,63,0,2049,5513,2049,2453,10,5678,5714,145,
99,58,45,119,104,105,116,101,115,112,97,99,101,63,0,2049,5628,2049,2453,10,
5696,5734,145,99,58,45,118,105,115,105,98,108,101,63,0,2049,5534,2049,2453,10,
5719,5752,145,99,58,45,118,111,119,101,108,63,0,2049,5553,2049,2453,10,5739,5774,
145,99,58,45,99,111,110,115,111,110,97,110,116,63,0,2049,5588,2049,2453,10,
5757,5793,145,99,58,116,111,45,117,112,112,101,114,0,2,2049,5450,25,3,1,
32,18,10,5779,5816,145,99,58,116,111,45,108,111,119,101,114,0,2,2049,5473,
25,3,1,32,17,10,5802,5840,145,99,58,116,111,45,115,116,114,105,110,103,
0,2049,3677,46,0,1,5842,2049,3632,1,37,2049,2105,10,5825,5870,145,99,58,116,
111,103,103,108,101,45,99,97,115,101,0,2,2049,5450,1,5793,1,5816,2049,64,
10,5853,5895,145,99,58,116,111,45,110,117,109,98,101,114,0,2,2049,5513,1793,
5904,1,48,18,10,1,5900,1793,5912,3,1,0,10,1,5908,2049,64,10,5880,5931,
145,115,58,116,111,45,117,112,112,101,114,0,1,5793,2049,4499,10,5917,5950,145,
115,58,116,111,45,108,111,119,101,114,0,1,5816,2049,4499,10,5936,5970,145,115,
58,116,114,105,109,45,108,101,102,116,0,2049,3632,1793,5984,2049,56,1,5628,1,
2537,2049,2117,21,10,1,5974,2049,2222,2049,2934,10,5955,6007,145,115,58,116,114,105,
109,45,114,105,103,104,116,0,2049,3632,2049,3781,2049,5970,2049,3781,10,5991,6026,145,
115,58,116,114,105,109,0,2049,6007,2049,5970,10,6016,6053,133,82,101,119,114,105,
116,101,85,110,100,101,114,115,99,111,114,101,115,0,-1,6031,6061,145,115,117,
98,0,1,95,1793,6068,1,32,10,1,6065,2049,2367,10,6054,6084,145,114,101,119,
114,105,116,101,0,3841,6053,1793,6093,1,6061,2049,4499,10,1,6088,9,10,6073,6107,
145,104,97,110,100,108,101,0,1,3735,8,10,6031,6122,157,115,105,103,105,108,
58,39,0,2049,6084,2049,6107,10,6111,6143,145,115,58,115,112,108,105,116,47,99,
104,97,114,0,2049,2085,2049,3934,772,2049,2085,2049,4604,1,39,2049,2095,10,6127,6175,
145,115,58,115,112,108,105,116,47,115,116,114,105,110,103,0,2049,2085,2049,4406,
2049,2921,772,2049,2085,2049,4604,1,39,2049,2095,10,6157,6204,145,115,58,114,101,112,
108,97,99,101,0,67502597,2049,81,2049,1871,16,1793,6220,2049,6175,4,2049,1871,15,17,
10,1,6212,2049,2095,2049,3841,2049,3882,10,6191,6241,133,83,112,108,105,116,45,79,
110,0,0,6229,6252,145,109,97,116,99,104,63,0,3841,6241,11,10,6242,6269,145,
116,101,114,109,105,110,97,116,101,0,1,0,67502597,2049,2934,16,10,6256,6284,145,
115,116,101,112,0,1,2921,2049,2095,2049,6252,1793,6298,2,2049,107,2049,6269,10,1,
6292,9,10,6191,6316,145,115,58,116,111,107,101,110,105,122,101,0,4097,6241,2049,
3703,2049,1871,1,0,2049,107,1793,6338,2,2049,107,2,1,6284,2049,3900,3,10,1,
6328,2049,2095,2049,1871,67502597,18,2049,2934,67502597,16,10,6302,6361,133,78,101,101,100,108,
101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,6351,6496,133,76,101,110,0,0,6489,6507,
133,84,111,107,101,110,115,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6497,6641,133,84,
80,0,0,6635,6650,145,115,97,118,101,0,2049,3703,3841,6641,1,6507,17,2049,2921,
16,1,6641,2049,3019,10,6642,6673,145,110,101,120,116,0,1793,6679,3841,6496,17,10,
1,6675,2049,2105,10,6665,6693,145,100,111,110,101,63,0,2049,81,2049,2521,10,6302,
6722,145,115,58,116,111,107,101,110,105,122,101,45,111,110,45,115,116,114,105,
110,103,0,1,0,4097,6641,1793,6736,2,1,6361,2049,4678,2049,3882,10,1,6728,1793,
6745,2049,81,4097,6496,10,1,6740,2049,2117,1793,6762,1,6361,2049,6175,2049,6650,2049,6673,
2049,6693,10,1,6751,2049,2245,1,6507,3841,6641,2049,2934,4097,6507,10,6698,6787,145,102,
111,114,45,101,97,99,104,0,4,2049,56,1,17,2049,2095,1793,6803,5,2049,56,
84018692,525572,1542,10,1,6796,2049,2270,771,10,6775,6823,145,115,117,98,115,116,105,116,
117,116,101,0,2049,3548,1,129,18,10,6809,6840,145,101,120,116,114,97,99,116,
0,2049,6823,2049,4678,10,6829,6857,145,116,111,107,101,110,105,122,101,0,2049,6722,
2049,3658,10,6845,6873,145,99,111,109,98,105,110,101,0,2049,6823,2049,3882,2049,3882,
10,6862,6889,145,109,101,114,103,101,0,4,1,6873,2049,6787,772,10,6880,6908,145,
102,105,110,100,45,101,110,100,0,2,2049,81,2049,6823,2049,81,18,67502597,17,10,
6896,6928,145,99,108,101,97,110,0,2049,6908,1,0,4,16,10,6698,6952,145,115,
58,114,101,112,108,97,99,101,45,97,108,108,0,1,3,1793,6967,2049,6840,2049,
6857,2049,6889,2049,6928,2049,3632,10,1,6956,2049,3110,10,6935,6982,133,83,116,114,105,
110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,6972,7062,145,99,104,101,99,107,45,115,105,
103,110,0,2049,2556,1793,7071,1,45,2049,3367,10,1,7066,9,10,7048,7087,145,110,
45,62,100,105,103,105,116,0,2049,4698,17,15,10,7075,7103,145,99,111,110,118,
101,114,116,0,1793,7117,3841,205,20,4,2049,7087,2049,3367,2,2049,2521,10,1,7105,
2049,2245,3,10,6935,7138,145,110,58,116,111,45,115,116,114,105,110,103,0,1793,
7152,1,6982,2049,3459,2,2049,2886,2049,7103,2049,7062,10,1,7140,2049,3483,1,6982,2049,
3781,10,7123,7169,145,99,104,97,114,0,1,32,1793,7178,1,95,2049,3367,10,1,
7173,2049,2367,1,114,1793,7191,1,13,2049,3367,10,1,7186,2049,2367,1,110,1793,7204,
1,10,2049,3367,10,1,7199,2049,2367,1,116,1793,7217,1,9,2049,3367,10,1,7212,
2049,2367,1,48,1793,7230,1,0,2049,3367,10,1,7225,2049,2367,1,94,1793,7243,1,
27,2049,3367,10,1,7238,2049,2367,2049,3367,10,7161,7258,145,116,121,112,101,0,1,
99,1793,7266,4,2049,3367,10,1,7262,2049,2367,1,115,1793,7280,4,1,3367,2049,3900,
10,1,7274,2049,2367,1,110,1793,7296,4,2049,7138,1,3367,2049,3900,10,1,7288,2049,
2367,3,10,7250,7312,145,104,97,110,100,108,101,0,1,92,1793,7321,2049,56,2049,
7169,10,1,7316,2049,2367,1,37,1793,7334,2049,56,2049,7258,10,1,7329,2049,2367,2049,
3367,10,7123,7353,145,115,58,102,111,114,109,97,116,0,1793,7382,2049,3658,1793,7377,
2049,3459,1793,7372,2049,56,25,2049,7312,1,7363,7,10,1,7363,8,3,10,1,7359,
2049,2105,10,1,7355,2049,3483,10,7341,7398,145,115,58,99,111,110,115,116,0,1,
3703,2049,2095,2049,2011,10,7387,7415,133,86,97,108,117,101,115,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,7405,7451,145,102,114,111,109,0,2049,81,2,1793,7469,1793,7462,1,
7415,4113,10,1,7458,2049,2105,2049,2934,10,1,7456,2049,2270,3,10,7443,7481,145,116,
111,0,2,2049,81,1793,7497,2049,56,1,97,18,2049,2921,1,7415,266001,10,1,7486,
2049,2270,3,10,7387,7514,145,114,101,111,114,100,101,114,0,1,7451,2049,2095,2049,
7481,10,7503,7530,145,99,117,114,114,121,0,2049,1871,1793,7540,4,2049,1728,2049,1751,
10,1,7534,2049,2095,10,7521,7553,145,100,111,101,115,0,2049,1587,4,2049,7530,2049,
1570,2049,159,16,1,145,2049,1646,10,7545,7582,145,100,58,102,111,114,45,101,97,
99,104,0,1,2,1793,7608,6415,2049,2085,1793,7600,1793,7595,2052,10,1,7593,2049,2095,
10,1,7591,2049,2095,1,7586,7,10,1,7586,8,3,10,7568,7628,145,100,58,108,
111,111,107,117,112,45,120,116,0,1,0,4,1793,7653,2049,2085,2049,159,2831,1793,
7646,4,1,2046,2049,2095,10,1,7640,1,15,2049,64,10,1,7633,2049,7582,3,10,
7613,7671,145,97,58,108,101,110,103,116,104,0,15,10,7659,7694,145,97,58,99,
111,117,110,116,101,100,45,114,101,115,117,108,116,115,0,8,2049,1871,1793,7707,
2,2049,107,1,107,2049,2270,10,1,7699,2049,2095,10,7673,7729,145,97,58,102,114,
111,109,45,115,116,114,105,110,103,0,2049,1871,1793,7743,2,2049,81,2049,107,1,
107,2049,3900,10,1,7733,2049,2095,10,7712,7762,145,97,58,102,111,114,45,101,97,
99,104,0,4,2049,56,1,17,2049,2095,1793,7778,5,2049,56,84018692,525572,1542,10,1,
7771,2049,2270,771,10,7748,7793,145,97,58,100,117,112,0,2049,1871,1793,7806,2,15,
2049,107,1,107,2049,7762,10,1,7797,2049,2095,10,7784,7821,145,97,58,99,111,112,
121,0,1,3,1793,7837,4097,3,2,2049,7671,2049,107,1,107,2049,7762,10,1,7825,
2049,3110,10,7811,7857,145,97,58,116,111,45,115,116,114,105,110,103,0,1,3,
1793,7870,2049,7793,1,0,2049,107,2049,2921,10,1,7861,2049,3110,2049,3632,10,7842,7889,
145,97,58,97,112,112,101,110,100,0,2049,2085,1,35,2049,2143,17,2049,1871,1793,
7914,2049,107,1793,7909,1,107,2049,7762,10,1,7904,2049,2143,10,1,7900,2049,2095,10,
7877,7932,145,97,58,112,114,101,112,101,110,100,0,4,2049,7889,10,7919,7946,145,
97,58,99,104,111,112,0,2049,7793,1,-1,2049,3091,2,2049,3034,10,7936,7968,145,
97,58,102,105,108,116,101,114,0,1793,7983,67502597,1,25,2049,2095,4,1,107,1,
15,2049,64,10,1,7970,2049,7530,2049,1871,1793,7998,67502597,15,2049,107,2049,7762,10,1,
7991,2049,2095,2049,1871,67502597,18,2049,2934,67502597,16,10,7956,8026,145,97,58,99,111,110,
116,97,105,110,115,63,0,1,0,4,1793,8038,4,5,67502597,11,6,22,10,1,
8031,2049,7762,772,10,8011,8066,145,97,58,99,111,110,116,97,105,110,115,45,115,
116,114,105,110,103,63,0,1,0,4,1793,8079,4,5,67502597,2049,95,6,22,10,
1,8071,2049,7762,772,10,8044,8094,145,97,58,109,97,112,0,1793,8100,8,2049,107,
10,1,8096,2049,7530,2049,1871,1793,8115,67502597,15,2049,107,2049,7762,10,1,8108,2049,2095,
10,8085,8133,145,97,58,114,101,118,101,114,115,101,0,2049,1871,1793,8167,2049,56,
1793,8145,17,2049,2934,10,1,8141,2049,2105,2,2049,107,1793,8161,2,15,2049,107,2049,
2934,10,1,8154,2049,2270,3,10,1,8137,2049,2095,10,8120,8180,145,97,58,116,104,
0,17,2049,2921,10,8172,8195,145,97,58,102,101,116,99,104,0,2049,8180,15,10,
8184,8210,145,97,58,115,116,111,114,101,0,2049,8180,16,10,8199,8226,145,97,58,
114,101,100,117,99,101,0,1,17,2049,2095,2049,7762,10,8214,8245,145,105,100,101,
110,116,105,102,121,0,1,-1,4,1,0,1793,8276,2049,2344,11,1793,8270,67502597,1,
-1,11,1793,8266,772,2,10,1,8263,9,10,1,8257,9,2049,2921,10,1,8252,2049,
8226,3,10,8214,8296,145,97,58,105,110,100,101,120,45,111,102,0,1,3,1793,
8309,1,27,2049,7530,2049,8094,2049,8245,10,1,8300,2049,3110,10,8282,8335,145,97,58,
105,110,100,101,120,45,111,102,45,115,116,114,105,110,103,0,1,3,1793,8348,
1,95,2049,7530,2049,8094,2049,8245,10,1,8339,2049,3110,10,8314,8363,145,97,58,109,
97,107,101,0,2049,7694,2,2,1,3,1793,8374,2049,8133,10,1,8371,2049,3110,4,
2049,7821,10,8353,8387,157,123,0,1,299,2049,157,1,1556,2049,145,1,299,2049,157,
10,8382,8405,157,125,0,1,315,2049,157,1,2095,2049,145,1,1556,2049,145,1,17,
2049,151,1,41,2049,151,1,2934,2049,145,1,315,2049,157,1,8363,2049,145,10,8400,
8449,145,98,111,117,110,100,115,63,0,67502597,2049,7671,67502597,13,10,8438,8463,145,99,
111,112,121,0,2049,56,2049,107,10,8455,8478,145,116,111,45,101,110,100,0,2,
2049,7671,17,2049,2921,10,8400,8495,145,97,58,108,101,102,116,0,2049,8449,1793,8503,
771,1,-1,10,1,8499,2049,2647,2049,1871,67502597,2049,107,1793,8524,1,2921,2049,2095,1,
8463,2049,2270,3,10,1,8514,2049,2095,10,8485,8540,145,97,58,114,105,103,104,116,
0,2049,8449,1793,8548,771,1,-1,10,1,8544,2049,2647,2049,1871,67502597,2049,107,1793,8571,
4,2049,8478,67502597,18,4,1,8463,2049,2270,3,10,1,8559,2049,2095,10,8529,8588,145,
97,58,109,105,100,100,108,101,0,1,2037,2049,2095,4,67502597,2049,8449,1793,8603,771,
3,1,-1,10,1,8598,2049,2647,771,2049,2085,4,18,2049,2921,2049,1871,67502597,2049,107,
1793,8638,772,1793,8628,17,2049,2921,10,1,8624,2049,2095,1,8463,2049,2270,3,10,1,
8621,2049,2095,10,8576,8651,133,70,108,97,103,0,0,8643,8663,145,99,111,109,112,
97,114,101,0,67440386,184946434,10,8652,8676,145,108,101,110,103,116,104,0,659202,10,8666,
8686,145,110,101,120,116,0,17043713,1,1,2577,10,8678,8704,145,110,111,116,45,101,
113,117,97,108,0,50529030,2561,0,10,8691,8716,145,108,111,111,112,0,524549,8686,2049,
8663,18157313,8651,8651,16,420610310,1,1,8716,7,10,8576,8739,145,97,58,101,113,63,0,
1048833,-1,8651,2049,8663,151066369,-1,8704,2049,8676,2049,8716,251724547,8651,10,8730,8764,145,97,58,
45,101,113,63,0,2049,8739,2049,2453,10,8754,8787,145,97,58,98,101,103,105,110,
115,45,119,105,116,104,63,0,1,3,1793,8803,2,2049,7671,1,17,2049,2095,2049,
8495,2049,8739,10,1,8791,2049,3110,10,8769,8824,145,97,58,101,110,100,115,45,119,
105,116,104,63,0,1,3,1793,8840,2,2049,7671,1,17,2049,2095,2049,8540,2049,8739,
10,1,8828,2049,3110,10,8808,8861,145,99,117,114,114,101,110,116,45,108,105,110,
101,0,2049,3548,1,1025,18,10,8845,8883,145,99,111,117,110,116,45,116,111,107,
101,110,115,0,1793,8889,1,32,11,10,1,8885,2049,4457,2049,81,10,8867,8914,145,
112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8942,1,32,2049,
6143,4,1793,8935,2,2049,81,2049,2537,1,377,1,15,2049,64,10,1,8923,2049,2095,
2049,2921,10,1,8916,2049,2270,2049,377,10,8808,8963,145,115,58,101,118,97,108,117,
97,116,101,0,2049,8861,2049,4678,2049,8861,2,2049,8883,2049,8914,10,8949,8981,133,76,
80,0,0,8975,8991,133,73,110,100,101,120,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,8982,9031,145,110,101,120,116,0,3841,8981,1,8991,17,2049,3019,10,
9023,9047,145,112,114,101,112,0,1,8981,2049,3019,1,0,3841,8981,1,8991,17,16,
10,9039,9068,145,100,111,110,101,0,1,8981,2049,3034,10,8949,9078,145,73,0,3841,
8981,1,8991,17,15,10,9073,9090,145,74,0,3841,8981,1,8991,17,2049,2934,15,10,
9085,9104,145,75,0,3841,8981,1,8991,17,1,2,18,15,10,9099,9131,145,105,110,
100,101,120,101,100,45,116,105,109,101,115,0,2049,9047,4,1793,9147,25,33886721,1,
2053,1542,2049,9031,1,9136,7,10,1,9136,8,3,2049,9068,10,9114,9162,157,104,111,
111,107,0,2049,3677,108,105,106,117,46,46,46,46,0,1,9164,2049,424,2049,1871,
2049,2921,2049,107,10,9154,9196,145,115,101,116,45,104,111,111,107,0,2049,2921,16,
10,9184,9210,145,117,110,104,111,111,107,0,2049,2921,2,2049,2921,4,16,10,9200,
9229,145,100,101,99,105,109,97,108,0,1,10,4097,205,10,9218,9244,145,98,105,
110,97,114,121,0,1,2,4097,205,10,9234,9258,145,111,99,116,97,108,0,1,
8,4097,205,10,9249,9270,145,104,101,120,0,1,16,4097,205,10,9263,9291,145,105,
111,58,101,110,117,109,101,114,97,116,101,0,27,10,9275,9305,145,105,111,58,
113,117,101,114,121,0,28,10,9293,9320,145,105,111,58,105,110,118,111,107,101,
0,29,10,9307,9337,145,105,111,58,115,99,97,110,45,102,111,114,0,1,-1,
4,2049,9291,1793,9368,2049,9078,2049,9305,772,67502597,11,1793,9364,1793,9359,3,2049,9078,10,
1,9355,2049,2095,10,1,9353,9,10,1,9344,2049,9131,3,10,9322,9383,145,99,58,
112,117,116,0,1793,9385,1,0,2049,9320,10,9374,9396,145,110,108,0,1,10,2049,
9383,10,9390,9407,145,115,112,0,1,32,2049,9383,10,9401,9419,145,116,97,98,0,
1,9,2049,9383,10,9412,9433,145,115,58,112,117,116,0,1,9383,2049,3900,10,9424,
9447,145,110,58,112,117,116,0,2049,7138,2049,9433,10,9438,9461,145,114,101,115,101,
116,0,2049,1556,25,771,1,9461,7,10,9452,9483,145,100,117,109,112,45,115,116,
97,99,107,0,2049,1556,25,134284547,9483,134283782,9447,2049,9407,10,9469,9501,145,70,82,69,
69,0,2049,3548,1,1025,18,2049,1871,18,10,9493,9518,145,101,111,108,63,0,1793,
9524,1,13,11,10,1,9520,1793,9532,1,10,11,10,1,9528,1793,9540,1,32,11,
10,1,9536,2049,2154,22,22,10,9510,9557,145,118,97,108,105,100,63,0,2,2049,
81,2049,2537,10,9547,9570,145,98,115,63,0,2,1793,9577,1,8,11,10,1,9573,
1793,9585,1,127,11,10,1,9581,2049,2117,22,10,9563,9603,145,99,104,101,99,107,
45,98,115,0,2049,9570,1793,9613,2049,3391,2049,3391,771,10,1,9607,9,10,9493,9626,
145,99,58,103,101,116,0,1793,9628,1,1,2049,9337,2049,9320,10,9617,9644,145,115,
58,103,101,116,0,1793,9672,1,7,15,2049,3459,1793,9663,2049,9626,2,2049,3367,2049,
9603,2049,9518,10,1,9653,2049,2245,2049,3333,2049,3754,10,1,9646,2049,3483,10,9635,9687,
145,108,105,115,116,101,110,0,2049,9644,2049,9557,1,377,1,15,2049,64,1,9687,
7,10,0
};
patch(l, 0);
run();
data.display();
return 0;
}