summaryrefslogtreecommitdiff
path: root/apps/plugins/puzzles/src/spectre-tables-auto.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/puzzles/src/spectre-tables-auto.h')
-rw-r--r--apps/plugins/puzzles/src/spectre-tables-auto.h1220
1 files changed, 1220 insertions, 0 deletions
diff --git a/apps/plugins/puzzles/src/spectre-tables-auto.h b/apps/plugins/puzzles/src/spectre-tables-auto.h
new file mode 100644
index 0000000000..a41c4e1d18
--- /dev/null
+++ b/apps/plugins/puzzles/src/spectre-tables-auto.h
@@ -0,0 +1,1220 @@
1/*
2 * Autogenerated transition tables for the Spectre tiling.
3 * Generated by auxiliary/spectre-gen.c.
4 */
5
6static const struct MapEntry hexmap_G[] = {
7 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
8 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
9 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
10 { false, 2, 0 }, /* edge 3 of hex 0 (F) */
11 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
12 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
13 { true, 0, 2 }, /* edge 0 of hex 1 (X) */
14 { true, 3, 4 }, /* edge 1 of hex 1 (X) */
15 { false, 3, 1 }, /* edge 2 of hex 1 (X) */
16 { false, 3, 0 }, /* edge 3 of hex 1 (X) */
17 { false, 2, 2 }, /* edge 4 of hex 1 (X) */
18 { false, 2, 1 }, /* edge 5 of hex 1 (X) */
19 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
20 { false, 0, 1 }, /* edge 1 of hex 2 (G) */
21 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
22 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
23 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
24 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
25 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
26 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
27 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
28 { false, 3, 2 }, /* edge 3 of hex 3 (S) */
29 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
30 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
31 { true, 5, 2 }, /* edge 0 of hex 4 (P) */
32 { true, 2, 2 }, /* edge 1 of hex 4 (P) */
33 { false, 0, 0 }, /* edge 2 of hex 4 (P) */
34 { false, 5, 1 }, /* edge 3 of hex 4 (P) */
35 { false, 5, 0 }, /* edge 4 of hex 4 (P) */
36 { false, 4, 4 }, /* edge 5 of hex 4 (P) */
37 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
38 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
39 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
40 { false, 4, 3 }, /* edge 3 of hex 5 (D) */
41 { false, 4, 2 }, /* edge 4 of hex 5 (D) */
42 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
43 { true, 3, 2 }, /* edge 0 of hex 6 (J) */
44 { true, 5, 5 }, /* edge 1 of hex 6 (J) */
45 { false, 4, 1 }, /* edge 2 of hex 6 (J) */
46 { false, 4, 0 }, /* edge 3 of hex 6 (J) */
47 { false, 3, 4 }, /* edge 4 of hex 6 (J) */
48 { false, 3, 3 }, /* edge 5 of hex 6 (J) */
49};
50static const struct MapEdge hexedges_G[] = {
51 { 0, 2 },
52 { 2, 3 },
53 { 5, 3 },
54 { 8, 5 },
55 { 13, 5 },
56 { 18, 2 },
57};
58static const struct MapEntry hexin_G[] = {
59 { true, 4, 2 }, /* subedge 0 of edge 0 */
60 { true, 2, 1 }, /* subedge 1 of edge 0 */
61 { true, 2, 0 }, /* subedge 0 of edge 1 */
62 { true, 0, 5 }, /* subedge 1 of edge 1 */
63 { true, 0, 4 }, /* subedge 2 of edge 1 */
64 { true, 0, 3 }, /* subedge 0 of edge 2 */
65 { true, 1, 5 }, /* subedge 1 of edge 2 */
66 { true, 1, 4 }, /* subedge 2 of edge 2 */
67 { true, 1, 3 }, /* subedge 0 of edge 3 */
68 { true, 1, 2 }, /* subedge 1 of edge 3 */
69 { true, 3, 3 }, /* subedge 2 of edge 3 */
70 { true, 6, 5 }, /* subedge 3 of edge 3 */
71 { true, 6, 4 }, /* subedge 4 of edge 3 */
72 { true, 6, 3 }, /* subedge 0 of edge 4 */
73 { true, 6, 2 }, /* subedge 1 of edge 4 */
74 { true, 5, 4 }, /* subedge 2 of edge 4 */
75 { true, 5, 3 }, /* subedge 3 of edge 4 */
76 { true, 4, 5 }, /* subedge 4 of edge 4 */
77 { true, 4, 4 }, /* subedge 0 of edge 5 */
78 { true, 4, 3 }, /* subedge 1 of edge 5 */
79};
80static const struct MapEntry hexmap_D[] = {
81 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
82 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
83 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
84 { false, 1, 3 }, /* edge 3 of hex 0 (F) */
85 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
86 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
87 { true, 0, 2 }, /* edge 0 of hex 1 (P) */
88 { true, 3, 4 }, /* edge 1 of hex 1 (P) */
89 { false, 3, 0 }, /* edge 2 of hex 1 (P) */
90 { false, 2, 1 }, /* edge 3 of hex 1 (P) */
91 { false, 2, 0 }, /* edge 4 of hex 1 (P) */
92 { false, 1, 4 }, /* edge 5 of hex 1 (P) */
93 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
94 { false, 0, 2 }, /* edge 1 of hex 2 (G) */
95 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
96 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
97 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
98 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
99 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
100 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
101 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
102 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
103 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
104 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
105 { true, 5, 2 }, /* edge 0 of hex 4 (X) */
106 { true, 2, 2 }, /* edge 1 of hex 4 (X) */
107 { false, 0, 1 }, /* edge 2 of hex 4 (X) */
108 { false, 0, 0 }, /* edge 3 of hex 4 (X) */
109 { false, 5, 4 }, /* edge 4 of hex 4 (X) */
110 { false, 5, 3 }, /* edge 5 of hex 4 (X) */
111 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
112 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
113 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
114 { false, 5, 2 }, /* edge 3 of hex 5 (D) */
115 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
116 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
117 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
118 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
119 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
120 { false, 4, 0 }, /* edge 3 of hex 6 (F) */
121 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
122 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
123 { true, 6, 2 }, /* edge 0 of hex 7 (X) */
124 { true, 5, 4 }, /* edge 1 of hex 7 (X) */
125 { false, 5, 1 }, /* edge 2 of hex 7 (X) */
126 { false, 5, 0 }, /* edge 3 of hex 7 (X) */
127 { false, 4, 2 }, /* edge 4 of hex 7 (X) */
128 { false, 4, 1 }, /* edge 5 of hex 7 (X) */
129};
130static const struct MapEdge hexedges_D[] = {
131 { 0, 3 },
132 { 3, 5 },
133 { 8, 2 },
134 { 10, 4 },
135 { 14, 3 },
136 { 17, 5 },
137};
138static const struct MapEntry hexin_D[] = {
139 { true, 4, 3 }, /* subedge 0 of edge 0 */
140 { true, 4, 2 }, /* subedge 1 of edge 0 */
141 { true, 2, 1 }, /* subedge 2 of edge 0 */
142 { true, 2, 0 }, /* subedge 0 of edge 1 */
143 { true, 0, 5 }, /* subedge 1 of edge 1 */
144 { true, 0, 4 }, /* subedge 2 of edge 1 */
145 { true, 0, 3 }, /* subedge 3 of edge 1 */
146 { true, 1, 5 }, /* subedge 4 of edge 1 */
147 { true, 1, 4 }, /* subedge 0 of edge 2 */
148 { true, 1, 3 }, /* subedge 1 of edge 2 */
149 { true, 1, 2 }, /* subedge 0 of edge 3 */
150 { true, 3, 3 }, /* subedge 1 of edge 3 */
151 { true, 6, 5 }, /* subedge 2 of edge 3 */
152 { true, 6, 4 }, /* subedge 3 of edge 3 */
153 { true, 6, 3 }, /* subedge 0 of edge 4 */
154 { true, 7, 5 }, /* subedge 1 of edge 4 */
155 { true, 7, 4 }, /* subedge 2 of edge 4 */
156 { true, 7, 3 }, /* subedge 0 of edge 5 */
157 { true, 7, 2 }, /* subedge 1 of edge 5 */
158 { true, 5, 3 }, /* subedge 2 of edge 5 */
159 { true, 4, 5 }, /* subedge 3 of edge 5 */
160 { true, 4, 4 }, /* subedge 4 of edge 5 */
161};
162static const struct MapEntry hexmap_J[] = {
163 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
164 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
165 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
166 { false, 1, 3 }, /* edge 3 of hex 0 (F) */
167 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
168 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
169 { true, 0, 2 }, /* edge 0 of hex 1 (P) */
170 { true, 3, 4 }, /* edge 1 of hex 1 (P) */
171 { false, 3, 0 }, /* edge 2 of hex 1 (P) */
172 { false, 2, 1 }, /* edge 3 of hex 1 (P) */
173 { false, 2, 0 }, /* edge 4 of hex 1 (P) */
174 { false, 1, 4 }, /* edge 5 of hex 1 (P) */
175 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
176 { false, 0, 1 }, /* edge 1 of hex 2 (G) */
177 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
178 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
179 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
180 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
181 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
182 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
183 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
184 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
185 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
186 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
187 { true, 5, 2 }, /* edge 0 of hex 4 (Y) */
188 { true, 2, 2 }, /* edge 1 of hex 4 (Y) */
189 { false, 0, 0 }, /* edge 2 of hex 4 (Y) */
190 { false, 5, 4 }, /* edge 3 of hex 4 (Y) */
191 { false, 5, 3 }, /* edge 4 of hex 4 (Y) */
192 { false, 5, 2 }, /* edge 5 of hex 4 (Y) */
193 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
194 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
195 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
196 { false, 5, 1 }, /* edge 3 of hex 5 (D) */
197 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
198 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
199 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
200 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
201 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
202 { false, 3, 4 }, /* edge 3 of hex 6 (F) */
203 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
204 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
205 { true, 6, 2 }, /* edge 0 of hex 7 (P) */
206 { true, 5, 4 }, /* edge 1 of hex 7 (P) */
207 { false, 5, 0 }, /* edge 2 of hex 7 (P) */
208 { false, 4, 1 }, /* edge 3 of hex 7 (P) */
209 { false, 4, 0 }, /* edge 4 of hex 7 (P) */
210 { false, 3, 5 }, /* edge 5 of hex 7 (P) */
211};
212static const struct MapEdge hexedges_J[] = {
213 { 0, 2 },
214 { 2, 5 },
215 { 7, 2 },
216 { 9, 6 },
217 { 15, 2 },
218 { 17, 5 },
219};
220static const struct MapEntry hexin_J[] = {
221 { true, 4, 2 }, /* subedge 0 of edge 0 */
222 { true, 2, 1 }, /* subedge 1 of edge 0 */
223 { true, 2, 0 }, /* subedge 0 of edge 1 */
224 { true, 0, 5 }, /* subedge 1 of edge 1 */
225 { true, 0, 4 }, /* subedge 2 of edge 1 */
226 { true, 0, 3 }, /* subedge 3 of edge 1 */
227 { true, 1, 5 }, /* subedge 4 of edge 1 */
228 { true, 1, 4 }, /* subedge 0 of edge 2 */
229 { true, 1, 3 }, /* subedge 1 of edge 2 */
230 { true, 1, 2 }, /* subedge 0 of edge 3 */
231 { true, 3, 3 }, /* subedge 1 of edge 3 */
232 { true, 6, 5 }, /* subedge 2 of edge 3 */
233 { true, 6, 4 }, /* subedge 3 of edge 3 */
234 { true, 6, 3 }, /* subedge 4 of edge 3 */
235 { true, 7, 5 }, /* subedge 5 of edge 3 */
236 { true, 7, 4 }, /* subedge 0 of edge 4 */
237 { true, 7, 3 }, /* subedge 1 of edge 4 */
238 { true, 7, 2 }, /* subedge 0 of edge 5 */
239 { true, 5, 3 }, /* subedge 1 of edge 5 */
240 { true, 4, 5 }, /* subedge 2 of edge 5 */
241 { true, 4, 4 }, /* subedge 3 of edge 5 */
242 { true, 4, 3 }, /* subedge 4 of edge 5 */
243};
244static const struct MapEntry hexmap_L[] = {
245 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
246 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
247 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
248 { false, 1, 3 }, /* edge 3 of hex 0 (F) */
249 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
250 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
251 { true, 0, 2 }, /* edge 0 of hex 1 (P) */
252 { true, 3, 4 }, /* edge 1 of hex 1 (P) */
253 { false, 3, 0 }, /* edge 2 of hex 1 (P) */
254 { false, 2, 1 }, /* edge 3 of hex 1 (P) */
255 { false, 2, 0 }, /* edge 4 of hex 1 (P) */
256 { false, 1, 4 }, /* edge 5 of hex 1 (P) */
257 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
258 { false, 0, 1 }, /* edge 1 of hex 2 (G) */
259 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
260 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
261 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
262 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
263 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
264 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
265 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
266 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
267 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
268 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
269 { true, 5, 2 }, /* edge 0 of hex 4 (Y) */
270 { true, 2, 2 }, /* edge 1 of hex 4 (Y) */
271 { false, 0, 0 }, /* edge 2 of hex 4 (Y) */
272 { false, 5, 5 }, /* edge 3 of hex 4 (Y) */
273 { false, 5, 4 }, /* edge 4 of hex 4 (Y) */
274 { false, 5, 3 }, /* edge 5 of hex 4 (Y) */
275 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
276 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
277 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
278 { false, 5, 2 }, /* edge 3 of hex 5 (D) */
279 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
280 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
281 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
282 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
283 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
284 { false, 4, 0 }, /* edge 3 of hex 6 (F) */
285 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
286 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
287 { true, 6, 2 }, /* edge 0 of hex 7 (X) */
288 { true, 5, 4 }, /* edge 1 of hex 7 (X) */
289 { false, 5, 1 }, /* edge 2 of hex 7 (X) */
290 { false, 5, 0 }, /* edge 3 of hex 7 (X) */
291 { false, 4, 2 }, /* edge 4 of hex 7 (X) */
292 { false, 4, 1 }, /* edge 5 of hex 7 (X) */
293};
294static const struct MapEdge hexedges_L[] = {
295 { 0, 2 },
296 { 2, 5 },
297 { 7, 2 },
298 { 9, 4 },
299 { 13, 3 },
300 { 16, 6 },
301};
302static const struct MapEntry hexin_L[] = {
303 { true, 4, 2 }, /* subedge 0 of edge 0 */
304 { true, 2, 1 }, /* subedge 1 of edge 0 */
305 { true, 2, 0 }, /* subedge 0 of edge 1 */
306 { true, 0, 5 }, /* subedge 1 of edge 1 */
307 { true, 0, 4 }, /* subedge 2 of edge 1 */
308 { true, 0, 3 }, /* subedge 3 of edge 1 */
309 { true, 1, 5 }, /* subedge 4 of edge 1 */
310 { true, 1, 4 }, /* subedge 0 of edge 2 */
311 { true, 1, 3 }, /* subedge 1 of edge 2 */
312 { true, 1, 2 }, /* subedge 0 of edge 3 */
313 { true, 3, 3 }, /* subedge 1 of edge 3 */
314 { true, 6, 5 }, /* subedge 2 of edge 3 */
315 { true, 6, 4 }, /* subedge 3 of edge 3 */
316 { true, 6, 3 }, /* subedge 0 of edge 4 */
317 { true, 7, 5 }, /* subedge 1 of edge 4 */
318 { true, 7, 4 }, /* subedge 2 of edge 4 */
319 { true, 7, 3 }, /* subedge 0 of edge 5 */
320 { true, 7, 2 }, /* subedge 1 of edge 5 */
321 { true, 5, 3 }, /* subedge 2 of edge 5 */
322 { true, 4, 5 }, /* subedge 3 of edge 5 */
323 { true, 4, 4 }, /* subedge 4 of edge 5 */
324 { true, 4, 3 }, /* subedge 5 of edge 5 */
325};
326static const struct MapEntry hexmap_X[] = {
327 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
328 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
329 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
330 { false, 2, 0 }, /* edge 3 of hex 0 (F) */
331 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
332 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
333 { true, 0, 2 }, /* edge 0 of hex 1 (Y) */
334 { true, 3, 4 }, /* edge 1 of hex 1 (Y) */
335 { false, 3, 0 }, /* edge 2 of hex 1 (Y) */
336 { false, 2, 3 }, /* edge 3 of hex 1 (Y) */
337 { false, 2, 2 }, /* edge 4 of hex 1 (Y) */
338 { false, 2, 1 }, /* edge 5 of hex 1 (Y) */
339 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
340 { false, 0, 1 }, /* edge 1 of hex 2 (G) */
341 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
342 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
343 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
344 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
345 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
346 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
347 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
348 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
349 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
350 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
351 { true, 5, 2 }, /* edge 0 of hex 4 (Y) */
352 { true, 2, 2 }, /* edge 1 of hex 4 (Y) */
353 { false, 0, 0 }, /* edge 2 of hex 4 (Y) */
354 { false, 5, 4 }, /* edge 3 of hex 4 (Y) */
355 { false, 5, 3 }, /* edge 4 of hex 4 (Y) */
356 { false, 5, 2 }, /* edge 5 of hex 4 (Y) */
357 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
358 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
359 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
360 { false, 5, 1 }, /* edge 3 of hex 5 (D) */
361 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
362 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
363 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
364 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
365 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
366 { false, 3, 4 }, /* edge 3 of hex 6 (F) */
367 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
368 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
369 { true, 6, 2 }, /* edge 0 of hex 7 (P) */
370 { true, 5, 4 }, /* edge 1 of hex 7 (P) */
371 { false, 5, 0 }, /* edge 2 of hex 7 (P) */
372 { false, 4, 1 }, /* edge 3 of hex 7 (P) */
373 { false, 4, 0 }, /* edge 4 of hex 7 (P) */
374 { false, 3, 5 }, /* edge 5 of hex 7 (P) */
375};
376static const struct MapEdge hexedges_X[] = {
377 { 0, 2 },
378 { 2, 3 },
379 { 5, 4 },
380 { 9, 6 },
381 { 15, 2 },
382 { 17, 5 },
383};
384static const struct MapEntry hexin_X[] = {
385 { true, 4, 2 }, /* subedge 0 of edge 0 */
386 { true, 2, 1 }, /* subedge 1 of edge 0 */
387 { true, 2, 0 }, /* subedge 0 of edge 1 */
388 { true, 0, 5 }, /* subedge 1 of edge 1 */
389 { true, 0, 4 }, /* subedge 2 of edge 1 */
390 { true, 0, 3 }, /* subedge 0 of edge 2 */
391 { true, 1, 5 }, /* subedge 1 of edge 2 */
392 { true, 1, 4 }, /* subedge 2 of edge 2 */
393 { true, 1, 3 }, /* subedge 3 of edge 2 */
394 { true, 1, 2 }, /* subedge 0 of edge 3 */
395 { true, 3, 3 }, /* subedge 1 of edge 3 */
396 { true, 6, 5 }, /* subedge 2 of edge 3 */
397 { true, 6, 4 }, /* subedge 3 of edge 3 */
398 { true, 6, 3 }, /* subedge 4 of edge 3 */
399 { true, 7, 5 }, /* subedge 5 of edge 3 */
400 { true, 7, 4 }, /* subedge 0 of edge 4 */
401 { true, 7, 3 }, /* subedge 1 of edge 4 */
402 { true, 7, 2 }, /* subedge 0 of edge 5 */
403 { true, 5, 3 }, /* subedge 1 of edge 5 */
404 { true, 4, 5 }, /* subedge 2 of edge 5 */
405 { true, 4, 4 }, /* subedge 3 of edge 5 */
406 { true, 4, 3 }, /* subedge 4 of edge 5 */
407};
408static const struct MapEntry hexmap_P[] = {
409 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
410 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
411 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
412 { false, 2, 0 }, /* edge 3 of hex 0 (F) */
413 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
414 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
415 { true, 0, 2 }, /* edge 0 of hex 1 (Y) */
416 { true, 3, 4 }, /* edge 1 of hex 1 (Y) */
417 { false, 3, 0 }, /* edge 2 of hex 1 (Y) */
418 { false, 2, 3 }, /* edge 3 of hex 1 (Y) */
419 { false, 2, 2 }, /* edge 4 of hex 1 (Y) */
420 { false, 2, 1 }, /* edge 5 of hex 1 (Y) */
421 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
422 { false, 0, 1 }, /* edge 1 of hex 2 (G) */
423 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
424 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
425 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
426 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
427 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
428 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
429 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
430 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
431 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
432 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
433 { true, 5, 2 }, /* edge 0 of hex 4 (Y) */
434 { true, 2, 2 }, /* edge 1 of hex 4 (Y) */
435 { false, 0, 0 }, /* edge 2 of hex 4 (Y) */
436 { false, 5, 5 }, /* edge 3 of hex 4 (Y) */
437 { false, 5, 4 }, /* edge 4 of hex 4 (Y) */
438 { false, 5, 3 }, /* edge 5 of hex 4 (Y) */
439 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
440 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
441 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
442 { false, 5, 2 }, /* edge 3 of hex 5 (D) */
443 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
444 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
445 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
446 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
447 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
448 { false, 4, 0 }, /* edge 3 of hex 6 (F) */
449 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
450 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
451 { true, 6, 2 }, /* edge 0 of hex 7 (X) */
452 { true, 5, 4 }, /* edge 1 of hex 7 (X) */
453 { false, 5, 1 }, /* edge 2 of hex 7 (X) */
454 { false, 5, 0 }, /* edge 3 of hex 7 (X) */
455 { false, 4, 2 }, /* edge 4 of hex 7 (X) */
456 { false, 4, 1 }, /* edge 5 of hex 7 (X) */
457};
458static const struct MapEdge hexedges_P[] = {
459 { 0, 2 },
460 { 2, 3 },
461 { 5, 4 },
462 { 9, 4 },
463 { 13, 3 },
464 { 16, 6 },
465};
466static const struct MapEntry hexin_P[] = {
467 { true, 4, 2 }, /* subedge 0 of edge 0 */
468 { true, 2, 1 }, /* subedge 1 of edge 0 */
469 { true, 2, 0 }, /* subedge 0 of edge 1 */
470 { true, 0, 5 }, /* subedge 1 of edge 1 */
471 { true, 0, 4 }, /* subedge 2 of edge 1 */
472 { true, 0, 3 }, /* subedge 0 of edge 2 */
473 { true, 1, 5 }, /* subedge 1 of edge 2 */
474 { true, 1, 4 }, /* subedge 2 of edge 2 */
475 { true, 1, 3 }, /* subedge 3 of edge 2 */
476 { true, 1, 2 }, /* subedge 0 of edge 3 */
477 { true, 3, 3 }, /* subedge 1 of edge 3 */
478 { true, 6, 5 }, /* subedge 2 of edge 3 */
479 { true, 6, 4 }, /* subedge 3 of edge 3 */
480 { true, 6, 3 }, /* subedge 0 of edge 4 */
481 { true, 7, 5 }, /* subedge 1 of edge 4 */
482 { true, 7, 4 }, /* subedge 2 of edge 4 */
483 { true, 7, 3 }, /* subedge 0 of edge 5 */
484 { true, 7, 2 }, /* subedge 1 of edge 5 */
485 { true, 5, 3 }, /* subedge 2 of edge 5 */
486 { true, 4, 5 }, /* subedge 3 of edge 5 */
487 { true, 4, 4 }, /* subedge 4 of edge 5 */
488 { true, 4, 3 }, /* subedge 5 of edge 5 */
489};
490static const struct MapEntry hexmap_S[] = {
491 { true, 2, 5 }, /* edge 0 of hex 0 (L) */
492 { true, 3, 5 }, /* edge 1 of hex 0 (L) */
493 { true, 1, 0 }, /* edge 2 of hex 0 (L) */
494 { false, 1, 1 }, /* edge 3 of hex 0 (L) */
495 { false, 1, 0 }, /* edge 4 of hex 0 (L) */
496 { false, 0, 4 }, /* edge 5 of hex 0 (L) */
497 { true, 0, 2 }, /* edge 0 of hex 1 (P) */
498 { true, 3, 4 }, /* edge 1 of hex 1 (P) */
499 { false, 3, 0 }, /* edge 2 of hex 1 (P) */
500 { false, 2, 1 }, /* edge 3 of hex 1 (P) */
501 { false, 2, 0 }, /* edge 4 of hex 1 (P) */
502 { false, 1, 2 }, /* edge 5 of hex 1 (P) */
503 { false, 0, 3 }, /* edge 0 of hex 2 (G) */
504 { false, 0, 2 }, /* edge 1 of hex 2 (G) */
505 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
506 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
507 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
508 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
509 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
510 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
511 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
512 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
513 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
514 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
515 { true, 5, 2 }, /* edge 0 of hex 4 (X) */
516 { true, 2, 2 }, /* edge 1 of hex 4 (X) */
517 { false, 0, 1 }, /* edge 2 of hex 4 (X) */
518 { false, 0, 0 }, /* edge 3 of hex 4 (X) */
519 { false, 5, 4 }, /* edge 4 of hex 4 (X) */
520 { false, 5, 3 }, /* edge 5 of hex 4 (X) */
521 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
522 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
523 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
524 { false, 5, 2 }, /* edge 3 of hex 5 (D) */
525 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
526 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
527 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
528 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
529 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
530 { false, 4, 0 }, /* edge 3 of hex 6 (F) */
531 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
532 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
533 { true, 6, 2 }, /* edge 0 of hex 7 (X) */
534 { true, 5, 4 }, /* edge 1 of hex 7 (X) */
535 { false, 5, 1 }, /* edge 2 of hex 7 (X) */
536 { false, 5, 0 }, /* edge 3 of hex 7 (X) */
537 { false, 4, 2 }, /* edge 4 of hex 7 (X) */
538 { false, 4, 1 }, /* edge 5 of hex 7 (X) */
539};
540static const struct MapEdge hexedges_S[] = {
541 { 0, 5 },
542 { 5, 3 },
543 { 8, 2 },
544 { 10, 4 },
545 { 14, 3 },
546 { 17, 5 },
547};
548static const struct MapEntry hexin_S[] = {
549 { true, 4, 3 }, /* subedge 0 of edge 0 */
550 { true, 4, 2 }, /* subedge 1 of edge 0 */
551 { true, 2, 1 }, /* subedge 2 of edge 0 */
552 { true, 2, 0 }, /* subedge 3 of edge 0 */
553 { true, 0, 5 }, /* subedge 4 of edge 0 */
554 { true, 0, 4 }, /* subedge 0 of edge 1 */
555 { true, 0, 3 }, /* subedge 1 of edge 1 */
556 { true, 1, 5 }, /* subedge 2 of edge 1 */
557 { true, 1, 4 }, /* subedge 0 of edge 2 */
558 { true, 1, 3 }, /* subedge 1 of edge 2 */
559 { true, 1, 2 }, /* subedge 0 of edge 3 */
560 { true, 3, 3 }, /* subedge 1 of edge 3 */
561 { true, 6, 5 }, /* subedge 2 of edge 3 */
562 { true, 6, 4 }, /* subedge 3 of edge 3 */
563 { true, 6, 3 }, /* subedge 0 of edge 4 */
564 { true, 7, 5 }, /* subedge 1 of edge 4 */
565 { true, 7, 4 }, /* subedge 2 of edge 4 */
566 { true, 7, 3 }, /* subedge 0 of edge 5 */
567 { true, 7, 2 }, /* subedge 1 of edge 5 */
568 { true, 5, 3 }, /* subedge 2 of edge 5 */
569 { true, 4, 5 }, /* subedge 3 of edge 5 */
570 { true, 4, 4 }, /* subedge 4 of edge 5 */
571};
572static const struct MapEntry hexmap_F[] = {
573 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
574 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
575 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
576 { false, 1, 3 }, /* edge 3 of hex 0 (F) */
577 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
578 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
579 { true, 0, 2 }, /* edge 0 of hex 1 (P) */
580 { true, 3, 4 }, /* edge 1 of hex 1 (P) */
581 { false, 3, 0 }, /* edge 2 of hex 1 (P) */
582 { false, 2, 1 }, /* edge 3 of hex 1 (P) */
583 { false, 2, 0 }, /* edge 4 of hex 1 (P) */
584 { false, 1, 4 }, /* edge 5 of hex 1 (P) */
585 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
586 { false, 0, 1 }, /* edge 1 of hex 2 (G) */
587 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
588 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
589 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
590 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
591 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
592 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
593 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
594 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
595 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
596 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
597 { true, 5, 2 }, /* edge 0 of hex 4 (Y) */
598 { true, 2, 2 }, /* edge 1 of hex 4 (Y) */
599 { false, 0, 0 }, /* edge 2 of hex 4 (Y) */
600 { false, 5, 4 }, /* edge 3 of hex 4 (Y) */
601 { false, 5, 3 }, /* edge 4 of hex 4 (Y) */
602 { false, 5, 2 }, /* edge 5 of hex 4 (Y) */
603 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
604 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
605 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
606 { false, 5, 1 }, /* edge 3 of hex 5 (D) */
607 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
608 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
609 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
610 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
611 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
612 { false, 4, 0 }, /* edge 3 of hex 6 (F) */
613 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
614 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
615 { true, 6, 2 }, /* edge 0 of hex 7 (Y) */
616 { true, 5, 4 }, /* edge 1 of hex 7 (Y) */
617 { false, 5, 0 }, /* edge 2 of hex 7 (Y) */
618 { false, 4, 3 }, /* edge 3 of hex 7 (Y) */
619 { false, 4, 2 }, /* edge 4 of hex 7 (Y) */
620 { false, 4, 1 }, /* edge 5 of hex 7 (Y) */
621};
622static const struct MapEdge hexedges_F[] = {
623 { 0, 2 },
624 { 2, 5 },
625 { 7, 2 },
626 { 9, 4 },
627 { 13, 4 },
628 { 17, 5 },
629};
630static const struct MapEntry hexin_F[] = {
631 { true, 4, 2 }, /* subedge 0 of edge 0 */
632 { true, 2, 1 }, /* subedge 1 of edge 0 */
633 { true, 2, 0 }, /* subedge 0 of edge 1 */
634 { true, 0, 5 }, /* subedge 1 of edge 1 */
635 { true, 0, 4 }, /* subedge 2 of edge 1 */
636 { true, 0, 3 }, /* subedge 3 of edge 1 */
637 { true, 1, 5 }, /* subedge 4 of edge 1 */
638 { true, 1, 4 }, /* subedge 0 of edge 2 */
639 { true, 1, 3 }, /* subedge 1 of edge 2 */
640 { true, 1, 2 }, /* subedge 0 of edge 3 */
641 { true, 3, 3 }, /* subedge 1 of edge 3 */
642 { true, 6, 5 }, /* subedge 2 of edge 3 */
643 { true, 6, 4 }, /* subedge 3 of edge 3 */
644 { true, 6, 3 }, /* subedge 0 of edge 4 */
645 { true, 7, 5 }, /* subedge 1 of edge 4 */
646 { true, 7, 4 }, /* subedge 2 of edge 4 */
647 { true, 7, 3 }, /* subedge 3 of edge 4 */
648 { true, 7, 2 }, /* subedge 0 of edge 5 */
649 { true, 5, 3 }, /* subedge 1 of edge 5 */
650 { true, 4, 5 }, /* subedge 2 of edge 5 */
651 { true, 4, 4 }, /* subedge 3 of edge 5 */
652 { true, 4, 3 }, /* subedge 4 of edge 5 */
653};
654static const struct MapEntry hexmap_Y[] = {
655 { true, 2, 5 }, /* edge 0 of hex 0 (F) */
656 { true, 3, 5 }, /* edge 1 of hex 0 (F) */
657 { true, 1, 0 }, /* edge 2 of hex 0 (F) */
658 { false, 2, 0 }, /* edge 3 of hex 0 (F) */
659 { false, 1, 2 }, /* edge 4 of hex 0 (F) */
660 { false, 1, 1 }, /* edge 5 of hex 0 (F) */
661 { true, 0, 2 }, /* edge 0 of hex 1 (Y) */
662 { true, 3, 4 }, /* edge 1 of hex 1 (Y) */
663 { false, 3, 0 }, /* edge 2 of hex 1 (Y) */
664 { false, 2, 3 }, /* edge 3 of hex 1 (Y) */
665 { false, 2, 2 }, /* edge 4 of hex 1 (Y) */
666 { false, 2, 1 }, /* edge 5 of hex 1 (Y) */
667 { false, 1, 0 }, /* edge 0 of hex 2 (G) */
668 { false, 0, 1 }, /* edge 1 of hex 2 (G) */
669 { true, 4, 1 }, /* edge 2 of hex 2 (G) */
670 { true, 5, 1 }, /* edge 3 of hex 2 (G) */
671 { true, 3, 0 }, /* edge 4 of hex 2 (G) */
672 { true, 0, 0 }, /* edge 5 of hex 2 (G) */
673 { true, 2, 4 }, /* edge 0 of hex 3 (S) */
674 { true, 5, 0 }, /* edge 1 of hex 3 (S) */
675 { true, 6, 0 }, /* edge 2 of hex 3 (S) */
676 { false, 3, 1 }, /* edge 3 of hex 3 (S) */
677 { true, 1, 1 }, /* edge 4 of hex 3 (S) */
678 { true, 0, 1 }, /* edge 5 of hex 3 (S) */
679 { true, 5, 2 }, /* edge 0 of hex 4 (Y) */
680 { true, 2, 2 }, /* edge 1 of hex 4 (Y) */
681 { false, 0, 0 }, /* edge 2 of hex 4 (Y) */
682 { false, 5, 4 }, /* edge 3 of hex 4 (Y) */
683 { false, 5, 3 }, /* edge 4 of hex 4 (Y) */
684 { false, 5, 2 }, /* edge 5 of hex 4 (Y) */
685 { true, 3, 1 }, /* edge 0 of hex 5 (D) */
686 { true, 2, 3 }, /* edge 1 of hex 5 (D) */
687 { true, 4, 0 }, /* edge 2 of hex 5 (D) */
688 { false, 5, 1 }, /* edge 3 of hex 5 (D) */
689 { true, 7, 1 }, /* edge 4 of hex 5 (D) */
690 { true, 6, 1 }, /* edge 5 of hex 5 (D) */
691 { true, 3, 2 }, /* edge 0 of hex 6 (F) */
692 { true, 5, 5 }, /* edge 1 of hex 6 (F) */
693 { true, 7, 0 }, /* edge 2 of hex 6 (F) */
694 { false, 4, 0 }, /* edge 3 of hex 6 (F) */
695 { false, 3, 3 }, /* edge 4 of hex 6 (F) */
696 { false, 3, 2 }, /* edge 5 of hex 6 (F) */
697 { true, 6, 2 }, /* edge 0 of hex 7 (Y) */
698 { true, 5, 4 }, /* edge 1 of hex 7 (Y) */
699 { false, 5, 0 }, /* edge 2 of hex 7 (Y) */
700 { false, 4, 3 }, /* edge 3 of hex 7 (Y) */
701 { false, 4, 2 }, /* edge 4 of hex 7 (Y) */
702 { false, 4, 1 }, /* edge 5 of hex 7 (Y) */
703};
704static const struct MapEdge hexedges_Y[] = {
705 { 0, 2 },
706 { 2, 3 },
707 { 5, 4 },
708 { 9, 4 },
709 { 13, 4 },
710 { 17, 5 },
711};
712static const struct MapEntry hexin_Y[] = {
713 { true, 4, 2 }, /* subedge 0 of edge 0 */
714 { true, 2, 1 }, /* subedge 1 of edge 0 */
715 { true, 2, 0 }, /* subedge 0 of edge 1 */
716 { true, 0, 5 }, /* subedge 1 of edge 1 */
717 { true, 0, 4 }, /* subedge 2 of edge 1 */
718 { true, 0, 3 }, /* subedge 0 of edge 2 */
719 { true, 1, 5 }, /* subedge 1 of edge 2 */
720 { true, 1, 4 }, /* subedge 2 of edge 2 */
721 { true, 1, 3 }, /* subedge 3 of edge 2 */
722 { true, 1, 2 }, /* subedge 0 of edge 3 */
723 { true, 3, 3 }, /* subedge 1 of edge 3 */
724 { true, 6, 5 }, /* subedge 2 of edge 3 */
725 { true, 6, 4 }, /* subedge 3 of edge 3 */
726 { true, 6, 3 }, /* subedge 0 of edge 4 */
727 { true, 7, 5 }, /* subedge 1 of edge 4 */
728 { true, 7, 4 }, /* subedge 2 of edge 4 */
729 { true, 7, 3 }, /* subedge 3 of edge 4 */
730 { true, 7, 2 }, /* subedge 0 of edge 5 */
731 { true, 5, 3 }, /* subedge 1 of edge 5 */
732 { true, 4, 5 }, /* subedge 2 of edge 5 */
733 { true, 4, 4 }, /* subedge 3 of edge 5 */
734 { true, 4, 3 }, /* subedge 4 of edge 5 */
735};
736static const struct MapEntry specmap_G[] = {
737 { false, 2, 2 }, /* edge 0 of Spectre 0 */
738 { false, 2, 1 }, /* edge 1 of Spectre 0 */
739 { false, 2, 0 }, /* edge 2 of Spectre 0 */
740 { false, 1, 2 }, /* edge 3 of Spectre 0 */
741 { false, 1, 1 }, /* edge 4 of Spectre 0 */
742 { false, 1, 0 }, /* edge 5 of Spectre 0 */
743 { false, 0, 2 }, /* edge 6 of Spectre 0 */
744 { false, 0, 1 }, /* edge 7 of Spectre 0 */
745 { false, 0, 0 }, /* edge 8 of Spectre 0 */
746 { false, 5, 2 }, /* edge 9 of Spectre 0 */
747 { true, 1, 7 }, /* edge 10 of Spectre 0 */
748 { true, 1, 6 }, /* edge 11 of Spectre 0 */
749 { true, 1, 5 }, /* edge 12 of Spectre 0 */
750 { true, 1, 4 }, /* edge 13 of Spectre 0 */
751 { false, 4, 1 }, /* edge 0 of Spectre 1 */
752 { false, 4, 0 }, /* edge 1 of Spectre 1 */
753 { false, 3, 1 }, /* edge 2 of Spectre 1 */
754 { false, 3, 0 }, /* edge 3 of Spectre 1 */
755 { true, 0, 13 }, /* edge 4 of Spectre 1 */
756 { true, 0, 12 }, /* edge 5 of Spectre 1 */
757 { true, 0, 11 }, /* edge 6 of Spectre 1 */
758 { true, 0, 10 }, /* edge 7 of Spectre 1 */
759 { false, 5, 1 }, /* edge 8 of Spectre 1 */
760 { false, 5, 0 }, /* edge 9 of Spectre 1 */
761 { false, 4, 5 }, /* edge 10 of Spectre 1 */
762 { false, 4, 4 }, /* edge 11 of Spectre 1 */
763 { false, 4, 3 }, /* edge 12 of Spectre 1 */
764 { false, 4, 2 }, /* edge 13 of Spectre 1 */
765};
766static const struct MapEdge specedges_G[] = {
767 { 0, 3 },
768 { 3, 3 },
769 { 6, 3 },
770 { 9, 2 },
771 { 11, 6 },
772 { 17, 3 },
773};
774static const struct MapEntry specin_G[] = {
775 { true, 0, 8 }, /* subedge 0 of edge 0 */
776 { true, 0, 7 }, /* subedge 1 of edge 0 */
777 { true, 0, 6 }, /* subedge 2 of edge 0 */
778 { true, 0, 5 }, /* subedge 0 of edge 1 */
779 { true, 0, 4 }, /* subedge 1 of edge 1 */
780 { true, 0, 3 }, /* subedge 2 of edge 1 */
781 { true, 0, 2 }, /* subedge 0 of edge 2 */
782 { true, 0, 1 }, /* subedge 1 of edge 2 */
783 { true, 0, 0 }, /* subedge 2 of edge 2 */
784 { true, 1, 3 }, /* subedge 0 of edge 3 */
785 { true, 1, 2 }, /* subedge 1 of edge 3 */
786 { true, 1, 1 }, /* subedge 0 of edge 4 */
787 { true, 1, 0 }, /* subedge 1 of edge 4 */
788 { true, 1, 13 }, /* subedge 2 of edge 4 */
789 { true, 1, 12 }, /* subedge 3 of edge 4 */
790 { true, 1, 11 }, /* subedge 4 of edge 4 */
791 { true, 1, 10 }, /* subedge 5 of edge 4 */
792 { true, 1, 9 }, /* subedge 0 of edge 5 */
793 { true, 1, 8 }, /* subedge 1 of edge 5 */
794 { true, 0, 9 }, /* subedge 2 of edge 5 */
795};
796static const struct MapEntry specmap_D[] = {
797 { false, 3, 0 }, /* edge 0 of Spectre 0 */
798 { false, 2, 2 }, /* edge 1 of Spectre 0 */
799 { false, 2, 1 }, /* edge 2 of Spectre 0 */
800 { false, 2, 0 }, /* edge 3 of Spectre 0 */
801 { false, 1, 1 }, /* edge 4 of Spectre 0 */
802 { false, 1, 0 }, /* edge 5 of Spectre 0 */
803 { false, 0, 1 }, /* edge 6 of Spectre 0 */
804 { false, 0, 0 }, /* edge 7 of Spectre 0 */
805 { false, 5, 1 }, /* edge 8 of Spectre 0 */
806 { false, 5, 0 }, /* edge 9 of Spectre 0 */
807 { false, 4, 2 }, /* edge 10 of Spectre 0 */
808 { false, 4, 1 }, /* edge 11 of Spectre 0 */
809 { false, 4, 0 }, /* edge 12 of Spectre 0 */
810 { false, 3, 1 }, /* edge 13 of Spectre 0 */
811};
812static const struct MapEdge specedges_D[] = {
813 { 0, 2 },
814 { 2, 2 },
815 { 4, 3 },
816 { 7, 2 },
817 { 9, 3 },
818 { 12, 2 },
819};
820static const struct MapEntry specin_D[] = {
821 { true, 0, 7 }, /* subedge 0 of edge 0 */
822 { true, 0, 6 }, /* subedge 1 of edge 0 */
823 { true, 0, 5 }, /* subedge 0 of edge 1 */
824 { true, 0, 4 }, /* subedge 1 of edge 1 */
825 { true, 0, 3 }, /* subedge 0 of edge 2 */
826 { true, 0, 2 }, /* subedge 1 of edge 2 */
827 { true, 0, 1 }, /* subedge 2 of edge 2 */
828 { true, 0, 0 }, /* subedge 0 of edge 3 */
829 { true, 0, 13 }, /* subedge 1 of edge 3 */
830 { true, 0, 12 }, /* subedge 0 of edge 4 */
831 { true, 0, 11 }, /* subedge 1 of edge 4 */
832 { true, 0, 10 }, /* subedge 2 of edge 4 */
833 { true, 0, 9 }, /* subedge 0 of edge 5 */
834 { true, 0, 8 }, /* subedge 1 of edge 5 */
835};
836static const struct MapEntry specmap_J[] = {
837 { false, 3, 0 }, /* edge 0 of Spectre 0 */
838 { false, 2, 2 }, /* edge 1 of Spectre 0 */
839 { false, 2, 1 }, /* edge 2 of Spectre 0 */
840 { false, 2, 0 }, /* edge 3 of Spectre 0 */
841 { false, 1, 1 }, /* edge 4 of Spectre 0 */
842 { false, 1, 0 }, /* edge 5 of Spectre 0 */
843 { false, 0, 2 }, /* edge 6 of Spectre 0 */
844 { false, 0, 1 }, /* edge 7 of Spectre 0 */
845 { false, 0, 0 }, /* edge 8 of Spectre 0 */
846 { false, 5, 1 }, /* edge 9 of Spectre 0 */
847 { false, 5, 0 }, /* edge 10 of Spectre 0 */
848 { false, 4, 2 }, /* edge 11 of Spectre 0 */
849 { false, 4, 1 }, /* edge 12 of Spectre 0 */
850 { false, 4, 0 }, /* edge 13 of Spectre 0 */
851};
852static const struct MapEdge specedges_J[] = {
853 { 0, 3 },
854 { 3, 2 },
855 { 5, 3 },
856 { 8, 1 },
857 { 9, 3 },
858 { 12, 2 },
859};
860static const struct MapEntry specin_J[] = {
861 { true, 0, 8 }, /* subedge 0 of edge 0 */
862 { true, 0, 7 }, /* subedge 1 of edge 0 */
863 { true, 0, 6 }, /* subedge 2 of edge 0 */
864 { true, 0, 5 }, /* subedge 0 of edge 1 */
865 { true, 0, 4 }, /* subedge 1 of edge 1 */
866 { true, 0, 3 }, /* subedge 0 of edge 2 */
867 { true, 0, 2 }, /* subedge 1 of edge 2 */
868 { true, 0, 1 }, /* subedge 2 of edge 2 */
869 { true, 0, 0 }, /* subedge 0 of edge 3 */
870 { true, 0, 13 }, /* subedge 0 of edge 4 */
871 { true, 0, 12 }, /* subedge 1 of edge 4 */
872 { true, 0, 11 }, /* subedge 2 of edge 4 */
873 { true, 0, 10 }, /* subedge 0 of edge 5 */
874 { true, 0, 9 }, /* subedge 1 of edge 5 */
875};
876static const struct MapEntry specmap_L[] = {
877 { false, 3, 0 }, /* edge 0 of Spectre 0 */
878 { false, 2, 2 }, /* edge 1 of Spectre 0 */
879 { false, 2, 1 }, /* edge 2 of Spectre 0 */
880 { false, 2, 0 }, /* edge 3 of Spectre 0 */
881 { false, 1, 1 }, /* edge 4 of Spectre 0 */
882 { false, 1, 0 }, /* edge 5 of Spectre 0 */
883 { false, 0, 2 }, /* edge 6 of Spectre 0 */
884 { false, 0, 1 }, /* edge 7 of Spectre 0 */
885 { false, 0, 0 }, /* edge 8 of Spectre 0 */
886 { false, 5, 0 }, /* edge 9 of Spectre 0 */
887 { false, 4, 2 }, /* edge 10 of Spectre 0 */
888 { false, 4, 1 }, /* edge 11 of Spectre 0 */
889 { false, 4, 0 }, /* edge 12 of Spectre 0 */
890 { false, 3, 1 }, /* edge 13 of Spectre 0 */
891};
892static const struct MapEdge specedges_L[] = {
893 { 0, 3 },
894 { 3, 2 },
895 { 5, 3 },
896 { 8, 2 },
897 { 10, 3 },
898 { 13, 1 },
899};
900static const struct MapEntry specin_L[] = {
901 { true, 0, 8 }, /* subedge 0 of edge 0 */
902 { true, 0, 7 }, /* subedge 1 of edge 0 */
903 { true, 0, 6 }, /* subedge 2 of edge 0 */
904 { true, 0, 5 }, /* subedge 0 of edge 1 */
905 { true, 0, 4 }, /* subedge 1 of edge 1 */
906 { true, 0, 3 }, /* subedge 0 of edge 2 */
907 { true, 0, 2 }, /* subedge 1 of edge 2 */
908 { true, 0, 1 }, /* subedge 2 of edge 2 */
909 { true, 0, 0 }, /* subedge 0 of edge 3 */
910 { true, 0, 13 }, /* subedge 1 of edge 3 */
911 { true, 0, 12 }, /* subedge 0 of edge 4 */
912 { true, 0, 11 }, /* subedge 1 of edge 4 */
913 { true, 0, 10 }, /* subedge 2 of edge 4 */
914 { true, 0, 9 }, /* subedge 0 of edge 5 */
915};
916static const struct MapEntry specmap_X[] = {
917 { false, 3, 0 }, /* edge 0 of Spectre 0 */
918 { false, 2, 1 }, /* edge 1 of Spectre 0 */
919 { false, 2, 0 }, /* edge 2 of Spectre 0 */
920 { false, 1, 2 }, /* edge 3 of Spectre 0 */
921 { false, 1, 1 }, /* edge 4 of Spectre 0 */
922 { false, 1, 0 }, /* edge 5 of Spectre 0 */
923 { false, 0, 2 }, /* edge 6 of Spectre 0 */
924 { false, 0, 1 }, /* edge 7 of Spectre 0 */
925 { false, 0, 0 }, /* edge 8 of Spectre 0 */
926 { false, 5, 1 }, /* edge 9 of Spectre 0 */
927 { false, 5, 0 }, /* edge 10 of Spectre 0 */
928 { false, 4, 2 }, /* edge 11 of Spectre 0 */
929 { false, 4, 1 }, /* edge 12 of Spectre 0 */
930 { false, 4, 0 }, /* edge 13 of Spectre 0 */
931};
932static const struct MapEdge specedges_X[] = {
933 { 0, 3 },
934 { 3, 3 },
935 { 6, 2 },
936 { 8, 1 },
937 { 9, 3 },
938 { 12, 2 },
939};
940static const struct MapEntry specin_X[] = {
941 { true, 0, 8 }, /* subedge 0 of edge 0 */
942 { true, 0, 7 }, /* subedge 1 of edge 0 */
943 { true, 0, 6 }, /* subedge 2 of edge 0 */
944 { true, 0, 5 }, /* subedge 0 of edge 1 */
945 { true, 0, 4 }, /* subedge 1 of edge 1 */
946 { true, 0, 3 }, /* subedge 2 of edge 1 */
947 { true, 0, 2 }, /* subedge 0 of edge 2 */
948 { true, 0, 1 }, /* subedge 1 of edge 2 */
949 { true, 0, 0 }, /* subedge 0 of edge 3 */
950 { true, 0, 13 }, /* subedge 0 of edge 4 */
951 { true, 0, 12 }, /* subedge 1 of edge 4 */
952 { true, 0, 11 }, /* subedge 2 of edge 4 */
953 { true, 0, 10 }, /* subedge 0 of edge 5 */
954 { true, 0, 9 }, /* subedge 1 of edge 5 */
955};
956static const struct MapEntry specmap_P[] = {
957 { false, 3, 0 }, /* edge 0 of Spectre 0 */
958 { false, 2, 1 }, /* edge 1 of Spectre 0 */
959 { false, 2, 0 }, /* edge 2 of Spectre 0 */
960 { false, 1, 2 }, /* edge 3 of Spectre 0 */
961 { false, 1, 1 }, /* edge 4 of Spectre 0 */
962 { false, 1, 0 }, /* edge 5 of Spectre 0 */
963 { false, 0, 2 }, /* edge 6 of Spectre 0 */
964 { false, 0, 1 }, /* edge 7 of Spectre 0 */
965 { false, 0, 0 }, /* edge 8 of Spectre 0 */
966 { false, 5, 0 }, /* edge 9 of Spectre 0 */
967 { false, 4, 2 }, /* edge 10 of Spectre 0 */
968 { false, 4, 1 }, /* edge 11 of Spectre 0 */
969 { false, 4, 0 }, /* edge 12 of Spectre 0 */
970 { false, 3, 1 }, /* edge 13 of Spectre 0 */
971};
972static const struct MapEdge specedges_P[] = {
973 { 0, 3 },
974 { 3, 3 },
975 { 6, 2 },
976 { 8, 2 },
977 { 10, 3 },
978 { 13, 1 },
979};
980static const struct MapEntry specin_P[] = {
981 { true, 0, 8 }, /* subedge 0 of edge 0 */
982 { true, 0, 7 }, /* subedge 1 of edge 0 */
983 { true, 0, 6 }, /* subedge 2 of edge 0 */
984 { true, 0, 5 }, /* subedge 0 of edge 1 */
985 { true, 0, 4 }, /* subedge 1 of edge 1 */
986 { true, 0, 3 }, /* subedge 2 of edge 1 */
987 { true, 0, 2 }, /* subedge 0 of edge 2 */
988 { true, 0, 1 }, /* subedge 1 of edge 2 */
989 { true, 0, 0 }, /* subedge 0 of edge 3 */
990 { true, 0, 13 }, /* subedge 1 of edge 3 */
991 { true, 0, 12 }, /* subedge 0 of edge 4 */
992 { true, 0, 11 }, /* subedge 1 of edge 4 */
993 { true, 0, 10 }, /* subedge 2 of edge 4 */
994 { true, 0, 9 }, /* subedge 0 of edge 5 */
995};
996static const struct MapEntry specmap_S[] = {
997 { false, 3, 0 }, /* edge 0 of Spectre 0 */
998 { false, 2, 2 }, /* edge 1 of Spectre 0 */
999 { false, 2, 1 }, /* edge 2 of Spectre 0 */
1000 { false, 2, 0 }, /* edge 3 of Spectre 0 */
1001 { false, 0, 3 }, /* edge 4 of Spectre 0 */
1002 { false, 0, 2 }, /* edge 5 of Spectre 0 */
1003 { false, 0, 1 }, /* edge 6 of Spectre 0 */
1004 { false, 0, 0 }, /* edge 7 of Spectre 0 */
1005 { false, 5, 1 }, /* edge 8 of Spectre 0 */
1006 { false, 5, 0 }, /* edge 9 of Spectre 0 */
1007 { false, 4, 2 }, /* edge 10 of Spectre 0 */
1008 { false, 4, 1 }, /* edge 11 of Spectre 0 */
1009 { false, 4, 0 }, /* edge 12 of Spectre 0 */
1010 { false, 3, 1 }, /* edge 13 of Spectre 0 */
1011};
1012static const struct MapEdge specedges_S[] = {
1013 { 0, 6 },
1014 { 6, 2 },
1015 { 8, 3 },
1016 { 11, 2 },
1017 { 13, 3 },
1018 { 16, 2 },
1019};
1020static const struct MapEntry specin_S[] = {
1021 { true, 0, 7 }, /* subedge 0 of edge 0 */
1022 { true, 0, 6 }, /* subedge 1 of edge 0 */
1023 { true, 0, 5 }, /* subedge 2 of edge 0 */
1024 { true, 0, 4 }, /* subedge 3 of edge 0 */
1025 { false, 1, 1 }, /* subedge 4 of edge 0 */
1026 { false, 1, 0 }, /* subedge 5 of edge 0 */
1027 { false, 0, 5 }, /* subedge 0 of edge 1 */
1028 { false, 0, 4 }, /* subedge 1 of edge 1 */
1029 { true, 0, 3 }, /* subedge 0 of edge 2 */
1030 { true, 0, 2 }, /* subedge 1 of edge 2 */
1031 { true, 0, 1 }, /* subedge 2 of edge 2 */
1032 { true, 0, 0 }, /* subedge 0 of edge 3 */
1033 { true, 0, 13 }, /* subedge 1 of edge 3 */
1034 { true, 0, 12 }, /* subedge 0 of edge 4 */
1035 { true, 0, 11 }, /* subedge 1 of edge 4 */
1036 { true, 0, 10 }, /* subedge 2 of edge 4 */
1037 { true, 0, 9 }, /* subedge 0 of edge 5 */
1038 { true, 0, 8 }, /* subedge 1 of edge 5 */
1039};
1040static const struct MapEntry specmap_F[] = {
1041 { false, 3, 0 }, /* edge 0 of Spectre 0 */
1042 { false, 2, 2 }, /* edge 1 of Spectre 0 */
1043 { false, 2, 1 }, /* edge 2 of Spectre 0 */
1044 { false, 2, 0 }, /* edge 3 of Spectre 0 */
1045 { false, 1, 1 }, /* edge 4 of Spectre 0 */
1046 { false, 1, 0 }, /* edge 5 of Spectre 0 */
1047 { false, 0, 2 }, /* edge 6 of Spectre 0 */
1048 { false, 0, 1 }, /* edge 7 of Spectre 0 */
1049 { false, 0, 0 }, /* edge 8 of Spectre 0 */
1050 { false, 5, 1 }, /* edge 9 of Spectre 0 */
1051 { false, 5, 0 }, /* edge 10 of Spectre 0 */
1052 { false, 4, 1 }, /* edge 11 of Spectre 0 */
1053 { false, 4, 0 }, /* edge 12 of Spectre 0 */
1054 { false, 3, 1 }, /* edge 13 of Spectre 0 */
1055};
1056static const struct MapEdge specedges_F[] = {
1057 { 0, 3 },
1058 { 3, 2 },
1059 { 5, 3 },
1060 { 8, 2 },
1061 { 10, 2 },
1062 { 12, 2 },
1063};
1064static const struct MapEntry specin_F[] = {
1065 { true, 0, 8 }, /* subedge 0 of edge 0 */
1066 { true, 0, 7 }, /* subedge 1 of edge 0 */
1067 { true, 0, 6 }, /* subedge 2 of edge 0 */
1068 { true, 0, 5 }, /* subedge 0 of edge 1 */
1069 { true, 0, 4 }, /* subedge 1 of edge 1 */
1070 { true, 0, 3 }, /* subedge 0 of edge 2 */
1071 { true, 0, 2 }, /* subedge 1 of edge 2 */
1072 { true, 0, 1 }, /* subedge 2 of edge 2 */
1073 { true, 0, 0 }, /* subedge 0 of edge 3 */
1074 { true, 0, 13 }, /* subedge 1 of edge 3 */
1075 { true, 0, 12 }, /* subedge 0 of edge 4 */
1076 { true, 0, 11 }, /* subedge 1 of edge 4 */
1077 { true, 0, 10 }, /* subedge 0 of edge 5 */
1078 { true, 0, 9 }, /* subedge 1 of edge 5 */
1079};
1080static const struct MapEntry specmap_Y[] = {
1081 { false, 3, 0 }, /* edge 0 of Spectre 0 */
1082 { false, 2, 1 }, /* edge 1 of Spectre 0 */
1083 { false, 2, 0 }, /* edge 2 of Spectre 0 */
1084 { false, 1, 2 }, /* edge 3 of Spectre 0 */
1085 { false, 1, 1 }, /* edge 4 of Spectre 0 */
1086 { false, 1, 0 }, /* edge 5 of Spectre 0 */
1087 { false, 0, 2 }, /* edge 6 of Spectre 0 */
1088 { false, 0, 1 }, /* edge 7 of Spectre 0 */
1089 { false, 0, 0 }, /* edge 8 of Spectre 0 */
1090 { false, 5, 1 }, /* edge 9 of Spectre 0 */
1091 { false, 5, 0 }, /* edge 10 of Spectre 0 */
1092 { false, 4, 1 }, /* edge 11 of Spectre 0 */
1093 { false, 4, 0 }, /* edge 12 of Spectre 0 */
1094 { false, 3, 1 }, /* edge 13 of Spectre 0 */
1095};
1096static const struct MapEdge specedges_Y[] = {
1097 { 0, 3 },
1098 { 3, 3 },
1099 { 6, 2 },
1100 { 8, 2 },
1101 { 10, 2 },
1102 { 12, 2 },
1103};
1104static const struct MapEntry specin_Y[] = {
1105 { true, 0, 8 }, /* subedge 0 of edge 0 */
1106 { true, 0, 7 }, /* subedge 1 of edge 0 */
1107 { true, 0, 6 }, /* subedge 2 of edge 0 */
1108 { true, 0, 5 }, /* subedge 0 of edge 1 */
1109 { true, 0, 4 }, /* subedge 1 of edge 1 */
1110 { true, 0, 3 }, /* subedge 2 of edge 1 */
1111 { true, 0, 2 }, /* subedge 0 of edge 2 */
1112 { true, 0, 1 }, /* subedge 1 of edge 2 */
1113 { true, 0, 0 }, /* subedge 0 of edge 3 */
1114 { true, 0, 13 }, /* subedge 1 of edge 3 */
1115 { true, 0, 12 }, /* subedge 0 of edge 4 */
1116 { true, 0, 11 }, /* subedge 1 of edge 4 */
1117 { true, 0, 10 }, /* subedge 0 of edge 5 */
1118 { true, 0, 9 }, /* subedge 1 of edge 5 */
1119};
1120static const struct Possibility poss_G[] = {
1121 { HEX_G, 2, PROB_G },
1122 { HEX_D, 2, PROB_D },
1123 { HEX_J, 2, PROB_J },
1124 { HEX_L, 2, PROB_L },
1125 { HEX_X, 2, PROB_X },
1126 { HEX_P, 2, PROB_P },
1127 { HEX_S, 2, PROB_S },
1128 { HEX_F, 2, PROB_F },
1129 { HEX_Y, 2, PROB_Y },
1130};
1131static const struct Possibility poss_D[] = {
1132 { HEX_G, 5, PROB_G },
1133 { HEX_D, 5, PROB_D },
1134 { HEX_J, 5, PROB_J },
1135 { HEX_L, 5, PROB_L },
1136 { HEX_X, 5, PROB_X },
1137 { HEX_P, 5, PROB_P },
1138 { HEX_S, 5, PROB_S },
1139 { HEX_F, 5, PROB_F },
1140 { HEX_Y, 5, PROB_Y },
1141};
1142static const struct Possibility poss_J[] = {
1143 { HEX_G, 6, PROB_G },
1144};
1145static const struct Possibility poss_L[] = {
1146 { HEX_S, 0, PROB_S },
1147};
1148static const struct Possibility poss_X[] = {
1149 { HEX_G, 1, PROB_G },
1150 { HEX_D, 4, PROB_D },
1151 { HEX_D, 7, PROB_D },
1152 { HEX_L, 7, PROB_L },
1153 { HEX_P, 7, PROB_P },
1154 { HEX_S, 4, PROB_S },
1155 { HEX_S, 7, PROB_S },
1156};
1157static const struct Possibility poss_P[] = {
1158 { HEX_G, 4, PROB_G },
1159 { HEX_D, 1, PROB_D },
1160 { HEX_J, 1, PROB_J },
1161 { HEX_J, 7, PROB_J },
1162 { HEX_L, 1, PROB_L },
1163 { HEX_X, 7, PROB_X },
1164 { HEX_S, 1, PROB_S },
1165 { HEX_F, 1, PROB_F },
1166};
1167static const struct Possibility poss_S[] = {
1168 { HEX_G, 3, PROB_G },
1169 { HEX_D, 3, PROB_D },
1170 { HEX_J, 3, PROB_J },
1171 { HEX_L, 3, PROB_L },
1172 { HEX_X, 3, PROB_X },
1173 { HEX_P, 3, PROB_P },
1174 { HEX_S, 3, PROB_S },
1175 { HEX_F, 3, PROB_F },
1176 { HEX_Y, 3, PROB_Y },
1177};
1178static const struct Possibility poss_F[] = {
1179 { HEX_G, 0, PROB_G },
1180 { HEX_D, 0, PROB_D },
1181 { HEX_D, 6, PROB_D },
1182 { HEX_J, 0, PROB_J },
1183 { HEX_J, 6, PROB_J },
1184 { HEX_L, 0, PROB_L },
1185 { HEX_L, 6, PROB_L },
1186 { HEX_X, 0, PROB_X },
1187 { HEX_X, 6, PROB_X },
1188 { HEX_P, 0, PROB_P },
1189 { HEX_P, 6, PROB_P },
1190 { HEX_S, 6, PROB_S },
1191 { HEX_F, 0, PROB_F },
1192 { HEX_F, 6, PROB_F },
1193 { HEX_Y, 0, PROB_Y },
1194 { HEX_Y, 6, PROB_Y },
1195};
1196static const struct Possibility poss_Y[] = {
1197 { HEX_J, 4, PROB_J },
1198 { HEX_L, 4, PROB_L },
1199 { HEX_X, 1, PROB_X },
1200 { HEX_X, 4, PROB_X },
1201 { HEX_P, 1, PROB_P },
1202 { HEX_P, 4, PROB_P },
1203 { HEX_F, 4, PROB_F },
1204 { HEX_F, 7, PROB_F },
1205 { HEX_Y, 1, PROB_Y },
1206 { HEX_Y, 4, PROB_Y },
1207 { HEX_Y, 7, PROB_Y },
1208};
1209static const struct Possibility poss_spectre[] = {
1210 { HEX_G, 0, PROB_G },
1211 { HEX_G, 1, PROB_G },
1212 { HEX_D, 0, PROB_D },
1213 { HEX_J, 0, PROB_J },
1214 { HEX_L, 0, PROB_L },
1215 { HEX_X, 0, PROB_X },
1216 { HEX_P, 0, PROB_P },
1217 { HEX_S, 0, PROB_S },
1218 { HEX_F, 0, PROB_F },
1219 { HEX_Y, 0, PROB_Y },
1220};