MarchingCubesTable.h
Go to the documentation of this file.
1 /*************************************************************************
2 > File Name: MarchingCubesTable.h
3 > Project Name: CubbyFlow
4 > Author: Chan-Ho Chris Ohk
5 > Purpose: A simple, portable and complete implementation of the Marching Cubes
6 > and Marching Tetrahedrons algorithms.
7 > Created Time: 2017/07/09
8 > Copyright (c) 2018, Chan-Ho Chris Ohk
9 *************************************************************************/
10 
11 // Marching Cubes Example Program
12 // by Cory Bloyd (corysama@yahoo.com)
13 //
14 // A simple, portable and complete implementation of the Marching Cubes
15 // and Marching Tetrahedrons algorithms in a single source file.
16 // There are many ways that this code could be made faster, but the
17 // intent is for the code to be easy to understand.
18 //
19 // For a description of the algorithm go to
20 // http://astronomy.swin.edu.au/pbourke/modelling/polygonise/
21 //
22 // This code is public domain.
23 
24 #ifndef CUBBYFLOW_MARCHING_CUBES_TABLE_H
25 #define CUBBYFLOW_MARCHING_CUBES_TABLE_H
26 
27 namespace CubbyFlow
28 {
29  // vertexOffset lists the positions, relative to vertex0, of each of the 8
30  // vertices of a cube
31  static const float vertexOffset[8][3] =
32  {
33  { 0.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f },
34  { 1.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f },
35  { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 0.0f },
36  { 1.0f, 1.0f, 1.0f }, { 0.0f, 1.0f, 1.0f }
37  };
38 
39  // edgeConnection lists the index of the endpoint vertices for each of the 12
40  // edges of the cube
41  static const int edgeConnection[12][2] =
42  {
43  { 0, 1 }, { 1, 2 }, { 3, 2 }, { 0, 3 },
44  { 4, 5 }, { 5, 6 }, { 7, 6 }, { 4, 7 },
45  { 0, 4 }, { 1, 5 }, { 2, 6 }, { 3, 7 }
46  };
47 
48  // edgeDirection lists the direction vector (vertex[i+1]-vertex[i])/2 for each
49  // edge in the cube
50  static const float edgeDirection[12][3] =
51  {
52  { 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f },
53  { 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f },
54  { 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f },
55  { 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f },
56  { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f },
57  { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }
58  };
59 
60  // edgeCenter lists for calculating counterclockwise order
61  static const float edgeCenter[12][3] =
62  {
63  { 0.5f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.5f },
64  { 0.5f, 0.0f, 1.0f }, { 0.0f, 0.0f, 0.5f },
65  { 0.5f, 1.0f, 0.0f }, { 1.0f, 1.0f, 0.5f },
66  { 0.5f, 1.0f, 1.0f }, { 0.0f, 1.0f, 0.5f },
67  { 0.0f, 0.5f, 0.0f }, { 1.0f, 0.5f, 0.0f },
68  { 1.0f, 0.5f, 1.0f }, { 0.0f, 0.5f, 1.0f }
69  };
70 
71  static const int threeNeighborNodes[8][3] =
72  {
73  { 1, 3, 4 }, { 0, 2, 5 }, { 1, 3, 6 }, { 0, 2, 7 },
74  { 0, 5, 7 }, { 1, 4, 6 }, { 2, 5, 7 }, { 3, 4, 6 }
75  };
76 
77  static const int threeNeighborEdges[8][3] =
78  {
79  { 0, 3, 8 }, { 0, 1, 9 }, { 1, 2, 10 }, { 2, 3, 11 },
80  { 4, 7, 8 }, { 4, 5, 9 }, { 5, 6, 10 }, { 6, 7, 11 }
81  };
82 
83  // For any edge, if one vertex is inside of the surface and the other is outside
84  // of the surface then the edge intersects the surface
85  // For each of the 8 vertices of the cube can be two possible states : either
86  // inside or outside of the surface
87  // For any cube there are 2^8=256 possible sets of vertex states
88  // This table lists the edges intersected by the surface for all 256 possible
89  // vertex states
90  // There are 12 edges. For each entry in the table, if edge #n is intersected,
91  // then bit #n is set to 1
92  static const int cubeEdgeFlags[256] =
93  {
94  0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,
95  0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,
96  0x190, 0x099, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,
97  0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,
98  0x230, 0x339, 0x033, 0x13a, 0x636, 0x73f, 0x435, 0x53c,
99  0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,
100  0x3a0, 0x2a9, 0x1a3, 0x0aa, 0x7a6, 0x6af, 0x5a5, 0x4ac,
101  0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,
102  0x460, 0x569, 0x663, 0x76a, 0x066, 0x16f, 0x265, 0x36c,
103  0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,
104  0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0x0ff, 0x3f5, 0x2fc,
105  0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,
106  0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x055, 0x15c,
107  0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,
108  0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0x0cc,
109  0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,
110  0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,
111  0x0cc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,
112  0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,
113  0x15c, 0x055, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,
114  0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,
115  0x2fc, 0x3f5, 0x0ff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,
116  0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,
117  0x36c, 0x265, 0x16f, 0x066, 0x76a, 0x663, 0x569, 0x460,
118  0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,
119  0x4ac, 0x5a5, 0x6af, 0x7a6, 0x0aa, 0x1a3, 0x2a9, 0x3a0,
120  0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,
121  0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x033, 0x339, 0x230,
122  0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,
123  0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x099, 0x190,
124  0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,
125  0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000
126  };
127 
128  // For each of the possible vertex states listed in CubeEdgeFlags
129  // there is a specific triangulation of the edge intersection points.
130  // TriangleConnectionTable lists all of them in the form of 0-5 edge triples
131  // with the list terminated by the invalid value -1.
132  // For example: TriangleConnectionTable[3] list the 2 triangles formed
133  // when corner[0] and corner[1] are inside of the surface, but the rest of the
134  // cube is not.
135  // three vertices of a triangle = counter-clock-wise order
136  static const int triangleConnectionTable3D[256][16] =
137  { // EdgeFlag, NodeFlag special case for MDC
138  {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x000, 0000 0000 X
139  { 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x109, 0000 0001 O { 0, 8, 8, 3, 3, 0
140  { 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x203, 0000 0010 O { 0, 1, 1, 9, 9, 0
141  { 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x30a, 0000 0011 O { 1, 9, 9, 8, 8, 3, 3, 1
142  { 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x406, 0000 0100 O { 1, 2, 2, 10, 10, 1
143  { 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x50f, 0000 0101 X
144  { 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x605, 0000 0110 O { 0, 2, 2, 10, 10, 9, 9, 0
145  { 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, // 0x70c, 0000 0111 O { 3, 2, 2, 10, 10, 9, 9, 8, 8, 3
146  { 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x80c, 0000 1000 O { 3, 11, 11, 2, 2, 3
147  { 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x905, 0000 1001 O { 2, 0, 0, 8, 8, 11, 11, 2
148  { 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xa0f, 0000 1010 X
149  { 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0xb06, 0000 1011 O { 2, 1, 1, 9, 9, 8, 8, 11, 11, 2
150  { 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xc0a, 0000 1100 O { 1, 3, 3, 11, 11, 10, 10, 1
151  { 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, // 0xd03, 0000 1101 O { 1, 0, 0, 8, 8, 11, 11, 10, 10, 1
152  { 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, // 0xe09, 0000 1110 O { 0, 3, 3, 11, 11, 10, 10, 9, 9, 0
153  { 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xf00, 0000 1111 O { 9, 8, 8, 11, 11, 10, 10, 9
154 
155  { 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x190, 0001 0000 O { 4, 7, 7, 8, 8, 4
156  { 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x099, 0001 0001 O { 3, 0, 0, 4, 4, 7, 7, 3
157  { 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x393, 0001 0010 X
158  { 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, // 0x29a, 0001 0011 O { 3, 1, 1, 9, 9, 4, 4, 7, 7, 3
159  { 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x596, 0001 0100 X
160  { 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1 }, // 0x49f, 0001 0101 X
161  { 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0x795, 0001 0110 X
162  { 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, // 0x69c, 0001 0111 O { 3, 2, 2, 10, 10, 9, 9, 4, 4, 7, 7, 3
163  { 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x99c, 0001 1000 X
164  { 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, // 0x895, 0001 1001 O { 2, 0, 0, 4, 4, 7, 7, 11, 11, 2
165  { 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0xb9f, 0001 1010 X
166  { 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1 }, // 0xa96, 0001 1011 O { 2, 1, 1, 9, 9, 4, 4, 7, 7, 11, 11, 2
167  { 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1 }, // 0xd9a, 0001 1100 X
168  { 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1 }, // 0xc93, 0001 1101 O { 1, 0, 0, 4, 4, 7, 7, 11, 11, 10, 10, 1
169  { 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, // 0xf99, 0001 1110 X
170  { 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, // 0xe90, 0001 1111 O { 4, 7, 7, 11, 11, 10, 10, 9, 9, 4,
171 
172  { 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x230, 0010 0000 O { 9, 5, 5, 4, 4, 9
173  { 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x339, 0010 0001 X
174  { 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x033, 0010 0010 O { 0, 1, 1, 5, 5, 4, 4, 0
175  { 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0x13a, 0010 0011 O { 3, 1, 1, 5, 5, 4, 4, 8, 8, 3
176  { 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x636, 0010 0100 X
177  { 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0x73f, 0010 0101 X
178  { 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, // 0x435, 0010 0110 O { 0, 2, 2, 10, 10, 5, 5, 4, 4, 0
179  { 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1 }, // 0x53c, 0010 0111 O { 3, 2, 2, 10, 10, 5, 5, 4, 4, 8, 8, 3
180  { 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xa3c, 0010 1000 X
181  { 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0xb35, 0010 1001 X
182  { 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0x83f, 0010 1010 X
183  { 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1 }, // 0x936, 0010 1011 O { 2, 1, 1, 5, 5, 4, 4, 8, 8, 11, 11, 2
184  { 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1 }, // 0xe3a, 0010 1100 X
185  { 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1 }, // 0xf33, 0010 1101 X
186  { 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, // 0xc39, 0010 1110 O { 0, 3, 3, 11, 11, 10, 10, 5, 5, 4, 4, 0
187  { 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0xd30, 0010 1111 O { 5, 4, 4, 8, 8, 11, 11, 10, 10, 5
188 
189  { 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x3a0, 0011 0000 O { 5, 7, 7, 8, 8, 9, 9, 5
190  { 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, // 0x2a9, 0011 0001 O { 3, 0, 0, 9, 9, 5, 5, 7, 7, 3
191  { 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0x1a3, 0011 0010 O { 0, 1, 1, 5, 5, 7, 7, 8, 8, 0
192  { 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x0aa, 0011 0011 O { 3, 1, 1, 5, 5, 7, 7, 3
193  { 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1 }, // 0x7a6, 0011 0100 X
194  { 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1 }, // 0x6af, 0011 0101 X
195  { 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1 }, // 0x5a5, 0011 0110 O { 0, 2, 2, 10, 10, 5, 5, 7, 7, 8, 8, 0
196  { 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0x4ac, 0011 0111 O { 3, 2, 2, 10, 10, 5, 5, 7, 7, 3
197  { 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1 }, // 0xbac, 0011 1000 X
198  { 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, // 0xaa5, 0011 1001 O { 2, 0, 0, 9, 9, 5, 5, 7, 7, 11, 11, 2
199  { 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1 }, // 0x9af, 0011 1010 X
200  { 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0x8a6, 0011 1011 O { 2, 1, 1, 5, 5, 7, 7, 11, 11, 2
201  { 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1 }, // 0xfaa, 0011 1100 X
202  { 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1 }, // 0xea3, 0011 1101 X
203  { 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1 }, // 0xda9, 0011 1110 X
204  { 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xca0, 0011 1111 O { 5, 7, 7, 11, 11, 10, 10, 5
205 
206  { 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x460, 0100 0000 O { 10, 6, 6, 5, 5, 10
207  { 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x569, 0100 0001 X
208  { 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x663, 0100 0010 X
209  { 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0x76a, 0100 0011 X
210  { 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x066, 0100 0100 O { 1, 2, 2, 6, 6, 5, 5, 1
211  { 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1 }, // 0x16f, 0100 0101 X
212  { 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0x265, 0100 0110 O { 0, 2, 2, 6, 6, 5, 5, 9, 9, 0
213  { 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1 }, // 0x36c, 0100 0111 O { 3, 2, 2, 6, 6, 5, 5, 9, 9, 8, 8, 3
214  { 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xc6c, 0100 1000 X
215  { 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0xd65, 0100 1001 X
216  { 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0xe6f, 0100 1010 X
217  { 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1 }, // 0xf66, 0100 1011 X
218  { 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, // 0x86a, 0100 1100 O { 5, 1, 1, 3, 3, 11, 11, 6, 6, 5
219  { 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, // 0x963, 0100 1101 O { 1, 0, 0, 8, 8, 11, 11, 6, 6, 5, 5, 1
220  { 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1 }, // 0xa69, 0100 1110 O { 0, 3, 3, 11, 11, 6, 6, 5, 5, 9, 9, 0
221  { 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, // 0xb60, 0100 1111 O { 6, 5, 5, 9, 9, 8, 8, 11, 11, 6
222 
223  { 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x5f0, 0101 0000 X
224  { 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1 }, // 0x4f9, 0101 0001 X
225  { 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0x7f3, 0101 0010 X
226  { 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, // 0x6fa, 0101 0011 X
227  { 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1 }, // 0x1f6, 0101 0100 X
228  { 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1 }, // 0x0ff, 0101 0101 X
229  { 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1 }, // 0x3f5, 0101 0110 X
230  { 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1 }, // 0xxfc, 0101 0111 X
231  { 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0xdfc, 0101 1000 X
232  { 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, // 0xcf5, 0101 1001 X
233  { 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1 }, // 0xfff, 0101 1010 X
234  { 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1 }, // 0xef6, 0101 1011 X
235  { 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, // 0x9fa, 0101 1100 X
236  { 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1 }, // 0x8f3, 0101 1101 X
237  { 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1 }, // 0xbf9, 0101 1110 X
238  { 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1 }, // 0xaf0, 0101 1111 O { 4, 7, 7, 11, 11, 6, 6, 5, 5, 9, 9, 4
239 
240  { 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x650, 0110 0000 O { 6, 4, 4, 9, 9, 10, 10, 6
241  { 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1 }, // 0x759, 0110 0001 X
242  { 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, // 0x453, 0110 0010 O { 0, 1, 1, 10, 10, 6, 6, 4, 4, 0
243  { 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, // 0x55a, 0110 0011 O { 3, 1, 1, 10, 10, 6, 6, 4, 4, 8, 8, 3
244  { 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, // 0x256, 0110 0100 O { 1, 2, 2, 6, 6, 4, 4, 9, 9, 1
245  { 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1 }, // 0x35f, 0110 0101 X
246  { 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x055, 0110 0110 O { 0, 2, 2, 6, 6, 4, 4, 0
247  { 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0x15c, 0110 0111 O { 3, 2, 2, 6, 6, 4, 4, 8, 8, 3
248  { 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1 }, // 0xe5c, 0110 1000 X
249  { 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1 }, // 0xf55, 0110 1001 X
250  { 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, // 0xc5f, 0110 1010 X
251  { 6 , 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1 }, // 0xd56, 0110 1011 O { 2, 1, 1, 10, 10, 6, 6, 4, 4, 8, 8, 11, 11, 2
252  { 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1 }, // 0xa5a, 0110 1100 O { 1, 3, 3, 11, 11, 6, 6, 4, 4, 9, 9, 1
253  { 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1 }, // 0xb53, 0110 1101 X
254  { 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, // 0x859, 0110 1110 O { 0, 3, 3, 11, 11, 6, 6, 4, 4, 0
255  { 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x950, 0110 1111 O { 6, 4, 4, 8, 8, 11, 11, 6
256 
257  { 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, // 0x7c0, 0111 0000 O { 6, 7, 7, 8, 8, 9, 9, 10, 10, 6
258  { 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1 }, // 0x6c9, 0111 0001 O { 0, 10, 10, 6, 6, 7, 7, 3, 3, 0
259  { 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1 }, // 0x5c3, 0111 0010 O { 0, 1, 1, 10, 10, 6, 6, 7, 7, 8, 8, 0
260  { 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, // 0x4ca, 0111 0011 O { 3, 1, 1, 10, 10, 6, 6, 7, 7, 3
261  { 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, // 0x3c6, 0111 0100 O { 1, 2, 2, 6, 6, 7, 7, 8, 8, 9, 9, 1
262  { 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1 }, // 0x2cf, 0111 0101 X
263  { 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, // 0x1c5, 0111 0110 O { 0, 2, 2, 6, 6, 7, 7, 8, 8, 0
264  { 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x0cc, 0111 0111 O { 3, 2, 2, 6, 6, 7, 7, 3
265  { 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, // 0xfcc, 0111 1000 X
266  { 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1 }, // 0xec5, 0111 1001 X
267  { 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1 }, // 0xdcf, 0111 1010 X
268  { 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1 }, // 0xcc6, 0111 1011 O { 2, 1, 1, 10, 10, 6, 6, 7, 7, 11, 11, 2
269  { 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3 , 6, -1 }, // 0xbca, 0111 1100 X
270  { 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xac3, 0111 1101 X
271  { 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1 }, // 0x9c9, 0111 1110 O { 0, 3, 3, 11, 11, 6, 6, 7, 7, 8, 8, 0
272  { 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x8c0, 0111 1111 O { 6, 7, 7, 11, 11, 6
273 
274  { 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x8c0, 1000 0000 O { 7, 6, 6, 11, 11, 7
275  { 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x9c9, 1000 0001 X
276  { 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xac3, 1000 0010 X
277  { 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0xbca, 1000 0011 X
278  { 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xcc6, 1000 0100 X
279  { 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0xdcf, 1000 0101 X
280  { 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0xec5, 1000 0110 X
281  { 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1 }, // 0xfcc, 1000 0111 X
282  { 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x0cc, 1000 1000 O { 2, 3, 3, 7, 7, 6, 6, 2
283  { 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, // 0x1c5, 1000 1001 O { 2, 0, 0, 8, 8, 7, 7, 6, 6, 2
284  { 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1 }, // 0x2cf, 1000 1010 X
285  { 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1 }, // 0x3c6, 1000 1011 O { 2, 1, 1, 9, 9, 8, 8, 7, 7, 6, 6, 2
286  { 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0x4ca, 1000 1100 O { 1, 3, 3, 7, 7, 6, 6, 10, 10, 1
287  { 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1 }, // 0x5c3, 1000 1101 O { 1, 0, 0, 8, 8, 7, 7, 6, 6, 10, 10, 1
288  { 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1 }, // 0x6c9, 1000 1110 O { 0, 3, 3, 7, 7, 6, 6, 10, 10, 9, 9, 0
289  { 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, // 0x7c0, 1000 1111 O { 7, 6, 6, 10, 10, 9, 9, 8, 8, 7
290 
291  { 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x950, 1001 0000 O { 4, 6, 6, 11, 11, 8, 8, 4
292  { 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0x859, 1001 0001 O { 3, 0, 0, 4, 4, 6, 6, 11, 11, 3
293  { 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1 }, // 0xb53, 1001 0010 X
294  { 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1 }, // 0xa5a, 1001 0011 O { 1, 9, 9, 4, 4, 6, 6, 11, 11, 3, 3, 1
295  { 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1 }, // 0xd56, 1001 0100 X
296  { 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1 }, // 0xc5f, 1001 0101 X
297  { 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1 }, // 0xf55, 1001 0110 X
298  { 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1 }, // 0xe5c, 1001 0111 X
299  { 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, // 0x15c, 1001 1000 O { 2, 3, 3, 8, 8, 4, 4, 6, 6, 2
300  { 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x055, 1001 1001 O { 2, 0, 0, 4, 4, 6, 6, 2
301  { 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1 }, // 0x35f, 1001 1010 X
302  { 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0x256, 1001 1011 O { 2, 1, 1, 9, 9, 4, 4, 6, 6, 2
303  { 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1 }, // 0x55a, 1001 1100 O { 1, 3, 3, 8, 8, 4, 4, 6, 6, 10, 10, 1
304  { 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, // 0x453, 1001 1101 O { 1, 0, 0, 4, 4, 6, 6, 10, 10, 1
305  { 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1 }, // 0x759, 1001 1110 X
306  { 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x650, 1001 1111 O { 4, 6, 6, 10, 10, 9, 9, 4
307 
308  { 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xaf0, 1010 0000 X
309  { 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, // 0xbf9, 1010 0001 X
310  { 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0x8f3, 1010 0010 X
311  { 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1 }, // 0x9fa, 1010 0011 X
312  { 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0xef6, 1010 0100 X
313  { 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1 }, // 0xfff, 1010 0101 X
314  { 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1 }, // 0xcf5, 1010 0110 X
315  { 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1 }, // 0xdfc, 1010 0111 X
316  { 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1 }, // 0x2fc, 1010 1000 X
317  { 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1 }, // 0x3f5, 1010 1001 X
318  { 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1 }, // 0x0ff, 1010 1010 X
319  { 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1 }, // 0x1f6, 1010 1011 X
320  { 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1 }, // 0x6fa, 1010 1100 X
321  { 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1 }, // 0x7f3, 1010 1101 X
322  { 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1 }, // 0x4f9, 1010 1110 X
323  { 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1 }, // 0x5f0, 1010 1111 O { 5, 4, 4, 8, 8, 7, 7, 6, 6, 10, 10, 5
324 
325  { 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, // 0xb60, 1011 0000 O { 5, 6, 6, 11, 11, 8, 8, 9, 9, 5
326  { 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1 }, // 0xa69, 1011 0001 O { 5, 6, 6, 11, 11, 3, 3, 0, 0, 9, 9, 5
327  { 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1 }, // 0x963, 1011 0010 O { 0, 1, 1, 5, 5, 6, 6, 11, 11, 8, 8, 0
328  { 6, 11, 3, 6, 3, 5, 5, 3 , 1, -1, -1, -1, -1, -1, -1, -1 }, // 0x86a, 1011 0011 O { 3, 1, 1, 5, 5, 6, 6, 11, 11, 3
329  { 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1 }, // 0xf66, 1011 0100 X
330  { 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1 }, // 0xe6f, 1011 0101 X
331  { 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1 }, // 0xd65, 1011 0110 X
332  { 3, 6, 11, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1 }, //{ 2, 11, 3, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xc6c, 1011 0111 X
333  { 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1 }, // 0x36c, 1011 1000 O { 2, 3, 3, 8, 8, 9, 9, 5, 5, 6, 6, 2
334  { 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, // 0x265, 1011 1001 O { 2, 0, 0, 9, 9, 5, 5, 6, 6, 2
335  { 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1 }, // 0x16f, 1011 1010 X
336  { 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x066, 1011 1011 O { 2, 1, 1, 5, 5, 6, 6, 2
337  { 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1 }, // 0x76a, 1011 1100 X
338  { 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0 , -1, -1, -1, -1 }, // 0x663, 1011 1101 O { 1, 0, 0, 9, 9, 5, 5, 6, 6, 10, 10, 1
339  { 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x569, 1011 1110 X
340  { 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x460, 1011 1111 O { 10, 5, 5, 6, 6, 10
341 
342  { 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xca0, 1100 0000 O { 7, 5, 5, 10, 10, 11, 11, 7
343  { 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1 }, // 0xda9, 1100 0001 X
344  { 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1 }, // 0xea3, 1100 0010 X
345  { 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1 }, // 0xfaa, 1100 0011 X
346  { 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, // 0x8a6, 1100 0100 O { 1, 2, 2, 11, 11, 7, 7, 5, 5, 1
347  { 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1 }, // 0x9af, 1100 0101 X
348  { 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1 }, // 0xaa5, 1100 0110 O { 0, 2, 2, 11, 11, 7, 7, 5, 5, 9, 9, 0
349  { 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1 }, // 0xbac, 1100 0111 X
350  { 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0x4ac, 1100 1000 O { 2, 3, 3, 7, 7, 5, 5, 10, 10, 2
351  { 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1 }, // 0x5a5, 1100 1001 O { 2, 0, 0, 8, 8, 7, 7, 5, 5, 10, 10, 2
352  { 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1 }, // 0x6af, 1100 1010 X
353  { 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1 }, // 0x7a6, 1100 1011 X
354  { 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x0aa, 1100 1100 O { 1, 3, 3, 7, 7, 5, 5, 1
355  { 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, // 0x1a3, 1100 1101 O { 1, 0, 0, 8, 8, 7, 7, 5, 5, 1
356  { 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, // 0x2a9, 1100 1110 O { 0, 3, 3, 7, 7, 5, 5, 9, 9, 0
357  { 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x3a0, 1100 1111 O { 7, 5, 5, 9, 9, 8, 8, 7
358 
359  { 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, // 0xd30, 1101 0000 O { 4, 5, 5, 10, 10, 11, 11, 8, 8, 4
360  { 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1 }, // 0xc39, 1101 0001 O { 3, 0, 0, 4, 4, 5, 5, 10, 10, 11, 11, 3,
361  { 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1 }, // 0xf33, 1101 0010 X
362  { 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1 }, // 0xe3a, 1101 0011 X
363  { 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1 }, // 0x936, 1101 0100 O { 1, 2, 2, 11, 11, 8, 8, 4, 4, 5, 5, 1
364  { 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1 }, // 0x83f, 1101 0101 X
365  { 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1 }, // 0xb35, 1101 0110 X
366  { 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xa3c, 1101 0111 X
367  { 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1 }, // 0x53c, 1101 1000 O { 2, 3, 3, 8, 8, 4, 4, 5, 5, 10, 10, 2
368  { 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, // 0x435, 1101 1001 O { 2, 0, 0, 4, 4, 5, 5, 10, 10, 2
369  { 3, 10, 2, 3, 5, 10, 3, 8, 5 , 4, 5, 8, 0, 1, 9, -1 }, // 0x73f, 1101 1010 X
370  { 5, 10, 2, 5, 2 , 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1 }, // 0x636, 1101 1011 O { 1, 9, 9, 4, 4, 5, 5, 10, 10, 2, 2, 1
371  { 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, // 0x13a, 1101 1100 O { 1, 3, 3, 8, 8, 4, 4, 5, 5, 1
372  { 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x033, 1101 1101 O { 1, 0, 0, 4, 4, 5, 5, 1
373  { 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3 , 5, -1, -1, -1, -1 }, // 0x339, 1101 1110 O { 0, 3, 3, 8, 8, 4, 4, 5, 5, 9, 9, 0
374  { 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x230, 1101 1111 O { 9, 4, 4, 5, 5, 9
375 
376  { 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0xe90, 1110 0000 O { 7, 4, 4, 9, 9, 10, 10, 11, 11, 7
377  { 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1 }, // 0xf99, 1110 0001 X
378  { 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1 }, // 0xc93, 1110 0010 O { 0, 1, 1, 10, 10, 11, 11, 7, 7, 4, 4, 0
379  { 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1 }, // 0xd9a, 1110 0011 X
380  { 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1 }, // 0xa96, 1110 0100 O { 1, 2, 2, 11, 11, 7, 7, 4, 4, 9, 9, 1
381  { 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1 }, // 0xb9f, 1110 0101 X
382  { 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, // 0x895, 1110 0110 O { 0, 2, 2, 11, 11, 7, 7, 4, 4, 0
383  { 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1 }, // 0x99c, 1110 0111 O { 3, 2, 2, 11, 11, 7, 7, 4, 4, 8, 8, 3
384  { 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1 }, // 0x69c, 1110 1000 O { 2, 3, 3, 7, 7, 4, 4, 9, 9, 10, 10, 2
385  { 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1 }, // 0x795, 1110 1001 X
386  { 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1 }, // 0x49f, 1110 1010 X
387  { 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x596, 1110 1011 X
388  { 4, 9, 1 , 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, // 0x29a, 1110 1100 O { 1, 3, 3, 7, 7, 4, 4, 9, 9, 1
389  { 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1 }, // 0x393, 1110 1101 O { 1, 0, 0, 8, 8, 7, 7, 4, 4, 9, 9, 1
390  { 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x099, 1110 1110 O { 0, 3, 3, 7, 7, 4, 4, 0
391  { 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x190, 1110 1111 O { 4, 8, 8, 7, 7, 4
392 
393  { 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xf00, 1111 0000 O { 8, 9, 9, 10, 10, 11, 11, 8
394  { 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, // 0xe09, 1111 0001 O { 3, 0, 0, 9, 9, 10, 10, 11, 11, 3
395  { 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, // 0xd03, 1111 0010 O { 0, 1, 1, 10, 10, 11, 11, 8, 8, 0
396  { 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0xc0a, 1111 0011 O { 3, 1, 1, 10, 10, 11, 11, 3
397  { 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, // 0xb06, 1111 0100 O { 1, 2, 2, 11, 11, 8, 8, 9, 9, 1
398  { 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1 }, // 0xa0f, 1111 0101 O { 0, 9, 9, 1, 1, 2, 2, 11, 11, 3, 3, 0
399  { 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x905, 1111 0110 O { 0, 2, 2, 11, 11, 8, 8, 0
400  { 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x80c, 1111 0111 O { 3, 2, 2, 11, 11, 3
401  { 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, // 0x70c, 1111 1000 O { 2, 3, 3, 8, 8, 9, 9, 10, 10, 2
402  { 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x605, 1111 1001 O { 2, 0, 0, 9, 9, 10, 10, 2
403  { 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1 }, // 0x50f, 1111 1010 O { 0, 1, 1, 10, 10, 2, 2, 3, 3, 8, 8, 0
404  { 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x406, 1111 1011 O { 1, 10, 10, 2, 2, 1
405  { 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x30a, 1111 1100 O { 1, 3, 3, 8, 8, 9, 9, 1
406  { 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x203, 1111 1101 O { 0, 9, 9, 1, 1, 0
407  { 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // 0x109, 1111 1110 O { 0, 3, 3, 8, 8, 0
408  {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } // 0x000, 1111 1111 X
409  };
410 }
411 
412 #endif
Definition: pybind11Utils.h:24