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