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