Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
topro.c
Go to the documentation of this file.
1 /*
2  * Topro TP6800/6810 webcam driver.
3  *
4  * Copyright (C) 2011 Jean-Fran├žois Moine (http://moinejf.free.fr)
5  * Copyright (C) 2009 Anders Blomdell ([email protected])
6  * Copyright (C) 2008 Thomas Champagne ([email protected])
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
23 
24 #include "gspca.h"
25 
26 MODULE_DESCRIPTION("Topro TP6800/6810 gspca webcam driver");
27 MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, "
28  "Anders Blomdell <[email protected]>");
29 MODULE_LICENSE("GPL");
30 
31 static int force_sensor = -1;
32 
33 /* JPEG header */
34 static const u8 jpeg_head[] = {
35  0xff, 0xd8, /* jpeg */
36 
37 /* quantization table quality 50% */
38  0xff, 0xdb, 0x00, 0x84, /* DQT */
39 0,
40 #define JPEG_QT0_OFFSET 7
41  0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
42  0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
43  0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
44  0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
45  0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
46  0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
47  0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
48  0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
49 1,
50 #define JPEG_QT1_OFFSET 72
51  0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
52  0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
53  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
54  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
55  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
56  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
57  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
58  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
59 
60  /* Define Huffman table (thanks to Thomas Kaiser) */
61  0xff, 0xc4, 0x01, 0x5e,
62  0x00, 0x00, 0x02, 0x03,
63  0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
64  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
65  0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10,
66  0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
67  0x07, 0x05, 0x04, 0x06, 0x01, 0x00, 0x00, 0x57,
68  0x01, 0x02, 0x03, 0x00, 0x11, 0x04, 0x12, 0x21,
69  0x31, 0x13, 0x41, 0x51, 0x61, 0x05, 0x22, 0x32,
70  0x14, 0x71, 0x81, 0x91, 0x15, 0x23, 0x42, 0x52,
71  0x62, 0xa1, 0xb1, 0x06, 0x33, 0x72, 0xc1, 0xd1,
72  0x24, 0x43, 0x53, 0x82, 0x16, 0x34, 0x92, 0xa2,
73  0xe1, 0xf1, 0xf0, 0x07, 0x08, 0x17, 0x18, 0x25,
74  0x26, 0x27, 0x28, 0x35, 0x36, 0x37, 0x38, 0x44,
75  0x45, 0x46, 0x47, 0x48, 0x54, 0x55, 0x56, 0x57,
76  0x58, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x73,
77  0x74, 0x75, 0x76, 0x77, 0x78, 0x83, 0x84, 0x85,
78  0x86, 0x87, 0x88, 0x93, 0x94, 0x95, 0x96, 0x97,
79  0x98, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2,
80  0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3,
81  0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4,
82  0xd5, 0xd6, 0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5,
83  0xe6, 0xe7, 0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
84  0xf7, 0xf8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
85  0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
86  0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
87  0x05, 0x06, 0x07, 0x08, 0x09, 0x11, 0x00, 0x02,
88  0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
89  0x04, 0x06, 0x01, 0x00, 0x00, 0x57, 0x00, 0x01,
90  0x11, 0x02, 0x21, 0x03, 0x12, 0x31, 0x41, 0x13,
91  0x22, 0x51, 0x61, 0x04, 0x32, 0x71, 0x05, 0x14,
92  0x23, 0x42, 0x33, 0x52, 0x81, 0x91, 0xa1, 0xb1,
93  0xf0, 0x06, 0x15, 0xc1, 0xd1, 0xe1, 0x24, 0x43,
94  0x62, 0xf1, 0x16, 0x25, 0x34, 0x53, 0x72, 0x82,
95  0x92, 0x07, 0x08, 0x17, 0x18, 0x26, 0x27, 0x28,
96  0x35, 0x36, 0x37, 0x38, 0x44, 0x45, 0x46, 0x47,
97  0x48, 0x54, 0x55, 0x56, 0x57, 0x58, 0x63, 0x64,
98  0x65, 0x66, 0x67, 0x68, 0x73, 0x74, 0x75, 0x76,
99  0x77, 0x78, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
100  0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0xa2, 0xa3,
101  0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2, 0xb3, 0xb4,
102  0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3, 0xc4, 0xc5,
103  0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
104  0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
105  0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
106  0xff, 0xc0, 0x00, 0x11, /* SOF0 (start of frame 0 */
107  0x08, /* data precision */
108 #define JPEG_HEIGHT_OFFSET 493
109  0x01, 0xe0, /* height */
110  0x02, 0x80, /* width */
111  0x03, /* component number */
112  0x01,
113  0x21, /* samples Y = jpeg 422 */
114  0x00, /* quant Y */
115  0x02, 0x11, 0x01, /* samples CbCr - quant CbCr */
116  0x03, 0x11, 0x01,
117 
118  0xff, 0xda, 0x00, 0x0c, /* SOS (start of scan) */
119  0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
120 #define JPEG_HDR_SZ 521
121 };
122 
123 struct sd {
124  struct gspca_dev gspca_dev; /* !! must be the first item */
125  struct v4l2_ctrl *jpegqual;
126  struct v4l2_ctrl *sharpness;
127  struct v4l2_ctrl *gamma;
128  struct v4l2_ctrl *blue;
129  struct v4l2_ctrl *red;
130 
132  u8 quality; /* webcam current JPEG quality (0..16) */
133  s8 ag_cnt; /* autogain / start counter for tp6810 */
134 #define AG_CNT_START 13 /* check gain every N frames */
135 
136  u8 bridge;
137  u8 sensor;
138 
140 };
141 
142 enum bridges {
145 };
146 
147 enum sensors {
149  SENSOR_SOI763A, /* ~= ov7630 / ov7648 */
151 };
152 
153 static const struct v4l2_pix_format vga_mode[] = {
155  .bytesperline = 320,
156  .sizeimage = 320 * 240 * 4 / 8 + 590,
157  .colorspace = V4L2_COLORSPACE_JPEG},
159  .bytesperline = 640,
160  .sizeimage = 640 * 480 * 3 / 8 + 590,
161  .colorspace = V4L2_COLORSPACE_JPEG}
162 };
163 
164 /*
165  * JPEG quality
166  * index: webcam compression
167  * value: JPEG quality in %
168  */
169 static const u8 jpeg_q[17] = {
170  88, 77, 67, 57, 55, 55, 45, 45, 36, 36, 30, 30, 26, 26, 22, 22, 94
171 };
172 
173 #define BULK_OUT_SIZE 0x20
174 #if BULK_OUT_SIZE > USB_BUF_SZ
175 #error "USB buffer too small"
176 #endif
177 
178 static const u8 rates[] = {30, 20, 15, 10, 7, 5};
179 static const struct framerates framerates[] = {
180  {
181  .rates = rates,
182  .nrates = ARRAY_SIZE(rates)
183  },
184  {
185  .rates = rates,
186  .nrates = ARRAY_SIZE(rates)
187  }
188 };
189 static const u8 rates_6810[] = {30, 15, 10, 7, 5};
190 static const struct framerates framerates_6810[] = {
191  {
192  .rates = rates_6810,
193  .nrates = ARRAY_SIZE(rates_6810)
194  },
195  {
196  .rates = rates_6810,
197  .nrates = ARRAY_SIZE(rates_6810)
198  }
199 };
200 
201 /*
202  * webcam quality in %
203  * the last value is the ultra fine quality
204  */
205 
206 /* TP6800 register offsets */
207 #define TP6800_R10_SIF_TYPE 0x10
208 #define TP6800_R11_SIF_CONTROL 0x11
209 #define TP6800_R12_SIF_ADDR_S 0x12
210 #define TP6800_R13_SIF_TX_DATA 0x13
211 #define TP6800_R14_SIF_RX_DATA 0x14
212 #define TP6800_R15_GPIO_PU 0x15
213 #define TP6800_R16_GPIO_PD 0x16
214 #define TP6800_R17_GPIO_IO 0x17
215 #define TP6800_R18_GPIO_DATA 0x18
216 #define TP6800_R19_SIF_ADDR_S2 0x19
217 #define TP6800_R1A_SIF_TX_DATA2 0x1a
218 #define TP6800_R1B_SIF_RX_DATA2 0x1b
219 #define TP6800_R21_ENDP_1_CTL 0x21
220 #define TP6800_R2F_TIMING_CFG 0x2f
221 #define TP6800_R30_SENSOR_CFG 0x30
222 #define TP6800_R31_PIXEL_START 0x31
223 #define TP6800_R32_PIXEL_END_L 0x32
224 #define TP6800_R33_PIXEL_END_H 0x33
225 #define TP6800_R34_LINE_START 0x34
226 #define TP6800_R35_LINE_END_L 0x35
227 #define TP6800_R36_LINE_END_H 0x36
228 #define TP6800_R37_FRONT_DARK_ST 0x37
229 #define TP6800_R38_FRONT_DARK_END 0x38
230 #define TP6800_R39_REAR_DARK_ST_L 0x39
231 #define TP6800_R3A_REAR_DARK_ST_H 0x3a
232 #define TP6800_R3B_REAR_DARK_END_L 0x3b
233 #define TP6800_R3C_REAR_DARK_END_H 0x3c
234 #define TP6800_R3D_HORIZ_DARK_LINE_L 0x3d
235 #define TP6800_R3E_HORIZ_DARK_LINE_H 0x3e
236 #define TP6800_R3F_FRAME_RATE 0x3f
237 #define TP6800_R50 0x50
238 #define TP6800_R51 0x51
239 #define TP6800_R52 0x52
240 #define TP6800_R53 0x53
241 #define TP6800_R54_DARK_CFG 0x54
242 #define TP6800_R55_GAMMA_R 0x55
243 #define TP6800_R56_GAMMA_G 0x56
244 #define TP6800_R57_GAMMA_B 0x57
245 #define TP6800_R5C_EDGE_THRLD 0x5c
246 #define TP6800_R5D_DEMOSAIC_CFG 0x5d
247 #define TP6800_R78_FORMAT 0x78
248 #define TP6800_R79_QUALITY 0x79
249 #define TP6800_R7A_BLK_THRLD 0x7a
250 
251 /* CX0342 register offsets */
252 
253 #define CX0342_SENSOR_ID 0x00
254 #define CX0342_VERSION_NO 0x01
255 #define CX0342_ORG_X_L 0x02
256 #define CX0342_ORG_X_H 0x03
257 #define CX0342_ORG_Y_L 0x04
258 #define CX0342_ORG_Y_H 0x05
259 #define CX0342_STOP_X_L 0x06
260 #define CX0342_STOP_X_H 0x07
261 #define CX0342_STOP_Y_L 0x08
262 #define CX0342_STOP_Y_H 0x09
263 #define CX0342_FRAME_WIDTH_L 0x0a
264 #define CX0342_FRAME_WIDTH_H 0x0b
265 #define CX0342_FRAME_HEIGH_L 0x0c
266 #define CX0342_FRAME_HEIGH_H 0x0d
267 #define CX0342_EXPO_LINE_L 0x10
268 #define CX0342_EXPO_LINE_H 0x11
269 #define CX0342_EXPO_CLK_L 0x12
270 #define CX0342_EXPO_CLK_H 0x13
271 #define CX0342_RAW_GRGAIN_L 0x14
272 #define CX0342_RAW_GRGAIN_H 0x15
273 #define CX0342_RAW_GBGAIN_L 0x16
274 #define CX0342_RAW_GBGAIN_H 0x17
275 #define CX0342_RAW_RGAIN_L 0x18
276 #define CX0342_RAW_RGAIN_H 0x19
277 #define CX0342_RAW_BGAIN_L 0x1a
278 #define CX0342_RAW_BGAIN_H 0x1b
279 #define CX0342_GLOBAL_GAIN 0x1c
280 #define CX0342_SYS_CTRL_0 0x20
281 #define CX0342_SYS_CTRL_1 0x21
282 #define CX0342_SYS_CTRL_2 0x22
283 #define CX0342_BYPASS_MODE 0x23
284 #define CX0342_SYS_CTRL_3 0x24
285 #define CX0342_TIMING_EN 0x25
286 #define CX0342_OUTPUT_CTRL 0x26
287 #define CX0342_AUTO_ADC_CALIB 0x27
288 #define CX0342_SYS_CTRL_4 0x28
289 #define CX0342_ADCGN 0x30
290 #define CX0342_SLPCR 0x31
291 #define CX0342_SLPFN_LO 0x32
292 #define CX0342_ADC_CTL 0x33
293 #define CX0342_LVRST_BLBIAS 0x34
294 #define CX0342_VTHSEL 0x35
295 #define CX0342_RAMP_RIV 0x36
296 #define CX0342_LDOSEL 0x37
297 #define CX0342_CLOCK_GEN 0x40
298 #define CX0342_SOFT_RESET 0x41
299 #define CX0342_PLL 0x42
300 #define CX0342_DR_ENH_PULSE_OFFSET_L 0x43
301 #define CX0342_DR_ENH_PULSE_OFFSET_H 0x44
302 #define CX0342_DR_ENH_PULSE_POS_L 0x45
303 #define CX0342_DR_ENH_PULSE_POS_H 0x46
304 #define CX0342_DR_ENH_PULSE_WIDTH 0x47
305 #define CX0342_AS_CURRENT_CNT_L 0x48
306 #define CX0342_AS_CURRENT_CNT_H 0x49
307 #define CX0342_AS_PREVIOUS_CNT_L 0x4a
308 #define CX0342_AS_PREVIOUS_CNT_H 0x4b
309 #define CX0342_SPV_VALUE_L 0x4c
310 #define CX0342_SPV_VALUE_H 0x4d
311 #define CX0342_GPXLTHD_L 0x50
312 #define CX0342_GPXLTHD_H 0x51
313 #define CX0342_RBPXLTHD_L 0x52
314 #define CX0342_RBPXLTHD_H 0x53
315 #define CX0342_PLANETHD_L 0x54
316 #define CX0342_PLANETHD_H 0x55
317 #define CX0342_ROWDARK_TH 0x56
318 #define CX0342_ROWDARK_TOL 0x57
319 #define CX0342_RB_GAP_L 0x58
320 #define CX0342_RB_GAP_H 0x59
321 #define CX0342_G_GAP_L 0x5a
322 #define CX0342_G_GAP_H 0x5b
323 #define CX0342_AUTO_ROW_DARK 0x60
324 #define CX0342_MANUAL_DARK_VALUE 0x61
325 #define CX0342_GB_DARK_OFFSET 0x62
326 #define CX0342_GR_DARK_OFFSET 0x63
327 #define CX0342_RED_DARK_OFFSET 0x64
328 #define CX0342_BLUE_DARK_OFFSET 0x65
329 #define CX0342_DATA_SCALING_MULTI 0x66
330 #define CX0342_AUTOD_Q_FRAME 0x67
331 #define CX0342_AUTOD_ALLOW_VARI 0x68
332 #define CX0342_AUTO_DARK_VALUE_L 0x69
333 #define CX0342_AUTO_DARK_VALUE_H 0x6a
334 #define CX0342_IO_CTRL_0 0x70
335 #define CX0342_IO_CTRL_1 0x71
336 #define CX0342_IO_CTRL_2 0x72
337 #define CX0342_IDLE_CTRL 0x73
338 #define CX0342_TEST_MODE 0x74
339 #define CX0342_FRAME_FIX_DATA_TEST 0x75
340 #define CX0342_FRAME_CNT_TEST 0x76
341 #define CX0342_RST_OVERFLOW_L 0x80
342 #define CX0342_RST_OVERFLOW_H 0x81
343 #define CX0342_RST_UNDERFLOW_L 0x82
344 #define CX0342_RST_UNDERFLOW_H 0x83
345 #define CX0342_DATA_OVERFLOW_L 0x84
346 #define CX0342_DATA_OVERFLOW_H 0x85
347 #define CX0342_DATA_UNDERFLOW_L 0x86
348 #define CX0342_DATA_UNDERFLOW_H 0x87
349 #define CX0342_CHANNEL_0_0_L_irst 0x90
350 #define CX0342_CHANNEL_0_0_H_irst 0x91
351 #define CX0342_CHANNEL_0_1_L_irst 0x92
352 #define CX0342_CHANNEL_0_1_H_irst 0x93
353 #define CX0342_CHANNEL_0_2_L_irst 0x94
354 #define CX0342_CHANNEL_0_2_H_irst 0x95
355 #define CX0342_CHANNEL_0_3_L_irst 0x96
356 #define CX0342_CHANNEL_0_3_H_irst 0x97
357 #define CX0342_CHANNEL_0_4_L_irst 0x98
358 #define CX0342_CHANNEL_0_4_H_irst 0x99
359 #define CX0342_CHANNEL_0_5_L_irst 0x9a
360 #define CX0342_CHANNEL_0_5_H_irst 0x9b
361 #define CX0342_CHANNEL_0_6_L_irst 0x9c
362 #define CX0342_CHANNEL_0_6_H_irst 0x9d
363 #define CX0342_CHANNEL_0_7_L_irst 0x9e
364 #define CX0342_CHANNEL_0_7_H_irst 0x9f
365 #define CX0342_CHANNEL_1_0_L_itx 0xa0
366 #define CX0342_CHANNEL_1_0_H_itx 0xa1
367 #define CX0342_CHANNEL_1_1_L_itx 0xa2
368 #define CX0342_CHANNEL_1_1_H_itx 0xa3
369 #define CX0342_CHANNEL_1_2_L_itx 0xa4
370 #define CX0342_CHANNEL_1_2_H_itx 0xa5
371 #define CX0342_CHANNEL_1_3_L_itx 0xa6
372 #define CX0342_CHANNEL_1_3_H_itx 0xa7
373 #define CX0342_CHANNEL_1_4_L_itx 0xa8
374 #define CX0342_CHANNEL_1_4_H_itx 0xa9
375 #define CX0342_CHANNEL_1_5_L_itx 0xaa
376 #define CX0342_CHANNEL_1_5_H_itx 0xab
377 #define CX0342_CHANNEL_1_6_L_itx 0xac
378 #define CX0342_CHANNEL_1_6_H_itx 0xad
379 #define CX0342_CHANNEL_1_7_L_itx 0xae
380 #define CX0342_CHANNEL_1_7_H_itx 0xaf
381 #define CX0342_CHANNEL_2_0_L_iwl 0xb0
382 #define CX0342_CHANNEL_2_0_H_iwl 0xb1
383 #define CX0342_CHANNEL_2_1_L_iwl 0xb2
384 #define CX0342_CHANNEL_2_1_H_iwl 0xb3
385 #define CX0342_CHANNEL_2_2_L_iwl 0xb4
386 #define CX0342_CHANNEL_2_2_H_iwl 0xb5
387 #define CX0342_CHANNEL_2_3_L_iwl 0xb6
388 #define CX0342_CHANNEL_2_3_H_iwl 0xb7
389 #define CX0342_CHANNEL_2_4_L_iwl 0xb8
390 #define CX0342_CHANNEL_2_4_H_iwl 0xb9
391 #define CX0342_CHANNEL_2_5_L_iwl 0xba
392 #define CX0342_CHANNEL_2_5_H_iwl 0xbb
393 #define CX0342_CHANNEL_2_6_L_iwl 0xbc
394 #define CX0342_CHANNEL_2_6_H_iwl 0xbd
395 #define CX0342_CHANNEL_2_7_L_iwl 0xbe
396 #define CX0342_CHANNEL_2_7_H_iwl 0xbf
397 #define CX0342_CHANNEL_3_0_L_ensp 0xc0
398 #define CX0342_CHANNEL_3_0_H_ensp 0xc1
399 #define CX0342_CHANNEL_3_1_L_ensp 0xc2
400 #define CX0342_CHANNEL_3_1_H_ensp 0xc3
401 #define CX0342_CHANNEL_3_2_L_ensp 0xc4
402 #define CX0342_CHANNEL_3_2_H_ensp 0xc5
403 #define CX0342_CHANNEL_3_3_L_ensp 0xc6
404 #define CX0342_CHANNEL_3_3_H_ensp 0xc7
405 #define CX0342_CHANNEL_3_4_L_ensp 0xc8
406 #define CX0342_CHANNEL_3_4_H_ensp 0xc9
407 #define CX0342_CHANNEL_3_5_L_ensp 0xca
408 #define CX0342_CHANNEL_3_5_H_ensp 0xcb
409 #define CX0342_CHANNEL_3_6_L_ensp 0xcc
410 #define CX0342_CHANNEL_3_6_H_ensp 0xcd
411 #define CX0342_CHANNEL_3_7_L_ensp 0xce
412 #define CX0342_CHANNEL_3_7_H_ensp 0xcf
413 #define CX0342_CHANNEL_4_0_L_sela 0xd0
414 #define CX0342_CHANNEL_4_0_H_sela 0xd1
415 #define CX0342_CHANNEL_4_1_L_sela 0xd2
416 #define CX0342_CHANNEL_4_1_H_sela 0xd3
417 #define CX0342_CHANNEL_5_0_L_intla 0xe0
418 #define CX0342_CHANNEL_5_0_H_intla 0xe1
419 #define CX0342_CHANNEL_5_1_L_intla 0xe2
420 #define CX0342_CHANNEL_5_1_H_intla 0xe3
421 #define CX0342_CHANNEL_5_2_L_intla 0xe4
422 #define CX0342_CHANNEL_5_2_H_intla 0xe5
423 #define CX0342_CHANNEL_5_3_L_intla 0xe6
424 #define CX0342_CHANNEL_5_3_H_intla 0xe7
425 #define CX0342_CHANNEL_6_0_L_xa_sel_pos 0xf0
426 #define CX0342_CHANNEL_6_0_H_xa_sel_pos 0xf1
427 #define CX0342_CHANNEL_7_1_L_cds_pos 0xf2
428 #define CX0342_CHANNEL_7_1_H_cds_pos 0xf3
429 #define CX0342_SENSOR_HEIGHT_L 0xfb
430 #define CX0342_SENSOR_HEIGHT_H 0xfc
431 #define CX0342_SENSOR_WIDTH_L 0xfd
432 #define CX0342_SENSOR_WIDTH_H 0xfe
433 #define CX0342_VSYNC_HSYNC_READ 0xff
434 
435 struct cmd {
438 };
439 
440 static const u8 DQT[17][130] = {
441  /* Define quantization table (thanks to Thomas Kaiser) */
442  { /* Quality 0 */
443  0x00,
444  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
445  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
446  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
447  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
448  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
449  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
450  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
451  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
452  0x01,
453  0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0b, 0x06,
454  0x06, 0x0b, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18,
455  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
456  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
457  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
458  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
459  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
460  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
461  },
462  { /* Quality 1 */
463  0x00,
464  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
465  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
466  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
467  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
468  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
469  0x04, 0x04, 0x04, 0x09, 0x09, 0x09, 0x09, 0x09,
470  0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
471  0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
472  0x01,
473  0x08, 0x09, 0x09, 0x0c, 0x0a, 0x0c, 0x17, 0x0d,
474  0x0d, 0x17, 0x31, 0x21, 0x1c, 0x21, 0x31, 0x31,
475  0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
476  0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
477  0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
478  0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
479  0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
480  0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
481  },
482  { /* Quality 2 */
483  0x00,
484  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
485  0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04,
486  0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
487  0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
488  0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
489  0x06, 0x06, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
490  0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
491  0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
492  0x01,
493  0x0c, 0x0d, 0x0d, 0x12, 0x0f, 0x12, 0x23, 0x13,
494  0x13, 0x23, 0x4a, 0x31, 0x2a, 0x31, 0x4a, 0x4a,
495  0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
496  0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
497  0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
498  0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
499  0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
500  0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
501  },
502  { /* Quality 3 */
503  0x00,
504  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
505  0x04, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
506  0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
507  0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
508  0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
509  0x08, 0x08, 0x08, 0x13, 0x13, 0x13, 0x13, 0x13,
510  0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
511  0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
512  0x01,
513  0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
514  0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
515  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
516  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
517  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
518  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
519  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
520  0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
521  },
522  { /* Quality 4 */
523  0x00,
524  0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
525  0x05, 0x05, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x05,
526  0x05, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
527  0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
528  0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
529  0x0a, 0x0a, 0x0a, 0x17, 0x17, 0x17, 0x17, 0x17,
530  0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
531  0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
532  0x01,
533  0x11, 0x16, 0x16, 0x1e, 0x1a, 0x1e, 0x3a, 0x20,
534  0x20, 0x3a, 0x7b, 0x52, 0x46, 0x52, 0x7b, 0x7b,
535  0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
536  0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
537  0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
538  0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
539  0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
540  0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
541  },
542  { /* Quality 5 */
543  0x00,
544  0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
545  0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x06, 0x06, 0x06,
546  0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
547  0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
548  0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
549  0x0c, 0x0c, 0x0c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
550  0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
551  0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
552  0x01,
553  0x11, 0x1b, 0x1b, 0x24, 0x1f, 0x24, 0x46, 0x27,
554  0x27, 0x46, 0x94, 0x63, 0x54, 0x63, 0x94, 0x94,
555  0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
556  0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
557  0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
558  0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
559  0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
560  0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
561  },
562  { /* Quality 6 */
563  0x00,
564  0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
565  0x07, 0x07, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07,
566  0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
567  0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
568  0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
569  0x0e, 0x0e, 0x0e, 0x21, 0x21, 0x21, 0x21, 0x21,
570  0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
571  0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
572  0x01,
573  0x15, 0x1f, 0x1f, 0x2a, 0x24, 0x2a, 0x52, 0x2d,
574  0x2d, 0x52, 0xad, 0x73, 0x62, 0x73, 0xad, 0xad,
575  0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
576  0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
577  0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
578  0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
579  0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
580  0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
581  },
582  { /* Quality 7 */
583  0x00,
584  0x05, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
585  0x08, 0x08, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08,
586  0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
587  0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
588  0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
589  0x10, 0x10, 0x10, 0x26, 0x26, 0x26, 0x26, 0x26,
590  0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
591  0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
592  0x01,
593  0x15, 0x24, 0x24, 0x30, 0x2a, 0x30, 0x5e, 0x34,
594  0x34, 0x5e, 0xc6, 0x84, 0x70, 0x84, 0xc6, 0xc6,
595  0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
596  0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
597  0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
598  0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
599  0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
600  0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
601  },
602  { /* Quality 8 */
603  0x00,
604  0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
605  0x0a, 0x0a, 0x14, 0x14, 0x14, 0x0a, 0x0a, 0x0a,
606  0x0a, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
607  0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
608  0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
609  0x14, 0x14, 0x14, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
610  0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
611  0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
612  0x01,
613  0x19, 0x2d, 0x2d, 0x3c, 0x34, 0x3c, 0x75, 0x41,
614  0x41, 0x75, 0xf7, 0xa5, 0x8c, 0xa5, 0xf7, 0xf7,
615  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
616  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
617  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
618  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
619  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
620  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
621  },
622  { /* Quality 9 */
623  0x00,
624  0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
625  0x0c, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x0c,
626  0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
627  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
628  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
629  0x18, 0x18, 0x18, 0x39, 0x39, 0x39, 0x39, 0x39,
630  0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
631  0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
632  0x01,
633  0x19, 0x36, 0x36, 0x48, 0x3f, 0x48, 0x8d, 0x4e,
634  0x4e, 0x8d, 0xff, 0xc6, 0xa8, 0xc6, 0xff, 0xff,
635  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
636  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
637  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
638  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
639  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
640  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
641  },
642  { /* Quality 10 */
643  0x00,
644  0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
645  0x0e, 0x0e, 0x1c, 0x1c, 0x1c, 0x0e, 0x0e, 0x0e,
646  0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
647  0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
648  0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
649  0x1c, 0x1c, 0x1c, 0x42, 0x42, 0x42, 0x42, 0x42,
650  0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
651  0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
652  0x01,
653  0x1d, 0x3f, 0x3f, 0x54, 0x49, 0x54, 0xa4, 0x5b,
654  0x5b, 0xa4, 0xff, 0xe7, 0xc4, 0xe7, 0xff, 0xff,
655  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
656  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
657  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
658  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
659  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
660  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
661  },
662  { /* Quality 11 */
663  0x00,
664  0x07, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
665  0x10, 0x10, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10,
666  0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
667  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
668  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
669  0x20, 0x20, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
670  0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
671  0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
672  0x01,
673  0x1d, 0x48, 0x48, 0x60, 0x54, 0x60, 0xbc, 0x68,
674  0x68, 0xbc, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
675  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
676  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
677  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
678  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
679  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
680  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
681  },
682  { /* Quality 12 */
683  0x00,
684  0x08, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
685  0x14, 0x14, 0x28, 0x28, 0x28, 0x14, 0x14, 0x14,
686  0x14, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
687  0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
688  0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
689  0x28, 0x28, 0x28, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
690  0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
691  0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
692  0x01,
693  0x22, 0x5a, 0x5a, 0x78, 0x69, 0x78, 0xeb, 0x82,
694  0x82, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
695  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
696  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
697  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
698  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
699  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
700  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
701  },
702  { /* Quality 13 */
703  0x00,
704  0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
705  0x18, 0x18, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18,
706  0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
707  0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
708  0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
709  0x30, 0x30, 0x30, 0x72, 0x72, 0x72, 0x72, 0x72,
710  0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
711  0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
712  0x01,
713  0x22, 0x6c, 0x6c, 0x90, 0x7e, 0x90, 0xff, 0x9c,
714  0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
715  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
716  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
717  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
718  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
719  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
720  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
721  },
722  { /* Quality 14 */
723  0x00,
724  0x0a, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
725  0x1c, 0x1c, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x1c,
726  0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
727  0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
728  0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
729  0x38, 0x38, 0x38, 0x85, 0x85, 0x85, 0x85, 0x85,
730  0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
731  0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
732  0x01,
733  0x2a, 0x7e, 0x7e, 0xa8, 0x93, 0xa8, 0xff, 0xb6,
734  0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
735  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
736  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
737  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
738  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
739  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
740  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
741  },
742  { /* Quality 15 */
743  0x00,
744  0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
745  0x20, 0x20, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20,
746  0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
747  0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
748  0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
749  0x40, 0x40, 0x40, 0x98, 0x98, 0x98, 0x98, 0x98,
750  0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
751  0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
752  0x01,
753  0x2a, 0x90, 0x90, 0xc0, 0xa8, 0xc0, 0xff, 0xd0,
754  0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
755  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
756  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
757  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
758  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
759  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
760  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
761  },
762  { /* Quality 16-31 */
763  0x00,
764  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
765  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
766  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
767  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
768  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
769  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
770  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
771  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
772  0x01,
773  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
774  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
775  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
776  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
777  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
778  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
779  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
780  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
781  }
782 };
783 
784 static const struct cmd tp6810_cx_init_common[] = {
785  {0x1c, 0x00},
786  {TP6800_R10_SIF_TYPE, 0x00},
787  {0x4e, 0x00},
788  {0x4f, 0x00},
789  {TP6800_R50, 0xff},
790  {TP6800_R51, 0x03},
791  {0x00, 0x07},
792  {TP6800_R79_QUALITY, 0x03},
793  {TP6800_R2F_TIMING_CFG, 0x37},
794  {TP6800_R30_SENSOR_CFG, 0x10},
795  {TP6800_R21_ENDP_1_CTL, 0x00},
796  {TP6800_R52, 0x40},
797  {TP6800_R53, 0x40},
798  {TP6800_R54_DARK_CFG, 0x40},
799  {TP6800_R30_SENSOR_CFG, 0x18},
800  {0x4b, 0x00},
801  {TP6800_R3F_FRAME_RATE, 0x83},
802  {TP6800_R79_QUALITY, 0x05},
803  {TP6800_R21_ENDP_1_CTL, 0x00},
804  {0x7c, 0x04},
805  {0x25, 0x14},
806  {0x26, 0x0f},
807  {0x7b, 0x10},
808 };
809 
810 static const struct cmd tp6810_ov_init_common[] = {
811  {0x1c, 0x00},
812  {TP6800_R10_SIF_TYPE, 0x00},
813  {0x4e, 0x00},
814  {0x4f, 0x00},
815  {TP6800_R50, 0xff},
816  {TP6800_R51, 0x03},
817  {0x00, 0x07},
818  {TP6800_R52, 0x40},
819  {TP6800_R53, 0x40},
820  {TP6800_R54_DARK_CFG, 0x40},
821  {TP6800_R79_QUALITY, 0x03},
822  {TP6800_R2F_TIMING_CFG, 0x17},
823  {TP6800_R30_SENSOR_CFG, 0x18},
824  {TP6800_R21_ENDP_1_CTL, 0x00},
825  {TP6800_R3F_FRAME_RATE, 0x86},
826  {0x25, 0x18},
827  {0x26, 0x0f},
828  {0x7b, 0x90},
829 };
830 
831 static const struct cmd tp6810_bridge_start[] = {
832  {0x59, 0x88},
833  {0x5a, 0x0f},
834  {0x5b, 0x4e},
835  {TP6800_R5C_EDGE_THRLD, 0x63},
836  {TP6800_R5D_DEMOSAIC_CFG, 0x00},
837  {0x03, 0x7f},
838  {0x04, 0x80},
839  {0x06, 0x00},
840  {0x00, 0x00},
841 };
842 
843 static const struct cmd tp6810_late_start[] = {
844  {0x7d, 0x01},
845  {0xb0, 0x04},
846  {0xb1, 0x04},
847  {0xb2, 0x04},
848  {0xb3, 0x04},
849  {0xb4, 0x04},
850  {0xb5, 0x04},
851  {0xb6, 0x08},
852  {0xb7, 0x08},
853  {0xb8, 0x04},
854  {0xb9, 0x04},
855  {0xba, 0x04},
856  {0xbb, 0x04},
857  {0xbc, 0x04},
858  {0xbd, 0x08},
859  {0xbe, 0x08},
860  {0xbf, 0x08},
861  {0xc0, 0x04},
862  {0xc1, 0x04},
863  {0xc2, 0x08},
864  {0xc3, 0x08},
865  {0xc4, 0x08},
866  {0xc5, 0x08},
867  {0xc6, 0x08},
868  {0xc7, 0x13},
869  {0xc8, 0x04},
870  {0xc9, 0x08},
871  {0xca, 0x08},
872  {0xcb, 0x08},
873  {0xcc, 0x08},
874  {0xcd, 0x08},
875  {0xce, 0x13},
876  {0xcf, 0x13},
877  {0xd0, 0x08},
878  {0xd1, 0x08},
879  {0xd2, 0x08},
880  {0xd3, 0x08},
881  {0xd4, 0x08},
882  {0xd5, 0x13},
883  {0xd6, 0x13},
884  {0xd7, 0x13},
885  {0xd8, 0x08},
886  {0xd9, 0x08},
887  {0xda, 0x08},
888  {0xdb, 0x08},
889  {0xdc, 0x13},
890  {0xdd, 0x13},
891  {0xde, 0x13},
892  {0xdf, 0x13},
893  {0xe0, 0x08},
894  {0xe1, 0x08},
895  {0xe2, 0x08},
896  {0xe3, 0x13},
897  {0xe4, 0x13},
898  {0xe5, 0x13},
899  {0xe6, 0x13},
900  {0xe7, 0x13},
901  {0xe8, 0x08},
902  {0xe9, 0x08},
903  {0xea, 0x13},
904  {0xeb, 0x13},
905  {0xec, 0x13},
906  {0xed, 0x13},
907  {0xee, 0x13},
908  {0xef, 0x13},
909  {0x7d, 0x02},
910 
911  /* later after isoc start */
912  {0x7d, 0x08},
913  {0x7d, 0x00},
914 };
915 
916 static const struct cmd cx0342_timing_seq[] = {
922  {CX0342_CHANNEL_1_0_L_itx, 0x02},
923  {CX0342_CHANNEL_1_0_H_itx, 0x00},
924  {CX0342_CHANNEL_1_1_L_itx, 0x20},
925  {CX0342_CHANNEL_1_1_H_itx, 0x00},
926  {CX0342_CHANNEL_1_2_L_itx, 0xe4},
927  {CX0342_CHANNEL_1_2_H_itx, 0x00},
928  {CX0342_CHANNEL_1_3_L_itx, 0xee},
929  {CX0342_CHANNEL_1_3_H_itx, 0x00},
930  {CX0342_CHANNEL_2_0_L_iwl, 0x30},
931  {CX0342_CHANNEL_2_0_H_iwl, 0x00},
951  {CX0342_TIMING_EN, 0x01},
952 };
953 
954 /* define the JPEG header */
955 static void jpeg_define(u8 *jpeg_hdr,
956  int height,
957  int width)
958 {
959  memcpy(jpeg_hdr, jpeg_head, sizeof jpeg_head);
960  jpeg_hdr[JPEG_HEIGHT_OFFSET + 0] = height >> 8;
961  jpeg_hdr[JPEG_HEIGHT_OFFSET + 1] = height;
962  jpeg_hdr[JPEG_HEIGHT_OFFSET + 2] = width >> 8;
963  jpeg_hdr[JPEG_HEIGHT_OFFSET + 3] = width;
964 }
965 
966 /* set the JPEG quality for sensor soi763a */
967 static void jpeg_set_qual(u8 *jpeg_hdr,
968  int quality)
969 {
970  int i, sc;
971 
972  if (quality < 50)
973  sc = 5000 / quality;
974  else
975  sc = 200 - quality * 2;
976  for (i = 0; i < 64; i++) {
977  jpeg_hdr[JPEG_QT0_OFFSET + i] =
978  (jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100;
979  jpeg_hdr[JPEG_QT1_OFFSET + i] =
980  (jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100;
981  }
982 }
983 
984 static void reg_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
985 {
986  struct usb_device *dev = gspca_dev->dev;
987  int ret;
988 
989  if (gspca_dev->usb_err < 0)
990  return;
991  ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
992  0x0e,
994  value, index, NULL, 0, 500);
995  if (ret < 0) {
996  pr_err("reg_w err %d\n", ret);
997  gspca_dev->usb_err = ret;
998  }
999 }
1000 
1001 /* the returned value is in gspca_dev->usb_buf */
1002 static void reg_r(struct gspca_dev *gspca_dev, u8 index)
1003 {
1004  struct usb_device *dev = gspca_dev->dev;
1005  int ret;
1006 
1007  if (gspca_dev->usb_err < 0)
1008  return;
1009  ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1010  0x0d,
1012  0, index, gspca_dev->usb_buf, 1, 500);
1013  if (ret < 0) {
1014  pr_err("reg_r err %d\n", ret);
1015  gspca_dev->usb_err = ret;
1016  }
1017 }
1018 
1019 static void reg_w_buf(struct gspca_dev *gspca_dev,
1020  const struct cmd *p, int l)
1021 {
1022  do {
1023  reg_w(gspca_dev, p->reg, p->val);
1024  p++;
1025  } while (--l > 0);
1026 }
1027 
1028 static int i2c_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
1029 {
1030  struct sd *sd = (struct sd *) gspca_dev;
1031 
1032  reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1033  reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1034  reg_w(gspca_dev, TP6800_R13_SIF_TX_DATA, value);
1035  reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x01);
1036  if (sd->bridge == BRIDGE_TP6800)
1037  return 0;
1038  msleep(5);
1039  reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1040  if (gspca_dev->usb_buf[0] == 0)
1041  return 0;
1042  reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1043  return -1; /* error */
1044 }
1045 
1046 static void i2c_w_buf(struct gspca_dev *gspca_dev,
1047  const struct cmd *p, int l)
1048 {
1049  do {
1050  i2c_w(gspca_dev, p->reg, p->val);
1051  p++;
1052  } while (--l > 0);
1053 }
1054 
1055 static int i2c_r(struct gspca_dev *gspca_dev, u8 index, int len)
1056 {
1057  struct sd *sd = (struct sd *) gspca_dev;
1058  int v;
1059 
1060  reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1061  reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x02);
1062  msleep(5);
1063  reg_r(gspca_dev, TP6800_R14_SIF_RX_DATA);
1064  v = gspca_dev->usb_buf[0];
1065  if (sd->bridge == BRIDGE_TP6800)
1066  return v;
1067  if (len > 1) {
1068  reg_r(gspca_dev, TP6800_R1B_SIF_RX_DATA2);
1069  v |= (gspca_dev->usb_buf[0] << 8);
1070  }
1071  reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1072  if (gspca_dev->usb_buf[0] == 0)
1073  return v;
1074  reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1075  return -1;
1076 }
1077 
1078 static void bulk_w(struct gspca_dev *gspca_dev,
1079  u8 tag,
1080  const u8 *data,
1081  int length)
1082 {
1083  struct usb_device *dev = gspca_dev->dev;
1084  int count, actual_count, ret;
1085 
1086  if (gspca_dev->usb_err < 0)
1087  return;
1088  for (;;) {
1089  count = length > BULK_OUT_SIZE - 1
1090  ? BULK_OUT_SIZE - 1 : length;
1091  gspca_dev->usb_buf[0] = tag;
1092  memcpy(&gspca_dev->usb_buf[1], data, count);
1093  ret = usb_bulk_msg(dev,
1094  usb_sndbulkpipe(dev, 3),
1095  gspca_dev->usb_buf, count + 1,
1096  &actual_count, 500);
1097  if (ret < 0) {
1098  pr_err("bulk write error %d tag=%02x\n",
1099  ret, tag);
1100  gspca_dev->usb_err = ret;
1101  return;
1102  }
1103  length -= count;
1104  if (length <= 0)
1105  break;
1106  data += count;
1107  }
1108 }
1109 
1110 static int probe_6810(struct gspca_dev *gspca_dev)
1111 {
1112  u8 gpio;
1113  int ret;
1114 
1115  reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
1116  gpio = gspca_dev->usb_buf[0];
1117  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1118  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1119  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1120  reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04); /* i2c 16 bits */
1121  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21); /* ov??? */
1122  reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x00);
1123  if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1124  return SENSOR_SOI763A;
1125 
1126  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1127  reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00); /* i2c 8 bits */
1128  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x7f); /* (unknown i2c) */
1129  if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1130  return -2;
1131 
1132  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1133  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1134  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1135  reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00); /* i2c 8 bits */
1136  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x11); /* tas??? / hv??? */
1137  ret = i2c_r(gspca_dev, 0x00, 1);
1138  if (ret > 0)
1139  return -3;
1140 
1141  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1142  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1143  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1144  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x6e); /* po??? */
1145  ret = i2c_r(gspca_dev, 0x00, 1);
1146  if (ret > 0)
1147  return -4;
1148 
1149  ret = i2c_r(gspca_dev, 0x01, 1);
1150  if (ret > 0)
1151  return -5;
1152 
1153  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1154  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1155  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1156  reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04); /* i2c 16 bits */
1157  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5d); /* mi/mt??? */
1158  ret = i2c_r(gspca_dev, 0x00, 2);
1159  if (ret > 0)
1160  return -6;
1161 
1162  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1163  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1164  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1165  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5c); /* mi/mt??? */
1166  ret = i2c_r(gspca_dev, 0x36, 2);
1167  if (ret > 0)
1168  return -7;
1169 
1170  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1171  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1172  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1173  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x61); /* (unknown i2c) */
1174  reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x10);
1175  if (i2c_w(gspca_dev, 0xff, 0x00) >= 0)
1176  return -8;
1177 
1178  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1179  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1180  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1181  reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00); /* i2c 8 bits */
1182  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20); /* cx0342 */
1183  ret = i2c_r(gspca_dev, 0x00, 1);
1184  if (ret > 0)
1185  return SENSOR_CX0342;
1186  return -9;
1187 }
1188 
1189 static void cx0342_6810_init(struct gspca_dev *gspca_dev)
1190 {
1191  static const struct cmd reg_init_1[] = {
1192  {TP6800_R2F_TIMING_CFG, 0x2f},
1193  {0x25, 0x02},
1194  {TP6800_R21_ENDP_1_CTL, 0x00},
1195  {TP6800_R3F_FRAME_RATE, 0x80},
1196  {TP6800_R2F_TIMING_CFG, 0x2f},
1197  {TP6800_R18_GPIO_DATA, 0xe1},
1198  {TP6800_R18_GPIO_DATA, 0xc1},
1199  {TP6800_R18_GPIO_DATA, 0xe1},
1200  {TP6800_R11_SIF_CONTROL, 0x00},
1201  };
1202  static const struct cmd reg_init_2[] = {
1203  {TP6800_R78_FORMAT, 0x48},
1204  {TP6800_R11_SIF_CONTROL, 0x00},
1205  };
1206  static const struct cmd sensor_init[] = {
1207  {CX0342_OUTPUT_CTRL, 0x07},
1208  {CX0342_BYPASS_MODE, 0x58},
1209  {CX0342_GPXLTHD_L, 0x28},
1210  {CX0342_RBPXLTHD_L, 0x28},
1211  {CX0342_PLANETHD_L, 0x50},
1212  {CX0342_PLANETHD_H, 0x03},
1213  {CX0342_RB_GAP_L, 0xff},
1214  {CX0342_RB_GAP_H, 0x07},
1215  {CX0342_G_GAP_L, 0xff},
1216  {CX0342_G_GAP_H, 0x07},
1217  {CX0342_RST_OVERFLOW_L, 0x5c},
1218  {CX0342_RST_OVERFLOW_H, 0x01},
1219  {CX0342_DATA_OVERFLOW_L, 0xfc},
1220  {CX0342_DATA_OVERFLOW_H, 0x03},
1221  {CX0342_DATA_UNDERFLOW_L, 0x00},
1222  {CX0342_DATA_UNDERFLOW_H, 0x00},
1223  {CX0342_SYS_CTRL_0, 0x40},
1224  {CX0342_GLOBAL_GAIN, 0x01},
1225  {CX0342_CLOCK_GEN, 0x00},
1226  {CX0342_SYS_CTRL_0, 0x02},
1227  {CX0342_IDLE_CTRL, 0x05},
1228  {CX0342_ADCGN, 0x00},
1229  {CX0342_ADC_CTL, 0x00},
1230  {CX0342_LVRST_BLBIAS, 0x01},
1231  {CX0342_VTHSEL, 0x0b},
1232  {CX0342_RAMP_RIV, 0x0b},
1233  {CX0342_LDOSEL, 0x07},
1234  {CX0342_SPV_VALUE_L, 0x40},
1235  {CX0342_SPV_VALUE_H, 0x02},
1236 
1237  {CX0342_AUTO_ADC_CALIB, 0x81},
1238  {CX0342_TIMING_EN, 0x01},
1239  };
1240 
1241  reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1242  reg_w_buf(gspca_dev, tp6810_cx_init_common,
1243  ARRAY_SIZE(tp6810_cx_init_common));
1244  reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1245 
1246  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20); /* cx0342 I2C addr */
1247  i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1248  i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
1249 }
1250 
1251 static void soi763a_6810_init(struct gspca_dev *gspca_dev)
1252 {
1253  static const struct cmd reg_init_1[] = {
1254  {TP6800_R2F_TIMING_CFG, 0x2f},
1255  {TP6800_R18_GPIO_DATA, 0xe1},
1256  {0x25, 0x02},
1257  {TP6800_R21_ENDP_1_CTL, 0x00},
1258  {TP6800_R3F_FRAME_RATE, 0x80},
1259  {TP6800_R2F_TIMING_CFG, 0x2f},
1260  {TP6800_R18_GPIO_DATA, 0xc1},
1261  };
1262  static const struct cmd reg_init_2[] = {
1263  {TP6800_R78_FORMAT, 0x54},
1264  };
1265  static const struct cmd sensor_init[] = {
1266  {0x00, 0x00},
1267  {0x01, 0x80},
1268  {0x02, 0x80},
1269  {0x03, 0x90},
1270  {0x04, 0x20},
1271  {0x05, 0x20},
1272  {0x06, 0x80},
1273  {0x07, 0x00},
1274  {0x08, 0xff},
1275  {0x09, 0xff},
1276  {0x0a, 0x76}, /* 7630 = soi673a */
1277  {0x0b, 0x30},
1278  {0x0c, 0x20},
1279  {0x0d, 0x20},
1280  {0x0e, 0xff},
1281  {0x0f, 0xff},
1282  {0x10, 0x41},
1283  {0x15, 0x14},
1284  {0x11, 0x40},
1285  {0x12, 0x48},
1286  {0x13, 0x80},
1287  {0x14, 0x80},
1288  {0x16, 0x03},
1289  {0x28, 0xb0},
1290  {0x71, 0x20},
1291  {0x75, 0x8e},
1292  {0x17, 0x1b},
1293  {0x18, 0xbd},
1294  {0x19, 0x05},
1295  {0x1a, 0xf6},
1296  {0x1b, 0x04},
1297  {0x1c, 0x7f}, /* omnivision */
1298  {0x1d, 0xa2},
1299  {0x1e, 0x00},
1300  {0x1f, 0x00},
1301  {0x20, 0x45},
1302  {0x21, 0x80},
1303  {0x22, 0x80},
1304  {0x23, 0xee},
1305  {0x24, 0x50},
1306  {0x25, 0x7a},
1307  {0x26, 0xa0},
1308  {0x27, 0x9a},
1309  {0x29, 0x30},
1310  {0x2a, 0x80},
1311  {0x2b, 0x00},
1312  {0x2c, 0xac},
1313  {0x2d, 0x05},
1314  {0x2e, 0x80},
1315  {0x2f, 0x3c},
1316  {0x30, 0x22},
1317  {0x31, 0x00},
1318  {0x32, 0x86},
1319  {0x33, 0x08},
1320  {0x34, 0xff},
1321  {0x35, 0xff},
1322  {0x36, 0xff},
1323  {0x37, 0xff},
1324  {0x38, 0xff},
1325  {0x39, 0xff},
1326  {0x3a, 0xfe},
1327  {0x3b, 0xfe},
1328  {0x3c, 0xfe},
1329  {0x3d, 0xfe},
1330  {0x3e, 0xfe},
1331  {0x3f, 0x71},
1332  {0x40, 0xff},
1333  {0x41, 0xff},
1334  {0x42, 0xff},
1335  {0x43, 0xff},
1336  {0x44, 0xff},
1337  {0x45, 0xff},
1338  {0x46, 0xff},
1339  {0x47, 0xff},
1340  {0x48, 0xff},
1341  {0x49, 0xff},
1342  {0x4a, 0xfe},
1343  {0x4b, 0xff},
1344  {0x4c, 0x00},
1345  {0x4d, 0x00},
1346  {0x4e, 0xff},
1347  {0x4f, 0xff},
1348  {0x50, 0xff},
1349  {0x51, 0xff},
1350  {0x52, 0xff},
1351  {0x53, 0xff},
1352  {0x54, 0xff},
1353  {0x55, 0xff},
1354  {0x56, 0xff},
1355  {0x57, 0xff},
1356  {0x58, 0xff},
1357  {0x59, 0xff},
1358  {0x5a, 0xff},
1359  {0x5b, 0xfe},
1360  {0x5c, 0xff},
1361  {0x5d, 0x8f},
1362  {0x5e, 0xff},
1363  {0x5f, 0x8f},
1364  {0x60, 0xa2},
1365  {0x61, 0x4a},
1366  {0x62, 0xf3},
1367  {0x63, 0x75},
1368  {0x64, 0xf0},
1369  {0x65, 0x00},
1370  {0x66, 0x55},
1371  {0x67, 0x92},
1372  {0x68, 0xa0},
1373  {0x69, 0x4a},
1374  {0x6a, 0x22},
1375  {0x6b, 0x00},
1376  {0x6c, 0x33},
1377  {0x6d, 0x44},
1378  {0x6e, 0x22},
1379  {0x6f, 0x84},
1380  {0x70, 0x0b},
1381  {0x72, 0x10},
1382  {0x73, 0x50},
1383  {0x74, 0x21},
1384  {0x76, 0x00},
1385  {0x77, 0xa5},
1386  {0x78, 0x80},
1387  {0x79, 0x80},
1388  {0x7a, 0x80},
1389  {0x7b, 0xe2},
1390  {0x7c, 0x00},
1391  {0x7d, 0xf7},
1392  {0x7e, 0x00},
1393  {0x7f, 0x00},
1394  };
1395 
1396  reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1397  reg_w_buf(gspca_dev, tp6810_ov_init_common,
1398  ARRAY_SIZE(tp6810_ov_init_common));
1399  reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1400 
1401  i2c_w(gspca_dev, 0x12, 0x80); /* sensor reset */
1402  msleep(10);
1403  i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1404 }
1405 
1406 /* set the gain and exposure */
1407 static void setexposure(struct gspca_dev *gspca_dev, s32 expo, s32 gain,
1408  s32 blue, s32 red)
1409 {
1410  struct sd *sd = (struct sd *) gspca_dev;
1411 
1412  if (sd->sensor == SENSOR_CX0342) {
1413  expo = (expo << 2) - 1;
1414  i2c_w(gspca_dev, CX0342_EXPO_LINE_L, expo);
1415  i2c_w(gspca_dev, CX0342_EXPO_LINE_H, expo >> 8);
1416  if (sd->bridge == BRIDGE_TP6800)
1417  i2c_w(gspca_dev, CX0342_RAW_GBGAIN_H,
1418  gain >> 8);
1419  i2c_w(gspca_dev, CX0342_RAW_GBGAIN_L, gain);
1420  if (sd->bridge == BRIDGE_TP6800)
1421  i2c_w(gspca_dev, CX0342_RAW_GRGAIN_H,
1422  gain >> 8);
1423  i2c_w(gspca_dev, CX0342_RAW_GRGAIN_L, gain);
1424  if (sd->sensor == SENSOR_CX0342) {
1425  if (sd->bridge == BRIDGE_TP6800)
1426  i2c_w(gspca_dev, CX0342_RAW_BGAIN_H,
1427  blue >> 8);
1428  i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, blue);
1429  if (sd->bridge == BRIDGE_TP6800)
1430  i2c_w(gspca_dev, CX0342_RAW_RGAIN_H,
1431  red >> 8);
1432  i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, red);
1433  }
1434  i2c_w(gspca_dev, CX0342_SYS_CTRL_0,
1435  sd->bridge == BRIDGE_TP6800 ? 0x80 : 0x81);
1436  return;
1437  }
1438 
1439  /* soi763a */
1440  i2c_w(gspca_dev, 0x10, /* AEC_H (exposure time) */
1441  expo);
1442 /* i2c_w(gspca_dev, 0x76, 0x02); * AEC_L ([1:0] */
1443  i2c_w(gspca_dev, 0x00, /* gain */
1444  gain);
1445 }
1446 
1447 /* set the JPEG quantization tables */
1448 static void set_dqt(struct gspca_dev *gspca_dev, u8 q)
1449 {
1450  struct sd *sd = (struct sd *) gspca_dev;
1451 
1452  /* update the jpeg quantization tables */
1453  PDEBUG(D_STREAM, "q %d -> %d", sd->quality, q);
1454  sd->quality = q;
1455  if (q > 16)
1456  q = 16;
1457  if (sd->sensor == SENSOR_SOI763A)
1458  jpeg_set_qual(sd->jpeg_hdr, jpeg_q[q]);
1459  else
1460  memcpy(&sd->jpeg_hdr[JPEG_QT0_OFFSET - 1],
1461  DQT[q], sizeof DQT[0]);
1462 }
1463 
1464 /* set the JPEG compression quality factor */
1465 static void setquality(struct gspca_dev *gspca_dev, s32 q)
1466 {
1467  struct sd *sd = (struct sd *) gspca_dev;
1468 
1469  if (q != 16)
1470  q = 15 - q;
1471 
1472  reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x00);
1473  reg_w(gspca_dev, TP6800_R79_QUALITY, 0x04);
1474  reg_w(gspca_dev, TP6800_R79_QUALITY, q);
1475 
1476  /* auto quality */
1477  if (q == 15 && sd->bridge == BRIDGE_TP6810) {
1478  msleep(4);
1479  reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x19);
1480  }
1481 }
1482 
1483 static const u8 color_null[18] = {
1484  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1485  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1486  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1487 };
1488 static const u8 color_gain[NSENSORS][18] = {
1489 [SENSOR_CX0342] =
1490  {0x4c, 0x00, 0xa9, 0x00, 0x31, 0x00, /* Y R/G/B (LE values) */
1491  0xb6, 0x03, 0x6c, 0x03, 0xe0, 0x00, /* U R/G/B */
1492  0xdf, 0x00, 0x46, 0x03, 0xdc, 0x03}, /* V R/G/B */
1493 [SENSOR_SOI763A] =
1494  {0x4c, 0x00, 0x95, 0x00, 0x1d, 0x00, /* Y R/G/B (LE values) */
1495  0xb6, 0x03, 0x6c, 0x03, 0xd7, 0x00, /* U R/G/B */
1496  0xd5, 0x00, 0x46, 0x03, 0xdc, 0x03}, /* V R/G/B */
1497 };
1498 
1499 static void setgamma(struct gspca_dev *gspca_dev, s32 gamma)
1500 {
1501  struct sd *sd = (struct sd *) gspca_dev;
1502 #define NGAMMA 6
1503  static const u8 gamma_tb[NGAMMA][3][1024] = {
1504  { /* gamma 0 - from tp6800 + soi763a */
1505  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1506  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1507  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1508  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1509  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1510  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1512  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1513  0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1514  0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1515  0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1516  0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1517  0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1518  0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1519  0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1520  0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1521  0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1522  0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1523  0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1524  0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1525  0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1526  0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1527  0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1528  0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1529  0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1530  0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1531  0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1532  0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1533  0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1534  0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1535  0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1536  0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1537  0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1538  0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1539  0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1540  0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1541  0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1542  0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1543  0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1544  0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1545  0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1546  0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1547  0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1548  0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1549  0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1550  0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1551  0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1552  0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1553  0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1554  0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1555  0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1556  0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1557  0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1558  0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1559  0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1560  0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1561  0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1562  0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1563  0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1564  0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1565  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1566  0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1567  0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1568  0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1569  0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1570  0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1571  0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1572  0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1573  0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1574  0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1575  0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1576  0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1577  0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1578  0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1579  0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1580  0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1581  0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1582  0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1583  0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1584  0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1585  0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1586  0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1587  0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1588  0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1589  0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1590  0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1591  0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1592  0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1593  0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1594  0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1595  0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1596  0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1597  0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1598  0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1599  0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1600  0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1601  0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1602  0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1603  0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1604  0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1605  0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1606  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1607  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1608  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1609  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1610  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1611  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1612  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1613  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1614  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1615  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1616  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1617  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1618  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1619  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1620  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1621  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1622  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1623  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1624  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1625  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1626  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1627  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1628  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1629  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1630  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1631  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1632  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1633  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1634  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1635  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1636  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1637  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1638  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1639  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1640  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1641  0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1642  0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1643  0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1644  0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1645  0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1646  0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1647  0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1648  0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1649  0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1650  0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1651  0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1652  0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1653  0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1654  0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1655  0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1656  0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1657  0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1658  0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1659  0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1660  0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1661  0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1662  0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1663  0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1664  0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1665  0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1666  0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1667  0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1668  0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1669  0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1670  0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1671  0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1672  0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1673  0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1674  0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1675  0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1676  0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1677  0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1678  0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1679  0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1680  0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1681  0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1682  0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1683  0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1684  0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1685  0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1686  0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1687  0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1688  0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1689  0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1690  0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1691  0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1692  0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1693  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1694  0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1695  0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1696  0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1697  0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1698  0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1699  0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1700  0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1701  0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1702  0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1703  0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1704  0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1705  0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1706  0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1707  0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1708  0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1709  0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1710  0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1711  0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1712  0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1713  0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1714  0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1715  0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1716  0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1717  0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1718  0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1719  0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1720  0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1721  0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1722  0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1723  0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1724  0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1725  0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1726  0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1727  0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1728  0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1729  0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1730  0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1731  0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1732  0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1733  0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1734  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1735  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1736  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1737  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1738  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1739  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1740  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1741  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1742  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1743  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1744  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1745  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1746  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1747  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1748  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1749  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1750  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1751  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1752  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1753  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1754  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1755  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1756  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1757  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1758  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1759  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1760  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1761  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1762  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1763  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1764  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1765  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1766  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1767  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1768  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1769  0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1770  0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1771  0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1772  0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1773  0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1774  0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1775  0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1776  0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1777  0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1778  0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1779  0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1780  0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1781  0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1782  0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1783  0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1784  0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1785  0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1786  0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1787  0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1788  0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1789  0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1790  0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1791  0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1792  0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1793  0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1794  0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1795  0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76,
1796  0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1797  0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1798  0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1799  0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1800  0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1801  0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1802  0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1803  0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1804  0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1805  0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1806  0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1807  0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1808  0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1809  0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1810  0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1811  0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1812  0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1813  0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1814  0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1815  0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1816  0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1817  0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1818  0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1819  0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1820  0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1821  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1822  0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1823  0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1824  0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1825  0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1826  0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1827  0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1828  0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1829  0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1830  0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1831  0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1832  0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1833  0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1834  0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1835  0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1836  0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1837  0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1838  0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1839  0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1840  0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1841  0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1842  0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1843  0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1844  0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1845  0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1846  0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1847  0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1848  0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1849  0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1850  0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1851  0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1852  0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1853  0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1854  0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1855  0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1856  0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1857  0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1858  0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1859  0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1860  0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1861  0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1862  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1863  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1864  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1865  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1866  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1867  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1868  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1869  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1870  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1871  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1872  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1873  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1874  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1875  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1876  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1877  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1878  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1879  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1880  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1881  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1882  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1883  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1884  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1885  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1886  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1887  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1888  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
1889  },
1890  { /* gamma 1 - from tp6810 + soi763a */
1891  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1892  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1893  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1894  0x01, 0x02, 0x03, 0x05, 0x07, 0x08, 0x09, 0x0a,
1895  0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x15,
1896  0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
1897  0x1f, 0x20, 0x22, 0x22, 0x23, 0x25, 0x26, 0x27,
1898  0x27, 0x28, 0x29, 0x2b, 0x2b, 0x2c, 0x2d, 0x2f,
1899  0x2f, 0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x35,
1900  0x37, 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c,
1901  0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
1902  0x43, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48, 0x49,
1903  0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4d,
1904  0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
1905  0x54, 0x54, 0x55, 0x56, 0x56, 0x58, 0x58, 0x59,
1906  0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5e,
1907  0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61, 0x61,
1908  0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x65, 0x66,
1909  0x66, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69, 0x69,
1910  0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1911  0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
1912  0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
1913  0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
1914  0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c,
1915  0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x80,
1916  0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84, 0x84,
1917  0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
1918  0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
1919  0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
1920  0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91,
1921  0x91, 0x91, 0x92, 0x92, 0x92, 0x92, 0x93, 0x93,
1922  0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x97,
1923  0x97, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
1924  0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
1925  0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9e,
1926  0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
1927  0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
1928  0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
1929  0xa5, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1930  0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xab,
1931  0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xae,
1932  0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
1933  0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1934  0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
1935  0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
1936  0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
1937  0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
1938  0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
1939  0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1940  0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
1941  0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4,
1942  0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
1943  0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
1944  0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
1945  0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
1946  0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1947  0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1948  0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
1949  0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
1950  0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
1951  0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
1952  0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
1953  0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
1954  0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
1955  0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
1956  0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
1957  0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
1958  0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
1959  0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
1960  0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8,
1961  0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
1962  0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
1963  0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed,
1964  0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
1965  0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
1966  0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
1967  0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
1968  0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
1969  0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1970  0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
1971  0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1972  0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1973  0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
1974  0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe,
1975  0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
1976  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1977  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1978  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1979  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1980  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1981  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1982  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1983  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1984  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1985  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1986  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1987  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1988  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1989  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1990  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1991  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1992  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1993  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1994  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1995  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1996  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1997  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1998  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1999  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2000  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2001  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2002  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2003  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2004  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2005  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2006  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2007  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2008  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2009  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2010  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2011  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2012  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2013  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2014  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2015  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2016  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2017  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2018  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2019  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2020  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2021  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2022  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03,
2023  0x05, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0c, 0x0d,
2024  0x0e, 0x10, 0x10, 0x11, 0x12, 0x14, 0x15, 0x15,
2025  0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
2026  0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x25,
2027  0x26, 0x27, 0x27, 0x28, 0x29, 0x29, 0x2b, 0x2c,
2028  0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x31,
2029  0x33, 0x34, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38,
2030  0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d,
2031  0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x43,
2032  0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48,
2033  0x48, 0x49, 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c,
2034  0x4c, 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50,
2035  0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x55,
2036  0x55, 0x56, 0x56, 0x56, 0x58, 0x58, 0x59, 0x59,
2037  0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2038  0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60,
2039  0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, 0x65,
2040  0x65, 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67,
2041  0x68, 0x68, 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a,
2042  0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e,
2043  0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2044  0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74,
2045  0x75, 0x75, 0x75, 0x77, 0x77, 0x77, 0x78, 0x78,
2046  0x78, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a,
2047  0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d,
2048  0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2049  0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
2050  0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
2051  0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89, 0x89,
2052  0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b,
2053  0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2054  0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2055  0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2056  0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2057  0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2058  0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2059  0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
2060  0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2061  0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2062  0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2063  0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2064  0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2065  0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2066  0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2067  0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
2068  0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2069  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
2070  0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
2071  0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
2072  0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
2073  0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
2074  0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
2075  0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
2076  0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2077  0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2078  0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2079  0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
2080  0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2081  0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2082  0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9,
2083  0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
2084  0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2085  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
2086  0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcf,
2087  0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2088  0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
2089  0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4,
2090  0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2091  0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2092  0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2093  0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
2094  0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2095  0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
2096  0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2097  0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2,
2098  0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3,
2099  0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2100  0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2101  0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2102  0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
2103  0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2104  0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2105  0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
2106  0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2107  0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
2108  0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2109  0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5,
2110  0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7,
2111  0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8,
2112  0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2113  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2114  0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc,
2115  0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2116  0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2117  0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
2118  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2119  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2120  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2121  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2122  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2123  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2124  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2125  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2126  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2127  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2128  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2129  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2130  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2131  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2132  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2133  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2134  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2135  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2136  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2137  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2138  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2139  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2140  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2141  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2142  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2143  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2144  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2145  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2146  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2147  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2148  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2149  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2150  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2151  0x00, 0x00, 0x01, 0x02, 0x03, 0x05, 0x05, 0x07,
2152  0x08, 0x09, 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0e,
2153  0x10, 0x11, 0x12, 0x12, 0x14, 0x15, 0x16, 0x16,
2154  0x17, 0x18, 0x18, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
2155  0x1e, 0x1f, 0x1f, 0x20, 0x22, 0x22, 0x23, 0x23,
2156  0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x29, 0x29,
2157  0x2b, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f, 0x30,
2158  0x30, 0x31, 0x31, 0x33, 0x33, 0x34, 0x34, 0x35,
2159  0x35, 0x37, 0x37, 0x38, 0x38, 0x39, 0x39, 0x3a,
2160  0x3a, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3d, 0x3d,
2161  0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x42, 0x43,
2162  0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x47,
2163  0x48, 0x48, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4b,
2164  0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4f,
2165  0x4f, 0x50, 0x50, 0x50, 0x52, 0x52, 0x52, 0x53,
2166  0x53, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56,
2167  0x56, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a,
2168  0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2169  0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60,
2170  0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63,
2171  0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66,
2172  0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69,
2173  0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2174  0x6c, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e,
2175  0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2176  0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74,
2177  0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x77, 0x77,
2178  0x77, 0x78, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79,
2179  0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b,
2180  0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
2181  0x7d, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2182  0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82,
2183  0x82, 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2184  0x85, 0x86, 0x86, 0x86, 0x86, 0x88, 0x88, 0x88,
2185  0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2186  0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2187  0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
2188  0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2189  0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2190  0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94, 0x94,
2191  0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96, 0x96,
2192  0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
2193  0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2194  0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
2195  0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2196  0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0,
2197  0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2198  0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
2199  0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
2200  0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6,
2201  0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
2202  0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2203  0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac,
2204  0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae,
2205  0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2206  0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2207  0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2,
2208  0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
2209  0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6,
2210  0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2211  0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2212  0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba,
2213  0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2214  0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2215  0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2216  0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2217  0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2218  0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2219  0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2220  0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2221  0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2222  0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2223  0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2224  0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2225  0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2226  0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2227  0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2228  0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
2229  0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7,
2230  0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2231  0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2232  0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
2233  0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2234  0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
2235  0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0,
2236  0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
2237  0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3,
2238  0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4,
2239  0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
2240  0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
2241  0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2242  0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
2243  0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2244  0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2245  0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef, 0xef,
2246  0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1,
2247  0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2248  0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2249  0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2250  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
2251  0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2252  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2253  0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc,
2254  0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd,
2255  0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2256  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2257  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2258  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2259  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2260  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2261  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2262  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2263  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2264  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2265  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2266  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2267  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2268  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2269  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2270  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2271  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2272  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2273  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2274  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
2275  },
2276  { /* gamma 2 */
2277  {0x00, 0x01, 0x02, 0x05, 0x07, 0x08, 0x0a, 0x0c,
2278  0x0d, 0x0e, 0x10, 0x12, 0x14, 0x15, 0x16, 0x17,
2279  0x18, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x22,
2280  0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
2281  0x2d, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34,
2282  0x35, 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3b, 0x3b,
2283  0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
2284  0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x49, 0x49,
2285  0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4f, 0x4f,
2286  0x50, 0x50, 0x52, 0x53, 0x53, 0x54, 0x54, 0x55,
2287  0x55, 0x56, 0x56, 0x58, 0x58, 0x59, 0x5a, 0x5a,
2288  0x5b, 0x5b, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
2289  0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63,
2290  0x65, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
2291  0x68, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2292  0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x70,
2293  0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74,
2294  0x74, 0x75, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78,
2295  0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
2296  0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
2297  0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
2298  0x82, 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2299  0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x89, 0x89,
2300  0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8d,
2301  0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
2302  0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
2303  0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
2304  0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2305  0x97, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99,
2306  0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2307  0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
2308  0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2309  0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3,
2310  0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5,
2311  0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8,
2312  0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2313  0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad,
2314  0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2315  0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0,
2316  0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2317  0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4,
2318  0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
2319  0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
2320  0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba,
2321  0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2322  0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2323  0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0,
2324  0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2325  0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4,
2326  0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
2327  0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
2328  0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2329  0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2330  0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2331  0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce,
2332  0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
2333  0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2334  0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4,
2335  0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2336  0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2337  0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
2338  0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2339  0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2340  0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2341  0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
2342  0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
2343  0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2344  0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
2345  0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2346  0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
2347  0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2348  0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
2349  0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2350  0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2351  0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2352  0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2353  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1,
2354  0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
2355  0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
2356  0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
2357  0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2358  0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9,
2359  0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa,
2360  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2361  0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2362  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2363  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2364  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2365  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2366  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2367  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2368  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2369  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2370  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2371  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2372  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2373  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2374  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2375  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2376  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2377  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2378  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2379  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2380  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2381  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2382  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2383  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2384  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2385  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2386  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2387  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2388  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2389  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2390  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2391  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2392  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2393  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2394  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2395  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2396  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2397  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2398  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2399  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2400  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2401  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2402  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2403  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2404  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2405  {0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x05,
2406  0x07, 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x10, 0x11,
2407  0x12, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x1a,
2408  0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23,
2409  0x25, 0x26, 0x26, 0x27, 0x28, 0x29, 0x29, 0x2b,
2410  0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x33,
2411  0x33, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38, 0x39,
2412  0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3d, 0x3f,
2413  0x3f, 0x40, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44,
2414  0x45, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49, 0x4a,
2415  0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d,
2416  0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2417  0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x58,
2418  0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
2419  0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f,
2420  0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x63,
2421  0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x67,
2422  0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69,
2423  0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d,
2424  0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
2425  0x70, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x73,
2426  0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77, 0x77,
2427  0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79,
2428  0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c,
2429  0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f,
2430  0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81,
2431  0x82, 0x82, 0x82, 0x82, 0x84, 0x84, 0x84, 0x84,
2432  0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
2433  0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a,
2434  0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2435  0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f,
2436  0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90, 0x91,
2437  0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2438  0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2439  0x94, 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2440  0x97, 0x98, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99,
2441  0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b,
2442  0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9c,
2443  0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e,
2444  0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2445  0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2,
2446  0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2447  0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
2448  0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2449  0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2450  0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2451  0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae,
2452  0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf,
2453  0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2454  0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2455  0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2456  0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
2457  0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2458  0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2459  0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2460  0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2461  0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2462  0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
2463  0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2464  0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
2465  0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2466  0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2467  0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
2468  0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
2469  0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
2470  0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2471  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2472  0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2473  0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
2474  0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2475  0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2476  0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2477  0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2478  0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2479  0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2480  0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2481  0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
2482  0xdb, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2483  0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2484  0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
2485  0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
2486  0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2487  0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2488  0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
2489  0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
2490  0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2491  0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2492  0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2493  0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2494  0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
2495  0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef,
2496  0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2497  0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2498  0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2499  0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2500  0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
2501  0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2502  0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
2503  0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
2504  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb,
2505  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2506  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2507  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2508  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2509  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2510  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2511  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2512  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2513  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2514  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2515  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2516  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2517  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2518  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2519  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2520  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2521  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2522  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2523  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2524  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2525  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2526  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2527  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2528  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2529  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2530  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2531  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2532  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2533  {0x00, 0x00, 0x00, 0x01, 0x02, 0x05, 0x07, 0x08,
2534  0x09, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x12, 0x14,
2535  0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1e,
2536  0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x26, 0x27,
2537  0x28, 0x28, 0x29, 0x2b, 0x2c, 0x2d, 0x2d, 0x2f,
2538  0x30, 0x31, 0x31, 0x33, 0x34, 0x35, 0x35, 0x37,
2539  0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3c,
2540  0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x43,
2541  0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49,
2542  0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d,
2543  0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2544  0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58,
2545  0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c,
2546  0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2547  0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65,
2548  0x65, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68,
2549  0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2550  0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f,
2551  0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x73, 0x73,
2552  0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
2553  0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a,
2554  0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2555  0x7c, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80,
2556  0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82,
2557  0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85,
2558  0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
2559  0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b,
2560  0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2561  0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90,
2562  0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2563  0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2564  0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2565  0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2566  0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2567  0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2568  0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2569  0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2570  0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2571  0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2572  0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2573  0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2574  0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2575  0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2576  0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
2577  0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
2578  0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
2579  0xb3, 0xb3, 0xb3, 0xb4, 0xb3, 0xb4, 0xb4, 0xb4,
2580  0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2581  0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2582  0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
2583  0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2584  0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2585  0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2586  0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2587  0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
2588  0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2589  0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2590  0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2591  0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2592  0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2593  0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2594  0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2595  0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2596  0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2597  0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2598  0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2599  0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2600  0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2601  0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
2602  0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2603  0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2604  0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2605  0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2606  0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
2607  0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2608  0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
2609  0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2610  0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6,
2611  0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2612  0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2613  0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
2614  0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
2615  0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2616  0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2617  0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2618  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1,
2619  0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2620  0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
2621  0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2622  0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7,
2623  0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
2624  0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2625  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2626  0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2627  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2628  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2629  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2630  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2631  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2632  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2633  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2634  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2635  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2636  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2637  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2638  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2639  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2640  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2641  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2642  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2643  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2644  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2645  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2646  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2647  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2648  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2649  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2650  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2651  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2652  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2653  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2654  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2655  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2656  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2657  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2658  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2659  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2660  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
2661  },
2662  { /* gamma 3 - from tp6810 + cx0342 */
2663  {0x08, 0x09, 0x0c, 0x0d, 0x10, 0x11, 0x14, 0x15,
2664  0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x1f, 0x20, 0x23,
2665  0x25, 0x26, 0x27, 0x28, 0x2b, 0x2c, 0x2d, 0x2f,
2666  0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38, 0x39,
2667  0x3a, 0x3b, 0x3c, 0x3d, 0x3f, 0x40, 0x42, 0x43,
2668  0x44, 0x45, 0x47, 0x48, 0x48, 0x49, 0x4a, 0x4b,
2669  0x4c, 0x4d, 0x4d, 0x4f, 0x50, 0x52, 0x53, 0x53,
2670  0x54, 0x55, 0x56, 0x56, 0x58, 0x59, 0x5a, 0x5a,
2671  0x5b, 0x5c, 0x5c, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
2672  0x61, 0x62, 0x63, 0x63, 0x65, 0x66, 0x66, 0x67,
2673  0x68, 0x68, 0x69, 0x69, 0x6a, 0x6c, 0x6c, 0x6d,
2674  0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x73,
2675  0x73, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77, 0x78,
2676  0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c,
2677  0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81,
2678  0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2679  0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2680  0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f,
2681  0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x93,
2682  0x93, 0x93, 0x94, 0x94, 0x96, 0x96, 0x97, 0x97,
2683  0x97, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2684  0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
2685  0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
2686  0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2687  0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
2688  0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
2689  0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2690  0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2691  0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3,
2692  0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2693  0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2694  0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2695  0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2696  0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
2697  0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5,
2698  0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
2699  0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2700  0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
2701  0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce,
2702  0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2703  0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3,
2704  0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2705  0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2706  0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda,
2707  0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2708  0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2709  0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2710  0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2711  0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4,
2712  0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2713  0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2714  0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
2715  0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2716  0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
2717  0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
2718  0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2719  0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2720  0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2721  0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2722  0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2723  0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2724  0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
2725  0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2726  0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
2727  0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff,
2728  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2729  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2730  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2731  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2732  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2733  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2734  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2735  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2736  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2737  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2738  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2739  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2740  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2741  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2742  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2743  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2744  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2745  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2746  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2747  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2748  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2749  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2750  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2751  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2752  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2753  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2754  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2755  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2756  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2757  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2758  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2759  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2760  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2761  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2762  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2763  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2764  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2765  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2766  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2767  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2768  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2769  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2770  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2771  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2772  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2773  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2774  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2775  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2776  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2777  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2778  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2779  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2780  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2781  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2782  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2783  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2784  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2785  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2786  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2787  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2788  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2789  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2790  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2791  {0x03, 0x05, 0x07, 0x09, 0x0a, 0x0c, 0x0d, 0x10,
2792  0x11, 0x12, 0x14, 0x15, 0x17, 0x18, 0x1a, 0x1b,
2793  0x1c, 0x1e, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x26,
2794  0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2f,
2795  0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x37, 0x38,
2796  0x38, 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f,
2797  0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
2798  0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b,
2799  0x4c, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52,
2800  0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x56, 0x58,
2801  0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c,
2802  0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2803  0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x66,
2804  0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69,
2805  0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
2806  0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
2807  0x71, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
2808  0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
2809  0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2810  0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80,
2811  0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84,
2812  0x84, 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86,
2813  0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2814  0x8a, 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e,
2815  0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90,
2816  0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2817  0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96,
2818  0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98,
2819  0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a,
2820  0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
2821  0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e,
2822  0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2823  0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3,
2824  0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2825  0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
2826  0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
2827  0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad,
2828  0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2829  0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2830  0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2831  0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4,
2832  0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2833  0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2834  0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2835  0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2836  0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2837  0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
2838  0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2839  0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2840  0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2841  0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2842  0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2843  0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2844  0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2845  0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2846  0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0,
2847  0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2848  0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
2849  0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2850  0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
2851  0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2852  0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2853  0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2854  0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2855  0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2856  0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2857  0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
2858  0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
2859  0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
2860  0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2861  0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2862  0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2863  0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2864  0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec,
2865  0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2866  0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
2867  0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
2868  0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2869  0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2870  0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
2871  0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2872  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
2873  0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
2874  0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2875  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb,
2876  0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc,
2877  0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2878  0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2879  0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
2880  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2881  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2882  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2883  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2884  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2885  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2886  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2887  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2888  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2889  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2890  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2891  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2892  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2893  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2894  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2895  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2896  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2897  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2898  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2899  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2900  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2901  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2902  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2903  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2904  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2905  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2906  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2907  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2908  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2909  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2910  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2911  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2912  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2913  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2914  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2915  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2916  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2917  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2918  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2919  {0x07, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14,
2920  0x16, 0x17, 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
2921  0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2d,
2922  0x2f, 0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38,
2923  0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f, 0x40,
2924  0x42, 0x43, 0x44, 0x44, 0x45, 0x47, 0x48, 0x49,
2925  0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4f, 0x50,
2926  0x52, 0x52, 0x53, 0x54, 0x55, 0x55, 0x56, 0x58,
2927  0x58, 0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e,
2928  0x5f, 0x5f, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63,
2929  0x65, 0x65, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
2930  0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e,
2931  0x6f, 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x74,
2932  0x74, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78, 0x79,
2933  0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d,
2934  0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81,
2935  0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2936  0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2937  0x8b, 0x8b, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f,
2938  0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
2939  0x92, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96,
2940  0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
2941  0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
2942  0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
2943  0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
2944  0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
2945  0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9,
2946  0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac,
2947  0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2948  0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1,
2949  0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
2950  0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2951  0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2952  0xb9, 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc,
2953  0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
2954  0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
2955  0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4,
2956  0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2957  0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9,
2958  0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb,
2959  0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2960  0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf,
2961  0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2962  0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
2963  0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2964  0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2965  0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
2966  0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2967  0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2968  0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2969  0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2970  0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2971  0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2972  0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2973  0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2974  0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb,
2975  0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2976  0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2977  0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2978  0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2979  0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
2980  0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2981  0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2982  0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2983  0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2984  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
2985  0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2986  0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd,
2987  0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff,
2988  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2989  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2990  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2991  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2992  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2993  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2994  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2995  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2996  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2997  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2998  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2999  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3000  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3001  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3002  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3003  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3004  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3005  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3006  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3007  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3008  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3009  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3010  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3011  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3012  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3013  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3014  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3015  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3016  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3017  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3018  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3019  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3020  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3021  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3022  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3023  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3024  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3025  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3026  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3027  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3028  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3029  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3030  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3031  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3032  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3033  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3034  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3035  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3036  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3037  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3038  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3039  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3040  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3041  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3042  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3043  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3044  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3045  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3046  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
3047  },
3048  { /* gamma 4 - from tp6800 + soi763a */
3049  {0x11, 0x14, 0x15, 0x17, 0x1a, 0x1b, 0x1e, 0x1f,
3050  0x22, 0x23, 0x25, 0x27, 0x28, 0x2b, 0x2c, 0x2d,
3051  0x2f, 0x31, 0x33, 0x34, 0x35, 0x38, 0x39, 0x3a,
3052  0x3b, 0x3c, 0x3d, 0x40, 0x42, 0x43, 0x44, 0x45,
3053  0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4f,
3054  0x50, 0x52, 0x53, 0x53, 0x54, 0x55, 0x56, 0x58,
3055  0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5f, 0x60,
3056  0x61, 0x61, 0x62, 0x63, 0x65, 0x65, 0x66, 0x67,
3057  0x68, 0x68, 0x69, 0x6a, 0x6c, 0x6c, 0x6d, 0x6e,
3058  0x6f, 0x6f, 0x70, 0x71, 0x71, 0x73, 0x74, 0x74,
3059  0x75, 0x77, 0x77, 0x78, 0x79, 0x79, 0x7a, 0x7a,
3060  0x7b, 0x7c, 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3061  0x81, 0x81, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86,
3062  0x86, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b,
3063  0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x90, 0x90, 0x91,
3064  0x91, 0x92, 0x92, 0x93, 0x93, 0x94, 0x94, 0x96,
3065  0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
3066  0x9a, 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3067  0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa2,
3068  0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa5, 0xa5,
3069  0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa9, 0xa9, 0xab,
3070  0xab, 0xab, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3071  0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1, 0xb1,
3072  0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
3073  0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
3074  0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xbc,
3075  0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
3076  0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
3077  0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3078  0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc9,
3079  0xc9, 0xc9, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3080  0xcb, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xce,
3081  0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
3082  0xd0, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3083  0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3084  0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
3085  0xd9, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
3086  0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf,
3087  0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3088  0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3089  0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
3090  0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
3091  0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3092  0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3093  0xec, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3094  0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3095  0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
3096  0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3097  0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3098  0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
3099  0xf9, 0xf9, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
3100  0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3101  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3102  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3103  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3104  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3105  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3106  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3107  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3108  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3109  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3110  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3111  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3112  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3113  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3114  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3115  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3116  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3117  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3118  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3119  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3120  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3121  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3122  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3123  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3124  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3125  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3126  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3127  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3128  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3129  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3130  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3131  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3132  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3133  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3134  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3135  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3136  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3137  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3138  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3139  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3140  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3141  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3142  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3143  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3144  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3145  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3146  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3147  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3148  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3149  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3150  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3151  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3152  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3153  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3154  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3155  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3156  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3157  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3158  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3159  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3160  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3161  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3162  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3163  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3164  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3165  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3166  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3167  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3168  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3169  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3170  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3171  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3172  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3173  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3174  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3175  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3176  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3177  {0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x14, 0x15,
3178  0x16, 0x17, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
3179  0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
3180  0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34, 0x35,
3181  0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3c, 0x3d,
3182  0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
3183  0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b, 0x4c,
3184  0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52, 0x53, 0x54,
3185  0x54, 0x55, 0x55, 0x56, 0x58, 0x58, 0x59, 0x5a,
3186  0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
3187  0x60, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63, 0x65,
3188  0x65, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
3189  0x69, 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
3190  0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71, 0x73,
3191  0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77,
3192  0x78, 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b,
3193  0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
3194  0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82,
3195  0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86, 0x86,
3196  0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
3197  0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
3198  0x8e, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91,
3199  0x91, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x94,
3200  0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3201  0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a,
3202  0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
3203  0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
3204  0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3205  0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4,
3206  0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6,
3207  0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
3208  0xaa, 0xab, 0xab, 0xac, 0xac, 0xac, 0xad, 0xad,
3209  0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
3210  0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3211  0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
3212  0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
3213  0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8,
3214  0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3215  0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
3216  0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3217  0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0,
3218  0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3219  0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3220  0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3221  0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9,
3222  0xca, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3223  0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd,
3224  0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3225  0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3226  0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3,
3227  0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3228  0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3229  0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3230  0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
3231  0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3232  0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3233  0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3234  0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
3235  0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3236  0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
3237  0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3238  0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
3239  0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
3240  0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
3241  0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3242  0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3243  0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3244  0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3245  0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3246  0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
3247  0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3248  0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3249  0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3250  0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3251  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3252  0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3253  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3254  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3255  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3256  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3257  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3258  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3259  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3260  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3261  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3262  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3263  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3264  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3265  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3266  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3267  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3268  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3269  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3270  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3271  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3272  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3273  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3274  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3275  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3276  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3277  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3278  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3279  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3280  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3281  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3282  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3283  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3284  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3285  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3286  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3287  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3288  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3289  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3290  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3291  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3292  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3293  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3294  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3295  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3296  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3297  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3298  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3299  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3300  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3301  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3302  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3303  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3304  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3305  {0x0d, 0x10, 0x11, 0x14, 0x15, 0x17, 0x18, 0x1b,
3306  0x1c, 0x1e, 0x20, 0x22, 0x23, 0x26, 0x27, 0x28,
3307  0x29, 0x2b, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34,
3308  0x35, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
3309  0x3f, 0x40, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48,
3310  0x49, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4f, 0x50,
3311  0x52, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58,
3312  0x59, 0x5a, 0x5a, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f,
3313  0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x65, 0x65,
3314  0x66, 0x67, 0x67, 0x68, 0x69, 0x69, 0x6a, 0x6c,
3315  0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3316  0x71, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x77,
3317  0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
3318  0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3319  0x81, 0x81, 0x82, 0x82, 0x84, 0x84, 0x85, 0x85,
3320  0x86, 0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a,
3321  0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f,
3322  0x8f, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92,
3323  0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x97,
3324  0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3325  0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
3326  0x9d, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
3327  0xa1, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3328  0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
3329  0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
3330  0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
3331  0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3332  0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
3333  0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
3334  0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba,
3335  0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3336  0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
3337  0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc3,
3338  0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3339  0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
3340  0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3341  0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc,
3342  0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3343  0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0,
3344  0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3345  0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
3346  0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8,
3347  0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
3348  0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
3349  0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf,
3350  0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3351  0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3352  0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3353  0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
3354  0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8,
3355  0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
3356  0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
3357  0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
3358  0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3359  0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3360  0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
3361  0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
3362  0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8,
3363  0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
3364  0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3365  0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3366  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3367  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3368  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3369  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3370  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3371  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3372  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3373  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3374  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3375  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3376  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3377  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3378  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3379  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3380  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3381  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3382  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3383  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3384  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3385  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3386  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3387  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3388  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3389  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3390  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3391  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3392  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3393  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3394  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3395  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3396  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3397  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3398  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3399  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3400  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3401  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3402  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3403  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3404  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3405  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3406  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3407  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3408  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3409  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3410  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3411  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3412  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3413  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3414  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3415  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3416  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3417  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3418  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3419  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3420  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3421  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3422  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3423  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3424  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3425  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3426  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3427  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3428  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3429  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3430  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3431  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3432  0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
3433  },
3434  { /* gamma 5 */
3435  {0x16, 0x18, 0x19, 0x1b, 0x1d, 0x1e, 0x20, 0x21,
3436  0x23, 0x24, 0x25, 0x27, 0x28, 0x2a, 0x2b, 0x2c,
3437  0x2d, 0x2f, 0x30, 0x31, 0x32, 0x34, 0x35, 0x36,
3438  0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3439  0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3440  0x48, 0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e,
3441  0x4f, 0x50, 0x51, 0x51, 0x52, 0x53, 0x54, 0x55,
3442  0x56, 0x56, 0x57, 0x58, 0x59, 0x59, 0x5a, 0x5b,
3443  0x5c, 0x5c, 0x5d, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
3444  0x62, 0x62, 0x63, 0x64, 0x64, 0x65, 0x66, 0x66,
3445  0x67, 0x68, 0x68, 0x69, 0x6a, 0x6a, 0x6b, 0x6b,
3446  0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3447  0x71, 0x71, 0x72, 0x73, 0x73, 0x74, 0x74, 0x75,
3448  0x75, 0x76, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79,
3449  0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e,
3450  0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82,
3451  0x82, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85,
3452  0x86, 0x86, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89,
3453  0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8d,
3454  0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x90, 0x90,
3455  0x91, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94,
3456  0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x96, 0x97,
3457  0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3458  0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3459  0x9d, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f, 0xa0, 0xa0,
3460  0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
3461  0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa6,
3462  0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8,
3463  0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3464  0xab, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3465  0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3466  0xb0, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb3,
3467  0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5,
3468  0xb5, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3469  0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3470  0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc,
3471  0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
3472  0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1,
3473  0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3474  0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3475  0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7,
3476  0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9,
3477  0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3478  0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
3479  0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf,
3480  0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3481  0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3,
3482  0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5,
3483  0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3484  0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
3485  0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
3486  0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdd,
3487  0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde,
3488  0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
3489  0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3490  0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
3491  0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3492  0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7,
3493  0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3494  0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb,
3495  0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3496  0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3497  0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3498  0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3499  0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3,
3500  0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
3501  0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
3502  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3503  0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3504  0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3505  0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3506  0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3507  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3508  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3509  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3510  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3511  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3512  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3513  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3514  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3515  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3516  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3517  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3518  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3519  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3520  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3521  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3522  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3523  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3524  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3525  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3526  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3527  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3528  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3529  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3530  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3531  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3532  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3533  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3534  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3535  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3536  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3537  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3538  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3539  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3540  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3541  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3542  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3543  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3544  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3545  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3546  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3547  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3548  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3549  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3550  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3551  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3552  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3553  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3554  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3555  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3556  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3557  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3558  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3559  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3560  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3561  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3562  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3563  {0x0f, 0x11, 0x12, 0x14, 0x15, 0x16, 0x18, 0x19,
3564  0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
3565  0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
3566  0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x31, 0x32,
3567  0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x38, 0x39,
3568  0x3a, 0x3b, 0x3c, 0x3c, 0x3d, 0x3e, 0x3f, 0x3f,
3569  0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x44, 0x45,
3570  0x46, 0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b,
3571  0x4b, 0x4c, 0x4c, 0x4d, 0x4e, 0x4e, 0x4f, 0x50,
3572  0x50, 0x51, 0x51, 0x52, 0x53, 0x53, 0x54, 0x54,
3573  0x55, 0x55, 0x56, 0x56, 0x57, 0x58, 0x58, 0x59,
3574  0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5d,
3575  0x5d, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
3576  0x61, 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x65,
3577  0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68,
3578  0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c,
3579  0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f,
3580  0x6f, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72, 0x72,
3581  0x73, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x75,
3582  0x76, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78, 0x78,
3583  0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
3584  0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e,
3585  0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81,
3586  0x81, 0x81, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83,
3587  0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86,
3588  0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88,
3589  0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b,
3590  0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d,
3591  0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f,
3592  0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
3593  0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
3594  0x94, 0x94, 0x94, 0x95, 0x95, 0x95, 0x96, 0x96,
3595  0x96, 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98,
3596  0x98, 0x98, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3597  0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
3598  0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e,
3599  0x9e, 0x9e, 0x9f, 0x9f, 0x9f, 0x9f, 0xa0, 0xa0,
3600  0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3601  0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
3602  0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
3603  0xa6, 0xa6, 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa7,
3604  0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9,
3605  0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3606  0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
3607  0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
3608  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3609  0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
3610  0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3611  0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5,
3612  0xb5, 0xb5, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
3613  0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
3614  0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3615  0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
3616  0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3617  0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3618  0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
3619  0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
3620  0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3621  0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
3622  0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
3623  0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
3624  0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9,
3625  0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca,
3626  0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
3627  0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd,
3628  0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3629  0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3630  0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3631  0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3632  0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3633  0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3634  0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3635  0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3636  0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
3637  0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb,
3638  0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3639  0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde,
3640  0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf,
3641  0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3642  0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3643  0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
3644  0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3645  0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
3646  0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3647  0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3648  0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea,
3649  0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3650  0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
3651  0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
3652  0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3653  0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
3654  0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3655  0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
3656  0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3657  0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3658  0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3659  0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa,
3660  0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3661  0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3662  0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3663  0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3664  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3665  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3666  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3667  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3668  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3669  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3670  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3671  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3672  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3673  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3674  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3675  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3676  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3677  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3678  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3679  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3680  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3681  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3682  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3683  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3684  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3685  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3686  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3687  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3688  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3689  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3690  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3691  {0x13, 0x15, 0x16, 0x18, 0x19, 0x1b, 0x1c, 0x1e,
3692  0x1f, 0x20, 0x22, 0x23, 0x24, 0x26, 0x27, 0x28,
3693  0x29, 0x2a, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
3694  0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
3695  0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,
3696  0x42, 0x43, 0x44, 0x44, 0x45, 0x46, 0x47, 0x48,
3697  0x49, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e,
3698  0x4f, 0x50, 0x50, 0x51, 0x52, 0x53, 0x53, 0x54,
3699  0x55, 0x55, 0x56, 0x57, 0x57, 0x58, 0x59, 0x59,
3700  0x5a, 0x5b, 0x5b, 0x5c, 0x5d, 0x5d, 0x5e, 0x5f,
3701  0x5f, 0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x63,
3702  0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
3703  0x69, 0x69, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c, 0x6c,
3704  0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3705  0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74, 0x74,
3706  0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78,
3707  0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c,
3708  0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f,
3709  0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83,
3710  0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
3711  0x86, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89,
3712  0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c,
3713  0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
3714  0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
3715  0x92, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95,
3716  0x95, 0x95, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3717  0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3718  0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d,
3719  0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f,
3720  0x9f, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2,
3721  0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3722  0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6,
3723  0xa7, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8, 0xa9,
3724  0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3725  0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad,
3726  0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf,
3727  0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
3728  0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3729  0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5, 0xb5,
3730  0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3731  0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
3732  0xba, 0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb,
3733  0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
3734  0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
3735  0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1,
3736  0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3737  0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3738  0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3739  0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8,
3740  0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3741  0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
3742  0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
3743  0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
3744  0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3745  0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3746  0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3747  0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xd6, 0xd6,
3748  0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
3749  0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
3750  0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
3751  0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3752  0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3753  0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
3754  0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
3755  0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3756  0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3757  0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6,
3758  0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3759  0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3760  0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea,
3761  0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3762  0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3763  0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3764  0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3765  0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2,
3766  0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
3767  0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3768  0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
3769  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3770  0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
3771  0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
3772  0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
3773  0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe,
3774  0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3775  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3776  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3777  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3778  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3779  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3780  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3781  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3782  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3783  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3784  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3785  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3786  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3787  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3788  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3789  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3790  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3791  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3792  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3793  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3794  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3795  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3796  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3797  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3798  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3799  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3800  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3801  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3802  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3803  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3804  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3805  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3806  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3807  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3808  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3809  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3810  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3811  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3812  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3813  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3814  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3815  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3816  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3817  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3818  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3819  },
3820  };
3821 
3822  reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3823  if (sd->bridge == BRIDGE_TP6810)
3824  reg_w(gspca_dev, 0x02, 0x28);
3825 /* msleep(50); */
3826  bulk_w(gspca_dev, 0x00, gamma_tb[gamma][0], 1024);
3827  bulk_w(gspca_dev, 0x01, gamma_tb[gamma][1], 1024);
3828  bulk_w(gspca_dev, 0x02, gamma_tb[gamma][2], 1024);
3829  if (sd->bridge == BRIDGE_TP6810) {
3830  int i;
3831 
3832  reg_w(gspca_dev, 0x02, 0x2b);
3833  reg_w(gspca_dev, 0x02, 0x28);
3834  for (i = 0; i < 6; i++)
3835  reg_w(gspca_dev, TP6800_R55_GAMMA_R,
3836  gamma_tb[gamma][0][i]);
3837  reg_w(gspca_dev, 0x02, 0x2b);
3838  reg_w(gspca_dev, 0x02, 0x28);
3839  for (i = 0; i < 6; i++)
3840  reg_w(gspca_dev, TP6800_R56_GAMMA_G,
3841  gamma_tb[gamma][1][i]);
3842  reg_w(gspca_dev, 0x02, 0x2b);
3843  reg_w(gspca_dev, 0x02, 0x28);
3844  for (i = 0; i < 6; i++)
3845  reg_w(gspca_dev, TP6800_R57_GAMMA_B,
3846  gamma_tb[gamma][2][i]);
3847  reg_w(gspca_dev, 0x02, 0x28);
3848  }
3849  reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3850 /* msleep(50); */
3851 }
3852 
3853 static void setsharpness(struct gspca_dev *gspca_dev, s32 val)
3854 {
3855  struct sd *sd = (struct sd *) gspca_dev;
3856 
3857  if (sd->bridge == BRIDGE_TP6800) {
3858  val |= 0x08; /* grid compensation enable */
3859  if (gspca_dev->width == 640)
3860  reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
3861  else
3862  val |= 0x04; /* scaling down enable */
3863  reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, val);
3864  } else {
3865  val = (val << 5) | 0x08;
3866  reg_w(gspca_dev, 0x59, val);
3867  }
3868 }
3869 
3870 static void setautogain(struct gspca_dev *gspca_dev, s32 val)
3871 {
3872  struct sd *sd = (struct sd *) gspca_dev;
3873 
3874  sd->ag_cnt = val ? AG_CNT_START : -1;
3875 }
3876 
3877 /* set the resolution for sensor cx0342 */
3878 static void set_resolution(struct gspca_dev *gspca_dev)
3879 {
3880  struct sd *sd = (struct sd *) gspca_dev;
3881 
3882  reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3883  if (gspca_dev->width == 320) {
3884  reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x06);
3885  msleep(100);
3886  i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3887  msleep(100);
3888  reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3889  reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01); /* qvga */
3890  reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x0d);
3891  i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0x37);
3892  i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x01);
3893  } else {
3894  reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x05);
3895  msleep(100);
3896  i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3897  msleep(100);
3898  reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3899  reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
3900  reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x09);
3901  i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0xcf);
3902  i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
3903  }
3904  i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
3905  bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
3906  ARRAY_SIZE(color_gain[0]));
3907  setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
3908  if (sd->sensor == SENSOR_SOI763A)
3909  setquality(gspca_dev, v4l2_ctrl_g_ctrl(sd->jpegqual));
3910 }
3911 
3912 /* convert the frame rate to a tp68x0 value */
3913 static int get_fr_idx(struct gspca_dev *gspca_dev)
3914 {
3915  struct sd *sd = (struct sd *) gspca_dev;
3916  int i;
3917 
3918  if (sd->bridge == BRIDGE_TP6800) {
3919  for (i = 0; i < ARRAY_SIZE(rates) - 1; i++) {
3920  if (sd->framerate >= rates[i])
3921  break;
3922  }
3923  i = 6 - i; /* 1 = 5fps .. 6 = 30fps */
3924 
3925  /* 640x480 * 30 fps does not work */
3926  if (i == 6 /* if 30 fps */
3927  && gspca_dev->width == 640)
3928  i = 0x05; /* 15 fps */
3929  } else {
3930  for (i = 0; i < ARRAY_SIZE(rates_6810) - 1; i++) {
3931  if (sd->framerate >= rates_6810[i])
3932  break;
3933  }
3934  i = 7 - i; /* 3 = 5fps .. 7 = 30fps */
3935 
3936  /* 640x480 * 30 fps does not work */
3937  if (i == 7 /* if 30 fps */
3938  && gspca_dev->width == 640)
3939  i = 6; /* 15 fps */
3940  i |= 0x80; /* clock * 1 */
3941  }
3942  return i;
3943 }
3944 
3945 static void setframerate(struct gspca_dev *gspca_dev, s32 val)
3946 {
3947  struct sd *sd = (struct sd *) gspca_dev;
3948  u8 fr_idx;
3949 
3950  fr_idx = get_fr_idx(gspca_dev);
3951 
3952  if (sd->bridge == BRIDGE_TP6810) {
3953  reg_r(gspca_dev, 0x7b);
3954  reg_w(gspca_dev, 0x7b,
3955  sd->sensor == SENSOR_CX0342 ? 0x10 : 0x90);
3956  if (val >= 128)
3957  fr_idx = 0xf0; /* lower frame rate */
3958  }
3959 
3960  reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, fr_idx);
3961 
3962  if (sd->sensor == SENSOR_CX0342)
3963  i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3964 }
3965 
3966 static void setrgain(struct gspca_dev *gspca_dev, s32 rgain)
3967 {
3968  i2c_w(gspca_dev, CX0342_RAW_RGAIN_H, rgain >> 8);
3969  i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, rgain);
3970  i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
3971 }
3972 
3973 static int sd_setgain(struct gspca_dev *gspca_dev)
3974 {
3975  struct sd *sd = (struct sd *) gspca_dev;
3976  s32 val = gspca_dev->gain->val;
3977 
3978  if (sd->sensor == SENSOR_CX0342) {
3979  s32 old = gspca_dev->gain->cur.val ?
3980  gspca_dev->gain->cur.val : 1;
3981 
3982  sd->blue->val = sd->blue->val * val / old;
3983  if (sd->blue->val > 4095)
3984  sd->blue->val = 4095;
3985  sd->red->val = sd->red->val * val / old;
3986  if (sd->red->val > 4095)
3987  sd->red->val = 4095;
3988  }
3989  if (gspca_dev->streaming) {
3990  if (sd->sensor == SENSOR_CX0342)
3991  setexposure(gspca_dev, gspca_dev->exposure->val,
3992  gspca_dev->gain->val,
3993  sd->blue->val, sd->red->val);
3994  else
3995  setexposure(gspca_dev, gspca_dev->exposure->val,
3996  gspca_dev->gain->val, 0, 0);
3997  }
3998  return gspca_dev->usb_err;
3999 }
4000 
4001 static void setbgain(struct gspca_dev *gspca_dev, s32 bgain)
4002 {
4003  i2c_w(gspca_dev, CX0342_RAW_BGAIN_H, bgain >> 8);
4004  i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, bgain);
4005  i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
4006 }
4007 
4008 /* this function is called at probe time */
4009 static int sd_config(struct gspca_dev *gspca_dev,
4010  const struct usb_device_id *id)
4011 {
4012  struct sd *sd = (struct sd *) gspca_dev;
4013 
4014  sd->bridge = id->driver_info;
4015 
4016  gspca_dev->cam.cam_mode = vga_mode;
4017  gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
4018  gspca_dev->cam.mode_framerates = sd->bridge == BRIDGE_TP6800 ?
4019  framerates : framerates_6810;
4020 
4021  sd->framerate = 30; /* default: 30 fps */
4022  return 0;
4023 }
4024 
4025 /* this function is called at probe and resume time */
4026 static int sd_init(struct gspca_dev *gspca_dev)
4027 {
4028  struct sd *sd = (struct sd *) gspca_dev;
4029  static const struct cmd tp6800_preinit[] = {
4030  {TP6800_R10_SIF_TYPE, 0x01}, /* sif */
4031  {TP6800_R11_SIF_CONTROL, 0x01},
4032  {TP6800_R15_GPIO_PU, 0x9f},
4033  {TP6800_R16_GPIO_PD, 0x9f},
4034  {TP6800_R17_GPIO_IO, 0x80},
4035  {TP6800_R18_GPIO_DATA, 0x40}, /* LED off */
4036  };
4037  static const struct cmd tp6810_preinit[] = {
4038  {TP6800_R2F_TIMING_CFG, 0x2f},
4039  {TP6800_R15_GPIO_PU, 0x6f},
4040  {TP6800_R16_GPIO_PD, 0x40},
4041  {TP6800_R17_GPIO_IO, 0x9f},
4042  {TP6800_R18_GPIO_DATA, 0xc1}, /* LED off */
4043  };
4044 
4045  if (sd->bridge == BRIDGE_TP6800)
4046  reg_w_buf(gspca_dev, tp6800_preinit,
4047  ARRAY_SIZE(tp6800_preinit));
4048  else
4049  reg_w_buf(gspca_dev, tp6810_preinit,
4050  ARRAY_SIZE(tp6810_preinit));
4051  msleep(15);
4052  reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4053  PDEBUG(D_PROBE, "gpio: %02x", gspca_dev->usb_buf[0]);
4054 /* values:
4055  * 0x80: snapshot button
4056  * 0x40: LED
4057  * 0x20: (bridge / sensor) reset for tp6810 ?
4058  * 0x07: sensor type ?
4059  */
4060 
4061  /* guess the sensor type */
4062  if (force_sensor >= 0) {
4063  sd->sensor = force_sensor;
4064  } else {
4065  if (sd->bridge == BRIDGE_TP6800) {
4066 /*fixme: not sure this is working*/
4067  switch (gspca_dev->usb_buf[0] & 0x07) {
4068  case 0:
4069  sd->sensor = SENSOR_SOI763A;
4070  break;
4071  case 1:
4072  sd->sensor = SENSOR_CX0342;
4073  break;
4074  }
4075  } else {
4076  int sensor;
4077 
4078  sensor = probe_6810(gspca_dev);
4079  if (sensor < 0) {
4080  pr_warn("Unknown sensor %d - forced to soi763a\n",
4081  -sensor);
4082  sensor = SENSOR_SOI763A;
4083  }
4084  sd->sensor = sensor;
4085  }
4086  }
4087  if (sd->sensor == SENSOR_SOI763A) {
4088  pr_info("Sensor soi763a\n");
4089  if (sd->bridge == BRIDGE_TP6810) {
4090  soi763a_6810_init(gspca_dev);
4091  }
4092  } else {
4093  pr_info("Sensor cx0342\n");
4094  if (sd->bridge == BRIDGE_TP6810) {
4095  cx0342_6810_init(gspca_dev);
4096  }
4097  }
4098 
4099  set_dqt(gspca_dev, 0);
4100  return 0;
4101 }
4102 
4103 /* This function is called before choosing the alt setting */
4104 static int sd_isoc_init(struct gspca_dev *gspca_dev)
4105 {
4106  struct sd *sd = (struct sd *) gspca_dev;
4107  static const struct cmd cx_sensor_init[] = {
4108  {CX0342_AUTO_ADC_CALIB, 0x81},
4109  {CX0342_EXPO_LINE_L, 0x37},
4110  {CX0342_EXPO_LINE_H, 0x01},
4111  {CX0342_RAW_GRGAIN_L, 0x00},
4112  {CX0342_RAW_GBGAIN_L, 0x00},
4113  {CX0342_RAW_RGAIN_L, 0x00},
4114  {CX0342_RAW_BGAIN_L, 0x00},
4115  {CX0342_SYS_CTRL_0, 0x81},
4116  };
4117  static const struct cmd cx_bridge_init[] = {
4118  {0x4d, 0x00},
4119  {0x4c, 0xff},
4120  {0x4e, 0xff},
4121  {0x4f, 0x00},
4122  };
4123  static const struct cmd ov_sensor_init[] = {
4124  {0x10, 0x75}, /* exposure */
4125  {0x76, 0x03},
4126  {0x00, 0x00}, /* gain */
4127  };
4128  static const struct cmd ov_bridge_init[] = {
4129  {0x7b, 0x90},
4130  {TP6800_R3F_FRAME_RATE, 0x87},
4131  };
4132 
4133  if (sd->bridge == BRIDGE_TP6800)
4134  return 0;
4135  if (sd->sensor == SENSOR_CX0342) {
4136  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);
4137  reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4138  i2c_w_buf(gspca_dev, cx_sensor_init,
4139  ARRAY_SIZE(cx_sensor_init));
4140  reg_w_buf(gspca_dev, cx_bridge_init,
4141  ARRAY_SIZE(cx_bridge_init));
4142  bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4143  reg_w(gspca_dev, 0x59, 0x40);
4144  } else {
4145  reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21);
4146  i2c_w_buf(gspca_dev, ov_sensor_init,
4147  ARRAY_SIZE(ov_sensor_init));
4148  reg_r(gspca_dev, 0x7b);
4149  reg_w_buf(gspca_dev, ov_bridge_init,
4150  ARRAY_SIZE(ov_bridge_init));
4151  }
4152  reg_w(gspca_dev, TP6800_R78_FORMAT,
4153  gspca_dev->curr_mode ? 0x00 : 0x01);
4154  return gspca_dev->usb_err;
4155 }
4156 
4157 static void set_led(struct gspca_dev *gspca_dev, int on)
4158 {
4159  u8 data;
4160 
4161  reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4162  data = gspca_dev->usb_buf[0];
4163  if (on)
4164  data &= ~0x40;
4165  else
4166  data |= 0x40;
4167  reg_w(gspca_dev, TP6800_R18_GPIO_DATA, data);
4168 }
4169 
4170 static void cx0342_6800_start(struct gspca_dev *gspca_dev)
4171 {
4172  struct sd *sd = (struct sd *) gspca_dev;
4173  static const struct cmd reg_init[] = {
4174  /* fixme: is this useful? */
4175  {TP6800_R17_GPIO_IO, 0x9f},
4176  {TP6800_R16_GPIO_PD, 0x40},
4177  {TP6800_R10_SIF_TYPE, 0x00}, /* i2c 8 bits */
4178  {TP6800_R50, 0x00},
4179  {TP6800_R51, 0x00},
4180  {TP6800_R52, 0xff},
4181  {TP6800_R53, 0x03},
4182  {TP6800_R54_DARK_CFG, 0x07},
4183  {TP6800_R5C_EDGE_THRLD, 0x40},
4184  {TP6800_R7A_BLK_THRLD, 0x40},
4185  {TP6800_R2F_TIMING_CFG, 0x17},
4186  {TP6800_R30_SENSOR_CFG, 0x18}, /* G1B..RG0 */
4187  {TP6800_R37_FRONT_DARK_ST, 0x00},
4188  {TP6800_R38_FRONT_DARK_END, 0x00},
4189  {TP6800_R39_REAR_DARK_ST_L, 0x00},
4190  {TP6800_R3A_REAR_DARK_ST_H, 0x00},
4195  {TP6800_R21_ENDP_1_CTL, 0x03},
4196 
4197  {TP6800_R31_PIXEL_START, 0x0b},
4198  {TP6800_R32_PIXEL_END_L, 0x8a},
4199  {TP6800_R33_PIXEL_END_H, 0x02},
4200  {TP6800_R34_LINE_START, 0x0e},
4201  {TP6800_R35_LINE_END_L, 0xf4},
4202  {TP6800_R36_LINE_END_H, 0x01},
4203  {TP6800_R78_FORMAT, 0x00},
4204  {TP6800_R12_SIF_ADDR_S, 0x20}, /* cx0342 i2c addr */
4205  };
4206  static const struct cmd sensor_init[] = {
4207  {CX0342_OUTPUT_CTRL, 0x07},
4208  {CX0342_BYPASS_MODE, 0x58},
4209  {CX0342_GPXLTHD_L, 0x16},
4210  {CX0342_RBPXLTHD_L, 0x16},
4211  {CX0342_PLANETHD_L, 0xc0},
4212  {CX0342_PLANETHD_H, 0x03},
4213  {CX0342_RB_GAP_L, 0xff},
4214  {CX0342_RB_GAP_H, 0x07},
4215  {CX0342_G_GAP_L, 0xff},
4216  {CX0342_G_GAP_H, 0x07},
4217  {CX0342_RST_OVERFLOW_L, 0x5c},
4218  {CX0342_RST_OVERFLOW_H, 0x01},
4219  {CX0342_DATA_OVERFLOW_L, 0xfc},
4220  {CX0342_DATA_OVERFLOW_H, 0x03},
4221  {CX0342_DATA_UNDERFLOW_L, 0x00},
4222  {CX0342_DATA_UNDERFLOW_H, 0x00},
4223  {CX0342_SYS_CTRL_0, 0x40},
4224  {CX0342_GLOBAL_GAIN, 0x01},
4225  {CX0342_CLOCK_GEN, 0x00},
4226  {CX0342_SYS_CTRL_0, 0x02},
4227  {CX0342_IDLE_CTRL, 0x05},
4228  {CX0342_ADCGN, 0x00},
4229  {CX0342_ADC_CTL, 0x00},
4230  {CX0342_LVRST_BLBIAS, 0x01},
4231  {CX0342_VTHSEL, 0x0b},
4232  {CX0342_RAMP_RIV, 0x0b},
4233  {CX0342_LDOSEL, 0x07},
4234  {CX0342_SPV_VALUE_L, 0x40},
4235  {CX0342_SPV_VALUE_H, 0x02},
4236  };
4237 
4238  reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4239  i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4240  i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
4241  reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4242  reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4243  i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
4244  i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
4245  if (sd->sensor == SENSOR_CX0342)
4246  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4247  v4l2_ctrl_g_ctrl(gspca_dev->gain),
4248  v4l2_ctrl_g_ctrl(sd->blue),
4249  v4l2_ctrl_g_ctrl(sd->red));
4250  else
4251  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4252  v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4253  set_led(gspca_dev, 1);
4254  set_resolution(gspca_dev);
4255 }
4256 
4257 static void cx0342_6810_start(struct gspca_dev *gspca_dev)
4258 {
4259  struct sd *sd = (struct sd *) gspca_dev;
4260  static const struct cmd sensor_init_2[] = {
4261  {CX0342_EXPO_LINE_L, 0x6f},
4262  {CX0342_EXPO_LINE_H, 0x02},
4263  {CX0342_RAW_GRGAIN_L, 0x00},
4264  {CX0342_RAW_GBGAIN_L, 0x00},
4265  {CX0342_RAW_RGAIN_L, 0x00},
4266  {CX0342_RAW_BGAIN_L, 0x00},
4267  {CX0342_SYS_CTRL_0, 0x81},
4268  };
4269  static const struct cmd bridge_init_2[] = {
4270  {0x4d, 0x00},
4271  {0x4c, 0xff},
4272  {0x4e, 0xff},
4273  {0x4f, 0x00},
4274  {TP6800_R7A_BLK_THRLD, 0x00},
4275  {TP6800_R79_QUALITY, 0x04},
4276  {TP6800_R79_QUALITY, 0x01},
4277  };
4278  static const struct cmd bridge_init_3[] = {
4279  {TP6800_R31_PIXEL_START, 0x08},
4280  {TP6800_R32_PIXEL_END_L, 0x87},
4281  {TP6800_R33_PIXEL_END_H, 0x02},
4282  {TP6800_R34_LINE_START, 0x0e},
4283  {TP6800_R35_LINE_END_L, 0xf4},
4284  {TP6800_R36_LINE_END_H, 0x01},
4285  };
4286  static const struct cmd sensor_init_3[] = {
4287  {CX0342_AUTO_ADC_CALIB, 0x81},
4288  {CX0342_EXPO_LINE_L, 0x6f},
4289  {CX0342_EXPO_LINE_H, 0x02},
4290  {CX0342_RAW_GRGAIN_L, 0x00},
4291  {CX0342_RAW_GBGAIN_L, 0x00},
4292  {CX0342_RAW_RGAIN_L, 0x00},
4293  {CX0342_RAW_BGAIN_L, 0x00},
4294  {CX0342_SYS_CTRL_0, 0x81},
4295  };
4296  static const struct cmd bridge_init_5[] = {
4297  {0x4d, 0x00},
4298  {0x4c, 0xff},
4299  {0x4e, 0xff},
4300  {0x4f, 0x00},
4301  };
4302  static const struct cmd sensor_init_4[] = {
4303  {CX0342_EXPO_LINE_L, 0xd3},
4304  {CX0342_EXPO_LINE_H, 0x01},
4305 /*fixme: gains, but 00..80 only*/
4306  {CX0342_RAW_GRGAIN_L, 0x40},
4307  {CX0342_RAW_GBGAIN_L, 0x40},
4308  {CX0342_RAW_RGAIN_L, 0x40},
4309  {CX0342_RAW_BGAIN_L, 0x40},
4310  {CX0342_SYS_CTRL_0, 0x81},
4311  };
4312  static const struct cmd sensor_init_5[] = {
4313  {CX0342_IDLE_CTRL, 0x05},
4314  {CX0342_ADCGN, 0x00},
4315  {CX0342_ADC_CTL, 0x00},
4316  {CX0342_LVRST_BLBIAS, 0x01},
4317  {CX0342_VTHSEL, 0x0b},
4318  {CX0342_RAMP_RIV, 0x0b},
4319  {CX0342_LDOSEL, 0x07},
4320  {CX0342_SPV_VALUE_L, 0x40},
4321  {CX0342_SPV_VALUE_H, 0x02},
4322  {CX0342_AUTO_ADC_CALIB, 0x81},
4323  };
4324 
4325  reg_w(gspca_dev, 0x22, gspca_dev->alt);
4326  i2c_w_buf(gspca_dev, sensor_init_2, ARRAY_SIZE(sensor_init_2));
4327  reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4328  reg_w_buf(gspca_dev, tp6810_cx_init_common,
4329  ARRAY_SIZE(tp6810_cx_init_common));
4330  reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4331  if (gspca_dev->curr_mode) {
4332  reg_w(gspca_dev, 0x4a, 0x7f);
4333  reg_w(gspca_dev, 0x07, 0x05);
4334  reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
4335  } else {
4336  reg_w(gspca_dev, 0x4a, 0xff);
4337  reg_w(gspca_dev, 0x07, 0x85);
4338  reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01); /* qvga */
4339  }
4340  setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
4341  reg_w_buf(gspca_dev, tp6810_bridge_start,
4342  ARRAY_SIZE(tp6810_bridge_start));
4343  setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness));
4344  bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
4345  ARRAY_SIZE(color_gain[0]));
4346  reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4347  i2c_w_buf(gspca_dev, sensor_init_3, ARRAY_SIZE(sensor_init_3));
4348  reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4349  i2c_w_buf(gspca_dev, sensor_init_4, ARRAY_SIZE(sensor_init_4));
4350  reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4351  i2c_w_buf(gspca_dev, sensor_init_5, ARRAY_SIZE(sensor_init_5));
4352 
4353  set_led(gspca_dev, 1);
4354 /* setquality(gspca_dev, v4l2_ctrl_g_ctrl(sd->jpegqual)); */
4355 }
4356 
4357 static void soi763a_6800_start(struct gspca_dev *gspca_dev)
4358 {
4359  struct sd *sd = (struct sd *) gspca_dev;
4360  static const struct cmd reg_init[] = {
4361  {TP6800_R79_QUALITY, 0x04},
4362  {TP6800_R79_QUALITY, 0x01},
4363  {TP6800_R10_SIF_TYPE, 0x00}, /* i2c 8 bits */
4364 
4365  {TP6800_R50, 0x00},
4366  {TP6800_R51, 0x00},
4367  {TP6800_R52, 0xff},
4368  {TP6800_R53, 0x03},
4369  {TP6800_R54_DARK_CFG, 0x07},
4370  {TP6800_R5C_EDGE_THRLD, 0x40},
4371 
4372  {TP6800_R79_QUALITY, 0x03},
4373  {TP6800_R7A_BLK_THRLD, 0x40},
4374 
4375  {TP6800_R2F_TIMING_CFG, 0x46},
4376  {TP6800_R30_SENSOR_CFG, 0x10}, /* BG1..G0R */
4377  {TP6800_R37_FRONT_DARK_ST, 0x00},
4378  {TP6800_R38_FRONT_DARK_END, 0x00},
4379  {TP6800_R39_REAR_DARK_ST_L, 0x00},
4380  {TP6800_R3A_REAR_DARK_ST_H, 0x00},
4385  {TP6800_R21_ENDP_1_CTL, 0x03},
4386 
4387  {TP6800_R3F_FRAME_RATE, 0x04}, /* 15 fps */
4388  {TP6800_R5D_DEMOSAIC_CFG, 0x0e}, /* scale down - medium edge */
4389 
4390  {TP6800_R31_PIXEL_START, 0x1b},
4391  {TP6800_R32_PIXEL_END_L, 0x9a},
4392  {TP6800_R33_PIXEL_END_H, 0x02},
4393  {TP6800_R34_LINE_START, 0x0f},
4394  {TP6800_R35_LINE_END_L, 0xf4},
4395  {TP6800_R36_LINE_END_H, 0x01},
4396  {TP6800_R78_FORMAT, 0x01}, /* qvga */
4397  {TP6800_R12_SIF_ADDR_S, 0x21}, /* soi763a i2c addr */
4398  {TP6800_R1A_SIF_TX_DATA2, 0x00},
4399  };
4400  static const struct cmd sensor_init[] = {
4401  {0x12, 0x48}, /* mirror - RGB */
4402  {0x13, 0xa0}, /* clock - no AGC nor AEC */
4403  {0x03, 0xa4}, /* saturation */
4404  {0x04, 0x30}, /* hue */
4405  {0x05, 0x88}, /* contrast */
4406  {0x06, 0x60}, /* brightness */
4407  {0x10, 0x41}, /* AEC */
4408  {0x11, 0x40}, /* clock rate */
4409  {0x13, 0xa0},
4410  {0x14, 0x00}, /* 640x480 */
4411  {0x15, 0x14},
4412  {0x1f, 0x41},
4413  {0x20, 0x80},
4414  {0x23, 0xee},
4415  {0x24, 0x50},
4416  {0x25, 0x7a},
4417  {0x26, 0x00},
4418  {0x27, 0xe2},
4419  {0x28, 0xb0},
4420  {0x2a, 0x00},
4421  {0x2b, 0x00},
4422  {0x2d, 0x81},
4423  {0x2f, 0x9d},
4424  {0x60, 0x80},
4425  {0x61, 0x00},
4426  {0x62, 0x88},
4427  {0x63, 0x11},
4428  {0x64, 0x89},
4429  {0x65, 0x00},
4430  {0x67, 0x94},
4431  {0x68, 0x7a},
4432  {0x69, 0x0f},
4433  {0x6c, 0x80},
4434  {0x6d, 0x80},
4435  {0x6e, 0x80},
4436  {0x6f, 0xff},
4437  {0x71, 0x20},
4438  {0x74, 0x20},
4439  {0x75, 0x86},
4440  {0x77, 0xb5},
4441  {0x17, 0x18}, /* H href start */
4442  {0x18, 0xbf}, /* H href end */
4443  {0x19, 0x03}, /* V start */
4444  {0x1a, 0xf8}, /* V end */
4445  {0x01, 0x80}, /* blue gain */
4446  {0x02, 0x80}, /* red gain */
4447  };
4448 
4449  reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4450 
4451  i2c_w(gspca_dev, 0x12, 0x80); /* sensor reset */
4452  msleep(10);
4453 
4454  i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4455 
4456  reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4457  reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4458 
4459  setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness));
4460 
4461  bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4462  ARRAY_SIZE(color_gain[0]));
4463 
4464  set_led(gspca_dev, 1);
4465  if (sd->sensor == SENSOR_CX0342)
4466  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4467  v4l2_ctrl_g_ctrl(gspca_dev->gain),
4468  v4l2_ctrl_g_ctrl(sd->blue),
4469  v4l2_ctrl_g_ctrl(sd->red));
4470  else
4471  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4472  v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4473  if (sd->sensor == SENSOR_SOI763A)
4474  setquality(gspca_dev, v4l2_ctrl_g_ctrl(sd->jpegqual));
4475  setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
4476 }
4477 
4478 static void soi763a_6810_start(struct gspca_dev *gspca_dev)
4479 {
4480  struct sd *sd = (struct sd *) gspca_dev;
4481  static const struct cmd bridge_init_2[] = {
4482  {TP6800_R7A_BLK_THRLD, 0x00},
4483  {TP6800_R79_QUALITY, 0x04},
4484  {TP6800_R79_QUALITY, 0x01},
4485  };
4486  static const struct cmd bridge_init_3[] = {
4487  {TP6800_R31_PIXEL_START, 0x20},
4488  {TP6800_R32_PIXEL_END_L, 0x9f},
4489  {TP6800_R33_PIXEL_END_H, 0x02},
4490  {TP6800_R34_LINE_START, 0x13},
4491  {TP6800_R35_LINE_END_L, 0xf8},
4492  {TP6800_R36_LINE_END_H, 0x01},
4493  };
4494  static const struct cmd bridge_init_6[] = {
4495  {0x08, 0xff},
4496  {0x09, 0xff},
4497  {0x0a, 0x5f},
4498  {0x0b, 0x80},
4499  };
4500 
4501  reg_w(gspca_dev, 0x22, gspca_dev->alt);
4502  bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4503  reg_w(gspca_dev, 0x59, 0x40);
4504  if (sd->sensor == SENSOR_CX0342)
4505  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4506  v4l2_ctrl_g_ctrl(gspca_dev->gain),
4507  v4l2_ctrl_g_ctrl(sd->blue),
4508  v4l2_ctrl_g_ctrl(sd->red));
4509  else
4510  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4511  v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4512  reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4513  reg_w_buf(gspca_dev, tp6810_ov_init_common,
4514  ARRAY_SIZE(tp6810_ov_init_common));
4515  reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4516  if (gspca_dev->curr_mode) {
4517  reg_w(gspca_dev, 0x4a, 0x7f);
4518  reg_w(gspca_dev, 0x07, 0x05);
4519  reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
4520  } else {
4521  reg_w(gspca_dev, 0x4a, 0xff);
4522  reg_w(gspca_dev, 0x07, 0x85);
4523  reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01); /* qvga */
4524  }
4525  setgamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
4526  reg_w_buf(gspca_dev, tp6810_bridge_start,
4527  ARRAY_SIZE(tp6810_bridge_start));
4528 
4529  if (gspca_dev->curr_mode) {
4530  reg_w(gspca_dev, 0x4f, 0x00);
4531  reg_w(gspca_dev, 0x4e, 0x7c);
4532  }
4533 
4534  reg_w(gspca_dev, 0x00, 0x00);
4535 
4536  setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness));
4537  bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4538  ARRAY_SIZE(color_gain[0]));
4539  set_led(gspca_dev, 1);
4540  reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0xf0);
4541  if (sd->sensor == SENSOR_CX0342)
4542  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4543  v4l2_ctrl_g_ctrl(gspca_dev->gain),
4544  v4l2_ctrl_g_ctrl(sd->blue),
4545  v4l2_ctrl_g_ctrl(sd->red));
4546  else
4547  setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4548  v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4549  reg_w_buf(gspca_dev, bridge_init_6, ARRAY_SIZE(bridge_init_6));
4550 }
4551 
4552 /* -- start the camera -- */
4553 static int sd_start(struct gspca_dev *gspca_dev)
4554 {
4555  struct sd *sd = (struct sd *) gspca_dev;
4556 
4557  jpeg_define(sd->jpeg_hdr, gspca_dev->height, gspca_dev->width);
4558  set_dqt(gspca_dev, sd->quality);
4559  if (sd->bridge == BRIDGE_TP6800) {
4560  if (sd->sensor == SENSOR_CX0342)
4561  cx0342_6800_start(gspca_dev);
4562  else
4563  soi763a_6800_start(gspca_dev);
4564  } else {
4565  if (sd->sensor == SENSOR_CX0342)
4566  cx0342_6810_start(gspca_dev);
4567  else
4568  soi763a_6810_start(gspca_dev);
4569  reg_w_buf(gspca_dev, tp6810_late_start,
4570  ARRAY_SIZE(tp6810_late_start));
4571  reg_w(gspca_dev, 0x80, 0x03);
4572  reg_w(gspca_dev, 0x82, gspca_dev->curr_mode ? 0x0a : 0x0e);
4573 
4574  if (sd->sensor == SENSOR_CX0342)
4575  setexposure(gspca_dev,
4576  v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4577  v4l2_ctrl_g_ctrl(gspca_dev->gain),
4578  v4l2_ctrl_g_ctrl(sd->blue),
4579  v4l2_ctrl_g_ctrl(sd->red));
4580  else
4581  setexposure(gspca_dev,
4582  v4l2_ctrl_g_ctrl(gspca_dev->exposure),
4583  v4l2_ctrl_g_ctrl(gspca_dev->gain), 0, 0);
4584  if (sd->sensor == SENSOR_SOI763A)
4585  setquality(gspca_dev,
4586  v4l2_ctrl_g_ctrl(sd->jpegqual));
4587  if (sd->bridge == BRIDGE_TP6810)
4588  setautogain(gspca_dev,
4589  v4l2_ctrl_g_ctrl(gspca_dev->autogain));
4590  }
4591 
4592  setframerate(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure));
4593 
4594  return gspca_dev->usb_err;
4595 }
4596 
4597 static void sd_stopN(struct gspca_dev *gspca_dev)
4598 {
4599  struct sd *sd = (struct sd *) gspca_dev;
4600 
4601  if (sd->bridge == BRIDGE_TP6800)
4602  reg_w(gspca_dev, TP6800_R2F_TIMING_CFG, 0x03);
4603  set_led(gspca_dev, 0);
4604  reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
4605 }
4606 
4607 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
4608  u8 *data,
4609  int len)
4610 {
4611  struct sd *sd = (struct sd *) gspca_dev;
4612 
4613  /* the start of frame contains:
4614  * ff d8
4615  * ff fe
4616  * width / 16
4617  * height / 8
4618  * quality
4619  */
4620  if (sd->bridge == BRIDGE_TP6810) {
4621  if (*data != 0x5a) {
4622 /*fixme: don't discard the whole frame..*/
4623  if (*data == 0xaa || *data == 0x00)
4624  return;
4625  if (*data > 0xc0) {
4626  PDEBUG(D_FRAM, "bad frame");
4627  gspca_dev->last_packet_type = DISCARD_PACKET;
4628  return;
4629  }
4630  }
4631  data++;
4632  len--;
4633  if (*data == 0xff && data[1] == 0xd8) {
4634 /*fixme: there may be information in the 4 high bits*/
4635  if ((data[6] & 0x0f) != sd->quality)
4636  set_dqt(gspca_dev, data[6] & 0x0f);
4637  gspca_frame_add(gspca_dev, FIRST_PACKET,
4638  sd->jpeg_hdr, JPEG_HDR_SZ);
4639  gspca_frame_add(gspca_dev, INTER_PACKET,
4640  data + 7, len - 7);
4641  } else if (data[len - 2] == 0xff && data[len - 1] == 0xd9) {
4642  gspca_frame_add(gspca_dev, LAST_PACKET,
4643  data, len);
4644  } else {
4645  gspca_frame_add(gspca_dev, INTER_PACKET,
4646  data, len);
4647  }
4648  return;
4649  }
4650 
4651  switch (*data) {
4652  case 0x55:
4653  gspca_frame_add(gspca_dev, LAST_PACKET, data, 0);
4654 
4655  if (len < 8
4656  || data[1] != 0xff || data[2] != 0xd8
4657  || data[3] != 0xff || data[4] != 0xfe) {
4658 
4659  /* Have only seen this with corrupt frames */
4660  gspca_dev->last_packet_type = DISCARD_PACKET;
4661  return;
4662  }
4663  if (data[7] != sd->quality)
4664  set_dqt(gspca_dev, data[7]);
4665  gspca_frame_add(gspca_dev, FIRST_PACKET,
4666  sd->jpeg_hdr, JPEG_HDR_SZ);
4667  gspca_frame_add(gspca_dev, INTER_PACKET,
4668  data + 8, len - 8);
4669  break;
4670  case 0xaa:
4671  gspca_dev->last_packet_type = DISCARD_PACKET;
4672  break;
4673  case 0xcc:
4674  if (data[1] != 0xff || data[2] != 0xd8)
4675  gspca_frame_add(gspca_dev, INTER_PACKET,
4676  data + 1, len - 1);
4677  else
4678  gspca_dev->last_packet_type = DISCARD_PACKET;
4679  break;
4680  }
4681 }
4682 
4683 static void sd_dq_callback(struct gspca_dev *gspca_dev)
4684 {
4685  struct sd *sd = (struct sd *) gspca_dev;
4686  int ret, alen;
4687  int luma, expo;
4688 
4689  if (sd->ag_cnt < 0)
4690  return;
4691  if (--sd->ag_cnt > 5)
4692  return;
4693  switch (sd->ag_cnt) {
4694 /* case 5: */
4695  default:
4696  reg_w(gspca_dev, 0x7d, 0x00);
4697  break;
4698  case 4:
4699  reg_w(gspca_dev, 0x27, 0xb0);
4700  break;
4701  case 3:
4702  reg_w(gspca_dev, 0x0c, 0x01);
4703  break;
4704  case 2:
4705  ret = usb_bulk_msg(gspca_dev->dev,
4706  usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4707  gspca_dev->usb_buf,
4708  32,
4709  &alen,
4710  500);
4711  if (ret < 0) {
4712  pr_err("bulk err %d\n", ret);
4713  break;
4714  }
4715  /* values not used (unknown) */
4716  break;
4717  case 1:
4718  reg_w(gspca_dev, 0x27, 0xd0);
4719  break;
4720  case 0:
4721  ret = usb_bulk_msg(gspca_dev->dev,
4722  usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4723  gspca_dev->usb_buf,
4724  32,
4725  &alen,
4726  500);
4727  if (ret < 0) {
4728  pr_err("bulk err %d\n", ret);
4729  break;
4730  }
4731  luma = ((gspca_dev->usb_buf[8] << 8) + gspca_dev->usb_buf[7] +
4732  (gspca_dev->usb_buf[11] << 8) + gspca_dev->usb_buf[10] +
4733  (gspca_dev->usb_buf[14] << 8) + gspca_dev->usb_buf[13] +
4734  (gspca_dev->usb_buf[17] << 8) + gspca_dev->usb_buf[16] +
4735  (gspca_dev->usb_buf[20] << 8) + gspca_dev->usb_buf[19] +
4736  (gspca_dev->usb_buf[23] << 8) + gspca_dev->usb_buf[22] +
4737  (gspca_dev->usb_buf[26] << 8) + gspca_dev->usb_buf[25] +
4738  (gspca_dev->usb_buf[29] << 8) + gspca_dev->usb_buf[28])
4739  / 8;
4740  if (gspca_dev->width == 640)
4741  luma /= 4;
4742  reg_w(gspca_dev, 0x7d, 0x00);
4743 
4744  expo = v4l2_ctrl_g_ctrl(gspca_dev->exposure);
4745  ret = gspca_expo_autogain(gspca_dev, luma,
4746  60, /* desired luma */
4747  6, /* dead zone */
4748  2, /* gain knee */
4749  70); /* expo knee */
4750  sd->ag_cnt = AG_CNT_START;
4751  if (sd->bridge == BRIDGE_TP6810) {
4752  int new_expo = v4l2_ctrl_g_ctrl(gspca_dev->exposure);
4753 
4754  if ((expo >= 128 && new_expo < 128)
4755  || (expo < 128 && new_expo >= 128))
4756  setframerate(gspca_dev, new_expo);
4757  }
4758  break;
4759  }
4760 }
4761 
4762 /* get stream parameters (framerate) */
4763 static void sd_get_streamparm(struct gspca_dev *gspca_dev,
4764  struct v4l2_streamparm *parm)
4765 {
4766  struct sd *sd = (struct sd *) gspca_dev;
4767  struct v4l2_captureparm *cp = &parm->parm.capture;
4768  struct v4l2_fract *tpf = &cp->timeperframe;
4769  int fr, i;
4770 
4772  tpf->numerator = 1;
4773  i = get_fr_idx(gspca_dev);
4774  if (i & 0x80) {
4775  if (sd->bridge == BRIDGE_TP6800)
4776  fr = rates[6 - (i & 0x07)];
4777  else
4778  fr = rates_6810[7 - (i & 0x07)];
4779  } else {
4780  fr = rates[6 - i];
4781  }
4782  tpf->denominator = fr;
4783 }
4784 
4785 /* set stream parameters (framerate) */
4786 static void sd_set_streamparm(struct gspca_dev *gspca_dev,
4787  struct v4l2_streamparm *parm)
4788 {
4789  struct sd *sd = (struct sd *) gspca_dev;
4790  struct v4l2_captureparm *cp = &parm->parm.capture;
4791  struct v4l2_fract *tpf = &cp->timeperframe;
4792  int fr, i;
4793 
4794  sd->framerate = tpf->denominator / tpf->numerator;
4795  if (gspca_dev->streaming)
4796  setframerate(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure));
4797 
4798  /* Return the actual framerate */
4799  i = get_fr_idx(gspca_dev);
4800  if (i & 0x80)
4801  fr = rates_6810[7 - (i & 0x07)];
4802  else
4803  fr = rates[6 - i];
4804  tpf->numerator = 1;
4805  tpf->denominator = fr;
4806 }
4807 
4808 static int sd_set_jcomp(struct gspca_dev *gspca_dev,
4809  const struct v4l2_jpegcompression *jcomp)
4810 {
4811  struct sd *sd = (struct sd *) gspca_dev;
4812 
4813  if (sd->sensor != SENSOR_SOI763A)
4814  return -ENOTTY;
4815  v4l2_ctrl_s_ctrl(sd->jpegqual, jcomp->quality);
4816  return 0;
4817 }
4818 
4819 static int sd_get_jcomp(struct gspca_dev *gspca_dev,
4820  struct v4l2_jpegcompression *jcomp)
4821 {
4822  struct sd *sd = (struct sd *) gspca_dev;
4823 
4824  if (sd->sensor != SENSOR_SOI763A)
4825  return -ENOTTY;
4826  memset(jcomp, 0, sizeof *jcomp);
4827  jcomp->quality = v4l2_ctrl_g_ctrl(sd->jpegqual);
4830  return 0;
4831 }
4832 
4833 static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
4834 {
4835  struct gspca_dev *gspca_dev =
4836  container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
4837  struct sd *sd = (struct sd *)gspca_dev;
4838 
4839  gspca_dev->usb_err = 0;
4840 
4841  if (!gspca_dev->streaming)
4842  return 0;
4843 
4844  switch (ctrl->id) {
4845  case V4L2_CID_SHARPNESS:
4846  setsharpness(gspca_dev, ctrl->val);
4847  break;
4848  case V4L2_CID_GAMMA:
4849  setgamma(gspca_dev, ctrl->val);
4850  break;
4851  case V4L2_CID_BLUE_BALANCE:
4852  setbgain(gspca_dev, ctrl->val);
4853  break;
4854  case V4L2_CID_RED_BALANCE:
4855  setrgain(gspca_dev, ctrl->val);
4856  break;
4857  case V4L2_CID_EXPOSURE:
4858  sd_setgain(gspca_dev);
4859  break;
4860  case V4L2_CID_AUTOGAIN:
4861  if (ctrl->val)
4862  break;
4863  sd_setgain(gspca_dev);
4864  break;
4866  jpeg_set_qual(sd->jpeg_hdr, ctrl->val);
4867  break;
4868  }
4869  return gspca_dev->usb_err;
4870 }
4871 
4872 static const struct v4l2_ctrl_ops sd_ctrl_ops = {
4873  .s_ctrl = sd_s_ctrl,
4874 };
4875 
4876 static int sd_init_controls(struct gspca_dev *gspca_dev)
4877 {
4878  struct sd *sd = (struct sd *)gspca_dev;
4879  struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
4880 
4881  gspca_dev->vdev.ctrl_handler = hdl;
4882  v4l2_ctrl_handler_init(hdl, 4);
4883  gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4884  V4L2_CID_EXPOSURE, 1, 0xdc, 1, 0x4e);
4885  if (sd->sensor == SENSOR_CX0342) {
4886  sd->red = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4887  V4L2_CID_RED_BALANCE, 0, 4095, 1, 256);
4888  sd->blue = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4889  V4L2_CID_BLUE_BALANCE, 0, 4095, 1, 256);
4890  }
4891  if (sd->sensor == SENSOR_SOI763A)
4892  gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4893  V4L2_CID_GAIN, 0, 15, 1, 3);
4894  else
4895  gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4896  V4L2_CID_GAIN, 0, 4095, 1, 256);
4897  sd->sharpness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4898  V4L2_CID_SHARPNESS, 0, 3, 1, 2);
4899  sd->gamma = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4900  V4L2_CID_GAMMA, 0, NGAMMA - 1, 1,
4901  (sd->sensor == SENSOR_SOI763A &&
4902  sd->bridge == BRIDGE_TP6800) ? 0 : 1);
4903  if (sd->bridge == BRIDGE_TP6810)
4904  gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4905  V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
4906  if (sd->sensor == SENSOR_SOI763A)
4907  sd->jpegqual = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
4909  0, 15, 1, (sd->bridge == BRIDGE_TP6810) ? 0 : 13);
4910 
4911  if (hdl->error) {
4912  pr_err("Could not initialize controls\n");
4913  return hdl->error;
4914  }
4915  if (gspca_dev->autogain)
4916  v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
4917  else
4918  v4l2_ctrl_cluster(2, &gspca_dev->exposure);
4919  return 0;
4920 }
4921 
4922 static const struct sd_desc sd_desc = {
4923  .name = KBUILD_MODNAME,
4924  .config = sd_config,
4925  .init = sd_init,
4926  .init_controls = sd_init_controls,
4927  .isoc_init = sd_isoc_init,
4928  .start = sd_start,
4929  .stopN = sd_stopN,
4930  .pkt_scan = sd_pkt_scan,
4931  .dq_callback = sd_dq_callback,
4932  .get_streamparm = sd_get_streamparm,
4933  .set_streamparm = sd_set_streamparm,
4934  .get_jcomp = sd_get_jcomp,
4935  .set_jcomp = sd_set_jcomp,
4936 };
4937 
4938 static const struct usb_device_id device_table[] = {
4939  {USB_DEVICE(0x06a2, 0x0003), .driver_info = BRIDGE_TP6800},
4940  {USB_DEVICE(0x06a2, 0x6810), .driver_info = BRIDGE_TP6810},
4941  {} /* Terminating entry */
4942 };
4943 
4944 MODULE_DEVICE_TABLE(usb, device_table);
4945 
4946 static int sd_probe(struct usb_interface *interface,
4947  const struct usb_device_id *id)
4948 {
4949  return gspca_dev_probe(interface, id, &sd_desc, sizeof(struct sd),
4950  THIS_MODULE);
4951 }
4952 
4953 static struct usb_driver sd_driver = {
4954  .name = KBUILD_MODNAME,
4955  .id_table = device_table,
4956  .probe = sd_probe,
4957  .disconnect = gspca_disconnect,
4958 #ifdef CONFIG_PM
4959  .suspend = gspca_suspend,
4960  .resume = gspca_resume,
4961  .reset_resume = gspca_resume,
4962 #endif
4963 };
4964 
4965 module_usb_driver(sd_driver);
4966 
4967 module_param(force_sensor, int, 0644);
4969  "Force sensor. 0: cx0342, 1: soi763a");