1 /* $OSSEC, os_regex_internal.h, v0.3, 2005/04/05, Daniel B. Cid$ */
3 /* Copyright (C) 2009 Trend Micro Inc.
6 * This program is a free software; you can redistribute it
7 * and/or modify it under the terms of the GNU General Public
8 * License (version 3) as published by the FSF - Free Software
13 #ifndef __OS_INTERNAL_H
14 #define __OS_INTERNAL_H
18 * Defining some caracters to be used.
20 #define BACKSLASH '\\'
23 #define BEGINREGEX '^'
33 #define BEGIN_SET 0000200
34 #define END_SET 0000400
38 typedef unsigned char uchar;
41 /* _IsD Returns 1 if it is a number */
42 #define _IsD(x) ((x >= 48) && (x <= 57))
45 /* Is it a character ?
49 #define _IsW(x) ((x >= 48 && x <= 57 )|| \
50 (x >= 65 && x <= 90 )|| \
51 (x >= 97 && x <= 122))
54 /* Is it a ' ' (blank)
58 #define _IsS(x) (x == 32)
61 /* Check for parenthesis */
62 #define prts(x) (x == '(')
66 * Returns 1 on success
68 #define isPlus(x) ((x == '+') || (x == '*'))
75 /* Is "y" a valid "x"?.
76 * Returns 1 on success
78 #define Regex(x,y) (regexmap[x][y] == TRUECHAR)
79 #define Regex2(x,y) (x == 'd' && y >= 48 && y <= 57)|| \
80 (x == 's' && y == 32)|| \
82 ((y >= 40 && y <= 46)|| \
83 (y >= 58 && y <= 63)))|| \
86 (y >= 48 && y <= 57)|| \
87 (y >= 65 && y <= 90)|| \
88 (y >= 97 && y <= 122)))|| \
90 ((x == '\\') && (y == '\\'))|| \
91 ((x == 'n') && (y == '\n'))|| \
92 (x == 'S' && y != 32)|| \
93 (x == 'D' && (y < 48 || y > 57))|| \
94 (x == 'W' && (y < 48 || y > 122 || \
95 (y > 57 && y <65)||(y > 90 && y< 97)))
98 /* Charmap for case insensitive search */
99 static const uchar charmap[] = {
100 '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
101 '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
102 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
103 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
104 '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
105 '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
106 '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
107 '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
108 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
109 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
110 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
111 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
112 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
113 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
114 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
115 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
116 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
117 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
118 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
119 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
120 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
121 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
122 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
123 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
124 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
125 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
126 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
127 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
128 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
129 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
130 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
131 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
154 static const uchar regexmap[][256] =
157 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
158 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
159 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
160 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
161 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
162 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
163 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
164 '\001', '\001', '\000', '\073', '\074', '\075', '\076', '\077',
165 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
166 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
167 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
168 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
169 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
170 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
171 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
172 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
173 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
174 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
175 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
176 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
177 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
178 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
179 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
180 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
181 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
182 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
183 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
184 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
185 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
186 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
187 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
188 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
191 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
192 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
193 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
194 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
195 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
196 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
197 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
198 '\001', '\001', '\000', '\073', '\074', '\075', '\076', '\077',
199 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
200 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
201 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
202 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
203 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
204 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
205 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
206 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
207 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
208 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
209 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
210 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
211 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
212 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
213 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
214 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
215 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
216 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
217 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
218 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
219 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
220 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
221 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
222 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
225 '\000', '\000', '\002', '\003', '\004', '\005', '\006', '\007',
226 '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
227 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
228 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
229 '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
230 '\050', '\051', '\052', '\053', '\054', '\001', '\056', '\057',
231 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
232 '\001', '\001', '\072', '\073', '\074', '\075', '\076', '\077',
233 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
234 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
235 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
236 '\001', '\001', '\001', '\133', '\134', '\135', '\136', '\001',
237 '\140', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
238 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
239 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
240 '\001', '\001', '\001', '\173', '\174', '\175', '\176', '\177',
241 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
242 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
243 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
244 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
245 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
246 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
247 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
248 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
249 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
250 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
251 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
252 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
253 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
254 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
255 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
256 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
259 '\000', '\000', '\002', '\003', '\004', '\005', '\006', '\007',
260 '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
261 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
262 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
263 '\001', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
264 '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
265 '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
266 '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
267 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
268 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
269 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
270 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
271 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
272 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
273 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
274 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
275 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
276 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
277 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
278 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
279 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
280 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
281 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
282 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
283 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
284 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
285 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
286 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
287 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
288 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
289 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
290 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
293 '\000', '\000', '\002', '\003', '\004', '\005', '\006', '\007',
294 '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
295 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
296 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
297 '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
298 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\057',
299 '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
300 '\070', '\071', '\001', '\001', '\001', '\001', '\001', '\001',
301 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
302 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
303 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
304 '\170', '\171', '\172', '\001', '\000', '\001', '\136', '\137',
305 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
306 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
307 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
308 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
309 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
310 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
311 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
312 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
313 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
314 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
315 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
316 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
317 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
318 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
319 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
320 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
321 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
322 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
323 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
324 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
327 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
328 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
329 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
330 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
331 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
332 '\001', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
333 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
334 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
335 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
336 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
337 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
338 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
339 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
340 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
341 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
342 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
343 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
344 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
345 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
346 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
347 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
348 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
349 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
350 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
351 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
352 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
353 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
354 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
355 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
356 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
357 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
358 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
361 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
362 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
363 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
364 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
365 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
366 '\000', '\001', '\000', '\000', '\000', '\000', '\000', '\000',
367 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
368 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
369 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
370 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
371 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
372 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
373 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
374 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
375 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
376 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
377 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
378 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
379 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
380 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
381 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
382 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
383 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
384 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
385 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
386 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
387 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
388 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
389 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
390 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
391 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
392 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
395 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
396 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
397 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
398 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
399 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
400 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
401 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
402 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
403 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
404 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
405 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
406 '\000', '\000', '\000', '\000', '\001', '\000', '\000', '\000',
407 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
408 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
409 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
410 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
411 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
412 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
413 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
414 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
415 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
416 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
417 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
418 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
419 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
420 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
421 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
422 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
423 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
424 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
425 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
426 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
429 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
430 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
431 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
432 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
433 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
434 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
435 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
436 '\000', '\000', '\001', '\001', '\001', '\001', '\001', '\001',
437 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
438 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
439 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
440 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
441 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
442 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
443 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
444 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
445 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
446 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
447 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
448 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
449 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
450 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
451 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
452 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
453 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
454 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
455 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
456 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
457 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
458 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
459 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
460 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
463 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
464 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
465 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
466 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
467 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
468 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
469 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
470 '\000', '\000', '\001', '\001', '\001', '\001', '\001', '\001',
471 '\001', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
472 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
473 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
474 '\000', '\000', '\000', '\001', '\001', '\001', '\001', '\000',
475 '\001', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
476 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
477 '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000',
478 '\000', '\000', '\000', '\001', '\001', '\001', '\001', '\000',
479 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
480 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
481 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
482 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
483 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
484 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
485 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
486 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
487 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
488 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
489 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
490 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
491 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
492 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
493 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
494 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
497 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
498 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
499 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
500 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
501 '\000', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
502 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
503 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
504 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
505 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
506 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
507 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
508 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
509 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
510 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
511 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
512 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
513 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
514 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
515 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
516 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
517 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
518 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
519 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
520 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
521 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
522 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
523 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
524 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
525 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
526 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
527 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
528 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
531 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
532 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
533 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
534 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
535 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
536 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
537 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
538 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
539 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
540 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
541 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
542 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
543 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
544 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
545 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
546 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
547 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
548 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
549 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
550 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
551 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
552 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
553 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
554 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
555 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
556 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
557 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
558 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
559 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
560 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
561 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
562 '\001', '\001', '\001', '\001', '\001', '\001', '\001', '\001',
565 '\000', '\000', '\002', '\003', '\004', '\005', '\006', '\007',
566 '\010', '\001', '\012', '\013', '\014', '\015', '\016', '\017',
567 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
568 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
569 '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
570 '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
571 '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
572 '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
573 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
574 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
575 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
576 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
577 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
578 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
579 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
580 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
581 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
582 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
583 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
584 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
585 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
586 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
587 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
588 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
589 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
590 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
591 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
592 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
593 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
594 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
595 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
596 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
599 '\000', '\000', '\002', '\003', '\004', '\005', '\006', '\007',
600 '\010', '\012', '\012', '\013', '\014', '\015', '\016', '\017',
601 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
602 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
603 '\040', '\041', '\042', '\043', '\001', '\045', '\046', '\047',
604 '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
605 '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
606 '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
607 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
608 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
609 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
610 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
611 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
612 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
613 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
614 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
615 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
616 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
617 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
618 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
619 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
620 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
621 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
622 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
623 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
624 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
625 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
626 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
627 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
628 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
629 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
630 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
633 '\000', '\000', '\002', '\003', '\004', '\005', '\006', '\007',
634 '\010', '\012', '\012', '\013', '\014', '\015', '\016', '\017',
635 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
636 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
637 '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
638 '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
639 '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
640 '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
641 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
642 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
643 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
644 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
645 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
646 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
647 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
648 '\170', '\171', '\172', '\173', '\001', '\175', '\176', '\177',
649 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
650 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
651 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
652 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
653 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
654 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
655 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
656 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
657 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
658 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
659 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
660 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
661 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
662 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
663 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
664 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
669 '\000', '\000', '\002', '\003', '\004', '\005', '\006', '\007',
670 '\010', '\012', '\012', '\013', '\014', '\015', '\016', '\017',
671 '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
672 '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
673 '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
674 '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
675 '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
676 '\070', '\071', '\072', '\073', '\001', '\075', '\076', '\077',
677 '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
678 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
679 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
680 '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
681 '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
682 '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
683 '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
684 '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
685 '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
686 '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
687 '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
688 '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
689 '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
690 '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
691 '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
692 '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
693 '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
694 '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
695 '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
696 '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
697 '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
698 '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
699 '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
700 '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',