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