1 // Hyperbolic Rogue -- pattern tables
2 // Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
3
4 /** \file patterns.cpp
5 * \brief tables that the complex patterns (Emerald, Palace, Field Pattern) are based on
6 */
7
8 #include "hyper.h"
9 namespace hr {
10
11 // === EMERALD PATTERN ===
12
13 // rules for the emeraldvalues of heptagons.
emerald_heptagon(int parent,int dir)14 EX int emerald_heptagon(int parent, int dir) {
15
16 if(a46) return parent ^ (dir & 1) ^ 2 ^ (((parent^dir) & 1) << 2);
17
18 if(S7 == 8 && dir > 3) dir--;
19
20 // no emeraldgen here
21 if(parent == 0) return 0;
22
23 #define RULE(t1,s1,d,t2,s2) \
24 if(parent == t1*8+s1 && dir == d) return t2*8+s2;
25
26 RULE(8,0,3,12,4)
27 RULE(8,0,4,12,0)
28 RULE(8,0,5,42,0)
29 RULE(8,1,3,40,0)
30 RULE(8,1,4,12,4)
31 RULE(8,1,5,12,0)
32 RULE(8,2,3,34,0)
33 RULE(8,2,4,40,0)
34 RULE(8,2,5,12,4)
35 RULE(8,3,3,10,0)
36 RULE(8,3,4,34,0)
37 RULE(8,3,5,40,0)
38 RULE(8,4,3,32,0)
39 RULE(8,4,4,10,0)
40 RULE(8,4,5,34,0)
41 RULE(8,5,3,42,0)
42 RULE(8,5,4,32,0)
43 RULE(8,5,5,10,0)
44 RULE(8,6,3,12,0)
45 RULE(8,6,4,42,0)
46 RULE(8,6,5,32,0)
47 RULE(9,0,3,13,4)
48 RULE(9,0,4,13,0)
49 RULE(9,0,5,43,0)
50 RULE(9,1,3,41,0)
51 RULE(9,1,4,13,4)
52 RULE(9,1,5,13,0)
53 RULE(9,2,3,35,0)
54 RULE(9,2,4,41,0)
55 RULE(9,2,5,13,4)
56 RULE(9,3,3,11,0)
57 RULE(9,3,4,35,0)
58 RULE(9,3,5,41,0)
59 RULE(9,4,3,33,0)
60 RULE(9,4,4,11,0)
61 RULE(9,4,5,35,0)
62 RULE(9,5,3,43,0)
63 RULE(9,5,4,33,0)
64 RULE(9,5,5,11,0)
65 RULE(9,6,3,13,0)
66 RULE(9,6,4,43,0)
67 RULE(9,6,5,33,0)
68 RULE(10,0,3,14,4)
69 RULE(10,0,4,14,0)
70 RULE(10,0,5,40,3)
71 RULE(10,1,3,42,4)
72 RULE(10,1,4,14,4)
73 RULE(10,1,5,14,0)
74 RULE(10,2,3,32,1)
75 RULE(10,2,4,42,4)
76 RULE(10,2,5,14,4)
77 RULE(10,3,3,8,0)
78 RULE(10,3,4,32,1)
79 RULE(10,3,5,42,4)
80 RULE(10,4,3,34,6)
81 RULE(10,4,4,8,0)
82 RULE(10,4,5,32,1)
83 RULE(10,5,3,40,3)
84 RULE(10,5,4,34,6)
85 RULE(10,5,5,8,0)
86 RULE(10,6,3,14,0)
87 RULE(10,6,4,40,3)
88 RULE(10,6,5,34,6)
89 RULE(11,0,3,15,4)
90 RULE(11,0,4,15,0)
91 RULE(11,0,5,41,3)
92 RULE(11,1,3,43,4)
93 RULE(11,1,4,15,4)
94 RULE(11,1,5,15,0)
95 RULE(11,2,3,33,1)
96 RULE(11,2,4,43,4)
97 RULE(11,2,5,15,4)
98 RULE(11,3,3,9,0)
99 RULE(11,3,4,33,1)
100 RULE(11,3,5,43,4)
101 RULE(11,4,3,35,6)
102 RULE(11,4,4,9,0)
103 RULE(11,4,5,33,1)
104 RULE(11,5,3,41,3)
105 RULE(11,5,4,35,6)
106 RULE(11,5,5,9,0)
107 RULE(11,6,3,15,0)
108 RULE(11,6,4,41,3)
109 RULE(11,6,5,35,6)
110 RULE(12,0,3,8,4)
111 RULE(12,0,4,40,1)
112 RULE(12,0,5,14,2)
113 RULE(12,1,3,12,6)
114 RULE(12,1,4,8,4)
115 RULE(12,1,5,40,1)
116 RULE(12,2,0,14,2)
117 RULE(12,2,1,42,6)
118 RULE(12,2,2,8,3)
119 RULE(12,2,3,12,5)
120 RULE(12,2,4,12,6)
121 RULE(12,2,5,8,4)
122 RULE(12,2,6,40,1)
123 RULE(12,3,3,8,3)
124 RULE(12,3,4,12,5)
125 RULE(12,3,5,12,6)
126 RULE(12,4,3,42,6)
127 RULE(12,4,4,8,3)
128 RULE(12,4,5,12,5)
129 RULE(12,5,3,14,2)
130 RULE(12,5,4,42,6)
131 RULE(12,5,5,8,3)
132 RULE(12,6,3,40,1)
133 RULE(12,6,4,14,2)
134 RULE(12,6,5,42,6)
135 RULE(13,0,3,9,4)
136 RULE(13,0,4,41,1)
137 RULE(13,0,5,15,2)
138 RULE(13,1,3,13,6)
139 RULE(13,1,4,9,4)
140 RULE(13,1,5,41,1)
141 RULE(13,2,3,13,5)
142 RULE(13,2,4,13,6)
143 RULE(13,2,5,9,4)
144 RULE(13,3,3,9,3)
145 RULE(13,3,4,13,5)
146 RULE(13,3,5,13,6)
147 RULE(13,4,3,43,6)
148 RULE(13,4,4,9,3)
149 RULE(13,4,5,13,5)
150 RULE(13,5,3,15,2)
151 RULE(13,5,4,43,6)
152 RULE(13,5,5,9,3)
153 RULE(13,6,3,41,1)
154 RULE(13,6,4,15,2)
155 RULE(13,6,5,43,6)
156 RULE(14,0,3,10,4)
157 RULE(14,0,4,42,5)
158 RULE(14,0,5,12,2)
159 RULE(14,1,3,14,6)
160 RULE(14,1,4,10,4)
161 RULE(14,1,5,42,5)
162 RULE(14,2,0,12,2)
163 RULE(14,2,3,14,5)
164 RULE(14,2,4,14,6)
165 RULE(14,2,5,10,4)
166 RULE(14,3,3,10,3)
167 RULE(14,3,4,14,5)
168 RULE(14,3,5,14,6)
169 RULE(14,4,3,40,2)
170 RULE(14,4,4,10,3)
171 RULE(14,4,5,14,5)
172 RULE(14,5,3,12,2)
173 RULE(14,5,4,40,2)
174 RULE(14,5,5,10,3)
175 RULE(14,6,3,42,5)
176 RULE(14,6,4,12,2)
177 RULE(14,6,5,40,2)
178 RULE(15,0,3,11,4)
179 RULE(15,0,4,43,5)
180 RULE(15,0,5,13,2)
181 RULE(15,1,3,15,6)
182 RULE(15,1,4,11,4)
183 RULE(15,1,5,43,5)
184 RULE(15,2,3,15,5)
185 RULE(15,2,4,15,6)
186 RULE(15,2,5,11,4)
187 RULE(15,3,3,11,3)
188 RULE(15,3,4,15,5)
189 RULE(15,3,5,15,6)
190 RULE(15,4,3,41,2)
191 RULE(15,4,4,11,3)
192 RULE(15,4,5,15,5)
193 RULE(15,5,3,13,2)
194 RULE(15,5,4,41,2)
195 RULE(15,5,5,11,3)
196 RULE(15,6,3,43,5)
197 RULE(15,6,4,13,2)
198 RULE(15,6,5,41,2)
199 RULE(32,0,3,43,2)
200 RULE(32,0,4,33,3)
201 RULE(32,0,5,42,3)
202 RULE(32,1,3,33,5)
203 RULE(32,1,4,43,2)
204 RULE(32,1,5,33,3)
205 RULE(32,2,3,42,1)
206 RULE(32,2,4,33,5)
207 RULE(32,2,5,43,2)
208 RULE(32,3,3,8,1)
209 RULE(32,3,4,42,1)
210 RULE(32,3,5,33,5)
211 RULE(32,4,3,10,6)
212 RULE(32,4,4,8,1)
213 RULE(32,4,5,42,1)
214 RULE(32,5,3,42,3)
215 RULE(32,5,4,10,6)
216 RULE(32,5,5,8,1)
217 RULE(32,6,3,33,3)
218 RULE(32,6,4,42,3)
219 RULE(32,6,5,10,6)
220 RULE(33,0,3,42,2)
221 RULE(33,0,4,32,3)
222 RULE(33,0,5,43,3)
223 RULE(33,1,3,32,5)
224 RULE(33,1,4,42,2)
225 RULE(33,1,5,32,3)
226 RULE(33,2,3,43,1)
227 RULE(33,2,4,32,5)
228 RULE(33,2,5,42,2)
229 RULE(33,3,3,9,1)
230 RULE(33,3,4,43,1)
231 RULE(33,3,5,32,5)
232 RULE(33,4,3,11,6)
233 RULE(33,4,4,9,1)
234 RULE(33,4,5,43,1)
235 RULE(33,5,3,43,3)
236 RULE(33,5,4,11,6)
237 RULE(33,5,5,9,1)
238 RULE(33,6,3,32,3)
239 RULE(33,6,4,43,3)
240 RULE(33,6,5,11,6)
241 RULE(34,0,3,35,4)
242 RULE(34,0,4,41,5)
243 RULE(34,0,5,35,2)
244 RULE(34,1,3,40,4)
245 RULE(34,1,4,35,4)
246 RULE(34,1,5,41,5)
247 RULE(34,2,3,10,1)
248 RULE(34,2,4,40,4)
249 RULE(34,2,5,35,4)
250 RULE(34,3,3,8,6)
251 RULE(34,3,4,10,1)
252 RULE(34,3,5,40,4)
253 RULE(34,4,3,40,6)
254 RULE(34,4,4,8,6)
255 RULE(34,4,5,10,1)
256 RULE(34,5,3,35,2)
257 RULE(34,5,4,40,6)
258 RULE(34,5,5,8,6)
259 RULE(34,6,3,41,5)
260 RULE(34,6,4,35,2)
261 RULE(34,6,5,40,6)
262 RULE(35,0,3,34,4)
263 RULE(35,0,4,40,5)
264 RULE(35,0,5,34,2)
265 RULE(35,1,3,41,4)
266 RULE(35,1,4,34,4)
267 RULE(35,1,5,40,5)
268 RULE(35,2,3,11,1)
269 RULE(35,2,4,41,4)
270 RULE(35,2,5,34,4)
271 RULE(35,3,3,9,6)
272 RULE(35,3,4,11,1)
273 RULE(35,3,5,41,4)
274 RULE(35,4,3,41,6)
275 RULE(35,4,4,9,6)
276 RULE(35,4,5,11,1)
277 RULE(35,5,3,34,2)
278 RULE(35,5,4,41,6)
279 RULE(35,5,5,9,6)
280 RULE(35,6,3,40,5)
281 RULE(35,6,4,34,2)
282 RULE(35,6,5,41,6)
283 RULE(40,0,3,34,5)
284 RULE(40,0,4,10,2)
285 RULE(40,0,5,14,1)
286 RULE(40,1,3,35,3)
287 RULE(40,1,4,34,5)
288 RULE(40,1,5,10,2)
289 RULE(40,2,3,34,1)
290 RULE(40,2,4,35,3)
291 RULE(40,2,5,34,5)
292 RULE(40,3,3,8,5)
293 RULE(40,3,4,34,1)
294 RULE(40,3,5,35,3)
295 RULE(40,4,3,12,3)
296 RULE(40,4,4,8,5)
297 RULE(40,4,5,34,1)
298 RULE(40,5,3,14,1)
299 RULE(40,5,4,12,3)
300 RULE(40,5,5,8,5)
301 RULE(40,6,3,10,2)
302 RULE(40,6,4,14,1)
303 RULE(40,6,5,12,3)
304 RULE(41,0,3,35,5)
305 RULE(41,0,4,11,2)
306 RULE(41,0,5,15,1)
307 RULE(41,1,3,34,3)
308 RULE(41,1,4,35,5)
309 RULE(41,1,5,11,2)
310 RULE(41,2,3,35,1)
311 RULE(41,2,4,34,3)
312 RULE(41,2,5,35,5)
313 RULE(41,3,3,9,5)
314 RULE(41,3,4,35,1)
315 RULE(41,3,5,34,3)
316 RULE(41,4,3,13,3)
317 RULE(41,4,4,9,5)
318 RULE(41,4,5,35,1)
319 RULE(41,5,3,15,1)
320 RULE(41,5,4,13,3)
321 RULE(41,5,5,9,5)
322 RULE(41,6,3,11,2)
323 RULE(41,6,4,15,1)
324 RULE(41,6,5,13,3)
325 RULE(42,0,3,10,5)
326 RULE(42,0,4,32,2)
327 RULE(42,0,5,33,4)
328 RULE(42,1,3,14,3)
329 RULE(42,1,4,10,5)
330 RULE(42,1,5,32,2)
331 RULE(42,2,3,12,1)
332 RULE(42,2,4,14,3)
333 RULE(42,2,5,10,5)
334 RULE(42,3,3,8,2)
335 RULE(42,3,4,12,1)
336 RULE(42,3,5,14,3)
337 RULE(42,4,3,32,6)
338 RULE(42,4,4,8,2)
339 RULE(42,4,5,12,1)
340 RULE(42,5,3,33,4)
341 RULE(42,5,4,32,6)
342 RULE(42,5,5,8,2)
343 RULE(42,6,3,32,2)
344 RULE(42,6,4,33,4)
345 RULE(42,6,5,32,6)
346 RULE(43,0,3,11,5)
347 RULE(43,0,4,33,2)
348 RULE(43,0,5,32,4)
349 RULE(43,1,3,15,3)
350 RULE(43,1,4,11,5)
351 RULE(43,1,5,33,2)
352 RULE(43,2,3,13,1)
353 RULE(43,2,4,15,3)
354 RULE(43,2,5,11,5)
355 RULE(43,3,3,9,2)
356 RULE(43,3,4,13,1)
357 RULE(43,3,5,15,3)
358 RULE(43,4,3,33,6)
359 RULE(43,4,4,9,2)
360 RULE(43,4,5,13,1)
361 RULE(43,5,3,32,4)
362 RULE(43,5,4,33,6)
363 RULE(43,5,5,9,2)
364 RULE(43,6,3,33,2)
365 RULE(43,6,4,32,4)
366 RULE(43,6,5,33,6)
367
368 #undef RULE
369
370 if(weirdhyperbolic || GDIM == 3) return 0;
371 printf("HEPTAGONAL RULE MISSING for (%d,%d)\n", parent,dir);
372 exit(1);
373 }
374
375 // calculate the emeraldvalue of a hexagonal cell,
376 // based on the emeraldvalues of the neighbor heptacells.
emerald_hexagon(int a,int b,int c)377 EX int emerald_hexagon(int a, int b, int c) {
378 // pick the lexicographically smallest representation of the cycle
379 if(b <= a || c<a) { int t=a; a=b; b=c; c=t; }
380 if(b <= a || c<a) { int t=a; a=b; b=c; c=t; }
381
382 if(a==8 && b == 10 && c== 34) return 30;
383 if(a==8 && b == 12 && c== 12) return 4;
384 if(a==8 && b == 12 && c== 42) return 48;
385 if(a==8 && b == 32 && c== 10) return 28;
386 if(a==8 && b == 34 && c== 40) return 20;
387 if(a==8 && b == 40 && c== 12) return 16;
388 if(a==8 && b == 42 && c== 32) return 52;
389 if(a==9 && b == 11 && c== 35) return 31;
390 if(a==9 && b == 13 && c== 13) return 5;
391 if(a==9 && b == 13 && c== 43) return 49;
392 if(a==9 && b == 33 && c== 11) return 29;
393 if(a==9 && b == 35 && c== 41) return 21;
394 if(a==9 && b == 41 && c== 13) return 17;
395 if(a==9 && b == 43 && c== 33) return 53;
396 if(a==10 && b == 14 && c== 14) return 6;
397 if(a==10 && b == 14 && c== 40) return 50;
398 if(a==10 && b == 32 && c== 42) return 22;
399 if(a==10 && b == 40 && c== 34) return 54;
400 if(a==10 && b == 42 && c== 14) return 18;
401 if(a==11 && b == 15 && c== 15) return 7;
402 if(a==11 && b == 15 && c== 41) return 51;
403 if(a==11 && b == 33 && c== 43) return 23;
404 if(a==11 && b == 41 && c== 35) return 55;
405 if(a==11 && b == 43 && c== 15) return 19;
406 if(a==12 && b == 12 && c== 12) return 44;
407 if(a==12 && b == 14 && c== 42) return 38;
408 if(a==12 && b == 40 && c== 14) return 36;
409 if(a==13 && b == 13 && c== 13) return 45;
410 if(a==13 && b == 15 && c== 43) return 39;
411 if(a==13 && b == 41 && c== 15) return 37;
412 if(a==14 && b == 14 && c== 14) return 46;
413 if(a==15 && b == 15 && c== 15) return 47;
414 if(a==32 && b == 33 && c== 42) return 26;
415 if(a==32 && b == 33 && c== 43) return 57;
416 if(a==32 && b == 42 && c== 33) return 56;
417 if(a==32 && b == 43 && c== 33) return 27;
418 if(a==34 && b == 35 && c== 40) return 24;
419 if(a==34 && b == 35 && c== 41) return 59;
420 if(a==34 && b == 40 && c== 35) return 58;
421 if(a==34 && b == 41 && c== 35) return 25;
422 if(!weirdhyperbolic)
423 printf("HEXAGONAL RULE MISSING for (%d,%d,%d)\n", a,b,c);
424 return 0;
425 // exit(1);
426 }
427
428 int emeraldtable[100][7] = {
429 {0,0,0,0,0,0,0,},
430 {0,0,0,0,0,0,0,},
431 {0,0,0,0,0,0,0,},
432 {0,0,0,0,0,0,0,},
433 {12,44,12,48,8,16,0,},
434 {13,49,9,17,13,45,0,},
435 {14,46,14,50,10,18,0,},
436 {11,19,15,47,15,51,0,},
437 {16,4,48,52,28,30,20,},
438 {21,17,5,49,53,29,31,},
439 {54,30,28,22,18,6,50,},
440 {51,55,31,29,23,19,7,},
441 {4,44,4,16,36,38,48,},
442 {45,5,17,37,39,49,5,},
443 {18,38,36,50,6,46,6,},
444 {7,47,7,19,39,37,51,},
445 {40,36,12,4,8,20,0,},
446 {13,5,9,21,41,37,0,},
447 {42,38,14,6,10,22,0,},
448 {43,39,15,7,11,23,0,},
449 {40,16,8,30,34,24,0,},
450 {9,31,35,25,41,17,0,},
451 {42,18,10,28,32,26,0,},
452 {33,27,43,19,11,29,0,},
453 {40,20,34,25,35,58,0,},
454 {35,24,34,59,41,21,0,},
455 {33,56,42,22,32,27,0,},
456 {33,26,32,57,43,23,0,},
457 {32,22,10,30,8,52,0,},
458 {33,23,11,31,9,53,0,},
459 {8,28,10,54,34,20,0,},
460 {11,55,35,21,9,29,0,},
461 {52,56,57,27,26,22,28,},
462 {27,23,29,53,57,56,26,},
463 {58,59,25,24,20,30,54,},
464 {21,31,55,59,58,24,25,},
465 {40,50,14,38,12,16,0,},
466 {15,39,13,17,41,51,0,},
467 {42,48,12,36,14,18,0,},
468 {43,49,13,37,15,19,0,},
469 {16,20,24,58,54,50,36,},
470 {21,25,59,55,51,37,17,},
471 {38,18,22,26,56,52,48,},
472 {49,39,19,23,27,57,53,},
473 {12,4,12,4,12,4,0,},
474 {13,5,13,5,13,5,0,},
475 {14,6,14,6,14,6,0,},
476 {15,7,15,7,15,7,0,},
477 {8,4,12,38,42,52,0,},
478 {43,53,9,5,13,39,0,},
479 {10,6,14,36,40,54,0,},
480 {11,7,15,37,41,55,0,},
481 {32,28,8,48,42,56,0,},
482 {33,29,9,49,43,57,0,},
483 {34,30,10,50,40,58,0,},
484 {11,51,41,59,35,31,0,},
485 {32,52,42,26,33,57,0,},
486 {32,56,33,53,43,27,0,},
487 {34,54,40,24,35,59,0,},
488 {34,58,35,55,41,25,0,},
489 {0,0,0,0,0,0,0,},
490 {0,0,0,0,0,0,0,},
491 {0,0,0,0,0,0,0,},
492 {0,0,0,0,0,0,0,},
493 {0,0,0,0,0,0,0,},
494 {0,0,0,0,0,0,0,},
495 {0,0,0,0,0,0,0,},
496 {0,0,0,0,0,0,0,},
497 {0,0,0,0,0,0,0,},
498 {0,0,0,0,0,0,0,},
499 {0,0,0,0,0,0,0,},
500 {0,0,0,0,0,0,0,},
501 {0,0,0,0,0,0,0,},
502 {0,0,0,0,0,0,0,},
503 {0,0,0,0,0,0,0,},
504 {0,0,0,0,0,0,0,},
505 {0,0,0,0,0,0,0,},
506 {0,0,0,0,0,0,0,},
507 {0,0,0,0,0,0,0,},
508 {0,0,0,0,0,0,0,},
509 {0,0,0,0,0,0,0,},
510 {0,0,0,0,0,0,0,},
511 {0,0,0,0,0,0,0,},
512 {0,0,0,0,0,0,0,},
513 {0,0,0,0,0,0,0,},
514 {0,0,0,0,0,0,0,},
515 {0,0,0,0,0,0,0,},
516 {0,0,0,0,0,0,0,},
517 {0,0,0,0,0,0,0,},
518 {0,0,0,0,0,0,0,},
519 {0,0,0,0,0,0,0,},
520 {0,0,0,0,0,0,0,},
521 {0,0,0,0,0,0,0,},
522 {0,0,0,0,0,0,0,},
523 {0,0,0,0,0,0,0,},
524 {0,0,0,0,0,0,0,},
525 {0,0,0,0,0,0,0,},
526 {0,0,0,0,0,0,0,},
527 {0,0,0,0,0,0,0,},
528 {0,0,0,0,0,0,0,},
529 };
530
531 // == ELEMENTAL PATTERN ==
532
533 #define RULE50(a,b,c,d,e,f,g,h) {b,c,d,e,f,g,h},
534
535 int fiftytable[480][7] = {
536 RULE50(0x000, 0x020, 0x0e0, 0x0c0, 0x0a0, 0x080, 0x060, 0x040)
537 RULE50(0x001, 0x021, 0x0e1, 0x0c1, 0x0a1, 0x081, 0x061, 0x041)
538 RULE50(0x002, 0x022, 0x0e2, 0x0c2, 0x0a2, 0x082, 0x062, 0x042)
539 RULE50(0x003, 0x023, 0x0e3, 0x0c3, 0x0a3, 0x083, 0x063, 0x043)
540 RULE50(0x004, 0x024, 0x0e4, 0x0c4, 0x0a4, 0x084, 0x064, 0x044)
541 RULE50(0x005, 0x025, 0x0e5, 0x0c5, 0x0a5, 0x085, 0x065, 0x045)
542 RULE50(0x006, 0x026, 0x0e6, 0x0c6, 0x0a6, 0x086, 0x066, 0x046)
543 RULE50(0x007, 0x027, 0x0e7, 0x0c7, 0x0a7, 0x087, 0x067, 0x047)
544 RULE50(0x008, 0x028, 0x048, 0x068, 0x088, 0x0a8, 0x0c8, 0x0e8)
545 RULE50(0x009, 0x029, 0x049, 0x069, 0x089, 0x0a9, 0x0c9, 0x0e9)
546 RULE50(0x00a, 0x02a, 0x04a, 0x06a, 0x08a, 0x0aa, 0x0ca, 0x0ea)
547 RULE50(0x00b, 0x02b, 0x04b, 0x06b, 0x08b, 0x0ab, 0x0cb, 0x0eb)
548 RULE50(0x00c, 0x02c, 0x04c, 0x06c, 0x08c, 0x0ac, 0x0cc, 0x0ec)
549 RULE50(0x00d, 0x02d, 0x04d, 0x06d, 0x08d, 0x0ad, 0x0cd, 0x0ed)
550 RULE50(0x00e, 0x02e, 0x04e, 0x06e, 0x08e, 0x0ae, 0x0ce, 0x0ee)
551 RULE50(0x00f, 0x02f, 0x04f, 0x06f, 0x08f, 0x0af, 0x0cf, 0x0ef)
552 RULE50(0x010, 0x030, 0x0f0, 0x0d0, 0x0b0, 0x090, 0x070, 0x050)
553 RULE50(0x011, 0x031, 0x0f1, 0x0d1, 0x0b1, 0x091, 0x071, 0x051)
554 RULE50(0x012, 0x032, 0x0f2, 0x0d2, 0x0b2, 0x092, 0x072, 0x052)
555 RULE50(0x013, 0x033, 0x0f3, 0x0d3, 0x0b3, 0x093, 0x073, 0x053)
556 RULE50(0x014, 0x034, 0x0f4, 0x0d4, 0x0b4, 0x094, 0x074, 0x054)
557 RULE50(0x015, 0x035, 0x0f5, 0x0d5, 0x0b5, 0x095, 0x075, 0x055)
558 RULE50(0x016, 0x036, 0x0f6, 0x0d6, 0x0b6, 0x096, 0x076, 0x056)
559 RULE50(0x017, 0x037, 0x0f7, 0x0d7, 0x0b7, 0x097, 0x077, 0x057)
560 RULE50(0x018, 0x038, 0x058, 0x078, 0x098, 0x0b8, 0x0d8, 0x0f8)
561 RULE50(0x019, 0x039, 0x059, 0x079, 0x099, 0x0b9, 0x0d9, 0x0f9)
562 RULE50(0x01a, 0x03a, 0x05a, 0x07a, 0x09a, 0x0ba, 0x0da, 0x0fa)
563 RULE50(0x01b, 0x03b, 0x05b, 0x07b, 0x09b, 0x0bb, 0x0db, 0x0fb)
564 RULE50(0x01c, 0x03c, 0x05c, 0x07c, 0x09c, 0x0bc, 0x0dc, 0x0fc)
565 RULE50(0x01d, 0x03d, 0x05d, 0x07d, 0x09d, 0x0bd, 0x0dd, 0x0fd)
566 RULE50(0x01e, 0x03e, 0x05e, 0x07e, 0x09e, 0x0be, 0x0de, 0x0fe)
567 RULE50(0x01f, 0x03f, 0x05f, 0x07f, 0x09f, 0x0bf, 0x0df, 0x0ff)
568 RULE50(0x020, 0x000, 0x040, 0x120, 0x108, 0x11f, 0x100, 0x0e0)
569 RULE50(0x021, 0x001, 0x041, 0x121, 0x109, 0x11e, 0x101, 0x0e1)
570 RULE50(0x022, 0x002, 0x042, 0x122, 0x10a, 0x11d, 0x102, 0x0e2)
571 RULE50(0x023, 0x003, 0x043, 0x123, 0x10b, 0x11c, 0x103, 0x0e3)
572 RULE50(0x024, 0x004, 0x044, 0x124, 0x10c, 0x11b, 0x104, 0x0e4)
573 RULE50(0x025, 0x005, 0x045, 0x125, 0x10d, 0x11a, 0x105, 0x0e5)
574 RULE50(0x026, 0x006, 0x046, 0x126, 0x10e, 0x119, 0x106, 0x0e6)
575 RULE50(0x027, 0x007, 0x047, 0x127, 0x10f, 0x118, 0x107, 0x0e7)
576 RULE50(0x028, 0x008, 0x0e8, 0x1c8, 0x100, 0x117, 0x108, 0x048)
577 RULE50(0x029, 0x009, 0x0e9, 0x1c9, 0x101, 0x116, 0x109, 0x049)
578 RULE50(0x02a, 0x00a, 0x0ea, 0x1ca, 0x102, 0x115, 0x10a, 0x04a)
579 RULE50(0x02b, 0x00b, 0x0eb, 0x1cb, 0x103, 0x114, 0x10b, 0x04b)
580 RULE50(0x02c, 0x00c, 0x0ec, 0x1cc, 0x104, 0x113, 0x10c, 0x04c)
581 RULE50(0x02d, 0x00d, 0x0ed, 0x1cd, 0x105, 0x112, 0x10d, 0x04d)
582 RULE50(0x02e, 0x00e, 0x0ee, 0x1ce, 0x106, 0x111, 0x10e, 0x04e)
583 RULE50(0x02f, 0x00f, 0x0ef, 0x1cf, 0x107, 0x110, 0x10f, 0x04f)
584 RULE50(0x030, 0x010, 0x050, 0x110, 0x107, 0x118, 0x1d0, 0x0f0)
585 RULE50(0x031, 0x011, 0x051, 0x111, 0x106, 0x119, 0x1d1, 0x0f1)
586 RULE50(0x032, 0x012, 0x052, 0x112, 0x105, 0x11a, 0x1d2, 0x0f2)
587 RULE50(0x033, 0x013, 0x053, 0x113, 0x104, 0x11b, 0x1d3, 0x0f3)
588 RULE50(0x034, 0x014, 0x054, 0x114, 0x103, 0x11c, 0x1d4, 0x0f4)
589 RULE50(0x035, 0x015, 0x055, 0x115, 0x102, 0x11d, 0x1d5, 0x0f5)
590 RULE50(0x036, 0x016, 0x056, 0x116, 0x101, 0x11e, 0x1d6, 0x0f6)
591 RULE50(0x037, 0x017, 0x057, 0x117, 0x100, 0x11f, 0x1d7, 0x0f7)
592 RULE50(0x038, 0x018, 0x0f8, 0x118, 0x10f, 0x110, 0x138, 0x058)
593 RULE50(0x039, 0x019, 0x0f9, 0x119, 0x10e, 0x111, 0x139, 0x059)
594 RULE50(0x03a, 0x01a, 0x0fa, 0x11a, 0x10d, 0x112, 0x13a, 0x05a)
595 RULE50(0x03b, 0x01b, 0x0fb, 0x11b, 0x10c, 0x113, 0x13b, 0x05b)
596 RULE50(0x03c, 0x01c, 0x0fc, 0x11c, 0x10b, 0x114, 0x13c, 0x05c)
597 RULE50(0x03d, 0x01d, 0x0fd, 0x11d, 0x10a, 0x115, 0x13d, 0x05d)
598 RULE50(0x03e, 0x01e, 0x0fe, 0x11e, 0x109, 0x116, 0x13e, 0x05e)
599 RULE50(0x03f, 0x01f, 0x0ff, 0x11f, 0x108, 0x117, 0x13f, 0x05f)
600 RULE50(0x040, 0x000, 0x060, 0x140, 0x128, 0x159, 0x120, 0x020)
601 RULE50(0x041, 0x001, 0x061, 0x141, 0x129, 0x13f, 0x121, 0x021)
602 RULE50(0x042, 0x002, 0x062, 0x142, 0x12a, 0x13e, 0x122, 0x022)
603 RULE50(0x043, 0x003, 0x063, 0x143, 0x12b, 0x13d, 0x123, 0x023)
604 RULE50(0x044, 0x004, 0x064, 0x144, 0x12c, 0x15d, 0x124, 0x024)
605 RULE50(0x045, 0x005, 0x065, 0x145, 0x12d, 0x13b, 0x125, 0x025)
606 RULE50(0x046, 0x006, 0x066, 0x146, 0x12e, 0x13a, 0x126, 0x026)
607 RULE50(0x047, 0x007, 0x067, 0x147, 0x12f, 0x139, 0x127, 0x027)
608 RULE50(0x048, 0x008, 0x028, 0x108, 0x120, 0x151, 0x128, 0x068)
609 RULE50(0x049, 0x009, 0x029, 0x109, 0x121, 0x137, 0x129, 0x069)
610 RULE50(0x04a, 0x00a, 0x02a, 0x10a, 0x122, 0x136, 0x12a, 0x06a)
611 RULE50(0x04b, 0x00b, 0x02b, 0x10b, 0x123, 0x135, 0x12b, 0x06b)
612 RULE50(0x04c, 0x00c, 0x02c, 0x10c, 0x124, 0x155, 0x12c, 0x06c)
613 RULE50(0x04d, 0x00d, 0x02d, 0x10d, 0x125, 0x133, 0x12d, 0x06d)
614 RULE50(0x04e, 0x00e, 0x02e, 0x10e, 0x126, 0x132, 0x12e, 0x06e)
615 RULE50(0x04f, 0x00f, 0x02f, 0x10f, 0x127, 0x131, 0x12f, 0x06f)
616 RULE50(0x050, 0x010, 0x070, 0x130, 0x141, 0x138, 0x110, 0x030)
617 RULE50(0x051, 0x011, 0x071, 0x131, 0x127, 0x139, 0x111, 0x031)
618 RULE50(0x052, 0x012, 0x072, 0x132, 0x126, 0x13a, 0x112, 0x032)
619 RULE50(0x053, 0x013, 0x073, 0x133, 0x125, 0x13b, 0x113, 0x033)
620 RULE50(0x054, 0x014, 0x074, 0x134, 0x145, 0x13c, 0x114, 0x034)
621 RULE50(0x055, 0x015, 0x075, 0x135, 0x123, 0x13d, 0x115, 0x035)
622 RULE50(0x056, 0x016, 0x076, 0x136, 0x122, 0x13e, 0x116, 0x036)
623 RULE50(0x057, 0x017, 0x077, 0x137, 0x121, 0x13f, 0x117, 0x037)
624 RULE50(0x058, 0x018, 0x038, 0x138, 0x149, 0x130, 0x158, 0x078)
625 RULE50(0x059, 0x019, 0x039, 0x139, 0x12f, 0x131, 0x159, 0x079)
626 RULE50(0x05a, 0x01a, 0x03a, 0x13a, 0x12e, 0x132, 0x15a, 0x07a)
627 RULE50(0x05b, 0x01b, 0x03b, 0x13b, 0x12d, 0x133, 0x15b, 0x07b)
628 RULE50(0x05c, 0x01c, 0x03c, 0x13c, 0x14d, 0x134, 0x15c, 0x07c)
629 RULE50(0x05d, 0x01d, 0x03d, 0x13d, 0x12b, 0x135, 0x15d, 0x07d)
630 RULE50(0x05e, 0x01e, 0x03e, 0x13e, 0x12a, 0x136, 0x15e, 0x07e)
631 RULE50(0x05f, 0x01f, 0x03f, 0x13f, 0x129, 0x137, 0x15f, 0x07f)
632 RULE50(0x060, 0x000, 0x080, 0x160, 0x148, 0x17a, 0x140, 0x040)
633 RULE50(0x061, 0x001, 0x081, 0x161, 0x149, 0x138, 0x141, 0x041)
634 RULE50(0x062, 0x002, 0x082, 0x162, 0x14a, 0x15f, 0x142, 0x042)
635 RULE50(0x063, 0x003, 0x083, 0x163, 0x14b, 0x15e, 0x143, 0x043)
636 RULE50(0x064, 0x004, 0x084, 0x164, 0x14c, 0x17e, 0x144, 0x044)
637 RULE50(0x065, 0x005, 0x085, 0x165, 0x14d, 0x13c, 0x145, 0x045)
638 RULE50(0x066, 0x006, 0x086, 0x166, 0x14e, 0x15b, 0x146, 0x046)
639 RULE50(0x067, 0x007, 0x087, 0x167, 0x14f, 0x15a, 0x147, 0x047)
640 RULE50(0x068, 0x008, 0x048, 0x128, 0x140, 0x172, 0x148, 0x088)
641 RULE50(0x069, 0x009, 0x049, 0x129, 0x141, 0x130, 0x149, 0x089)
642 RULE50(0x06a, 0x00a, 0x04a, 0x12a, 0x142, 0x157, 0x14a, 0x08a)
643 RULE50(0x06b, 0x00b, 0x04b, 0x12b, 0x143, 0x156, 0x14b, 0x08b)
644 RULE50(0x06c, 0x00c, 0x04c, 0x12c, 0x144, 0x176, 0x14c, 0x08c)
645 RULE50(0x06d, 0x00d, 0x04d, 0x12d, 0x145, 0x134, 0x14d, 0x08d)
646 RULE50(0x06e, 0x00e, 0x04e, 0x12e, 0x146, 0x153, 0x14e, 0x08e)
647 RULE50(0x06f, 0x00f, 0x04f, 0x12f, 0x147, 0x152, 0x14f, 0x08f)
648 RULE50(0x070, 0x010, 0x090, 0x150, 0x162, 0x158, 0x130, 0x050)
649 RULE50(0x071, 0x011, 0x091, 0x151, 0x120, 0x159, 0x131, 0x051)
650 RULE50(0x072, 0x012, 0x092, 0x152, 0x147, 0x15a, 0x132, 0x052)
651 RULE50(0x073, 0x013, 0x093, 0x153, 0x146, 0x15b, 0x133, 0x053)
652 RULE50(0x074, 0x014, 0x094, 0x154, 0x166, 0x15c, 0x134, 0x054)
653 RULE50(0x075, 0x015, 0x095, 0x155, 0x124, 0x15d, 0x135, 0x055)
654 RULE50(0x076, 0x016, 0x096, 0x156, 0x143, 0x15e, 0x136, 0x056)
655 RULE50(0x077, 0x017, 0x097, 0x157, 0x142, 0x15f, 0x137, 0x057)
656 RULE50(0x078, 0x018, 0x058, 0x158, 0x16a, 0x150, 0x178, 0x098)
657 RULE50(0x079, 0x019, 0x059, 0x159, 0x128, 0x151, 0x179, 0x099)
658 RULE50(0x07a, 0x01a, 0x05a, 0x15a, 0x14f, 0x152, 0x17a, 0x09a)
659 RULE50(0x07b, 0x01b, 0x05b, 0x15b, 0x14e, 0x153, 0x17b, 0x09b)
660 RULE50(0x07c, 0x01c, 0x05c, 0x15c, 0x16e, 0x154, 0x17c, 0x09c)
661 RULE50(0x07d, 0x01d, 0x05d, 0x15d, 0x12c, 0x155, 0x17d, 0x09d)
662 RULE50(0x07e, 0x01e, 0x05e, 0x15e, 0x14b, 0x156, 0x17e, 0x09e)
663 RULE50(0x07f, 0x01f, 0x05f, 0x15f, 0x14a, 0x157, 0x17f, 0x09f)
664 RULE50(0x080, 0x000, 0x0a0, 0x180, 0x168, 0x19b, 0x160, 0x060)
665 RULE50(0x081, 0x001, 0x0a1, 0x181, 0x169, 0x19a, 0x161, 0x061)
666 RULE50(0x082, 0x002, 0x0a2, 0x182, 0x16a, 0x158, 0x162, 0x062)
667 RULE50(0x083, 0x003, 0x0a3, 0x183, 0x16b, 0x17f, 0x163, 0x063)
668 RULE50(0x084, 0x004, 0x0a4, 0x184, 0x16c, 0x19f, 0x164, 0x064)
669 RULE50(0x085, 0x005, 0x0a5, 0x185, 0x16d, 0x19e, 0x165, 0x065)
670 RULE50(0x086, 0x006, 0x0a6, 0x186, 0x16e, 0x15c, 0x166, 0x066)
671 RULE50(0x087, 0x007, 0x0a7, 0x187, 0x16f, 0x17b, 0x167, 0x067)
672 RULE50(0x088, 0x008, 0x068, 0x148, 0x160, 0x193, 0x168, 0x0a8)
673 RULE50(0x089, 0x009, 0x069, 0x149, 0x161, 0x192, 0x169, 0x0a9)
674 RULE50(0x08a, 0x00a, 0x06a, 0x14a, 0x162, 0x150, 0x16a, 0x0aa)
675 RULE50(0x08b, 0x00b, 0x06b, 0x14b, 0x163, 0x177, 0x16b, 0x0ab)
676 RULE50(0x08c, 0x00c, 0x06c, 0x14c, 0x164, 0x197, 0x16c, 0x0ac)
677 RULE50(0x08d, 0x00d, 0x06d, 0x14d, 0x165, 0x196, 0x16d, 0x0ad)
678 RULE50(0x08e, 0x00e, 0x06e, 0x14e, 0x166, 0x154, 0x16e, 0x0ae)
679 RULE50(0x08f, 0x00f, 0x06f, 0x14f, 0x167, 0x173, 0x16f, 0x0af)
680 RULE50(0x090, 0x010, 0x0b0, 0x170, 0x183, 0x178, 0x150, 0x070)
681 RULE50(0x091, 0x011, 0x0b1, 0x171, 0x182, 0x179, 0x151, 0x071)
682 RULE50(0x092, 0x012, 0x0b2, 0x172, 0x140, 0x17a, 0x152, 0x072)
683 RULE50(0x093, 0x013, 0x0b3, 0x173, 0x167, 0x17b, 0x153, 0x073)
684 RULE50(0x094, 0x014, 0x0b4, 0x174, 0x187, 0x17c, 0x154, 0x074)
685 RULE50(0x095, 0x015, 0x0b5, 0x175, 0x186, 0x17d, 0x155, 0x075)
686 RULE50(0x096, 0x016, 0x0b6, 0x176, 0x144, 0x17e, 0x156, 0x076)
687 RULE50(0x097, 0x017, 0x0b7, 0x177, 0x163, 0x17f, 0x157, 0x077)
688 RULE50(0x098, 0x018, 0x078, 0x178, 0x18b, 0x170, 0x198, 0x0b8)
689 RULE50(0x099, 0x019, 0x079, 0x179, 0x18a, 0x171, 0x199, 0x0b9)
690 RULE50(0x09a, 0x01a, 0x07a, 0x17a, 0x148, 0x172, 0x19a, 0x0ba)
691 RULE50(0x09b, 0x01b, 0x07b, 0x17b, 0x16f, 0x173, 0x19b, 0x0bb)
692 RULE50(0x09c, 0x01c, 0x07c, 0x17c, 0x18f, 0x174, 0x19c, 0x0bc)
693 RULE50(0x09d, 0x01d, 0x07d, 0x17d, 0x18e, 0x175, 0x19d, 0x0bd)
694 RULE50(0x09e, 0x01e, 0x07e, 0x17e, 0x14c, 0x176, 0x19e, 0x0be)
695 RULE50(0x09f, 0x01f, 0x07f, 0x17f, 0x16b, 0x177, 0x19f, 0x0bf)
696 RULE50(0x0a0, 0x000, 0x0c0, 0x1a0, 0x188, 0x19c, 0x180, 0x080)
697 RULE50(0x0a1, 0x001, 0x0c1, 0x1a1, 0x189, 0x1bb, 0x181, 0x081)
698 RULE50(0x0a2, 0x002, 0x0c2, 0x1a2, 0x18a, 0x179, 0x182, 0x082)
699 RULE50(0x0a3, 0x003, 0x0c3, 0x1a3, 0x18b, 0x178, 0x183, 0x083)
700 RULE50(0x0a4, 0x004, 0x0c4, 0x1a4, 0x18c, 0x198, 0x184, 0x084)
701 RULE50(0x0a5, 0x005, 0x0c5, 0x1a5, 0x18d, 0x1bf, 0x185, 0x085)
702 RULE50(0x0a6, 0x006, 0x0c6, 0x1a6, 0x18e, 0x17d, 0x186, 0x086)
703 RULE50(0x0a7, 0x007, 0x0c7, 0x1a7, 0x18f, 0x17c, 0x187, 0x087)
704 RULE50(0x0a8, 0x008, 0x088, 0x168, 0x180, 0x194, 0x188, 0x0c8)
705 RULE50(0x0a9, 0x009, 0x089, 0x169, 0x181, 0x1b3, 0x189, 0x0c9)
706 RULE50(0x0aa, 0x00a, 0x08a, 0x16a, 0x182, 0x171, 0x18a, 0x0ca)
707 RULE50(0x0ab, 0x00b, 0x08b, 0x16b, 0x183, 0x170, 0x18b, 0x0cb)
708 RULE50(0x0ac, 0x00c, 0x08c, 0x16c, 0x184, 0x190, 0x18c, 0x0cc)
709 RULE50(0x0ad, 0x00d, 0x08d, 0x16d, 0x185, 0x1b7, 0x18d, 0x0cd)
710 RULE50(0x0ae, 0x00e, 0x08e, 0x16e, 0x186, 0x175, 0x18e, 0x0ce)
711 RULE50(0x0af, 0x00f, 0x08f, 0x16f, 0x187, 0x174, 0x18f, 0x0cf)
712 RULE50(0x0b0, 0x010, 0x0d0, 0x190, 0x184, 0x198, 0x170, 0x090)
713 RULE50(0x0b1, 0x011, 0x0d1, 0x191, 0x1a3, 0x199, 0x171, 0x091)
714 RULE50(0x0b2, 0x012, 0x0d2, 0x192, 0x161, 0x19a, 0x172, 0x092)
715 RULE50(0x0b3, 0x013, 0x0d3, 0x193, 0x160, 0x19b, 0x173, 0x093)
716 RULE50(0x0b4, 0x014, 0x0d4, 0x194, 0x180, 0x19c, 0x174, 0x094)
717 RULE50(0x0b5, 0x015, 0x0d5, 0x195, 0x1a7, 0x19d, 0x175, 0x095)
718 RULE50(0x0b6, 0x016, 0x0d6, 0x196, 0x165, 0x19e, 0x176, 0x096)
719 RULE50(0x0b7, 0x017, 0x0d7, 0x197, 0x164, 0x19f, 0x177, 0x097)
720 RULE50(0x0b8, 0x018, 0x098, 0x198, 0x18c, 0x190, 0x1b8, 0x0d8)
721 RULE50(0x0b9, 0x019, 0x099, 0x199, 0x1ab, 0x191, 0x1b9, 0x0d9)
722 RULE50(0x0ba, 0x01a, 0x09a, 0x19a, 0x169, 0x192, 0x1ba, 0x0da)
723 RULE50(0x0bb, 0x01b, 0x09b, 0x19b, 0x168, 0x193, 0x1bb, 0x0db)
724 RULE50(0x0bc, 0x01c, 0x09c, 0x19c, 0x188, 0x194, 0x1bc, 0x0dc)
725 RULE50(0x0bd, 0x01d, 0x09d, 0x19d, 0x1af, 0x195, 0x1bd, 0x0dd)
726 RULE50(0x0be, 0x01e, 0x09e, 0x19e, 0x16d, 0x196, 0x1be, 0x0de)
727 RULE50(0x0bf, 0x01f, 0x09f, 0x19f, 0x16c, 0x197, 0x1bf, 0x0df)
728 RULE50(0x0c0, 0x000, 0x0e0, 0x1c0, 0x1a8, 0x1bd, 0x1a0, 0x0a0)
729 RULE50(0x0c1, 0x001, 0x0e1, 0x1c1, 0x1a9, 0x1bc, 0x1a1, 0x0a1)
730 RULE50(0x0c2, 0x002, 0x0e2, 0x1c2, 0x1aa, 0x1db, 0x1a2, 0x0a2)
731 RULE50(0x0c3, 0x003, 0x0e3, 0x1c3, 0x1ab, 0x199, 0x1a3, 0x0a3)
732 RULE50(0x0c4, 0x004, 0x0e4, 0x1c4, 0x1ac, 0x1b9, 0x1a4, 0x0a4)
733 RULE50(0x0c5, 0x005, 0x0e5, 0x1c5, 0x1ad, 0x1b8, 0x1a5, 0x0a5)
734 RULE50(0x0c6, 0x006, 0x0e6, 0x1c6, 0x1ae, 0x1df, 0x1a6, 0x0a6)
735 RULE50(0x0c7, 0x007, 0x0e7, 0x1c7, 0x1af, 0x19d, 0x1a7, 0x0a7)
736 RULE50(0x0c8, 0x008, 0x0a8, 0x188, 0x1a0, 0x1b5, 0x1a8, 0x0e8)
737 RULE50(0x0c9, 0x009, 0x0a9, 0x189, 0x1a1, 0x1b4, 0x1a9, 0x0e9)
738 RULE50(0x0ca, 0x00a, 0x0aa, 0x18a, 0x1a2, 0x1d3, 0x1aa, 0x0ea)
739 RULE50(0x0cb, 0x00b, 0x0ab, 0x18b, 0x1a3, 0x191, 0x1ab, 0x0eb)
740 RULE50(0x0cc, 0x00c, 0x0ac, 0x18c, 0x1a4, 0x1b1, 0x1ac, 0x0ec)
741 RULE50(0x0cd, 0x00d, 0x0ad, 0x18d, 0x1a5, 0x1b0, 0x1ad, 0x0ed)
742 RULE50(0x0ce, 0x00e, 0x0ae, 0x18e, 0x1a6, 0x1d7, 0x1ae, 0x0ee)
743 RULE50(0x0cf, 0x00f, 0x0af, 0x18f, 0x1a7, 0x195, 0x1af, 0x0ef)
744 RULE50(0x0d0, 0x010, 0x0f0, 0x1b0, 0x1a5, 0x1b8, 0x190, 0x0b0)
745 RULE50(0x0d1, 0x011, 0x0f1, 0x1b1, 0x1a4, 0x1b9, 0x191, 0x0b1)
746 RULE50(0x0d2, 0x012, 0x0f2, 0x1b2, 0x1c3, 0x1ba, 0x192, 0x0b2)
747 RULE50(0x0d3, 0x013, 0x0f3, 0x1b3, 0x181, 0x1bb, 0x193, 0x0b3)
748 RULE50(0x0d4, 0x014, 0x0f4, 0x1b4, 0x1a1, 0x1bc, 0x194, 0x0b4)
749 RULE50(0x0d5, 0x015, 0x0f5, 0x1b5, 0x1a0, 0x1bd, 0x195, 0x0b5)
750 RULE50(0x0d6, 0x016, 0x0f6, 0x1b6, 0x1c7, 0x1be, 0x196, 0x0b6)
751 RULE50(0x0d7, 0x017, 0x0f7, 0x1b7, 0x185, 0x1bf, 0x197, 0x0b7)
752 RULE50(0x0d8, 0x018, 0x0b8, 0x1b8, 0x1ad, 0x1b0, 0x1d8, 0x0f8)
753 RULE50(0x0d9, 0x019, 0x0b9, 0x1b9, 0x1ac, 0x1b1, 0x1d9, 0x0f9)
754 RULE50(0x0da, 0x01a, 0x0ba, 0x1ba, 0x1cb, 0x1b2, 0x1da, 0x0fa)
755 RULE50(0x0db, 0x01b, 0x0bb, 0x1bb, 0x189, 0x1b3, 0x1db, 0x0fb)
756 RULE50(0x0dc, 0x01c, 0x0bc, 0x1bc, 0x1a9, 0x1b4, 0x1dc, 0x0fc)
757 RULE50(0x0dd, 0x01d, 0x0bd, 0x1bd, 0x1a8, 0x1b5, 0x1dd, 0x0fd)
758 RULE50(0x0de, 0x01e, 0x0be, 0x1be, 0x1cf, 0x1b6, 0x1de, 0x0fe)
759 RULE50(0x0df, 0x01f, 0x0bf, 0x1bf, 0x18d, 0x1b7, 0x1df, 0x0ff)
760 RULE50(0x0e0, 0x000, 0x020, 0x100, 0x1c8, 0x1de, 0x1c0, 0x0c0)
761 RULE50(0x0e1, 0x001, 0x021, 0x101, 0x1c9, 0x1dd, 0x1c1, 0x0c1)
762 RULE50(0x0e2, 0x002, 0x022, 0x102, 0x1ca, 0x1dc, 0x1c2, 0x0c2)
763 RULE50(0x0e3, 0x003, 0x023, 0x103, 0x1cb, 0x1ba, 0x1c3, 0x0c3)
764 RULE50(0x0e4, 0x004, 0x024, 0x104, 0x1cc, 0x1da, 0x1c4, 0x0c4)
765 RULE50(0x0e5, 0x005, 0x025, 0x105, 0x1cd, 0x1d9, 0x1c5, 0x0c5)
766 RULE50(0x0e6, 0x006, 0x026, 0x106, 0x1ce, 0x1d8, 0x1c6, 0x0c6)
767 RULE50(0x0e7, 0x007, 0x027, 0x107, 0x1cf, 0x1be, 0x1c7, 0x0c7)
768 RULE50(0x0e8, 0x008, 0x0c8, 0x1a8, 0x1c0, 0x1d6, 0x1c8, 0x028)
769 RULE50(0x0e9, 0x009, 0x0c9, 0x1a9, 0x1c1, 0x1d5, 0x1c9, 0x029)
770 RULE50(0x0ea, 0x00a, 0x0ca, 0x1aa, 0x1c2, 0x1d4, 0x1ca, 0x02a)
771 RULE50(0x0eb, 0x00b, 0x0cb, 0x1ab, 0x1c3, 0x1b2, 0x1cb, 0x02b)
772 RULE50(0x0ec, 0x00c, 0x0cc, 0x1ac, 0x1c4, 0x1d2, 0x1cc, 0x02c)
773 RULE50(0x0ed, 0x00d, 0x0cd, 0x1ad, 0x1c5, 0x1d1, 0x1cd, 0x02d)
774 RULE50(0x0ee, 0x00e, 0x0ce, 0x1ae, 0x1c6, 0x1d0, 0x1ce, 0x02e)
775 RULE50(0x0ef, 0x00f, 0x0cf, 0x1af, 0x1c7, 0x1b6, 0x1cf, 0x02f)
776 RULE50(0x0f0, 0x010, 0x030, 0x1d0, 0x1c6, 0x1d8, 0x1b0, 0x0d0)
777 RULE50(0x0f1, 0x011, 0x031, 0x1d1, 0x1c5, 0x1d9, 0x1b1, 0x0d1)
778 RULE50(0x0f2, 0x012, 0x032, 0x1d2, 0x1c4, 0x1da, 0x1b2, 0x0d2)
779 RULE50(0x0f3, 0x013, 0x033, 0x1d3, 0x1a2, 0x1db, 0x1b3, 0x0d3)
780 RULE50(0x0f4, 0x014, 0x034, 0x1d4, 0x1c2, 0x1dc, 0x1b4, 0x0d4)
781 RULE50(0x0f5, 0x015, 0x035, 0x1d5, 0x1c1, 0x1dd, 0x1b5, 0x0d5)
782 RULE50(0x0f6, 0x016, 0x036, 0x1d6, 0x1c0, 0x1de, 0x1b6, 0x0d6)
783 RULE50(0x0f7, 0x017, 0x037, 0x1d7, 0x1a6, 0x1df, 0x1b7, 0x0d7)
784 RULE50(0x0f8, 0x018, 0x0d8, 0x1d8, 0x1ce, 0x1d0, 0x118, 0x038)
785 RULE50(0x0f9, 0x019, 0x0d9, 0x1d9, 0x1cd, 0x1d1, 0x119, 0x039)
786 RULE50(0x0fa, 0x01a, 0x0da, 0x1da, 0x1cc, 0x1d2, 0x11a, 0x03a)
787 RULE50(0x0fb, 0x01b, 0x0db, 0x1db, 0x1aa, 0x1d3, 0x11b, 0x03b)
788 RULE50(0x0fc, 0x01c, 0x0dc, 0x1dc, 0x1ca, 0x1d4, 0x11c, 0x03c)
789 RULE50(0x0fd, 0x01d, 0x0dd, 0x1dd, 0x1c9, 0x1d5, 0x11d, 0x03d)
790 RULE50(0x0fe, 0x01e, 0x0de, 0x1de, 0x1c8, 0x1d6, 0x11e, 0x03e)
791 RULE50(0x0ff, 0x01f, 0x0df, 0x1df, 0x1ae, 0x1d7, 0x11f, 0x03f)
792 RULE50(0x100, 0x020, 0x11f, 0x037, 0x117, 0x028, 0x1c8, 0x0e0)
793 RULE50(0x101, 0x021, 0x11e, 0x036, 0x116, 0x029, 0x1c9, 0x0e1)
794 RULE50(0x102, 0x022, 0x11d, 0x035, 0x115, 0x02a, 0x1ca, 0x0e2)
795 RULE50(0x103, 0x023, 0x11c, 0x034, 0x114, 0x02b, 0x1cb, 0x0e3)
796 RULE50(0x104, 0x024, 0x11b, 0x033, 0x113, 0x02c, 0x1cc, 0x0e4)
797 RULE50(0x105, 0x025, 0x11a, 0x032, 0x112, 0x02d, 0x1cd, 0x0e5)
798 RULE50(0x106, 0x026, 0x119, 0x031, 0x111, 0x02e, 0x1ce, 0x0e6)
799 RULE50(0x107, 0x027, 0x118, 0x030, 0x110, 0x02f, 0x1cf, 0x0e7)
800 RULE50(0x108, 0x020, 0x120, 0x048, 0x028, 0x117, 0x03f, 0x11f)
801 RULE50(0x109, 0x021, 0x121, 0x049, 0x029, 0x116, 0x03e, 0x11e)
802 RULE50(0x10a, 0x022, 0x122, 0x04a, 0x02a, 0x115, 0x03d, 0x11d)
803 RULE50(0x10b, 0x023, 0x123, 0x04b, 0x02b, 0x114, 0x03c, 0x11c)
804 RULE50(0x10c, 0x024, 0x124, 0x04c, 0x02c, 0x113, 0x03b, 0x11b)
805 RULE50(0x10d, 0x025, 0x125, 0x04d, 0x02d, 0x112, 0x03a, 0x11a)
806 RULE50(0x10e, 0x026, 0x126, 0x04e, 0x02e, 0x111, 0x039, 0x119)
807 RULE50(0x10f, 0x027, 0x127, 0x04f, 0x02f, 0x110, 0x038, 0x118)
808 RULE50(0x110, 0x02f, 0x107, 0x030, 0x050, 0x138, 0x038, 0x10f)
809 RULE50(0x111, 0x02e, 0x106, 0x031, 0x051, 0x139, 0x039, 0x10e)
810 RULE50(0x112, 0x02d, 0x105, 0x032, 0x052, 0x13a, 0x03a, 0x10d)
811 RULE50(0x113, 0x02c, 0x104, 0x033, 0x053, 0x13b, 0x03b, 0x10c)
812 RULE50(0x114, 0x02b, 0x103, 0x034, 0x054, 0x13c, 0x03c, 0x10b)
813 RULE50(0x115, 0x02a, 0x102, 0x035, 0x055, 0x13d, 0x03d, 0x10a)
814 RULE50(0x116, 0x029, 0x101, 0x036, 0x056, 0x13e, 0x03e, 0x109)
815 RULE50(0x117, 0x028, 0x100, 0x037, 0x057, 0x13f, 0x03f, 0x108)
816 RULE50(0x118, 0x027, 0x10f, 0x038, 0x0f8, 0x1d0, 0x030, 0x107)
817 RULE50(0x119, 0x026, 0x10e, 0x039, 0x0f9, 0x1d1, 0x031, 0x106)
818 RULE50(0x11a, 0x025, 0x10d, 0x03a, 0x0fa, 0x1d2, 0x032, 0x105)
819 RULE50(0x11b, 0x024, 0x10c, 0x03b, 0x0fb, 0x1d3, 0x033, 0x104)
820 RULE50(0x11c, 0x023, 0x10b, 0x03c, 0x0fc, 0x1d4, 0x034, 0x103)
821 RULE50(0x11d, 0x022, 0x10a, 0x03d, 0x0fd, 0x1d5, 0x035, 0x102)
822 RULE50(0x11e, 0x021, 0x109, 0x03e, 0x0fe, 0x1d6, 0x036, 0x101)
823 RULE50(0x11f, 0x020, 0x108, 0x03f, 0x0ff, 0x1d7, 0x037, 0x100)
824 RULE50(0x120, 0x020, 0x040, 0x159, 0x071, 0x151, 0x048, 0x108)
825 RULE50(0x121, 0x021, 0x041, 0x13f, 0x057, 0x137, 0x049, 0x109)
826 RULE50(0x122, 0x022, 0x042, 0x13e, 0x056, 0x136, 0x04a, 0x10a)
827 RULE50(0x123, 0x023, 0x043, 0x13d, 0x055, 0x135, 0x04b, 0x10b)
828 RULE50(0x124, 0x024, 0x044, 0x15d, 0x075, 0x155, 0x04c, 0x10c)
829 RULE50(0x125, 0x025, 0x045, 0x13b, 0x053, 0x133, 0x04d, 0x10d)
830 RULE50(0x126, 0x026, 0x046, 0x13a, 0x052, 0x132, 0x04e, 0x10e)
831 RULE50(0x127, 0x027, 0x047, 0x139, 0x051, 0x131, 0x04f, 0x10f)
832 RULE50(0x128, 0x040, 0x140, 0x068, 0x048, 0x151, 0x079, 0x159)
833 RULE50(0x129, 0x041, 0x141, 0x069, 0x049, 0x137, 0x05f, 0x13f)
834 RULE50(0x12a, 0x042, 0x142, 0x06a, 0x04a, 0x136, 0x05e, 0x13e)
835 RULE50(0x12b, 0x043, 0x143, 0x06b, 0x04b, 0x135, 0x05d, 0x13d)
836 RULE50(0x12c, 0x044, 0x144, 0x06c, 0x04c, 0x155, 0x07d, 0x15d)
837 RULE50(0x12d, 0x045, 0x145, 0x06d, 0x04d, 0x133, 0x05b, 0x13b)
838 RULE50(0x12e, 0x046, 0x146, 0x06e, 0x04e, 0x132, 0x05a, 0x13a)
839 RULE50(0x12f, 0x047, 0x147, 0x06f, 0x04f, 0x131, 0x059, 0x139)
840 RULE50(0x130, 0x050, 0x070, 0x158, 0x058, 0x149, 0x069, 0x141)
841 RULE50(0x131, 0x04f, 0x127, 0x051, 0x071, 0x159, 0x059, 0x12f)
842 RULE50(0x132, 0x04e, 0x126, 0x052, 0x072, 0x15a, 0x05a, 0x12e)
843 RULE50(0x133, 0x04d, 0x125, 0x053, 0x073, 0x15b, 0x05b, 0x12d)
844 RULE50(0x134, 0x054, 0x074, 0x15c, 0x05c, 0x14d, 0x06d, 0x145)
845 RULE50(0x135, 0x04b, 0x123, 0x055, 0x075, 0x15d, 0x05d, 0x12b)
846 RULE50(0x136, 0x04a, 0x122, 0x056, 0x076, 0x15e, 0x05e, 0x12a)
847 RULE50(0x137, 0x049, 0x121, 0x057, 0x077, 0x15f, 0x05f, 0x129)
848 RULE50(0x138, 0x038, 0x110, 0x050, 0x141, 0x061, 0x149, 0x058)
849 RULE50(0x139, 0x039, 0x111, 0x051, 0x127, 0x047, 0x12f, 0x059)
850 RULE50(0x13a, 0x03a, 0x112, 0x052, 0x126, 0x046, 0x12e, 0x05a)
851 RULE50(0x13b, 0x03b, 0x113, 0x053, 0x125, 0x045, 0x12d, 0x05b)
852 RULE50(0x13c, 0x03c, 0x114, 0x054, 0x145, 0x065, 0x14d, 0x05c)
853 RULE50(0x13d, 0x03d, 0x115, 0x055, 0x123, 0x043, 0x12b, 0x05d)
854 RULE50(0x13e, 0x03e, 0x116, 0x056, 0x122, 0x042, 0x12a, 0x05e)
855 RULE50(0x13f, 0x03f, 0x117, 0x057, 0x121, 0x041, 0x129, 0x05f)
856 RULE50(0x140, 0x040, 0x060, 0x17a, 0x092, 0x172, 0x068, 0x128)
857 RULE50(0x141, 0x041, 0x061, 0x138, 0x050, 0x130, 0x069, 0x129)
858 RULE50(0x142, 0x042, 0x062, 0x15f, 0x077, 0x157, 0x06a, 0x12a)
859 RULE50(0x143, 0x043, 0x063, 0x15e, 0x076, 0x156, 0x06b, 0x12b)
860 RULE50(0x144, 0x044, 0x064, 0x17e, 0x096, 0x176, 0x06c, 0x12c)
861 RULE50(0x145, 0x045, 0x065, 0x13c, 0x054, 0x134, 0x06d, 0x12d)
862 RULE50(0x146, 0x046, 0x066, 0x15b, 0x073, 0x153, 0x06e, 0x12e)
863 RULE50(0x147, 0x047, 0x067, 0x15a, 0x072, 0x152, 0x06f, 0x12f)
864 RULE50(0x148, 0x060, 0x160, 0x088, 0x068, 0x172, 0x09a, 0x17a)
865 RULE50(0x149, 0x058, 0x138, 0x061, 0x161, 0x089, 0x069, 0x130)
866 RULE50(0x14a, 0x062, 0x162, 0x08a, 0x06a, 0x157, 0x07f, 0x15f)
867 RULE50(0x14b, 0x063, 0x163, 0x08b, 0x06b, 0x156, 0x07e, 0x15e)
868 RULE50(0x14c, 0x064, 0x164, 0x08c, 0x06c, 0x176, 0x09e, 0x17e)
869 RULE50(0x14d, 0x05c, 0x13c, 0x065, 0x165, 0x08d, 0x06d, 0x134)
870 RULE50(0x14e, 0x066, 0x166, 0x08e, 0x06e, 0x153, 0x07b, 0x15b)
871 RULE50(0x14f, 0x067, 0x167, 0x08f, 0x06f, 0x152, 0x07a, 0x15a)
872 RULE50(0x150, 0x070, 0x090, 0x178, 0x078, 0x16a, 0x08a, 0x162)
873 RULE50(0x151, 0x048, 0x120, 0x071, 0x091, 0x179, 0x079, 0x128)
874 RULE50(0x152, 0x06f, 0x147, 0x072, 0x092, 0x17a, 0x07a, 0x14f)
875 RULE50(0x153, 0x06e, 0x146, 0x073, 0x093, 0x17b, 0x07b, 0x14e)
876 RULE50(0x154, 0x074, 0x094, 0x17c, 0x07c, 0x16e, 0x08e, 0x166)
877 RULE50(0x155, 0x04c, 0x124, 0x075, 0x095, 0x17d, 0x07d, 0x12c)
878 RULE50(0x156, 0x06b, 0x143, 0x076, 0x096, 0x17e, 0x07e, 0x14b)
879 RULE50(0x157, 0x06a, 0x142, 0x077, 0x097, 0x17f, 0x07f, 0x14a)
880 RULE50(0x158, 0x058, 0x130, 0x070, 0x162, 0x082, 0x16a, 0x078)
881 RULE50(0x159, 0x040, 0x128, 0x079, 0x059, 0x131, 0x071, 0x120)
882 RULE50(0x15a, 0x05a, 0x132, 0x072, 0x147, 0x067, 0x14f, 0x07a)
883 RULE50(0x15b, 0x05b, 0x133, 0x073, 0x146, 0x066, 0x14e, 0x07b)
884 RULE50(0x15c, 0x05c, 0x134, 0x074, 0x166, 0x086, 0x16e, 0x07c)
885 RULE50(0x15d, 0x044, 0x12c, 0x07d, 0x05d, 0x135, 0x075, 0x124)
886 RULE50(0x15e, 0x05e, 0x136, 0x076, 0x143, 0x063, 0x14b, 0x07e)
887 RULE50(0x15f, 0x05f, 0x137, 0x077, 0x142, 0x062, 0x14a, 0x07f)
888 RULE50(0x160, 0x060, 0x080, 0x19b, 0x0b3, 0x193, 0x088, 0x148)
889 RULE50(0x161, 0x061, 0x081, 0x19a, 0x0b2, 0x192, 0x089, 0x149)
890 RULE50(0x162, 0x062, 0x082, 0x158, 0x070, 0x150, 0x08a, 0x14a)
891 RULE50(0x163, 0x063, 0x083, 0x17f, 0x097, 0x177, 0x08b, 0x14b)
892 RULE50(0x164, 0x064, 0x084, 0x19f, 0x0b7, 0x197, 0x08c, 0x14c)
893 RULE50(0x165, 0x065, 0x085, 0x19e, 0x0b6, 0x196, 0x08d, 0x14d)
894 RULE50(0x166, 0x066, 0x086, 0x15c, 0x074, 0x154, 0x08e, 0x14e)
895 RULE50(0x167, 0x067, 0x087, 0x17b, 0x093, 0x173, 0x08f, 0x14f)
896 RULE50(0x168, 0x080, 0x180, 0x0a8, 0x088, 0x193, 0x0bb, 0x19b)
897 RULE50(0x169, 0x081, 0x181, 0x0a9, 0x089, 0x192, 0x0ba, 0x19a)
898 RULE50(0x16a, 0x078, 0x158, 0x082, 0x182, 0x0aa, 0x08a, 0x150)
899 RULE50(0x16b, 0x083, 0x183, 0x0ab, 0x08b, 0x177, 0x09f, 0x17f)
900 RULE50(0x16c, 0x084, 0x184, 0x0ac, 0x08c, 0x197, 0x0bf, 0x19f)
901 RULE50(0x16d, 0x085, 0x185, 0x0ad, 0x08d, 0x196, 0x0be, 0x19e)
902 RULE50(0x16e, 0x07c, 0x15c, 0x086, 0x186, 0x0ae, 0x08e, 0x154)
903 RULE50(0x16f, 0x087, 0x187, 0x0af, 0x08f, 0x173, 0x09b, 0x17b)
904 RULE50(0x170, 0x090, 0x0b0, 0x198, 0x098, 0x18b, 0x0ab, 0x183)
905 RULE50(0x171, 0x091, 0x0b1, 0x199, 0x099, 0x18a, 0x0aa, 0x182)
906 RULE50(0x172, 0x068, 0x140, 0x092, 0x0b2, 0x19a, 0x09a, 0x148)
907 RULE50(0x173, 0x08f, 0x167, 0x093, 0x0b3, 0x19b, 0x09b, 0x16f)
908 RULE50(0x174, 0x094, 0x0b4, 0x19c, 0x09c, 0x18f, 0x0af, 0x187)
909 RULE50(0x175, 0x095, 0x0b5, 0x19d, 0x09d, 0x18e, 0x0ae, 0x186)
910 RULE50(0x176, 0x06c, 0x144, 0x096, 0x0b6, 0x19e, 0x09e, 0x14c)
911 RULE50(0x177, 0x08b, 0x163, 0x097, 0x0b7, 0x19f, 0x09f, 0x16b)
912 RULE50(0x178, 0x078, 0x150, 0x090, 0x183, 0x0a3, 0x18b, 0x098)
913 RULE50(0x179, 0x079, 0x151, 0x091, 0x182, 0x0a2, 0x18a, 0x099)
914 RULE50(0x17a, 0x060, 0x148, 0x09a, 0x07a, 0x152, 0x092, 0x140)
915 RULE50(0x17b, 0x07b, 0x153, 0x093, 0x167, 0x087, 0x16f, 0x09b)
916 RULE50(0x17c, 0x07c, 0x154, 0x094, 0x187, 0x0a7, 0x18f, 0x09c)
917 RULE50(0x17d, 0x07d, 0x155, 0x095, 0x186, 0x0a6, 0x18e, 0x09d)
918 RULE50(0x17e, 0x064, 0x14c, 0x09e, 0x07e, 0x156, 0x096, 0x144)
919 RULE50(0x17f, 0x07f, 0x157, 0x097, 0x163, 0x083, 0x16b, 0x09f)
920 RULE50(0x180, 0x080, 0x0a0, 0x19c, 0x0b4, 0x194, 0x0a8, 0x168)
921 RULE50(0x181, 0x081, 0x0a1, 0x1bb, 0x0d3, 0x1b3, 0x0a9, 0x169)
922 RULE50(0x182, 0x082, 0x0a2, 0x179, 0x091, 0x171, 0x0aa, 0x16a)
923 RULE50(0x183, 0x083, 0x0a3, 0x178, 0x090, 0x170, 0x0ab, 0x16b)
924 RULE50(0x184, 0x084, 0x0a4, 0x198, 0x0b0, 0x190, 0x0ac, 0x16c)
925 RULE50(0x185, 0x085, 0x0a5, 0x1bf, 0x0d7, 0x1b7, 0x0ad, 0x16d)
926 RULE50(0x186, 0x086, 0x0a6, 0x17d, 0x095, 0x175, 0x0ae, 0x16e)
927 RULE50(0x187, 0x087, 0x0a7, 0x17c, 0x094, 0x174, 0x0af, 0x16f)
928 RULE50(0x188, 0x0a0, 0x1a0, 0x0c8, 0x0a8, 0x194, 0x0bc, 0x19c)
929 RULE50(0x189, 0x0a1, 0x1a1, 0x0c9, 0x0a9, 0x1b3, 0x0db, 0x1bb)
930 RULE50(0x18a, 0x099, 0x179, 0x0a2, 0x1a2, 0x0ca, 0x0aa, 0x171)
931 RULE50(0x18b, 0x098, 0x178, 0x0a3, 0x1a3, 0x0cb, 0x0ab, 0x170)
932 RULE50(0x18c, 0x0a4, 0x1a4, 0x0cc, 0x0ac, 0x190, 0x0b8, 0x198)
933 RULE50(0x18d, 0x0a5, 0x1a5, 0x0cd, 0x0ad, 0x1b7, 0x0df, 0x1bf)
934 RULE50(0x18e, 0x09d, 0x17d, 0x0a6, 0x1a6, 0x0ce, 0x0ae, 0x175)
935 RULE50(0x18f, 0x09c, 0x17c, 0x0a7, 0x1a7, 0x0cf, 0x0af, 0x174)
936 RULE50(0x190, 0x0ac, 0x184, 0x0b0, 0x0d0, 0x1b8, 0x0b8, 0x18c)
937 RULE50(0x191, 0x0b1, 0x0d1, 0x1b9, 0x0b9, 0x1ab, 0x0cb, 0x1a3)
938 RULE50(0x192, 0x089, 0x161, 0x0b2, 0x0d2, 0x1ba, 0x0ba, 0x169)
939 RULE50(0x193, 0x088, 0x160, 0x0b3, 0x0d3, 0x1bb, 0x0bb, 0x168)
940 RULE50(0x194, 0x0a8, 0x180, 0x0b4, 0x0d4, 0x1bc, 0x0bc, 0x188)
941 RULE50(0x195, 0x0b5, 0x0d5, 0x1bd, 0x0bd, 0x1af, 0x0cf, 0x1a7)
942 RULE50(0x196, 0x08d, 0x165, 0x0b6, 0x0d6, 0x1be, 0x0be, 0x16d)
943 RULE50(0x197, 0x08c, 0x164, 0x0b7, 0x0d7, 0x1bf, 0x0bf, 0x16c)
944 RULE50(0x198, 0x098, 0x170, 0x0b0, 0x184, 0x0a4, 0x18c, 0x0b8)
945 RULE50(0x199, 0x099, 0x171, 0x0b1, 0x1a3, 0x0c3, 0x1ab, 0x0b9)
946 RULE50(0x19a, 0x081, 0x169, 0x0ba, 0x09a, 0x172, 0x0b2, 0x161)
947 RULE50(0x19b, 0x080, 0x168, 0x0bb, 0x09b, 0x173, 0x0b3, 0x160)
948 RULE50(0x19c, 0x09c, 0x174, 0x0b4, 0x180, 0x0a0, 0x188, 0x0bc)
949 RULE50(0x19d, 0x09d, 0x175, 0x0b5, 0x1a7, 0x0c7, 0x1af, 0x0bd)
950 RULE50(0x19e, 0x085, 0x16d, 0x0be, 0x09e, 0x176, 0x0b6, 0x165)
951 RULE50(0x19f, 0x084, 0x16c, 0x0bf, 0x09f, 0x177, 0x0b7, 0x164)
952 RULE50(0x1a0, 0x0a0, 0x0c0, 0x1bd, 0x0d5, 0x1b5, 0x0c8, 0x188)
953 RULE50(0x1a1, 0x0a1, 0x0c1, 0x1bc, 0x0d4, 0x1b4, 0x0c9, 0x189)
954 RULE50(0x1a2, 0x0a2, 0x0c2, 0x1db, 0x0f3, 0x1d3, 0x0ca, 0x18a)
955 RULE50(0x1a3, 0x0a3, 0x0c3, 0x199, 0x0b1, 0x191, 0x0cb, 0x18b)
956 RULE50(0x1a4, 0x0a4, 0x0c4, 0x1b9, 0x0d1, 0x1b1, 0x0cc, 0x18c)
957 RULE50(0x1a5, 0x0a5, 0x0c5, 0x1b8, 0x0d0, 0x1b0, 0x0cd, 0x18d)
958 RULE50(0x1a6, 0x0a6, 0x0c6, 0x1df, 0x0f7, 0x1d7, 0x0ce, 0x18e)
959 RULE50(0x1a7, 0x0a7, 0x0c7, 0x19d, 0x0b5, 0x195, 0x0cf, 0x18f)
960 RULE50(0x1a8, 0x0c0, 0x1c0, 0x0e8, 0x0c8, 0x1b5, 0x0dd, 0x1bd)
961 RULE50(0x1a9, 0x0c1, 0x1c1, 0x0e9, 0x0c9, 0x1b4, 0x0dc, 0x1bc)
962 RULE50(0x1aa, 0x0c2, 0x1c2, 0x0ea, 0x0ca, 0x1d3, 0x0fb, 0x1db)
963 RULE50(0x1ab, 0x0b9, 0x199, 0x0c3, 0x1c3, 0x0eb, 0x0cb, 0x191)
964 RULE50(0x1ac, 0x0c4, 0x1c4, 0x0ec, 0x0cc, 0x1b1, 0x0d9, 0x1b9)
965 RULE50(0x1ad, 0x0c5, 0x1c5, 0x0ed, 0x0cd, 0x1b0, 0x0d8, 0x1b8)
966 RULE50(0x1ae, 0x0c6, 0x1c6, 0x0ee, 0x0ce, 0x1d7, 0x0ff, 0x1df)
967 RULE50(0x1af, 0x0bd, 0x19d, 0x0c7, 0x1c7, 0x0ef, 0x0cf, 0x195)
968 RULE50(0x1b0, 0x0cd, 0x1a5, 0x0d0, 0x0f0, 0x1d8, 0x0d8, 0x1ad)
969 RULE50(0x1b1, 0x0cc, 0x1a4, 0x0d1, 0x0f1, 0x1d9, 0x0d9, 0x1ac)
970 RULE50(0x1b2, 0x0d2, 0x0f2, 0x1da, 0x0da, 0x1cb, 0x0eb, 0x1c3)
971 RULE50(0x1b3, 0x0a9, 0x181, 0x0d3, 0x0f3, 0x1db, 0x0db, 0x189)
972 RULE50(0x1b4, 0x0c9, 0x1a1, 0x0d4, 0x0f4, 0x1dc, 0x0dc, 0x1a9)
973 RULE50(0x1b5, 0x0c8, 0x1a0, 0x0d5, 0x0f5, 0x1dd, 0x0dd, 0x1a8)
974 RULE50(0x1b6, 0x0d6, 0x0f6, 0x1de, 0x0de, 0x1cf, 0x0ef, 0x1c7)
975 RULE50(0x1b7, 0x0ad, 0x185, 0x0d7, 0x0f7, 0x1df, 0x0df, 0x18d)
976 RULE50(0x1b8, 0x0b8, 0x190, 0x0d0, 0x1a5, 0x0c5, 0x1ad, 0x0d8)
977 RULE50(0x1b9, 0x0b9, 0x191, 0x0d1, 0x1a4, 0x0c4, 0x1ac, 0x0d9)
978 RULE50(0x1ba, 0x0ba, 0x192, 0x0d2, 0x1c3, 0x0e3, 0x1cb, 0x0da)
979 RULE50(0x1bb, 0x0a1, 0x189, 0x0db, 0x0bb, 0x193, 0x0d3, 0x181)
980 RULE50(0x1bc, 0x0bc, 0x194, 0x0d4, 0x1a1, 0x0c1, 0x1a9, 0x0dc)
981 RULE50(0x1bd, 0x0bd, 0x195, 0x0d5, 0x1a0, 0x0c0, 0x1a8, 0x0dd)
982 RULE50(0x1be, 0x0be, 0x196, 0x0d6, 0x1c7, 0x0e7, 0x1cf, 0x0de)
983 RULE50(0x1bf, 0x0a5, 0x18d, 0x0df, 0x0bf, 0x197, 0x0d7, 0x185)
984 RULE50(0x1c0, 0x0c0, 0x0e0, 0x1de, 0x0f6, 0x1d6, 0x0e8, 0x1a8)
985 RULE50(0x1c1, 0x0c1, 0x0e1, 0x1dd, 0x0f5, 0x1d5, 0x0e9, 0x1a9)
986 RULE50(0x1c2, 0x0c2, 0x0e2, 0x1dc, 0x0f4, 0x1d4, 0x0ea, 0x1aa)
987 RULE50(0x1c3, 0x0c3, 0x0e3, 0x1ba, 0x0d2, 0x1b2, 0x0eb, 0x1ab)
988 RULE50(0x1c4, 0x0c4, 0x0e4, 0x1da, 0x0f2, 0x1d2, 0x0ec, 0x1ac)
989 RULE50(0x1c5, 0x0c5, 0x0e5, 0x1d9, 0x0f1, 0x1d1, 0x0ed, 0x1ad)
990 RULE50(0x1c6, 0x0c6, 0x0e6, 0x1d8, 0x0f0, 0x1d0, 0x0ee, 0x1ae)
991 RULE50(0x1c7, 0x0c7, 0x0e7, 0x1be, 0x0d6, 0x1b6, 0x0ef, 0x1af)
992 RULE50(0x1c8, 0x028, 0x0e8, 0x1d6, 0x0fe, 0x1de, 0x0e0, 0x100)
993 RULE50(0x1c9, 0x029, 0x0e9, 0x1d5, 0x0fd, 0x1dd, 0x0e1, 0x101)
994 RULE50(0x1ca, 0x02a, 0x0ea, 0x1d4, 0x0fc, 0x1dc, 0x0e2, 0x102)
995 RULE50(0x1cb, 0x02b, 0x0eb, 0x1b2, 0x0da, 0x1ba, 0x0e3, 0x103)
996 RULE50(0x1cc, 0x02c, 0x0ec, 0x1d2, 0x0fa, 0x1da, 0x0e4, 0x104)
997 RULE50(0x1cd, 0x02d, 0x0ed, 0x1d1, 0x0f9, 0x1d9, 0x0e5, 0x105)
998 RULE50(0x1ce, 0x02e, 0x0ee, 0x1d0, 0x0f8, 0x1d8, 0x0e6, 0x106)
999 RULE50(0x1cf, 0x02f, 0x0ef, 0x1b6, 0x0de, 0x1be, 0x0e7, 0x107)
1000 RULE50(0x1d0, 0x030, 0x118, 0x0f8, 0x1ce, 0x0ee, 0x1c6, 0x0f0)
1001 RULE50(0x1d1, 0x031, 0x119, 0x0f9, 0x1cd, 0x0ed, 0x1c5, 0x0f1)
1002 RULE50(0x1d2, 0x032, 0x11a, 0x0fa, 0x1cc, 0x0ec, 0x1c4, 0x0f2)
1003 RULE50(0x1d3, 0x033, 0x11b, 0x0fb, 0x1aa, 0x0ca, 0x1a2, 0x0f3)
1004 RULE50(0x1d4, 0x034, 0x11c, 0x0fc, 0x1ca, 0x0ea, 0x1c2, 0x0f4)
1005 RULE50(0x1d5, 0x035, 0x11d, 0x0fd, 0x1c9, 0x0e9, 0x1c1, 0x0f5)
1006 RULE50(0x1d6, 0x036, 0x11e, 0x0fe, 0x1c8, 0x0e8, 0x1c0, 0x0f6)
1007 RULE50(0x1d7, 0x037, 0x11f, 0x0ff, 0x1ae, 0x0ce, 0x1a6, 0x0f7)
1008 RULE50(0x1d8, 0x0d8, 0x1b0, 0x0f0, 0x1c6, 0x0e6, 0x1ce, 0x0f8)
1009 RULE50(0x1d9, 0x0d9, 0x1b1, 0x0f1, 0x1c5, 0x0e5, 0x1cd, 0x0f9)
1010 RULE50(0x1da, 0x0da, 0x1b2, 0x0f2, 0x1c4, 0x0e4, 0x1cc, 0x0fa)
1011 RULE50(0x1db, 0x0c2, 0x1aa, 0x0fb, 0x0db, 0x1b3, 0x0f3, 0x1a2)
1012 RULE50(0x1dc, 0x0dc, 0x1b4, 0x0f4, 0x1c2, 0x0e2, 0x1ca, 0x0fc)
1013 RULE50(0x1dd, 0x0dd, 0x1b5, 0x0f5, 0x1c1, 0x0e1, 0x1c9, 0x0fd)
1014 RULE50(0x1de, 0x0de, 0x1b6, 0x0f6, 0x1c0, 0x0e0, 0x1c8, 0x0fe)
1015 RULE50(0x1df, 0x0c6, 0x1ae, 0x0ff, 0x0df, 0x1b7, 0x0f7, 0x1a6)
1016 };
1017
1018 #undef RULE50
1019
firstfiftyval(int d)1020 EX int firstfiftyval(int d) {
1021 if(S7 == 8 && d > 3) d--;
1022 return fiftytable[0][d];
1023 }
1024
nextfiftyval(int par,int gpar,int d)1025 EX int nextfiftyval(int par, int gpar, int d) {
1026 if(S7 == 8 && d > 3) d--;
1027 for(int i=0; i<7; i++) if(fiftytable[par][i] == gpar)
1028 return fiftytable[par][(i+d)%7];
1029 if(weirdhyperbolic) return 0;
1030 printf("fifty pattern error!\n");
1031 exit(1);
1032 }
1033
land50(int x)1034 EX int land50(int x) { return x&7; }
1035
polara50(int x)1036 EX bool polara50(int x) { return x&8; }
1037
polarb50(int x)1038 EX bool polarb50(int x) { return x&16; }
1039
cdist50(int x)1040 EX int cdist50(int x) {
1041 x /= 32;
1042 if(x == 0) return 0;
1043 if(x < 8) return 2;
1044 return 3;
1045 }
1046
1047 int zebratable[12][7] = {
1048 {50, 70, 60, 120, 80, 100, 64},
1049 {40, 65, 72, 130, 90, 110, 76},
1050 {45, 71, 56, 41, 101, 140, 126},
1051 {46, 51, 111, 150, 136, 55, 66},
1052 {43, 121, 145, 103, 93, 114, 106},
1053 {53, 131, 155, 113, 83, 104, 116},
1054 {42, 81, 115, 92, 84, 146, 63},
1055 {52, 91, 105, 82, 94, 156, 75},
1056 {44, 61, 141, 134, 152, 144, 86},
1057 {54, 73, 151, 124, 142, 154, 96},
1058 {62, 102, 85, 122, 153, 133, 125},
1059 {74, 112, 95, 132, 143, 123, 135}
1060 };
1061
1062 EX int zebratable6[28][3] = {
1063 {4,10,6}, {5,11,7}, {4,6,12}, {5,7,13},
1064 {8,14,10}, {9,15,11}, {4,8,10}, {5,9,11},
1065 {6,14,12}, {7,15,13}, {8,12,14}, {9,13,15},
1066 {4,7,6}, {5,6,7}, {4,6,5}, {4,5,7},
1067 {8,11,10}, {9,10,11}, {8,10,9}, {8,9,11},
1068 {12,15,14}, {13,14,15}, {12,14,13}, {12,13,15},
1069 {6,10,14}, {7,11,15}, {4,12,8}, {5,13,9}
1070 };
1071
1072 // rules for the emeraldvalues of heptagons.
zebra_heptagon(int parent,int dir)1073 EX int zebra_heptagon(int parent, int dir) {
1074 if(S3 == 4) {
1075 int mm = (parent % 10 + S7 - dir) % S7;
1076 int mv = parent / 10;
1077 // whichbright: d&1
1078 if(S7 == 5) switch(mm) {
1079 case 0:
1080 return 10 * (mv^1);
1081 case 1:
1082 return 10 * (mv^2) + 4;
1083 case 2:
1084 return 10 * (mv^4) + 3;
1085 case 3:
1086 return 10 * (mv^4) + 2;
1087 case 4:
1088 return 10 * (mv^2) + 1;
1089 }
1090 if(S7 == 7) switch(mm) {
1091 case 0:
1092 return 10 * (mv^2);
1093 case 1:
1094 return 10 * (mv^1) + 6;
1095 case 2:
1096 return 10 * (mv^2) + 5;
1097 case 3:
1098 return 10 * (mv^4) + 4;
1099 case 4:
1100 return 10 * (mv^4) + 3;
1101 case 5:
1102 return 10 * (mv^2) + 2;
1103 case 6:
1104 return 10 * (mv^1) + 1;
1105 }
1106 if(S7 == 6) switch(mm) {
1107 case 0:
1108 return 10 * (mv^2);
1109 case 1:
1110 return 10 * (mv^1) + 5;
1111 case 2:
1112 return 10 * (mv^2) + 4;
1113 case 3:
1114 return 10 * (mv^1) + 3;
1115 case 4:
1116 return 10 * (mv^2) + 2;
1117 case 5:
1118 return 10 * (mv^1) + 1;
1119 }
1120 }
1121 if(S7 == 8 && dir > 3) dir--;
1122 return zebratable[parent/10-4][(70+dir-(parent%10))%7];
1123 }
1124
fifty_38(int f,int d)1125 EX int fifty_38(int f, int d) {
1126 // This creates the 'p' pattern for the a38 geometry.
1127 // Hexagons have codes 4 and 8, while octagons have 0, 1, 2.
1128 // Heptagons also have a 'dock flag' which is flipped
1129 // for almost-adjacent octagons of the same code
1130
1131 // f&1 is which direction is the hexagon with code '4'
1132
1133 // c=((f>>1)&3) is 0, 1, or 2
1134 int c = ((f>>1)&3);
1135
1136 // (f>>3)&3: in which direction is c increasing by one (keeping the dock flag)
1137 int ssub = (f>>3) & 3;
1138
1139 // f&32: dock flags
1140 int dockflip[2][4] = {{1+24, 2+0, 1+32+8, 2+32+0}, {1+8, 2+32+16, 1+32+24, 2+16}};
1141
1142 int d2 = (d-ssub) & 3;
1143 int dock = (f>>5) & 1;
1144
1145 return
1146 ((f ^ d ^ 1) & 1)
1147 + (((c + (dockflip[dock][d2]&3)) % 3) << 1)
1148 + (dockflip[dock][d2]&~3);
1149 }
1150 }
1151