xref: /sqlite-3.40.0/test/sessionfuzz.c (revision 38f0ccc0)
1f94c1902Sdrh /*
2f94c1902Sdrh ** 2018-03-01
3f94c1902Sdrh **
4f94c1902Sdrh ** The author disclaims copyright to this source code.  In place of
5f94c1902Sdrh ** a legal notice, here is a blessing:
6f94c1902Sdrh **
7f94c1902Sdrh **    May you do good and not evil.
8f94c1902Sdrh **    May you find forgiveness for yourself and forgive others.
9f94c1902Sdrh **    May you share freely, never taking more than you give.
10f94c1902Sdrh **
11f94c1902Sdrh *************************************************************************
12f94c1902Sdrh **
13f94c1902Sdrh ** This file implements a program used for fuzz-testing the session
14f94c1902Sdrh ** module.
15f94c1902Sdrh **
16f94c1902Sdrh ** Usage:
17f94c1902Sdrh **
18f94c1902Sdrh **      sessionfuzz setup         -- Generate starter test cases
19f94c1902Sdrh **      sessionfuzz run FILE ...  -- Run a test fuzz on FILE
20f94c1902Sdrh **      sesssiofuzz run SQLAR ... -- Run all test cases in the SQL Archive
21f94c1902Sdrh **
22f94c1902Sdrh ** Compiling:
23f94c1902Sdrh **
24f94c1902Sdrh **    (1) Have a version of SQLite that supports SQLITE_ENABLE_MEMDB
25f94c1902Sdrh **        in the local directory.
26f94c1902Sdrh **    (2) Run:
27f94c1902Sdrh **
28f94c1902Sdrh **          gcc -Wall -O3 -o sessionfuzz sessionfuzz.c -lz
29f94c1902Sdrh **
30f94c1902Sdrh ** Use with AFL (American Fuzzy Lop - http://lcamtuf.coredump.cx/afl/)
31f94c1902Sdrh **
32f94c1902Sdrh **    (1) ./afl-gcc -O3 -o sessionfuzz sessionfuzz.c -lz
33f94c1902Sdrh **    (2) mkdir session-init session-run session-cases
34f94c1902Sdrh **    (3) cd session-init; ../sessionfuzz setup; cd ..
35f94c1902Sdrh **    (4) ./afl -i session-init -o session-run -- ./sessionfuzz run @@
36f94c1902Sdrh **    ... let the previous step run for a while.  Weeks, maybe.
37f94c1902Sdrh **    (5) ./afl-cmin -i session-run -o session-cases
38f94c1902Sdrh **
39f94c1902Sdrh ** The afl-cmin command on step (5) writes a minimal set of test cases
40f94c1902Sdrh ** for coverage into the session-cases directory.  Gather the cases written
41f94c1902Sdrh ** there into an SQL Archive using a command like this:
42f94c1902Sdrh **
43f94c1902Sdrh **     sqlite3 session-cases.db -Ac session-cases
44f94c1902Sdrh **
45f94c1902Sdrh ** Then repeat the test using:
46f94c1902Sdrh **
47f94c1902Sdrh **     ./sessionfuzz run session-cases.db
48f94c1902Sdrh */
49f94c1902Sdrh 
50f94c1902Sdrh /*
51f94c1902Sdrh ** We will import the entire SQLite source file to make compiling easier
52f94c1902Sdrh */
5398cb7a48Smistachkin #ifdef SQLITE_DEBUG
5498cb7a48Smistachkin #undef SQLITE_DEBUG
5598cb7a48Smistachkin #endif
5698cb7a48Smistachkin 
5798cb7a48Smistachkin #ifdef SQLITE_THREADSAFE
5898cb7a48Smistachkin #undef SQLITE_THREADSAFE
5998cb7a48Smistachkin #endif
6098cb7a48Smistachkin 
61f94c1902Sdrh #define SQLITE_DEBUG 1
62f94c1902Sdrh #define SQLITE_THREADSAFE 0
63f94c1902Sdrh #define SQLITE_OMIT_LOAD_EXTENSION 0
64f94c1902Sdrh #define SQLITE_ENABLE_SESSION 1
65f94c1902Sdrh #define SQLITE_ENABLE_PREUPDATE_HOOK 1
66f94c1902Sdrh #define SQLITE_ENABLE_DESERIALIZE 1
67f94c1902Sdrh #include "sqlite3.c"
68f94c1902Sdrh 
69f94c1902Sdrh /* Create a test database.  This will be an in-memory database */
70f94c1902Sdrh static const char zInitSql[] =
71f94c1902Sdrh   "CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c,d);\n"
72f94c1902Sdrh   "CREATE TABLE t2(e TEXT PRIMARY KEY NOT NULL,f,g);\n"
73f94c1902Sdrh   "CREATE TABLE t3(w REAL PRIMARY KEY NOT NULL,x,y);\n"
74f94c1902Sdrh   "CREATE TABLE t4(z PRIMARY KEY) WITHOUT ROWID;\n"
75f94c1902Sdrh ;
76f94c1902Sdrh 
77f94c1902Sdrh /* Code to populate the database */
78f94c1902Sdrh static const char zFillSql[] =
79f94c1902Sdrh   "INSERT INTO t1(a,b,c,d) VALUES\n"
80f94c1902Sdrh   "  (1,2,3,4),\n"
81f94c1902Sdrh   "  (2,3.5,'four',x'556677'),\n"
82f94c1902Sdrh   "  (3,null,'xyz',15),\n"
83f94c1902Sdrh   "  (4,'bubba',0x80000000,0.0);\n"
84f94c1902Sdrh   "INSERT INTO t1 SELECT a+4,c,d,b FROM t1;\n"
85f94c1902Sdrh   "INSERT INTO t1 SELECT a+8,d,b,c FROM t1;\n"
86f94c1902Sdrh   "INSERT INTO t1 SELECT a+16,d,c,b FROM t1;\n"
87f94c1902Sdrh   "INSERT INTO t1 SELECT a+32,b,d,c FROM t1;\n"
88f94c1902Sdrh   "INSERT INTO t2 SELECT printf('x%dy',a),b,c FROM t1;\n"
89f94c1902Sdrh   "INSERT INTO t3 SELECT a*1.1,b,c FROM t1;\n"
90f94c1902Sdrh   "INSERT INTO t4 SELECT a||','||quote(b) FROM t1;\n"
91f94c1902Sdrh ;
92f94c1902Sdrh 
93f94c1902Sdrh /* A database file created by running the two scripts above */
94f94c1902Sdrh static const unsigned char aDbBytes[] = {
95f94c1902Sdrh   83, 81, 76,105,116,101, 32,102,111,114,109, 97,116, 32, 51,  0,  2,  0,  1,
96f94c1902Sdrh    1,  0, 64, 32, 32,  0,  0,  0, 13,  0,  0,  0, 22,  0,  0,  0,  0,  0,  0,
97f94c1902Sdrh    0,  0,  0,  0,  0,  5,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,
98f94c1902Sdrh    0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
99f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
100f94c1902Sdrh   13,  0, 46, 32,152, 13,  1,186,  0,  6,  0,176,  0,  1,194,  1, 84,  1,150,
101f94c1902Sdrh    0,238,  1, 48,  0,176,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
102f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
103f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
104f94c1902Sdrh    0,  0,  0,  0,  0, 60,  6,  6, 23, 17, 17,  1,101,116, 97, 98,108,101,116,
105f94c1902Sdrh   52,116, 52,  7, 67, 82, 69, 65, 84, 69, 32, 84, 65, 66, 76, 69, 32,116, 52,
106f94c1902Sdrh   40,122, 32, 80, 82, 73, 77, 65, 82, 89, 32, 75, 69, 89, 41, 32, 87, 73, 84,
107f94c1902Sdrh   72, 79, 85, 84, 32, 82, 79, 87, 73, 68, 64,  4,  6, 23, 17, 17,  1,109,116,
108f94c1902Sdrh   97, 98,108,101,116, 51,116, 51,  5, 67, 82, 69, 65, 84, 69, 32, 84, 65, 66,
109f94c1902Sdrh   76, 69, 32,116, 51, 40,119, 32, 82, 69, 65, 76, 32, 80, 82, 73, 77, 65, 82,
110f94c1902Sdrh   89, 32, 75, 69, 89, 32, 78, 79, 84, 32, 78, 85, 76, 76, 44,120, 44,121, 41,
111f94c1902Sdrh   34,  5,  5, 23, 55, 17,  1,105,110,100,101,120,115,113,108,105,116,101, 95,
112f94c1902Sdrh   97,117,116,111,105,110,100,101,120, 95,116, 51, 95, 49,116, 51,  6, 64,  2,
113f94c1902Sdrh    6, 23, 17, 17,  1,109,116, 97, 98,108,101,116, 50,116, 50,  3, 67, 82, 69,
114f94c1902Sdrh   65, 84, 69, 32, 84, 65, 66, 76, 69, 32,116, 50, 40,101, 32, 84, 69, 88, 84,
115f94c1902Sdrh   32, 80, 82, 73, 77, 65, 82, 89, 32, 75, 69, 89, 32, 78, 79, 84, 32, 78, 85,
116f94c1902Sdrh   76, 76, 44,102, 44,103, 41, 34,  3,  5, 23, 55, 17,  1,105,110,100,101,120,
117f94c1902Sdrh  115,113,108,105,116,101, 95, 97,117,116,111,105,110,100,101,120, 95,116, 50,
118f94c1902Sdrh   95, 49,116, 50,  4,  0,  0,  0,  8,  0,  0,  0,  0, 60,  1,  6, 23, 17, 17,
119f94c1902Sdrh    1,101,116, 97, 98,108,101,116, 49,116, 49,  2, 67, 82, 69, 65, 84, 69, 32,
120f94c1902Sdrh   84, 65, 66, 76, 69, 32,116, 49, 40, 97, 32, 73, 78, 84, 69, 71, 69, 82, 32,
121f94c1902Sdrh   80, 82, 73, 77, 65, 82, 89, 32, 75, 69, 89, 44, 98, 44, 99, 44,100, 41,  5,
122f94c1902Sdrh    0,  0,  0,  2,  1,246,  0,  0,  0,  0, 10,  1,251,  1,246,  1,177,  1,155,
123f94c1902Sdrh    1,145,  1,119,  1,109,  1, 87,  1, 76,  1, 50,  1, 40,  1, 18,  1,  7,  0,
124f94c1902Sdrh  237,  0,227,  0,205,  0,195,  0,169,  0,159,  0,137,  0,126,  0,100,  0, 90,
125f94c1902Sdrh    0, 68,  0,  0,  0,  0,  0,  0,  0,  0, 20, 26,  5,  0, 21,  7, 18,102,111,
126f94c1902Sdrh  117,114, 64, 12,  0,  0,  0,  0,  0,  0, 85,102,119,  8, 25,  5,  0,  1,  1,
127f94c1902Sdrh    1,  3,  2,  4, 24, 24,  5,  0, 23,  7,  5, 98,117, 98, 98, 97,  0,  0,  0,
128f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  9, 23,  5,  0,  0,  1, 19, 15,
129f94c1902Sdrh  120,121,122, 20, 22,  5,  0,  7, 18, 21, 64, 12,  0,  0,  0,  0,  0,  0, 85,
130f94c1902Sdrh  102,119,102,111,117,114,  8, 21,  5,  0,  1,  1,  1,  2,  4,  3, 24, 20,  5,
131f94c1902Sdrh    0,  7,  5, 23,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0, 98,
132f94c1902Sdrh  117, 98, 98, 97,  8, 19,  4,  0,  1, 19, 15,120,121,122, 20, 18,  5,  0, 18,
133f94c1902Sdrh   21,  7, 85,102,119,102,111,117,114, 64, 12,  0,  0,  0,  0,  0,  0,  8, 17,
134f94c1902Sdrh    5,  0,  1,  1,  1,  4,  3,  2, 24, 16,  5,  0, 23,  5,  7, 98,117, 98, 98,
135f94c1902Sdrh   97,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9, 15,  5,  0,
136f94c1902Sdrh    0, 19,  1,120,121,122, 15, 20, 14,  5,  0,  7, 21, 18, 64, 12,  0,  0,  0,
137f94c1902Sdrh    0,  0,  0,102,111,117,114, 85,102,119,  8, 13,  5,  0,  1,  1,  1,  2,  3,
138f94c1902Sdrh    4, 24, 12,  5,  0,  7, 23,  5,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98,
139f94c1902Sdrh   98, 97,  0,  0,128,  0,  0,  0,  9, 11,  5,  0,  1,  0, 19, 15,120,121,122,
140f94c1902Sdrh   20, 10,  5,  0, 18,  7, 21, 85,102,119, 64, 12,  0,  0,  0,  0,  0,  0,102,
141f94c1902Sdrh  111,117,114,  8,  9,  5,  0,  1,  1,  1,  4,  2,  3, 24,  8,  5,  0,  5,  7,
142f94c1902Sdrh   23,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98,
143f94c1902Sdrh   97,  8,  7,  4,  0, 19,  1,120,121,122, 15, 20,  6,  5,  0, 21, 18,  7,102,
144f94c1902Sdrh  111,117,114, 85,102,119, 64, 12,  0,  0,  0,  0,  0,  0,  8,  5,  5,  0,  1,
145f94c1902Sdrh    1,  1,  3,  4,  2, 24,  4,  5,  0, 23,  5,  7, 98,117, 98, 98, 97,  0,  0,
146f94c1902Sdrh  128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  3,  5,  0,  0, 19,  1,
147f94c1902Sdrh  120,121,122, 15, 20,  2,  5,  0,  7, 21, 18, 64, 12,  0,  0,  0,  0,  0,  0,
148f94c1902Sdrh  102,111,117,114, 85,102,119,  0,  0,  0,  9, 52,  0,  0,  0,  8, 26,  5,  0,
149f94c1902Sdrh    0,  0,  2,  1,246,  0,  0,  0,  0, 13,  1,251,  1,246,  1,181,  1,165,  1,
150f94c1902Sdrh  152,  1,129,  1,118,  1, 97,  1, 87,  1, 64,  1, 52,  1, 30,  1, 17,  0,252,
151f94c1902Sdrh    0,240,  0,223,  0,209,  0,185,  0,173,  0,152,  0,141,  0,118,  0,106,  0,
152f94c1902Sdrh   84,  0, 72,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10, 27,  3, 21, 19,120,
153f94c1902Sdrh   50, 55,121,120,121,122, 20, 26,  4, 21, 21,  7,120, 50, 54,121,102,111,117,
154f94c1902Sdrh  114, 64, 12,  0,  0,  0,  0,  0,  0, 10, 25,  4, 21,  1,  1,120, 50, 53,121,
155f94c1902Sdrh    3,  2, 21, 24,  4, 21, 23,  7,120, 50, 52,121, 98,117, 98, 98, 97,  0,  0,
156f94c1902Sdrh    0,  0,  0,  0,  0,  0,  9, 23,  4, 21,  0,  1,120, 50, 51,121, 15, 19, 22,
157f94c1902Sdrh    4, 21,  7, 18,120, 50, 50,121, 64, 12,  0,  0,  0,  0,  0,  0, 85,102,119,
158f94c1902Sdrh   10, 21,  4, 21,  1,  1,120, 50, 49,121,  2,  4, 22, 20,  4, 21,  7,  5,120,
159f94c1902Sdrh   50, 48,121,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0, 12, 19,
160f94c1902Sdrh    4, 21,  1, 19,120, 49, 57,121, 15,120,121,122, 15, 18,  4, 21, 18, 21,120,
161f94c1902Sdrh   49, 56,121, 85,102,119,102,111,117,114, 10, 17,  4, 21,  1,  1,120, 49, 55,
162f94c1902Sdrh  121,  4,  3, 19, 16,  4, 21, 23,  5,120, 49, 54,121, 98,117, 98, 98, 97,  0,
163f94c1902Sdrh    0,128,  0,  0,  0, 11, 15,  4, 21,  0, 19,120, 49, 53,121,120,121,122, 20,
164f94c1902Sdrh   14,  4, 21,  7, 21,120, 49, 52,121, 64, 12,  0,  0,  0,  0,  0,  0,102,111,
165f94c1902Sdrh  117,114, 10, 13,  4, 21,  1,  1,120, 49, 51,121,  2,  3, 21, 12,  4, 21,  7,
166f94c1902Sdrh   23,120, 49, 50,121,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97,  8,
167f94c1902Sdrh   11,  3, 21,  1,120, 49, 49,121, 15, 19, 10,  4, 21, 18,  7,120, 49, 48,121,
168f94c1902Sdrh   85,102,119, 64, 12,  0,  0,  0,  0,  0,  0,  9,  9,  4, 19,  1,  1,120, 57,
169f94c1902Sdrh  121,  4,  2, 21,  8,  4, 19,  5,  7,120, 56,121,  0,  0,128,  0,  0,  0,  0,
170f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0, 11,  7,  4, 19, 19,  1,120, 55,121,120,121,122,
171f94c1902Sdrh   15, 14,  6,  4, 19, 21, 18,120, 54,121,102,111,117,114, 85,102,119,  9,  5,
172f94c1902Sdrh    4, 19,  1,  1,120, 53,121,  3,  4, 18,  4,  4, 19, 23,  5,120, 52,121, 98,
173f94c1902Sdrh  117, 98, 98, 97,  0,  0,128,  0,  0,  0, 10,  3,  4, 19,  0, 19,120, 51,121,
174f94c1902Sdrh  120,121,122, 19,  2,  4, 19,  7, 21,120, 50,121, 64, 12,  0,  0,  0,  0,  0,
175f94c1902Sdrh    0,102,111,117,114,  9,  0,  0,  0, 12, 53,  0,  0,  0, 11, 27,  2,  0,  0,
176f94c1902Sdrh    0,  1,  1,243,  0,  0,  0,  0, 15,  1,243,  1,220,  1,211,  1,202,  1,193,
177f94c1902Sdrh    1,184,  1,175,  1,166,  1,159,  1,150,  1,141,  1,132,  1,123,  1,114,  1,
178f94c1902Sdrh  105,  1, 96,  1, 87,  1, 78,  1, 69,  1, 61,  1, 52,  1, 43,  1, 34,  1, 25,
179f94c1902Sdrh    1, 16,  1,  7,  0,254,  0,245,  0,236,  0,227,  0,219,  0,210,  0,201,  0,
180f94c1902Sdrh  192,  0,183,  0,174,  0,165,  0,156,  0,147,  0,138,  0,129,  0,121,  0,112,
181f94c1902Sdrh    0,103,  0,  0,  0,  8,  3, 21,  1,120, 53, 49,121, 51,  8,  3, 21,  1,120,
182f94c1902Sdrh   53, 48,121, 50,  7,  3, 19,  1,120, 52,121,  4,  8,  3, 21,  1,120, 52, 57,
183f94c1902Sdrh  121, 49,  8,  3, 21,  1,120, 52, 56,121, 48,  8,  3, 21,  1,120, 52, 55,121,
184f94c1902Sdrh   47,  8,  3, 21,  1,120, 52, 54,121, 46,  8,  3, 21,  1,120, 52, 53,121, 45,
185f94c1902Sdrh    8,  3, 21,  1,120, 52, 52,121, 44,  8,  3, 21,  1,120, 52, 51,121, 43,  8,
186f94c1902Sdrh    3, 21,  1,120, 52, 50,121, 42,  8,  3, 21,  1,120, 52, 49,121, 41,  8,  3,
187f94c1902Sdrh   21,  1,120, 52, 48,121, 40,  7,  3, 19,  1,120, 51,121,  3,  8,  3, 21,  1,
188f94c1902Sdrh  120, 51, 57,121, 39,  8,  3, 21,  1,120, 51, 56,121, 38,  8,  3, 21,  1,120,
189f94c1902Sdrh   51, 55,121, 37,  8,  3, 21,  1,120, 51, 54,121, 36,  8,  3, 21,  1,120, 51,
190f94c1902Sdrh   53,121, 35,  8,  3, 21,  1,120, 51, 52,121, 34,  8,  3, 21,  1,120, 51, 51,
191f94c1902Sdrh  121, 33,  8,  3, 21,  1,120, 51, 50,121, 32,  8,  3, 21,  1,120, 51, 49,121,
192f94c1902Sdrh   31,  8,  3, 21,  1,120, 51, 48,121, 30,  7,  3, 19,  1,120, 50,121,  2,  8,
193f94c1902Sdrh    3, 21,  1,120, 50, 57,121, 29,  8,  3, 21,  1,120, 50, 56,121, 28,  8,  3,
194f94c1902Sdrh   21,  1,120, 50, 55,121, 27,  8,  3, 21,  1,120, 50, 54,121, 26,  8,  3, 21,
195f94c1902Sdrh    1,120, 50, 53,121, 25,  8,  3, 21,  1,120, 50, 52,121, 24,  8,  3, 21,  1,
196f94c1902Sdrh  120, 50, 51,121, 23,  8,  3, 21,  1,120, 50, 50,121, 22,  8,  3, 21,  1,120,
197f94c1902Sdrh   50, 49,121, 21,  8,  3, 21,  1,120, 50, 48,121, 20,  6,  3, 19,  9,120, 49,
198f94c1902Sdrh  121,  8,  3, 21,  1,120, 49, 57,121, 19,  8,  3, 21,  1,120, 49, 56,121, 18,
199f94c1902Sdrh    8,  3, 21,  1,120, 49, 55,121, 17,  8,  3, 21,  1,120, 49, 54,121, 16,  8,
200f94c1902Sdrh    3, 21,  1,120, 49, 53,121, 15,  8,  3, 21,  1,120, 49, 52,121, 14,  8,  3,
201f94c1902Sdrh   21,  1,120, 49, 51,121, 13,  8,  3, 21,  1,120, 49, 50,121, 12,  8,  3, 21,
202f94c1902Sdrh    1,120,  0,  0,  0, 14,  8,  3, 21,  1,120, 53, 49,121, 51,  5,  0,  0,  0,
203f94c1902Sdrh    2,  1,246,  0,  0,  0,  0, 18,  1,251,  1,246,  1,156,  1,135,  1,117,  1,
204f94c1902Sdrh   89,  1, 73,  1, 55,  1, 41,  1, 14,  0,254,  0,228,  0,211,  0,186,  0,170,
205f94c1902Sdrh    0,149,  0,131,  0,110,  0, 94,  0, 69,  0, 54, 13, 23,  4,  7,  0,  1, 64,
206f94c1902Sdrh   57, 76,204,204,204,204,205, 15, 23, 22,  4,  7,  7, 18, 64, 56, 51, 51, 51,
207f94c1902Sdrh   51, 51, 52, 64, 12,  0,  0,  0,  0,  0,  0, 85,102,119, 14, 21,  4,  7,  1,
208f94c1902Sdrh    1, 64, 55, 25,153,153,153,153,154,  2,  4, 19, 20,  4,  1,  7,  5, 22,  0,
209f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0, 16, 19,  4,  7,  1, 19,
210f94c1902Sdrh   64, 52,230,102,102,102,102,103, 15,120,121,122, 19, 18,  4,  7, 18, 21, 64,
211f94c1902Sdrh   51,204,204,204,204,204,205, 85,102,119,102,111,117,114, 14, 17,  4,  7,  1,
212f94c1902Sdrh    1, 64, 50,179, 51, 51, 51, 51, 52,  4,  3, 23, 16,  4,  7, 23,  5, 64, 49,
213f94c1902Sdrh  153,153,153,153,153,154, 98,117, 98, 98, 97,  0,  0,128,  0,  0,  0, 15, 15,
214f94c1902Sdrh    4,  7,  0, 19, 64, 48,128,  0,  0,  0,  0,  0,120,121,122, 24, 14,  4,  7,
215f94c1902Sdrh    7, 21, 64, 46,204,204,204,204,204,206, 64, 12,  0,  0,  0,  0,  0,  0,102,
216f94c1902Sdrh  111,117,114, 14, 13,  4,  7,  1,  1, 64, 44,153,153,153,153,153,154,  2,  3,
217f94c1902Sdrh   25, 12,  4,  7,  7, 23, 64, 42,102,102,102,102,102,103,  0,  0,  0,  0,  0,
218f94c1902Sdrh    0,  0,  0, 98,117, 98, 98, 97, 12, 11,  3,  7,  1, 64, 40, 51, 51, 51, 51,
219f94c1902Sdrh   51, 52, 15, 16, 10,  4,  1, 18,  7, 11, 85,102,119, 64, 12,  0,  0,  0,  0,
220f94c1902Sdrh    0,  0, 14,  9,  4,  7,  1,  1, 64, 35,204,204,204,204,204,205,  4,  2, 26,
221f94c1902Sdrh    8,  4,  7,  5,  7, 64, 33,153,153,153,153,153,154,  0,  0,128,  0,  0,  0,
222f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0, 16,  7,  4,  7, 19,  1, 64, 30,204,204,204,
223f94c1902Sdrh  204,204,206,120,121,122, 15, 19,  6,  4,  7, 21, 18, 64, 26,102,102,102,102,
224f94c1902Sdrh  102,103,102,111,117,114, 85,102,119, 14,  5,  4,  7,  1,  1, 64, 22,  0,  0,
225f94c1902Sdrh    0,  0,  0,  0,  3,  4, 23,  4,  4,  7, 23,  5, 64, 17,153,153,153,153,153,
226f94c1902Sdrh  154, 98,117, 98, 98, 97,  0,  0,128,  0,  0,  0, 15,  3,  4,  7,  0, 19, 64,
227f94c1902Sdrh   10,102,102,102,102,102,103,120,121,122, 24,  2,  4,  7,  7, 21, 64,  1,153,
228f94c1902Sdrh  153,153,153,153,154, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114, 14,  1,
229f94c1902Sdrh    4,  7,  1,  1,  0,  0,  0, 17, 45,  0,  0,  0, 16, 23,  2,  0,  0,  0,  1,
230f94c1902Sdrh    1,239,  0,  0,  0,  0, 20,  1,239,  1,205,  1,192,  1,179,  1,166,  1,153,
231f94c1902Sdrh    1,140,  1,134,  1,121,  1,108,  1, 95,  1, 82,  1, 69,  1, 56,  1, 43,  1,
232f94c1902Sdrh   30,  1, 17,  1, 11,  0,254,  0,241,  0,228,  0,215,  0,202,  0,189,  0,176,
233f94c1902Sdrh    0,163,  0,150,  0,144,  0,131,  0,118,  0,105,  0, 92,  0, 79,  0, 12,  3,
234f94c1902Sdrh    7,  1, 64, 67, 64,  0,  0,  0,  0,  0, 35, 12,  3,  7,  1, 64, 66,179, 51,
235f94c1902Sdrh   51, 51, 51, 52, 34, 12,  3,  7,  1, 64, 66, 38,102,102,102,102,103, 33, 12,
236f94c1902Sdrh    3,  7,  1, 64, 65,153,153,153,153,153,154, 32, 12,  3,  7,  1, 64, 65, 12,
237f94c1902Sdrh  204,204,204,204,205, 31,  5,  3,  1,  1, 33, 30, 12,  3,  7,  1, 64, 63,230,
238f94c1902Sdrh  102,102,102,102,103, 29, 12,  3,  7,  1, 64, 62,204,204,204,204,204,206, 28,
239f94c1902Sdrh   12,  3,  7,  1, 64, 61,179, 51, 51, 51, 51, 52, 27, 12,  3,  7,  1, 64, 60,
240f94c1902Sdrh  153,153,153,153,153,154, 26, 12,  3,  7,  1, 64, 59,128,  0,  0,  0,  0,  1,
241f94c1902Sdrh   25, 12,  3,  7,  1, 64, 58,102,102,102,102,102,103, 24, 12,  3,  7,  1, 64,
242f94c1902Sdrh   57, 76,204,204,204,204,205, 23, 12,  3,  7,  1, 64, 56, 51, 51, 51, 51, 51,
243f94c1902Sdrh   52, 22, 12,  3,  7,  1, 64, 55, 25,153,153,153,153,154, 21,  5,  3,  1,  1,
244f94c1902Sdrh   22, 20, 12,  3,  7,  1, 64, 52,230,102,102,102,102,103, 19, 12,  3,  7,  1,
245f94c1902Sdrh   64, 51,204,204,204,204,204,205, 18, 12,  3,  7,  1, 64, 50,179, 51, 51, 51,
246f94c1902Sdrh   51, 52, 17, 12,  3,  7,  1, 64, 49,153,153,153,153,153,154, 16, 12,  3,  7,
247f94c1902Sdrh    1, 64, 48,128,  0,  0,  0,  0,  0, 15, 12,  3,  7,  1, 64, 46,204,204,204,
248f94c1902Sdrh  204,204,206, 14, 12,  3,  7,  1, 64, 44,153,153,153,153,153,154, 13, 12,  3,
249f94c1902Sdrh    7,  1, 64, 42,102,102,102,102,102,103, 12, 12,  3,  7,  1, 64, 40, 51, 51,
250f94c1902Sdrh   51, 51, 51, 52, 11,  5,  3,  1,  1, 11, 10, 12,  3,  7,  1, 64, 35,204,204,
251f94c1902Sdrh  204,204,204,205,  9, 12,  3,  7,  1, 64, 33,153,153,153,153,153,154,  8, 12,
252f94c1902Sdrh    3,  7,  1, 64, 30,204,204,204,204,204,206,  7, 12,  3,  7,  1, 64, 26,102,
253f94c1902Sdrh  102,102,102,102,103,  6, 12,  3,  7,  1, 64, 22,  0,  0,  0,  0,  0,  0,  5,
254f94c1902Sdrh   12,  3,  7,  1, 64, 17,153,153,153,153,153,154,  4, 12,  3,  7,  1, 64, 10,
255f94c1902Sdrh  102,102,102,102,102,103,  3, 12,  3,  7,  1, 64,  1,153,153,  0,  0,  0, 19,
256f94c1902Sdrh   12,  3,  7,  1, 64, 67, 64,  0,  0,  0,  0,  0, 35,  2,  0,  0,  0,  1,  1,
257f94c1902Sdrh  242,  0,  0,  0,  0, 22,  1,242,  1,218,  1,211,  1,202,  1,192,  1,179,  1,
258f94c1902Sdrh  172,  1,157,  1,149,  1,141,  1,132,  1,125,  1,116,  1,106,  1, 93,  1, 86,
259f94c1902Sdrh    1, 74,  1, 63,  1, 47,  1, 40,  1, 31,  1, 16,  1,  8,  0,255,  0,248,  0,
260f94c1902Sdrh  239,  0,229,  0,216,  0,209,  0,197,  0,186,  0,174,  0,158,  0,151,  0,136,
261f94c1902Sdrh    0,128,  0,119,  0,112,  0,103,  0, 93,  0,  9,  2, 27, 52, 55, 44, 78, 85,
262f94c1902Sdrh   76, 76,  8,  2, 25, 52, 54, 44, 51, 46, 53,  6,  2, 21, 52, 53, 44, 50,  8,
263f94c1902Sdrh    2, 25, 52, 52, 44, 48, 46, 48,  7,  2, 23, 52, 51, 44, 49, 53, 14,  2, 37,
264f94c1902Sdrh   52, 50, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39,  6,  2, 21, 52, 49, 44, 52,
265f94c1902Sdrh   15,  2, 39, 52, 48, 44, 50, 49, 52, 55, 52, 56, 51, 54, 52, 56, 11,  2, 31,
266f94c1902Sdrh   52, 44, 39, 98,117, 98, 98, 97, 39, 10,  2, 29, 51, 57, 44, 39,120,121,122,
267f94c1902Sdrh   39, 11,  2, 31, 51, 56, 44, 39,102,111,117,114, 39,  6,  2, 21, 51, 55, 44,
268f94c1902Sdrh   51, 12,  2, 33, 51, 54, 44, 39, 98,117, 98, 98, 97, 39,  9,  2, 27, 51, 53,
269f94c1902Sdrh   44, 78, 85, 76, 76,  8,  2, 25, 51, 52, 44, 51, 46, 53,  6,  2, 21, 51, 51,
270f94c1902Sdrh   44, 50,  8,  2, 25, 51, 50, 44, 48, 46, 48,  7,  2, 23, 51, 49, 44, 49, 53,
271f94c1902Sdrh   14,  2, 37, 51, 48, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39,  8,  2, 25, 51,
272f94c1902Sdrh   44, 78, 85, 76, 76,  6,  2, 21, 50, 57, 44, 52, 15,  2, 39, 50, 56, 44, 50,
273f94c1902Sdrh   49, 52, 55, 52, 56, 51, 54, 52, 56, 10,  2, 29, 50, 55, 44, 39,120,121,122,
274f94c1902Sdrh   39, 11,  2, 31, 50, 54, 44, 39,102,111,117,114, 39,  6,  2, 21, 50, 53, 44,
275f94c1902Sdrh   51, 12,  2, 33, 50, 52, 44, 39, 98,117, 98, 98, 97, 39,  9,  2, 27, 50, 51,
276f94c1902Sdrh   44, 78, 85, 76, 76,  8,  2, 25, 50, 50, 44, 51, 46, 53,  6,  2, 21, 50, 49,
277f94c1902Sdrh   44, 50,  8,  2, 25, 50, 48, 44, 48, 46, 48,  7,  2, 23, 50, 44, 51, 46, 53,
278f94c1902Sdrh    7,  2, 23, 49, 57, 44, 49, 53, 14,  2, 37, 49, 56, 44, 88, 39, 53, 53, 54,
279f94c1902Sdrh   54, 55, 55, 39,  6,  2, 21, 49, 55, 44, 52, 12,  2, 33, 49, 54, 44, 39, 98,
280f94c1902Sdrh  117, 98, 98, 97, 39,  9,  2, 27, 49, 53, 44, 78, 85, 76, 76,  8,  2, 25, 49,
281f94c1902Sdrh   52, 44, 51, 46, 53,  6,  2, 21, 49, 51, 44, 50,  8,  2, 25, 49, 50, 44, 48,
282f94c1902Sdrh   46, 48,  7,  2, 23, 49, 49, 44, 49, 53, 14,  2, 37, 49, 48, 44, 88,  0,  0,
283f94c1902Sdrh    0, 21,  9,  2, 27, 52, 55, 44, 78, 85, 76, 76, 13,  0,  0,  0, 26,  0, 68,
284f94c1902Sdrh    0,  1,246,  1,224,  1,213,  1,187,  1,177,  1,155,  1,145,  1,119,  1,109,
285f94c1902Sdrh    1, 87,  1, 76,  1, 50,  1, 40,  1, 18,  1,  7,  0,237,  0,227,  0,205,  0,
286f94c1902Sdrh  195,  0,169,  0,159,  0,137,  0,126,  0,100,  0, 90,  0, 68,  0,  0,  0,  0,
287f94c1902Sdrh    0,  0,  0,  0, 20, 26,  5,  0, 21,  7, 18,102,111,117,114, 64, 12,  0,  0,
288f94c1902Sdrh    0,  0,  0,  0, 85,102,119,  8, 25,  5,  0,  1,  1,  1,  3,  2,  4, 24, 24,
289f94c1902Sdrh    5,  0, 23,  7,  5, 98,117, 98, 98, 97,  0,  0,  0,  0,  0,  0,  0,  0,  0,
290f94c1902Sdrh    0,128,  0,  0,  0,  9, 23,  5,  0,  0,  1, 19, 15,120,121,122, 20, 22,  5,
291f94c1902Sdrh    0,  7, 18, 21, 64, 12,  0,  0,  0,  0,  0,  0, 85,102,119,102,111,117,114,
292f94c1902Sdrh    8, 21,  5,  0,  1,  1,  1,  2,  4,  3, 24, 20,  5,  0,  7,  5, 23,  0,  0,
293f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0, 98,117, 98, 98, 97,  8, 19,
294f94c1902Sdrh    4,  0,  1, 19, 15,120,121,122, 20, 18,  5,  0, 18, 21,  7, 85,102,119,102,
295f94c1902Sdrh  111,117,114, 64, 12,  0,  0,  0,  0,  0,  0,  8, 17,  5,  0,  1,  1,  1,  4,
296f94c1902Sdrh    3,  2, 24, 16,  5,  0, 23,  5,  7, 98,117, 98, 98, 97,  0,  0,128,  0,  0,
297f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  9, 15,  5,  0,  0, 19,  1,120,121,122,
298f94c1902Sdrh   15, 20, 14,  5,  0,  7, 21, 18, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,
299f94c1902Sdrh  114, 85,102,119,  8, 13,  5,  0,  1,  1,  1,  2,  3,  4, 24, 12,  5,  0,  7,
300f94c1902Sdrh   23,  5,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97,  0,  0,128,  0,
301f94c1902Sdrh    0,  0,  9, 11,  5,  0,  1,  0, 19, 15,120,121,122, 20, 10,  5,  0, 18,  7,
302f94c1902Sdrh   21, 85,102,119, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114,  8,  9,  5,
303f94c1902Sdrh    0,  1,  1,  1,  4,  2,  3, 24,  8,  5,  0,  5,  7, 23,  0,  0,128,  0,  0,
304f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97,  8,  7,  4,  0, 19,
305f94c1902Sdrh    1,120,121,122, 15, 20,  6,  5,  0, 21, 18,  7,102,111,117,114, 85,102,119,
306f94c1902Sdrh   64, 12,  0,  0,  0,  0,  0,  0,  8,  5,  5,  0,  1,  1,  1,  3,  4,  2, 24,
307f94c1902Sdrh    4,  5,  0, 23,  5,  7, 98,117, 98, 98, 97,  0,  0,128,  0,  0,  0,  0,  0,
308f94c1902Sdrh    0,  0,  0,  0,  0,  0,  9,  3,  5,  0,  0, 19,  1,120,121,122, 15, 20,  2,
309f94c1902Sdrh    5,  0,  7, 21, 18, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114, 85,102,
310f94c1902Sdrh  119,  8,  1,  5,  0,  1,  1,  1,  2,  3,  4, 13,  0,  0,  0, 26,  0, 63,  0,
311f94c1902Sdrh    1,245,  1,219,  1,209,  1,187,  1,177,  1,151,  1,141,  1,119,  1,108,  1,
312f94c1902Sdrh   82,  1, 72,  1, 50,  1, 39,  1, 13,  1,  3,  0,237,  0,227,  0,201,  0,191,
313f94c1902Sdrh    0,169,  0,158,  0,132,  0,122,  0,100,  0, 89,  0, 63,  0,  0,  0, 24, 52,
314f94c1902Sdrh    5,  0,  7, 23,  5,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97,  0,
315f94c1902Sdrh    0,128,  0,  0,  0,  9, 51,  5,  0,  1,  0, 19, 15,120,121,122, 20, 50,  5,
316f94c1902Sdrh    0, 18,  7, 21, 85,102,119, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114,
317f94c1902Sdrh    8, 49,  5,  0,  1,  1,  1,  4,  2,  3, 24, 48,  5,  0, 23,  7,  5, 98,117,
318f94c1902Sdrh   98, 98, 97,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  9, 47,
319f94c1902Sdrh    5,  0,  0,  1, 19, 15,120,121,122, 20, 46,  5,  0,  7, 18, 21, 64, 12,  0,
320f94c1902Sdrh    0,  0,  0,  0,  0, 85,102,119,102,111,117,114,  8, 45,  5,  0,  1,  1,  1,
321f94c1902Sdrh    2,  4,  3, 24, 44,  5,  0,  7,  5, 23,  0,  0,  0,  0,  0,  0,  0,  0,  0,
322f94c1902Sdrh    0,128,  0,  0,  0, 98,117, 98, 98, 97,  8, 43,  4,  0,  1, 19, 15,120,121,
323f94c1902Sdrh  122, 20, 42,  5,  0, 18, 21,  7, 85,102,119,102,111,117,114, 64, 12,  0,  0,
324f94c1902Sdrh    0,  0,  0,  0,  8, 41,  5,  0,  1,  1,  1,  4,  3,  2, 24, 40,  5,  0,  5,
325f94c1902Sdrh   23,  7,  0,  0,128,  0,  0,  0, 98,117, 98, 98, 97,  0,  0,  0,  0,  0,  0,
326f94c1902Sdrh    0,  0,  9, 39,  5,  0, 19,  0,  1,120,121,122, 15, 20, 38,  5,  0, 21,  7,
327f94c1902Sdrh   18,102,111,117,114, 64, 12,  0,  0,  0,  0,  0,  0, 85,102,119,  8, 37,  5,
328f94c1902Sdrh    0,  1,  1,  1,  3,  2,  4, 24, 36,  5,  0, 23,  7,  5, 98,117, 98, 98, 97,
329f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  9, 35,  5,  0,  0,
330f94c1902Sdrh    1, 19, 15,120,121,122, 20, 34,  5,  0,  7, 18, 21, 64, 12,  0,  0,  0,  0,
331f94c1902Sdrh    0,  0, 85,102,119,102,111,117,114,  8, 33,  5,  0,  1,  1,  1,  2,  4,  3,
332f94c1902Sdrh   24, 32,  5,  0,  7,  5, 23,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,
333f94c1902Sdrh    0,  0, 98,117, 98, 98, 97,  8, 31,  4,  0,  1, 19, 15,120,121,122, 20, 30,
334f94c1902Sdrh    5,  0, 18, 21,  7, 85,102,119,102,111,117,114, 64, 12,  0,  0,  0,  0,  0,
335f94c1902Sdrh    0,  8, 29,  5,  0,  1,  1,  1,  4,  3,  2, 24, 28,  5,  0,  5, 23,  7,  0,
336f94c1902Sdrh    0,128,  0,  0,  0, 98,117, 98, 98, 97,  0,  0,  0,  0,  0,  0,  0,  0,  9,
337f94c1902Sdrh   27,  5,  0, 19,  0,  1,120,121,122, 15, 13,  0,  0,  0, 12,  1, 50,  0,  1,
338f94c1902Sdrh  246,  1,224,  1,213,  1,187,  1,177,  1,155,  1,145,  1,119,  1,109,  1, 87,
339f94c1902Sdrh    1, 76,  1, 50,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
340f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
341f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
342f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
343f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
344f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
345f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
346f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
347f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
348f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
349f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
350f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
351f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
352f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
353f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 64,  5,  0,  7, 23,  5,
354f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97,  0,  0,128,  0,  0,  0,
355f94c1902Sdrh    9, 63,  5,  0,  1,  0, 19, 15,120,121,122, 20, 62,  5,  0, 18,  7, 21, 85,
356f94c1902Sdrh  102,119, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114,  8, 61,  5,  0,  1,
357f94c1902Sdrh    1,  1,  4,  2,  3, 24, 60,  5,  0,  5,  7, 23,  0,  0,128,  0,  0,  0,  0,
358f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97,  8, 59,  4,  0, 19,  1,120,
359f94c1902Sdrh  121,122, 15, 20, 58,  5,  0, 21, 18,  7,102,111,117,114, 85,102,119, 64, 12,
360f94c1902Sdrh    0,  0,  0,  0,  0,  0,  8, 57,  5,  0,  1,  1,  1,  3,  4,  2, 24, 56,  5,
361f94c1902Sdrh    0, 23,  5,  7, 98,117, 98, 98, 97,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,
362f94c1902Sdrh    0,  0,  0,  0,  9, 55,  5,  0,  0, 19,  1,120,121,122, 15, 20, 54,  5,  0,
363f94c1902Sdrh    7, 21, 18, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114, 85,102,119,  8,
364f94c1902Sdrh   53,  5,  0,  1,  1,  1,  2,  3,  4, 13,  0,  0,  0, 27,  0, 72,  0,  1,245,
365f94c1902Sdrh    1,224,  1,212,  1,192,  1,181,  1,165,  1,152,  1,129,  1,118,  1, 97,  1,
366f94c1902Sdrh   87,  1, 64,  1, 52,  1, 30,  1, 17,  0,252,  0,240,  0,223,  0,209,  0,185,
367f94c1902Sdrh    0,173,  0,152,  0,141,  0,118,  0,106,  0, 84,  0, 72,  0,  0,  0,  0,  0,
368f94c1902Sdrh    0,  0,  0,  0,  0, 10, 27,  3, 21, 19,120, 50, 55,121,120,121,122, 20, 26,
369f94c1902Sdrh    4, 21, 21,  7,120, 50, 54,121,102,111,117,114, 64, 12,  0,  0,  0,  0,  0,
370f94c1902Sdrh    0, 10, 25,  4, 21,  1,  1,120, 50, 53,121,  3,  2, 21, 24,  4, 21, 23,  7,
371f94c1902Sdrh  120, 50, 52,121, 98,117, 98, 98, 97,  0,  0,  0,  0,  0,  0,  0,  0,  9, 23,
372f94c1902Sdrh    4, 21,  0,  1,120, 50, 51,121, 15, 19, 22,  4, 21,  7, 18,120, 50, 50,121,
373f94c1902Sdrh   64, 12,  0,  0,  0,  0,  0,  0, 85,102,119, 10, 21,  4, 21,  1,  1,120, 50,
374f94c1902Sdrh   49,121,  2,  4, 22, 20,  4, 21,  7,  5,120, 50, 48,121,  0,  0,  0,  0,  0,
375f94c1902Sdrh    0,  0,  0,  0,  0,128,  0,  0,  0, 12, 19,  4, 21,  1, 19,120, 49, 57,121,
376f94c1902Sdrh   15,120,121,122, 15, 18,  4, 21, 18, 21,120, 49, 56,121, 85,102,119,102,111,
377f94c1902Sdrh  117,114, 10, 17,  4, 21,  1,  1,120, 49, 55,121,  4,  3, 19, 16,  4, 21, 23,
378f94c1902Sdrh    5,120, 49, 54,121, 98,117, 98, 98, 97,  0,  0,128,  0,  0,  0, 11, 15,  4,
379f94c1902Sdrh   21,  0, 19,120, 49, 53,121,120,121,122, 20, 14,  4, 21,  7, 21,120, 49, 52,
380f94c1902Sdrh  121, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114, 10, 13,  4, 21,  1,  1,
381f94c1902Sdrh  120, 49, 51,121,  2,  3, 21, 12,  4, 21,  7, 23,120, 49, 50,121,  0,  0,  0,
382f94c1902Sdrh    0,  0,  0,  0,  0, 98,117, 98, 98, 97,  8, 11,  3, 21,  1,120, 49, 49,121,
383f94c1902Sdrh   15, 19, 10,  4, 21, 18,  7,120, 49, 48,121, 85,102,119, 64, 12,  0,  0,  0,
384f94c1902Sdrh    0,  0,  0,  9,  9,  4, 19,  1,  1,120, 57,121,  4,  2, 21,  8,  4, 19,  5,
385f94c1902Sdrh    7,120, 56,121,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11,
386f94c1902Sdrh    7,  4, 19, 19,  1,120, 55,121,120,121,122, 15, 14,  6,  4, 19, 21, 18,120,
387f94c1902Sdrh   54,121,102,111,117,114, 85,102,119,  9,  5,  4, 19,  1,  1,120, 53,121,  3,
388f94c1902Sdrh    4, 18,  4,  4, 19, 23,  5,120, 52,121, 98,117, 98, 98, 97,  0,  0,128,  0,
389f94c1902Sdrh    0,  0, 10,  3,  4, 19,  0, 19,120, 51,121,120,121,122, 19,  2,  4, 19,  7,
390f94c1902Sdrh   21,120, 50,121, 64, 12,  0,  0,  0,  0,  0,  0,102,111,117,114,  9,  1,  4,
391f94c1902Sdrh   19,  1,  1,120, 49,121,  2,  3, 13,  0,  0,  0, 26,  0, 78,  0,  1,235,  1,
392f94c1902Sdrh  223,  1,206,  1,192,  1,168,  1,156,  1,135,  1,124,  1,101,  1, 89,  1, 67,
393f94c1902Sdrh    1, 55,  1, 34,  1, 22,  1,  5,  0,247,  0,223,  0,211,  0,190,  0,179,  0,
394f94c1902Sdrh  156,  0,144,  0,123,  0,113,  0, 90,  0, 78,  0,  0,  0,  0,  0,  0,  0,  0,
395f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10, 53,  4, 21,  1,  1,120, 53, 51,
396f94c1902Sdrh  121,  2,  3, 21, 52,  4, 21,  7, 23,120, 53, 50,121,  0,  0,  0,  0,  0,  0,
397f94c1902Sdrh    0,  0, 98,117, 98, 98, 97,  8, 51,  3, 21,  1,120, 53, 49,121, 15, 19, 50,
398f94c1902Sdrh    4, 21, 18,  7,120, 53, 48,121, 85,102,119, 64, 12,  0,  0,  0,  0,  0,  0,
399f94c1902Sdrh   10, 49,  4, 21,  1,  1,120, 52, 57,121,  4,  2, 21, 48,  4, 21, 23,  7,120,
400f94c1902Sdrh   52, 56,121, 98,117, 98, 98, 97,  0,  0,  0,  0,  0,  0,  0,  0,  9, 47,  4,
401f94c1902Sdrh   21,  0,  1,120, 52, 55,121, 15, 19, 46,  4, 21,  7, 18,120, 52, 54,121, 64,
402f94c1902Sdrh   12,  0,  0,  0,  0,  0,  0, 85,102,119, 10, 45,  4, 21,  1,  1,120, 52, 53,
403f94c1902Sdrh  121,  2,  4, 22, 44,  4, 21,  7,  5,120, 52, 52,121,  0,  0,  0,  0,  0,  0,
404f94c1902Sdrh    0,  0,  0,  0,128,  0,  0,  0, 12, 43,  4, 21,  1, 19,120, 52, 51,121, 15,
405f94c1902Sdrh  120,121,122, 15, 42,  4, 21, 18, 21,120, 52, 50,121, 85,102,119,102,111,117,
406f94c1902Sdrh  114, 10, 41,  4, 21,  1,  1,120, 52, 49,121,  4,  3, 19, 40,  4, 21,  5, 23,
407f94c1902Sdrh  120, 52, 48,121,  0,  0,128,  0,  0,  0, 98,117, 98, 98, 97, 10, 39,  3, 21,
408f94c1902Sdrh   19,120, 51, 57,121,120,121,122, 20, 38,  4, 21, 21,  7,120, 51, 56,121,102,
409f94c1902Sdrh  111,117,114, 64, 12,  0,  0,  0,  0,  0,  0, 10, 37,  4, 21,  1,  1,120, 51,
410f94c1902Sdrh   55,121,  3,  2, 21, 36,  4, 21, 23,  7,120, 51, 54,121, 98,117, 98, 98, 97,
411f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  9, 35,  4, 21,  0,  1,120, 51, 53,121, 15,
412f94c1902Sdrh   19, 34,  4, 21,  7, 18,120, 51, 52,121, 64, 12,  0,  0,  0,  0,  0,  0, 85,
413f94c1902Sdrh  102,119, 10, 33,  4, 21,  1,  1,120, 51, 51,121,  2,  4, 22, 32,  4, 21,  7,
414f94c1902Sdrh    5,120, 51, 50,121,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,
415f94c1902Sdrh   12, 31,  4, 21,  1, 19,120, 51, 49,121, 15,120,121,122, 15, 30,  4, 21, 18,
416f94c1902Sdrh   21,120, 51, 48,121, 85,102,119,102,111,117,114, 10, 29,  4, 21,  1,  1,120,
417f94c1902Sdrh   50, 57,121,  4,  3, 19, 28,  4, 21,  5, 23,120, 50, 56,121,  0,  0,128,  0,
418f94c1902Sdrh    0,  0, 98,117, 98, 98, 97, 13,  0,  0,  0, 11,  1, 67,  0,  1,234,  1,221,
419f94c1902Sdrh    1,200,  1,188,  1,171,  1,157,  1,133,  1,121,  1,100,  1, 90,  1, 67,  0,
420f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
421f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
422f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
423f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
424f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
425f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
426f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
427f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
428f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
429f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
430f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
431f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
432f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
433f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
434f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
435f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0, 21, 64,  4, 21,  7, 23,120, 54, 52,121,  0,  0,
436f94c1902Sdrh    0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97,  8, 63,  3, 21,  1,120, 54, 51,
437f94c1902Sdrh  121, 15, 19, 62,  4, 21, 18,  7,120, 54, 50,121, 85,102,119, 64, 12,  0,  0,
438f94c1902Sdrh    0,  0,  0,  0, 10, 61,  4, 21,  1,  1,120, 54, 49,121,  4,  2, 22, 60,  4,
439f94c1902Sdrh   21,  5,  7,120, 54, 48,121,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,
440f94c1902Sdrh    0,  0, 12, 59,  4, 21, 19,  1,120, 53, 57,121,120,121,122, 15, 15, 58,  4,
441f94c1902Sdrh   21, 21, 18,120, 53, 56,121,102,111,117,114, 85,102,119, 10, 57,  4, 21,  1,
442f94c1902Sdrh    1,120, 53, 55,121,  3,  4, 19, 56,  4, 21, 23,  5,120, 53, 54,121, 98,117,
443f94c1902Sdrh   98, 98, 97,  0,  0,128,  0,  0,  0, 11, 55,  4, 21,  0, 19,120, 53, 53,121,
444f94c1902Sdrh  120,121,122, 20, 54,  4, 21,  7, 21,120, 53, 52,121, 64, 12,  0,  0,  0,  0,
445f94c1902Sdrh    0,  0,102,111,117,114, 10,  0,  0,  0, 45,  0,112,  0,  1,247,  1,238,  1,
446f94c1902Sdrh  229,  1,220,  1,211,  1,202,  1,193,  1,184,  1,175,  1,166,  1,159,  1,150,
447f94c1902Sdrh    1,141,  1,132,  1,123,  1,114,  1,105,  1, 96,  1, 87,  1, 78,  1, 69,  1,
448f94c1902Sdrh   61,  1, 52,  1, 43,  1, 34,  1, 25,  1, 16,  1,  7,  0,254,  0,245,  0,236,
449f94c1902Sdrh    0,227,  0,219,  0,210,  0,201,  0,192,  0,183,  0,174,  0,165,  0,156,  0,
450f94c1902Sdrh  147,  0,138,  0,129,  0,121,  0,112,  0,103,  0,  0,  0,  0,  0,  0,  9,120,
451f94c1902Sdrh   53, 49,121, 51,  8,  3, 21,  1,120, 53, 48,121, 50,  7,  3, 19,  1,120, 52,
452f94c1902Sdrh  121,  4,  8,  3, 21,  1,120, 52, 57,121, 49,  8,  3, 21,  1,120, 52, 56,121,
453f94c1902Sdrh   48,  8,  3, 21,  1,120, 52, 55,121, 47,  8,  3, 21,  1,120, 52, 54,121, 46,
454f94c1902Sdrh    8,  3, 21,  1,120, 52, 53,121, 45,  8,  3, 21,  1,120, 52, 52,121, 44,  8,
455f94c1902Sdrh    3, 21,  1,120, 52, 51,121, 43,  8,  3, 21,  1,120, 52, 50,121, 42,  8,  3,
456f94c1902Sdrh   21,  1,120, 52, 49,121, 41,  8,  3, 21,  1,120, 52, 48,121, 40,  7,  3, 19,
457f94c1902Sdrh    1,120, 51,121,  3,  8,  3, 21,  1,120, 51, 57,121, 39,  8,  3, 21,  1,120,
458f94c1902Sdrh   51, 56,121, 38,  8,  3, 21,  1,120, 51, 55,121, 37,  8,  3, 21,  1,120, 51,
459f94c1902Sdrh   54,121, 36,  8,  3, 21,  1,120, 51, 53,121, 35,  8,  3, 21,  1,120, 51, 52,
460f94c1902Sdrh  121, 34,  8,  3, 21,  1,120, 51, 51,121, 33,  8,  3, 21,  1,120, 51, 50,121,
461f94c1902Sdrh   32,  8,  3, 21,  1,120, 51, 49,121, 31,  8,  3, 21,  1,120, 51, 48,121, 30,
462f94c1902Sdrh    7,  3, 19,  1,120, 50,121,  2,  8,  3, 21,  1,120, 50, 57,121, 29,  8,  3,
463f94c1902Sdrh   21,  1,120, 50, 56,121, 28,  8,  3, 21,  1,120, 50, 55,121, 27,  8,  3, 21,
464f94c1902Sdrh    1,120, 50, 54,121, 26,  8,  3, 21,  1,120, 50, 53,121, 25,  8,  3, 21,  1,
465f94c1902Sdrh  120, 50, 52,121, 24,  8,  3, 21,  1,120, 50, 51,121, 23,  8,  3, 21,  1,120,
466f94c1902Sdrh   50, 50,121, 22,  8,  3, 21,  1,120, 50, 49,121, 21,  8,  3, 21,  1,120, 50,
467f94c1902Sdrh   48,121, 20,  6,  3, 19,  9,120, 49,121,  8,  3, 21,  1,120, 49, 57,121, 19,
468f94c1902Sdrh    8,  3, 21,  1,120, 49, 56,121, 18,  8,  3, 21,  1,120, 49, 55,121, 17,  8,
469f94c1902Sdrh    3, 21,  1,120, 49, 54,121, 16,  8,  3, 21,  1,120, 49, 53,121, 15,  8,  3,
470f94c1902Sdrh   21,  1,120, 49, 52,121, 14,  8,  3, 21,  1,120, 49, 51,121, 13,  8,  3, 21,
471f94c1902Sdrh    1,120, 49, 50,121, 12,  8,  3, 21,  1,120, 49, 49,121, 11,  8,  3, 21,  1,
472f94c1902Sdrh  120, 49, 48,121, 10, 10,  0,  0,  0, 18,  1, 99,  0,  1,247,  1,238,  1,229,
473f94c1902Sdrh    1,220,  1,211,  1,202,  1,193,  1,184,  1,176,  1,167,  1,158,  1,149,  1,
474f94c1902Sdrh  140,  1,131,  1,123,  1,115,  1,107,  1, 99,  0,  0,  0,  0,  0,  0,  0,  0,
475f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
476f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
477f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
478f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
479f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
480f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
481f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
482f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
483f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
484f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
485f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
486f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
487f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
488f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
489f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
490f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,
491f94c1902Sdrh    3, 19,  1,120, 57,121,  9,  7,  3, 19,  1,120, 56,121,  8,  7,  3, 19,  1,
492f94c1902Sdrh  120, 55,121,  7,  7,  3, 19,  1,120, 54,121,  6,  8,  3, 21,  1,120, 54, 52,
493f94c1902Sdrh  121, 64,  8,  3, 21,  1,120, 54, 51,121, 63,  8,  3, 21,  1,120, 54, 50,121,
494f94c1902Sdrh   62,  8,  3, 21,  1,120, 54, 49,121, 61,  8,  3, 21,  1,120, 54, 48,121, 60,
495f94c1902Sdrh    7,  3, 19,  1,120, 53,121,  5,  8,  3, 21,  1,120, 53, 57,121, 59,  8,  3,
496f94c1902Sdrh   21,  1,120, 53, 56,121, 58,  8,  3, 21,  1,120, 53, 55,121, 57,  8,  3, 21,
497f94c1902Sdrh    1,120, 53, 54,121, 56,  8,  3, 21,  1,120, 53, 53,121, 55,  8,  3, 21,  1,
498f94c1902Sdrh  120, 53, 52,121, 54,  8,  3, 21,  1,120, 53, 51,121, 53,  8,  3, 21,  1,120,
499f94c1902Sdrh   53, 50,121, 52, 13,  0,  0,  0, 23,  0, 54,  0,  1,240,  1,214,  1,197,  1,
500f94c1902Sdrh  172,  1,156,  1,135,  1,117,  1, 89,  1, 73,  1, 55,  1, 41,  1, 14,  0,254,
501f94c1902Sdrh    0,228,  0,211,  0,186,  0,170,  0,149,  0,131,  0,110,  0, 94,  0, 69,  0,
502f94c1902Sdrh   54, 13, 23,  4,  7,  0,  1, 64, 57, 76,204,204,204,204,205, 15, 23, 22,  4,
503f94c1902Sdrh    7,  7, 18, 64, 56, 51, 51, 51, 51, 51, 52, 64, 12,  0,  0,  0,  0,  0,  0,
504f94c1902Sdrh   85,102,119, 14, 21,  4,  7,  1,  1, 64, 55, 25,153,153,153,153,154,  2,  4,
505f94c1902Sdrh   19, 20,  4,  1,  7,  5, 22,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,
506f94c1902Sdrh    0,  0, 16, 19,  4,  7,  1, 19, 64, 52,230,102,102,102,102,103, 15,120,121,
507f94c1902Sdrh  122, 19, 18,  4,  7, 18, 21, 64, 51,204,204,204,204,204,205, 85,102,119,102,
508f94c1902Sdrh  111,117,114, 14, 17,  4,  7,  1,  1, 64, 50,179, 51, 51, 51, 51, 52,  4,  3,
509f94c1902Sdrh   23, 16,  4,  7, 23,  5, 64, 49,153,153,153,153,153,154, 98,117, 98, 98, 97,
510f94c1902Sdrh    0,  0,128,  0,  0,  0, 15, 15,  4,  7,  0, 19, 64, 48,128,  0,  0,  0,  0,
511f94c1902Sdrh    0,120,121,122, 24, 14,  4,  7,  7, 21, 64, 46,204,204,204,204,204,206, 64,
512f94c1902Sdrh   12,  0,  0,  0,  0,  0,  0,102,111,117,114, 14, 13,  4,  7,  1,  1, 64, 44,
513f94c1902Sdrh  153,153,153,153,153,154,  2,  3, 25, 12,  4,  7,  7, 23, 64, 42,102,102,102,
514f94c1902Sdrh  102,102,103,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97, 12, 11,  3,
515f94c1902Sdrh    7,  1, 64, 40, 51, 51, 51, 51, 51, 52, 15, 16, 10,  4,  1, 18,  7, 11, 85,
516f94c1902Sdrh  102,119, 64, 12,  0,  0,  0,  0,  0,  0, 14,  9,  4,  7,  1,  1, 64, 35,204,
517f94c1902Sdrh  204,204,204,204,205,  4,  2, 26,  8,  4,  7,  5,  7, 64, 33,153,153,153,153,
518f94c1902Sdrh  153,154,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  7,  4,
519f94c1902Sdrh    7, 19,  1, 64, 30,204,204,204,204,204,206,120,121,122, 15, 19,  6,  4,  7,
520f94c1902Sdrh   21, 18, 64, 26,102,102,102,102,102,103,102,111,117,114, 85,102,119, 14,  5,
521f94c1902Sdrh    4,  7,  1,  1, 64, 22,  0,  0,  0,  0,  0,  0,  3,  4, 23,  4,  4,  7, 23,
522f94c1902Sdrh    5, 64, 17,153,153,153,153,153,154, 98,117, 98, 98, 97,  0,  0,128,  0,  0,
523f94c1902Sdrh    0, 15,  3,  4,  7,  0, 19, 64, 10,102,102,102,102,102,103,120,121,122, 24,
524f94c1902Sdrh    2,  4,  7,  7, 21, 64,  1,153,153,153,153,153,154, 64, 12,  0,  0,  0,  0,
525f94c1902Sdrh    0,  0,102,111,117,114, 14,  1,  4,  7,  1,  1, 63,241,153,153,153,153,153,
526f94c1902Sdrh  154,  2,  3, 13,  0,  0,  0, 22,  0, 68,  0,  1,229,  1,213,  1,187,  1,171,
527f94c1902Sdrh    1,146,  1,130,  1,116,  1, 98,  1, 70,  1, 54,  1, 29,  1, 14,  0,243,  0,
528f94c1902Sdrh  227,  0,201,  0,185,  0,167,  0,151,  0,130,  0,112,  0, 84,  0, 68,  0,  0,
529f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14, 45,  4,  7,  1,
530f94c1902Sdrh    1, 64, 72,192,  0,  0,  0,  0,  1,  2,  4, 26, 44,  4,  7,  7,  5, 64, 72,
531f94c1902Sdrh   51, 51, 51, 51, 51, 52,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,
532f94c1902Sdrh    0, 16, 43,  4,  7,  1, 19, 64, 71,166,102,102,102,102,103, 15,120,121,122,
533f94c1902Sdrh   19, 42,  4,  7, 18, 21, 64, 71, 25,153,153,153,153,154, 85,102,119,102,111,
534f94c1902Sdrh  117,114, 14, 41,  4,  7,  1,  1, 64, 70,140,204,204,204,204,205,  4,  3, 16,
535f94c1902Sdrh   40,  4,  1,  5, 23, 44,  0,  0,128,  0,  0,  0, 98,117, 98, 98, 97, 14, 39,
536f94c1902Sdrh    3,  7, 19, 64, 69,115, 51, 51, 51, 51, 52,120,121,122, 24, 38,  4,  7, 21,
537f94c1902Sdrh    7, 64, 68,230,102,102,102,102,103,102,111,117,114, 64, 12,  0,  0,  0,  0,
538f94c1902Sdrh    0,  0, 14, 37,  4,  7,  1,  1, 64, 68, 89,153,153,153,153,154,  3,  2, 25,
539f94c1902Sdrh   36,  4,  7, 23,  7, 64, 67,204,204,204,204,204,205, 98,117, 98, 98, 97,  0,
540f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0, 13, 35,  4,  7,  0,  1, 64, 67, 64,  0,  0,  0,
541f94c1902Sdrh    0,  0, 15, 23, 34,  4,  7,  7, 18, 64, 66,179, 51, 51, 51, 51, 52, 64, 12,
542f94c1902Sdrh    0,  0,  0,  0,  0,  0, 85,102,119, 14, 33,  4,  7,  1,  1, 64, 66, 38,102,
543f94c1902Sdrh  102,102,102,103,  2,  4, 26, 32,  4,  7,  7,  5, 64, 65,153,153,153,153,153,
544f94c1902Sdrh  154,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0, 16, 31,  4,  7,
545f94c1902Sdrh    1, 19, 64, 65, 12,204,204,204,204,205, 15,120,121,122, 12, 30,  4,  1, 18,
546f94c1902Sdrh   21, 33, 85,102,119,102,111,117,114, 14, 29,  4,  7,  1,  1, 64, 63,230,102,
547f94c1902Sdrh  102,102,102,103,  4,  3, 23, 28,  4,  7,  5, 23, 64, 62,204,204,204,204,204,
548f94c1902Sdrh  206,  0,  0,128,  0,  0,  0, 98,117, 98, 98, 97, 14, 27,  3,  7, 19, 64, 61,
549f94c1902Sdrh  179, 51, 51, 51, 51, 52,120,121,122, 24, 26,  4,  7, 21,  7, 64, 60,153,153,
550f94c1902Sdrh  153,153,153,154,102,111,117,114, 64, 12,  0,  0,  0,  0,  0,  0, 14, 25,  4,
551f94c1902Sdrh    7,  1,  1, 64, 59,128,  0,  0,  0,  0,  1,  3,  2, 25, 24,  4,  7, 23,  7,
552f94c1902Sdrh   64, 58,102,102,102,102,102,103, 98,117, 98, 98, 97,  0,  0,  0,  0,  0,  0,
553f94c1902Sdrh    0,  0, 13,  0,  0,  0, 19,  0,121,  0,  1,231,  1,216,  1,189,  1,173,  1,
554f94c1902Sdrh  148,  1,134,  1,107,  1, 91,  1, 65,  1, 48,  1, 23,  1,  7,  0,242,  0,224,
555f94c1902Sdrh    0,203,  0,187,  0,162,  0,148,  0,121,  0,  0,  0,  0,  0,  0,  0,  0,  0,
556f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
557f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
558f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
559f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0, 25, 64,  4,  7,  7, 23, 64, 81,153,153,
560f94c1902Sdrh  153,153,153,154,  0,  0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97, 12, 63,
561f94c1902Sdrh    3,  7,  1, 64, 81, 83, 51, 51, 51, 51, 52, 15, 23, 62,  4,  7, 18,  7, 64,
562f94c1902Sdrh   81, 12,204,204,204,204,205, 85,102,119, 64, 12,  0,  0,  0,  0,  0,  0, 14,
563f94c1902Sdrh   61,  4,  7,  1,  1, 64, 80,198,102,102,102,102,103,  4,  2, 19, 60,  4,  1,
564f94c1902Sdrh    5,  7, 66,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 59,
565f94c1902Sdrh    4,  7, 19,  1, 64, 80, 57,153,153,153,153,154,120,121,122, 15, 19, 58,  4,
566f94c1902Sdrh    7, 21, 18, 64, 79,230,102,102,102,102,103,102,111,117,114, 85,102,119, 14,
567f94c1902Sdrh   57,  4,  7,  1,  1, 64, 79, 89,153,153,153,153,154,  3,  4, 23, 56,  4,  7,
568f94c1902Sdrh   23,  5, 64, 78,204,204,204,204,204,206, 98,117, 98, 98, 97,  0,  0,128,  0,
569f94c1902Sdrh    0,  0, 15, 55,  4,  7,  0, 19, 64, 78, 64,  0,  0,  0,  0,  1,120,121,122,
570f94c1902Sdrh   24, 54,  4,  7,  7, 21, 64, 77,179, 51, 51, 51, 51, 52, 64, 12,  0,  0,  0,
571f94c1902Sdrh    0,  0,  0,102,111,117,114, 14, 53,  4,  7,  1,  1, 64, 77, 38,102,102,102,
572f94c1902Sdrh  102,103,  2,  3, 25, 52,  4,  7,  7, 23, 64, 76,153,153,153,153,153,154,  0,
573f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0, 98,117, 98, 98, 97, 12, 51,  3,  7,  1, 64, 76,
574f94c1902Sdrh   12,204,204,204,204,205, 15, 23, 50,  4,  7, 18,  7, 64, 75,128,  0,  0,  0,
575f94c1902Sdrh    0,  1, 85,102,119, 64, 12,  0,  0,  0,  0,  0,  0, 14, 49,  4,  7,  1,  1,
576f94c1902Sdrh   64, 74,243, 51, 51, 51, 51, 52,  4,  2, 25, 48,  4,  7, 23,  7, 64, 74,102,
577f94c1902Sdrh  102,102,102,102,103, 98,117, 98, 98, 97,  0,  0,  0,  0,  0,  0,  0,  0, 13,
578f94c1902Sdrh   47,  4,  7,  0,  1, 64, 73,217,153,153,153,153,154, 15, 23, 46,  4,  7,  7,
579f94c1902Sdrh   18, 64, 73, 76,204,204,204,204,205, 64, 12,  0,  0,  0,  0,  0,  0, 85,102,
580f94c1902Sdrh  119, 10,  0,  0,  0, 34,  0, 92,  0,  1,244,  1,231,  1,218,  1,205,  1,192,
581f94c1902Sdrh    1,179,  1,166,  1,153,  1,140,  1,134,  1,121,  1,108,  1, 95,  1, 82,  1,
582f94c1902Sdrh   69,  1, 56,  1, 43,  1, 30,  1, 17,  1, 11,  0,254,  0,241,  0,228,  0,215,
583f94c1902Sdrh    0,202,  0,189,  0,176,  0,163,  0,150,  0,144,  0,131,  0,118,  0,105,  0,
584f94c1902Sdrh   92,  0, 79,  0,  0,  0,  0, 13, 64, 67, 64,  0,  0,  0,  0,  0, 35, 12,  3,
585f94c1902Sdrh    7,  1, 64, 66,179, 51, 51, 51, 51, 52, 34, 12,  3,  7,  1, 64, 66, 38,102,
586f94c1902Sdrh  102,102,102,103, 33, 12,  3,  7,  1, 64, 65,153,153,153,153,153,154, 32, 12,
587f94c1902Sdrh    3,  7,  1, 64, 65, 12,204,204,204,204,205, 31,  5,  3,  1,  1, 33, 30, 12,
588f94c1902Sdrh    3,  7,  1, 64, 63,230,102,102,102,102,103, 29, 12,  3,  7,  1, 64, 62,204,
589f94c1902Sdrh  204,204,204,204,206, 28, 12,  3,  7,  1, 64, 61,179, 51, 51, 51, 51, 52, 27,
590f94c1902Sdrh   12,  3,  7,  1, 64, 60,153,153,153,153,153,154, 26, 12,  3,  7,  1, 64, 59,
591f94c1902Sdrh  128,  0,  0,  0,  0,  1, 25, 12,  3,  7,  1, 64, 58,102,102,102,102,102,103,
592f94c1902Sdrh   24, 12,  3,  7,  1, 64, 57, 76,204,204,204,204,205, 23, 12,  3,  7,  1, 64,
593f94c1902Sdrh   56, 51, 51, 51, 51, 51, 52, 22, 12,  3,  7,  1, 64, 55, 25,153,153,153,153,
594f94c1902Sdrh  154, 21,  5,  3,  1,  1, 22, 20, 12,  3,  7,  1, 64, 52,230,102,102,102,102,
595f94c1902Sdrh  103, 19, 12,  3,  7,  1, 64, 51,204,204,204,204,204,205, 18, 12,  3,  7,  1,
596f94c1902Sdrh   64, 50,179, 51, 51, 51, 51, 52, 17, 12,  3,  7,  1, 64, 49,153,153,153,153,
597f94c1902Sdrh  153,154, 16, 12,  3,  7,  1, 64, 48,128,  0,  0,  0,  0,  0, 15, 12,  3,  7,
598f94c1902Sdrh    1, 64, 46,204,204,204,204,204,206, 14, 12,  3,  7,  1, 64, 44,153,153,153,
599f94c1902Sdrh  153,153,154, 13, 12,  3,  7,  1, 64, 42,102,102,102,102,102,103, 12, 12,  3,
600f94c1902Sdrh    7,  1, 64, 40, 51, 51, 51, 51, 51, 52, 11,  5,  3,  1,  1, 11, 10, 12,  3,
601f94c1902Sdrh    7,  1, 64, 35,204,204,204,204,204,205,  9, 12,  3,  7,  1, 64, 33,153,153,
602f94c1902Sdrh  153,153,153,154,  8, 12,  3,  7,  1, 64, 30,204,204,204,204,204,206,  7, 12,
603f94c1902Sdrh    3,  7,  1, 64, 26,102,102,102,102,102,103,  6, 12,  3,  7,  1, 64, 22,  0,
604f94c1902Sdrh    0,  0,  0,  0,  0,  5, 12,  3,  7,  1, 64, 17,153,153,153,153,153,154,  4,
605f94c1902Sdrh   12,  3,  7,  1, 64, 10,102,102,102,102,102,103,  3, 12,  3,  7,  1, 64,  1,
606f94c1902Sdrh  153,153,153,153,153,154,  2, 11,  3,  7,  9, 63,241,153,153,153,153,153,154,
607f94c1902Sdrh   10,  0,  0,  0, 29,  0,149,  0,  1,243,  1,230,  1,217,  1,204,  1,198,  1,
608f94c1902Sdrh  185,  1,172,  1,159,  1,146,  1,133,  1,120,  1,107,  1, 94,  1, 81,  1, 68,
609f94c1902Sdrh    1, 55,  1, 42,  1, 29,  1, 16,  1,  3,  0,246,  0,233,  0,220,  0,207,  0,
610f94c1902Sdrh  201,  0,188,  0,175,  0,162,  0,149,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
611f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
612f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
613f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
614f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  3,  7,
615f94c1902Sdrh    1, 64, 81,153,153,153,153,153,154, 64, 12,  3,  7,  1, 64, 81, 83, 51, 51,
616f94c1902Sdrh   51, 51, 52, 63, 12,  3,  7,  1, 64, 81, 12,204,204,204,204,205, 62, 12,  3,
617f94c1902Sdrh    7,  1, 64, 80,198,102,102,102,102,103, 61,  5,  3,  1,  1, 66, 60, 12,  3,
618f94c1902Sdrh    7,  1, 64, 80, 57,153,153,153,153,154, 59, 12,  3,  7,  1, 64, 79,230,102,
619f94c1902Sdrh  102,102,102,103, 58, 12,  3,  7,  1, 64, 79, 89,153,153,153,153,154, 57, 12,
620f94c1902Sdrh    3,  7,  1, 64, 78,204,204,204,204,204,206, 56, 12,  3,  7,  1, 64, 78, 64,
621f94c1902Sdrh    0,  0,  0,  0,  1, 55, 12,  3,  7,  1, 64, 77,179, 51, 51, 51, 51, 52, 54,
622f94c1902Sdrh   12,  3,  7,  1, 64, 77, 38,102,102,102,102,103, 53, 12,  3,  7,  1, 64, 76,
623f94c1902Sdrh  153,153,153,153,153,154, 52, 12,  3,  7,  1, 64, 76, 12,204,204,204,204,205,
624f94c1902Sdrh   51, 12,  3,  7,  1, 64, 75,128,  0,  0,  0,  0,  1, 50, 12,  3,  7,  1, 64,
625f94c1902Sdrh   74,243, 51, 51, 51, 51, 52, 49, 12,  3,  7,  1, 64, 74,102,102,102,102,102,
626f94c1902Sdrh  103, 48, 12,  3,  7,  1, 64, 73,217,153,153,153,153,154, 47, 12,  3,  7,  1,
627f94c1902Sdrh   64, 73, 76,204,204,204,204,205, 46, 12,  3,  7,  1, 64, 72,192,  0,  0,  0,
628f94c1902Sdrh    0,  1, 45, 12,  3,  7,  1, 64, 72, 51, 51, 51, 51, 51, 52, 44, 12,  3,  7,
629f94c1902Sdrh    1, 64, 71,166,102,102,102,102,103, 43, 12,  3,  7,  1, 64, 71, 25,153,153,
630f94c1902Sdrh  153,153,154, 42, 12,  3,  7,  1, 64, 70,140,204,204,204,204,205, 41,  5,  3,
631f94c1902Sdrh    1,  1, 44, 40, 12,  3,  7,  1, 64, 69,115, 51, 51, 51, 51, 52, 39, 12,  3,
632f94c1902Sdrh    7,  1, 64, 68,230,102,102,102,102,103, 38, 12,  3,  7,  1, 64, 68, 89,153,
633f94c1902Sdrh  153,153,153,154, 37, 12,  3,  7,  1, 64, 67,204,204,204,204,204,205, 36, 10,
634f94c1902Sdrh    0,  0,  0, 41,  0,103,  0,  1,250,  1,235,  1,227,  1,218,  1,211,  1,202,
635f94c1902Sdrh    1,192,  1,179,  1,172,  1,157,  1,149,  1,141,  1,132,  1,125,  1,116,  1,
636f94c1902Sdrh  106,  1, 93,  1, 86,  1, 74,  1, 63,  1, 47,  1, 40,  1, 31,  1, 16,  1,  8,
637f94c1902Sdrh    0,255,  0,248,  0,239,  0,229,  0,216,  0,209,  0,197,  0,186,  0,174,  0,
638f94c1902Sdrh  158,  0,151,  0,136,  0,128,  0,119,  0,112,  0,103,  0, 93,  0,  0,  0,  0,
639f94c1902Sdrh   10, 55, 44, 78, 85, 76, 76,  8,  2, 25, 52, 54, 44, 51, 46, 53,  6,  2, 21,
640f94c1902Sdrh   52, 53, 44, 50,  8,  2, 25, 52, 52, 44, 48, 46, 48,  7,  2, 23, 52, 51, 44,
641f94c1902Sdrh   49, 53, 14,  2, 37, 52, 50, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39,  6,  2,
642f94c1902Sdrh   21, 52, 49, 44, 52, 15,  2, 39, 52, 48, 44, 50, 49, 52, 55, 52, 56, 51, 54,
643f94c1902Sdrh   52, 56, 11,  2, 31, 52, 44, 39, 98,117, 98, 98, 97, 39, 10,  2, 29, 51, 57,
644f94c1902Sdrh   44, 39,120,121,122, 39, 11,  2, 31, 51, 56, 44, 39,102,111,117,114, 39,  6,
645f94c1902Sdrh    2, 21, 51, 55, 44, 51, 12,  2, 33, 51, 54, 44, 39, 98,117, 98, 98, 97, 39,
646f94c1902Sdrh    9,  2, 27, 51, 53, 44, 78, 85, 76, 76,  8,  2, 25, 51, 52, 44, 51, 46, 53,
647f94c1902Sdrh    6,  2, 21, 51, 51, 44, 50,  8,  2, 25, 51, 50, 44, 48, 46, 48,  7,  2, 23,
648f94c1902Sdrh   51, 49, 44, 49, 53, 14,  2, 37, 51, 48, 44, 88, 39, 53, 53, 54, 54, 55, 55,
649f94c1902Sdrh   39,  8,  2, 25, 51, 44, 78, 85, 76, 76,  6,  2, 21, 50, 57, 44, 52, 15,  2,
650f94c1902Sdrh   39, 50, 56, 44, 50, 49, 52, 55, 52, 56, 51, 54, 52, 56, 10,  2, 29, 50, 55,
651f94c1902Sdrh   44, 39,120,121,122, 39, 11,  2, 31, 50, 54, 44, 39,102,111,117,114, 39,  6,
652f94c1902Sdrh    2, 21, 50, 53, 44, 51, 12,  2, 33, 50, 52, 44, 39, 98,117, 98, 98, 97, 39,
653f94c1902Sdrh    9,  2, 27, 50, 51, 44, 78, 85, 76, 76,  8,  2, 25, 50, 50, 44, 51, 46, 53,
654f94c1902Sdrh    6,  2, 21, 50, 49, 44, 50,  8,  2, 25, 50, 48, 44, 48, 46, 48,  7,  2, 23,
655f94c1902Sdrh   50, 44, 51, 46, 53,  7,  2, 23, 49, 57, 44, 49, 53, 14,  2, 37, 49, 56, 44,
656f94c1902Sdrh   88, 39, 53, 53, 54, 54, 55, 55, 39,  6,  2, 21, 49, 55, 44, 52, 12,  2, 33,
657f94c1902Sdrh   49, 54, 44, 39, 98,117, 98, 98, 97, 39,  9,  2, 27, 49, 53, 44, 78, 85, 76,
658f94c1902Sdrh   76,  8,  2, 25, 49, 52, 44, 51, 46, 53,  6,  2, 21, 49, 51, 44, 50,  8,  2,
659f94c1902Sdrh   25, 49, 50, 44, 48, 46, 48,  7,  2, 23, 49, 49, 44, 49, 53, 14,  2, 37, 49,
660f94c1902Sdrh   48, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39,  5,  2, 19, 49, 44, 50, 10,  0,
661f94c1902Sdrh    0,  0, 22,  1, 32,  0,  1,243,  1,236,  1,230,  1,215,  1,207,  1,198,  1,
662f94c1902Sdrh  191,  1,182,  1,172,  1,159,  1,152,  1,140,  1,129,  1,118,  1,102,  1, 95,
663f94c1902Sdrh    1, 80,  1, 72,  1, 63,  1, 53,  1, 38,  1, 32,  0,  0,  0,  0,  0,  0,  0,
664f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
665f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
666f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
667f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
668f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
669f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
670f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
671f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
672f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
673f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
674f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
675f94c1902Sdrh    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
676f94c1902Sdrh    0,  5,  2, 19, 57, 44, 52, 14,  2, 37, 56, 44, 50, 49, 52, 55, 52, 56, 51,
677f94c1902Sdrh   54, 52, 56,  9,  2, 27, 55, 44, 39,120,121,122, 39,  8,  2, 25, 54, 52, 44,
678f94c1902Sdrh   48, 46, 48,  7,  2, 23, 54, 51, 44, 49, 53, 14,  2, 37, 54, 50, 44, 88, 39,
679f94c1902Sdrh   53, 53, 54, 54, 55, 55, 39,  6,  2, 21, 54, 49, 44, 52, 15,  2, 39, 54, 48,
680f94c1902Sdrh   44, 50, 49, 52, 55, 52, 56, 51, 54, 52, 56, 10,  2, 29, 54, 44, 39,102,111,
681f94c1902Sdrh  117,114, 39, 10,  2, 29, 53, 57, 44, 39,120,121,122, 39, 11,  2, 31, 53, 56,
682f94c1902Sdrh   44, 39,102,111,117,114, 39,  6,  2, 21, 53, 55, 44, 51, 12,  2, 33, 53, 54,
683f94c1902Sdrh   44, 39, 98,117, 98, 98, 97, 39,  9,  2, 27, 53, 53, 44, 78, 85, 76, 76,  8,
684f94c1902Sdrh    2, 25, 53, 52, 44, 51, 46, 53,  6,  2, 21, 53, 51, 44, 50,  8,  2, 25, 53,
685f94c1902Sdrh   50, 44, 48, 46, 48,  7,  2, 23, 53, 49, 44, 49, 53, 14,  2, 37, 53, 48, 44,
686f94c1902Sdrh   88, 39, 53, 53, 54, 54, 55, 55, 39,  5,  2, 19, 53, 44, 51,  6,  2, 21, 52,
687f94c1902Sdrh   57, 44, 52, 12,  2, 33, 52, 56, 44, 39, 98,117, 98, 98, 97, 39,
688f94c1902Sdrh };
689f94c1902Sdrh 
690f94c1902Sdrh /* Help message */
691f94c1902Sdrh static const char zHelp[] =
692f94c1902Sdrh   "Usage:\n"
693f94c1902Sdrh   "  sessionfuzz setup          -- Generate seed files c1.txt, c2.txt, etc.\n"
694f94c1902Sdrh   "  sessionfuzz run FILE ...   -- Run against fuzzed changeset FILE\n"
695f94c1902Sdrh   "  sessionfuzz run SQLAR ...  -- Run against all files in the SQL Archive\n"
696f94c1902Sdrh ;
697f94c1902Sdrh 
698f94c1902Sdrh #include <stdio.h>
699f94c1902Sdrh #include <string.h>
700f94c1902Sdrh #include <assert.h>
701*38f0ccc0Sdrh #ifndef OMIT_ZLIB
702f94c1902Sdrh #include "zlib.h"
703*38f0ccc0Sdrh #endif
704f94c1902Sdrh 
705f94c1902Sdrh /*
706f94c1902Sdrh ** Implementation of the "sqlar_uncompress(X,SZ)" SQL function
707f94c1902Sdrh **
708f94c1902Sdrh ** Parameter SZ is interpreted as an integer. If it is less than or
709f94c1902Sdrh ** equal to zero, then this function returns a copy of X. Or, if
710f94c1902Sdrh ** SZ is equal to the size of X when interpreted as a blob, also
711f94c1902Sdrh ** return a copy of X. Otherwise, decompress blob X using zlib
712f94c1902Sdrh ** utility function uncompress() and return the results (another
713f94c1902Sdrh ** blob).
714f94c1902Sdrh */
sqlarUncompressFunc(sqlite3_context * context,int argc,sqlite3_value ** argv)715f94c1902Sdrh static void sqlarUncompressFunc(
716f94c1902Sdrh   sqlite3_context *context,
717f94c1902Sdrh   int argc,
718f94c1902Sdrh   sqlite3_value **argv
719f94c1902Sdrh ){
720*38f0ccc0Sdrh #ifdef OMIT_ZLIB
721*38f0ccc0Sdrh   sqlite3_result_value(context, argv[0]);
722*38f0ccc0Sdrh #else
723f94c1902Sdrh   uLong nData;
724f94c1902Sdrh   uLongf sz;
725f94c1902Sdrh 
726f94c1902Sdrh   assert( argc==2 );
727f94c1902Sdrh   sz = sqlite3_value_int(argv[1]);
728f94c1902Sdrh 
729f94c1902Sdrh   if( sz<=0 || sz==(nData = sqlite3_value_bytes(argv[0])) ){
730f94c1902Sdrh     sqlite3_result_value(context, argv[0]);
731f94c1902Sdrh   }else{
732f94c1902Sdrh     const Bytef *pData= sqlite3_value_blob(argv[0]);
733f94c1902Sdrh     Bytef *pOut = sqlite3_malloc(sz);
734f94c1902Sdrh     if( Z_OK!=uncompress(pOut, &sz, pData, nData) ){
735f94c1902Sdrh       sqlite3_result_error(context, "error in uncompress()", -1);
736f94c1902Sdrh     }else{
737f94c1902Sdrh       sqlite3_result_blob(context, pOut, sz, SQLITE_TRANSIENT);
738f94c1902Sdrh     }
739f94c1902Sdrh     sqlite3_free(pOut);
740f94c1902Sdrh   }
741*38f0ccc0Sdrh #endif
742f94c1902Sdrh }
743f94c1902Sdrh 
744f94c1902Sdrh 
745f94c1902Sdrh /* Run a chunk of SQL.  If any errors happen, print an error message
746f94c1902Sdrh ** and exit.
747f94c1902Sdrh */
runSql(sqlite3 * db,const char * zSql)748f94c1902Sdrh static void runSql(sqlite3 *db, const char *zSql){
749f94c1902Sdrh   int rc;
750f94c1902Sdrh   char *zErr = 0;
751f94c1902Sdrh   rc = sqlite3_exec(db, zSql, 0, 0, &zErr);
752f94c1902Sdrh   if( rc || zErr ){
753f94c1902Sdrh     fprintf(stderr, "SQL failed: rc=%d zErr=[%s]\n", rc, zErr);
754f94c1902Sdrh     fprintf(stderr, "SQL: [%s]\n", zSql);
755f94c1902Sdrh     exit(1);
756f94c1902Sdrh   }
757f94c1902Sdrh }
758f94c1902Sdrh 
759f94c1902Sdrh /*
760f94c1902Sdrh ** Write buffer to disk
761f94c1902Sdrh */
writeFile(const char * zFilename,const void * pData,int nData)762f94c1902Sdrh static void writeFile(const char *zFilename, const void *pData, int nData){
763f94c1902Sdrh   FILE *out;
764f94c1902Sdrh   int n;
765f94c1902Sdrh   out = fopen(zFilename, "wb");
766f94c1902Sdrh   if( out==0 ){
767f94c1902Sdrh     fprintf(stderr, "cannot open \"%s\" for writing\n", zFilename);
768f94c1902Sdrh     exit(1);
769f94c1902Sdrh   }
770f94c1902Sdrh   n = (int)fwrite(pData, 1, nData, out);
771f94c1902Sdrh   fclose(out);
772f94c1902Sdrh   if( n!=nData ){
773f94c1902Sdrh     fprintf(stderr, "only wrote %d of %d bytes to \"%s\"\n",n,nData,zFilename);
774f94c1902Sdrh     exit(1);
775f94c1902Sdrh   }
776f94c1902Sdrh }
777f94c1902Sdrh 
778f94c1902Sdrh /*
779f94c1902Sdrh ** Generate a changeset from session pSess and write it to zFile
780f94c1902Sdrh */
makeChangeset(const char * zFile,sqlite3_session * pSess)781f94c1902Sdrh static void makeChangeset(const char *zFile, sqlite3_session *pSess){
782f94c1902Sdrh   void *pChg;
783f94c1902Sdrh   int nChg;
784f94c1902Sdrh   int rc;
785f94c1902Sdrh   rc = sqlite3session_changeset(pSess, &nChg, &pChg);
786f94c1902Sdrh   if( rc ){
787f94c1902Sdrh     fprintf(stderr, "sqlite3session_changeset() returned %d\n", rc);
788f94c1902Sdrh     exit(1);
789f94c1902Sdrh   }
790f94c1902Sdrh   writeFile(zFile, pChg, nChg);
791f94c1902Sdrh   sqlite3_free(pChg);
792f94c1902Sdrh }
793f94c1902Sdrh 
794f94c1902Sdrh /*
795f94c1902Sdrh ** Read a file from disk.  Space to hold the answer is obtained from
796f94c1902Sdrh ** sqlite3_malloc64().
797f94c1902Sdrh */
readFile(const char * zName,void ** ppData,int * pnData)798f94c1902Sdrh static void readFile(const char *zName, void **ppData, int *pnData){
799f94c1902Sdrh   FILE *in = fopen(zName, "rb");
800f94c1902Sdrh   long nIn;
801f94c1902Sdrh   size_t nRead;
802f94c1902Sdrh   char *pBuf;
803f94c1902Sdrh   *ppData = 0;
804f94c1902Sdrh   *pnData = 0;
805f94c1902Sdrh   if( in==0 ){
806f94c1902Sdrh     fprintf(stderr, "Cannot open \"%s\" for reading\n", zName);
807f94c1902Sdrh     exit(1);
808f94c1902Sdrh   }
809f94c1902Sdrh   fseek(in, 0, SEEK_END);
810f94c1902Sdrh   nIn = ftell(in);
811f94c1902Sdrh   rewind(in);
812f94c1902Sdrh   pBuf = sqlite3_malloc64( nIn+1 );
813f94c1902Sdrh   if( pBuf==0 ){
814f94c1902Sdrh     fprintf(stderr, "Failed to malloc %lld bytes\n", (sqlite3_int64)(nIn+1));
815f94c1902Sdrh     exit(1);
816f94c1902Sdrh   }
817f94c1902Sdrh   nRead = fread(pBuf, 1, nIn, in);
818f94c1902Sdrh   fclose(in);
81998cb7a48Smistachkin   if( nRead!=(size_t)nIn ){
820f94c1902Sdrh     fprintf(stderr, "Read only %d of %d bytes from %s\n", (int)nRead, (int)nIn,
821f94c1902Sdrh                     zName);
822f94c1902Sdrh     exit(1);
823f94c1902Sdrh   }
824f94c1902Sdrh   pBuf[nIn] = 0;
825f94c1902Sdrh   *pnData = nIn;
826f94c1902Sdrh   *ppData = pBuf;
827f94c1902Sdrh }
828f94c1902Sdrh 
829f94c1902Sdrh /*
830f94c1902Sdrh ** The conflict callback
831f94c1902Sdrh */
conflictCall(void * NotUsed,int eConflict,sqlite3_changeset_iter * p)832f94c1902Sdrh static int conflictCall(
833f94c1902Sdrh   void *NotUsed,
834f94c1902Sdrh   int eConflict,
835f94c1902Sdrh   sqlite3_changeset_iter *p
836f94c1902Sdrh ){
837f94c1902Sdrh   (void)NotUsed;
838f94c1902Sdrh   (void)p;
839f94c1902Sdrh   return SQLITE_CHANGESET_OMIT;
840f94c1902Sdrh }
841f94c1902Sdrh 
842f94c1902Sdrh /*
843f94c1902Sdrh ** Reset the database file
844f94c1902Sdrh */
db_reset(sqlite3 * db)845f94c1902Sdrh static void db_reset(sqlite3 *db){
846f94c1902Sdrh   unsigned char *pData;
847f94c1902Sdrh   int nData;
848f94c1902Sdrh   int rc;
849f94c1902Sdrh 
850f94c1902Sdrh   nData = sizeof(aDbBytes);
851f94c1902Sdrh   pData = sqlite3_malloc64( nData );
852f94c1902Sdrh   if( pData==0 ){
853f94c1902Sdrh     fprintf(stderr, "could not allocate %d bytes\n", nData);
854f94c1902Sdrh     exit(1);
855f94c1902Sdrh   }
856f94c1902Sdrh   memcpy(pData, aDbBytes, nData);
857f94c1902Sdrh   rc = sqlite3_deserialize(db, 0, pData, nData, nData,
858f94c1902Sdrh      SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE);
859f94c1902Sdrh   if( rc ){
860f94c1902Sdrh     fprintf(stderr, "sqlite3_deserialize() failed with %d: %s\n",
861f94c1902Sdrh             rc, sqlite3_errmsg(db));
862f94c1902Sdrh     exit(1);
863f94c1902Sdrh   }
864f94c1902Sdrh }
865f94c1902Sdrh 
866f94c1902Sdrh /*
867f94c1902Sdrh ** Given a full file pathname, return a pointer to the tail.
868f94c1902Sdrh ** Example:
869f94c1902Sdrh **
870f94c1902Sdrh **   input:    /home/drh/sqlite/abc.db
871f94c1902Sdrh **   output:   abc.db
872f94c1902Sdrh */
fileTail(const char * z)873f94c1902Sdrh static const char *fileTail(const char *z){
874f94c1902Sdrh   const char *zOut = z;
875f94c1902Sdrh   while( z[0] ){
876f94c1902Sdrh     if( z[0]=='/' && z[1]!=0 ) zOut = &z[1];
877f94c1902Sdrh     z++;
878f94c1902Sdrh   }
879f94c1902Sdrh   return zOut;
880f94c1902Sdrh }
881f94c1902Sdrh 
main(int argc,char ** argv)882f94c1902Sdrh int main(int argc, char **argv){
883f94c1902Sdrh   const char *zCmd;
884f94c1902Sdrh   sqlite3 *db;
885f94c1902Sdrh   int rc;
886f94c1902Sdrh   sqlite3_session *pSess;
887f94c1902Sdrh   sqlite3_stmt *pStmt;
888f94c1902Sdrh   void *pChgset;
889f94c1902Sdrh   int nChgset;
890f94c1902Sdrh   int bVerbose = 0;
891f94c1902Sdrh 
892f94c1902Sdrh   if( argc<2 ){
893f94c1902Sdrh     fprintf(stderr, "%s", zHelp);
894f94c1902Sdrh     exit(1);
895f94c1902Sdrh   }
896f94c1902Sdrh   rc = sqlite3_open_v2(":memory:",&db,
897f94c1902Sdrh                        SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, "memdb");
898f94c1902Sdrh   if( rc ){
899f94c1902Sdrh     fprintf(stderr, "Failed to open :memory: database: %s\n",
900f94c1902Sdrh             sqlite3_errmsg(db));
901f94c1902Sdrh     exit(1);
902f94c1902Sdrh   }
903f94c1902Sdrh   db_reset(db);
904f94c1902Sdrh   zCmd = argv[1];
905f94c1902Sdrh   if( strcmp(zCmd, "setup")==0 ){
906f94c1902Sdrh     if( argc!=2 ){
907f94c1902Sdrh       fprintf(stdout, "Wrong number of arguments.\n%s", zHelp);
908f94c1902Sdrh       exit(1);
909f94c1902Sdrh     }
910f94c1902Sdrh     runSql(db, zFillSql);
911f94c1902Sdrh     rc = sqlite3session_create(db, "main", &pSess);
912f94c1902Sdrh     if( rc ){
913f94c1902Sdrh       fprintf(stderr, "sqlite3session_create() returns %d\n", rc);
914f94c1902Sdrh       exit(1);
915f94c1902Sdrh     }
916f94c1902Sdrh     rc = sqlite3session_attach(pSess, 0);
917f94c1902Sdrh     if( rc ){
918f94c1902Sdrh       fprintf(stderr, "sqlite3session_attach(db,0) returns %d\n", rc);
919f94c1902Sdrh       exit(1);
920f94c1902Sdrh     }
921f94c1902Sdrh     runSql(db, "INSERT INTO t4(z) VALUES('');");
922f94c1902Sdrh     makeChangeset("c1.txt", pSess);
923f94c1902Sdrh     runSql(db,
924f94c1902Sdrh       "UPDATE t1 SET b=c, c=b WHERE a IN (5,7);\n"
925f94c1902Sdrh       "DELETE FROM t2 WHERE rowid IN (8,2);\n"
926f94c1902Sdrh       "INSERT OR IGNORE INTO t4 SELECT b FROM t1 WHERE b IS TRUE LIMIT 2;");
927f94c1902Sdrh     makeChangeset("c2.txt", pSess);
928f94c1902Sdrh     runSql(db, "UPDATE t3 SET x=y, y=NULL WHERE rowid IN (1,3);");
929f94c1902Sdrh     makeChangeset("c3.txt", pSess);
930f94c1902Sdrh     sqlite3session_delete(pSess);
931f94c1902Sdrh   }else
932f94c1902Sdrh   if( strcmp(zCmd, "run")==0 ){
933f94c1902Sdrh     int i;
934f94c1902Sdrh     if( argc<3 ){
935f94c1902Sdrh       fprintf(stdout, "Wrong number of arguments.\n%s", zHelp);
936f94c1902Sdrh       exit(1);
937f94c1902Sdrh     }
938f94c1902Sdrh     for(i=2; i<argc; i++){
939f94c1902Sdrh       if( strcmp(argv[i],"-v")==0 ){
940f94c1902Sdrh         bVerbose = 1;
941f94c1902Sdrh         continue;
942f94c1902Sdrh       }
943f94c1902Sdrh       readFile(argv[i], &pChgset, &nChgset);
944f94c1902Sdrh       if( nChgset >= 512
945f94c1902Sdrh        && memcmp(pChgset, "SQLite format 3", 16)==0
946f94c1902Sdrh       ){
947f94c1902Sdrh         sqlite3 *db2;
948069720eaSmistachkin         sqlite3_stmt *pStmt2;
949f94c1902Sdrh         int nCase = 0;
950f94c1902Sdrh         /* This file is an SQL Archive containing many changesets */
951f94c1902Sdrh         if( !bVerbose ){ printf("%s: ", fileTail(argv[i])); fflush(stdout); }
952f94c1902Sdrh         sqlite3_open_v2(":memory:", &db2,
953f94c1902Sdrh                         SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE, "memdb");
954f94c1902Sdrh         sqlite3_deserialize(db2, 0, pChgset, nChgset, nChgset,
955f94c1902Sdrh               SQLITE_DESERIALIZE_READONLY | SQLITE_DESERIALIZE_FREEONCLOSE);
956f94c1902Sdrh         sqlite3_create_function(db2, "sqlar_uncompress", 2, SQLITE_UTF8, 0,
957f94c1902Sdrh                                  sqlarUncompressFunc, 0, 0);
958f94c1902Sdrh         rc = sqlite3_prepare_v2(db2, "SELECT name, sqlar_uncompress(data,sz)"
959069720eaSmistachkin                                      "  FROM sqlar", -1, &pStmt2, 0);
960f94c1902Sdrh         if( rc ){
961f94c1902Sdrh           fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db2));
962f94c1902Sdrh           exit(1);
963f94c1902Sdrh         }
964069720eaSmistachkin         while( SQLITE_ROW==sqlite3_step(pStmt2) ){
965f94c1902Sdrh           if( bVerbose ){
966069720eaSmistachkin             printf("%s/%s:", fileTail(argv[i]), sqlite3_column_text(pStmt2,0));
967f94c1902Sdrh             fflush(stdout);
968f94c1902Sdrh           }
969f94c1902Sdrh           runSql(db, "BEGIN");
970069720eaSmistachkin           pChgset = (unsigned char*)sqlite3_column_blob(pStmt2, 1);
971069720eaSmistachkin           nChgset = sqlite3_column_bytes(pStmt2, 1);
972f94c1902Sdrh           rc = sqlite3changeset_apply(db, nChgset, pChgset, 0, conflictCall, 0);
973f94c1902Sdrh           if( bVerbose ){
974f94c1902Sdrh             printf(" Ok.  rc=%d\n", rc);
975f94c1902Sdrh             fflush(stdout);
976f94c1902Sdrh           }
977f94c1902Sdrh           runSql(db, "ROLLBACK");
978f94c1902Sdrh           nCase++;
979f94c1902Sdrh         }
980069720eaSmistachkin         sqlite3_finalize(pStmt2);
981f94c1902Sdrh         sqlite3_close(db2);
982f94c1902Sdrh         if( bVerbose ) printf("%s: ", fileTail(argv[i]));
983f94c1902Sdrh         printf(" %d cases, 0 crashes\n", nCase);
984f94c1902Sdrh         fflush(stdout);
985f94c1902Sdrh       }else{
986f94c1902Sdrh         /* The named file is just an ordinary changeset */
987f94c1902Sdrh         printf("%s:", fileTail(argv[i]));
988f94c1902Sdrh         fflush(stdout);
989f94c1902Sdrh         runSql(db, "BEGIN");
990f94c1902Sdrh         rc = sqlite3changeset_apply(db, nChgset, pChgset, 0, conflictCall, 0);
991f94c1902Sdrh         printf(" %d\n", rc);
992f94c1902Sdrh         fflush(stdout);
993f94c1902Sdrh         runSql(db, "ROLLBACK");
994f94c1902Sdrh         sqlite3_free(pChgset);
995f94c1902Sdrh       }
996f94c1902Sdrh     }
997f94c1902Sdrh   }else
998f94c1902Sdrh   {
999f94c1902Sdrh     fprintf(stderr, "%s", zHelp);
1000f94c1902Sdrh     exit(1);
1001f94c1902Sdrh   }
1002f94c1902Sdrh   rc = sqlite3_prepare_v2(db, "PRAGMA integrity_check;", -1, &pStmt, 0);
1003f94c1902Sdrh   if( rc ){
1004f94c1902Sdrh     fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db));
1005f94c1902Sdrh     exit(1);
1006f94c1902Sdrh   }
1007f94c1902Sdrh   if( sqlite3_step(pStmt)!=SQLITE_ROW
1008f94c1902Sdrh    || strcmp((const char*)sqlite3_column_text(pStmt,0),"ok")!=0
1009f94c1902Sdrh   ){
1010f94c1902Sdrh     fprintf(stderr, "Integrity check failed!\n");
1011f94c1902Sdrh     do{
1012f94c1902Sdrh       fprintf(stderr, "%s\n", sqlite3_column_text(pStmt,0));
1013f94c1902Sdrh     }while( sqlite3_step(pStmt)==SQLITE_ROW );
1014f94c1902Sdrh   }
1015f94c1902Sdrh   sqlite3_finalize(pStmt);
1016f94c1902Sdrh   sqlite3_close(db);
1017f94c1902Sdrh   if( sqlite3_memory_used()>0 ){
1018f94c1902Sdrh     fprintf(stderr, "memory leak of %lld bytes\n",
1019f94c1902Sdrh          sqlite3_memory_used());
1020f94c1902Sdrh     exit(1);
1021f94c1902Sdrh   }
1022f94c1902Sdrh   return 0;
1023f94c1902Sdrh }
1024