1/*
2 * ATRAC3+ compatible decoder
3 *
4 * Copyright (c) 2010-2013 Maxim Poliakovski
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg 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 GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23#ifndef AVCODEC_ATRAC3PLUS_DATA_H
24#define AVCODEC_ATRAC3PLUS_DATA_H
25
26#include <stddef.h>
27#include <stdint.h>
28
29/** VLC tables for wordlen */
30static const uint8_t atrac3p_wl_cbs[][12] = {
31    {  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
32    {  1,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
33    {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
34    {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
35};
36
37/** VLC tables for code table indexes */
38static const uint8_t atrac3p_ct_cbs[][12] = {
39    {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
40    {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
41    {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
42    {  1,  0,  1,  6,  0,  0,  0,  0,  0,  0,  0,  0 },
43};
44/* Symbols for wordlen interleaved with symbols for code table */
45static const uint8_t atrac3p_wl_ct_xlats[] = {
46    /* wordlen table 1 - 3 entries */
47    0,  1,  7,
48    /* code table 1    - 4 entries */
49    0,  1,  2,  3,
50    /* wordlen table 2 - 5 entries */
51    0,  1,  2,  6,  7,
52    /* code table 2    - 8 entries */
53    0,  1,  2,  3,  4,  5,  6,  7,
54    /* wordlen table 3 - 8 entries */
55    0,  1,  7,  2,  5,  6,  3,  4,
56    /* code table 3    - 8 entries */
57    0,  1,  2,  3,  6,  7,  4,  5,
58    /* wordlen table 4 - 8 entries */
59    0,  1,  7,  2,  3,  6,  4,  5,
60    /* code table 4    - 8 entries */
61    0,  1,  2,  3,  4,  5,  6,  7,
62};
63
64/** VLC tables for scale factor indexes */
65static const uint8_t atrac3p_sf_cbs[][12] = {
66    {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
67    {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
68    {  1,  0,  2,  0,  4,  0,  2,  1, 54,  0,  0,  0 },
69    {  0,  1,  4,  0,  4,  0,  3,  0, 52,  0,  0,  0 },
70    {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
71    {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
72    {  1,  0,  2,  2,  2,  0,  8,  0,  0,  0,  0,  0 },
73    {  0,  1,  4,  2,  2,  2,  4,  0,  0,  0,  0,  0 },
74};
75
76static const uint8_t atrac3p_sf_xlats[] = {
77    /* Scale factor index 1 - 64 entries */
78     0,  1, 61, 62, 63,  2, 60,  3,  4,  5,  6, 57, 58, 59,  7,  8,
79     9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
80    25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
81    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
82    /* Scale factor index 2 - 64 entries */
83     0,  1,  2, 62, 63,  3, 61,  4,  5,  6, 57, 58, 59, 60,  7,  8,
84     9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
85    25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
86    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
87    /* Scale factor index 3 - 64 entries */
88     0,  1, 63,  2,  3, 61, 62,  4, 60, 59,  5,  6,  7,  8,  9, 10,
89    11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
90    27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
91    43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
92    /* Scale factor index 4 - 64 entries */
93     0,  1,  2, 62, 63,  3,  4, 60, 61,  5, 58, 59,  6,  7,  8,  9,
94    10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
95    26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
96    42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
97    /* Scale factor index 5 - 15 entries */
98     0,  1, 13, 14, 15,  2, 12,  3,  4,  5,  6,  7,  9, 10, 11,
99    /* Scale factor index 6 - 15 entries */
100     0,  1,  2, 14, 15,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
101    /* Scale factor index 7 - 15 entries */
102     0,  1, 15,  2, 14,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
103    /* Scale factor index 8 - 15 entries */
104     0,  1,  2, 14, 15,  3, 13,  4, 12,  5, 11,  6,  7,  9, 10,
105};
106
107/* weights for quantized word lengths */
108static const int8_t atrac3p_wl_weights[6][32] = {
109    { 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
110      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
111    { 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0,
112      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
113    { 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1,
114      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
115    { 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
116      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
117    { 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0,
118      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
119    { 6, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 2, 2, 1, 1,
120      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
121};
122
123/* weights for quantized scale factors
124 * sf_weights[i] = i / (tab_idx + 1)
125 * where tab_idx = [1,2] */
126static const int8_t atrac3p_sf_weights[2][32] = {
127    { 0, 0, 1, 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,
128      8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 },
129    { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4,  4,  5,
130      5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10 }
131};
132
133/** Ungroup table for word length segments.
134 *  Numbers in this table tell which coeff belongs to which segment. */
135static const uint8_t atrac3p_qu_num_to_seg[32] = {
136    0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5,
137    5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9
138};
139
140/** Map quant unit number to subband number */
141static const uint8_t atrac3p_qu_to_subband[32] = {
142    0, 0, 0, 0, 0, 0, 0, 0, 1, 1,  1,  1,  2,  2,  2, 2,
143    3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
144};
145
146/** Map subband number to number of power compensation groups */
147static const int atrac3p_subband_to_num_powgrps[16] = {
148    1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5
149};
150
151/** 3D base shape tables. The values are grouped together as follows:
152 *  [num_start_values = 8][num_shape_tables = 16][num_seg_coeffs = 9]
153 *  For each of the 8 start values there are 16 different shapes each
154 *  9 coefficients long. */
155static const int8_t atrac3p_wl_shapes[8][16][9] = {
156    { {  0,  0,  0,  0,  0,  0,  0, -2, -1 },
157      {  0,  0,  0,  0,  0,  0,  0, -5, -1 },
158      {  0,  0,  0, -7,  0,  0,  0,  0,  0 },
159      {  0,  0,  0,  0,  0, -7,  0,  0,  0 },
160      {  0,  0,  0,  0,  0,  0, -5,  0,  0 },
161      {  0,  0,  0,  0, -5,  0,  0,  0,  0 },
162      { -7, -7,  0,  0,  0,  0,  0,  0,  0 },
163      {  0, -7,  0,  0,  0,  0,  0,  0,  0 },
164      { -2, -2, -5,  0,  0,  0,  0,  0,  0 },
165      {  0,  0,  0, -2, -5,  0,  0,  0,  0 },
166      {  0,  0,  0,  0,  0, -2, -5,  0,  0 },
167      {  0,  0,  0, -5,  0,  0,  0,  0,  0 },
168      {  0, -2, -7, -2,  0,  0,  0,  0,  0 },
169      {  0,  0,  0,  0, -2, -5,  0,  0,  0 },
170      {  0,  0,  0, -5, -5,  0,  0,  0,  0 },
171      {  0,  0,  0, -5, -2,  0,  0,  0,  0 } },
172    { { -1, -5, -3, -2, -1, -1,  0,  0,  0 },
173      { -2, -5, -3, -3, -2, -1, -1,  0,  0 },
174      {  0, -1, -1, -1,  0,  0,  0,  0,  0 },
175      { -1, -3,  0,  0,  0,  0,  0,  0,  0 },
176      { -1, -2,  0,  0,  0,  0,  0,  0,  0 },
177      { -1, -3, -1,  0,  0,  0,  0,  1,  1 },
178      { -1, -5, -3, -3, -2, -1,  0,  0,  0 },
179      { -1, -1, -4, -2, -2, -1, -1,  0,  0 },
180      { -1, -1, -3, -2, -3, -1, -1, -1,  0 },
181      { -1, -4, -2, -3, -1,  0,  0,  0,  0 },
182      {  0, -1, -2, -2, -1, -1,  0,  0,  0 },
183      {  0, -2, -1,  0,  0,  0,  0,  0,  0 },
184      { -1, -1,  0,  0,  0,  0,  0,  0,  0 },
185      { -1, -1, -3, -2, -2, -1, -1, -1,  0 },
186      {  0,  0,  0,  0,  0,  0,  0,  0,  0 },
187      {  0, -1, -3, -2, -2, -1, -1, -1,  0 }, },
188    { { -1, -2,  0,  1,  1,  1,  1,  1,  1 },
189      {  0, -1,  1,  1,  1,  1,  1,  1,  1 },
190      {  0, -2,  1,  1,  1,  1,  1,  1,  1 },
191      {  0, -2,  0,  1,  1,  1,  1,  1,  1 },
192      { -1, -1,  0,  1,  1,  1,  1,  1,  1 },
193      {  0,  0, -1,  0,  1,  1,  1,  1,  1 },
194      { -1, -1,  1,  1,  1,  1,  1,  1,  1 },
195      {  0,  0, -1,  1,  1,  1,  1,  1,  1 },
196      {  0, -1,  0,  1,  1,  1,  1,  1,  1 },
197      { -1, -1, -1,  1,  1,  1,  1,  1,  1 },
198      {  0,  0,  0,  0,  1,  1,  1,  1,  1 },
199      {  0,  0,  0,  1,  1,  1,  1,  1,  1 },
200      {  0, -1, -1,  1,  1,  1,  1,  1,  1 },
201      {  0,  1,  0,  1,  1,  1,  1,  1,  1 },
202      {  0, -3, -2,  1,  1,  1,  1,  2,  2 },
203      { -3, -5, -3,  2,  2,  2,  2,  2,  2 }, },
204    { { -1, -2,  0,  2,  2,  2,  2,  2,  2 },
205      { -1, -2,  0,  1,  2,  2,  2,  2,  2 },
206      {  0, -2,  0,  2,  2,  2,  2,  2,  2 },
207      { -1,  0,  1,  2,  2,  2,  2,  2,  2 },
208      {  0,  0,  1,  2,  2,  2,  2,  2,  2 },
209      {  0, -2,  0,  1,  2,  2,  2,  2,  2 },
210      {  0, -1,  1,  2,  2,  2,  2,  2,  2 },
211      { -1, -1,  0,  2,  2,  2,  2,  2,  2 },
212      { -1, -1,  0,  1,  2,  2,  2,  2,  2 },
213      { -1, -2, -1,  2,  2,  2,  2,  2,  2 },
214      {  0, -1,  0,  2,  2,  2,  2,  2,  2 },
215      {  1,  1,  0,  1,  2,  2,  2,  2,  2 },
216      {  0,  1,  2,  2,  2,  2,  2,  2,  2 },
217      {  1,  0,  0,  1,  2,  2,  2,  2,  2 },
218      {  0,  0,  0,  1,  2,  2,  2,  2,  2 },
219      { -1, -1, -1,  1,  2,  2,  2,  2,  2 }, },
220    { {  0,  1,  2,  3,  3,  3,  3,  3,  3 },
221      {  1,  1,  2,  3,  3,  3,  3,  3,  3 },
222      { -1,  0,  1,  2,  3,  3,  3,  3,  3 },
223      {  0,  0,  2,  3,  3,  3,  3,  3,  3 },
224      { -1,  0,  1,  3,  3,  3,  3,  3,  3 },
225      {  0,  0,  1,  3,  3,  3,  3,  3,  3 },
226      {  1,  2,  3,  3,  3,  3,  3,  3,  3 },
227      {  1,  2,  2,  3,  3,  3,  3,  3,  3 },
228      {  0,  1,  1,  3,  3,  3,  3,  3,  3 },
229      {  0,  0,  1,  2,  3,  3,  3,  3,  3 },
230      { -1,  1,  2,  3,  3,  3,  3,  3,  3 },
231      { -1,  0,  2,  3,  3,  3,  3,  3,  3 },
232      {  2,  2,  3,  3,  3,  3,  3,  3,  3 },
233      {  1,  1,  3,  3,  3,  3,  3,  3,  3 },
234      {  0,  2,  3,  3,  3,  3,  3,  3,  3 },
235      {  0,  1,  1,  2,  3,  3,  3,  3,  3 }, },
236    { {  0,  1,  2,  3,  4,  4,  4,  4,  4 },
237      {  1,  2,  3,  4,  4,  4,  4,  4,  4 },
238      {  0,  0,  2,  3,  4,  4,  4,  4,  4 },
239      {  1,  1,  2,  4,  4,  4,  4,  4,  4 },
240      {  0,  1,  2,  4,  4,  4,  4,  4,  4 },
241      { -1,  0,  1,  3,  4,  4,  4,  4,  4 },
242      {  0,  0,  1,  3,  4,  4,  4,  4,  4 },
243      {  1,  1,  2,  3,  4,  4,  4,  4,  4 },
244      {  0,  1,  1,  3,  4,  4,  4,  4,  4 },
245      {  2,  2,  3,  4,  4,  4,  4,  4,  4 },
246      {  1,  1,  3,  4,  4,  4,  4,  4,  4 },
247      {  1,  2,  2,  4,  4,  4,  4,  4,  4 },
248      { -1,  0,  2,  3,  4,  4,  4,  4,  4 },
249      {  0,  1,  3,  4,  4,  4,  4,  4,  4 },
250      {  1,  2,  2,  3,  4,  4,  4,  4,  4 },
251      {  0,  2,  3,  4,  4,  4,  4,  4,  4 }, },
252    { {  1,  2,  3,  4,  5,  5,  5,  5,  5 },
253      {  0,  1,  2,  3,  4,  5,  5,  5,  5 },
254      {  0,  1,  2,  3,  5,  5,  5,  5,  5 },
255      {  1,  1,  3,  4,  5,  5,  5,  5,  5 },
256      {  1,  1,  2,  4,  5,  5,  5,  5,  5 },
257      {  1,  2,  2,  4,  5,  5,  5,  5,  5 },
258      {  1,  1,  2,  3,  5,  5,  5,  5,  5 },
259      {  2,  2,  3,  4,  5,  5,  5,  5,  5 },
260      {  0,  1,  2,  4,  5,  5,  5,  5,  5 },
261      {  2,  2,  3,  5,  5,  5,  5,  5,  5 },
262      {  1,  2,  3,  5,  5,  5,  5,  5,  5 },
263      {  0,  1,  3,  4,  5,  5,  5,  5,  5 },
264      {  1,  2,  2,  3,  5,  5,  5,  5,  5 },
265      {  2,  3,  4,  5,  5,  5,  5,  5,  5 },
266      {  0,  2,  3,  4,  5,  5,  5,  5,  5 },
267      {  1,  1,  1,  3,  4,  5,  5,  5,  5 }, },
268    { {  1,  2,  3,  4,  5,  5,  5,  6,  6 },
269      {  1,  2,  3,  4,  5,  6,  6,  6,  6 },
270      {  2,  3,  4,  5,  6,  6,  6,  6,  6 },
271      {  1,  2,  3,  4,  6,  6,  6,  6,  6 },
272      {  2,  2,  3,  4,  5,  5,  5,  6,  6 },
273      {  1,  2,  3,  4,  5,  5,  6,  6,  6 },
274      {  2,  2,  3,  4,  6,  6,  6,  6,  6 },
275      {  2,  2,  3,  4,  5,  6,  6,  6,  6 },
276      {  2,  2,  4,  5,  6,  6,  6,  6,  6 },
277      {  2,  2,  3,  5,  6,  6,  6,  6,  6 },
278      {  1,  2,  3,  5,  6,  6,  6,  6,  6 },
279      {  2,  3,  3,  5,  6,  6,  6,  6,  6 },
280      {  1,  2,  4,  5,  6,  6,  6,  6,  6 },
281      {  2,  2,  3,  4,  5,  5,  6,  6,  6 },
282      {  2,  3,  3,  4,  6,  6,  6,  6,  6 },
283      {  1,  3,  4,  5,  6,  6,  6,  6,  6 } }
284};
285
286/** 2D base shape tables for scale factor coding.
287 *  The values are grouped together as follows:
288 *  [num_shape_tables = 64][num_seg_coeffs = 9] */
289static const int8_t atrac3p_sf_shapes[64][9] = {
290    { -3, -2, -1,  0,  3,  5,  6,  8, 40 },
291    { -3, -2,  0,  1,  7,  9, 11, 13, 20 },
292    { -1,  0,  0,  1,  6,  8, 10, 13, 41 },
293    {  0,  0,  0,  2,  5,  5,  6,  8, 14 },
294    {  0,  0,  0,  2,  6,  7,  8, 11, 47 },
295    {  0,  0,  1,  2,  5,  7,  8, 10, 32 },
296    {  0,  0,  1,  3,  8, 10, 12, 14, 47 },
297    {  0,  0,  2,  4,  9, 10, 12, 14, 40 },
298    {  0,  0,  3,  5,  9, 10, 12, 14, 22 },
299    {  0,  1,  3,  5, 10, 14, 18, 22, 31 },
300    {  0,  2,  5,  6, 10, 10, 10, 12, 46 },
301    {  0,  2,  5,  7, 12, 14, 15, 18, 44 },
302    {  1,  1,  4,  5,  7,  7,  8,  9, 15 },
303    {  1,  2,  2,  2,  4,  5,  7,  9, 26 },
304    {  1,  2,  2,  3,  6,  7,  7,  8, 47 },
305    {  1,  2,  2,  3,  6,  8, 10, 13, 22 },
306    {  1,  3,  4,  7, 13, 17, 21, 24, 41 },
307    {  1,  4,  0,  4, 10, 12, 13, 14, 17 },
308    {  2,  3,  3,  3,  6,  8, 10, 13, 48 },
309    {  2,  3,  3,  4,  9, 12, 14, 17, 47 },
310    {  2,  3,  3,  5, 10, 12, 14, 17, 25 },
311    {  2,  3,  5,  7,  8,  9,  9,  9, 13 },
312    {  2,  3,  5,  9, 16, 21, 25, 28, 33 },
313    {  2,  4,  5,  8, 12, 14, 17, 19, 26 },
314    {  2,  4,  6,  8, 12, 13, 13, 15, 20 },
315    {  2,  4,  7, 12, 20, 26, 30, 32, 35 },
316    {  3,  3,  5,  6, 12, 14, 16, 19, 34 },
317    {  3,  4,  4,  5,  7,  9, 10, 11, 48 },
318    {  3,  4,  5,  6,  8,  9, 10, 11, 16 },
319    {  3,  5,  5,  5,  7,  9, 10, 13, 35 },
320    {  3,  5,  5,  7, 10, 12, 13, 15, 49 },
321    {  3,  5,  7,  7,  8,  7,  9, 12, 21 },
322    {  3,  5,  7,  8, 12, 14, 15, 15, 24 },
323    {  3,  5,  7, 10, 16, 21, 24, 27, 44 },
324    {  3,  5,  8, 14, 21, 26, 28, 29, 42 },
325    {  3,  6, 10, 13, 18, 19, 20, 22, 27 },
326    {  3,  6, 11, 16, 24, 27, 28, 29, 31 },
327    {  4,  5,  4,  3,  4,  6,  8, 11, 18 },
328    {  4,  6,  5,  6,  9, 10, 12, 14, 20 },
329    {  4,  6,  7,  6,  6,  6,  7,  8, 46 },
330    {  4,  6,  7,  9, 13, 16, 18, 20, 48 },
331    {  4,  6,  7,  9, 14, 17, 20, 23, 31 },
332    {  4,  6,  9, 11, 14, 15, 15, 17, 21 },
333    {  4,  8, 13, 20, 27, 32, 35, 36, 38 },
334    {  5,  6,  6,  4,  5,  6,  7,  6,  6 },
335    {  5,  7,  7,  8,  9,  9, 10, 12, 49 },
336    {  5,  8,  9,  9, 10, 11, 12, 13, 42 },
337    {  5,  8, 10, 12, 15, 16, 17, 19, 42 },
338    {  5,  8, 12, 17, 26, 31, 32, 33, 44 },
339    {  5,  9, 13, 16, 20, 22, 23, 23, 35 },
340    {  6,  8,  8,  7,  6,  5,  6,  8, 15 },
341    {  6,  8,  8,  8,  9, 10, 12, 16, 24 },
342    {  6,  8,  8,  9, 10, 10, 11, 11, 13 },
343    {  6,  8, 10, 13, 19, 21, 24, 26, 32 },
344    {  6,  9, 10, 11, 13, 13, 14, 16, 49 },
345    {  7,  9,  9, 10, 13, 14, 16, 19, 27 },
346    {  7, 10, 12, 13, 16, 16, 17, 17, 27 },
347    {  7, 10, 12, 14, 17, 19, 20, 22, 48 },
348    {  8,  9, 10,  9, 10, 11, 11, 11, 19 },
349    {  8, 11, 12, 12, 13, 13, 13, 13, 17 },
350    {  8, 11, 13, 14, 16, 17, 19, 20, 27 },
351    {  8, 12, 17, 22, 26, 28, 29, 30, 33 },
352    { 10, 14, 16, 19, 21, 22, 22, 24, 28 },
353    { 10, 15, 17, 18, 21, 22, 23, 25, 43 }
354};
355
356static const uint8_t atrac3p_ct_restricted_to_full[2][7][4] = {
357    { { 0, 5, 4, 1 },
358      { 0, 1, 2, 3 },
359      { 3, 0, 4, 2 },
360      { 4, 0, 1, 2 },
361      { 1, 0, 4, 3 },
362      { 3, 0, 2, 1 },
363      { 0, 3, 1, 2 } },
364    { { 4, 0, 1, 2 },
365      { 0, 3, 2, 1 },
366      { 0, 1, 2, 3 },
367      { 0, 1, 2, 4 },
368      { 0, 1, 2, 3 },
369      { 1, 4, 2, 0 },
370      { 0, 1, 2, 3 } }
371};
372
373/** Tables for spectrum coding */
374
375/* If the first entry of a subtable is negative, it means
376 * that another VLC is to be reused. */
377static const int8_t atrac3p_spectra_cbs[][12] = {
378    {  1,  0,  0,  1,  7,  0, 19,  5, 13, 21,  6,  8 },
379    {  0,  1,  0,  4, 11,  0,  1, 29,  6, 20,  7,  2 },
380    {  0,  0,  1,  8,  0, 13, 18,  7,  2,  0,  0,  0 },
381    {  0,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
382    {  0,  0,  1,  3,  5,  8, 12, 23, 72, 68, 31,  2 },
383    {  0,  1,  3,  2,  6,  4,  0,  0,  0,  0,  0,  0 },
384    {  0,  1,  2,  2,  2,  6, 14, 21, 13,  2,  0,  0 },
385    {  1,  0,  0,  0,  8,  1, 18,  9, 22, 10, 12,  0 },
386    {  0,  0,  0,  0, 16, 11, 32, 19,  1,  2,  0,  0 },
387    {  1,  0,  0,  4,  2,  2,  9, 15, 12,  4,  0,  0 },
388    {  0,  1,  0,  4,  3,  5, 16, 28, 34, 26,  4,  0 },
389    {  0,  0,  0,  0,  9, 12, 16, 44, 98, 42,  4,  0 },
390    {  0,  1,  1,  2,  2,  5,  7, 21, 54, 85, 62, 16 },
391    {  0,  0,  3,  2,  5,  7, 17, 23,  6,  0,  0,  0 },
392    {  1,  0,  0,  2,  6,  0,  7, 21, 15, 17,  8,  4 },
393    {  0,  1,  4,  0,  4,  3,  8,  3,  2,  0,  0,  0 },
394    {  0,  0,  5,  0,  4,  6, 10, 16,  8,  0,  0,  0 },
395    {  0,  3,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
396    {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
397    {  0,  0,  0,  3,  4, 12, 15, 34, 83, 75, 30,  0 },
398    {  0,  0,  0,  3, 14, 10, 20, 16,  0,  0,  0,  0 },
399    {  1,  0,  3,  1,  0,  4,  0,  0,  0,  0,  0,  0 },
400    {  1,  0,  0,  2,  2,  6, 12, 18, 19, 15,  6,  0 },
401    {  0,  0,  1,  1, 13,  1, 14, 28, 33, 81, 32, 52 },
402    {  1,  1,  1,  1,  2,  0,  0,  0,  0,  0,  0,  0 },
403    {  0,  1,  0,  2,  3,  6, 19,  9, 75, 110, 0,  0 },
404    {  0,  0,  1,  3,  5,  5, 13, 27, 69, 96, 35,  2 },
405    {  0,  0,  0,  7,  6,  8, 22, 20,  0,  0,  0,  0 },
406    {  1,  0,  0,  6,  2,  0,  0,  0, 19,  9, 24, 20 },
407    {  0,  0,  1,  2, 13,  1, 31, 13, 16,  4,  0,  0 },
408    {  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
409    {  0,  0,  0,  5,  4, 12, 17, 47, 24, 12,  0,  0 },
410    {  0,  2,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0 },
411    {  0,  0,  0,  0,  1, 16, 31, 36, 172, 0,  0,  0 },
412    {  0,  0,  0,  5, 12,  9, 12, 15, 10,  0,  0,  0 },
413    {  0,  1,  0,  6,  2,  6, 18,  4, 26,  6, 12,  0 },
414    {  1,  0,  2,  2,  0,  4,  3,  8,  3,  2,  0,  0 },
415    {  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
416    {  0,  0,  0,  4,  7, 12, 19, 21, 58,  0,  0,  0 },
417    {  1,  1,  1,  0,  3,  2,  0,  0,  0,  0,  0,  0 },
418    {  0,  0,  1,  8,  6,  8,  8,  0,  0,  0,  0,  0 },
419    {  0,  0,  1,  5,  7,  8, 16, 22,  4,  0,  0,  0 },
420    {  0,  1,  0,  8,  0,  1, 16, 10, 29, 12,  4,  0 },
421    {  0,  0,  5,  2,  2,  9,  5,  2,  0,  0,  0,  0 },
422    {  0,  0,  1,  1, 10,  4, 16, 29, 46, 75, 74,  0 },
423    {  0,  0,  0,  1,  7, 12, 36, 63,  2,  0,  0,  0 },
424    {  0,  3,  0,  1,  3,  4,  4,  0,  0,  0,  0,  0 },
425    {  0,  1,  2,  2,  6,  8,  6,  3,  1,  2,  0,  0 },
426    {  0,  1,  1,  3,  4,  6, 13, 25, 10,  0,  0,  0 },
427    {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
428    {  0,  1,  0,  4,  8,  3,  8, 24, 17, 12,  4,  0 },
429    {  0,  1,  1,  5,  2,  8,  7, 13,  8,  4,  0,  0 },
430    {  1,  0,  0,  4,  0,  4,  5,  9, 30, 45, 21,  2 },
431    {  0,  1,  3,  3,  4,  4,  0,  0,  0,  0,  0,  0 },
432    {  0,  0,  1,  3,  4,  8, 10, 36, 60, 78, 48,  8 },
433    { -6 },
434    {  1,  0,  0,  2,  6,  0, 11, 13, 12, 24,  4,  8 },
435    {  1,  0,  0,  4,  0,  8,  4,  9, 19, 13, 13, 10 },
436    {  1,  0,  0,  4,  0,  5, 12, 13, 14,  0,  0,  0 },
437    {  0,  1,  0,  4,  4,  5,  9, 30, 45, 21,  2,  0 },
438    {  0,  0,  1,  4,  4,  4, 12, 30, 73, 75, 22,  0 },
439    { -5 },
440    {  0,  0,  3,  2,  4,  8, 23, 13, 10,  0,  0,  0 },
441    { -14 },
442    {  0,  0,  1,  3, 12,  0, 30,  9, 18,  8,  0,  0 },
443    { -9 },
444    {  1,  0,  0,  4,  0,  3,  5, 16, 28, 34, 26,  4 },
445    { -11 },
446    {  0,  0,  0,  4,  4,  9, 13, 37, 76, 72, 39,  2 },
447    { -6 },
448    { -28 },
449    { -22 },
450    { -2 },
451    { -31 },
452    { -60 },
453    {  0,  0,  2,  2,  4,  5, 11, 26, 67, 78, 51, 10 },
454    { -6 },
455    { -35 },
456    {  0,  1,  0,  4,  6,  7, 10, 22, 11, 16,  4,  0 },
457    {  0,  1,  0,  0,  4, 11,  8, 28, 92, 97, 13,  2 },
458    { -59 },
459    {  1,  0,  0,  0,  4,  6,  6, 14, 42, 63, 59, 30 },
460    { -75 },
461    {  1,  0,  2,  0,  2,  2,  6, 17, 14, 13,  6,  0 },
462    {  1,  0,  0,  1,  7,  0, 20,  4, 10, 24,  2, 12 },
463    {  1,  0,  1,  3,  2,  3,  7,  4,  4,  0,  0,  0 },
464    {  0,  1,  1,  3,  4,  9, 15, 12,  4,  0,  0,  0 },
465    { -66 },
466    { -32 },
467    { -12 },
468    {  0,  1,  1,  3,  4,  6, 14, 22, 12,  0,  0,  0 },
469    { -42 },
470    {  1,  0,  1,  3,  2,  3,  7,  4,  4,  0,  0,  0 },
471    {  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0,  0 },
472    { -17 },
473    { -39 },
474    {  1,  0,  2,  0,  2,  4, 11,  9,  2,  0,  0,  0 },
475    { -62 },
476    { -28 },
477    {  1,  0,  0,  2,  3,  5, 12, 14, 18, 15,  9,  2 },
478    {  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0,  0 },
479    {  1,  1,  1,  1,  2,  0,  0,  0,  0,  0,  0,  0 },
480    {  1,  0,  0,  2,  2,  2,  6, 12, 34, 92, 54, 20 },
481    {  1,  0,  0,  3,  0,  3,  3, 10, 40, 85, 61, 50 },
482    {  0,  1,  2,  1,  4,  7, 10, 26, 12,  0,  0,  0 },
483    {  1,  0,  0,  1,  7,  0, 19,  5, 13, 23,  0, 12 },
484    { -78 },
485    {  1,  0,  0,  0,  1,  4,  9, 4, 103, 110, 24, 0 },
486    {  1,  0,  2,  2,  2,  4,  0,  0,  0,  0,  0,  0 },
487    {  0,  1,  4,  0,  0,  0,  8, 11, 24, 53, 64, 60 },
488    { -47 },
489    {  0,  1,  0,  4,  6, 10, 12,  7, 15,  4,  4,  0 },
490};
491
492static const uint8_t atrac3p_spectra_xlats[] = {
493    /* Table set A, code table 0, wordlen 1 - 81 entries */
494    0x00, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x50, 0xD0, 0x70,
495    0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0x41, 0xC1, 0x31, 0x05, 0x0D,
496    0xC3, 0x13, 0x07, 0x0F, 0x44, 0xCC, 0x11, 0x43, 0x33, 0x54, 0x74, 0xDC,
497    0xFC, 0x71, 0x15, 0x4D, 0xCD, 0x1D, 0xD3, 0xC7, 0x37, 0x3F, 0xD4, 0xF4,
498    0x5C, 0x7C, 0x51, 0xD1, 0xF1, 0x45, 0xC5, 0x35, 0xDD, 0x3D, 0x53, 0x73,
499    0xF3, 0x47, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0x55, 0xF5, 0x7D, 0xD7, 0x5F,
500    0xFF, 0xD5, 0x75, 0x5D, 0xFD, 0x57, 0xF7, 0xDF, 0x7F,
501    /* Table set A, code table 0, wordlen 2 - 81 entries */
502    0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
503    0x05, 0x45, 0x15, 0x55, 0x90, 0x80, 0x20, 0x60, 0x84, 0x94, 0x24, 0x64,
504    0x08, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x85, 0x95, 0x65, 0x09, 0x49,
505    0x19, 0x59, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56, 0x88, 0x61,
506    0x25, 0x29, 0x69, 0x5A, 0xA0, 0xA4, 0x98, 0x28, 0x68, 0xA1, 0xA5, 0x89,
507    0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x96, 0x26, 0x66, 0x0A, 0x4A, 0x1A,
508    0xA8, 0x86, 0xA6, 0x8A, 0x9A, 0x2A, 0x6A, 0xA2, 0xAA,
509    /* Table set A, code table 0, wordlen 3 - 49 entries */
510    0x00, 0x08, 0x38, 0x01, 0x09, 0x39, 0x07, 0x0F, 0x3F, 0x10, 0x30, 0x11,
511    0x31, 0x02, 0x0A, 0x3A, 0x05, 0x06, 0x0E, 0x3E, 0x17, 0x37, 0x18, 0x28,
512    0x19, 0x29, 0x2A, 0x32, 0x03, 0x0B, 0x33, 0x3B, 0x0D, 0x15, 0x3D, 0x16,
513    0x1E, 0x36, 0x1F, 0x2F, 0x12, 0x1A, 0x13, 0x2B, 0x1D, 0x35, 0x2E, 0x1B,
514    0x2D,
515    /* Table set A, code table 0, wordlen 4 - 6 entries */
516    0x01, 0x02, 0x00, 0x03, 0x04, 0x05,
517    /* Table set A, code table 0, wordlen 5 - 225 entries */
518    0x00, 0x10, 0xF0, 0x01, 0x11, 0xF1, 0x0F, 0x1F, 0xFF, 0x20, 0xE0, 0xE1,
519    0x02, 0xF2, 0x0E, 0x1E, 0x2F, 0x30, 0xD0, 0x21, 0x12, 0x22, 0xE2, 0x03,
520    0x0D, 0x2E, 0xEE, 0xFE, 0xEF, 0x40, 0xC0, 0x31, 0xC1, 0xD1, 0x32, 0xD2,
521    0x13, 0x23, 0xE3, 0xF3, 0x04, 0xF4, 0x0C, 0x1C, 0x1D, 0x2D, 0xED, 0xFD,
522    0x3E, 0xDE, 0x3F, 0xDF, 0x50, 0x60, 0x70, 0x90, 0xA0, 0xB0, 0x41, 0x51,
523    0x61, 0x71, 0x91, 0xA1, 0xB1, 0x42, 0x62, 0x92, 0xA2, 0xC2, 0x33, 0xC3,
524    0xD3, 0x14, 0x24, 0x34, 0xD4, 0xE4, 0x05, 0x15, 0xF5, 0x06, 0x16, 0x26,
525    0xE6, 0xF6, 0x07, 0x17, 0xE7, 0xF7, 0x09, 0x19, 0x29, 0xF9, 0x0A, 0x1A,
526    0x2A, 0xEA, 0xFA, 0x0B, 0x1B, 0xFB, 0x2C, 0x3C, 0xDC, 0xEC, 0xFC, 0x3D,
527    0x4D, 0xCD, 0xDD, 0x4E, 0x6E, 0x7E, 0xAE, 0xCE, 0x4F, 0x5F, 0x6F, 0x7F,
528    0x9F, 0xAF, 0xBF, 0xCF, 0x52, 0x72, 0xB2, 0x43, 0x53, 0x63, 0x73, 0x93,
529    0xA3, 0xB3, 0x44, 0x64, 0x74, 0x94, 0xA4, 0xB4, 0xC4, 0x25, 0x35, 0xA5,
530    0xC5, 0xD5, 0xE5, 0x36, 0x46, 0xB6, 0xC6, 0xD6, 0x27, 0x37, 0x47, 0xB7,
531    0xC7, 0xD7, 0x39, 0x49, 0x59, 0xC9, 0xD9, 0xE9, 0x3A, 0x4A, 0x5A, 0xCA,
532    0xDA, 0x2B, 0x3B, 0x4B, 0x6B, 0x7B, 0xDB, 0xEB, 0x4C, 0x5C, 0x6C, 0x7C,
533    0x9C, 0xAC, 0xCC, 0x5D, 0x6D, 0x7D, 0x9D, 0xAD, 0xBD, 0x5E, 0x9E, 0xBE,
534    0x54, 0x45, 0x55, 0x65, 0x75, 0x95, 0xB5, 0x56, 0x66, 0x76, 0x96, 0xA6,
535    0x57, 0x67, 0x97, 0xA7, 0x69, 0x79, 0xA9, 0xB9, 0x6A, 0x7A, 0x9A, 0xAA,
536    0xBA, 0x5B, 0x9B, 0xAB, 0xBB, 0xCB, 0xBC, 0x77, 0x99,
537    /* Table set A, code table 0, wordlen 6 - 16 entries */
538    0x01, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0D, 0x0E,
539    0x0A, 0x0B, 0x0C, 0x0F,
540    /* Table set A, code table 0, wordlen 7 - 63 entries */
541    0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x3D, 0x04, 0x05, 0x06, 0x3A, 0x3B,
542    0x3C, 0x07, 0x08, 0x09, 0x0A, 0x1A, 0x1B, 0x1C, 0x24, 0x25, 0x26, 0x36,
543    0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x19, 0x1D, 0x1E,
544    0x1F, 0x21, 0x22, 0x23, 0x27, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
545    0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,
546    0x2E, 0x18, 0x28,
547    /* Table set A, code table 1, wordlen 1 - 81 entries */
548    0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0xD0, 0x50, 0x70,
549    0xF0, 0xC4, 0x34, 0x4C, 0xCC, 0x1C, 0x41, 0xC1, 0x31, 0x05, 0x0D, 0x43,
550    0xC3, 0x13, 0x07, 0x0F, 0x44, 0x14, 0x74, 0xDC, 0x3C, 0x11, 0x1D, 0x33,
551    0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0x15, 0x35,
552    0x4D, 0xCD, 0xDD, 0x3D, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77, 0x3F, 0x51,
553    0x45, 0xC5, 0x55, 0x53, 0xF3, 0x4F, 0xCF, 0x1F, 0xFF, 0xD5, 0x75, 0xF5,
554    0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
555    /* Table set A, code table 1, wordlen 2 - 81 entries */
556    0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, 0x01, 0x41, 0x11, 0x51,
557    0x05, 0x45, 0x15, 0x55, 0x90, 0x94, 0x58, 0x91, 0x95, 0x19, 0x59, 0x06,
558    0x46, 0x16, 0x56, 0x80, 0x60, 0x84, 0x24, 0x64, 0xA4, 0x08, 0x48, 0x18,
559    0x68, 0x81, 0x21, 0x61, 0xA1, 0x85, 0x25, 0x65, 0xA5, 0x09, 0x49, 0x99,
560    0x69, 0xA9, 0x02, 0x42, 0x12, 0x52, 0x96, 0x26, 0x66, 0x1A, 0x5A, 0x20,
561    0xA0, 0x88, 0x98, 0x28, 0xA8, 0x89, 0x29, 0x82, 0x92, 0x22, 0x62, 0x86,
562    0xA6, 0x0A, 0x4A, 0x9A, 0x6A, 0xAA, 0xA2, 0x8A, 0x2A,
563    /* Table set A, code table 1, wordlen 3 - 49 entries */
564    0x00, 0x08, 0x38, 0x01, 0x07, 0x39, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
565    0x02, 0x3A, 0x06, 0x0E, 0x3E, 0x17, 0x18, 0x28, 0x11, 0x29, 0x0A, 0x32,
566    0x03, 0x0B, 0x3B, 0x05, 0x0D, 0x3D, 0x16, 0x1F, 0x37, 0x19, 0x12, 0x1A,
567    0x2A, 0x13, 0x33, 0x15, 0x35, 0x1E, 0x2E, 0x36, 0x2F, 0x1B, 0x2B, 0x1D,
568    0x2D,
569    /* Table set A, code table 1, wordlen 4 - 121 entries */
570    0x00, 0x10, 0xF0, 0x01, 0x0F, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x11, 0x02,
571    0x0E, 0x30, 0x50, 0xB0, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x05, 0x0B,
572    0x0D, 0x1E, 0xFE, 0x2F, 0xEF, 0x40, 0xC0, 0x31, 0x51, 0xB1, 0xC1, 0xD1,
573    0x22, 0x52, 0xE2, 0x13, 0xF3, 0x04, 0x15, 0xF5, 0x1B, 0xEB, 0xFB, 0x0C,
574    0x1D, 0xFD, 0x2E, 0x5E, 0xEE, 0x3F, 0x5F, 0xBF, 0xDF, 0x41, 0x32, 0x42,
575    0xB2, 0xD2, 0x23, 0x53, 0xB3, 0xE3, 0x14, 0x24, 0xE4, 0xF4, 0x25, 0x35,
576    0xD5, 0xE5, 0x2B, 0x3B, 0xDB, 0x1C, 0x2C, 0xBC, 0xEC, 0xFC, 0x2D, 0xBD,
577    0xED, 0x3E, 0x4E, 0xBE, 0xDE, 0x4F, 0xCF, 0xC2, 0x33, 0x43, 0xC3, 0xD3,
578    0x34, 0x44, 0x54, 0xB4, 0xD4, 0x45, 0x55, 0xC5, 0x4B, 0xCB, 0x3C, 0x4C,
579    0x5C, 0xCC, 0xDC, 0x3D, 0x4D, 0x5D, 0xCD, 0xDD, 0xCE, 0xC4, 0xB5, 0x5B,
580    0xBB,
581    /* Table set A, code table 1, wordlen 5 - 225 entries */
582    0x00, 0x10, 0xF0, 0x01, 0x11, 0xF1, 0x0F, 0x1F, 0xFF, 0x20, 0xE0, 0x21,
583    0xE1, 0x02, 0x12, 0xF2, 0x0E, 0x1E, 0xFE, 0x2F, 0xEF, 0x30, 0xD0, 0x31,
584    0xD1, 0x22, 0xE2, 0x03, 0x13, 0xF3, 0x0D, 0x1D, 0xFD, 0x2E, 0xEE, 0x3F,
585    0xDF, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x41, 0xC1, 0x32, 0x42, 0xC2,
586    0xD2, 0x23, 0x33, 0xD3, 0xE3, 0x04, 0x14, 0x24, 0xE4, 0xF4, 0x06, 0x16,
587    0xF6, 0x07, 0x09, 0x0A, 0x1A, 0xFA, 0x0C, 0x1C, 0x2C, 0xEC, 0xFC, 0x2D,
588    0x3D, 0xDD, 0xED, 0x3E, 0x4E, 0xCE, 0xDE, 0x4F, 0xCF, 0x50, 0xB0, 0x51,
589    0x61, 0x71, 0x91, 0xA1, 0xB1, 0x52, 0x62, 0x72, 0x92, 0xA2, 0xB2, 0x43,
590    0x53, 0x63, 0x73, 0x93, 0xA3, 0xC3, 0x34, 0x44, 0x64, 0xA4, 0xC4, 0xD4,
591    0x05, 0x15, 0x25, 0x35, 0xD5, 0xE5, 0xF5, 0x26, 0x36, 0x46, 0xC6, 0xD6,
592    0xE6, 0x17, 0x27, 0x37, 0xC7, 0xD7, 0xE7, 0xF7, 0x19, 0x29, 0x39, 0xC9,
593    0xD9, 0xE9, 0xF9, 0x2A, 0x3A, 0x4A, 0x5A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B,
594    0x2B, 0x3B, 0xCB, 0xDB, 0xEB, 0xFB, 0x3C, 0x4C, 0x6C, 0x7C, 0x9C, 0xAC,
595    0xBC, 0xCC, 0xDC, 0x4D, 0x5D, 0x6D, 0x7D, 0x9D, 0xAD, 0xBD, 0xCD, 0x5E,
596    0x6E, 0x7E, 0x9E, 0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x9F, 0xAF, 0xBF, 0xB3,
597    0x54, 0x74, 0x94, 0xB4, 0x45, 0x55, 0x65, 0x75, 0x95, 0xA5, 0xB5, 0xC5,
598    0x56, 0x66, 0x76, 0x96, 0xA6, 0xB6, 0x47, 0x57, 0x67, 0xA7, 0xB7, 0x49,
599    0x59, 0x69, 0xA9, 0xB9, 0x6A, 0x7A, 0x9A, 0xAA, 0xBA, 0x4B, 0x5B, 0x6B,
600    0x7B, 0x9B, 0xAB, 0xBB, 0x5C, 0x77, 0x97, 0x79, 0x99,
601    /* Table set A, code table 1, wordlen 6 - 256 entries */
602    0x00, 0x01, 0x10, 0x11, 0x21, 0x12, 0x20, 0x31, 0x02, 0x22, 0x13, 0x30,
603    0x41, 0x32, 0x03, 0x23, 0x14, 0x24, 0x40, 0x51, 0x61, 0xD1, 0xE1, 0x42,
604    0x52, 0xD2, 0x33, 0x43, 0xD3, 0x04, 0x34, 0x05, 0x15, 0x25, 0x16, 0x1D,
605    0x2D, 0x1E, 0x2E, 0x50, 0x60, 0xD0, 0xE0, 0xF0, 0x71, 0x81, 0xF1, 0x62,
606    0x72, 0xE2, 0xF2, 0x53, 0x63, 0xE3, 0xF3, 0x44, 0x54, 0xD4, 0xE4, 0xF4,
607    0x35, 0x45, 0x55, 0xD5, 0xE5, 0xF5, 0x06, 0x26, 0x36, 0xD6, 0x07, 0x17,
608    0x27, 0x37, 0xD7, 0x18, 0x28, 0x1C, 0x0D, 0x3D, 0x4D, 0x5D, 0x6D, 0x8D,
609    0x0E, 0x3E, 0x4E, 0x5E, 0x0F, 0x1F, 0x2F, 0x3F, 0x5F, 0x70, 0x80, 0x90,
610    0xC0, 0x91, 0xA1, 0xB1, 0xC1, 0x82, 0x92, 0xA2, 0xC2, 0x73, 0x83, 0x93,
611    0xA3, 0xC3, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xC4, 0x65, 0x75, 0x85, 0x46,
612    0x56, 0x66, 0xC6, 0xE6, 0xF6, 0x47, 0x57, 0xE7, 0xF7, 0x08, 0x38, 0x48,
613    0x58, 0x68, 0xD8, 0xE8, 0xF8, 0x09, 0x19, 0x29, 0x39, 0x59, 0xD9, 0xE9,
614    0xF9, 0x1A, 0x2A, 0x3A, 0xDA, 0xEA, 0xFA, 0x1B, 0x2B, 0xDB, 0xEB, 0xFB,
615    0x0C, 0x2C, 0x3C, 0xDC, 0xEC, 0x7D, 0x9D, 0xAD, 0xBD, 0xCD, 0x6E, 0x7E,
616    0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0x4F, 0x6F, 0x7F, 0x8F, 0xAF, 0xA0, 0xB2,
617    0xB3, 0xB4, 0x95, 0xA5, 0xB5, 0xC5, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0x67,
618    0x77, 0x87, 0x97, 0xC7, 0x78, 0x88, 0x98, 0xC8, 0x49, 0x69, 0x79, 0x89,
619    0x99, 0xC9, 0x0A, 0x4A, 0x5A, 0x6A, 0x7A, 0xCA, 0x0B, 0x3B, 0x4B, 0x5B,
620    0x6B, 0xCB, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xFC,
621    0xDD, 0xED, 0xFD, 0xDE, 0xEE, 0xFE, 0x9F, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF,
622    0xB0, 0xA7, 0xB7, 0xA8, 0xB8, 0xA9, 0xB9, 0x8A, 0x9A, 0xAA, 0xBA, 0x7B,
623    0x8B, 0x9B, 0xAB, 0xBB,
624    /* Table set A, code table 1, wordlen 7 - 63 entries */
625    0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x04, 0x3B, 0x3C, 0x3D, 0x05, 0x06,
626    0x07, 0x08, 0x38, 0x39, 0x3A, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1A,
627    0x1B, 0x24, 0x25, 0x26, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x0F, 0x10,
628    0x11, 0x12, 0x13, 0x14, 0x15, 0x19, 0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22,
629    0x23, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x16, 0x17, 0x18,
630    0x28, 0x29, 0x2A,
631    /* Table set A, code table 2, wordlen 1 - 81 entries */
632    0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0xD0, 0x70, 0x34,
633    0x1C, 0x0D, 0x13, 0x07, 0x50, 0xF0, 0x44, 0xC4, 0x14, 0x74, 0x4C, 0xCC,
634    0xDC, 0x3C, 0x41, 0xC1, 0x11, 0x31, 0x05, 0x1D, 0x43, 0xC3, 0x33, 0x37,
635    0x0F, 0x54, 0xF4, 0xFC, 0xD1, 0x71, 0x15, 0x4D, 0xCD, 0xDD, 0xD3, 0x73,
636    0x47, 0xC7, 0x77, 0x3F, 0xD4, 0x5C, 0x7C, 0x51, 0xF1, 0x45, 0xC5, 0x55,
637    0x35, 0x3D, 0x53, 0xF3, 0x17, 0x4F, 0xCF, 0x1F, 0xFF, 0x75, 0xF5, 0x5D,
638    0x7D, 0xD7, 0xF7, 0x5F, 0xDF, 0xD5, 0xFD, 0x57, 0x7F,
639    /* Table set A, code table 2, wordlen 2 - 25 entries */
640    0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x02, 0x06,
641    0x30, 0x11, 0x31, 0x0A, 0x3A, 0x0E, 0x17, 0x37, 0x32, 0x16, 0x3E, 0x12,
642    0x36,
643    /* Table set A, code table 2, wordlen 3 - 49 entries */
644    0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x30, 0x02,
645    0x3A, 0x06, 0x0E, 0x18, 0x28, 0x11, 0x31, 0x0A, 0x03, 0x05, 0x3E, 0x17,
646    0x37, 0x19, 0x29, 0x12, 0x2A, 0x32, 0x0B, 0x33, 0x3B, 0x0D, 0x15, 0x3D,
647    0x16, 0x1E, 0x36, 0x1F, 0x2F, 0x1A, 0x13, 0x1B, 0x2B, 0x1D, 0x2D, 0x35,
648    0x2E,
649    /* Table set A, code table 2, wordlen 4 - 6 entries */
650    0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
651    /* Table set A, code table 2, wordlen 5 - 8 entries */
652    0x01, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
653    /* Table set A, code table 2, wordlen 6 - 256 entries */
654    0x00, 0x01, 0x11, 0x10, 0x21, 0x12, 0x22, 0x20, 0x30, 0x31, 0x41, 0x02,
655    0x32, 0x03, 0x13, 0x23, 0x33, 0x14, 0x24, 0x40, 0x51, 0x61, 0x42, 0x52,
656    0x43, 0x53, 0x04, 0x34, 0x44, 0x15, 0x25, 0x35, 0x16, 0x26, 0x50, 0x60,
657    0x71, 0x81, 0xD1, 0x62, 0x72, 0x82, 0xD2, 0x63, 0x73, 0xD3, 0x54, 0x64,
658    0x05, 0x45, 0x55, 0x65, 0x06, 0x36, 0x46, 0x56, 0x17, 0x27, 0x37, 0x47,
659    0x18, 0x28, 0x38, 0x19, 0x1D, 0x2D, 0x3D, 0x1E, 0x70, 0x80, 0x90, 0xD0,
660    0xE0, 0x91, 0xA1, 0xB1, 0xC1, 0xE1, 0xF1, 0x92, 0xA2, 0xC2, 0xE2, 0xF2,
661    0x83, 0x93, 0xA3, 0xC3, 0xE3, 0xF3, 0x74, 0x84, 0x94, 0xA4, 0xC4, 0xD4,
662    0xE4, 0xF4, 0x75, 0x85, 0x95, 0xD5, 0xE5, 0x66, 0x76, 0x86, 0xD6, 0xE6,
663    0x07, 0x57, 0x67, 0x77, 0xD7, 0x08, 0x48, 0x58, 0x68, 0xD8, 0x09, 0x29,
664    0x39, 0x49, 0x59, 0x69, 0x1A, 0x2A, 0x3A, 0x4A, 0x1B, 0x2B, 0x1C, 0x2C,
665    0x3C, 0x4C, 0x0D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x0E, 0x2E, 0x3E, 0x4E,
666    0x5E, 0x6E, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0xA0, 0xB0, 0xC0, 0xF0, 0xB2,
667    0xB3, 0xB4, 0xA5, 0xB5, 0xC5, 0xF5, 0x96, 0xA6, 0xB6, 0xC6, 0xF6, 0x87,
668    0x97, 0xA7, 0xB7, 0xC7, 0xE7, 0xF7, 0x78, 0x88, 0x98, 0xA8, 0xC8, 0xE8,
669    0xF8, 0x79, 0x89, 0x99, 0xC9, 0xD9, 0xE9, 0xF9, 0x0A, 0x5A, 0x6A, 0x7A,
670    0x8A, 0xDA, 0xEA, 0xFA, 0x0B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0xDB,
671    0x0C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xDC, 0x9D, 0xAD, 0xBD, 0xCD, 0x7E,
672    0x8E, 0x9E, 0xAE, 0xBE, 0x0F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xB8, 0xA9,
673    0xB9, 0x9A, 0xAA, 0xBA, 0xCA, 0x9B, 0xAB, 0xBB, 0xCB, 0xEB, 0xFB, 0xAC,
674    0xBC, 0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF,
675    0xCF, 0xDF, 0xEF, 0xFF,
676    /* Table set A, code table 2, wordlen 7 - 63 entries */
677    0x00, 0x02, 0x03, 0x01, 0x05, 0x06, 0x07, 0x09, 0x36, 0x37, 0x38, 0x3A,
678    0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x04, 0x08, 0x0A, 0x0B, 0x0C, 0x0E, 0x31,
679    0x34, 0x35, 0x39, 0x0D, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x16, 0x17, 0x19,
680    0x1A, 0x1E, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x32, 0x33, 0x14,
681    0x15, 0x18, 0x1B, 0x1C, 0x1D, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
682    0x28, 0x29, 0x2A,
683    /* Table set A, code table 3, wordlen 1 - 9 entries */
684    0x00, 0x04, 0x0C, 0x01, 0x03, 0x05, 0x0D, 0x07, 0x0F,
685    /* Table set A, code table 3, wordlen 2 - 81 entries */
686    0x00, 0x40, 0x01, 0x10, 0x04, 0x80, 0x50, 0x20, 0x14, 0x05, 0x02, 0x90,
687    0x60, 0x44, 0x54, 0x24, 0x08, 0x18, 0x41, 0x11, 0x15, 0x09, 0x06, 0xA0,
688    0x84, 0x94, 0x64, 0xA4, 0x48, 0x58, 0x28, 0x51, 0x21, 0x45, 0x55, 0x25,
689    0x19, 0x12, 0x16, 0x0A, 0x1A, 0x68, 0xA8, 0x81, 0x91, 0x61, 0xA1, 0x85,
690    0x95, 0x65, 0xA5, 0x49, 0x59, 0x29, 0x69, 0x42, 0x52, 0x46, 0x56, 0x2A,
691    0x88, 0x98, 0x89, 0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86, 0x26, 0x66,
692    0x4A, 0x5A, 0x6A, 0xA2, 0x96, 0xA6, 0x8A, 0x9A, 0xAA,
693    /* Table set A, code table 3, wordlen 3 - 256 entries */
694    0x00, 0x10, 0x40, 0x50, 0x04, 0x44, 0x14, 0x54, 0x01, 0x41, 0x11, 0x51,
695    0x05, 0x45, 0x15, 0x55, 0x90, 0x20, 0x94, 0x64, 0x18, 0x21, 0x95, 0x19,
696    0x69, 0x02, 0x52, 0x06, 0x46, 0x16, 0x80, 0x60, 0x84, 0xD4, 0x24, 0x08,
697    0x48, 0x58, 0x68, 0x81, 0x91, 0x61, 0x85, 0x25, 0x65, 0xA5, 0x09, 0x49,
698    0x59, 0x29, 0x42, 0x12, 0x56, 0x96, 0xA6, 0x0A, 0x17, 0x1B, 0xD0, 0xC4,
699    0x74, 0xF4, 0x88, 0xC8, 0x28, 0xA1, 0x71, 0xC5, 0xD5, 0x75, 0x99, 0xB9,
700    0x4D, 0x1D, 0x2D, 0x6D, 0x22, 0x62, 0x66, 0x4A, 0x1A, 0x9A, 0x6A, 0x8E,
701    0x5E, 0x43, 0x23, 0x07, 0x47, 0x57, 0x6B, 0xC0, 0xA0, 0xE0, 0x70, 0xB0,
702    0xA4, 0xE4, 0x34, 0xB4, 0x98, 0xD8, 0xA8, 0x38, 0x78, 0x0C, 0x4C, 0x1C,
703    0x5C, 0x9C, 0x6C, 0x7C, 0xC1, 0xD1, 0xE1, 0x31, 0xE5, 0x35, 0xB5, 0xF5,
704    0x89, 0xA9, 0x79, 0xF9, 0x0D, 0xCD, 0x9D, 0xDD, 0xAD, 0x3D, 0x7D, 0x82,
705    0xC2, 0x92, 0xD2, 0xE2, 0x72, 0xF2, 0x86, 0xD6, 0xE6, 0x76, 0xB6, 0x8A,
706    0x5A, 0xDA, 0xEA, 0xFA, 0x4E, 0x1E, 0x9E, 0xEE, 0x03, 0x13, 0x53, 0x97,
707    0xB7, 0x0B, 0x4B, 0x8B, 0x5B, 0x9B, 0xEB, 0x7B, 0x0F, 0x4F, 0x1F, 0x5F,
708    0x9F, 0x2F, 0x3F, 0xBF, 0xE8, 0xB8, 0xF8, 0x8C, 0x2C, 0x3C, 0xFC, 0xB1,
709    0xC9, 0xD9, 0xE9, 0x39, 0x5D, 0xED, 0xBD, 0xA2, 0x32, 0x26, 0x36, 0x2A,
710    0xAA, 0xBA, 0x0E, 0x2E, 0x6E, 0x83, 0xC3, 0x93, 0x63, 0xB3, 0xA7, 0x37,
711    0x30, 0xF0, 0xCC, 0xDC, 0xAC, 0xEC, 0xBC, 0xF1, 0x8D, 0xFD, 0xB2, 0xC6,
712    0xF6, 0xCA, 0x3A, 0x7A, 0xCE, 0xDE, 0xAE, 0x3E, 0x7E, 0xBE, 0xFE, 0xD3,
713    0xA3, 0xE3, 0x33, 0x73, 0xF3, 0x87, 0xC7, 0xD7, 0x27, 0x67, 0xE7, 0x77,
714    0xF7, 0xCB, 0xDB, 0x2B, 0xAB, 0x3B, 0xBB, 0xFB, 0x8F, 0xCF, 0xDF, 0x6F,
715    0xAF, 0xEF, 0x7F, 0xFF,
716    /* Table set A, code table 3, wordlen 4 - 6 entries */
717    0x01, 0x00, 0x02, 0x03, 0x04, 0x05,
718    /* Table set A, code table 3, wordlen 5 - 225 entries */
719    0x00, 0xF0, 0x0F, 0x10, 0x01, 0xFF, 0x20, 0xE0, 0x11, 0xF1, 0x0E, 0x1F,
720    0x30, 0x40, 0xD0, 0x21, 0xE1, 0x02, 0x12, 0x22, 0xE2, 0xF2, 0x03, 0x13,
721    0x1E, 0x2E, 0x3E, 0xEE, 0xFE, 0x2F, 0xEF, 0xD2, 0x43, 0xF3, 0x04, 0x0D,
722    0x2D, 0x3D, 0x3F, 0xDF, 0x50, 0x60, 0x70, 0x90, 0xB0, 0x31, 0x41, 0x91,
723    0xA1, 0xC1, 0xD1, 0x42, 0xA2, 0xC2, 0x23, 0x33, 0xE3, 0x24, 0x34, 0xB4,
724    0xD4, 0xF4, 0x05, 0x15, 0x45, 0xE5, 0x16, 0x36, 0x56, 0xA6, 0xC6, 0xD6,
725    0xF6, 0x57, 0xC7, 0xF7, 0x09, 0x29, 0x49, 0x59, 0x69, 0xF9, 0x0A, 0x2A,
726    0x3A, 0x4A, 0xDA, 0xEA, 0xFA, 0x0B, 0x2B, 0xAB, 0xEB, 0xFB, 0x0C, 0x1C,
727    0x2C, 0x3C, 0x4C, 0x5C, 0xCC, 0xDC, 0xFC, 0x1D, 0x4D, 0x6D, 0xBD, 0xCD,
728    0xED, 0xFD, 0x4E, 0x6E, 0xCE, 0xDE, 0x7F, 0xA0, 0xC0, 0x51, 0x61, 0x71,
729    0xB1, 0x32, 0x52, 0x62, 0x72, 0x92, 0xB2, 0x53, 0x63, 0x73, 0x93, 0xA3,
730    0xB3, 0xC3, 0xD3, 0x14, 0x44, 0x54, 0x64, 0x74, 0x94, 0xA4, 0xC4, 0xE4,
731    0x25, 0x35, 0x55, 0x65, 0x75, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xF5, 0x06,
732    0x26, 0x46, 0x66, 0x76, 0x96, 0xB6, 0xE6, 0x07, 0x17, 0x27, 0x37, 0x47,
733    0x67, 0x77, 0x97, 0xA7, 0xB7, 0xD7, 0xE7, 0x19, 0x39, 0x79, 0x99, 0xA9,
734    0xB9, 0xC9, 0xD9, 0xE9, 0x1A, 0x5A, 0x6A, 0x7A, 0x9A, 0xAA, 0xBA, 0xCA,
735    0x1B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x9B, 0xBB, 0xCB, 0xDB, 0x6C, 0x7C,
736    0x9C, 0xAC, 0xBC, 0xEC, 0x5D, 0x7D, 0x9D, 0xAD, 0xDD, 0x5E, 0x7E, 0x9E,
737    0xAE, 0xBE, 0x4F, 0x5F, 0x6F, 0x9F, 0xAF, 0xBF, 0xCF,
738    /* Table set A, code table 3, wordlen 6 - 256 entries */
739    0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x22, 0x31, 0x41, 0x32,
740    0x13, 0x23, 0x30, 0x40, 0x51, 0x42, 0x03, 0x33, 0x43, 0x04, 0x14, 0x24,
741    0x34, 0x15, 0x25, 0x50, 0x61, 0x71, 0xD1, 0x52, 0x62, 0x72, 0xD2, 0x53,
742    0x63, 0xD3, 0x44, 0x54, 0x64, 0x05, 0x35, 0x45, 0x55, 0x16, 0x26, 0x36,
743    0x46, 0x17, 0x27, 0x1D, 0x2D, 0x3D, 0x60, 0x70, 0xD0, 0x81, 0x91, 0xA1,
744    0xC1, 0xE1, 0xF1, 0x82, 0x92, 0xC2, 0xE2, 0xF2, 0x73, 0x83, 0xE3, 0xF3,
745    0x74, 0x84, 0xC4, 0xD4, 0xE4, 0xF4, 0x65, 0x75, 0x85, 0xD5, 0xE5, 0x06,
746    0x56, 0x66, 0xD6, 0xE6, 0x07, 0x37, 0x47, 0x57, 0x67, 0xD7, 0xE7, 0x18,
747    0x28, 0x38, 0x48, 0x58, 0xD8, 0x19, 0x29, 0x2A, 0x1C, 0x2C, 0x0D, 0x4D,
748    0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
749    0x1F, 0x2F, 0x3F, 0x80, 0x90, 0xA0, 0xC0, 0xE0, 0xF0, 0xB1, 0xA2, 0xB2,
750    0x93, 0xA3, 0xB3, 0xC3, 0x94, 0xA4, 0xB4, 0x95, 0xA5, 0xB5, 0xC5, 0xF5,
751    0x76, 0x86, 0x96, 0xA6, 0xC6, 0xF6, 0x77, 0x87, 0x97, 0xA7, 0xC7, 0xF7,
752    0x08, 0x68, 0x78, 0x88, 0x98, 0xC8, 0xE8, 0xF8, 0x09, 0x39, 0x49, 0x59,
753    0x69, 0x79, 0x89, 0xD9, 0xE9, 0xF9, 0x0A, 0x1A, 0x3A, 0x4A, 0x5A, 0x6A,
754    0xDA, 0xEA, 0xFA, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0xDB, 0xEB, 0xFB, 0x0C,
755    0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xDC, 0xEC, 0xAD, 0xBD, 0xCD,
756    0xDD, 0xED, 0x0E, 0x8E, 0x9E, 0xAE, 0xBE, 0x0F, 0x4F, 0x5F, 0x6F, 0x7F,
757    0x8F, 0x9F, 0xAF, 0xB0, 0xB6, 0xB7, 0xA8, 0xB8, 0x99, 0xA9, 0xB9, 0xC9,
758    0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0x0B, 0x6B, 0x7B, 0x8B, 0x9B, 0xCB,
759    0xAC, 0xBC, 0xCC, 0xFC, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF, 0xCF, 0xDF,
760    0xEF, 0xFF, 0xAB, 0xBB,
761    /* Table set A, code table 3, wordlen 7 - 63 entries */
762    0x00, 0x01, 0x02, 0x03, 0x3D, 0x3E, 0x3F, 0x04, 0x05, 0x06, 0x3A, 0x3B,
763    0x3C, 0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D,
764    0x0E, 0x0F, 0x10, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x23, 0x24, 0x25,
765    0x26, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x11, 0x12, 0x13, 0x14, 0x15,
766    0x16, 0x17, 0x18, 0x1F, 0x21, 0x22, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
767    0x2D, 0x2E, 0x2F,
768    /* Table set A, code table 4, wordlen 1 - 81 entries */
769    0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0x50, 0xD0, 0x70,
770    0xF0, 0xC4, 0x34, 0x4C, 0xCC, 0x1C, 0x41, 0xC1, 0x31, 0x05, 0x0D, 0x43,
771    0xC3, 0x13, 0x07, 0x0F, 0x44, 0x14, 0x74, 0xDC, 0x3C, 0x11, 0x1D, 0x33,
772    0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0xC5, 0x15,
773    0x35, 0x4D, 0xCD, 0xDD, 0x3D, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77, 0x1F,
774    0x3F, 0x51, 0x45, 0x55, 0xD5, 0x75, 0xF5, 0x5D, 0x7D, 0xFD, 0x53, 0xF3,
775    0x57, 0xD7, 0xF7, 0x4F, 0xCF, 0x5F, 0xDF, 0x7F, 0xFF,
776    /* Table set A, code table 4, wordlen 2 - 81 entries */
777    0x00, 0x40, 0x01, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
778    0x05, 0x45, 0x15, 0x55, 0x59, 0x80, 0x90, 0x20, 0x60, 0x84, 0x94, 0x24,
779    0x64, 0x08, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x61, 0x85, 0x95, 0x25,
780    0x65, 0x09, 0x49, 0x19, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56,
781    0xA0, 0xA4, 0x68, 0xA1, 0xA5, 0x99, 0x29, 0x69, 0x96, 0x66, 0x4A, 0x1A,
782    0x5A, 0x88, 0x98, 0x28, 0x89, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86, 0x26,
783    0xA6, 0x0A, 0x9A, 0x2A, 0x6A, 0xA8, 0xA2, 0x8A, 0xAA,
784    /* Table set A, code table 4, wordlen 3 - 7 entries */
785    0x00, 0x07, 0x01, 0x02, 0x06, 0x03, 0x05,
786    /* Table set A, code table 4, wordlen 4 - 121 entries */
787    0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x21,
788    0xE1, 0x02, 0x12, 0xF2, 0x0E, 0x1E, 0xFE, 0x2F, 0xEF, 0x30, 0x50, 0xD0,
789    0xD1, 0x22, 0xE2, 0x03, 0x13, 0xF3, 0x0D, 0x1D, 0x2D, 0xFD, 0x2E, 0xEE,
790    0x3F, 0xDF, 0x40, 0xB0, 0xC0, 0x31, 0x41, 0x51, 0xB1, 0xC1, 0x32, 0xB2,
791    0xC2, 0xD2, 0x23, 0xB3, 0xD3, 0xE3, 0x04, 0x14, 0xE4, 0xF4, 0x05, 0x15,
792    0xD5, 0xE5, 0xF5, 0x0B, 0x1B, 0x2B, 0x3B, 0xEB, 0xFB, 0x0C, 0x1C, 0x2C,
793    0xFC, 0x3D, 0x5D, 0xED, 0x3E, 0x4E, 0x5E, 0xBE, 0xDE, 0x4F, 0x5F, 0xBF,
794    0xCF, 0x42, 0x52, 0x33, 0x53, 0xC3, 0x24, 0xB4, 0xD4, 0x25, 0x35, 0xC5,
795    0x4B, 0xCB, 0xDB, 0x3C, 0x4C, 0x5C, 0xDC, 0xEC, 0x4D, 0xBD, 0xCD, 0xDD,
796    0xCE, 0x43, 0x34, 0x44, 0x54, 0xC4, 0x45, 0x55, 0xB5, 0x5B, 0xBB, 0xBC,
797    0xCC,
798    /* Table set A, code table 4, wordlen 5 - 8 entries */
799    0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x06, 0x07,
800    /* Table set A, code table 4, wordlen 6 - 256 entries */
801    0x02, 0x00, 0x30, 0x21, 0x31, 0x41, 0x61, 0x12, 0x22, 0x42, 0x62, 0x43,
802    0x53, 0x24, 0x45, 0x26, 0x27, 0x10, 0x40, 0xB0, 0x01, 0x11, 0x81, 0x32,
803    0x52, 0x72, 0x92, 0x03, 0x13, 0x33, 0x63, 0x14, 0x34, 0x54, 0x64, 0x74,
804    0x05, 0x15, 0x25, 0x35, 0x55, 0x65, 0x06, 0x46, 0x56, 0x57, 0x67, 0x88,
805    0x20, 0x51, 0x91, 0xD1, 0xF2, 0x23, 0x83, 0x93, 0x04, 0x44, 0x84, 0x94,
806    0x75, 0x85, 0xC5, 0x36, 0x66, 0x96, 0xB6, 0x07, 0x37, 0x97, 0x08, 0x28,
807    0x38, 0x48, 0x68, 0x09, 0x69, 0x79, 0x0A, 0x2A, 0x1B, 0x9B, 0x2C, 0x4D,
808    0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xC0, 0xD0, 0xE0, 0xF0, 0x71, 0xA1,
809    0xB1, 0xC1, 0xE1, 0xF1, 0x82, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0x73, 0xA3,
810    0xB3, 0xC3, 0xD3, 0xE3, 0xF3, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, 0x95,
811    0xA5, 0xB5, 0xD5, 0xE5, 0xF5, 0x16, 0x76, 0x86, 0xA6, 0xC6, 0xD6, 0xE6,
812    0xF6, 0x17, 0x47, 0x77, 0x87, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, 0x18,
813    0x58, 0x78, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, 0x19, 0x29, 0x39,
814    0x49, 0x59, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, 0x1A, 0x3A,
815    0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
816    0x0B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0xAB, 0xBB, 0xCB, 0xDB,
817    0xEB, 0xFB, 0x0C, 0x1C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC,
818    0xBC, 0xCC, 0xDC, 0xEC, 0xFC, 0x0D, 0x1D, 0x2D, 0x3D, 0x5D, 0x6D, 0x7D,
819    0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, 0x0E, 0x1E, 0x2E, 0x3E,
820    0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
821    0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF,
822    0xCF, 0xDF, 0xEF, 0xFF,
823    /* Table set A, code table 4, wordlen 7 - 63 entries */
824    0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x06, 0x08, 0x36, 0x38,
825    0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x07, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
826    0x35, 0x37, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x24, 0x25, 0x27,
827    0x2A, 0x34, 0x16, 0x19, 0x1C, 0x23, 0x26, 0x28, 0x29, 0x2B, 0x2D, 0x2E,
828    0x2F, 0x30, 0x31, 0x32, 0x33, 0x17, 0x18, 0x1A, 0x1B, 0x1D, 0x1E, 0x1F,
829    0x21, 0x22, 0x2C,
830    /* Table set A, code table 5, wordlen 1 - 81 entries */
831    0x00, 0x40, 0xC0, 0x30, 0x04, 0x01, 0x03, 0x10, 0x0C, 0xD0, 0x70, 0x34,
832    0x1C, 0x0D, 0x07, 0x50, 0xF0, 0x44, 0xC4, 0x14, 0x4C, 0xCC, 0x3C, 0x41,
833    0xC1, 0x11, 0x31, 0x05, 0x43, 0xC3, 0x13, 0x33, 0x0F, 0x74, 0xDC, 0x1D,
834    0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0xC5, 0x15,
835    0x35, 0x4D, 0xCD, 0xDD, 0x3D, 0x53, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77,
836    0x4F, 0x1F, 0x3F, 0x51, 0x45, 0x55, 0xF3, 0xCF, 0xFF, 0xD5, 0x75, 0xF5,
837    0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
838    /* Table set A, code table 5, wordlen 2 - 25 entries */
839    0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x02, 0x06,
840    0x30, 0x11, 0x31, 0x0A, 0x3A, 0x0E, 0x17, 0x37, 0x32, 0x16, 0x3E, 0x12,
841    0x36,
842    /* Table set A, code table 5, wordlen 3 - 7 entries */
843    0x00, 0x01, 0x02, 0x06, 0x07, 0x03, 0x05,
844    /* Table set A, code table 5, wordlen 4 - 121 entries */
845    0x00, 0x01, 0x0F, 0x1F, 0x10, 0xE0, 0xF0, 0x11, 0xF1, 0x2F, 0xFF, 0x20,
846    0x21, 0xE1, 0x02, 0x12, 0xF2, 0x03, 0xF3, 0x0E, 0x2E, 0xFE, 0x3F, 0x30,
847    0x40, 0xD0, 0xC1, 0xD1, 0x22, 0xC2, 0x33, 0xE3, 0x0C, 0xCC, 0x0D, 0x1D,
848    0x2D, 0xFD, 0x1E, 0x3E, 0x5E, 0xEF, 0xC0, 0x52, 0xB2, 0xD2, 0x43, 0xC3,
849    0xD3, 0x24, 0x45, 0xF5, 0x4B, 0x5B, 0xFB, 0x1C, 0x3D, 0xBD, 0xDD, 0xEE,
850    0xBF, 0xCF, 0xDF, 0x50, 0xB0, 0x31, 0x41, 0x51, 0xB1, 0x32, 0x42, 0xE2,
851    0x13, 0x23, 0x53, 0xB3, 0x04, 0x14, 0x34, 0x44, 0x54, 0xB4, 0xC4, 0xD4,
852    0xE4, 0xF4, 0x05, 0x15, 0x25, 0x35, 0x55, 0xB5, 0xC5, 0xD5, 0xE5, 0x0B,
853    0x1B, 0x2B, 0x3B, 0xBB, 0xCB, 0xDB, 0xEB, 0x2C, 0x3C, 0x4C, 0x5C, 0xBC,
854    0xDC, 0xEC, 0xFC, 0x4D, 0x5D, 0xCD, 0xED, 0x4E, 0xBE, 0xCE, 0xDE, 0x4F,
855    0x5F,
856    /* Table set A, code table 5, wordlen 5 - 8 entries */
857    0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x04, 0x05,
858    /* Table set A, code table 5, wordlen 6 - 31 entries */
859    0x04, 0x00, 0x01, 0x02, 0x03, 0x1C, 0x1D, 0x1E, 0x1F, 0x05, 0x06, 0x07,
860    0x18, 0x19, 0x1B, 0x08, 0x09, 0x0E, 0x13, 0x15, 0x16, 0x17, 0x1A, 0x0A,
861    0x0B, 0x0C, 0x0D, 0x0F, 0x11, 0x12, 0x14,
862    /* Table set A, code table 5, wordlen 7 - 63 entries */
863    0x00, 0x01, 0x02, 0x3D, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x06, 0x3A, 0x3B,
864    0x3C, 0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D,
865    0x0E, 0x0F, 0x1A, 0x1B, 0x1C, 0x24, 0x25, 0x26, 0x31, 0x32, 0x33, 0x34,
866    0x35, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1D, 0x1E,
867    0x1F, 0x21, 0x22, 0x23, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x16,
868    0x28, 0x29, 0x2A,
869    /* Table set A, code table 6, wordlen 1 - 81 entries */
870    0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0x70, 0x50, 0xD0,
871    0xF0, 0x44, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0x31, 0x05, 0x0D, 0x13,
872    0x07, 0x0F, 0x74, 0xCC, 0xDC, 0xFC, 0x41, 0xC1, 0x11, 0x43, 0xC3, 0x33,
873    0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0x51, 0xD1, 0x71, 0xF1, 0x45, 0xC5, 0x15,
874    0x35, 0x4D, 0xCD, 0x1D, 0x3D, 0x53, 0xD3, 0x73, 0xF3, 0x47, 0xC7, 0x17,
875    0x37, 0x4F, 0xCF, 0x1F, 0x3F, 0x55, 0xD5, 0x75, 0xF5, 0x5D, 0xDD, 0xFD,
876    0x57, 0xD7, 0x77, 0xF7, 0xFF, 0x7D, 0x5F, 0xDF, 0x7F,
877    /* Table set A, code table 6, wordlen 2 - 25 entries */
878    0x00, 0x08, 0x38, 0x01, 0x07, 0x39, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
879    0x02, 0x3A, 0x06, 0x0E, 0x17, 0x37, 0x11, 0x0A, 0x32, 0x16, 0x3E, 0x12,
880    0x36,
881    /* Table set A, code table 6, wordlen 3 - 256 entries */
882    0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x01, 0x41, 0x05, 0x45, 0x55,
883    0x54, 0x11, 0x51, 0x15, 0x80, 0x90, 0x60, 0x24, 0x64, 0xA4, 0x48, 0x61,
884    0x95, 0x25, 0xA5, 0x02, 0x42, 0x52, 0x16, 0x56, 0x20, 0x84, 0x94, 0x18,
885    0x58, 0x81, 0x91, 0x85, 0x65, 0x09, 0x49, 0x19, 0x59, 0x99, 0x29, 0x69,
886    0x79, 0x5D, 0x12, 0x62, 0x06, 0x46, 0x86, 0x66, 0x1A, 0x5A, 0x6A, 0x47,
887    0x17, 0xC0, 0xA0, 0xE0, 0xC4, 0xD4, 0x74, 0x08, 0x78, 0x0C, 0x4C, 0x1C,
888    0x5C, 0xD1, 0x21, 0xE1, 0x71, 0xC5, 0xE5, 0x75, 0xB5, 0x89, 0xBD, 0x92,
889    0x22, 0x96, 0xA6, 0x36, 0x0A, 0x4A, 0x8A, 0x9A, 0x2A, 0x7A, 0xDE, 0x6E,
890    0x43, 0x13, 0x53, 0x23, 0x07, 0x77, 0x4B, 0x1B, 0x9B, 0x6B, 0x2F, 0xD0,
891    0x30, 0x70, 0xE4, 0x34, 0xF4, 0xC8, 0x98, 0x28, 0x68, 0xA8, 0xE8, 0x38,
892    0xB8, 0xF8, 0x9C, 0x2C, 0x6C, 0x7C, 0xA1, 0xB1, 0xD5, 0x35, 0xC9, 0xD9,
893    0xA9, 0xE9, 0x39, 0xB9, 0xF9, 0xCD, 0x1D, 0x2D, 0xAD, 0x7D, 0xC2, 0xD2,
894    0xA2, 0xB2, 0xF2, 0xC6, 0x26, 0x76, 0xB6, 0xDA, 0xAA, 0xEA, 0x3A, 0xFA,
895    0x0E, 0x4E, 0x2E, 0x7E, 0xBE, 0xFE, 0x03, 0x83, 0x63, 0xA3, 0xB3, 0x87,
896    0x57, 0x97, 0xD7, 0x27, 0x0B, 0x8B, 0x5B, 0x2B, 0xAB, 0xCF, 0x1F, 0x9F,
897    0x7F, 0xBF, 0xB0, 0xF0, 0xB4, 0x88, 0xD8, 0x8C, 0xCC, 0xDC, 0xAC, 0xEC,
898    0x3C, 0xBC, 0xFC, 0xC1, 0x31, 0xF1, 0xF5, 0x0D, 0x4D, 0x8D, 0x9D, 0xDD,
899    0x6D, 0xED, 0x3D, 0xFD, 0x82, 0xE2, 0x32, 0x72, 0xD6, 0xE6, 0xF6, 0xCA,
900    0xBA, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xAE, 0xEE, 0x3E, 0xC3, 0x93, 0xD3,
901    0xE3, 0x33, 0x73, 0xF3, 0xC7, 0x67, 0xA7, 0xE7, 0x37, 0xB7, 0xF7, 0xCB,
902    0xDB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB, 0x0F, 0x4F, 0x8F, 0x5F, 0xDF, 0x6F,
903    0xAF, 0xEF, 0x3F, 0xFF,
904    /* Table set A, code table 6, wordlen 4 - 121 entries */
905    0x00, 0x10, 0x20, 0xE0, 0xF0, 0x02, 0x0E, 0xEF, 0x30, 0x01, 0x11, 0x21,
906    0x31, 0xF1, 0x12, 0xF2, 0x1E, 0xEE, 0xDF, 0xFF, 0x40, 0xC0, 0xD0, 0xD1,
907    0xE1, 0x22, 0x32, 0x42, 0xD2, 0xE2, 0x03, 0x13, 0x23, 0xB3, 0xC3, 0xE3,
908    0xF3, 0xE4, 0x05, 0xF5, 0x2B, 0x0C, 0xFC, 0x1D, 0x2D, 0xBD, 0xDD, 0xFD,
909    0x2E, 0x4E, 0xDE, 0xFE, 0x0F, 0x1F, 0x2F, 0x3F, 0x50, 0xB0, 0x41, 0x51,
910    0xB1, 0xC1, 0x52, 0xB2, 0xC2, 0x33, 0x43, 0x53, 0xD3, 0x04, 0x14, 0x24,
911    0x34, 0x44, 0x54, 0xB4, 0xC4, 0xD4, 0xF4, 0x15, 0x25, 0x35, 0x45, 0x55,
912    0xB5, 0xC5, 0xD5, 0xE5, 0x0B, 0x1B, 0x3B, 0x4B, 0x5B, 0xBB, 0xCB, 0xDB,
913    0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0xBC, 0xCC, 0xDC, 0xEC, 0x0D,
914    0x3D, 0x4D, 0x5D, 0xCD, 0xED, 0x3E, 0x5E, 0xBE, 0xCE, 0x4F, 0xCF, 0x5F,
915    0xBF,
916    /* Table set A, code table 6, wordlen 5 - 15 entries */
917    0x00, 0x01, 0x0F, 0x0E, 0x02, 0x03, 0x0D, 0x04, 0x06, 0x0A, 0x0C, 0x05,
918    0x07, 0x09, 0x0B,
919    /* Table set A, code table 6, wordlen 6 - 31 entries */
920    0x00, 0x01, 0x1F, 0x02, 0x1E, 0x03, 0x04, 0x0F, 0x11, 0x1C, 0x1D, 0x05,
921    0x06, 0x07, 0x08, 0x18, 0x19, 0x1A, 0x1B, 0x09, 0x0A, 0x0B, 0x15, 0x16,
922    0x17, 0x0C, 0x13, 0x14, 0x0D, 0x0E, 0x12,
923    /* Table set A, code table 6, wordlen 7 - 63 entries */
924    0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
925    0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1A, 0x26, 0x34,
926    0x35, 0x36, 0x37, 0x38, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x19, 0x1B,
927    0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x2D, 0x2E,
928    0x2F, 0x30, 0x31, 0x32, 0x33, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29,
929    0x2A, 0x2B, 0x2C,
930    /* Table set A, code table 7, wordlen 1 - 4 entries */
931    0x00, 0x01, 0x02, 0x03,
932    /* Table set A, code table 7, wordlen 2 - 81 entries */
933    0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x05,
934    0x15, 0x51, 0x45, 0x55, 0x80, 0x90, 0x20, 0x64, 0x08, 0x19, 0x02, 0x06,
935    0x60, 0x84, 0x94, 0x24, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x61, 0x85,
936    0x95, 0x25, 0x65, 0x09, 0x49, 0x59, 0x42, 0x12, 0x52, 0x46, 0x16, 0x56,
937    0xA0, 0xA4, 0x98, 0x28, 0x68, 0xA1, 0xA5, 0x99, 0x29, 0x69, 0x96, 0x26,
938    0x66, 0x0A, 0x4A, 0x1A, 0x5A, 0x88, 0xA8, 0x89, 0xA9, 0x82, 0x92, 0x22,
939    0x62, 0x86, 0xA6, 0x2A, 0x6A, 0xA2, 0x8A, 0x9A, 0xAA,
940    /* Table set A, code table 7, wordlen 3 - 49 entries */
941    0x00, 0x08, 0x38, 0x01, 0x39, 0x07, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
942    0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x32, 0x0D, 0x16, 0x3E, 0x37,
943    0x18, 0x28, 0x19, 0x29, 0x12, 0x2A, 0x03, 0x3B, 0x05, 0x15, 0x1E, 0x1F,
944    0x2F, 0x1A, 0x0B, 0x2B, 0x33, 0x35, 0x3D, 0x2E, 0x36, 0x13, 0x1B, 0x1D,
945    0x2D,
946    /* Table set A, code table 7, wordlen 4 - 121 entries */
947    0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
948    0xF2, 0x0E, 0x21, 0xE1, 0x12, 0xE2, 0x1E, 0x2E, 0xFE, 0x2F, 0xEF, 0x30,
949    0x50, 0xB0, 0xC0, 0xD0, 0x31, 0xB1, 0xD1, 0x22, 0xD2, 0x03, 0x13, 0xE3,
950    0xF3, 0xF4, 0x05, 0xE5, 0xF5, 0x0B, 0x1B, 0x0C, 0x0D, 0x1D, 0x2D, 0xFD,
951    0x3E, 0xEE, 0x3F, 0x5F, 0xDF, 0x40, 0x41, 0x51, 0xC1, 0x32, 0x42, 0x52,
952    0xB2, 0xC2, 0x23, 0x33, 0xB3, 0xC3, 0xD3, 0x04, 0x14, 0x24, 0xD4, 0xE4,
953    0x15, 0x25, 0xC5, 0xD5, 0x2B, 0x3B, 0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x5C,
954    0xEC, 0xFC, 0x3D, 0x5D, 0xDD, 0xED, 0x4E, 0x5E, 0xBE, 0xCE, 0xDE, 0x4F,
955    0xBF, 0xCF, 0x43, 0x53, 0x34, 0x54, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0xB5,
956    0x4B, 0x5B, 0xCB, 0xDB, 0x4C, 0xBC, 0xCC, 0xDC, 0x4D, 0xBD, 0xCD, 0x44,
957    0xBB,
958    /* Table set A, code table 7, wordlen 5 - 15 entries */
959    0x00, 0x01, 0x0E, 0x0F, 0x02, 0x03, 0x0D, 0x04, 0x06, 0x0A, 0x0C, 0x05,
960    0x07, 0x09, 0x0B,
961    /* Table set A, code table 7, wordlen 6 - 256 entries */
962    0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x41, 0x22,
963    0x03, 0x13, 0x23, 0x14, 0x40, 0x51, 0x61, 0x32, 0x42, 0x33, 0x04, 0x24,
964    0x15, 0x16, 0x50, 0x60, 0xD0, 0x71, 0x81, 0xD1, 0xE1, 0xF1, 0x52, 0x62,
965    0x72, 0xD2, 0x43, 0x53, 0x63, 0xD3, 0x34, 0x44, 0x54, 0x05, 0x25, 0x35,
966    0x45, 0x06, 0x26, 0x36, 0x17, 0x27, 0x18, 0x0D, 0x1D, 0x2D, 0x3D, 0x1E,
967    0x2E, 0x1F, 0x70, 0x80, 0xE0, 0xF0, 0x91, 0xA1, 0xC1, 0x82, 0x92, 0xC2,
968    0xE2, 0xF2, 0x73, 0x83, 0x93, 0xE3, 0xF3, 0x64, 0x74, 0x84, 0xD4, 0xE4,
969    0xF4, 0x55, 0x65, 0xD5, 0xE5, 0xF5, 0x46, 0x56, 0x66, 0xD6, 0x07, 0x37,
970    0x47, 0x57, 0x08, 0x28, 0x38, 0x48, 0x19, 0x29, 0x39, 0x1A, 0x2A, 0x1B,
971    0x1C, 0x2C, 0x3C, 0x4D, 0x5D, 0x6D, 0x0E, 0x3E, 0x4E, 0x5E, 0x0F, 0x2F,
972    0x3F, 0x4F, 0x90, 0xA0, 0xB0, 0xC0, 0xB1, 0xA2, 0xB2, 0xA3, 0xB3, 0xC3,
973    0x94, 0xA4, 0xB4, 0xC4, 0x75, 0x85, 0x95, 0xA5, 0xC5, 0x76, 0x86, 0x96,
974    0xE6, 0xF6, 0x67, 0x77, 0x87, 0xD7, 0xE7, 0xF7, 0x58, 0x68, 0x78, 0x88,
975    0xD8, 0xE8, 0xF8, 0x09, 0x49, 0x59, 0x69, 0xD9, 0xE9, 0xF9, 0x0A, 0x3A,
976    0x4A, 0x5A, 0xDA, 0xEA, 0x0B, 0x2B, 0x3B, 0x4B, 0xDB, 0x0C, 0x4C, 0x5C,
977    0x6C, 0xDC, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0x6E, 0x7E, 0x8E, 0x9E,
978    0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xB5, 0xA6, 0xB6, 0xC6,
979    0x97, 0xA7, 0xC7, 0x98, 0xA8, 0xB8, 0xC8, 0x79, 0x89, 0x99, 0xA9, 0xB9,
980    0xC9, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xCA, 0xFA, 0x5B, 0x6B, 0x7B, 0x8B,
981    0xCB, 0xEB, 0xFB, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xEC, 0xFC, 0xDD, 0xED,
982    0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF, 0xCF, 0xDF, 0xB7, 0xBA, 0x9B, 0xAB,
983    0xBB, 0xCC, 0xEF, 0xFF,
984    /* Table set B, code table 0, wordlen 1 - 81 entries */
985    0x00, 0x01, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x50, 0xD0, 0x70,
986    0xF0, 0x34, 0x1C, 0x05, 0x0D, 0x13, 0x07, 0x0F, 0x44, 0xC4, 0x14, 0x4C,
987    0xCC, 0x3C, 0x41, 0xC1, 0x11, 0x31, 0x43, 0xC3, 0x33, 0x54, 0x74, 0xDC,
988    0xFC, 0x71, 0x15, 0x4D, 0x1D, 0xD3, 0xC7, 0x37, 0x3F, 0xD4, 0xF4, 0x5C,
989    0x7C, 0x51, 0xD1, 0xF1, 0x45, 0xC5, 0x55, 0x35, 0xCD, 0xDD, 0x3D, 0x53,
990    0x73, 0xF3, 0x47, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0xFF, 0xF5, 0x7D, 0xD7,
991    0x5F, 0xD5, 0x75, 0x5D, 0xFD, 0x57, 0xF7, 0xDF, 0x7F,
992    /* Table set B, code table 0, wordlen 2 - 81 entries */
993    0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x05,
994    0x15, 0x80, 0x51, 0x45, 0x55, 0x90, 0x20, 0x60, 0x24, 0x08, 0x18, 0x09,
995    0x02, 0x06, 0x84, 0x94, 0x64, 0x48, 0x58, 0x81, 0x91, 0x21, 0x61, 0x95,
996    0x25, 0x65, 0x19, 0x59, 0x42, 0x12, 0x46, 0x16, 0x56, 0xA0, 0xA4, 0x28,
997    0x68, 0x85, 0xA5, 0x49, 0x29, 0x69, 0x52, 0x0A, 0x1A, 0x5A, 0x88, 0x98,
998    0xA1, 0x89, 0x99, 0xA9, 0x22, 0x62, 0x96, 0x26, 0x66, 0x4A, 0x6A, 0xA8,
999    0x82, 0x92, 0xA2, 0x86, 0xA6, 0x8A, 0x9A, 0x2A, 0xAA,
1000    /* Table set B, code table 0, wordlen 3 - 49 entries */
1001    0x00, 0x08, 0x38, 0x01, 0x07, 0x30, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x18,
1002    0x28, 0x31, 0x02, 0x3A, 0x03, 0x05, 0x06, 0x0E, 0x17, 0x37, 0x11, 0x19,
1003    0x29, 0x0A, 0x32, 0x0B, 0x3B, 0x0D, 0x15, 0x3D, 0x3E, 0x1F, 0x2F, 0x12,
1004    0x1A, 0x2A, 0x13, 0x1B, 0x2B, 0x33, 0x1D, 0x2D, 0x35, 0x16, 0x1E, 0x2E,
1005    0x36,
1006    /* Table set B, code table 0, wordlen 4 - 121 entries */
1007    0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
1008    0xF2, 0x0E, 0x21, 0xE1, 0x12, 0xE2, 0x1E, 0x2E, 0xFE, 0x2F, 0xEF, 0x30,
1009    0x50, 0xB0, 0xC0, 0xD0, 0x31, 0xB1, 0xD1, 0x22, 0xD2, 0x03, 0x13, 0xE3,
1010    0xF3, 0xF4, 0x05, 0xE5, 0xF5, 0x0B, 0x1B, 0x0C, 0x0D, 0x1D, 0x2D, 0xFD,
1011    0x3E, 0xEE, 0x3F, 0x5F, 0xDF, 0x40, 0x41, 0x51, 0xC1, 0x32, 0x42, 0x52,
1012    0xB2, 0xC2, 0x23, 0x33, 0xB3, 0xC3, 0xD3, 0x04, 0x14, 0x24, 0xD4, 0xE4,
1013    0x15, 0x25, 0xC5, 0xD5, 0x2B, 0x3B, 0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x5C,
1014    0xEC, 0xFC, 0x3D, 0x5D, 0xDD, 0xED, 0x4E, 0x5E, 0xBE, 0xCE, 0xDE, 0x4F,
1015    0xBF, 0xCF, 0x43, 0x53, 0x34, 0x54, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0xB5,
1016    0x4B, 0x5B, 0xCB, 0xDB, 0x4C, 0xBC, 0xCC, 0xDC, 0x4D, 0xBD, 0xCD, 0x44,
1017    0xBB,
1018    /* Table set B, code table 0, wordlen 5 - 225 entries */
1019    0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
1020    0x0E, 0x30, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x0D, 0x1E, 0xFE, 0x2F,
1021    0xEF, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x31, 0xD1, 0x22, 0x32, 0xD2,
1022    0xE2, 0x13, 0x23, 0xE3, 0xF3, 0x04, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x1D,
1023    0x2D, 0xFD, 0x2E, 0x3E, 0xEE, 0x3F, 0xDF, 0x50, 0xB0, 0x41, 0x51, 0x61,
1024    0x71, 0x91, 0xA1, 0xB1, 0xC1, 0x42, 0x62, 0x72, 0x92, 0xA2, 0xC2, 0x33,
1025    0x93, 0xA3, 0xD3, 0x14, 0x24, 0xE4, 0xF4, 0x05, 0x15, 0xF5, 0x16, 0x26,
1026    0xD6, 0xE6, 0xF6, 0x17, 0x27, 0xD7, 0xE7, 0xF7, 0x19, 0x29, 0x39, 0xE9,
1027    0xF9, 0x1A, 0x2A, 0xEA, 0xFA, 0x0B, 0x1B, 0xFB, 0x1C, 0x2C, 0xEC, 0xFC,
1028    0x3D, 0x7D, 0x9D, 0xDD, 0xED, 0x4E, 0x6E, 0x7E, 0x9E, 0xAE, 0xCE, 0xDE,
1029    0x4F, 0x5F, 0x6F, 0x7F, 0x9F, 0xAF, 0xBF, 0xCF, 0x52, 0xB2, 0x43, 0x53,
1030    0x63, 0x73, 0xB3, 0xC3, 0x34, 0x44, 0x64, 0x74, 0x94, 0xA4, 0xB4, 0xC4,
1031    0xD4, 0x25, 0x35, 0x65, 0x75, 0x95, 0xA5, 0xD5, 0xE5, 0x36, 0x46, 0x56,
1032    0x66, 0xA6, 0xB6, 0xC6, 0x37, 0x47, 0x57, 0xB7, 0xC7, 0x49, 0x59, 0x69,
1033    0xB9, 0xC9, 0xD9, 0x3A, 0x4A, 0x5A, 0x6A, 0xAA, 0xBA, 0xCA, 0xDA, 0x2B,
1034    0x3B, 0x6B, 0x7B, 0x9B, 0xAB, 0xDB, 0xEB, 0x3C, 0x4C, 0x6C, 0x7C, 0x9C,
1035    0xAC, 0xCC, 0xDC, 0x4D, 0x5D, 0x6D, 0xAD, 0xBD, 0xCD, 0x5E, 0xBE, 0x54,
1036    0x45, 0x55, 0xB5, 0xC5, 0x76, 0x96, 0x67, 0x77, 0x97, 0xA7, 0x79, 0x99,
1037    0xA9, 0x7A, 0x9A, 0x4B, 0x5B, 0xBB, 0xCB, 0x5C, 0xBC,
1038    /* Table set B, code table 0, wordlen 7 - 63 entries */
1039    0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
1040    0x08, 0x38, 0x39, 0x3A, 0x3B, 0x09, 0x0A, 0x0B, 0x0C, 0x19, 0x1A, 0x1B,
1041    0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x33,
1042    0x34, 0x35, 0x36, 0x37, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x2D,
1043    0x2E, 0x2F, 0x30, 0x31, 0x32, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29,
1044    0x2A, 0x2B, 0x2C,
1045    /* Table set B, code table 1, wordlen 2 - 81 entries */
1046    0x00, 0x40, 0x04, 0x01, 0x10, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
1047    0x05, 0x45, 0x15, 0x55, 0x80, 0x90, 0x20, 0x60, 0x84, 0x94, 0x24, 0x64,
1048    0x08, 0x48, 0x18, 0x81, 0x91, 0x61, 0x85, 0x95, 0x25, 0x65, 0x09, 0x49,
1049    0x19, 0x59, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56, 0xA4, 0x58,
1050    0x68, 0x21, 0xA5, 0x29, 0x69, 0x1A, 0x5A, 0xA0, 0x88, 0x98, 0x28, 0xA1,
1051    0x89, 0x99, 0xA9, 0x92, 0x22, 0x62, 0x86, 0x96, 0x26, 0x66, 0x0A, 0x4A,
1052    0x6A, 0xA8, 0x82, 0xA2, 0xA6, 0x8A, 0x9A, 0x2A, 0xAA,
1053    /* Table set B, code table 1, wordlen 4 - 121 entries */
1054    0x00, 0x10, 0xF0, 0x01, 0x0F, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x11, 0x02,
1055    0x0E, 0x30, 0x50, 0xB0, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x05, 0x0B,
1056    0x0D, 0x1E, 0xFE, 0x2F, 0xEF, 0x40, 0xC0, 0x31, 0x51, 0xB1, 0xC1, 0xD1,
1057    0x22, 0x52, 0xE2, 0x13, 0xF3, 0x04, 0x15, 0xF5, 0x1B, 0xEB, 0xFB, 0x0C,
1058    0x1D, 0xFD, 0x2E, 0x5E, 0xEE, 0x3F, 0x5F, 0xBF, 0xDF, 0x41, 0x32, 0x42,
1059    0xB2, 0xD2, 0x23, 0x53, 0xB3, 0xE3, 0x14, 0x24, 0xE4, 0xF4, 0x25, 0x35,
1060    0xD5, 0xE5, 0x2B, 0x3B, 0xDB, 0x1C, 0x2C, 0xBC, 0xEC, 0xFC, 0x2D, 0xBD,
1061    0xED, 0x3E, 0x4E, 0xBE, 0xDE, 0x4F, 0xCF, 0xC2, 0x33, 0x43, 0xC3, 0xD3,
1062    0x34, 0x44, 0x54, 0xB4, 0xD4, 0x45, 0x55, 0xC5, 0x4B, 0xCB, 0x3C, 0x4C,
1063    0x5C, 0xCC, 0xDC, 0x3D, 0x4D, 0x5D, 0xCD, 0xDD, 0xCE, 0xC4, 0xB5, 0x5B,
1064    0xBB,
1065    /* Table set B, code table 1, wordlen 6 - 256 entries */
1066    0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x41, 0x22,
1067    0x32, 0x03, 0x13, 0x23, 0x14, 0x40, 0x51, 0x61, 0x42, 0x52, 0x33, 0x43,
1068    0x04, 0x24, 0x34, 0x15, 0x25, 0x16, 0x50, 0x60, 0x70, 0x71, 0x81, 0xD1,
1069    0xE1, 0x62, 0x72, 0x82, 0xD2, 0x53, 0x63, 0x73, 0xD3, 0x44, 0x54, 0x05,
1070    0x35, 0x45, 0x55, 0x06, 0x26, 0x36, 0x07, 0x17, 0x27, 0x37, 0x18, 0x28,
1071    0x19, 0x1D, 0x2D, 0x3D, 0x1E, 0x2E, 0x1F, 0x80, 0x90, 0xD0, 0xE0, 0xF0,
1072    0x91, 0xA1, 0xB1, 0xC1, 0xF1, 0x92, 0xA2, 0xB2, 0xC2, 0xE2, 0xF2, 0x83,
1073    0x93, 0xA3, 0xC3, 0xE3, 0xF3, 0x64, 0x74, 0x84, 0x94, 0xD4, 0xE4, 0xF4,
1074    0x65, 0x75, 0x85, 0xD5, 0xE5, 0x46, 0x56, 0x66, 0x76, 0xD6, 0xE6, 0x47,
1075    0x57, 0x67, 0xD7, 0x08, 0x38, 0x48, 0x58, 0x09, 0x29, 0x39, 0x49, 0x0A,
1076    0x1A, 0x2A, 0x3A, 0x1B, 0x2B, 0x0C, 0x1C, 0x2C, 0x3C, 0x0D, 0x4D, 0x5D,
1077    0x6D, 0x7D, 0x0E, 0x3E, 0x4E, 0x5E, 0x6E, 0x0F, 0x2F, 0x3F, 0x4F, 0xA0,
1078    0xB0, 0xC0, 0xB3, 0xA4, 0xB4, 0xC4, 0x95, 0xA5, 0xB5, 0xC5, 0xF5, 0x86,
1079    0x96, 0xA6, 0xB6, 0xC6, 0xF6, 0x77, 0x87, 0x97, 0xA7, 0xC7, 0xE7, 0xF7,
1080    0x68, 0x78, 0x88, 0x98, 0xD8, 0xE8, 0xF8, 0x59, 0x69, 0x79, 0x89, 0xD9,
1081    0xE9, 0xF9, 0x4A, 0x5A, 0x6A, 0x7A, 0xDA, 0xEA, 0x0B, 0x3B, 0x4B, 0x5B,
1082    0xDB, 0xEB, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0xDC, 0x8D, 0x9D, 0xAD, 0xBD,
1083    0xCD, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xB7,
1084    0xA8, 0xB8, 0xC8, 0x99, 0xA9, 0xB9, 0xC9, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA,
1085    0xFA, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xFB, 0x9C, 0xAC, 0xBC,
1086    0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xAF, 0xBF,
1087    0xCF, 0xDF, 0xEF, 0xFF,
1088    /* Table set B, code table 2, wordlen 6 - 256 entries */
1089    0x00, 0x01, 0x10, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x22, 0x03,
1090    0x13, 0x40, 0x41, 0x51, 0x32, 0x42, 0x23, 0x33, 0x04, 0x14, 0x24, 0x15,
1091    0x50, 0x61, 0x71, 0xD1, 0xE1, 0x52, 0x62, 0xD2, 0x43, 0x53, 0xD3, 0x34,
1092    0x44, 0x05, 0x25, 0x35, 0x06, 0x16, 0x26, 0x17, 0x18, 0x1D, 0x2D, 0x3D,
1093    0x1E, 0x2E, 0x60, 0x70, 0x80, 0xD0, 0xE0, 0xF0, 0x81, 0x91, 0xA1, 0xC1,
1094    0xF1, 0x72, 0x82, 0x92, 0xC2, 0xE2, 0xF2, 0x63, 0x73, 0xE3, 0xF3, 0x54,
1095    0x64, 0x74, 0xD4, 0xE4, 0xF4, 0x45, 0x55, 0x65, 0xD5, 0xE5, 0xF5, 0x36,
1096    0x46, 0x56, 0xD6, 0xE6, 0x07, 0x27, 0x37, 0x47, 0xD7, 0x08, 0x28, 0x38,
1097    0x19, 0x29, 0x1A, 0x1B, 0x1C, 0x2C, 0x0D, 0x4D, 0x5D, 0x6D, 0x7D, 0x0E,
1098    0x3E, 0x4E, 0x5E, 0x6E, 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x90, 0xA0, 0xC0,
1099    0xB1, 0xA2, 0xB2, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0x84, 0x94, 0xA4, 0xC4,
1100    0x75, 0x85, 0x95, 0xC5, 0x66, 0x76, 0x86, 0x96, 0xC6, 0xF6, 0x57, 0x67,
1101    0x77, 0xE7, 0xF7, 0x48, 0x58, 0x68, 0x78, 0xD8, 0xE8, 0xF8, 0x09, 0x39,
1102    0x49, 0x59, 0xD9, 0xE9, 0xF9, 0x0A, 0x2A, 0x3A, 0x4A, 0xDA, 0xEA, 0x0B,
1103    0x2B, 0x3B, 0xDB, 0xEB, 0x0C, 0x3C, 0x4C, 0x5C, 0x6C, 0xDC, 0x8D, 0x9D,
1104    0xAD, 0xBD, 0xCD, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0x5F, 0x6F, 0x7F,
1105    0x8F, 0x9F, 0xAF, 0xB0, 0xB4, 0xA5, 0xB5, 0xA6, 0xB6, 0x87, 0x97, 0xA7,
1106    0xB7, 0xC7, 0x88, 0x98, 0xA8, 0xC8, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xC9,
1107    0x5A, 0x6A, 0x7A, 0x9A, 0xCA, 0xFA, 0x4B, 0x5B, 0x6B, 0x7B, 0xCB, 0xFB,
1108    0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xDE,
1109    0xEE, 0xFE, 0xBF, 0xCF, 0xDF, 0xEF, 0xB8, 0xB9, 0x8A, 0xAA, 0xBA, 0x8B,
1110    0x9B, 0xAB, 0xBB, 0xFF,
1111    /* Table set B, code table 3, wordlen 2 - 81 entries */
1112    0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x41, 0x11, 0x05, 0x80,
1113    0x54, 0x51, 0x45, 0x15, 0x55, 0x02, 0x90, 0x20, 0x60, 0x84, 0x24, 0x08,
1114    0x18, 0x09, 0x12, 0x06, 0xA0, 0x94, 0x64, 0x48, 0x58, 0x81, 0x91, 0x21,
1115    0x61, 0x85, 0x95, 0x25, 0x65, 0x49, 0x19, 0x59, 0x42, 0x52, 0x46, 0x16,
1116    0x56, 0x0A, 0xA4, 0x28, 0x68, 0xA1, 0xA5, 0x29, 0x69, 0x26, 0x4A, 0x1A,
1117    0x5A, 0x88, 0x98, 0xA8, 0x89, 0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86,
1118    0x96, 0x66, 0x9A, 0x2A, 0x6A, 0xA2, 0xA6, 0x8A, 0xAA,
1119    /* Table set B, code table 3, wordlen 3 - 256 entries */
1120    0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
1121    0x05, 0x45, 0x15, 0x55, 0x20, 0x95, 0x65, 0x49, 0x59, 0x52, 0x46, 0x16,
1122    0x80, 0x90, 0x60, 0x84, 0x94, 0x24, 0x64, 0xA4, 0x08, 0x48, 0x18, 0x58,
1123    0x81, 0x91, 0x21, 0x61, 0x85, 0x25, 0x09, 0x19, 0x69, 0x02, 0x42, 0x12,
1124    0x06, 0x56, 0x5A, 0x57, 0xD0, 0x74, 0x68, 0x5C, 0xC1, 0xD5, 0xA5, 0xE5,
1125    0x75, 0xB5, 0xF5, 0x99, 0xD9, 0xA9, 0xE9, 0x79, 0xB9, 0xF9, 0x1D, 0x5D,
1126    0x9D, 0xDD, 0x6D, 0xAD, 0xED, 0x7D, 0xBD, 0xFD, 0x82, 0x92, 0xD2, 0x62,
1127    0x96, 0xD6, 0x26, 0x66, 0xA6, 0xE6, 0x76, 0xB6, 0xF6, 0x0A, 0x4A, 0x1A,
1128    0x9A, 0xDA, 0x2A, 0x6A, 0xAA, 0xEA, 0x7A, 0xBA, 0xFA, 0x5E, 0x9E, 0xDE,
1129    0x6E, 0xAE, 0xEE, 0x7E, 0xBE, 0xFE, 0x03, 0x13, 0x53, 0x17, 0x97, 0xD7,
1130    0x67, 0xA7, 0xE7, 0x77, 0xB7, 0xF7, 0x5B, 0x9B, 0xDB, 0x6B, 0xAB, 0xEB,
1131    0x7B, 0xBB, 0xFB, 0x5F, 0x9F, 0xDF, 0x6F, 0xAF, 0xEF, 0x7F, 0xBF, 0xFF,
1132    0xC0, 0xA0, 0xE0, 0x30, 0xC4, 0xD4, 0xE4, 0x34, 0xB4, 0xF4, 0x88, 0xC8,
1133    0x98, 0xD8, 0x28, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8, 0x0C, 0x4C, 0x1C,
1134    0x9C, 0xDC, 0x6C, 0xAC, 0xEC, 0x7C, 0xBC, 0xFC, 0xD1, 0xA1, 0xE1, 0x31,
1135    0x71, 0xB1, 0xF1, 0xC5, 0x35, 0x89, 0xC9, 0x29, 0x39, 0x0D, 0x4D, 0x8D,
1136    0xCD, 0x2D, 0x3D, 0x22, 0xA2, 0xE2, 0x72, 0xB2, 0xF2, 0x86, 0xC6, 0x36,
1137    0x8A, 0xCA, 0x3A, 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x2E, 0x3E, 0x43, 0x83,
1138    0x93, 0xD3, 0x23, 0x63, 0xA3, 0xE3, 0x73, 0xB3, 0xF3, 0x07, 0x47, 0x87,
1139    0xC7, 0x27, 0x37, 0x4B, 0x8B, 0xCB, 0x1B, 0x2B, 0x3B, 0x4F, 0x8F, 0xCF,
1140    0x1F, 0x70, 0xB0, 0xF0, 0x8C, 0xCC, 0x2C, 0x3C, 0xC2, 0x32, 0xC3, 0x0F,
1141    0x2F, 0x3F, 0x33, 0x0B,
1142    /* Table set B, code table 3, wordlen 5 - 225 entries */
1143    0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x02, 0x0E, 0x1F, 0xFF, 0x20,
1144    0xE0, 0x21, 0xF2, 0xFE, 0xEF, 0x30, 0xD0, 0xE1, 0x12, 0x22, 0xE2, 0x03,
1145    0x0D, 0x1D, 0x1E, 0x2E, 0xEE, 0x2F, 0xDF, 0x40, 0x60, 0x70, 0x90, 0xA0,
1146    0xB0, 0xC0, 0x31, 0x71, 0x91, 0xC1, 0xD1, 0x32, 0xD2, 0x13, 0xE3, 0xF3,
1147    0x04, 0x05, 0x06, 0x07, 0x17, 0xF7, 0x09, 0x19, 0x0A, 0x1A, 0xFA, 0x0C,
1148    0x1C, 0x2D, 0xED, 0xFD, 0x3E, 0x7E, 0xDE, 0x3F, 0x6F, 0x7F, 0x9F, 0xAF,
1149    0xCF, 0x50, 0x41, 0x51, 0x61, 0xA1, 0xB1, 0x62, 0x72, 0x92, 0xA2, 0xC2,
1150    0x23, 0x33, 0x63, 0x73, 0x93, 0xA3, 0xD3, 0x14, 0x24, 0x34, 0xD4, 0xE4,
1151    0xF4, 0x15, 0xF5, 0x16, 0x26, 0xD6, 0xE6, 0xF6, 0x27, 0x37, 0x47, 0xE7,
1152    0x29, 0x39, 0xC9, 0xD9, 0xE9, 0xF9, 0x2A, 0xEA, 0x0B, 0x1B, 0xFB, 0x2C,
1153    0x7C, 0xEC, 0xFC, 0x3D, 0x4D, 0x6D, 0x7D, 0xDD, 0x4E, 0x5E, 0x6E, 0x9E,
1154    0xAE, 0xCE, 0x4F, 0x5F, 0x42, 0x52, 0xB2, 0x43, 0xB3, 0xC3, 0x44, 0x64,
1155    0x74, 0x94, 0xA4, 0x25, 0x35, 0x65, 0x75, 0x95, 0xA5, 0xE5, 0x36, 0x46,
1156    0x66, 0x76, 0x96, 0xA6, 0xB6, 0xC6, 0x57, 0xA7, 0xB7, 0xC7, 0xD7, 0x59,
1157    0xA9, 0xB9, 0x3A, 0x4A, 0x6A, 0xCA, 0xDA, 0x2B, 0x3B, 0x6B, 0x9B, 0xAB,
1158    0xDB, 0xEB, 0x3C, 0x6C, 0x9C, 0xAC, 0xCC, 0xDC, 0x5D, 0x9D, 0xAD, 0xBD,
1159    0xCD, 0xBE, 0xBF, 0x53, 0x54, 0xB4, 0xC4, 0x45, 0x55, 0xB5, 0xC5, 0xD5,
1160    0x56, 0x67, 0x77, 0x97, 0x49, 0x69, 0x79, 0x99, 0x5A, 0x7A, 0x9A, 0xAA,
1161    0xBA, 0x4B, 0x5B, 0x7B, 0xBB, 0xCB, 0x4C, 0x5C, 0xBC,
1162    /* Table set B, code table 3, wordlen 7 - 63 entries */
1163    0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x3D, 0x04, 0x05, 0x06, 0x3A, 0x3B,
1164    0x3C, 0x07, 0x08, 0x09, 0x0A, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x22, 0x23,
1165    0x25, 0x26, 0x27, 0x37, 0x38, 0x39, 0x0B, 0x0D, 0x0E, 0x0F, 0x1E, 0x1F,
1166    0x21, 0x24, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x0C, 0x10, 0x11, 0x12,
1167    0x13, 0x15, 0x29, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x14, 0x16, 0x17,
1168    0x18, 0x28, 0x2A,
1169    /* Table set B, code table 4, wordlen 1 - 81 entries */
1170    0x00, 0x01, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x03, 0x50, 0xD0, 0x70,
1171    0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0xC1, 0x11, 0x31, 0x05, 0x0D,
1172    0xC3, 0x13, 0x33, 0x07, 0x0F, 0x44, 0xCC, 0x41, 0x43, 0x54, 0x74, 0xDC,
1173    0xFC, 0x71, 0x15, 0x4D, 0x1D, 0x37, 0x3F, 0xD4, 0xF4, 0x5C, 0x7C, 0x51,
1174    0xD1, 0xF1, 0x45, 0xC5, 0x35, 0xCD, 0xDD, 0x3D, 0x53, 0xD3, 0x73, 0xF3,
1175    0x47, 0xC7, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0x55, 0xFF, 0xD5, 0x75, 0xF5,
1176    0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
1177    /* Table set B, code table 4, wordlen 2 - 25 entries */
1178    0x00, 0x07, 0x08, 0x38, 0x01, 0x39, 0x0F, 0x10, 0x09, 0x3F, 0x30, 0x31,
1179    0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x3E, 0x37, 0x12, 0x32, 0x16,
1180    0x36,
1181    /* Table set B, code table 4, wordlen 3 - 49 entries */
1182    0x00, 0x07, 0x08, 0x38, 0x01, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x30, 0x31,
1183    0x02, 0x3A, 0x06, 0x0E, 0x17, 0x37, 0x18, 0x28, 0x11, 0x19, 0x29, 0x0A,
1184    0x03, 0x0B, 0x3B, 0x05, 0x0D, 0x3D, 0x3E, 0x1F, 0x2F, 0x12, 0x1A, 0x2A,
1185    0x32, 0x13, 0x33, 0x15, 0x35, 0x16, 0x1E, 0x2E, 0x36, 0x1B, 0x2B, 0x1D,
1186    0x2D,
1187    /* Table set B, code table 4, wordlen 7 - 63 entries */
1188    0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
1189    0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x1A, 0x1B, 0x25, 0x26,
1190    0x34, 0x35, 0x36, 0x37, 0x38, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x19,
1191    0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x27, 0x2E, 0x2F, 0x30,
1192    0x31, 0x32, 0x33, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29, 0x2A,
1193    0x2B, 0x2C, 0x2D,
1194    /* Table set B, code table 5, wordlen 2 - 25 entries */
1195    0x00, 0x01, 0x08, 0x38, 0x07, 0x39, 0x0F, 0x30, 0x09, 0x3F, 0x10, 0x31,
1196    0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x3E, 0x37, 0x12, 0x32, 0x16,
1197    0x36,
1198    /* Table set B, code table 5, wordlen 3 - 7 entries */
1199    0x00, 0x07, 0x01, 0x02, 0x03, 0x05, 0x06,
1200    /* Table set B, code table 5, wordlen 6 - 31 entries */
1201    0x00, 0x01, 0x1F, 0x02, 0x1E, 0x03, 0x04, 0x0D, 0x1D, 0x05, 0x06, 0x07,
1202    0x0E, 0x0F, 0x11, 0x12, 0x13, 0x1A, 0x1B, 0x1C, 0x08, 0x09, 0x0C, 0x14,
1203    0x15, 0x16, 0x17, 0x18, 0x19, 0x0A, 0x0B,
1204    /* Table set B, code table 6, wordlen 2 - 81 entries */
1205    0x00, 0x40, 0x01, 0x10, 0x04, 0x02, 0x80, 0x50, 0x90, 0x05, 0x06, 0x20,
1206    0x60, 0x44, 0x14, 0x54, 0x24, 0x08, 0x18, 0x41, 0x11, 0x15, 0x09, 0xA0,
1207    0x84, 0x94, 0x64, 0xA4, 0x28, 0x51, 0x45, 0x55, 0x19, 0x12, 0x16, 0x0A,
1208    0x1A, 0x48, 0x58, 0x68, 0x81, 0x91, 0x21, 0x61, 0x85, 0x95, 0x25, 0x65,
1209    0x49, 0x59, 0x29, 0x69, 0x42, 0x46, 0x56, 0x88, 0x98, 0xA8, 0xA1, 0xA5,
1210    0x99, 0xA9, 0x52, 0x22, 0x26, 0x66, 0x4A, 0x5A, 0x2A, 0x6A, 0x89, 0x82,
1211    0x92, 0x62, 0x86, 0x96, 0xA6, 0x8A, 0xAA, 0xA2, 0x9A,
1212    /* Table set B, code table 6, wordlen 3 - 7 entries */
1213    0x00, 0x01, 0x07, 0x02, 0x03, 0x05, 0x06,
1214    /* Table set B, code table 6, wordlen 4 - 6 entries */
1215    0x01, 0x00, 0x02, 0x05, 0x03, 0x04,
1216    /* Table set B, code table 6, wordlen 5 - 225 entries */
1217    0x00, 0xF0, 0x01, 0x10, 0x0F, 0x11, 0xF1, 0x20, 0xE0, 0x02, 0x0E, 0x1F,
1218    0xFF, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x07, 0x0A, 0x0D, 0x1E, 0xFE, 0x2F,
1219    0xEF, 0x30, 0x70, 0x90, 0xA0, 0xC0, 0x71, 0x91, 0xC1, 0xD1, 0x32, 0x92,
1220    0xE2, 0x03, 0x13, 0x63, 0x04, 0x06, 0xE6, 0xE7, 0xF7, 0x09, 0x19, 0x39,
1221    0xFA, 0x0C, 0x1C, 0xDD, 0xED, 0xFD, 0x2E, 0x7E, 0x9E, 0x3F, 0x9F, 0x40,
1222    0x50, 0x60, 0xB0, 0x31, 0x41, 0x61, 0xA1, 0xB1, 0x22, 0x42, 0x72, 0xA2,
1223    0xB2, 0xC2, 0xD2, 0x23, 0x33, 0x73, 0xA3, 0xC3, 0xD3, 0xE3, 0xF3, 0x14,
1224    0x24, 0x34, 0x44, 0x74, 0xD4, 0xE4, 0x05, 0x25, 0x45, 0x65, 0x95, 0xA5,
1225    0x16, 0x26, 0x46, 0x76, 0xA6, 0xB6, 0xC6, 0xD6, 0xF6, 0x17, 0x27, 0x37,
1226    0x47, 0x67, 0xA7, 0xD7, 0x29, 0x69, 0xB9, 0xD9, 0xE9, 0xF9, 0x1A, 0x2A,
1227    0x3A, 0x9A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B, 0x3B, 0x6B, 0xEB, 0xFB, 0x2C,
1228    0x6C, 0xEC, 0xFC, 0x1D, 0x2D, 0x4D, 0x6D, 0x9D, 0xAD, 0x3E, 0x4E, 0x6E,
1229    0xAE, 0xCE, 0xEE, 0x4F, 0x5F, 0x6F, 0xDF, 0x51, 0x52, 0x62, 0x43, 0x93,
1230    0xB3, 0x54, 0x94, 0xA4, 0xF4, 0x15, 0x75, 0xB5, 0xE5, 0xF5, 0x36, 0x56,
1231    0x66, 0x96, 0x57, 0x77, 0x49, 0x59, 0xA9, 0xC9, 0x4A, 0x5A, 0x6A, 0x7A,
1232    0xAA, 0xBA, 0x2B, 0x4B, 0x7B, 0x9B, 0xAB, 0xDB, 0x3C, 0x4C, 0x7C, 0x9C,
1233    0xAC, 0xBC, 0xCC, 0x3D, 0x5D, 0x7D, 0xBD, 0xCD, 0x5E, 0xBE, 0xDE, 0xBF,
1234    0xCF, 0x53, 0x64, 0xB4, 0xC4, 0x35, 0x55, 0xC5, 0xD5, 0x97, 0xB7, 0xC7,
1235    0x79, 0x99, 0x5B, 0xBB, 0xCB, 0x5C, 0xDC, 0x7F, 0xAF,
1236    /* Table set B, code table 6, wordlen 6 - 256 entries */
1237    0x00, 0x10, 0x01, 0x11, 0x21, 0x02, 0x12, 0x20, 0x22, 0x13, 0x30, 0x31,
1238    0x41, 0xD1, 0xE1, 0x32, 0x52, 0x03, 0x23, 0x2D, 0x40, 0x50, 0x60, 0x80,
1239    0xD0, 0xE0, 0x51, 0x61, 0xF1, 0x42, 0x62, 0xD2, 0xE2, 0xF2, 0x33, 0x43,
1240    0xC3, 0xD3, 0xE3, 0x04, 0x14, 0xD4, 0xF4, 0x25, 0x35, 0x16, 0x17, 0xF7,
1241    0xD8, 0x1C, 0x3C, 0x0D, 0x1D, 0x3D, 0x5D, 0x0E, 0x1E, 0x2E, 0x7E, 0x2F,
1242    0xC0, 0xF0, 0x71, 0x81, 0x91, 0xC1, 0x72, 0x82, 0x92, 0xB2, 0xC2, 0x53,
1243    0x63, 0x73, 0x93, 0xA3, 0xF3, 0x24, 0x44, 0x64, 0x84, 0xA4, 0xB4, 0x05,
1244    0x15, 0x95, 0xD5, 0x06, 0x26, 0x36, 0x46, 0x96, 0xD6, 0xE6, 0xF6, 0x07,
1245    0x27, 0x37, 0xD7, 0xE7, 0x08, 0x18, 0x28, 0x38, 0xE8, 0xF8, 0x09, 0x19,
1246    0x29, 0xE9, 0xF9, 0x0A, 0x1A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B, 0xDB, 0xEB,
1247    0xFB, 0x2C, 0x4C, 0x5C, 0x7C, 0x8C, 0x4D, 0x6D, 0x8D, 0x9D, 0xFD, 0x3E,
1248    0x5E, 0x6E, 0x8E, 0x9E, 0xEE, 0x0F, 0x1F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
1249    0xCF, 0x70, 0xA1, 0xA2, 0x83, 0xB3, 0x34, 0x74, 0xC4, 0xE4, 0x55, 0x65,
1250    0x85, 0xA5, 0xC5, 0xE5, 0xF5, 0x56, 0x66, 0x76, 0x86, 0xA6, 0xC6, 0x57,
1251    0x67, 0x77, 0x97, 0xA7, 0x48, 0x88, 0x98, 0x49, 0x59, 0x79, 0x99, 0x3A,
1252    0x4A, 0x8A, 0xBA, 0xFA, 0x2B, 0x7B, 0x0C, 0xAC, 0xBC, 0xCC, 0xEC, 0x7D,
1253    0xAD, 0xBD, 0xDD, 0x4E, 0xBE, 0xCE, 0xFE, 0x8F, 0x9F, 0xAF, 0xBF, 0xDF,
1254    0xEF, 0xFF, 0x90, 0xA0, 0xB0, 0xB1, 0x54, 0x94, 0x45, 0x75, 0xB5, 0xB6,
1255    0x47, 0x87, 0xB7, 0xC7, 0x58, 0x68, 0x78, 0xA8, 0xB8, 0xC8, 0x39, 0x69,
1256    0x89, 0xA9, 0xB9, 0xC9, 0xD9, 0x2A, 0x5A, 0x6A, 0x7A, 0x9A, 0xAA, 0x3B,
1257    0x4B, 0x5B, 0x6B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0x6C, 0x9C, 0xDC, 0xFC,
1258    0xCD, 0xED, 0xAE, 0xDE,
1259    /* Table set B, code table 6, wordlen 7 - 63 entries */
1260    0x00, 0x01, 0x3F, 0x3E, 0x02, 0x03, 0x3C, 0x3D, 0x04, 0x05, 0x06, 0x07,
1261    0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x34, 0x35, 0x36, 0x37,
1262    0x38, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
1263    0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x2E, 0x2F, 0x30,
1264    0x31, 0x32, 0x33, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29, 0x2A,
1265    0x2B, 0x2C, 0x2D,
1266    /* Table set B, code table 7, wordlen 1 - 81 entries */
1267    0x00, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x50, 0xD0, 0x70,
1268    0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0xC1, 0x11, 0x31, 0x05, 0x0D,
1269    0x13, 0x33, 0x07, 0x0F, 0x44, 0xCC, 0x41, 0x43, 0xC3, 0x54, 0x74, 0xDC,
1270    0xFC, 0xF1, 0xC5, 0x15, 0x1D, 0x53, 0xC7, 0x37, 0x4F, 0x3F, 0xD4, 0xF4,
1271    0x5C, 0x7C, 0x51, 0xD1, 0x71, 0x45, 0x55, 0x35, 0x4D, 0xCD, 0xDD, 0x3D,
1272    0xD3, 0x73, 0xF3, 0x47, 0x17, 0x77, 0xCF, 0x1F, 0xFF, 0xD5, 0x75, 0xF5,
1273    0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
1274    /* Table set B, code table 7, wordlen 3 - 256 entries */
1275    0x00, 0x40, 0x10, 0x04, 0x01, 0x05, 0x50, 0x14, 0x54, 0x41, 0x11, 0x51,
1276    0x45, 0x15, 0x55, 0x44, 0x95, 0x6A, 0x03, 0x80, 0xC0, 0x90, 0xD0, 0x94,
1277    0xD4, 0x24, 0x64, 0x58, 0x91, 0xA1, 0x85, 0xD5, 0x25, 0x65, 0xA5, 0xE5,
1278    0x75, 0xB5, 0xF5, 0x19, 0x59, 0x99, 0xD9, 0x69, 0xA9, 0xE9, 0x79, 0xB9,
1279    0xF9, 0x4D, 0x5D, 0x9D, 0xDD, 0x6D, 0xAD, 0xED, 0x7D, 0xBD, 0xFD, 0x02,
1280    0x42, 0x52, 0x06, 0x46, 0x16, 0x56, 0x96, 0xD6, 0x26, 0x66, 0xA6, 0xE6,
1281    0x76, 0xB6, 0xF6, 0x1A, 0x5A, 0x9A, 0xDA, 0xAA, 0xEA, 0x7A, 0xBA, 0xFA,
1282    0x5E, 0x9E, 0xDE, 0x6E, 0xAE, 0xEE, 0x7E, 0xBE, 0xFE, 0x07, 0x47, 0x57,
1283    0x97, 0xD7, 0x67, 0xA7, 0xE7, 0x77, 0xB7, 0xF7, 0x5B, 0x9B, 0xDB, 0x6B,
1284    0xAB, 0xEB, 0x7B, 0xBB, 0xFB, 0x5F, 0x9F, 0xDF, 0x6F, 0xAF, 0xEF, 0x7F,
1285    0xBF, 0xFF, 0x20, 0x60, 0x70, 0xB0, 0xF0, 0x84, 0xC4, 0xA4, 0xE4, 0x74,
1286    0xB4, 0xF4, 0x08, 0x88, 0x18, 0x98, 0xD8, 0x68, 0xA8, 0xE8, 0x78, 0xB8,
1287    0xF8, 0x1C, 0x5C, 0x9C, 0xDC, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
1288    0x81, 0xD1, 0x21, 0x61, 0xE1, 0x71, 0xB1, 0xF1, 0xC5, 0x35, 0x09, 0x49,
1289    0x89, 0xC9, 0x29, 0x39, 0x0D, 0x8D, 0xCD, 0x1D, 0x2D, 0x3D, 0x92, 0xD2,
1290    0x22, 0x62, 0xA2, 0xE2, 0x72, 0xB2, 0xF2, 0x86, 0xC6, 0x36, 0x0A, 0x4A,
1291    0x8A, 0xCA, 0x2A, 0x3A, 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x2E, 0x3E, 0x13,
1292    0x53, 0x93, 0xD3, 0x63, 0xA3, 0xE3, 0x73, 0xB3, 0xF3, 0x87, 0xC7, 0x17,
1293    0x27, 0x37, 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x2B, 0x3B, 0x0F, 0x4F, 0x8F,
1294    0xCF, 0x1F, 0x2F, 0x3F, 0xA0, 0xE0, 0x30, 0x34, 0x48, 0xC8, 0x28, 0x38,
1295    0x0C, 0x4C, 0x8C, 0xCC, 0x2C, 0xC1, 0x31, 0x82, 0xC2, 0x12, 0x32, 0x43,
1296    0x83, 0xC3, 0x23, 0x33,
1297    /* Table set B, code table 7, wordlen 4 - 11 entries */
1298    0x00, 0x01, 0x0F, 0x02, 0x0E, 0x05, 0x0D, 0x03, 0x04, 0x0B, 0x0C,
1299    /* Table set B, code table 7, wordlen 5 - 225 entries */
1300    0x00, 0x10, 0xF0, 0x01, 0x0F, 0x20, 0xE0, 0x11, 0xF1, 0x02, 0x0E, 0x1F,
1301    0xFF, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x0D, 0x1E, 0xFE, 0x2F, 0xEF,
1302    0x30, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x31, 0xD1, 0x22, 0xE2, 0x13,
1303    0xF3, 0x04, 0x06, 0x07, 0x09, 0x0C, 0x1D, 0xFD, 0x2E, 0xEE, 0x3F, 0xDF,
1304    0x50, 0xB0, 0x41, 0x61, 0x71, 0x91, 0xA1, 0xC1, 0x32, 0x62, 0x72, 0x92,
1305    0xA2, 0xD2, 0x23, 0xD3, 0xE3, 0x14, 0xF4, 0x05, 0x16, 0x26, 0xE6, 0xF6,
1306    0x17, 0x27, 0xE7, 0xF7, 0x19, 0x29, 0xF9, 0x0A, 0x1A, 0x2A, 0xFA, 0x0B,
1307    0x1C, 0x2C, 0xFC, 0x2D, 0x3D, 0xED, 0x3E, 0x4E, 0x7E, 0x9E, 0xDE, 0x4F,
1308    0x6F, 0x7F, 0x9F, 0xAF, 0xCF, 0x51, 0xB1, 0x42, 0x52, 0xB2, 0xC2, 0x33,
1309    0x63, 0x73, 0x93, 0xA3, 0xB3, 0xC3, 0x24, 0x34, 0x74, 0xA4, 0xD4, 0xE4,
1310    0x15, 0x25, 0x65, 0x95, 0xE5, 0xF5, 0x36, 0xD6, 0x37, 0x47, 0xC7, 0xD7,
1311    0x39, 0x59, 0xB9, 0xC9, 0xD9, 0xE9, 0x3A, 0x6A, 0xDA, 0xEA, 0x1B, 0x2B,
1312    0x9B, 0xAB, 0xEB, 0xFB, 0x6C, 0x7C, 0x9C, 0xAC, 0xEC, 0x4D, 0x6D, 0x7D,
1313    0x9D, 0xAD, 0xBD, 0xDD, 0x5E, 0x6E, 0xAE, 0xCE, 0x5F, 0x43, 0x53, 0x44,
1314    0x54, 0x64, 0x94, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0x75, 0xA5, 0xB5, 0xC5,
1315    0xD5, 0x46, 0x56, 0x66, 0x76, 0x96, 0xA6, 0xB6, 0xC6, 0x57, 0x67, 0x77,
1316    0x97, 0xA7, 0xB7, 0x49, 0x69, 0x79, 0x99, 0xA9, 0x4A, 0x5A, 0x7A, 0x9A,
1317    0xAA, 0xBA, 0xCA, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0xBB, 0xCB, 0xDB, 0x3C,
1318    0x4C, 0x5C, 0xBC, 0xCC, 0xDC, 0x5D, 0xCD, 0xBE, 0xBF,
1319    /* Table set B, code table 7, wordlen 7 - 63 entries */
1320    0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x3B, 0x3C, 0x3D, 0x06,
1321    0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x0B, 0x0C, 0x0D,
1322    0x0E, 0x0F, 0x10, 0x2F, 0x31, 0x32, 0x33, 0x34, 0x35, 0x11, 0x12, 0x13,
1323    0x14, 0x2D, 0x2E, 0x30, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x25,
1324    0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x1C, 0x1D, 0x1E, 0x23, 0x1F,
1325    0x21, 0x22, 0x24,
1326    /* Table set B, code table 7, wordlen 7 - 8 entries */
1327    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1328    /* Table set B, code table 7, wordlen 7 - 8 entries */
1329    0x00, 0x01, 0x07, 0x02, 0x06, 0x03, 0x04, 0x05,
1330    /* Table set B, code table 7, wordlen 7 - 16 entries */
1331    0x07, 0x05, 0x08, 0x06, 0x09, 0x04, 0x0A, 0x0B, 0x00, 0x01, 0x02, 0x03,
1332    0x0C, 0x0D, 0x0E, 0x0F,
1333    /* Table set B, code table 7, wordlen 7 - 15 entries */
1334    0x0F, 0x0E, 0x01, 0x0D, 0x02, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07, 0x08,
1335    0x09, 0x0A, 0x0B,
1336    /* Table set B, code table 7, wordlen 7 - 16 entries */
1337    0x00, 0x01, 0x0E, 0x0F, 0x02, 0x0D, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07,
1338    0x08, 0x09, 0x0A, 0x0B,
1339    /* Table set B, code table 7, wordlen 7 - 16 entries */
1340    0x00, 0x01, 0x0F, 0x0E, 0x02, 0x0D, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07,
1341    0x08, 0x09, 0x0A, 0x0B,
1342    /* Table set B, code table 7, wordlen 7 - 32 entries */
1343    0x00, 0x01, 0x1F, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x1A, 0x1B, 0x1C,
1344    0x1D, 0x1E, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
1345    0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
1346    /* Table set B, code table 7, wordlen 7 - 31 entries */
1347    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
1348    0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1349    0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1350    /* Table set B, code table 7, wordlen 7 - 32 entries */
1351    0x00, 0x1C, 0x1D, 0x01, 0x02, 0x03, 0x04, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1352    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,
1353    0x1E, 0x1F, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
1354    /* Table set B, code table 7, wordlen 7 - 31 entries */
1355    0x02, 0x03, 0x04, 0x05, 0x06, 0x01, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
1356    0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1357    0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1358    /* Table set B, code table 7, wordlen 7 - 32 entries */
1359    0x00, 0x01, 0x02, 0x1F, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x1D, 0x1E,
1360    0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,
1361    0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
1362    /* Table set B, code table 7, wordlen 7 - 16 entries */
1363    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
1364    0x0C, 0x0D, 0x0E, 0x0F,
1365    /* Table set B, code table 7, wordlen 7 - 8 entries */
1366    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1367    /* Table set B, code table 7, wordlen 7 - 8 entries */
1368    0x00, 0x01, 0x07, 0x02, 0x03, 0x04, 0x05, 0x06,
1369    /* Table set B, code table 7, wordlen 7 - 32 entries */
1370    0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x05, 0x06,
1371    0x07, 0x12, 0x13, 0x14, 0x15, 0x16, 0x04, 0x17, 0x18, 0x19, 0x1A, 0x1B,
1372    0x00, 0x01, 0x02, 0x03, 0x1C, 0x1D, 0x1E, 0x1F,
1373    /* Table set B, code table 7, wordlen 7 - 32 entries */
1374    0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x0E,
1375    0x0F, 0x10, 0x11, 0x1D, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1E, 0x04, 0x05,
1376    0x06, 0x07, 0x08, 0x1F, 0x00, 0x01, 0x02, 0x03,
1377    /* Table set B, code table 7, wordlen 7 - 32 entries */
1378    0x00, 0x01, 0x02, 0x1F, 0x03, 0x1D, 0x1E, 0x04, 0x05, 0x06, 0x1B, 0x1C,
1379    0x07, 0x18, 0x19, 0x1A, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1380    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1381    /* Table set B, code table 7, wordlen 7 - 256 entries */
1382    0x00, 0x01, 0xFF, 0x02, 0xFE, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xFB,
1383    0xFC, 0xFD, 0x09, 0x0A, 0x0B, 0x0C, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0x0D,
1384    0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
1385    0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
1386    0x26, 0xF3, 0xF4, 0xF5, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
1387    0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,
1388    0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
1389    0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52,
1390    0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0xC2,
1391    0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE,
1392    0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
1393    0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
1394    0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2,
1395    0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
1396    0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
1397    0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,
1398    0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D,
1399    0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
1400    0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
1401    0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1,
1402    0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,
1403    0xBE, 0xBF, 0xC0, 0xC1,
1404};
1405
1406/** Tables for spectrum coding. */
1407typedef struct Atrac3pSpecCodeTab {
1408    uint8_t group_size;  ///< number of coefficients grouped together
1409    uint8_t num_coeffs;  ///< 1 - map index to a single value, > 1 - map index to a vector of values
1410    uint8_t bits;        ///< number of bits a single coefficient occupy
1411    uint8_t is_signed;   ///< 1 - values in that table are signed ones, otherwise - absolute ones
1412} Atrac3pSpecCodeTab;
1413
1414static const Atrac3pSpecCodeTab atrac3p_spectra_tabs[112] = {
1415    /* table set = A */
1416    /* code table = 0 */
1417    { 1, 4, 2, 1 }, // wordlen = 1
1418    { 1, 4, 2, 0 }, // wordlen = 2
1419    { 1, 2, 3, 1 }, // wordlen = 3
1420    { 1, 1, 3, 0 }, // wordlen = 4
1421    { 1, 2, 4, 1 }, // wordlen = 5
1422    { 1, 1, 4, 0 }, // wordlen = 6
1423    { 1, 1, 6, 1 }, // wordlen = 7
1424
1425    /* code table = 1 */
1426    { 4, 4, 2, 1 }, // wordlen = 1
1427    { 1, 4, 2, 0 }, // wordlen = 2
1428    { 1, 2, 3, 1 }, // wordlen = 3
1429    { 1, 2, 4, 1 }, // wordlen = 4
1430    { 1, 2, 4, 1 }, // wordlen = 5
1431    { 1, 2, 4, 0 }, // wordlen = 6
1432    { 1, 1, 6, 1 }, // wordlen = 7
1433
1434    /* code table = 2 */
1435    { 1, 4, 2, 1 }, // wordlen = 1
1436    { 1, 2, 3, 1 }, // wordlen = 2
1437    { 1, 2, 3, 1 }, // wordlen = 3
1438    { 1, 1, 3, 0 }, // wordlen = 4
1439    { 1, 1, 3, 0 }, // wordlen = 5
1440    { 1, 2, 4, 0 }, // wordlen = 6
1441    { 1, 1, 6, 1 }, // wordlen = 7
1442
1443    /* code table = 3 */
1444    { 1, 2, 2, 1 }, // wordlen = 1
1445    { 1, 4, 2, 0 }, // wordlen = 2
1446    { 1, 4, 2, 0 }, // wordlen = 3
1447    { 1, 1, 3, 0 }, // wordlen = 4
1448    { 1, 2, 4, 1 }, // wordlen = 5
1449    { 1, 2, 4, 0 }, // wordlen = 6
1450    { 1, 1, 6, 1 }, // wordlen = 7
1451
1452    /* code table = 4 */
1453    { 1, 4, 2, 1 }, // wordlen = 1
1454    { 1, 4, 2, 0 }, // wordlen = 2
1455    { 1, 1, 3, 1 }, // wordlen = 3
1456    { 1, 2, 4, 1 }, // wordlen = 4
1457    { 1, 1, 3, 0 }, // wordlen = 5
1458    { 1, 2, 4, 0 }, // wordlen = 6
1459    { 1, 1, 6, 1 }, // wordlen = 7
1460
1461    /* code table = 5 */
1462    { 1, 4, 2, 1 }, // wordlen = 1
1463    { 1, 2, 3, 1 }, // wordlen = 2
1464    { 1, 1, 3, 1 }, // wordlen = 3
1465    { 1, 2, 4, 1 }, // wordlen = 4
1466    { 1, 1, 3, 0 }, // wordlen = 5
1467    { 1, 1, 5, 1 }, // wordlen = 6
1468    { 1, 1, 6, 1 }, // wordlen = 7
1469
1470    /* code table = 6 */
1471    { 2, 4, 2, 1 }, // wordlen = 1
1472    { 1, 2, 3, 1 }, // wordlen = 2
1473    { 1, 4, 2, 0 }, // wordlen = 3
1474    { 1, 2, 4, 1 }, // wordlen = 4
1475    { 1, 1, 4, 1 }, // wordlen = 5
1476    { 1, 1, 5, 1 }, // wordlen = 6
1477    { 1, 1, 6, 1 }, // wordlen = 7
1478
1479    /* code table = 7 */
1480    { 1, 2, 1, 0 }, // wordlen = 1
1481    { 2, 4, 2, 0 }, // wordlen = 2
1482    { 1, 2, 3, 1 }, // wordlen = 3
1483    { 1, 2, 4, 1 }, // wordlen = 4
1484    { 1, 1, 4, 1 }, // wordlen = 5
1485    { 2, 2, 4, 0 }, // wordlen = 6
1486    { 4, 1, 6, 1 }, // wordlen = 7
1487
1488    /* table set = B */
1489    /* code table = 0 */
1490    { 4, 4, 2, 1 }, // wordlen = 1
1491    { 1, 4, 2, 0 }, // wordlen = 2
1492    { 4, 2, 3, 1 }, // wordlen = 3
1493    { 1, 2, 4, 1 }, // wordlen = 4
1494    { 1, 2, 4, 1 }, // wordlen = 5
1495    { 1, 1, 4, 0 }, // wordlen = 6
1496    { 1, 1, 6, 1 }, // wordlen = 7
1497
1498    /* code table = 1 */
1499    { 1, 4, 2, 1 }, // wordlen = 1
1500    { 1, 4, 2, 0 }, // wordlen = 2
1501    { 1, 2, 3, 1 }, // wordlen = 3
1502    { 1, 2, 4, 1 }, // wordlen = 4
1503    { 1, 2, 4, 1 }, // wordlen = 5
1504    { 1, 2, 4, 0 }, // wordlen = 6
1505    { 1, 1, 6, 1 }, // wordlen = 7
1506
1507    /* code table = 2 */
1508    { 4, 4, 2, 1 }, // wordlen = 1
1509    { 4, 4, 2, 0 }, // wordlen = 2
1510    { 1, 2, 3, 1 }, // wordlen = 3
1511    { 1, 2, 4, 1 }, // wordlen = 4
1512    { 2, 2, 4, 1 }, // wordlen = 5
1513    { 2, 2, 4, 0 }, // wordlen = 6
1514    { 4, 1, 6, 1 }, // wordlen = 7
1515
1516    /* code table = 3 */
1517    { 1, 4, 2, 1 }, // wordlen = 1
1518    { 1, 4, 2, 0 }, // wordlen = 2
1519    { 1, 4, 2, 0 }, // wordlen = 3
1520    { 2, 2, 4, 1 }, // wordlen = 4
1521    { 1, 2, 4, 1 }, // wordlen = 5
1522    { 1, 2, 4, 0 }, // wordlen = 6
1523    { 1, 1, 6, 1 }, // wordlen = 7
1524
1525    /* code table = 4 */
1526    { 1, 4, 2, 1 }, // wordlen = 1
1527    { 4, 2, 3, 1 }, // wordlen = 2
1528    { 1, 2, 3, 1 }, // wordlen = 3
1529    { 4, 2, 4, 1 }, // wordlen = 4
1530    { 1, 1, 3, 0 }, // wordlen = 5
1531    { 1, 2, 4, 0 }, // wordlen = 6
1532    { 1, 1, 6, 1 }, // wordlen = 7
1533
1534    /* code table = 5 */
1535    { 2, 4, 2, 1 }, // wordlen = 1
1536    { 1, 2, 3, 1 }, // wordlen = 2
1537    { 4, 1, 3, 1 }, // wordlen = 3
1538    { 1, 1, 3, 0 }, // wordlen = 4
1539    { 1, 1, 3, 0 }, // wordlen = 5
1540    { 1, 1, 5, 1 }, // wordlen = 6
1541    { 2, 1, 6, 1 }, // wordlen = 7
1542
1543    /* code table = 6 */
1544    { 1, 4, 2, 1 }, // wordlen = 1
1545    { 1, 4, 2, 0 }, // wordlen = 2
1546    { 1, 1, 3, 1 }, // wordlen = 3
1547    { 1, 1, 3, 0 }, // wordlen = 4
1548    { 4, 2, 4, 1 }, // wordlen = 5
1549    { 1, 2, 4, 0 }, // wordlen = 6
1550    { 1, 1, 6, 1 }, // wordlen = 7
1551
1552    /* code table = 7 */
1553    { 1, 4, 2, 1 }, // wordlen = 1
1554    { 4, 4, 2, 0 }, // wordlen = 2
1555    { 4, 4, 2, 0 }, // wordlen = 3
1556    { 1, 1, 4, 1 }, // wordlen = 4
1557    { 1, 2, 4, 1 }, // wordlen = 5
1558    { 1, 1, 5, 1 }, // wordlen = 6
1559    { 1, 1, 6, 1 }, // wordlen = 7
1560};
1561
1562/* Huffman tables for gain control data. */
1563static const uint8_t atrac3p_gain_cbs[][12] = {
1564    {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1565    {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1566    {  1,  0,  2,  2,  1,  2,  8,  0,  0,  0,  0,  0 },
1567    {  1,  1,  1,  1,  1,  0,  2,  0,  8,  0,  0,  0 },
1568    {  1,  0,  3,  1,  1,  0,  2,  0,  8,  0,  0,  0 },
1569    {  1,  1,  1,  1,  1,  0,  1,  2,  8,  0,  0,  0 },
1570    {  0,  1,  0,  2, 11, 18,  0,  0,  0,  0,  0,  0 },
1571    {  0,  1,  2,  4,  4,  4,  0, 16,  0,  0,  0,  0 },
1572    {  0,  0,  0,  3, 23,  6,  0,  0,  0,  0,  0,  0 },
1573    {  0,  0,  5,  3,  2,  3,  2, 16,  0,  0,  0,  0 },
1574    {  1,  0,  0,  3,  2,  6, 20,  0,  0,  0,  0,  0 },
1575};
1576
1577static const uint8_t atrac3p_gain_xlats[] = {
1578    /* Number of gain control points 1 - 8 entries */
1579     0,  1,  2,  3,  4,  5,  6,  7,
1580    /* Number of gain control points 2 - 8 entries */
1581     0,  1,  7,  2,  6,  3,  4,  5,
1582    /* Gain compensation level 1 - 16 entries */
1583     7,  5,  8,  6,  9,  4, 10, 11,  0,  1,  2,  3, 12, 13, 14, 15,
1584    /* Gain compensation level 2 - 15 entries */
1585    15, 14,  1, 13,  2,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1586    /* Gain compensation level 3 - 16 entries */
1587     0,  1, 14, 15,  2, 13,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1588    /* Gain compensation level 4 - 16 entries */
1589     0,  1, 15, 14,  2, 13,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1590    /* Gain compensation location 3 - 32 entries */
1591     0,  1, 31,  2,  3,  4,  5,  6,  7, 26, 27, 28, 29, 30,  8,  9, 10, 11, 12,
1592    13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1593    /* Gain compensation location 1 - 31 entries */
1594     1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1595    20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1596    /* Gain compensation location 4 - 32 entries */
1597     0, 28, 29,  1,  2,  3,  4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
1598    23, 24, 25, 26, 27, 30, 31,  5,  6,  7,  8,  9, 10,
1599    /* Gain compensation location 2 - 31 entries */
1600     2,  3,  4,  5,  6,  1,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1601    20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1602    /* Gain compensation location 5 - 32 entries */
1603     0,  1,  2, 31,  3,  4,  5,  6,  7,  8, 29, 30,  9, 10, 11, 12, 13, 14, 15,
1604    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
1605};
1606
1607/* Huffman tables for GHA waves data. */
1608static const uint8_t atrac3p_tone_cbs[][12] = {
1609    {  1,  0,  1,  2,  4,  8,  0,  0,  0,  0,  0,  0 },
1610    {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1611    {  1,  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0 },
1612    {  0,  0,  0, 10,  8,  6,  0,  8,  0,  0,  0,  0 },
1613    {  0,  0,  0, 11,  5,  6,  6,  4,  0,  0,  0,  0 },
1614    {  0,  1,  3,  3,  1,  4,  4, 16,  0,  0,  0,  0 },
1615    {  1,  0,  0,  2,  2,  0,  9,  9, 29,104, 100, 0 },
1616};
1617
1618static const uint8_t atrac3p_tone_xlats[] = {
1619    /* Number of tone bands - 16 entries */
1620      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
1621     15,
1622    /* Number of tones 1 - 8 entries */
1623      0,   1,   2,   3,   4,   5,   6,   7,
1624    /* Number of tones 2 - 8 entries */
1625      0,   1,   7,   2,   3,   4,   5,   6,
1626    /* Amplitude information 1 - 32 entries */
1627      8,   9,  10,  11,  12,  13,  14,  15,  16,  17,   5,   6,   7,  18,  19,
1628     20,  21,  22,   4,  23,  24,  25,  26,  27,   0,   1,   2,   3,  28,  29,
1629     30,  31,
1630    /* Amplitude information 2 - 32 entries */
1631     18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  14,  15,  16,  17,
1632     29,   9,  10,  11,  12,  13,  30,   4,   5,   6,   7,   8,  31,   0,   1,
1633      2,   3,
1634    /* Amplitude information 3 - 32 entries */
1635      0,   1,   2,  31,   3,  29,  30,   4,   5,   6,  27,  28,   7,  24,  25,
1636     26,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,
1637     22,  23,
1638    /* Frequencies - 256 entries */
1639      0,   1, 255,   2, 254,   3,   4,   5,   6,   7,   8, 251, 252, 253,   9,
1640     10,  11,  12, 246, 247, 248, 249, 250,  13,  14,  15,  16,  17,  18,  19,
1641     20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,
1642     35,  36,  37,  38, 243, 244, 245,  39,  40,  41,  42,  43,  44,  45,  46,
1643     47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
1644     62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,
1645     77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
1646     92,  93, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
1647    207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
1648    222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
1649    237, 238, 239, 240, 241, 242,  94,  95,  96,  97,  98,  99, 100, 101, 102,
1650    103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
1651    118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
1652    133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
1653    148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
1654    163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
1655    178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1656    193,
1657};
1658
1659#endif /* AVCODEC_ATRAC3PLUS_DATA_H */
1660