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