nga-c: work to use a struct for internal cpu state

FossilOrigin-Name: 993a6bb3f771184bcc8e35884d75d9e120e997bfef6b6b41949530fb51420714
This commit is contained in:
crc 2021-02-15 18:45:48 +00:00
parent 1be4d212eb
commit 1d7a006a3b
6 changed files with 497 additions and 491 deletions

View file

@ -28,14 +28,17 @@
#define ADDRESSES 256 /* Depth of address stack */
#define STACK_DEPTH 128 /* Depth of data stack */
CELL sp, rp, ip; /* Data, address, instruction pointers */
CELL data[STACK_DEPTH]; /* The data stack */
CELL address[ADDRESSES]; /* The address stack */
CELL memory[IMAGE_SIZE + 1]; /* The memory for the image */
#define TOS data[sp] /* Shortcut for top item on stack */
#define NOS data[sp-1] /* Shortcut for second item on stack */
#define TORS address[rp] /* Shortcut for top item on address stack */
#define TOS cpu.data[cpu.sp] /* Shortcut for top item on stack */
#define NOS cpu.data[cpu.sp-1] /* Shortcut for second item on stack */
#define TORS cpu.address[cpu.rp] /* Shortcut for top item on address stack */
struct NgaCore {
CELL sp, rp, ip; /* Stack & instruction pointers */
CELL data[STACK_DEPTH]; /* The data stack */
CELL address[ADDRESSES]; /* The address stack */
} cpu;
#define NUM_DEVICES 2
@ -56,13 +59,13 @@ void process_opcode_bundle(CELL opcode);
int validate_opcode_bundle(CELL opcode);
CELL stack_pop() {
sp--;
return data[sp + 1];
cpu.sp--;
return cpu.data[cpu.sp + 1];
}
void stack_push(CELL value) {
sp++;
data[sp] = value;
cpu.sp++;
cpu.data[cpu.sp] = value;
}
void generic_output() {
@ -87,19 +90,19 @@ void generic_input_query() {
void execute(CELL cell) {
CELL opcode;
rp = 1;
ip = cell;
while (ip < IMAGE_SIZE) {
opcode = memory[ip];
cpu.rp = 1;
cpu.ip = cell;
while (cpu.ip < IMAGE_SIZE) {
opcode = memory[cpu.ip];
if (validate_opcode_bundle(opcode) != 0) {
process_opcode_bundle(opcode);
} else {
printf("Invalid instruction!\n");
exit(1);
}
ip++;
if (rp == 0)
ip = IMAGE_SIZE;
cpu.ip++;
if (cpu.rp == 0)
cpu.ip = IMAGE_SIZE;
}
}

View file

@ -2,58 +2,58 @@
#ifndef CELL
#define CELL int32_t
#endif
CELL ngaImageCells = 9487;
CELL ngaImage[] = { 1793,9472,9295,9486,202101,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
CELL ngaImageCells = 9500;
CELL ngaImage[] = { 1793,9485,9308,9499,202104,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
7,10,8,10,9,10,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,10,68223234,1,2575,
85000450,1,656912,3211,3220,268505089,63,62,135205121,63,10,101384453,0,9,10,2049,56,25,459011,74,
524546,74,302256641,1,10,16974595,0,50529798,10,25,524547,93,50529798,10,17108738,1,251790353,101777669,1,17565186,
84,524545,88,64,167838467,-1,134287105,3,59,659457,3,459023,105,2049,56,25,2049,105,1793,112,
2049,112,117506307,0,105,0,524545,25,110,168820993,0,124,1642241,124,134283523,7,110,1793,105,7,
524545,2049,105,1793,105,16846593,124,139,138,1793,64,16846593,124,110,138,1793,64,7,10,659713,
1,659713,2,659713,3,1793,166,17108737,3,2,524559,105,2049,105,2049,105,2049,119,168820998,2,
3196,1025,167841793,179,5,17826049,0,179,2,15,25,524546,162,134287105,180,93,2305,181,459023,189,
134287361,180,184,659201,179,2049,56,25,84152833,48,286458116,10,459014,204,184618754,45,25,16974851,-1,168886532,
1,134284289,1,213,134284289,0,204,660227,32,0,0,112,114,101,102,105,120,58,125,0,
285278479,230,7,2576,524546,79,1641217,1,167838467,227,2049,243,2049,239,524545,230,199,17826050,229,0,
2572,2563,2049,220,1793,131,459023,131,17760513,144,3,164,8,251727617,3,2,2049,158,16,168820993,
-1,124,2049,199,2049,158,459023,131,285282049,3,2,134287105,124,278,524545,1793,105,16846593,3,0,
105,8,659201,3,524545,25,110,17043201,3,7,2049,110,2049,105,268505092,124,1642241,124,656131,659201,
3,524545,7,110,2049,105,459009,19,110,459009,54,110,459009,15,110,459009,17,110,1793,5,
10,524546,158,134284303,160,1807,1025,0,0,1642241,229,285282049,345,1,459012,340,117509889,179,340,134287105,
345,199,16845825,0,355,337,1793,64,1793,369,17826050,345,249,8,117506305,346,358,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,199,987393,1,1793,105,524546,445,2049,443,2049,
443,17891588,2,445,8,17045505,-24,-16,17043736,-8,1118488,1793,105,17043202,1,169021201,2049,56,25,33883396,
101450758,6404,459011,435,34668804,2,2049,432,524545,377,435,302056196,377,659969,1,0,9,150,100,117,
112,0,454,11,150,100,114,111,112,0,461,13,150,115,119,97,112,0,469,21,
150,99,97,108,108,0,477,26,150,101,113,63,0,485,28,150,45,101,113,63,
0,492,30,150,108,116,63,0,500,32,150,103,116,63,0,507,34,150,102,101,
116,99,104,0,514,36,150,115,116,111,114,101,0,523,38,150,43,0,532,40,
150,45,0,537,42,150,42,0,542,44,150,47,109,111,100,0,547,46,150,97,
110,100,0,555,48,150,111,114,0,562,50,150,120,111,114,0,568,52,150,115,
104,105,102,116,0,575,331,156,112,117,115,104,0,584,334,156,112,111,112,0,
592,328,156,48,59,0,599,56,144,102,101,116,99,104,45,110,101,120,116,0,
605,59,144,115,116,111,114,101,45,110,101,120,116,0,619,220,144,115,58,116,
111,45,110,117,109,98,101,114,0,633,93,144,115,58,101,113,63,0,648,79,
144,115,58,108,101,110,103,116,104,0,657,64,144,99,104,111,111,115,101,0,
669,72,150,105,102,0,679,70,144,45,105,102,0,685,260,156,112,114,101,102,
105,120,58,40,0,692,124,131,67,111,109,112,105,108,101,114,0,704,3,131,
72,101,97,112,0,716,105,144,44,0,724,119,144,115,44,0,729,125,156,59,
0,735,287,156,91,0,740,303,156,93,0,745,2,131,68,105,99,116,105,111,
110,97,114,121,0,750,157,144,100,58,108,105,110,107,0,764,158,144,100,58,
120,116,0,774,160,144,100,58,99,108,97,115,115,0,782,162,144,100,58,110,
97,109,101,0,793,144,144,99,108,97,115,115,58,119,111,114,100,0,803,156,
144,99,108,97,115,115,58,109,97,99,114,111,0,817,131,144,99,108,97,115,
115,58,100,97,116,97,0,832,164,144,100,58,97,100,100,45,104,101,97,100,
101,114,0,846,261,156,112,114,101,102,105,120,58,35,0,862,267,156,112,114,
101,102,105,120,58,58,0,874,281,156,112,114,101,102,105,120,58,38,0,886,
265,156,112,114,101,102,105,120,58,36,0,898,318,156,114,101,112,101,97,116,
0,910,320,156,97,103,97,105,110,0,920,367,144,105,110,116,101,114,112,114,
101,116,0,929,199,144,100,58,108,111,111,107,117,112,0,942,150,144,99,108,
97,115,115,58,112,114,105,109,105,116,105,118,101,0,954,4,131,86,101,114,
115,105,111,110,0,973,414,144,105,0,984,105,144,100,0,989,408,144,114,0,
994,337,144,101,114,114,58,110,111,116,102,111,117,110,100,0,0,0,0,0,
85000450,1,656912,3211,3220,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,25,112,168820993,0,126,1642241,126,134283523,7,112,1793,
107,7,524545,2049,107,1793,107,16846593,126,141,140,1793,64,16846593,126,112,140,1793,64,7,
10,659713,1,659713,2,659713,3,1793,168,17108737,3,2,524559,107,2049,107,2049,107,2049,121,
168820998,2,3196,1025,167841793,181,5,17826049,0,181,2,15,25,524546,164,134287105,182,95,2305,183,
459023,191,134287361,182,186,659201,181,2049,56,25,84152833,48,286458116,10,459014,206,184618754,45,25,16974851,
-1,168886532,1,134284289,1,215,134284289,0,206,660227,32,0,0,112,114,101,102,105,120,58,
125,0,285278479,232,7,2576,524546,81,1641217,1,167838467,229,2049,245,2049,241,524545,232,201,17826050,
231,0,2572,2563,2049,222,1793,133,459023,133,17760513,146,3,166,8,251727617,3,2,2049,160,
16,168820993,-1,126,2049,201,2049,160,459023,133,285282049,3,2,134287105,126,280,524545,1793,107,16846593,
3,0,107,8,659201,3,524545,25,112,17043201,3,7,2049,112,2049,107,268505092,126,1642241,126,
656131,659201,3,524545,7,112,2049,107,459009,19,112,459009,54,112,459009,15,112,459009,17,112,
1793,5,10,524546,160,134284303,162,1807,1025,0,0,1642241,231,285282049,347,1,459012,342,117509889,181,
342,134287105,347,201,16845825,0,357,339,1793,64,1793,371,17826050,347,251,8,117506305,348,360,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,201,987393,1,1793,107,524546,447,2049,
445,2049,445,17891588,2,447,8,17045505,-24,-16,17043736,-8,1118488,1793,107,17043202,1,169021201,2049,56,
25,33883396,101450758,6404,459011,437,34668804,2,2049,434,524545,379,437,302056196,379,659969,1,0,9,152,
100,117,112,0,456,11,152,100,114,111,112,0,463,13,152,115,119,97,112,0,
471,21,152,99,97,108,108,0,479,26,152,101,113,63,0,487,28,152,45,101,
113,63,0,494,30,152,108,116,63,0,502,32,152,103,116,63,0,509,34,152,
102,101,116,99,104,0,516,36,152,115,116,111,114,101,0,525,38,152,43,0,
534,40,152,45,0,539,42,152,42,0,544,44,152,47,109,111,100,0,549,46,
152,97,110,100,0,557,48,152,111,114,0,564,50,152,120,111,114,0,570,52,
152,115,104,105,102,116,0,577,333,158,112,117,115,104,0,586,336,158,112,111,
112,0,594,330,158,48,59,0,601,56,146,102,101,116,99,104,45,110,101,120,
116,0,607,59,146,115,116,111,114,101,45,110,101,120,116,0,621,222,146,115,
58,116,111,45,110,117,109,98,101,114,0,635,95,146,115,58,101,113,63,0,
650,81,146,115,58,108,101,110,103,116,104,0,659,64,146,99,104,111,111,115,
101,0,671,74,152,105,102,0,681,72,146,45,105,102,0,687,262,158,112,114,
101,102,105,120,58,40,0,694,126,133,67,111,109,112,105,108,101,114,0,706,
3,133,72,101,97,112,0,718,107,146,44,0,726,121,146,115,44,0,731,127,
158,59,0,737,289,158,91,0,742,305,158,93,0,747,2,133,68,105,99,116,
105,111,110,97,114,121,0,752,159,146,100,58,108,105,110,107,0,766,160,146,
100,58,120,116,0,776,162,146,100,58,99,108,97,115,115,0,784,164,146,100,
58,110,97,109,101,0,795,146,146,99,108,97,115,115,58,119,111,114,100,0,
805,158,146,99,108,97,115,115,58,109,97,99,114,111,0,819,133,146,99,108,
97,115,115,58,100,97,116,97,0,834,166,146,100,58,97,100,100,45,104,101,
97,100,101,114,0,848,263,158,112,114,101,102,105,120,58,35,0,864,269,158,
112,114,101,102,105,120,58,58,0,876,283,158,112,114,101,102,105,120,58,38,
0,888,267,158,112,114,101,102,105,120,58,36,0,900,320,158,114,101,112,101,
97,116,0,912,322,158,97,103,97,105,110,0,922,369,146,105,110,116,101,114,
112,114,101,116,0,931,201,146,100,58,108,111,111,107,117,112,0,944,152,146,
99,108,97,115,115,58,112,114,105,109,105,116,105,118,101,0,956,4,133,86,
101,114,115,105,111,110,0,975,416,146,105,0,986,107,146,100,0,991,410,146,
114,0,996,339,146,101,114,114,58,110,111,116,102,111,117,110,100,0,0,0,
0,0,0,0,0,0,125,125,0,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,
@ -79,402 +79,403 @@ CELL ngaImage[] = { 1793,9472,9295,9486,202101,0,10,1,10,2,10,3,10,4,10,5,10,6,1
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,999,1543,144,
69,79,77,0,1,-3,15,10,1536,1556,144,100,101,112,116,104,0,1,-1,15,
10,1547,1570,144,100,58,108,97,115,116,0,1,2,15,10,1560,1587,144,100,58,
108,97,115,116,46,120,116,0,2049,1570,2049,158,15,10,1574,1609,144,100,58,108,
97,115,116,46,99,108,97,115,115,0,2049,1570,2049,160,15,10,1593,1630,144,100,
58,108,97,115,116,46,110,97,109,101,0,2049,1570,2049,162,10,1615,1646,144,114,
101,99,108,97,115,115,0,2049,1570,2049,160,16,10,1635,1665,144,105,109,109,101,
100,105,97,116,101,0,1,156,2049,1646,10,1652,1678,144,100,97,116,97,0,1,
131,2049,1646,10,1670,1696,144,112,114,105,109,105,116,105,118,101,0,1,150,2049,
1646,10,1683,1706,156,40,0,10,1701,1712,156,41,0,10,1707,1728,144,99,111,109,
112,105,108,101,58,108,105,116,0,1,1,2049,105,2049,105,10,1713,1751,144,99,
111,109,112,105,108,101,58,106,117,109,112,0,1,1793,2049,105,2049,105,10,1735,
1774,144,99,111,109,112,105,108,101,58,99,97,108,108,0,1,2049,2049,105,2049,
105,10,1758,1796,144,99,111,109,112,105,108,101,58,114,101,116,0,1,10,2049,
105,10,1781,1815,144,99,111,109,112,105,108,105,110,103,63,0,1,124,15,10,
1801,1831,156,112,114,101,102,105,120,58,96,0,2049,220,2049,105,10,1819,1848,156,
112,114,101,102,105,120,58,92,0,2049,414,10,1836,1863,156,112,114,101,102,105,
120,58,94,0,2049,408,10,1851,1874,144,104,101,114,101,0,1,3,15,10,1866,
1890,156,112,114,101,102,105,120,58,64,0,2049,199,2049,158,15,2049,1815,1793,1906,
1,3841,2049,105,2049,105,10,1,1899,1793,1912,15,10,1,1910,2049,64,10,1878,1929,
156,112,114,101,102,105,120,58,33,0,2049,199,2049,158,15,2049,1815,1793,1945,1,
4097,2049,105,2049,105,10,1,1938,1793,1951,16,10,1,1949,2049,64,10,1917,1968,144,
100,58,99,114,101,97,116,101,0,1,131,1,0,2049,164,2049,1874,2049,1570,2049,
158,16,10,1956,1991,144,118,97,114,45,110,0,2049,1968,2049,105,10,1982,2003,144,
118,97,114,0,134284289,0,1991,10,1996,2016,144,99,111,110,115,116,0,2049,1968,2049,
1570,2049,158,16,10,2007,2032,150,116,117,99,107,0,100926722,10,2024,2042,150,111,118,
101,114,0,67502597,10,2034,2051,150,110,105,112,0,772,10,2044,2066,150,100,114,111,
112,45,112,97,105,114,0,771,10,2053,2076,150,63,100,117,112,0,6402,10,2068,
2090,144,100,117,112,45,112,97,105,114,0,67502597,67502597,10,2078,2100,144,100,105,112,
0,525572,6,10,2093,2110,144,115,105,112,0,67502597,1,21,2049,2100,10,2103,2122,144,
98,105,0,1,2110,2049,2100,8,10,2116,2135,144,98,105,42,0,1,2100,2049,2100,
8,10,2128,2148,144,98,105,64,0,2,2049,2135,10,2141,2159,144,116,114,105,0,
1793,2168,1,2110,2049,2100,2049,2110,10,1,2161,2049,2100,8,10,2152,2182,144,116,114,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1001,1543,146,
69,79,77,0,1,-3,15,10,1536,1556,146,100,101,112,116,104,0,1,-1,15,
10,1547,1570,146,100,58,108,97,115,116,0,1,2,15,10,1560,1587,146,100,58,
108,97,115,116,46,120,116,0,2049,1570,2049,160,15,10,1574,1609,146,100,58,108,
97,115,116,46,99,108,97,115,115,0,2049,1570,2049,162,15,10,1593,1630,146,100,
58,108,97,115,116,46,110,97,109,101,0,2049,1570,2049,164,10,1615,1646,146,114,
101,99,108,97,115,115,0,2049,1570,2049,162,16,10,1635,1665,146,105,109,109,101,
100,105,97,116,101,0,1,158,2049,1646,10,1652,1678,146,100,97,116,97,0,1,
133,2049,1646,10,1670,1696,146,112,114,105,109,105,116,105,118,101,0,1,152,2049,
1646,10,1683,1706,158,40,0,10,1701,1712,158,41,0,10,1707,1728,146,99,111,109,
112,105,108,101,58,108,105,116,0,1,1,2049,107,2049,107,10,1713,1751,146,99,
111,109,112,105,108,101,58,106,117,109,112,0,1,1793,2049,107,2049,107,10,1735,
1774,146,99,111,109,112,105,108,101,58,99,97,108,108,0,1,2049,2049,107,2049,
107,10,1758,1796,146,99,111,109,112,105,108,101,58,114,101,116,0,1,10,2049,
107,10,1781,1815,146,99,111,109,112,105,108,105,110,103,63,0,1,126,15,10,
1801,1831,158,112,114,101,102,105,120,58,96,0,2049,222,2049,107,10,1819,1848,158,
112,114,101,102,105,120,58,92,0,2049,416,10,1836,1863,158,112,114,101,102,105,
120,58,94,0,2049,410,10,1851,1874,146,104,101,114,101,0,1,3,15,10,1866,
1890,158,112,114,101,102,105,120,58,64,0,2049,201,2049,160,15,2049,1815,1793,1906,
1,3841,2049,107,2049,107,10,1,1899,1793,1912,15,10,1,1910,2049,64,10,1878,1929,
158,112,114,101,102,105,120,58,33,0,2049,201,2049,160,15,2049,1815,1793,1945,1,
4097,2049,107,2049,107,10,1,1938,1793,1951,16,10,1,1949,2049,64,10,1917,1968,146,
100,58,99,114,101,97,116,101,0,1,133,1,0,2049,166,2049,1874,2049,1570,2049,
160,16,10,1956,1991,146,118,97,114,45,110,0,2049,1968,2049,107,10,1982,2003,146,
118,97,114,0,134284289,0,1991,10,1996,2016,146,99,111,110,115,116,0,2049,1968,2049,
1570,2049,160,16,10,2007,2032,152,116,117,99,107,0,100926722,10,2024,2042,152,111,118,
101,114,0,67502597,10,2034,2051,152,110,105,112,0,772,10,2044,2066,152,100,114,111,
112,45,112,97,105,114,0,771,10,2053,2076,152,63,100,117,112,0,6402,10,2068,
2090,146,100,117,112,45,112,97,105,114,0,67502597,67502597,10,2078,2100,146,100,105,112,
0,525572,6,10,2093,2110,146,115,105,112,0,67502597,1,21,2049,2100,10,2103,2122,146,
98,105,0,1,2110,2049,2100,8,10,2116,2135,146,98,105,42,0,1,2100,2049,2100,
8,10,2128,2148,146,98,105,64,0,2,2049,2135,10,2141,2159,146,116,114,105,0,
1793,2168,1,2110,2049,2100,2049,2110,10,1,2161,2049,2100,8,10,2152,2182,146,116,114,
105,42,0,1793,2199,1793,2192,4,1,2100,2049,2100,10,1,2186,2049,2100,2049,2100,10,
1,2184,2049,2100,8,10,2174,2213,144,116,114,105,64,0,2,2,2049,2182,10,2205,
2227,144,119,104,105,108,101,0,1793,2236,525570,1639430,3,1,2229,7,10,1,2229,8,
3,10,2218,2250,144,117,110,116,105,108,0,1793,2261,525570,385942534,-1,25,3,1,2252,
7,10,1,2252,8,3,10,2241,2275,144,116,105,109,101,115,0,1793,2287,4,25,
33886721,1,2053,1542,1,2278,7,10,1,2277,8,3,10,2266,2304,156,112,114,101,102,
105,120,58,124,0,2049,199,1793,2312,2049,158,15,10,1,2308,1793,2320,2049,160,15,
10,1,2316,2049,2122,2049,1815,1793,2335,1,131,2049,2100,2049,1774,10,1,2328,1,21,
2049,64,10,2292,2350,144,84,82,85,69,0,1,-1,10,2342,2362,144,70,65,76,
83,69,0,1,0,10,2353,2373,144,99,97,115,101,0,1793,2378,67502597,11,10,1,
1,2184,2049,2100,8,10,2174,2213,146,116,114,105,64,0,2,2,2049,2182,10,2205,
2227,146,119,104,105,108,101,0,1793,2236,525570,1639430,3,1,2229,7,10,1,2229,8,
3,10,2218,2250,146,117,110,116,105,108,0,1793,2261,525570,385942534,-1,25,3,1,2252,
7,10,1,2252,8,3,10,2241,2275,146,116,105,109,101,115,0,1793,2287,4,25,
33886721,1,2053,1542,1,2278,7,10,1,2277,8,3,10,2266,2304,158,112,114,101,102,
105,120,58,124,0,2049,201,1793,2312,2049,160,15,10,1,2308,1793,2320,2049,162,15,
10,1,2316,2049,2122,2049,1815,1793,2335,1,133,2049,2100,2049,1774,10,1,2328,1,21,
2049,64,10,2292,2350,146,84,82,85,69,0,1,-1,10,2342,2362,146,70,65,76,
83,69,0,1,0,10,2353,2373,146,99,97,115,101,0,1793,2378,67502597,11,10,1,
2375,2049,2100,4,1793,2390,772,8,2049,2350,10,1,2385,1793,2398,3,2049,2362,10,1,
2394,2049,64,25,6,3,3,10,2365,2417,144,115,58,99,97,115,101,0,1793,2423,
67502597,2049,93,10,1,2419,2049,2100,4,1793,2435,772,8,2049,2350,10,1,2430,1793,2443,
3,2049,2362,10,1,2439,2049,64,25,6,3,3,10,2407,2459,144,110,111,116,0,
1,-1,23,10,2452,2472,144,108,116,101,113,63,0,2049,2090,101516555,22,10,2463,2486,
144,103,116,101,113,63,0,4,2049,2472,10,2477,2499,144,110,58,77,65,88,0,
1,-5,15,10,2490,2512,144,110,58,77,73,78,0,1,-4,15,10,2503,2527,144,
110,58,122,101,114,111,63,0,1,0,11,10,2516,2543,144,110,58,45,122,101,
114,111,63,0,1,0,12,10,2531,2562,144,110,58,110,101,103,97,116,105,118,
101,63,0,1,0,13,10,2547,2581,144,110,58,112,111,115,105,116,105,118,101,
63,0,1,-1,14,10,2566,2609,144,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,2585,2624,144,110,58,101,
118,101,110,63,0,1,2,20,3,2049,2527,10,2613,2641,144,110,58,111,100,100,
63,0,2049,2624,2049,2459,10,2631,2653,144,105,102,59,0,67502597,1,72,2049,2100,25,
6,771,10,2646,2670,144,45,105,102,59,0,67502597,1,70,2049,2100,2049,2459,25,6,
771,10,2662,2688,150,114,111,116,0,67503109,10,2681,2695,150,47,0,197652,10,2690,2704,
150,109,111,100,0,788,10,2697,2715,144,110,58,112,111,119,0,1,1,4,1793,
2723,67502597,19,10,1,2720,2049,2275,772,10,2706,2741,144,110,58,110,101,103,97,116,
101,0,1,-1,19,10,2729,2757,144,110,58,115,113,117,97,114,101,0,4866,10,
2745,2769,144,110,58,115,113,114,116,0,1,1,1793,2787,2049,2090,197652,67502597,18,1,
2,197652,25,17,1,2773,7,10,1,2773,8,772,10,2759,2801,144,110,58,109,105,
2394,2049,64,25,6,3,3,10,2365,2417,146,115,58,99,97,115,101,0,1793,2423,
67502597,2049,95,10,1,2419,2049,2100,4,1793,2435,772,8,2049,2350,10,1,2430,1793,2443,
3,2049,2362,10,1,2439,2049,64,25,6,3,3,10,2407,2459,146,110,111,116,0,
1,-1,23,10,2452,2472,146,108,116,101,113,63,0,2049,2090,101516555,22,10,2463,2486,
146,103,116,101,113,63,0,4,2049,2472,10,2477,2499,146,110,58,77,65,88,0,
1,-5,15,10,2490,2512,146,110,58,77,73,78,0,1,-4,15,10,2503,2527,146,
110,58,122,101,114,111,63,0,1,0,11,10,2516,2543,146,110,58,45,122,101,
114,111,63,0,1,0,12,10,2531,2562,146,110,58,110,101,103,97,116,105,118,
101,63,0,1,0,13,10,2547,2581,146,110,58,112,111,115,105,116,105,118,101,
63,0,1,-1,14,10,2566,2609,146,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,2585,2624,146,110,58,101,
118,101,110,63,0,1,2,20,3,2049,2527,10,2613,2641,146,110,58,111,100,100,
63,0,2049,2624,2049,2459,10,2631,2653,146,105,102,59,0,67502597,1,74,2049,2100,25,
6,771,10,2646,2670,146,45,105,102,59,0,67502597,1,72,2049,2100,2049,2459,25,6,
771,10,2662,2688,152,114,111,116,0,67503109,10,2681,2695,152,47,0,197652,10,2690,2704,
152,109,111,100,0,788,10,2697,2715,146,110,58,112,111,119,0,1,1,4,1793,
2723,67502597,19,10,1,2720,2049,2275,772,10,2706,2741,146,110,58,110,101,103,97,116,
101,0,1,-1,19,10,2729,2757,146,110,58,115,113,117,97,114,101,0,4866,10,
2745,2769,146,110,58,115,113,114,116,0,1,1,1793,2787,2049,2090,197652,67502597,18,1,
2,197652,25,17,1,2773,7,10,1,2773,8,772,10,2759,2801,146,110,58,109,105,
110,0,2049,2090,13,1793,2808,3,10,1,2806,1793,2814,772,10,1,2812,2049,64,10,
2792,2828,144,110,58,109,97,120,0,2049,2090,14,1793,2835,3,10,1,2833,1793,2841,
772,10,1,2839,2049,64,10,2819,2855,144,110,58,97,98,115,0,2,2049,2562,1,
2741,9,10,2846,2873,144,110,58,108,105,109,105,116,0,4,5,2049,2801,6,2049,
2828,10,2862,2890,144,110,58,105,110,99,0,1,1,17,10,2881,2903,144,110,58,
100,101,99,0,1,1,18,10,2894,2921,144,110,58,98,101,116,119,101,101,110,
63,0,67503109,1793,2929,67503109,67503109,2049,2873,10,1,2924,2049,2110,11,10,2907,2947,144,118,
2792,2828,146,110,58,109,97,120,0,2049,2090,14,1793,2835,3,10,1,2833,1793,2841,
772,10,1,2839,2049,64,10,2819,2855,146,110,58,97,98,115,0,2,2049,2562,1,
2741,9,10,2846,2873,146,110,58,108,105,109,105,116,0,4,5,2049,2801,6,2049,
2828,10,2862,2890,146,110,58,105,110,99,0,1,1,17,10,2881,2903,146,110,58,
100,101,99,0,1,1,18,10,2894,2921,146,110,58,98,101,116,119,101,101,110,
63,0,67503109,1793,2929,67503109,67503109,2049,2873,10,1,2924,2049,2110,11,10,2907,2947,146,118,
58,105,110,99,45,98,121,0,1793,2951,4367,10,1,2949,2049,2110,16,10,2935,2969,
144,118,58,100,101,99,45,98,121,0,1793,2973,1180687,10,1,2971,2049,2110,16,10,
2957,2988,144,118,58,105,110,99,0,1,1,4,2049,2947,10,2979,3003,144,118,58,
100,101,99,0,1,1,4,2049,2969,10,2994,3020,144,118,58,108,105,109,105,116,
0,251790597,1542,2049,2873,4100,10,3009,3034,144,118,58,111,110,0,2049,2350,4100,10,3026,
3047,144,118,58,111,102,102,0,2049,2362,4100,10,3038,3060,144,97,108,108,111,116,
0,1,3,2049,2947,10,3051,3079,144,118,58,112,114,101,115,101,114,118,101,0,
983556,1793,3087,1,21,2049,2100,10,1,3082,2049,2100,4100,10,3065,3105,144,118,58,117,
146,118,58,100,101,99,45,98,121,0,1793,2973,1180687,10,1,2971,2049,2110,16,10,
2957,2988,146,118,58,105,110,99,0,1,1,4,2049,2947,10,2979,3003,146,118,58,
100,101,99,0,1,1,4,2049,2969,10,2994,3020,146,118,58,108,105,109,105,116,
0,251790597,1542,2049,2873,4100,10,3009,3034,146,118,58,111,110,0,2049,2350,4100,10,3026,
3047,146,118,58,111,102,102,0,2049,2362,4100,10,3038,3060,146,97,108,108,111,116,
0,1,3,2049,2947,10,3051,3079,146,118,58,112,114,101,115,101,114,118,101,0,
983556,1793,3087,1,21,2049,2100,10,1,3082,2049,2100,4100,10,3065,3105,146,118,58,117,
112,100,97,116,101,0,4,1793,3112,15,4,8,10,1,3108,2049,2110,16,10,3093,
3126,144,99,111,112,121,0,1793,3135,285278725,1,33951492,268767489,1,6,10,1,3128,2049,2275,
771,10,3118,3154,144,83,99,111,112,101,76,105,115,116,0,9295,9295,10,3141,3163,
144,123,123,0,2049,1570,2,1,3154,2049,59,16,10,3157,3188,144,45,45,45,114,
101,118,101,97,108,45,45,45,0,2049,1570,1,3154,2049,2890,16,10,3172,3202,144,
3126,146,99,111,112,121,0,1793,3135,285278725,1,33951492,268767489,1,6,10,1,3128,2049,2275,
771,10,3118,3154,146,83,99,111,112,101,76,105,115,116,0,9308,9308,10,3141,3163,
146,123,123,0,2049,1570,2,1,3154,2049,59,16,10,3157,3188,146,45,45,45,114,
101,118,101,97,108,45,45,45,0,2049,1570,1,3154,2049,2890,16,10,3172,3202,146,
125,125,0,1,3154,2049,56,4,15,11,1793,3216,3841,3154,4097,2,10,1,3211,1793,
3242,3841,3154,1793,3237,1,2,983567,1,3154,2049,2890,1641487,3,1,3226,7,10,1,3224,
8,16,10,1,3220,2049,64,10,3196,3256,131,83,116,97,114,116,0,0,10,3247,
3265,131,69,110,100,0,0,10,3258,3280,144,116,101,114,109,105,110,97,116,101,
0,1,0,3841,3265,16,10,3196,3302,144,98,117,102,102,101,114,58,115,116,97,
114,116,0,3841,3256,10,3286,3319,144,98,117,102,102,101,114,58,101,110,100,0,
3841,3265,10,3305,3336,144,98,117,102,102,101,114,58,97,100,100,0,3841,3265,16,
1,3265,2049,2988,2049,3280,10,3322,3360,144,98,117,102,102,101,114,58,103,101,116,
0,1,3265,2049,3003,3841,3265,15,2049,3280,10,3346,3386,144,98,117,102,102,101,114,
58,101,109,112,116,121,0,3841,3256,4097,3265,2049,3280,10,3370,3408,144,98,117,102,
102,101,114,58,115,105,122,101,0,3841,3265,3841,3256,18,10,3393,3428,144,98,117,
102,102,101,114,58,115,101,116,0,4097,3256,2049,3386,10,3414,3452,144,98,117,102,
8,16,10,1,3220,2049,64,10,3196,3256,133,83,116,97,114,116,0,0,10,3247,
3265,133,69,110,100,0,0,10,3258,3280,146,116,101,114,109,105,110,97,116,101,
0,1,0,3841,3265,16,10,3196,3302,146,98,117,102,102,101,114,58,115,116,97,
114,116,0,3841,3256,10,3286,3319,146,98,117,102,102,101,114,58,101,110,100,0,
3841,3265,10,3305,3336,146,98,117,102,102,101,114,58,97,100,100,0,3841,3265,16,
1,3265,2049,2988,2049,3280,10,3322,3360,146,98,117,102,102,101,114,58,103,101,116,
0,1,3265,2049,3003,3841,3265,15,2049,3280,10,3346,3386,146,98,117,102,102,101,114,
58,101,109,112,116,121,0,3841,3256,4097,3265,2049,3280,10,3370,3408,146,98,117,102,
102,101,114,58,115,105,122,101,0,3841,3265,3841,3256,18,10,3393,3428,146,98,117,
102,102,101,114,58,115,101,116,0,4097,3256,2049,3386,10,3414,3452,146,98,117,102,
102,101,114,58,112,114,101,115,101,114,118,101,0,3841,3256,3841,3265,1793,3465,1,
21,2049,2100,4097,3256,10,1,3458,2049,2100,4097,3265,10,3433,3487,131,84,101,109,112,
83,116,114,105,110,103,115,0,32,3472,3505,131,84,101,109,112,83,116,114,105,
110,103,77,97,120,0,512,3488,3517,144,83,84,82,73,78,71,83,0,2049,1543,
3841,3487,3841,3505,19,18,10,3506,3537,131,67,117,114,114,101,110,116,0,30,10,
3526,3552,144,115,58,112,111,105,110,116,101,114,0,3841,3537,3841,3505,19,2049,3517,
17,10,3539,3571,144,115,58,110,101,120,116,0,1,3537,2049,2988,3841,3537,3841,3487,
11,1793,3587,1,0,4097,3537,10,1,3582,9,10,3506,3601,144,115,58,116,101,109,
112,0,2,2049,79,2049,2890,2049,3552,4,2049,3126,2049,3552,2049,3571,10,3591,3627,144,
115,58,101,109,112,116,121,0,2049,3552,2049,3571,1,0,67502597,16,10,3616,3646,144,
21,2049,2100,4097,3256,10,1,3458,2049,2100,4097,3265,10,3433,3487,133,84,101,109,112,
83,116,114,105,110,103,115,0,32,3472,3505,133,84,101,109,112,83,116,114,105,
110,103,77,97,120,0,512,3488,3517,146,83,84,82,73,78,71,83,0,2049,1543,
3841,3487,3841,3505,19,18,10,3506,3537,133,67,117,114,114,101,110,116,0,30,10,
3526,3552,146,115,58,112,111,105,110,116,101,114,0,3841,3537,3841,3505,19,2049,3517,
17,10,3539,3571,146,115,58,110,101,120,116,0,1,3537,2049,2988,3841,3537,3841,3487,
11,1793,3587,1,0,4097,3537,10,1,3582,9,10,3506,3601,146,115,58,116,101,109,
112,0,2,2049,81,2049,2890,2049,3552,4,2049,3126,2049,3552,2049,3571,10,3591,3627,146,
115,58,101,109,112,116,121,0,2049,3552,2049,3571,1,0,67502597,16,10,3616,3646,146,
115,58,115,107,105,112,0,6,1793,3654,68223234,1,786703,0,10,1,3649,2049,2227,2049,
2903,5,10,3636,3672,144,115,58,107,101,101,112,0,2049,1815,1793,3681,1,3646,2049,
1774,10,1,3676,9,2049,1874,1,119,2049,2100,2049,131,10,3662,3705,156,112,114,101,
102,105,120,58,39,0,2049,1815,1,3672,1,3601,2049,64,10,3693,3724,144,115,58,
99,104,111,112,0,2049,3601,2,2049,79,67502597,17,2049,2903,1,0,4,16,10,3714,
3751,144,115,58,114,101,118,101,114,115,101,0,1793,3793,2,2049,3601,2049,3428,1,
79,1793,3769,2,2049,79,17,2049,2903,10,1,3762,2049,2122,4,1793,3783,2,15,2049,
2903,5,10,3636,3672,146,115,58,107,101,101,112,0,2049,1815,1793,3681,1,3646,2049,
1774,10,1,3676,9,2049,1874,1,121,2049,2100,2049,133,10,3662,3705,158,112,114,101,
102,105,120,58,39,0,2049,1815,1,3672,1,3601,2049,64,10,3693,3724,146,115,58,
99,104,111,112,0,2049,3601,2,2049,81,67502597,17,2049,2903,1,0,4,16,10,3714,
3751,146,115,58,114,101,118,101,114,115,101,0,1793,3793,2,2049,3601,2049,3428,1,
81,1793,3769,2,2049,81,17,2049,2903,10,1,3762,2049,2122,4,1793,3783,2,15,2049,
3336,2049,2903,10,1,3776,2049,2275,3,2049,3302,2049,3601,10,1,3753,2049,3452,10,3738,
3811,144,115,58,112,114,101,112,101,110,100,0,2049,3601,1793,3835,2,2049,79,17,
1793,3827,2,2049,79,2049,2890,10,1,3821,2049,2100,4,2049,3126,10,1,3815,2049,2110,
10,3798,3852,144,115,58,97,112,112,101,110,100,0,4,2049,3811,10,3840,3870,144,
3811,146,115,58,112,114,101,112,101,110,100,0,2049,3601,1793,3835,2,2049,81,17,
1793,3827,2,2049,81,2049,2890,10,1,3821,2049,2100,4,2049,3126,10,1,3815,2049,2110,
10,3798,3852,146,115,58,97,112,112,101,110,100,0,4,2049,3811,10,3840,3870,146,
115,58,102,111,114,45,101,97,99,104,0,1793,3885,67502597,6415,3,67502597,67502597,251987205,2054,
101777670,1,1,3872,7,10,1,3872,8,771,10,3856,3904,144,115,58,105,110,100,101,
101777670,1,1,3872,7,10,1,3872,8,771,10,3856,3904,146,115,58,105,110,100,101,
120,45,111,102,0,4,1793,3918,68223234,1,6415,33883396,101450758,6404,3,1,3907,7,10,1,
3907,1793,3927,18,2049,2903,772,10,1,3922,1793,3936,2049,79,67502597,11,10,1,3931,2049,
2159,1793,3946,3,1,-1,10,1,3942,9,10,3890,3970,144,115,58,99,111,110,116,
97,105,110,115,45,99,104,97,114,63,0,2049,3904,1,-1,12,10,3950,3986,144,
3907,1793,3927,18,2049,2903,772,10,1,3922,1793,3936,2049,81,67502597,11,10,1,3931,2049,
2159,1793,3946,3,1,-1,10,1,3942,9,10,3890,3970,146,115,58,99,111,110,116,
97,105,110,115,45,99,104,97,114,63,0,2049,3904,1,-1,12,10,3950,3986,146,
115,58,104,97,115,104,0,1,5381,4,1793,3994,286458116,33,10,1,3991,2049,3870,10,
3976,4006,131,83,114,99,0,0,3999,4014,131,84,97,114,0,0,4007,4022,131,80,
97,100,0,0,4015,4028,131,73,0,0,4023,4034,131,70,0,0,4029,4041,131,65,
116,0,0,4035,4055,144,116,101,114,109,105,110,97,116,101,0,1,0,3841,4022,
3841,4014,2049,79,17,16,10,4042,4077,144,101,120,116,114,97,99,116,0,3841,4006,
3841,4028,17,3841,4022,3841,4014,2049,79,2049,3126,10,4066,4102,144,99,111,109,112,97,
114,101,0,3841,4022,3841,4014,2049,93,3841,4034,22,4097,4034,3841,4034,1793,4122,3841,4028,
4097,4041,10,1,4117,2049,70,10,4091,4135,144,110,101,120,116,0,1,4028,2049,2988,
10,3976,4162,144,115,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,
3976,4006,133,83,114,99,0,0,3999,4014,133,84,97,114,0,0,4007,4022,133,80,
97,100,0,0,4015,4028,133,73,0,0,4023,4034,133,70,0,0,4029,4041,133,65,
116,0,0,4035,4055,146,116,101,114,109,105,110,97,116,101,0,1,0,3841,4022,
3841,4014,2049,81,17,16,10,4042,4077,146,101,120,116,114,97,99,116,0,3841,4006,
3841,4028,17,3841,4022,3841,4014,2049,81,2049,3126,10,4066,4102,146,99,111,109,112,97,
114,101,0,3841,4022,3841,4014,2049,95,3841,4034,22,4097,4034,3841,4034,1793,4122,3841,4028,
4097,4041,10,1,4117,2049,72,10,4091,4135,146,110,101,120,116,0,1,4028,2049,2988,
10,3976,4162,146,115,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,
103,63,0,4097,4014,4097,4006,2049,3627,4097,4022,1,0,4097,4028,1,0,4097,4034,3841,
4006,2049,79,1793,4193,2049,4077,2049,4055,2049,4102,2049,4135,10,1,4184,2049,2275,3841,4034,
10,4140,4207,131,83,116,114,0,0,4200,4219,144,101,120,116,114,97,99,116,0,
2049,2090,3841,4207,4,2049,3126,3841,-1,67502597,17,1,0,4,16,10,4208,4244,144,99,
4006,2049,81,1793,4193,2049,4077,2049,4055,2049,4102,2049,4135,10,1,4184,2049,2275,3841,4034,
10,4140,4207,133,83,116,114,0,0,4200,4219,146,101,120,116,114,97,99,116,0,
2049,2090,3841,4207,4,2049,3126,3841,-1,67502597,17,1,0,4,16,10,4208,4244,146,99,
104,101,99,107,0,1,4219,2049,2100,1793,4255,1,2890,2049,2100,10,1,4250,2049,2100,
3841,4207,2049,3986,67502597,11,10,4235,4278,144,108,111,99,97,116,105,111,110,0,67503109,
3841,4207,2049,3986,67502597,11,10,4235,4278,146,108,111,99,97,116,105,111,110,0,67503109,
67503109,1793,4311,1793,4306,4,1793,4292,67502597,2049,2527,21,10,1,4287,2049,2100,4,1793,4302,
772,2,10,1,4299,9,10,1,4284,2049,2100,10,1,4282,2049,2100,10,4266,4325,144,
115,101,116,117,112,0,2049,3627,4097,4207,1,0,67503109,67503109,1,79,1,3986,2049,2122,
2049,3627,2049,3428,1793,4349,67502597,2049,79,10,1,4345,2049,2100,4,10,4140,4376,144,115,
772,2,10,1,4299,9,10,1,4284,2049,2100,10,1,4282,2049,2100,10,4266,4325,146,
115,101,116,117,112,0,2049,3627,4097,4207,1,0,67503109,67503109,1,81,1,3986,2049,2122,
2049,3627,2049,3428,1793,4349,67502597,2049,81,10,1,4345,2049,2100,4,10,4140,4376,146,115,
58,105,110,100,101,120,45,111,102,45,115,116,114,105,110,103,0,67502597,1793,4402,
1793,4395,2049,4325,1793,4390,2049,4244,2049,4278,10,1,4385,2049,2275,10,1,4381,2049,3452,
771,3,10,1,4379,2049,2100,18,1,2,18,1,-1,2049,2828,10,4355,4427,144,115,
771,3,10,1,4379,2049,2100,18,1,2,18,1,-1,2049,2828,10,4355,4427,146,115,
58,102,105,108,116,101,114,0,1793,4455,2049,3627,2049,3428,4,1793,4447,2049,2090,4,
8,1,3336,1,11,2049,64,10,1,4436,2049,3870,3,2049,3302,10,1,4429,2049,3452,
10,4415,4469,144,115,58,109,97,112,0,1793,4491,2049,3627,2049,3428,4,1793,4483,67502597,
8,2049,3336,10,1,4478,2049,3870,3,2049,3302,10,1,4471,2049,3452,10,4460,4508,144,
10,4415,4469,146,115,58,109,97,112,0,1793,4491,2049,3627,2049,3428,4,1793,4483,67502597,
8,2049,3336,10,1,4478,2049,3870,3,2049,3302,10,1,4471,2049,3452,10,4460,4508,146,
115,58,115,117,98,115,116,114,0,1793,4514,17,2049,3627,10,1,4510,2049,2100,1793,
4526,67502597,1,3126,2049,2100,10,1,4520,2049,2110,67502597,1793,4539,17,1,0,4,16,10,
1,4533,2049,2100,10,4496,4555,144,115,58,114,105,103,104,116,0,67502597,2049,79,67502597,
18,4,2049,4508,10,4544,4574,144,115,58,108,101,102,116,0,1,0,4,2049,4508,
10,4564,4598,144,115,58,98,101,103,105,110,115,45,119,105,116,104,63,0,2,
2049,79,1,13,2049,2100,2049,4574,2049,93,10,4580,4626,144,115,58,101,110,100,115,
45,119,105,116,104,63,0,2,2049,79,1,13,2049,2100,2049,4555,2049,93,10,4610,
4648,144,115,58,99,111,112,121,0,67502597,2049,79,2049,2890,2049,3126,10,4638,4668,144,
1,4533,2049,2100,10,4496,4555,146,115,58,114,105,103,104,116,0,67502597,2049,81,67502597,
18,4,2049,4508,10,4544,4574,146,115,58,108,101,102,116,0,1,0,4,2049,4508,
10,4564,4598,146,115,58,98,101,103,105,110,115,45,119,105,116,104,63,0,2,
2049,81,1,13,2049,2100,2049,4574,2049,95,10,4580,4626,146,115,58,101,110,100,115,
45,119,105,116,104,63,0,2,2049,81,1,13,2049,2100,2049,4555,2049,95,10,4610,
4648,146,115,58,99,111,112,121,0,67502597,2049,81,2049,2890,2049,3126,10,4638,4668,146,
115,58,68,73,71,73,84,83,0,2049,3646,48,49,50,51,52,53,54,55,56,
57,0,1,4670,10,4656,4705,144,115,58,65,83,67,73,73,45,76,79,87,69,
57,0,1,4670,10,4656,4705,146,115,58,65,83,67,73,73,45,76,79,87,69,
82,67,65,83,69,0,2049,3646,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,4707,10,4684,4758,
144,115,58,65,83,67,73,73,45,85,80,80,69,82,67,65,83,69,0,2049,
146,115,58,65,83,67,73,73,45,85,80,80,69,82,67,65,83,69,0,2049,
3646,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,4760,10,4737,4809,144,115,58,65,83,67,73,
84,85,86,87,88,89,90,0,1,4760,10,4737,4809,146,115,58,65,83,67,73,
73,45,76,69,84,84,69,82,83,0,2049,3646,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,4811,10,4790,4884,144,115,58,80,85,78,67,84,85,65,
87,88,89,90,0,1,4811,10,4790,4884,146,115,58,80,85,78,67,84,85,65,
84,73,79,78,0,2049,3646,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,4886,1,95,67502597,16,10,4867,4942,131,115,58,87,72,73,84,69,83,80,65,
67,69,0,32,9,10,13,0,4926,4952,156,39,0,1,3627,2049,144,10,4947,4962,
156,36,0,1,0,2049,131,10,4957,0,131,65,83,67,73,73,58,78,85,76,
0,4967,27,131,65,83,67,73,73,58,69,83,67,0,4980,8,131,65,83,67,
73,73,58,66,83,0,4993,9,131,65,83,67,73,73,58,72,84,0,5005,10,
131,65,83,67,73,73,58,76,70,0,5017,11,131,65,83,67,73,73,58,86,
84,0,5029,12,131,65,83,67,73,73,58,70,70,0,5041,13,131,65,83,67,
73,73,58,67,82,0,5053,32,131,65,83,67,73,73,58,83,80,65,67,69,
0,5065,127,131,65,83,67,73,73,58,68,69,76,0,5080,1,131,65,83,67,
73,73,58,83,79,72,0,5093,2,131,65,83,67,73,73,58,83,84,88,0,
5106,3,131,65,83,67,73,73,58,69,84,88,0,5119,4,131,65,83,67,73,
73,58,69,79,84,0,5132,5,131,65,83,67,73,73,58,69,78,81,0,5145,
6,131,65,83,67,73,73,58,65,67,75,0,5158,7,131,65,83,67,73,73,
58,66,69,76,0,5171,14,131,65,83,67,73,73,58,83,79,0,5184,15,131,
65,83,67,73,73,58,83,73,0,5196,16,131,65,83,67,73,73,58,68,76,
69,0,5208,17,131,65,83,67,73,73,58,68,67,49,0,5221,18,131,65,83,
67,73,73,58,68,67,50,0,5234,19,131,65,83,67,73,73,58,68,67,51,
0,5247,20,131,65,83,67,73,73,58,68,67,52,0,5260,21,131,65,83,67,
73,73,58,78,65,75,0,5273,22,131,65,83,67,73,73,58,83,89,78,0,
5286,23,131,65,83,67,73,73,58,69,84,66,0,5299,24,131,65,83,67,73,
73,58,67,65,78,0,5312,25,131,65,83,67,73,73,58,69,77,0,5325,26,
131,65,83,67,73,73,58,83,85,66,0,5337,28,131,65,83,67,73,73,58,
70,83,0,5350,29,131,65,83,67,73,73,58,71,83,0,5362,30,131,65,83,
67,73,73,58,82,83,0,5374,31,131,65,83,67,73,73,58,85,83,0,5386,
5414,144,99,58,108,111,119,101,114,99,97,115,101,63,0,1,97,1,122,2049,
2921,10,5398,5437,144,99,58,117,112,112,101,114,99,97,115,101,63,0,1,65,
1,90,2049,2921,10,5421,5457,144,99,58,108,101,116,116,101,114,63,0,1,5414,
1,5437,2049,2122,22,10,5444,5477,144,99,58,100,105,103,105,116,63,0,1,48,
1,57,2049,2921,10,5465,5498,144,99,58,118,105,115,105,98,108,101,63,0,1,
32,1,126,2049,2921,10,5484,5517,144,99,58,118,111,119,101,108,63,0,2049,3646,
97,101,105,111,117,65,69,73,79,85,0,1,5519,4,2049,3970,10,5505,5552,144,
1,4886,1,95,67502597,16,10,4867,4942,133,115,58,87,72,73,84,69,83,80,65,
67,69,0,32,9,10,13,0,4926,4952,158,39,0,1,3627,2049,146,10,4947,4962,
158,36,0,1,0,2049,133,10,4957,0,133,65,83,67,73,73,58,78,85,76,
0,4967,27,133,65,83,67,73,73,58,69,83,67,0,4980,8,133,65,83,67,
73,73,58,66,83,0,4993,9,133,65,83,67,73,73,58,72,84,0,5005,10,
133,65,83,67,73,73,58,76,70,0,5017,11,133,65,83,67,73,73,58,86,
84,0,5029,12,133,65,83,67,73,73,58,70,70,0,5041,13,133,65,83,67,
73,73,58,67,82,0,5053,32,133,65,83,67,73,73,58,83,80,65,67,69,
0,5065,127,133,65,83,67,73,73,58,68,69,76,0,5080,1,133,65,83,67,
73,73,58,83,79,72,0,5093,2,133,65,83,67,73,73,58,83,84,88,0,
5106,3,133,65,83,67,73,73,58,69,84,88,0,5119,4,133,65,83,67,73,
73,58,69,79,84,0,5132,5,133,65,83,67,73,73,58,69,78,81,0,5145,
6,133,65,83,67,73,73,58,65,67,75,0,5158,7,133,65,83,67,73,73,
58,66,69,76,0,5171,14,133,65,83,67,73,73,58,83,79,0,5184,15,133,
65,83,67,73,73,58,83,73,0,5196,16,133,65,83,67,73,73,58,68,76,
69,0,5208,17,133,65,83,67,73,73,58,68,67,49,0,5221,18,133,65,83,
67,73,73,58,68,67,50,0,5234,19,133,65,83,67,73,73,58,68,67,51,
0,5247,20,133,65,83,67,73,73,58,68,67,52,0,5260,21,133,65,83,67,
73,73,58,78,65,75,0,5273,22,133,65,83,67,73,73,58,83,89,78,0,
5286,23,133,65,83,67,73,73,58,69,84,66,0,5299,24,133,65,83,67,73,
73,58,67,65,78,0,5312,25,133,65,83,67,73,73,58,69,77,0,5325,26,
133,65,83,67,73,73,58,83,85,66,0,5337,28,133,65,83,67,73,73,58,
70,83,0,5350,29,133,65,83,67,73,73,58,71,83,0,5362,30,133,65,83,
67,73,73,58,82,83,0,5374,31,133,65,83,67,73,73,58,85,83,0,5386,
5414,146,99,58,108,111,119,101,114,99,97,115,101,63,0,1,97,1,122,2049,
2921,10,5398,5437,146,99,58,117,112,112,101,114,99,97,115,101,63,0,1,65,
1,90,2049,2921,10,5421,5457,146,99,58,108,101,116,116,101,114,63,0,1,5414,
1,5437,2049,2122,22,10,5444,5477,146,99,58,100,105,103,105,116,63,0,1,48,
1,57,2049,2921,10,5465,5498,146,99,58,118,105,115,105,98,108,101,63,0,1,
32,1,126,2049,2921,10,5484,5517,146,99,58,118,111,119,101,108,63,0,2049,3646,
97,101,105,111,117,65,69,73,79,85,0,1,5519,4,2049,3970,10,5505,5552,146,
99,58,99,111,110,115,111,110,97,110,116,63,0,2,2049,5457,1793,5562,2049,5517,
2049,2459,10,1,5557,1793,5570,3,2049,2362,10,1,5566,2049,64,10,5536,5592,144,99,
2049,2459,10,1,5557,1793,5570,3,2049,2362,10,1,5566,2049,64,10,5536,5592,146,99,
58,119,104,105,116,101,115,112,97,99,101,63,0,1,4942,4,2049,3970,10,5575,
5615,144,99,58,45,108,111,119,101,114,99,97,115,101,63,0,2049,5414,2049,2459,
10,5598,5637,144,99,58,45,117,112,112,101,114,99,97,115,101,63,0,2049,5437,
2049,2459,10,5620,5655,144,99,58,45,100,105,103,105,116,63,0,2049,5477,2049,2459,
10,5642,5678,144,99,58,45,119,104,105,116,101,115,112,97,99,101,63,0,2049,
5592,2049,2459,10,5660,5698,144,99,58,45,118,105,115,105,98,108,101,63,0,2049,
5498,2049,2459,10,5683,5716,144,99,58,45,118,111,119,101,108,63,0,2049,5517,2049,
2459,10,5703,5738,144,99,58,45,99,111,110,115,111,110,97,110,116,63,0,2049,
5552,2049,2459,10,5721,5757,144,99,58,116,111,45,117,112,112,101,114,0,2,2049,
5414,25,3,1,32,18,10,5743,5780,144,99,58,116,111,45,108,111,119,101,114,
0,2,2049,5437,25,3,1,32,17,10,5766,5804,144,99,58,116,111,45,115,116,
5615,146,99,58,45,108,111,119,101,114,99,97,115,101,63,0,2049,5414,2049,2459,
10,5598,5637,146,99,58,45,117,112,112,101,114,99,97,115,101,63,0,2049,5437,
2049,2459,10,5620,5655,146,99,58,45,100,105,103,105,116,63,0,2049,5477,2049,2459,
10,5642,5678,146,99,58,45,119,104,105,116,101,115,112,97,99,101,63,0,2049,
5592,2049,2459,10,5660,5698,146,99,58,45,118,105,115,105,98,108,101,63,0,2049,
5498,2049,2459,10,5683,5716,146,99,58,45,118,111,119,101,108,63,0,2049,5517,2049,
2459,10,5703,5738,146,99,58,45,99,111,110,115,111,110,97,110,116,63,0,2049,
5552,2049,2459,10,5721,5757,146,99,58,116,111,45,117,112,112,101,114,0,2,2049,
5414,25,3,1,32,18,10,5743,5780,146,99,58,116,111,45,108,111,119,101,114,
0,2,2049,5437,25,3,1,32,17,10,5766,5804,146,99,58,116,111,45,115,116,
114,105,110,103,0,2049,3646,46,0,1,5806,2049,3601,1,36,2049,2110,10,5789,5834,
144,99,58,116,111,103,103,108,101,45,99,97,115,101,0,2,2049,5414,1,5757,
1,5780,2049,64,10,5817,5859,144,99,58,116,111,45,110,117,109,98,101,114,0,
146,99,58,116,111,103,103,108,101,45,99,97,115,101,0,2,2049,5414,1,5757,
1,5780,2049,64,10,5817,5859,146,99,58,116,111,45,110,117,109,98,101,114,0,
2,2049,5477,1793,5868,1,48,18,10,1,5864,1793,5876,3,1,0,10,1,5872,2049,
64,10,5844,5895,144,115,58,116,111,45,117,112,112,101,114,0,1,5757,2049,4469,
10,5881,5914,144,115,58,116,111,45,108,111,119,101,114,0,1,5780,2049,4469,10,
5900,5934,144,115,58,116,114,105,109,45,108,101,102,116,0,2049,3601,1793,5948,2049,
56,1,5592,1,2543,2049,2122,21,10,1,5938,2049,2227,2049,2903,10,5919,5971,144,115,
64,10,5844,5895,146,115,58,116,111,45,117,112,112,101,114,0,1,5757,2049,4469,
10,5881,5914,146,115,58,116,111,45,108,111,119,101,114,0,1,5780,2049,4469,10,
5900,5934,146,115,58,116,114,105,109,45,108,101,102,116,0,2049,3601,1793,5948,2049,
56,1,5592,1,2543,2049,2122,21,10,1,5938,2049,2227,2049,2903,10,5919,5971,146,115,
58,116,114,105,109,45,114,105,103,104,116,0,2049,3601,2049,3751,2049,5934,2049,3751,
10,5955,5990,144,115,58,116,114,105,109,0,2049,5971,2049,5934,10,5980,6006,144,99,
10,5955,5990,146,115,58,116,114,105,109,0,2049,5971,2049,5934,10,5980,6006,146,99,
111,114,114,101,99,116,0,2,1,48,13,1793,6021,1,48,67502597,18,1,2,19,
17,10,1,6012,9,10,5980,6040,144,110,58,116,111,45,115,116,114,105,110,103,
17,10,1,6012,9,10,5980,6040,146,110,58,116,111,45,115,116,114,105,110,103,
0,1793,6088,2049,1874,2049,3428,2,2049,2855,1793,6066,1,10,20,4,1,48,17,2049,
6006,2049,3336,2,2049,2543,10,1,6051,2049,2227,3,2049,2562,1793,6080,1,45,2049,3336,
10,1,6075,9,2049,3302,2049,3751,10,1,6042,2049,3452,10,6025,6115,131,82,101,119,
114,105,116,101,85,110,100,101,114,115,99,111,114,101,115,0,-1,6093,6123,144,
115,117,98,0,1,95,1793,6130,1,32,10,1,6127,2049,2373,10,6116,6146,144,114,
10,1,6075,9,2049,3302,2049,3751,10,1,6042,2049,3452,10,6025,6115,133,82,101,119,
114,105,116,101,85,110,100,101,114,115,99,111,114,101,115,0,-1,6093,6123,146,
115,117,98,0,1,95,1793,6130,1,32,10,1,6127,2049,2373,10,6116,6146,146,114,
101,119,114,105,116,101,0,3841,6115,1793,6155,1,6123,2049,4469,10,1,6150,9,10,
6135,6169,144,104,97,110,100,108,101,0,1,3705,8,10,6093,6185,156,112,114,101,
102,105,120,58,39,0,2049,6146,2049,6169,10,6173,6201,144,115,58,115,112,108,105,
116,0,2049,2090,2049,3904,772,2049,2090,2049,4574,1,38,2049,2100,10,6190,6236,144,115,
6135,6169,146,104,97,110,100,108,101,0,1,3705,8,10,6093,6185,158,112,114,101,
102,105,120,58,39,0,2049,6146,2049,6169,10,6173,6201,146,115,58,115,112,108,105,
116,0,2049,2090,2049,3904,772,2049,2090,2049,4574,1,38,2049,2100,10,6190,6236,146,115,
58,115,112,108,105,116,45,111,110,45,115,116,114,105,110,103,0,2049,2090,2049,
4376,2049,2890,772,2049,2090,2049,4574,1,38,2049,2100,10,6215,6265,144,115,58,114,101,
112,108,97,99,101,0,67502597,2049,79,2049,1874,16,1793,6281,2049,6236,4,2049,1874,15,
17,10,1,6273,2049,2100,2049,3811,2049,3852,10,6252,6302,131,83,112,108,105,116,45,
79,110,0,0,6290,6313,144,109,97,116,99,104,63,0,3841,6302,11,10,6303,6330,
144,116,101,114,109,105,110,97,116,101,0,1,0,67502597,2049,2903,16,10,6317,6345,
144,115,116,101,112,0,1,2890,2049,2100,2049,6313,1793,6359,2,2049,105,2049,6330,10,
1,6353,9,10,6252,6377,144,115,58,116,111,107,101,110,105,122,101,0,4097,6302,
2049,3672,2049,1874,1,0,2049,105,1793,6399,2,2049,105,2,1,6345,2049,3870,3,10,
1,6389,2049,2100,2049,1874,67502597,18,2049,2903,67502597,16,10,6363,6422,131,78,101,101,100,
4376,2049,2890,772,2049,2090,2049,4574,1,38,2049,2100,10,6215,6265,146,115,58,114,101,
112,108,97,99,101,0,67502597,2049,81,2049,1874,16,1793,6281,2049,6236,4,2049,1874,15,
17,10,1,6273,2049,2100,2049,3811,2049,3852,10,6252,6302,133,83,112,108,105,116,45,
79,110,0,0,6290,6313,146,109,97,116,99,104,63,0,3841,6302,11,10,6303,6330,
146,116,101,114,109,105,110,97,116,101,0,1,0,67502597,2049,2903,16,10,6317,6345,
146,115,116,101,112,0,1,2890,2049,2100,2049,6313,1793,6359,2,2049,107,2049,6330,10,
1,6353,9,10,6252,6377,146,115,58,116,111,107,101,110,105,122,101,0,4097,6302,
2049,3672,2049,1874,1,0,2049,107,1793,6399,2,2049,107,2,1,6345,2049,3870,3,10,
1,6389,2049,2100,2049,1874,67502597,18,2049,2903,67502597,16,10,6363,6422,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,6412,6557,131,76,101,110,0,0,6550,
6568,131,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,6412,6557,133,76,101,110,0,0,6550,
6568,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,6558,6702,131,
84,80,0,0,6696,6711,144,115,97,118,101,0,2049,3672,3841,6702,1,6568,17,2049,
2890,16,1,6702,2049,2988,10,6703,6734,144,110,101,120,116,0,1793,6740,3841,6557,17,
10,1,6736,2049,2110,10,6726,6754,144,100,111,110,101,63,0,2049,79,2049,2527,10,
6363,6783,144,115,58,116,111,107,101,110,105,122,101,45,111,110,45,115,116,114,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6558,6702,133,
84,80,0,0,6696,6711,146,115,97,118,101,0,2049,3672,3841,6702,1,6568,17,2049,
2890,16,1,6702,2049,2988,10,6703,6734,146,110,101,120,116,0,1793,6740,3841,6557,17,
10,1,6736,2049,2110,10,6726,6754,146,100,111,110,101,63,0,2049,81,2049,2527,10,
6363,6783,146,115,58,116,111,107,101,110,105,122,101,45,111,110,45,115,116,114,
105,110,103,0,1,0,4097,6702,1793,6797,2,1,6422,2049,4648,2049,3852,10,1,6789,
1793,6806,2049,79,4097,6557,10,1,6801,2049,2122,1793,6823,1,6422,2049,6236,2049,6711,2049,
6734,2049,6754,10,1,6812,2049,2250,1,6568,3841,6702,2049,2903,4097,6568,10,6759,6848,144,
1793,6806,2049,81,4097,6557,10,1,6801,2049,2122,1793,6823,1,6422,2049,6236,2049,6711,2049,
6734,2049,6754,10,1,6812,2049,2250,1,6568,3841,6702,2049,2903,4097,6568,10,6759,6848,146,
102,111,114,45,101,97,99,104,0,4,2049,56,1,13,2049,2100,1793,6864,5,2049,
56,84018692,525572,1542,10,1,6857,2049,2275,771,10,6836,6884,144,115,117,98,115,116,105,
116,117,116,101,0,2049,3517,1,129,18,10,6870,6901,144,101,120,116,114,97,99,
116,0,2049,6884,2049,4648,10,6890,6918,144,116,111,107,101,110,105,122,101,0,2049,
6783,2049,3627,10,6906,6934,144,99,111,109,98,105,110,101,0,2049,6884,2049,3852,2049,
3852,10,6923,6950,144,109,101,114,103,101,0,4,1,6934,2049,6848,772,10,6941,6969,
144,102,105,110,100,45,101,110,100,0,2,2049,79,2049,6884,2049,79,18,67502597,17,
10,6957,6989,144,99,108,101,97,110,0,2049,6969,1,0,4,16,10,6759,7013,144,
56,84018692,525572,1542,10,1,6857,2049,2275,771,10,6836,6884,146,115,117,98,115,116,105,
116,117,116,101,0,2049,3517,1,129,18,10,6870,6901,146,101,120,116,114,97,99,
116,0,2049,6884,2049,4648,10,6890,6918,146,116,111,107,101,110,105,122,101,0,2049,
6783,2049,3627,10,6906,6934,146,99,111,109,98,105,110,101,0,2049,6884,2049,3852,2049,
3852,10,6923,6950,146,109,101,114,103,101,0,4,1,6934,2049,6848,772,10,6941,6969,
146,102,105,110,100,45,101,110,100,0,2,2049,81,2049,6884,2049,81,18,67502597,17,
10,6957,6989,146,99,108,101,97,110,0,2049,6969,1,0,4,16,10,6759,7013,146,
115,58,114,101,112,108,97,99,101,45,97,108,108,0,1,3,1793,7028,2049,6901,
2049,6918,2049,6950,2049,6989,2049,3601,10,1,7017,2049,3079,10,6996,7041,144,99,104,97,
2049,6918,2049,6950,2049,6989,2049,3601,10,1,7017,2049,3079,10,6996,7041,146,99,104,97,
114,0,1,32,1793,7050,1,95,2049,3336,10,1,7045,2049,2373,1,114,1793,7063,1,
13,2049,3336,10,1,7058,2049,2373,1,110,1793,7076,1,10,2049,3336,10,1,7071,2049,
2373,1,116,1793,7089,1,9,2049,3336,10,1,7084,2049,2373,1,48,1793,7102,1,0,
2049,3336,10,1,7097,2049,2373,2049,3336,10,7033,7117,144,116,121,112,101,0,1,99,
1793,7125,4,2049,3336,10,1,7121,2049,2373,1,115,1793,7139,4,1,3336,2049,3870,10,
1,7133,2049,2373,1,110,1793,7155,4,2049,6040,1,3336,2049,3870,10,1,7147,2049,2373,
3,10,7109,7171,144,104,97,110,100,108,101,0,1,92,1793,7180,2049,56,2049,7041,
10,1,7175,2049,2373,1,37,1793,7193,2049,56,2049,7117,10,1,7188,2049,2373,2049,3336,
10,6996,7212,144,115,58,102,111,114,109,97,116,0,1793,7241,2049,3627,1793,7236,2049,
3428,1793,7231,2049,56,25,2049,7171,1,7222,7,10,1,7222,8,3,10,1,7218,2049,
2110,10,1,7214,2049,3452,10,7200,7257,144,115,58,99,111,110,115,116,0,1,3672,
2049,2100,2049,2016,10,7246,7274,131,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,7264,7310,144,102,114,111,109,0,2049,79,2,1793,7328,1793,7321,1,7274,
4113,10,1,7317,2049,2110,2049,2903,10,1,7315,2049,2275,3,10,7302,7340,144,116,111,
0,2,2049,79,1793,7356,2049,56,1,97,18,2049,2890,1,7274,266001,10,1,7345,2049,
2275,3,10,7246,7373,144,114,101,111,114,100,101,114,0,1,7310,2049,2100,2049,7340,
10,7362,7389,144,99,117,114,114,121,0,2049,1874,1793,7399,4,2049,1728,2049,1751,10,
1,7393,2049,2100,10,7380,7412,144,100,111,101,115,0,2049,1587,4,2049,7389,2049,1570,
2049,158,16,1,144,2049,1646,10,7404,7441,144,100,58,102,111,114,45,101,97,99,
104,0,1,2,1793,7467,6415,2049,2090,1793,7459,1793,7454,2052,10,1,7452,2049,2100,10,
1,7450,2049,2100,1,7445,7,10,1,7445,8,3,10,7427,7487,144,100,58,108,111,
111,107,117,112,45,120,116,0,1,0,4,1793,7512,2049,2090,2049,158,2831,1793,7505,
4,1,2051,2049,2100,10,1,7499,1,11,2049,64,10,1,7492,2049,7441,3,10,7472,
7530,144,97,58,108,101,110,103,116,104,0,15,10,7518,7553,144,97,58,99,111,
117,110,116,101,100,45,114,101,115,117,108,116,115,0,8,2049,1874,1793,7566,2,
2049,105,1,105,2049,2275,10,1,7558,2049,2100,10,7532,7588,144,97,58,102,114,111,
109,45,115,116,114,105,110,103,0,2049,1874,1793,7602,2,2049,79,2049,105,1,105,
2049,3870,10,1,7592,2049,2100,10,7571,7621,144,97,58,102,111,114,45,101,97,99,
104,0,4,2049,56,1,13,2049,2100,1793,7637,5,2049,56,84018692,525572,1542,10,1,7630,
2049,2275,771,10,7607,7652,144,97,58,100,117,112,0,2049,1874,1793,7665,2,15,2049,
105,1,105,2049,7621,10,1,7656,2049,2100,10,7643,7680,144,97,58,99,111,112,121,
0,1,3,1793,7696,4097,3,2,2049,7530,2049,105,1,105,2049,7621,10,1,7684,2049,
3079,10,7670,7716,144,97,58,116,111,45,115,116,114,105,110,103,0,1,3,1793,
7729,2049,7652,1,0,2049,105,2049,2890,10,1,7720,2049,3079,2049,3601,10,7701,7748,144,
97,58,97,112,112,101,110,100,0,2049,2090,1,34,2049,2148,17,2049,1874,1793,7773,
2049,105,1793,7768,1,105,2049,7621,10,1,7763,2049,2148,10,1,7759,2049,2100,10,7736,
7791,144,97,58,112,114,101,112,101,110,100,0,4,2049,7748,10,7778,7805,144,97,
58,99,104,111,112,0,2049,7652,1,-1,2049,3060,2,2049,3003,10,7795,7827,144,97,
58,102,105,108,116,101,114,0,1793,7842,67502597,1,21,2049,2100,4,1,105,1,11,
2049,64,10,1,7829,2049,7389,2049,1874,1793,7857,67502597,15,2049,105,2049,7621,10,1,7850,
2049,2100,2049,1874,67502597,18,2049,2903,67502597,16,10,7815,7885,144,97,58,99,111,110,116,
97,105,110,115,63,0,1,0,4,1793,7897,4,5,67502597,11,6,22,10,1,7890,
2049,7621,772,10,7870,7925,144,97,58,99,111,110,116,97,105,110,115,45,115,116,
114,105,110,103,63,0,1,0,4,1793,7938,4,5,67502597,2049,93,6,22,10,1,
7930,2049,7621,772,10,7903,7953,144,97,58,109,97,112,0,1793,7959,8,2049,105,10,
1,7955,2049,7389,2049,1874,1793,7974,67502597,15,2049,105,2049,7621,10,1,7967,2049,2100,10,
7944,7992,144,97,58,114,101,118,101,114,115,101,0,2049,1874,1793,8026,2049,56,1793,
8004,17,2049,2903,10,1,8000,2049,2110,2,2049,105,1793,8020,2,15,2049,105,2049,2903,
10,1,8013,2049,2275,3,10,1,7996,2049,2100,10,7979,8039,144,97,58,116,104,0,
17,2049,2890,10,8031,8054,144,97,58,102,101,116,99,104,0,2049,8039,15,10,8043,
8069,144,97,58,115,116,111,114,101,0,2049,8039,16,10,8058,8085,144,97,58,114,
101,100,117,99,101,0,1,13,2049,2100,2049,7621,10,8073,8104,144,105,100,101,110,
116,105,102,121,0,1,-1,4,1,0,1793,8135,2049,2350,11,1793,8129,67502597,1,-1,
11,1793,8125,772,2,10,1,8122,9,10,1,8116,9,2049,2890,10,1,8111,2049,8085,
3,10,8073,8155,144,97,58,105,110,100,101,120,45,111,102,0,1,3,1793,8168,
1,26,2049,7389,2049,7953,2049,8104,10,1,8159,2049,3079,10,8141,8194,144,97,58,105,
110,100,101,120,45,111,102,45,115,116,114,105,110,103,0,1,3,1793,8207,1,
93,2049,7389,2049,7953,2049,8104,10,1,8198,2049,3079,10,8173,8222,144,97,58,109,97,
107,101,0,2049,7553,2,2,1,3,1793,8233,2049,7992,10,1,8230,2049,3079,4,2049,
7680,10,8212,8246,156,123,0,1,287,2049,156,1,1556,2049,144,1,287,2049,156,10,
8241,8264,156,125,0,1,303,2049,156,1,2100,2049,144,1,1556,2049,144,1,13,2049,
150,1,40,2049,150,1,2903,2049,144,1,303,2049,156,1,8222,2049,144,10,8259,8308,
144,98,111,117,110,100,115,63,0,67502597,2049,7530,67502597,13,10,8297,8322,144,99,111,
112,121,0,2049,56,2049,105,10,8314,8337,144,116,111,45,101,110,100,0,2,2049,
7530,17,2049,2890,10,8259,8354,144,97,58,108,101,102,116,0,2049,8308,1793,8362,771,
1,-1,10,1,8358,2049,2653,2049,1874,67502597,2049,105,1793,8383,1,2890,2049,2100,1,8322,
2049,2275,3,10,1,8373,2049,2100,10,8344,8399,144,97,58,114,105,103,104,116,0,
2049,8308,1793,8407,771,1,-1,10,1,8403,2049,2653,2049,1874,67502597,2049,105,1793,8430,4,
2049,8337,67502597,18,4,1,8322,2049,2275,3,10,1,8418,2049,2100,10,8388,8447,144,97,
58,109,105,100,100,108,101,0,1,2042,2049,2100,4,67502597,2049,8308,1793,8462,771,3,
1,-1,10,1,8457,2049,2653,771,2049,2090,4,18,2049,2890,2049,1874,67502597,2049,105,1793,
8497,772,1793,8487,17,2049,2890,10,1,8483,2049,2100,1,8322,2049,2275,3,10,1,8480,
2049,2100,10,8435,8510,131,70,108,97,103,0,0,8502,8522,144,99,111,109,112,97,
114,101,0,67440386,184946434,10,8511,8535,144,108,101,110,103,116,104,0,659202,10,8525,8545,
144,110,101,120,116,0,17043713,1,1,2577,10,8537,8563,144,110,111,116,45,101,113,
117,97,108,0,50529030,2561,0,10,8550,8575,144,108,111,111,112,0,524549,8545,2049,8522,
18157313,8510,8510,16,420610310,1,1,8575,7,10,8435,8598,144,97,58,101,113,63,0,1048833,
-1,8510,2049,8522,151066369,-1,8563,2049,8535,2049,8575,251724547,8510,10,8589,8623,144,97,58,45,
101,113,63,0,2049,8598,2049,2459,10,8613,8646,144,97,58,98,101,103,105,110,115,
45,119,105,116,104,63,0,1,3,1793,8662,2,2049,7530,1,13,2049,2100,2049,8354,
2049,8598,10,1,8650,2049,3079,10,8628,8683,144,97,58,101,110,100,115,45,119,105,
116,104,63,0,1,3,1793,8699,2,2049,7530,1,13,2049,2100,2049,8399,2049,8598,10,
1,8687,2049,3079,10,8667,8720,144,99,117,114,114,101,110,116,45,108,105,110,101,
0,2049,3517,1,1025,18,10,8704,8742,144,99,111,117,110,116,45,116,111,107,101,
110,115,0,1793,8748,1,32,11,10,1,8744,2049,4427,2049,79,10,8726,8773,144,112,
114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8801,1,32,2049,6201,
4,1793,8794,2,2049,79,2049,2543,1,367,1,11,2049,64,10,1,8782,2049,2100,2049,
2890,10,1,8775,2049,2275,2049,367,10,8667,8822,144,115,58,101,118,97,108,117,97,
116,101,0,2049,8720,2049,4648,2049,8720,2,2049,8742,2049,8773,10,8808,8840,131,76,80,
0,0,8834,8850,131,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,8841,8890,144,110,101,120,116,0,3841,8840,1,8850,17,2049,2988,10,8882,
8906,144,112,114,101,112,0,1,8840,2049,2988,1,0,3841,8840,1,8850,17,16,10,
8898,8927,144,100,111,110,101,0,1,8840,2049,3003,10,8808,8937,144,73,0,3841,8840,
1,8850,17,15,10,8932,8949,144,74,0,3841,8840,1,8850,17,2049,2903,15,10,8944,
8963,144,75,0,3841,8840,1,8850,17,1,2,18,15,10,8958,8990,144,105,110,100,
101,120,101,100,45,116,105,109,101,115,0,2049,8906,4,1793,9006,25,33886721,1,2053,
1542,2049,8890,1,8995,7,10,1,8995,8,3,2049,8927,10,8973,9021,156,104,111,111,
107,0,2049,3646,108,105,106,117,46,46,46,46,0,1,9023,2049,414,2049,1874,2049,
2890,2049,105,10,9013,9055,144,115,101,116,45,104,111,111,107,0,2049,2890,16,10,
9043,9069,144,117,110,104,111,111,107,0,2049,2890,2,2049,2890,4,16,10,9059,9093,
144,105,111,58,101,110,117,109,101,114,97,116,101,0,27,10,9077,9107,144,105,
111,58,113,117,101,114,121,0,28,10,9095,9122,144,105,111,58,105,110,118,111,
107,101,0,29,10,9109,9139,144,105,111,58,115,99,97,110,45,102,111,114,0,
1,-1,4,2049,9093,1793,9170,2049,8937,2049,9107,772,67502597,11,1793,9166,1793,9161,3,2049,
8937,10,1,9157,2049,2100,10,1,9155,9,10,1,9146,2049,8990,3,10,9124,9185,144,
99,58,112,117,116,0,1793,9187,1,0,2049,9122,10,9176,9198,144,110,108,0,1,
10,2049,9185,10,9192,9209,144,115,112,0,1,32,2049,9185,10,9203,9221,144,116,97,
98,0,1,9,2049,9185,10,9214,9235,144,115,58,112,117,116,0,1,9185,2049,3870,
10,9226,9249,144,110,58,112,117,116,0,2049,6040,2049,9235,10,9240,9263,144,114,101,
115,101,116,0,2049,1556,25,771,1,9263,7,10,9254,9285,144,100,117,109,112,45,
115,116,97,99,107,0,2049,1556,25,134284547,9285,134283782,9249,2049,9209,10,9271,9303,144,70,
82,69,69,0,2049,3517,1,1025,18,2049,1874,18,10,9295,9320,144,101,111,108,63,
0,1793,9326,1,13,11,10,1,9322,1793,9334,1,10,11,10,1,9330,1793,9342,1,
32,11,10,1,9338,2049,2159,22,22,10,9312,9359,144,118,97,108,105,100,63,0,
2,2049,79,2049,2543,10,9349,9377,144,99,104,101,99,107,45,98,115,0,2,1793,
9384,1,8,11,10,1,9380,1793,9392,1,127,11,10,1,9388,2049,2122,22,1793,9405,
2049,3360,2049,3360,771,10,1,9399,9,10,9365,9418,144,99,58,103,101,116,0,7425,
1,10,9409,9430,144,115,58,103,101,116,0,1793,9457,1,1025,2049,3428,1793,9448,2049,
9418,2,2049,3336,2049,9377,2049,9320,10,1,9438,2049,2250,2049,3302,2049,3724,10,1,9432,
2049,3452,10,9421,9472,144,108,105,115,116,101,110,0,2049,9430,2049,9359,1,367,1,
11,2049,64,1,9472,7,10,0 };
2049,3336,10,1,7097,2049,2373,1,94,1793,7115,1,27,2049,3336,10,1,7110,2049,2373,
2049,3336,10,7033,7130,146,116,121,112,101,0,1,99,1793,7138,4,2049,3336,10,1,
7134,2049,2373,1,115,1793,7152,4,1,3336,2049,3870,10,1,7146,2049,2373,1,110,1793,
7168,4,2049,6040,1,3336,2049,3870,10,1,7160,2049,2373,3,10,7122,7184,146,104,97,
110,100,108,101,0,1,92,1793,7193,2049,56,2049,7041,10,1,7188,2049,2373,1,37,
1793,7206,2049,56,2049,7130,10,1,7201,2049,2373,2049,3336,10,6996,7225,146,115,58,102,
111,114,109,97,116,0,1793,7254,2049,3627,1793,7249,2049,3428,1793,7244,2049,56,25,2049,
7184,1,7235,7,10,1,7235,8,3,10,1,7231,2049,2110,10,1,7227,2049,3452,10,
7213,7270,146,115,58,99,111,110,115,116,0,1,3672,2049,2100,2049,2016,10,7259,7287,
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,7277,7323,146,102,
114,111,109,0,2049,81,2,1793,7341,1793,7334,1,7287,4113,10,1,7330,2049,2110,2049,
2903,10,1,7328,2049,2275,3,10,7315,7353,146,116,111,0,2,2049,81,1793,7369,2049,
56,1,97,18,2049,2890,1,7287,266001,10,1,7358,2049,2275,3,10,7259,7386,146,114,
101,111,114,100,101,114,0,1,7323,2049,2100,2049,7353,10,7375,7402,146,99,117,114,
114,121,0,2049,1874,1793,7412,4,2049,1728,2049,1751,10,1,7406,2049,2100,10,7393,7425,
146,100,111,101,115,0,2049,1587,4,2049,7402,2049,1570,2049,160,16,1,146,2049,1646,
10,7417,7454,146,100,58,102,111,114,45,101,97,99,104,0,1,2,1793,7480,6415,
2049,2090,1793,7472,1793,7467,2052,10,1,7465,2049,2100,10,1,7463,2049,2100,1,7458,7,
10,1,7458,8,3,10,7440,7500,146,100,58,108,111,111,107,117,112,45,120,116,
0,1,0,4,1793,7525,2049,2090,2049,160,2831,1793,7518,4,1,2051,2049,2100,10,1,
7512,1,11,2049,64,10,1,7505,2049,7454,3,10,7485,7543,146,97,58,108,101,110,
103,116,104,0,15,10,7531,7566,146,97,58,99,111,117,110,116,101,100,45,114,
101,115,117,108,116,115,0,8,2049,1874,1793,7579,2,2049,107,1,107,2049,2275,10,
1,7571,2049,2100,10,7545,7601,146,97,58,102,114,111,109,45,115,116,114,105,110,
103,0,2049,1874,1793,7615,2,2049,81,2049,107,1,107,2049,3870,10,1,7605,2049,2100,
10,7584,7634,146,97,58,102,111,114,45,101,97,99,104,0,4,2049,56,1,13,
2049,2100,1793,7650,5,2049,56,84018692,525572,1542,10,1,7643,2049,2275,771,10,7620,7665,146,
97,58,100,117,112,0,2049,1874,1793,7678,2,15,2049,107,1,107,2049,7634,10,1,
7669,2049,2100,10,7656,7693,146,97,58,99,111,112,121,0,1,3,1793,7709,4097,3,
2,2049,7543,2049,107,1,107,2049,7634,10,1,7697,2049,3079,10,7683,7729,146,97,58,
116,111,45,115,116,114,105,110,103,0,1,3,1793,7742,2049,7665,1,0,2049,107,
2049,2890,10,1,7733,2049,3079,2049,3601,10,7714,7761,146,97,58,97,112,112,101,110,
100,0,2049,2090,1,34,2049,2148,17,2049,1874,1793,7786,2049,107,1793,7781,1,107,2049,
7634,10,1,7776,2049,2148,10,1,7772,2049,2100,10,7749,7804,146,97,58,112,114,101,
112,101,110,100,0,4,2049,7761,10,7791,7818,146,97,58,99,104,111,112,0,2049,
7665,1,-1,2049,3060,2,2049,3003,10,7808,7840,146,97,58,102,105,108,116,101,114,
0,1793,7855,67502597,1,21,2049,2100,4,1,107,1,11,2049,64,10,1,7842,2049,7402,
2049,1874,1793,7870,67502597,15,2049,107,2049,7634,10,1,7863,2049,2100,2049,1874,67502597,18,2049,
2903,67502597,16,10,7828,7898,146,97,58,99,111,110,116,97,105,110,115,63,0,1,
0,4,1793,7910,4,5,67502597,11,6,22,10,1,7903,2049,7634,772,10,7883,7938,146,
97,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1,
0,4,1793,7951,4,5,67502597,2049,95,6,22,10,1,7943,2049,7634,772,10,7916,7966,
146,97,58,109,97,112,0,1793,7972,8,2049,107,10,1,7968,2049,7402,2049,1874,1793,
7987,67502597,15,2049,107,2049,7634,10,1,7980,2049,2100,10,7957,8005,146,97,58,114,101,
118,101,114,115,101,0,2049,1874,1793,8039,2049,56,1793,8017,17,2049,2903,10,1,8013,
2049,2110,2,2049,107,1793,8033,2,15,2049,107,2049,2903,10,1,8026,2049,2275,3,10,
1,8009,2049,2100,10,7992,8052,146,97,58,116,104,0,17,2049,2890,10,8044,8067,146,
97,58,102,101,116,99,104,0,2049,8052,15,10,8056,8082,146,97,58,115,116,111,
114,101,0,2049,8052,16,10,8071,8098,146,97,58,114,101,100,117,99,101,0,1,
13,2049,2100,2049,7634,10,8086,8117,146,105,100,101,110,116,105,102,121,0,1,-1,
4,1,0,1793,8148,2049,2350,11,1793,8142,67502597,1,-1,11,1793,8138,772,2,10,1,
8135,9,10,1,8129,9,2049,2890,10,1,8124,2049,8098,3,10,8086,8168,146,97,58,
105,110,100,101,120,45,111,102,0,1,3,1793,8181,1,26,2049,7402,2049,7966,2049,
8117,10,1,8172,2049,3079,10,8154,8207,146,97,58,105,110,100,101,120,45,111,102,
45,115,116,114,105,110,103,0,1,3,1793,8220,1,95,2049,7402,2049,7966,2049,8117,
10,1,8211,2049,3079,10,8186,8235,146,97,58,109,97,107,101,0,2049,7566,2,2,
1,3,1793,8246,2049,8005,10,1,8243,2049,3079,4,2049,7693,10,8225,8259,158,123,0,
1,289,2049,158,1,1556,2049,146,1,289,2049,158,10,8254,8277,158,125,0,1,305,
2049,158,1,2100,2049,146,1,1556,2049,146,1,13,2049,152,1,40,2049,152,1,2903,
2049,146,1,305,2049,158,1,8235,2049,146,10,8272,8321,146,98,111,117,110,100,115,
63,0,67502597,2049,7543,67502597,13,10,8310,8335,146,99,111,112,121,0,2049,56,2049,107,
10,8327,8350,146,116,111,45,101,110,100,0,2,2049,7543,17,2049,2890,10,8272,8367,
146,97,58,108,101,102,116,0,2049,8321,1793,8375,771,1,-1,10,1,8371,2049,2653,
2049,1874,67502597,2049,107,1793,8396,1,2890,2049,2100,1,8335,2049,2275,3,10,1,8386,2049,
2100,10,8357,8412,146,97,58,114,105,103,104,116,0,2049,8321,1793,8420,771,1,-1,
10,1,8416,2049,2653,2049,1874,67502597,2049,107,1793,8443,4,2049,8350,67502597,18,4,1,8335,
2049,2275,3,10,1,8431,2049,2100,10,8401,8460,146,97,58,109,105,100,100,108,101,
0,1,2042,2049,2100,4,67502597,2049,8321,1793,8475,771,3,1,-1,10,1,8470,2049,2653,
771,2049,2090,4,18,2049,2890,2049,1874,67502597,2049,107,1793,8510,772,1793,8500,17,2049,2890,
10,1,8496,2049,2100,1,8335,2049,2275,3,10,1,8493,2049,2100,10,8448,8523,133,70,
108,97,103,0,0,8515,8535,146,99,111,109,112,97,114,101,0,67440386,184946434,10,8524,
8548,146,108,101,110,103,116,104,0,659202,10,8538,8558,146,110,101,120,116,0,17043713,
1,1,2577,10,8550,8576,146,110,111,116,45,101,113,117,97,108,0,50529030,2561,0,
10,8563,8588,146,108,111,111,112,0,524549,8558,2049,8535,18157313,8523,8523,16,420610310,1,1,
8588,7,10,8448,8611,146,97,58,101,113,63,0,1048833,-1,8523,2049,8535,151066369,-1,8576,
2049,8548,2049,8588,251724547,8523,10,8602,8636,146,97,58,45,101,113,63,0,2049,8611,2049,
2459,10,8626,8659,146,97,58,98,101,103,105,110,115,45,119,105,116,104,63,0,
1,3,1793,8675,2,2049,7543,1,13,2049,2100,2049,8367,2049,8611,10,1,8663,2049,3079,
10,8641,8696,146,97,58,101,110,100,115,45,119,105,116,104,63,0,1,3,1793,
8712,2,2049,7543,1,13,2049,2100,2049,8412,2049,8611,10,1,8700,2049,3079,10,8680,8733,
146,99,117,114,114,101,110,116,45,108,105,110,101,0,2049,3517,1,1025,18,10,
8717,8755,146,99,111,117,110,116,45,116,111,107,101,110,115,0,1793,8761,1,32,
11,10,1,8757,2049,4427,2049,81,10,8739,8786,146,112,114,111,99,101,115,115,45,
116,111,107,101,110,115,0,1793,8814,1,32,2049,6201,4,1793,8807,2,2049,81,2049,
2543,1,369,1,11,2049,64,10,1,8795,2049,2100,2049,2890,10,1,8788,2049,2275,2049,
369,10,8680,8835,146,115,58,101,118,97,108,117,97,116,101,0,2049,8733,2049,4648,
2049,8733,2,2049,8755,2049,8786,10,8821,8853,133,76,80,0,0,8847,8863,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,8854,8903,146,110,
101,120,116,0,3841,8853,1,8863,17,2049,2988,10,8895,8919,146,112,114,101,112,0,
1,8853,2049,2988,1,0,3841,8853,1,8863,17,16,10,8911,8940,146,100,111,110,101,
0,1,8853,2049,3003,10,8821,8950,146,73,0,3841,8853,1,8863,17,15,10,8945,8962,
146,74,0,3841,8853,1,8863,17,2049,2903,15,10,8957,8976,146,75,0,3841,8853,1,
8863,17,1,2,18,15,10,8971,9003,146,105,110,100,101,120,101,100,45,116,105,
109,101,115,0,2049,8919,4,1793,9019,25,33886721,1,2053,1542,2049,8903,1,9008,7,10,
1,9008,8,3,2049,8940,10,8986,9034,158,104,111,111,107,0,2049,3646,108,105,106,
117,46,46,46,46,0,1,9036,2049,416,2049,1874,2049,2890,2049,107,10,9026,9068,146,
115,101,116,45,104,111,111,107,0,2049,2890,16,10,9056,9082,146,117,110,104,111,
111,107,0,2049,2890,2,2049,2890,4,16,10,9072,9106,146,105,111,58,101,110,117,
109,101,114,97,116,101,0,27,10,9090,9120,146,105,111,58,113,117,101,114,121,
0,28,10,9108,9135,146,105,111,58,105,110,118,111,107,101,0,29,10,9122,9152,
146,105,111,58,115,99,97,110,45,102,111,114,0,1,-1,4,2049,9106,1793,9183,
2049,8950,2049,9120,772,67502597,11,1793,9179,1793,9174,3,2049,8950,10,1,9170,2049,2100,10,
1,9168,9,10,1,9159,2049,9003,3,10,9137,9198,146,99,58,112,117,116,0,1793,
9200,1,0,2049,9135,10,9189,9211,146,110,108,0,1,10,2049,9198,10,9205,9222,146,
115,112,0,1,32,2049,9198,10,9216,9234,146,116,97,98,0,1,9,2049,9198,10,
9227,9248,146,115,58,112,117,116,0,1,9198,2049,3870,10,9239,9262,146,110,58,112,
117,116,0,2049,6040,2049,9248,10,9253,9276,146,114,101,115,101,116,0,2049,1556,25,
771,1,9276,7,10,9267,9298,146,100,117,109,112,45,115,116,97,99,107,0,2049,
1556,25,134284547,9298,134283782,9262,2049,9222,10,9284,9316,146,70,82,69,69,0,2049,3517,1,
1025,18,2049,1874,18,10,9308,9333,146,101,111,108,63,0,1793,9339,1,13,11,10,
1,9335,1793,9347,1,10,11,10,1,9343,1793,9355,1,32,11,10,1,9351,2049,2159,
22,22,10,9325,9372,146,118,97,108,105,100,63,0,2,2049,81,2049,2543,10,9362,
9390,146,99,104,101,99,107,45,98,115,0,2,1793,9397,1,8,11,10,1,9393,
1793,9405,1,127,11,10,1,9401,2049,2122,22,1793,9418,2049,3360,2049,3360,771,10,1,
9412,9,10,9378,9431,146,99,58,103,101,116,0,7425,1,10,9422,9443,146,115,58,
103,101,116,0,1793,9470,1,1025,2049,3428,1793,9461,2049,9431,2,2049,3336,2049,9390,2049,
9333,10,1,9451,2049,2250,2049,3302,2049,3724,10,1,9445,2049,3452,10,9434,9485,146,108,
105,115,116,101,110,0,2049,9443,2049,9372,1,369,1,11,2049,64,1,9485,7,10,
0 };

View file

@ -23,12 +23,12 @@ void float_guard() {
#ifndef NOCHECKS
if (fsp < 0 || fsp > 255) {
printf("\nERROR (nga/float_guard): Float Stack Limits Exceeded!\n");
printf("At %lld, fsp = %lld\n", (long long)ip, (long long)fsp);
printf("At %lld, fsp = %lld\n", (long long)cpu.ip, (long long)fsp);
exit(1);
}
if (afsp < 0 || afsp > 255) {
printf("\nERROR (nga/float_guard): Alternate Float Stack Limits Exceeded!\n");
printf("At %lld, afsp = %lld\n", (long long)ip, (long long)afsp);
printf("At %lld, afsp = %lld\n", (long long)cpu.ip, (long long)afsp);
exit(1);
}
#endif

View file

@ -43,7 +43,7 @@ void unix_open_pipe() {
void unix_close_pipe() {
pclose(OpenFileHandles[TOS]);
OpenFileHandles[TOS] = 0;
sp--;
stack_pop();
}
void unix_system() {

View file

@ -38,33 +38,33 @@ CELL load_image(char *imageFile) {
}
void prepare_vm() {
ip = sp = rp = 0;
for (ip = 0; ip < IMAGE_SIZE; ip++)
memory[ip] = 0; /* NO - nop instruction */
for (ip = 0; ip < STACK_DEPTH; ip++)
data[ip] = 0;
for (ip = 0; ip < ADDRESSES; ip++)
address[ip] = 0;
cpu.ip = cpu.sp = cpu.rp = 0;
for (cpu.ip = 0; cpu.ip < IMAGE_SIZE; cpu.ip++)
memory[cpu.ip] = 0; /* NO - nop instruction */
for (cpu.ip = 0; cpu.ip < STACK_DEPTH; cpu.ip++)
cpu.data[cpu.ip] = 0;
for (cpu.ip = 0; cpu.ip < ADDRESSES; cpu.ip++)
cpu.address[cpu.ip] = 0;
}
void inst_no() {
}
void inst_li() {
sp++;
ip++;
TOS = memory[ip];
cpu.sp++;
cpu.ip++;
TOS = memory[cpu.ip];
}
void inst_du() {
sp++;
data[sp] = NOS;
cpu.sp++;
cpu.data[cpu.sp] = NOS;
}
void inst_dr() {
data[sp] = 0;
if (--sp < 0)
ip = IMAGE_SIZE;
cpu.data[cpu.sp] = 0;
if (--cpu.sp < 0)
cpu.ip = IMAGE_SIZE;
}
void inst_sw() {
@ -75,26 +75,26 @@ void inst_sw() {
}
void inst_pu() {
rp++;
cpu.rp++;
TORS = TOS;
inst_dr();
}
void inst_po() {
sp++;
cpu.sp++;
TOS = TORS;
rp--;
cpu.rp--;
}
void inst_ju() {
ip = TOS - 1;
cpu.ip = TOS - 1;
inst_dr();
}
void inst_ca() {
rp++;
TORS = ip;
ip = TOS - 1;
cpu.rp++;
TORS = cpu.ip;
cpu.ip = TOS - 1;
inst_dr();
}
@ -103,15 +103,15 @@ void inst_cc() {
a = TOS; inst_dr(); /* Target */
b = TOS; inst_dr(); /* Flag */
if (b != 0) {
rp++;
TORS = ip;
ip = a - 1;
cpu.rp++;
TORS = cpu.ip;
cpu.ip = a - 1;
}
}
void inst_re() {
ip = TORS;
rp--;
cpu.ip = TORS;
cpu.rp--;
}
void inst_eq() {
@ -137,14 +137,14 @@ void inst_gt() {
void inst_fe() {
#ifndef NOCHECKS
if (TOS >= IMAGE_SIZE || TOS < -5) {
ip = IMAGE_SIZE;
cpu.ip = IMAGE_SIZE;
printf("\nERROR (nga/inst_fe): Fetch beyond valid memory range\n");
exit(1);
} else {
#endif
switch (TOS) {
case -1: TOS = sp - 1; break;
case -2: TOS = rp; break;
case -1: TOS = cpu.sp - 1; break;
case -2: TOS = cpu.rp; break;
case -3: TOS = IMAGE_SIZE; break;
case -4: TOS = CELL_MIN; break;
case -5: TOS = CELL_MAX; break;
@ -164,7 +164,7 @@ void inst_st() {
inst_dr();
#ifndef NOCHECKS
} else {
ip = IMAGE_SIZE;
cpu.ip = IMAGE_SIZE;
printf("\nERROR (nga/inst_st): Store beyond valid memory range\n");
exit(1);
}
@ -232,17 +232,17 @@ void inst_sh() {
void inst_zr() {
if (TOS == 0) {
inst_dr();
ip = TORS;
rp--;
cpu.ip = TORS;
cpu.rp--;
}
}
void inst_ha() {
ip = IMAGE_SIZE;
cpu.ip = IMAGE_SIZE;
}
void inst_ie() {
sp++;
cpu.sp++;
TOS = NUM_DEVICES;
}

View file

@ -46,15 +46,17 @@
Image, Stack, and VM variables
---------------------------------------------------------------------*/
CELL sp, rp, ip; /* Stack & instruction pointers */
CELL data[STACK_DEPTH]; /* The data stack */
CELL address[ADDRESSES]; /* The address stack */
CELL memory[IMAGE_SIZE + 1]; /* The memory for the image */
#define TOS data[sp] /* Shortcut for top item on stack */
#define NOS data[sp-1] /* Shortcut for second item on stack */
#define TORS address[rp] /* Shortcut for top item on address stack */
#define TOS cpu.data[cpu.sp] /* Shortcut for top item on stack */
#define NOS cpu.data[cpu.sp-1] /* Shortcut for second item on stack */
#define TORS cpu.address[cpu.rp] /* Shortcut for top item on address stack */
struct NgaCore {
CELL sp, rp, ip; /* Stack & instruction pointers */
CELL data[STACK_DEPTH]; /* The data stack */
CELL address[ADDRESSES]; /* The address stack */
} cpu;
/*---------------------------------------------------------------------
Markers for code & test blocks
@ -220,9 +222,9 @@ void scripting_abort() {
}
void carry_out_abort() {
ip = IMAGE_SIZE + 1;
rp = 0;
sp = 0;
cpu.ip = IMAGE_SIZE + 1;
cpu.rp = 0;
cpu.sp = 0;
fsp = 0;
afsp = 0;
@ -271,7 +273,7 @@ void io_scripting_handler() {
void invalid_opcode(CELL opcode) {
CELL a, i;
printf("\nERROR (nga/execute): Invalid instruction!\n");
printf("At %lld, opcode %lld\n", (long long)ip, (long long)opcode);
printf("At %lld, opcode %lld\n", (long long)cpu.ip, (long long)opcode);
printf("Instructions: ");
a = opcode;
for (i = 0; i < 4; i++) {
@ -286,40 +288,40 @@ void execute(CELL cell, int silent) {
CELL token;
CELL opcode;
silence_input = silent;
if (rp == 0)
rp = 1;
ip = cell;
if (cpu.rp == 0)
cpu.rp = 1;
cpu.ip = cell;
token = TIB;
while (ip < IMAGE_SIZE) {
while (cpu.ip < IMAGE_SIZE) {
if (perform_abort == 0) {
if (ip == NotFound) {
if (cpu.ip == NotFound) {
printf("\nERROR: Word Not Found: ");
printf("`%s`\n\n", string_extract(token));
}
if (ip == interpret) {
if (cpu.ip == interpret) {
token = TOS;
}
opcode = memory[ip];
opcode = memory[cpu.ip];
if (validate_opcode_bundle(opcode) != 0) {
process_opcode_bundle(opcode);
} else {
invalid_opcode(opcode);
}
#ifndef NOCHECKS
if (sp < 0 || sp > STACK_DEPTH) {
if (cpu.sp < 0 || cpu.sp > STACK_DEPTH) {
printf("\nERROR (nga/execute): Stack Limits Exceeded!\n");
printf("At %lld, opcode %lld. sp = %lld\n", (long long)ip, (long long)opcode, (long long)sp);
printf("At %lld, opcode %lld. sp = %lld\n", (long long)cpu.ip, (long long)opcode, (long long)cpu.sp);
exit(1);
}
if (rp < 0 || rp > ADDRESSES) {
if (cpu.rp < 0 || cpu.rp > ADDRESSES) {
printf("\nERROR (nga/execute): Address Stack Limits Exceeded!\n");
printf("At %lld, opcode %lld. rp = %lld\n", (long long)ip, (long long)opcode, (long long)rp);
printf("At %lld, opcode %lld. rp = %lld\n", (long long)cpu.ip, (long long)opcode, (long long)cpu.rp);
exit(1);
}
#endif
ip++;
if (rp == 0)
ip = IMAGE_SIZE;
cpu.ip++;
if (cpu.rp == 0)
cpu.ip = IMAGE_SIZE;
} else {
carry_out_abort();
}
@ -381,13 +383,13 @@ void read_token(FILE *file, char *token_buffer, int echo) {
void dump_stack() {
CELL i;
if (sp == 0) return;
if (cpu.sp == 0) return;
printf("\nStack: ");
for (i = 1; i <= sp; i++) {
if (i == sp)
printf("[ TOS: %lld ]", (long long)data[i]);
for (i = 1; i <= cpu.sp; i++) {
if (i == cpu.sp)
printf("[ TOS: %lld ]", (long long)cpu.data[i]);
else
printf("%lld ", (long long)data[i]);
printf("%lld ", (long long)cpu.data[i]);
}
printf("\n");
}
@ -470,11 +472,11 @@ void include_file(char *fname, int run_tests) {
if (fp == NULL)
return;
arp = rp;
aip = ip;
for(rp = 0; rp <= arp; rp++)
ReturnStack[rp] = address[rp];
rp = 0;
arp = cpu.rp;
aip = cpu.ip;
for(cpu.rp = 0; cpu.rp <= arp; cpu.rp++)
ReturnStack[cpu.rp] = cpu.address[cpu.rp];
cpu.rp = 0;
current_source++;
bsd_strlcpy(scripting_sources[current_source], fname, 8192);
@ -519,10 +521,10 @@ void include_file(char *fname, int run_tests) {
if (perform_abort == -1) {
carry_out_abort();
}
for(rp = 0; rp <= arp; rp++)
address[rp] = ReturnStack[rp];
rp = arp;
ip = aip;
for(cpu.rp = 0; cpu.rp <= arp; cpu.rp++)
cpu.address[cpu.rp] = ReturnStack[cpu.rp];
cpu.rp = arp;
cpu.ip = aip;
}
@ -613,7 +615,7 @@ int main(int argc, char **argv) {
if (argc >= 2 && argv[1][0] != '-') {
update_rx();
include_file(argv[1], 0); /* If no flags were passed, */
if (sp >= 1) dump_stack(); /* load the file specified, */
if (cpu.sp >= 1) dump_stack(); /* load the file specified, */
exit(0); /* and exit */
}
@ -708,25 +710,25 @@ int main(int argc, char **argv) {
---------------------------------------------------------------------*/
CELL stack_pop() {
sp--;
cpu.sp--;
#ifndef NOCHECKS
if (sp < 0) {
if (cpu.sp < 0) {
printf("\nERROR (nga/stack_pop): Data stack underflow.\n");
exit(1);
}
#endif
return data[sp + 1];
return cpu.data[cpu.sp + 1];
}
void stack_push(CELL value) {
sp++;
cpu.sp++;
#ifndef NOCHECKS
if (sp >= STACK_DEPTH) {
if (cpu.sp >= STACK_DEPTH) {
printf("\nERROR (nga/stack_push): Data stack overflow.\n");
exit(1);
}
#endif
data[sp] = value;
cpu.data[cpu.sp] = value;
}