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

source code of linux/drivers/media/usb/gspca/topro.c