At last! After much delay, much faffing back and forth, and much
[u/mdw/putty] / minibidi.h
1 /************************************************************************
2 * $Id: minibidi.h,v 1.1 2004/05/22 10:36:50 simon Exp $
3 *
4 * ------------
5 * Description:
6 * ------------
7 * This is an implemention of Unicode's Bidirectional Algorithm
8 * (known as UAX #9).
9 *
10 * http://www.unicode.org/reports/tr9/
11 *
12 * Author: Ahmad Khalifa
13 *
14 * -----------------
15 * Revision Details: (Updated by Revision Control System)
16 * -----------------
17 * $Date: 2004/05/22 10:36:50 $
18 * $Author: simon $
19 * $Revision: 1.1 $
20 * $Source: /u1/simon/svn-migration/cvs/putty/minibidi.h,v $
21 *
22 * (www.arabeyes.org - under MIT license)
23 *
24 ************************************************************************/
25
26 /*
27 * TODO:
28 * =====
29 * - work almost finished
30 * - Shaping Table to be expanded to include the whole range.
31 * - Ligature handling
32 */
33
34 #include <stdlib.h> /* definition of wchar_t*/
35
36 #define LMASK 0x3F /* Embedding Level mask */
37 #define OMASK 0xC0 /* Override mask */
38 #define OISL 0x80 /* Override is L */
39 #define OISR 0x40 /* Override is R */
40
41 /* Shaping Helpers */
42 #define STYPE(xh) (((xh >= SHAPE_FIRST) && (xh <= SHAPE_LAST)) ? \
43 shapetypes[xh-SHAPE_FIRST].type : SU) /*))*/
44 #define SISOLATED(xh) (shapetypes[xh-SHAPE_FIRST].form_b)
45 #define SFINAL(xh) xh+1
46 #define SINITIAL(xh) xh+2
47 #define SMEDIAL(ch) ch+3
48
49 typedef struct bidi_char {
50 wchar_t origwc, wc;
51 unsigned short index;
52 } bidi_char;
53
54 /* function declarations */
55 void flipThisRun(bidi_char *from, unsigned char* level, int max, int count);
56 int findIndexOfRun(unsigned char* level , int start, int count, int tlevel);
57 unsigned char getType(wchar_t ch);
58 unsigned char setOverrideBits(unsigned char level, unsigned char override);
59 unsigned char getPreviousLevel(unsigned char* level, int from);
60 unsigned char leastGreaterOdd(unsigned char x);
61 unsigned char leastGreaterEven(unsigned char x);
62 unsigned char getRLE(wchar_t ch);
63 int do_shape(bidi_char *line, bidi_char *to, int count);
64 int do_bidi(bidi_char *line, int count);
65 void doMirror(wchar_t* ch);
66
67 /* character types */
68 enum
69 {
70 L,
71 LRE,
72 LRO,
73 R,
74 AL,
75 RLE,
76 RLO,
77 PDF,
78 EN,
79 ES,
80 ET,
81 AN,
82 CS,
83 NSM,
84 BN,
85 B,
86 S,
87 WS,
88 ON,
89 };
90
91 /* Shaping Types */
92 enum
93 {
94 SL, /* Left-Joining, doesnt exist in U+0600 - U+06FF */
95 SR, /* Right-Joining, ie has Isolated, Final */
96 SD, /* Dual-Joining, ie has Isolated, Final, Initial, Medial */
97 SU, /* Non-Joining */
98 SC /* Join-Causing, like U+0640 (TATWEEL) */
99 };
100
101 typedef struct{
102 char type;
103 wchar_t form_b;
104 } shape_node;
105
106 /* Kept near the actual table, for verification. */
107 #define SHAPE_FIRST 0x621
108 #define SHAPE_LAST 0x64A
109
110 const shape_node shapetypes[] = {
111 /* index, Typ, Iso, Ligature Index*/
112 /* 621 */ {SU, 0xFE80},
113 /* 622 */ {SR, 0xFE81},
114 /* 623 */ {SR, 0xFE83},
115 /* 624 */ {SR, 0xFE85},
116 /* 625 */ {SR, 0xFE87},
117 /* 626 */ {SD, 0xFE89},
118 /* 627 */ {SR, 0xFE8D},
119 /* 628 */ {SD, 0xFE8F},
120 /* 629 */ {SR, 0xFE93},
121 /* 62A */ {SD, 0xFE95},
122 /* 62B */ {SD, 0xFE99},
123 /* 62C */ {SD, 0xFE9D},
124 /* 62D */ {SD, 0xFEA1},
125 /* 62E */ {SD, 0xFEA5},
126 /* 62F */ {SR, 0xFEA9},
127 /* 630 */ {SR, 0xFEAB},
128 /* 631 */ {SR, 0xFEAD},
129 /* 632 */ {SR, 0xFEAF},
130 /* 633 */ {SD, 0xFEB1},
131 /* 634 */ {SD, 0xFEB5},
132 /* 635 */ {SD, 0xFEB9},
133 /* 636 */ {SD, 0xFEBD},
134 /* 637 */ {SD, 0xFEC1},
135 /* 638 */ {SD, 0xFEC5},
136 /* 639 */ {SD, 0xFEC9},
137 /* 63A */ {SD, 0xFECD},
138 /* 63B */ {SU, 0x0},
139 /* 63C */ {SU, 0x0},
140 /* 63D */ {SU, 0x0},
141 /* 63E */ {SU, 0x0},
142 /* 63F */ {SU, 0x0},
143 /* 640 */ {SC, 0x0},
144 /* 641 */ {SD, 0xFED1},
145 /* 642 */ {SD, 0xFED5},
146 /* 643 */ {SD, 0xFED9},
147 /* 644 */ {SD, 0xFEDD},
148 /* 645 */ {SD, 0xFEE1},
149 /* 646 */ {SD, 0xFEE5},
150 /* 647 */ {SD, 0xFEE9},
151 /* 648 */ {SR, 0xFEED},
152 /* 649 */ {SR, 0xFEEF}, /* SD */
153 /* 64A */ {SD, 0xFEF1},
154 };
155
156 /*
157 * This describes the data byte and its frequency
158 */
159 typedef struct
160 {
161 unsigned char f;
162 unsigned char d;
163 }RLENode;
164
165
166 /* This is an array of RLENodes, which is the
167 * Compressed unicode types table
168 */
169 const unsigned char RLE_table[] =
170 {
171 0x09, 0x10, 0x01, 0x0F, 0x01, 0x10, 0x01, 0x11,
172 0x01, 0x0F, 0x01, 0x0E, 0x0E, 0x0F, 0x03, 0x10,
173 0x01, 0x11, 0x01, 0x12, 0x02, 0x0A, 0x03, 0x12,
174 0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
175 0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
176 0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
177 0x04, 0x0E, 0x06, 0x0F, 0x01, 0x0E, 0x1A, 0x0C,
178 0x01, 0x12, 0x01, 0x0A, 0x04, 0x12, 0x04, 0x00,
179 0x01, 0x12, 0x05, 0x0A, 0x02, 0x08, 0x02, 0x12,
180 0x01, 0x00, 0x01, 0x12, 0x03, 0x08, 0x01, 0x00,
181 0x01, 0x12, 0x05, 0x00, 0x17, 0x12, 0x01, 0x00,
182 0x1F, 0x12, 0x01, 0x00, 0xFF, 0x00, 0x2A, 0x12,
183 0x01, 0x00, 0x12, 0x12, 0x1C, 0x00, 0x5E, 0x12,
184 0x02, 0x00, 0x09, 0x12, 0x02, 0x00, 0x07, 0x12,
185 0x0E, 0x00, 0x02, 0x12, 0x0E, 0x00, 0x05, 0x12,
186 0x09, 0x00, 0x01, 0x12, 0x11, 0x0D, 0x50, 0x12,
187 0x10, 0x0D, 0x10, 0x12, 0x0A, 0x00, 0x01, 0x12,
188 0x0B, 0x00, 0x01, 0x12, 0x01, 0x00, 0x03, 0x12,
189 0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x14, 0x12,
190 0x01, 0x00, 0x2C, 0x12, 0x01, 0x00, 0x26, 0x12,
191 0x0A, 0x00, 0x83, 0x0D, 0x04, 0x12, 0x01, 0x0D,
192 0x02, 0x00, 0x45, 0x12, 0x01, 0x00, 0x26, 0x12,
193 0x02, 0x00, 0x02, 0x12, 0x06, 0x00, 0x10, 0x12,
194 0x21, 0x00, 0x26, 0x12, 0x02, 0x00, 0x07, 0x12,
195 0x01, 0x00, 0x27, 0x12, 0x01, 0x00, 0x01, 0x12,
196 0x07, 0x0D, 0x11, 0x12, 0x01, 0x0D, 0x17, 0x12,
197 0x01, 0x0D, 0x03, 0x03, 0x01, 0x0D, 0x01, 0x03,
198 0x01, 0x0D, 0x02, 0x03, 0x01, 0x0D, 0x01, 0x12,
199 0x0B, 0x03, 0x1B, 0x12, 0x05, 0x03, 0x05, 0x12,
200 0x17, 0x0C, 0x01, 0x12, 0x0E, 0x04, 0x01, 0x12,
201 0x03, 0x04, 0x01, 0x12, 0x01, 0x04, 0x1A, 0x12,
202 0x05, 0x04, 0x0B, 0x0D, 0x0B, 0x12, 0x0A, 0x0B,
203 0x0A, 0x0A, 0x01, 0x0B, 0x02, 0x04, 0x03, 0x0D,
204 0x01, 0x04, 0x65, 0x0D, 0x07, 0x04, 0x01, 0x0D,
205 0x07, 0x04, 0x02, 0x0D, 0x02, 0x12, 0x01, 0x0D,
206 0x04, 0x12, 0x02, 0x08, 0x0A, 0x04, 0x05, 0x12,
207 0x01, 0x04, 0x0E, 0x12, 0x01, 0x0E, 0x01, 0x04,
208 0x01, 0x0D, 0x01, 0x04, 0x1B, 0x12, 0x03, 0x0D,
209 0x1B, 0x12, 0x35, 0x04, 0x26, 0x0D, 0x0B, 0x04,
210 0x01, 0x12, 0xFF, 0x12, 0x50, 0x0D, 0x02, 0x00,
211 0x01, 0x12, 0x01, 0x00, 0x35, 0x12, 0x02, 0x0D,
212 0x01, 0x00, 0x04, 0x0D, 0x08, 0x00, 0x04, 0x0D,
213 0x01, 0x12, 0x02, 0x00, 0x01, 0x0D, 0x04, 0x12,
214 0x03, 0x00, 0x0A, 0x0D, 0x02, 0x00, 0x0D, 0x12,
215 0x10, 0x0D, 0x01, 0x00, 0x02, 0x12, 0x01, 0x00,
216 0x08, 0x12, 0x02, 0x00, 0x02, 0x12, 0x02, 0x00,
217 0x16, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
218 0x01, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x0D,
219 0x01, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x04, 0x12,
220 0x02, 0x00, 0x02, 0x12, 0x02, 0x00, 0x02, 0x0D,
221 0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x04, 0x00,
222 0x02, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x02, 0x12,
223 0x02, 0x00, 0x0C, 0x0A, 0x02, 0x00, 0x07, 0x12,
224 0x07, 0x0D, 0x01, 0x12, 0x02, 0x00, 0x06, 0x12,
225 0x04, 0x00, 0x02, 0x12, 0x02, 0x00, 0x16, 0x12,
226 0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
227 0x01, 0x00, 0x02, 0x12, 0x01, 0x00, 0x02, 0x12,
228 0x02, 0x0D, 0x01, 0x12, 0x01, 0x00, 0x03, 0x0D,
229 0x02, 0x12, 0x04, 0x0D, 0x02, 0x12, 0x02, 0x0D,
230 0x03, 0x12, 0x0B, 0x00, 0x04, 0x12, 0x01, 0x00,
231 0x01, 0x12, 0x07, 0x00, 0x0A, 0x0D, 0x02, 0x00,
232 0x03, 0x12, 0x0C, 0x0D, 0x02, 0x00, 0x01, 0x12,
233 0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x01, 0x12,
234 0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x16, 0x12,
235 0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
236 0x01, 0x00, 0x05, 0x12, 0x02, 0x0D, 0x01, 0x00,
237 0x04, 0x0D, 0x05, 0x12, 0x01, 0x0D, 0x02, 0x00,
238 0x01, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x01, 0x12,
239 0x02, 0x00, 0x01, 0x12, 0x0F, 0x00, 0x01, 0x12,
240 0x05, 0x00, 0x0A, 0x12, 0x11, 0x0D, 0x01, 0x00,
241 0x02, 0x12, 0x01, 0x00, 0x08, 0x12, 0x02, 0x00,
242 0x02, 0x12, 0x02, 0x00, 0x16, 0x12, 0x01, 0x00,
243 0x07, 0x12, 0x01, 0x00, 0x02, 0x12, 0x02, 0x00,
244 0x04, 0x12, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x0D,
245 0x01, 0x00, 0x01, 0x0D, 0x03, 0x12, 0x03, 0x00,
246 0x02, 0x12, 0x02, 0x00, 0x02, 0x0D, 0x01, 0x12,
247 0x08, 0x0D, 0x01, 0x00, 0x01, 0x12, 0x04, 0x00,
248 0x02, 0x12, 0x01, 0x00, 0x03, 0x12, 0x04, 0x00,
249 0x0B, 0x12, 0x11, 0x0D, 0x01, 0x00, 0x01, 0x12,
250 0x01, 0x00, 0x06, 0x12, 0x03, 0x00, 0x03, 0x12,
251 0x01, 0x00, 0x04, 0x12, 0x03, 0x00, 0x02, 0x12,
252 0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x02, 0x12,
253 0x03, 0x00, 0x02, 0x12, 0x03, 0x00, 0x03, 0x12,
254 0x03, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
255 0x04, 0x00, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x12,
256 0x03, 0x00, 0x03, 0x12, 0x01, 0x00, 0x03, 0x0D,
257 0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x0F, 0x00,
258 0x0C, 0x12, 0x0E, 0x00, 0x03, 0x12, 0x01, 0x00,
259 0x08, 0x12, 0x01, 0x00, 0x03, 0x12, 0x01, 0x00,
260 0x17, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x01, 0x00,
261 0x05, 0x12, 0x04, 0x0D, 0x03, 0x00, 0x04, 0x12,
262 0x01, 0x0D, 0x03, 0x12, 0x01, 0x0D, 0x04, 0x12,
263 0x07, 0x0D, 0x02, 0x12, 0x09, 0x00, 0x02, 0x12,
264 0x04, 0x00, 0x0A, 0x12, 0x12, 0x00, 0x02, 0x12,
265 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
266 0x01, 0x00, 0x17, 0x12, 0x01, 0x00, 0x0A, 0x12,
267 0x01, 0x00, 0x05, 0x12, 0x04, 0x00, 0x01, 0x0D,
268 0x01, 0x00, 0x05, 0x12, 0x01, 0x0D, 0x01, 0x00,
269 0x02, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x02, 0x12,
270 0x07, 0x00, 0x02, 0x12, 0x07, 0x00, 0x01, 0x12,
271 0x01, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
272 0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x08, 0x12,
273 0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x17, 0x12,
274 0x01, 0x00, 0x10, 0x12, 0x04, 0x00, 0x03, 0x0D,
275 0x03, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
276 0x03, 0x0D, 0x01, 0x12, 0x09, 0x00, 0x01, 0x12,
277 0x08, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
278 0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x12, 0x12,
279 0x03, 0x00, 0x18, 0x12, 0x01, 0x00, 0x09, 0x12,
280 0x01, 0x00, 0x01, 0x12, 0x02, 0x00, 0x07, 0x12,
281 0x03, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x03, 0x0D,
282 0x03, 0x12, 0x01, 0x0D, 0x01, 0x12, 0x01, 0x00,
283 0x08, 0x12, 0x12, 0x00, 0x03, 0x12, 0x0C, 0x00,
284 0x30, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x07, 0x12,
285 0x04, 0x0A, 0x01, 0x00, 0x07, 0x0D, 0x08, 0x00,
286 0x0D, 0x12, 0x25, 0x00, 0x02, 0x12, 0x01, 0x00,
287 0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
288 0x01, 0x12, 0x02, 0x00, 0x01, 0x12, 0x06, 0x00,
289 0x04, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
290 0x03, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
291 0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
292 0x04, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x06, 0x12,
293 0x01, 0x0D, 0x02, 0x00, 0x01, 0x12, 0x02, 0x00,
294 0x05, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x0D,
295 0x06, 0x12, 0x02, 0x00, 0x0A, 0x12, 0x02, 0x00,
296 0x02, 0x12, 0x22, 0x00, 0x18, 0x0D, 0x02, 0x00,
297 0x1B, 0x0D, 0x01, 0x00, 0x01, 0x0D, 0x01, 0x00,
298 0x01, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x0A, 0x12,
299 0x01, 0x00, 0x22, 0x12, 0x06, 0x0D, 0x0E, 0x00,
300 0x01, 0x0D, 0x05, 0x00, 0x01, 0x0D, 0x02, 0x00,
301 0x04, 0x12, 0x04, 0x0D, 0x08, 0x12, 0x01, 0x0D,
302 0x24, 0x12, 0x01, 0x00, 0x08, 0x0D, 0x01, 0x00,
303 0x06, 0x12, 0x02, 0x00, 0x01, 0x12, 0x30, 0x00,
304 0x22, 0x12, 0x01, 0x00, 0x05, 0x12, 0x01, 0x00,
305 0x02, 0x12, 0x01, 0x00, 0x01, 0x0D, 0x04, 0x00,
306 0x01, 0x0D, 0x01, 0x12, 0x03, 0x0D, 0x02, 0x00,
307 0x01, 0x0D, 0x01, 0x12, 0x06, 0x00, 0x18, 0x0D,
308 0x02, 0x12, 0x46, 0x00, 0x26, 0x12, 0x0A, 0x00,
309 0x29, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, 0x00,
310 0x5A, 0x12, 0x05, 0x00, 0x44, 0x12, 0x05, 0x00,
311 0x52, 0x12, 0x06, 0x00, 0x07, 0x12, 0x01, 0x00,
312 0x3F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
313 0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
314 0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
315 0x27, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
316 0x04, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
317 0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
318 0x07, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
319 0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
320 0x07, 0x12, 0x01, 0x00, 0x17, 0x12, 0x01, 0x00,
321 0x1F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
322 0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
323 0x27, 0x12, 0x01, 0x00, 0x13, 0x12, 0x06, 0x00,
324 0x1C, 0x12, 0x23, 0x00, 0x55, 0x12, 0x0C, 0x00,
325 0xFF, 0x00, 0xFF, 0x00, 0x78, 0x12, 0x09, 0x11,
326 0x01, 0x00, 0x1A, 0x12, 0x05, 0x00, 0x51, 0x12,
327 0x0F, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x04, 0x0D,
328 0x03, 0x12, 0x0B, 0x00, 0x12, 0x0D, 0x03, 0x00,
329 0x02, 0x12, 0x09, 0x00, 0x12, 0x0D, 0x02, 0x12,
330 0x0C, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x03, 0x12,
331 0x01, 0x0D, 0x02, 0x12, 0x0C, 0x00, 0x37, 0x0D,
332 0x07, 0x00, 0x08, 0x0D, 0x01, 0x00, 0x02, 0x0D,
333 0x0B, 0x00, 0x07, 0x0A, 0x01, 0x00, 0x01, 0x12,
334 0x03, 0x00, 0x0A, 0x12, 0x21, 0x0D, 0x03, 0x0E,
335 0x01, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x06, 0x00,
336 0x58, 0x12, 0x08, 0x00, 0x29, 0x0D, 0x01, 0x12,
337 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
338 0xFF, 0x12, 0x5B, 0x00, 0x9C, 0x12, 0x04, 0x00,
339 0x5A, 0x12, 0x06, 0x00, 0x16, 0x12, 0x02, 0x00,
340 0x06, 0x12, 0x02, 0x00, 0x26, 0x12, 0x02, 0x00,
341 0x06, 0x12, 0x02, 0x00, 0x08, 0x12, 0x01, 0x00,
342 0x01, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
343 0x01, 0x12, 0x01, 0x00, 0x1F, 0x12, 0x02, 0x00,
344 0x35, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
345 0x01, 0x12, 0x03, 0x00, 0x03, 0x12, 0x01, 0x00,
346 0x07, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x00,
347 0x06, 0x12, 0x04, 0x00, 0x0D, 0x12, 0x05, 0x00,
348 0x03, 0x12, 0x01, 0x00, 0x07, 0x12, 0x03, 0x11,
349 0x0B, 0x0E, 0x03, 0x00, 0x01, 0x03, 0x01, 0x12,
350 0x18, 0x11, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x05,
351 0x01, 0x07, 0x01, 0x02, 0x01, 0x06, 0x01, 0x11,
352 0x01, 0x0A, 0x05, 0x12, 0x2A, 0x11, 0x01, 0x0E,
353 0x04, 0x12, 0x06, 0x0E, 0x06, 0x08, 0x01, 0x00,
354 0x01, 0x12, 0x02, 0x08, 0x06, 0x0A, 0x02, 0x12,
355 0x03, 0x00, 0x01, 0x08, 0x0A, 0x0A, 0x02, 0x12,
356 0x14, 0x0A, 0x12, 0x12, 0x1E, 0x0D, 0x1B, 0x12,
357 0x17, 0x00, 0x01, 0x12, 0x04, 0x00, 0x01, 0x12,
358 0x02, 0x00, 0x0A, 0x12, 0x01, 0x00, 0x01, 0x12,
359 0x03, 0x00, 0x05, 0x12, 0x06, 0x00, 0x01, 0x12,
360 0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x01, 0x12,
361 0x01, 0x00, 0x04, 0x0A, 0x01, 0x00, 0x03, 0x12,
362 0x01, 0x00, 0x07, 0x12, 0x03, 0x00, 0x03, 0x12,
363 0x05, 0x00, 0x05, 0x12, 0x16, 0x00, 0x24, 0x12,
364 0x8E, 0x0A, 0x02, 0x12, 0xFF, 0x12, 0x23, 0x00,
365 0x45, 0x12, 0x1A, 0x00, 0x01, 0x12, 0xCA, 0x08,
366 0x3C, 0x00, 0x4E, 0x08, 0x01, 0x12, 0xFF, 0x12,
367 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
368 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
369 0xFF, 0x12, 0xFF, 0x12, 0x20, 0x11, 0x01, 0x12,
370 0x04, 0x00, 0x03, 0x12, 0x19, 0x00, 0x09, 0x0D,
371 0x06, 0x12, 0x01, 0x00, 0x05, 0x12, 0x02, 0x00,
372 0x05, 0x12, 0x04, 0x00, 0x56, 0x12, 0x02, 0x0D,
373 0x02, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
374 0x5A, 0x12, 0x01, 0x00, 0x04, 0x12, 0x05, 0x00,
375 0x28, 0x12, 0x04, 0x00, 0x5E, 0x12, 0x01, 0x00,
376 0x28, 0x12, 0x38, 0x00, 0x2D, 0x12, 0x03, 0x00,
377 0x24, 0x12, 0x1C, 0x00, 0x1C, 0x12, 0x03, 0x00,
378 0x32, 0x12, 0x0F, 0x00, 0x0C, 0x12, 0x04, 0x00,
379 0x2F, 0x12, 0x01, 0x00, 0x77, 0x12, 0x04, 0x00,
380 0x63, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
381 0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
382 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
383 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
384 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
385 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
386 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
387 0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00, 0x01, 0x12,
388 0x4A, 0x00, 0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12,
389 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
390 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
391 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
392 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
393 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
394 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
395 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
396 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
397 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
398 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
399 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
400 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
401 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
402 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
403 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
404 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
405 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
406 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
407 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
408 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xF5, 0x00,
409 0x01, 0x12, 0x5A, 0x00, 0xFF, 0x00, 0xFF, 0x00,
410 0xFF, 0x00, 0xFF, 0x00, 0x91, 0x12, 0xFF, 0x12,
411 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
412 0xFF, 0x12, 0xFF, 0x12, 0x7A, 0x00, 0x01, 0x12,
413 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
414 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
415 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
416 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
417 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
418 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
419 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
420 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
421 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
422 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
423 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00,
424 0x01, 0x12, 0x5C, 0x00, 0x01, 0x12, 0xFF, 0x12,
425 0xFF, 0x12, 0xFF, 0x12, 0x81, 0x00, 0x02, 0x12,
426 0x7E, 0x00, 0x02, 0x12, 0xFF, 0x12, 0xFF, 0x12,
427 0xFF, 0x12, 0xFF, 0x12, 0x02, 0x00, 0x02, 0x12,
428 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
429 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
430 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
431 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
432 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
433 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
434 0xFF, 0x12, 0x17, 0x00, 0xFF, 0x00, 0x30, 0x12,
435 0x02, 0x00, 0x3B, 0x12, 0x95, 0x00, 0x07, 0x12,
436 0x0C, 0x00, 0x05, 0x12, 0x05, 0x03, 0x01, 0x0D,
437 0x01, 0x03, 0x0A, 0x0A, 0x01, 0x03, 0x0D, 0x12,
438 0x01, 0x03, 0x05, 0x12, 0x01, 0x03, 0x01, 0x12,
439 0x01, 0x03, 0x02, 0x12, 0x01, 0x03, 0x02, 0x12,
440 0x01, 0x03, 0x0A, 0x04, 0x62, 0x12, 0x21, 0x04,
441 0xFF, 0x04, 0x6C, 0x12, 0x12, 0x04, 0x40, 0x12,
442 0x02, 0x04, 0x36, 0x12, 0x28, 0x04, 0x0D, 0x12,
443 0x03, 0x0D, 0x10, 0x12, 0x10, 0x0D, 0x04, 0x12,
444 0x2C, 0x0C, 0x01, 0x12, 0x01, 0x0C, 0x01, 0x12,
445 0x02, 0x0C, 0x01, 0x12, 0x09, 0x0A, 0x01, 0x12,
446 0x02, 0x0A, 0x02, 0x12, 0x05, 0x0A, 0x02, 0x12,
447 0x05, 0x04, 0x05, 0x12, 0x01, 0x04, 0x87, 0x12,
448 0x02, 0x0E, 0x01, 0x12, 0x03, 0x0A, 0x03, 0x12,
449 0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
450 0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
451 0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
452 0x0B, 0x00, 0x59, 0x12, 0x03, 0x00, 0x06, 0x12,
453 0x02, 0x00, 0x06, 0x12, 0x02, 0x00, 0x06, 0x12,
454 0x02, 0x00, 0x03, 0x12, 0x03, 0x0A, 0x02, 0x12,
455 0x03, 0x0A, 0x02, 0x12, 0x09, 0x00, 0x0E, 0x00,
456 };