GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/dirac_vlc.c Lines: 14 20 70.0 %
Date: 2020-04-04 00:26:16 Branches: 16 28 57.1 %

Line Branch Exec Source
1
/*
2
 * This file is part of FFmpeg.
3
 *
4
 * FFmpeg is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
6
 * License as published by the Free Software Foundation; either
7
 * version 2.1 of the License, or (at your option) any later version.
8
 *
9
 * FFmpeg is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 * Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15
 * License along with FFmpeg; if not, write to the Free Software
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
 */
18
19
#include "dirac_vlc.h"
20
21
enum {
22
    /* Next byte contains an exactly aligned start to a new symbol (even bit) */
23
    STATE_START  = 0,
24
    /* Next byte should end the current value on an odd bit */
25
    STATE_FOLLOW = 256,
26
    /* Byte is completely data and doesn't end nor start a value */
27
    STATE_DATA   = 512,
28
    /* Byte has the current value's sign bit and starts a new value */
29
    STATE_SIGN   = 768,
30
};
31
32
/* Exactly 128 bits */
33
typedef struct LUTState {
34
    int16_t   val0;      /* Bits to which to add after applying preshift */
35
    int16_t   val1;
36
    int16_t   val2;
37
    int16_t   val3;
38
    int16_t   val4;
39
    uint8_t   val0_bits; /* The size of val0 in bits */
40
    int8_t    sign;      /* Sign of the current value (0 == zero the value) */
41
    int8_t    num;       /* Number of values in this byte */
42
    uint8_t   val;       /* Init value in case current value was terminated */
43
    uint16_t  state;     /* Expected state for the next byte */
44
} LUTState;
45
46
const DECLARE_ALIGNED(32, LUTState, ff_dirac_golomb_lut)[1024] = {
47
    { +16,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
48
    { +17,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
49
    {  +8,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
50
    {  +8,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
51
    { +18,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
52
    { +19,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
53
    {  +9,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
54
    {  +9,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
55
    {  +4,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
56
    {  +4,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
57
    {  +4,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
58
    {  +4,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
59
    {  +4,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
60
    {  +4,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
61
    {  +4,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
62
    {  +4,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
63
    { +20,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
64
    { +21,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
65
    { +10,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
66
    { +10,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
67
    { +22,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
68
    { +23,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
69
    { +11,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
70
    { +11,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
71
    {  +5,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
72
    {  +5,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
73
    {  +5,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
74
    {  +5,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
75
    {  +5,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
76
    {  +5,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
77
    {  +5,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
78
    {  +5,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
79
    {  +2,  0,  0,  0,  0, 2, +1, 1,  4, STATE_FOLLOW },
80
    {  +2,  0,  0,  0,  0, 2, +1, 1,  5, STATE_FOLLOW },
81
    {  +2, +1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
82
    {  +2, -1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
83
    {  +2,  0,  0,  0,  0, 2, +1, 1,  6, STATE_FOLLOW },
84
    {  +2,  0,  0,  0,  0, 2, +1, 1,  7, STATE_FOLLOW },
85
    {  +2, +2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
86
    {  +2, -2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
87
    {  +2,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_DATA },
88
    {  +2,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_SIGN },
89
    {  +2,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_DATA },
90
    {  +2,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_SIGN },
91
    {  +2,  0,  0,  0,  0, 2, +1, 3,  2, STATE_FOLLOW },
92
    {  +2,  0,  0,  0,  0, 2, +1, 3,  3, STATE_FOLLOW },
93
    {  +2,  0,  0,  0,  0, 2, +1, 4,  1,   STATE_DATA },
94
    {  +2,  0,  0,  0,  0, 2, +1, 5,  0,  STATE_START },
95
    {  +2,  0,  0,  0,  0, 2, -1, 1,  4, STATE_FOLLOW },
96
    {  +2,  0,  0,  0,  0, 2, -1, 1,  5, STATE_FOLLOW },
97
    {  +2, +1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
98
    {  +2, -1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
99
    {  +2,  0,  0,  0,  0, 2, -1, 1,  6, STATE_FOLLOW },
100
    {  +2,  0,  0,  0,  0, 2, -1, 1,  7, STATE_FOLLOW },
101
    {  +2, +2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
102
    {  +2, -2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
103
    {  +2,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_DATA },
104
    {  +2,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_SIGN },
105
    {  +2,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_DATA },
106
    {  +2,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_SIGN },
107
    {  +2,  0,  0,  0,  0, 2, -1, 3,  2, STATE_FOLLOW },
108
    {  +2,  0,  0,  0,  0, 2, -1, 3,  3, STATE_FOLLOW },
109
    {  +2,  0,  0,  0,  0, 2, -1, 4,  1,   STATE_DATA },
110
    {  +2,  0,  0,  0,  0, 2, -1, 5,  0,  STATE_START },
111
    { +24,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
112
    { +25,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
113
    { +12,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
114
    { +12,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
115
    { +26,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
116
    { +27,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
117
    { +13,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
118
    { +13,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
119
    {  +6,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
120
    {  +6,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
121
    {  +6,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
122
    {  +6,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
123
    {  +6,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
124
    {  +6,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
125
    {  +6,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
126
    {  +6,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
127
    { +28,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
128
    { +29,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
129
    { +14,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
130
    { +14,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
131
    { +30,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
132
    { +31,  0,  0,  0,  0, 5, +1, 0,  0, STATE_FOLLOW },
133
    { +15,  0,  0,  0,  0, 4, +1, 1,  0,  STATE_START },
134
    { +15,  0,  0,  0,  0, 4, -1, 1,  0,  STATE_START },
135
    {  +7,  0,  0,  0,  0, 3, +1, 1,  2, STATE_FOLLOW },
136
    {  +7,  0,  0,  0,  0, 3, +1, 1,  3, STATE_FOLLOW },
137
    {  +7,  0,  0,  0,  0, 3, +1, 2,  1,   STATE_DATA },
138
    {  +7,  0,  0,  0,  0, 3, +1, 3,  0,  STATE_START },
139
    {  +7,  0,  0,  0,  0, 3, -1, 1,  2, STATE_FOLLOW },
140
    {  +7,  0,  0,  0,  0, 3, -1, 1,  3, STATE_FOLLOW },
141
    {  +7,  0,  0,  0,  0, 3, -1, 2,  1,   STATE_DATA },
142
    {  +7,  0,  0,  0,  0, 3, -1, 3,  0,  STATE_START },
143
    {  +3,  0,  0,  0,  0, 2, +1, 1,  4, STATE_FOLLOW },
144
    {  +3,  0,  0,  0,  0, 2, +1, 1,  5, STATE_FOLLOW },
145
    {  +3, +1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
146
    {  +3, -1,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
147
    {  +3,  0,  0,  0,  0, 2, +1, 1,  6, STATE_FOLLOW },
148
    {  +3,  0,  0,  0,  0, 2, +1, 1,  7, STATE_FOLLOW },
149
    {  +3, +2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
150
    {  +3, -2,  0,  0,  0, 2, +1, 2,  0,  STATE_START },
151
    {  +3,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_DATA },
152
    {  +3,  0,  0,  0,  0, 2, +1, 2,  2,   STATE_SIGN },
153
    {  +3,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_DATA },
154
    {  +3,  0,  0,  0,  0, 2, +1, 2,  3,   STATE_SIGN },
155
    {  +3,  0,  0,  0,  0, 2, +1, 3,  2, STATE_FOLLOW },
156
    {  +3,  0,  0,  0,  0, 2, +1, 3,  3, STATE_FOLLOW },
157
    {  +3,  0,  0,  0,  0, 2, +1, 4,  1,   STATE_DATA },
158
    {  +3,  0,  0,  0,  0, 2, +1, 5,  0,  STATE_START },
159
    {  +3,  0,  0,  0,  0, 2, -1, 1,  4, STATE_FOLLOW },
160
    {  +3,  0,  0,  0,  0, 2, -1, 1,  5, STATE_FOLLOW },
161
    {  +3, +1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
162
    {  +3, -1,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
163
    {  +3,  0,  0,  0,  0, 2, -1, 1,  6, STATE_FOLLOW },
164
    {  +3,  0,  0,  0,  0, 2, -1, 1,  7, STATE_FOLLOW },
165
    {  +3, +2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
166
    {  +3, -2,  0,  0,  0, 2, -1, 2,  0,  STATE_START },
167
    {  +3,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_DATA },
168
    {  +3,  0,  0,  0,  0, 2, -1, 2,  2,   STATE_SIGN },
169
    {  +3,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_DATA },
170
    {  +3,  0,  0,  0,  0, 2, -1, 2,  3,   STATE_SIGN },
171
    {  +3,  0,  0,  0,  0, 2, -1, 3,  2, STATE_FOLLOW },
172
    {  +3,  0,  0,  0,  0, 2, -1, 3,  3, STATE_FOLLOW },
173
    {  +3,  0,  0,  0,  0, 2, -1, 4,  1,   STATE_DATA },
174
    {  +3,  0,  0,  0,  0, 2, -1, 5,  0,  STATE_START },
175
    {   0,  0,  0,  0,  0, 0,  0, 1,  8,   STATE_DATA },
176
    {   0,  0,  0,  0,  0, 0,  0, 1,  8,   STATE_SIGN },
177
    {   0,  0,  0,  0,  0, 0,  0, 1,  9,   STATE_DATA },
178
    {   0,  0,  0,  0,  0, 0,  0, 1,  9,   STATE_SIGN },
179
    {   0, +3,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
180
    {   0, +3,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
181
    {   0, -3,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
182
    {   0, -3,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
183
    {   0,  0,  0,  0,  0, 0,  0, 1, 10,   STATE_DATA },
184
    {   0,  0,  0,  0,  0, 0,  0, 1, 10,   STATE_SIGN },
185
    {   0,  0,  0,  0,  0, 0,  0, 1, 11,   STATE_DATA },
186
    {   0,  0,  0,  0,  0, 0,  0, 1, 11,   STATE_SIGN },
187
    {   0, +4,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
188
    {   0, +4,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
189
    {   0, -4,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
190
    {   0, -4,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
191
    {   0, +1,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
192
    {   0, +1,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
193
    {   0, +1,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
194
    {   0, +1,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
195
    {   0, +1,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
196
    {   0, +1,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
197
    {   0, +1,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
198
    {   0, +1,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
199
    {   0, -1,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
200
    {   0, -1,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
201
    {   0, -1,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
202
    {   0, -1,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
203
    {   0, -1,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
204
    {   0, -1,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
205
    {   0, -1,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
206
    {   0, -1,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
207
    {   0,  0,  0,  0,  0, 0,  0, 1, 12,   STATE_DATA },
208
    {   0,  0,  0,  0,  0, 0,  0, 1, 12,   STATE_SIGN },
209
    {   0,  0,  0,  0,  0, 0,  0, 1, 13,   STATE_DATA },
210
    {   0,  0,  0,  0,  0, 0,  0, 1, 13,   STATE_SIGN },
211
    {   0, +5,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
212
    {   0, +5,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
213
    {   0, -5,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
214
    {   0, -5,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
215
    {   0,  0,  0,  0,  0, 0,  0, 1, 14,   STATE_DATA },
216
    {   0,  0,  0,  0,  0, 0,  0, 1, 14,   STATE_SIGN },
217
    {   0,  0,  0,  0,  0, 0,  0, 1, 15,   STATE_DATA },
218
    {   0,  0,  0,  0,  0, 0,  0, 1, 15,   STATE_SIGN },
219
    {   0, +6,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
220
    {   0, +6,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
221
    {   0, -6,  0,  0,  0, 0,  0, 2,  1,   STATE_DATA },
222
    {   0, -6,  0,  0,  0, 0,  0, 3,  0,  STATE_START },
223
    {   0, +2,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
224
    {   0, +2,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
225
    {   0, +2,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
226
    {   0, +2,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
227
    {   0, +2,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
228
    {   0, +2,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
229
    {   0, +2,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
230
    {   0, +2,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
231
    {   0, -2,  0,  0,  0, 0,  0, 2,  2,   STATE_DATA },
232
    {   0, -2,  0,  0,  0, 0,  0, 2,  2,   STATE_SIGN },
233
    {   0, -2,  0,  0,  0, 0,  0, 2,  3,   STATE_DATA },
234
    {   0, -2,  0,  0,  0, 0,  0, 2,  3,   STATE_SIGN },
235
    {   0, -2,  0,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
236
    {   0, -2,  0,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
237
    {   0, -2,  0,  0,  0, 0,  0, 4,  1,   STATE_DATA },
238
    {   0, -2,  0,  0,  0, 0,  0, 5,  0,  STATE_START },
239
    {   0,  0,  0,  0,  0, 0,  0, 2,  8, STATE_FOLLOW },
240
    {   0,  0,  0,  0,  0, 0,  0, 2,  9, STATE_FOLLOW },
241
    {   0,  0, +3,  0,  0, 0,  0, 3,  0,  STATE_START },
242
    {   0,  0, -3,  0,  0, 0,  0, 3,  0,  STATE_START },
243
    {   0,  0,  0,  0,  0, 0,  0, 2, 10, STATE_FOLLOW },
244
    {   0,  0,  0,  0,  0, 0,  0, 2, 11, STATE_FOLLOW },
245
    {   0,  0, +4,  0,  0, 0,  0, 3,  0,  STATE_START },
246
    {   0,  0, -4,  0,  0, 0,  0, 3,  0,  STATE_START },
247
    {   0,  0, +1,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
248
    {   0,  0, +1,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
249
    {   0,  0, +1,  0,  0, 0,  0, 4,  1,   STATE_DATA },
250
    {   0,  0, +1,  0,  0, 0,  0, 5,  0,  STATE_START },
251
    {   0,  0, -1,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
252
    {   0,  0, -1,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
253
    {   0,  0, -1,  0,  0, 0,  0, 4,  1,   STATE_DATA },
254
    {   0,  0, -1,  0,  0, 0,  0, 5,  0,  STATE_START },
255
    {   0,  0,  0,  0,  0, 0,  0, 2, 12, STATE_FOLLOW },
256
    {   0,  0,  0,  0,  0, 0,  0, 2, 13, STATE_FOLLOW },
257
    {   0,  0, +5,  0,  0, 0,  0, 3,  0,  STATE_START },
258
    {   0,  0, -5,  0,  0, 0,  0, 3,  0,  STATE_START },
259
    {   0,  0,  0,  0,  0, 0,  0, 2, 14, STATE_FOLLOW },
260
    {   0,  0,  0,  0,  0, 0,  0, 2, 15, STATE_FOLLOW },
261
    {   0,  0, +6,  0,  0, 0,  0, 3,  0,  STATE_START },
262
    {   0,  0, -6,  0,  0, 0,  0, 3,  0,  STATE_START },
263
    {   0,  0, +2,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
264
    {   0,  0, +2,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
265
    {   0,  0, +2,  0,  0, 0,  0, 4,  1,   STATE_DATA },
266
    {   0,  0, +2,  0,  0, 0,  0, 5,  0,  STATE_START },
267
    {   0,  0, -2,  0,  0, 0,  0, 3,  2, STATE_FOLLOW },
268
    {   0,  0, -2,  0,  0, 0,  0, 3,  3, STATE_FOLLOW },
269
    {   0,  0, -2,  0,  0, 0,  0, 4,  1,   STATE_DATA },
270
    {   0,  0, -2,  0,  0, 0,  0, 5,  0,  STATE_START },
271
    {   0,  0,  0,  0,  0, 0,  0, 3,  4,   STATE_DATA },
272
    {   0,  0,  0,  0,  0, 0,  0, 3,  4,   STATE_SIGN },
273
    {   0,  0,  0,  0,  0, 0,  0, 3,  5,   STATE_DATA },
274
    {   0,  0,  0,  0,  0, 0,  0, 3,  5,   STATE_SIGN },
275
    {   0,  0,  0, +1,  0, 0,  0, 4,  1,   STATE_DATA },
276
    {   0,  0,  0, +1,  0, 0,  0, 5,  0,  STATE_START },
277
    {   0,  0,  0, -1,  0, 0,  0, 4,  1,   STATE_DATA },
278
    {   0,  0,  0, -1,  0, 0,  0, 5,  0,  STATE_START },
279
    {   0,  0,  0,  0,  0, 0,  0, 3,  6,   STATE_DATA },
280
    {   0,  0,  0,  0,  0, 0,  0, 3,  6,   STATE_SIGN },
281
    {   0,  0,  0,  0,  0, 0,  0, 3,  7,   STATE_DATA },
282
    {   0,  0,  0,  0,  0, 0,  0, 3,  7,   STATE_SIGN },
283
    {   0,  0,  0, +2,  0, 0,  0, 4,  1,   STATE_DATA },
284
    {   0,  0,  0, +2,  0, 0,  0, 5,  0,  STATE_START },
285
    {   0,  0,  0, -2,  0, 0,  0, 4,  1,   STATE_DATA },
286
    {   0,  0,  0, -2,  0, 0,  0, 5,  0,  STATE_START },
287
    {   0,  0,  0,  0,  0, 0,  0, 4,  4, STATE_FOLLOW },
288
    {   0,  0,  0,  0,  0, 0,  0, 4,  5, STATE_FOLLOW },
289
    {   0,  0,  0,  0, +1, 0,  0, 5,  0,  STATE_START },
290
    {   0,  0,  0,  0, -1, 0,  0, 5,  0,  STATE_START },
291
    {   0,  0,  0,  0,  0, 0,  0, 4,  6, STATE_FOLLOW },
292
    {   0,  0,  0,  0,  0, 0,  0, 4,  7, STATE_FOLLOW },
293
    {   0,  0,  0,  0, +2, 0,  0, 5,  0,  STATE_START },
294
    {   0,  0,  0,  0, -2, 0,  0, 5,  0,  STATE_START },
295
    {   0,  0,  0,  0,  0, 0,  0, 5,  2,   STATE_DATA },
296
    {   0,  0,  0,  0,  0, 0,  0, 5,  2,   STATE_SIGN },
297
    {   0,  0,  0,  0,  0, 0,  0, 5,  3,   STATE_DATA },
298
    {   0,  0,  0,  0,  0, 0,  0, 5,  3,   STATE_SIGN },
299
    {   0,  0,  0,  0,  0, 0,  0, 6,  2, STATE_FOLLOW },
300
    {   0,  0,  0,  0,  0, 0,  0, 6,  3, STATE_FOLLOW },
301
    {   0,  0,  0,  0,  0, 0,  0, 7,  1,   STATE_DATA },
302
    {   0,  0,  0,  0,  0, 0,  0, 8,  0,  STATE_START },
303
    {   0,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
304
    {  +1,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
305
    {   0,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
306
    {   0,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
307
    {  +2,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
308
    {  +3,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
309
    {  +1,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
310
    {  +1,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
311
    {   0,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
312
    {   0,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
313
    {   0,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
314
    {   0,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
315
    {   0,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
316
    {   0,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
317
    {   0,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
318
    {   0,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
319
    {  +4,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
320
    {  +5,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
321
    {  +2,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
322
    {  +2,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
323
    {  +6,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
324
    {  +7,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
325
    {  +3,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
326
    {  +3,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
327
    {  +1,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
328
    {  +1,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
329
    {  +1,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
330
    {  +1,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
331
    {  +1,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
332
    {  +1,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
333
    {  +1,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
334
    {  +1,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
335
    {   0,  0,  0,  0,  0, 1, +1, 1,  4, STATE_FOLLOW },
336
    {   0,  0,  0,  0,  0, 1, +1, 1,  5, STATE_FOLLOW },
337
    {   0, +1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
338
    {   0, -1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
339
    {   0,  0,  0,  0,  0, 1, +1, 1,  6, STATE_FOLLOW },
340
    {   0,  0,  0,  0,  0, 1, +1, 1,  7, STATE_FOLLOW },
341
    {   0, +2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
342
    {   0, -2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
343
    {   0,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_DATA },
344
    {   0,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_SIGN },
345
    {   0,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_DATA },
346
    {   0,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_SIGN },
347
    {   0,  0,  0,  0,  0, 1, +1, 3,  2, STATE_FOLLOW },
348
    {   0,  0,  0,  0,  0, 1, +1, 3,  3, STATE_FOLLOW },
349
    {   0,  0,  0,  0,  0, 1, +1, 4,  1,   STATE_DATA },
350
    {   0,  0,  0,  0,  0, 1, +1, 5,  0,  STATE_START },
351
    {   0,  0,  0,  0,  0, 1, -1, 1,  4, STATE_FOLLOW },
352
    {   0,  0,  0,  0,  0, 1, -1, 1,  5, STATE_FOLLOW },
353
    {   0, +1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
354
    {   0, -1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
355
    {   0,  0,  0,  0,  0, 1, -1, 1,  6, STATE_FOLLOW },
356
    {   0,  0,  0,  0,  0, 1, -1, 1,  7, STATE_FOLLOW },
357
    {   0, +2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
358
    {   0, -2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
359
    {   0,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_DATA },
360
    {   0,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_SIGN },
361
    {   0,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_DATA },
362
    {   0,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_SIGN },
363
    {   0,  0,  0,  0,  0, 1, -1, 3,  2, STATE_FOLLOW },
364
    {   0,  0,  0,  0,  0, 1, -1, 3,  3, STATE_FOLLOW },
365
    {   0,  0,  0,  0,  0, 1, -1, 4,  1,   STATE_DATA },
366
    {   0,  0,  0,  0,  0, 1, -1, 5,  0,  STATE_START },
367
    {  +8,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
368
    {  +9,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
369
    {  +4,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
370
    {  +4,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
371
    { +10,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
372
    { +11,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
373
    {  +5,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
374
    {  +5,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
375
    {  +2,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
376
    {  +2,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
377
    {  +2,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
378
    {  +2,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
379
    {  +2,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
380
    {  +2,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
381
    {  +2,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
382
    {  +2,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
383
    { +12,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
384
    { +13,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
385
    {  +6,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
386
    {  +6,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
387
    { +14,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
388
    { +15,  0,  0,  0,  0, 4, +1, 0,  0, STATE_FOLLOW },
389
    {  +7,  0,  0,  0,  0, 3, +1, 1,  0,  STATE_START },
390
    {  +7,  0,  0,  0,  0, 3, -1, 1,  0,  STATE_START },
391
    {  +3,  0,  0,  0,  0, 2, +1, 1,  2, STATE_FOLLOW },
392
    {  +3,  0,  0,  0,  0, 2, +1, 1,  3, STATE_FOLLOW },
393
    {  +3,  0,  0,  0,  0, 2, +1, 2,  1,   STATE_DATA },
394
    {  +3,  0,  0,  0,  0, 2, +1, 3,  0,  STATE_START },
395
    {  +3,  0,  0,  0,  0, 2, -1, 1,  2, STATE_FOLLOW },
396
    {  +3,  0,  0,  0,  0, 2, -1, 1,  3, STATE_FOLLOW },
397
    {  +3,  0,  0,  0,  0, 2, -1, 2,  1,   STATE_DATA },
398
    {  +3,  0,  0,  0,  0, 2, -1, 3,  0,  STATE_START },
399
    {  +1,  0,  0,  0,  0, 1, +1, 1,  4, STATE_FOLLOW },
400
    {  +1,  0,  0,  0,  0, 1, +1, 1,  5, STATE_FOLLOW },
401
    {  +1, +1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
402
    {  +1, -1,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
403
    {  +1,  0,  0,  0,  0, 1, +1, 1,  6, STATE_FOLLOW },
404
    {  +1,  0,  0,  0,  0, 1, +1, 1,  7, STATE_FOLLOW },
405
    {  +1, +2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
406
    {  +1, -2,  0,  0,  0, 1, +1, 2,  0,  STATE_START },
407
    {  +1,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_DATA },
408
    {  +1,  0,  0,  0,  0, 1, +1, 2,  2,   STATE_SIGN },
409
    {  +1,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_DATA },
410
    {  +1,  0,  0,  0,  0, 1, +1, 2,  3,   STATE_SIGN },
411
    {  +1,  0,  0,  0,  0, 1, +1, 3,  2, STATE_FOLLOW },
412
    {  +1,  0,  0,  0,  0, 1, +1, 3,  3, STATE_FOLLOW },
413
    {  +1,  0,  0,  0,  0, 1, +1, 4,  1,   STATE_DATA },
414
    {  +1,  0,  0,  0,  0, 1, +1, 5,  0,  STATE_START },
415
    {  +1,  0,  0,  0,  0, 1, -1, 1,  4, STATE_FOLLOW },
416
    {  +1,  0,  0,  0,  0, 1, -1, 1,  5, STATE_FOLLOW },
417
    {  +1, +1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
418
    {  +1, -1,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
419
    {  +1,  0,  0,  0,  0, 1, -1, 1,  6, STATE_FOLLOW },
420
    {  +1,  0,  0,  0,  0, 1, -1, 1,  7, STATE_FOLLOW },
421
    {  +1, +2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
422
    {  +1, -2,  0,  0,  0, 1, -1, 2,  0,  STATE_START },
423
    {  +1,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_DATA },
424
    {  +1,  0,  0,  0,  0, 1, -1, 2,  2,   STATE_SIGN },
425
    {  +1,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_DATA },
426
    {  +1,  0,  0,  0,  0, 1, -1, 2,  3,   STATE_SIGN },
427
    {  +1,  0,  0,  0,  0, 1, -1, 3,  2, STATE_FOLLOW },
428
    {  +1,  0,  0,  0,  0, 1, -1, 3,  3, STATE_FOLLOW },
429
    {  +1,  0,  0,  0,  0, 1, -1, 4,  1,   STATE_DATA },
430
    {  +1,  0,  0,  0,  0, 1, -1, 5,  0,  STATE_START },
431
    {   0,  0,  0,  0,  0, 0, +1, 1,  8, STATE_FOLLOW },
432
    {   0,  0,  0,  0,  0, 0, +1, 1,  9, STATE_FOLLOW },
433
    {   0, +3,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
434
    {   0, -3,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
435
    {   0,  0,  0,  0,  0, 0, +1, 1, 10, STATE_FOLLOW },
436
    {   0,  0,  0,  0,  0, 0, +1, 1, 11, STATE_FOLLOW },
437
    {   0, +4,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
438
    {   0, -4,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
439
    {   0, +1,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
440
    {   0, +1,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
441
    {   0, +1,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
442
    {   0, +1,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
443
    {   0, -1,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
444
    {   0, -1,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
445
    {   0, -1,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
446
    {   0, -1,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
447
    {   0,  0,  0,  0,  0, 0, +1, 1, 12, STATE_FOLLOW },
448
    {   0,  0,  0,  0,  0, 0, +1, 1, 13, STATE_FOLLOW },
449
    {   0, +5,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
450
    {   0, -5,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
451
    {   0,  0,  0,  0,  0, 0, +1, 1, 14, STATE_FOLLOW },
452
    {   0,  0,  0,  0,  0, 0, +1, 1, 15, STATE_FOLLOW },
453
    {   0, +6,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
454
    {   0, -6,  0,  0,  0, 0, +1, 2,  0,  STATE_START },
455
    {   0, +2,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
456
    {   0, +2,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
457
    {   0, +2,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
458
    {   0, +2,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
459
    {   0, -2,  0,  0,  0, 0, +1, 2,  2, STATE_FOLLOW },
460
    {   0, -2,  0,  0,  0, 0, +1, 2,  3, STATE_FOLLOW },
461
    {   0, -2,  0,  0,  0, 0, +1, 3,  1,   STATE_DATA },
462
    {   0, -2,  0,  0,  0, 0, +1, 4,  0,  STATE_START },
463
    {   0,  0,  0,  0,  0, 0, +1, 2,  4,   STATE_DATA },
464
    {   0,  0,  0,  0,  0, 0, +1, 2,  4,   STATE_SIGN },
465
    {   0,  0,  0,  0,  0, 0, +1, 2,  5,   STATE_DATA },
466
    {   0,  0,  0,  0,  0, 0, +1, 2,  5,   STATE_SIGN },
467
    {   0,  0, +1,  0,  0, 0, +1, 3,  1,   STATE_DATA },
468
    {   0,  0, +1,  0,  0, 0, +1, 4,  0,  STATE_START },
469
    {   0,  0, -1,  0,  0, 0, +1, 3,  1,   STATE_DATA },
470
    {   0,  0, -1,  0,  0, 0, +1, 4,  0,  STATE_START },
471
    {   0,  0,  0,  0,  0, 0, +1, 2,  6,   STATE_DATA },
472
    {   0,  0,  0,  0,  0, 0, +1, 2,  6,   STATE_SIGN },
473
    {   0,  0,  0,  0,  0, 0, +1, 2,  7,   STATE_DATA },
474
    {   0,  0,  0,  0,  0, 0, +1, 2,  7,   STATE_SIGN },
475
    {   0,  0, +2,  0,  0, 0, +1, 3,  1,   STATE_DATA },
476
    {   0,  0, +2,  0,  0, 0, +1, 4,  0,  STATE_START },
477
    {   0,  0, -2,  0,  0, 0, +1, 3,  1,   STATE_DATA },
478
    {   0,  0, -2,  0,  0, 0, +1, 4,  0,  STATE_START },
479
    {   0,  0,  0,  0,  0, 0, +1, 3,  4, STATE_FOLLOW },
480
    {   0,  0,  0,  0,  0, 0, +1, 3,  5, STATE_FOLLOW },
481
    {   0,  0,  0, +1,  0, 0, +1, 4,  0,  STATE_START },
482
    {   0,  0,  0, -1,  0, 0, +1, 4,  0,  STATE_START },
483
    {   0,  0,  0,  0,  0, 0, +1, 3,  6, STATE_FOLLOW },
484
    {   0,  0,  0,  0,  0, 0, +1, 3,  7, STATE_FOLLOW },
485
    {   0,  0,  0, +2,  0, 0, +1, 4,  0,  STATE_START },
486
    {   0,  0,  0, -2,  0, 0, +1, 4,  0,  STATE_START },
487
    {   0,  0,  0,  0,  0, 0, +1, 4,  2,   STATE_DATA },
488
    {   0,  0,  0,  0,  0, 0, +1, 4,  2,   STATE_SIGN },
489
    {   0,  0,  0,  0,  0, 0, +1, 4,  3,   STATE_DATA },
490
    {   0,  0,  0,  0,  0, 0, +1, 4,  3,   STATE_SIGN },
491
    {   0,  0,  0,  0,  0, 0, +1, 5,  2, STATE_FOLLOW },
492
    {   0,  0,  0,  0,  0, 0, +1, 5,  3, STATE_FOLLOW },
493
    {   0,  0,  0,  0,  0, 0, +1, 6,  1,   STATE_DATA },
494
    {   0,  0,  0,  0,  0, 0, +1, 7,  0,  STATE_START },
495
    {   0,  0,  0,  0,  0, 0, -1, 1,  8, STATE_FOLLOW },
496
    {   0,  0,  0,  0,  0, 0, -1, 1,  9, STATE_FOLLOW },
497
    {   0, +3,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
498
    {   0, -3,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
499
    {   0,  0,  0,  0,  0, 0, -1, 1, 10, STATE_FOLLOW },
500
    {   0,  0,  0,  0,  0, 0, -1, 1, 11, STATE_FOLLOW },
501
    {   0, +4,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
502
    {   0, -4,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
503
    {   0, +1,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
504
    {   0, +1,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
505
    {   0, +1,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
506
    {   0, +1,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
507
    {   0, -1,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
508
    {   0, -1,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
509
    {   0, -1,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
510
    {   0, -1,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
511
    {   0,  0,  0,  0,  0, 0, -1, 1, 12, STATE_FOLLOW },
512
    {   0,  0,  0,  0,  0, 0, -1, 1, 13, STATE_FOLLOW },
513
    {   0, +5,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
514
    {   0, -5,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
515
    {   0,  0,  0,  0,  0, 0, -1, 1, 14, STATE_FOLLOW },
516
    {   0,  0,  0,  0,  0, 0, -1, 1, 15, STATE_FOLLOW },
517
    {   0, +6,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
518
    {   0, -6,  0,  0,  0, 0, -1, 2,  0,  STATE_START },
519
    {   0, +2,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
520
    {   0, +2,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
521
    {   0, +2,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
522
    {   0, +2,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
523
    {   0, -2,  0,  0,  0, 0, -1, 2,  2, STATE_FOLLOW },
524
    {   0, -2,  0,  0,  0, 0, -1, 2,  3, STATE_FOLLOW },
525
    {   0, -2,  0,  0,  0, 0, -1, 3,  1,   STATE_DATA },
526
    {   0, -2,  0,  0,  0, 0, -1, 4,  0,  STATE_START },
527
    {   0,  0,  0,  0,  0, 0, -1, 2,  4,   STATE_DATA },
528
    {   0,  0,  0,  0,  0, 0, -1, 2,  4,   STATE_SIGN },
529
    {   0,  0,  0,  0,  0, 0, -1, 2,  5,   STATE_DATA },
530
    {   0,  0,  0,  0,  0, 0, -1, 2,  5,   STATE_SIGN },
531
    {   0,  0, +1,  0,  0, 0, -1, 3,  1,   STATE_DATA },
532
    {   0,  0, +1,  0,  0, 0, -1, 4,  0,  STATE_START },
533
    {   0,  0, -1,  0,  0, 0, -1, 3,  1,   STATE_DATA },
534
    {   0,  0, -1,  0,  0, 0, -1, 4,  0,  STATE_START },
535
    {   0,  0,  0,  0,  0, 0, -1, 2,  6,   STATE_DATA },
536
    {   0,  0,  0,  0,  0, 0, -1, 2,  6,   STATE_SIGN },
537
    {   0,  0,  0,  0,  0, 0, -1, 2,  7,   STATE_DATA },
538
    {   0,  0,  0,  0,  0, 0, -1, 2,  7,   STATE_SIGN },
539
    {   0,  0, +2,  0,  0, 0, -1, 3,  1,   STATE_DATA },
540
    {   0,  0, +2,  0,  0, 0, -1, 4,  0,  STATE_START },
541
    {   0,  0, -2,  0,  0, 0, -1, 3,  1,   STATE_DATA },
542
    {   0,  0, -2,  0,  0, 0, -1, 4,  0,  STATE_START },
543
    {   0,  0,  0,  0,  0, 0, -1, 3,  4, STATE_FOLLOW },
544
    {   0,  0,  0,  0,  0, 0, -1, 3,  5, STATE_FOLLOW },
545
    {   0,  0,  0, +1,  0, 0, -1, 4,  0,  STATE_START },
546
    {   0,  0,  0, -1,  0, 0, -1, 4,  0,  STATE_START },
547
    {   0,  0,  0,  0,  0, 0, -1, 3,  6, STATE_FOLLOW },
548
    {   0,  0,  0,  0,  0, 0, -1, 3,  7, STATE_FOLLOW },
549
    {   0,  0,  0, +2,  0, 0, -1, 4,  0,  STATE_START },
550
    {   0,  0,  0, -2,  0, 0, -1, 4,  0,  STATE_START },
551
    {   0,  0,  0,  0,  0, 0, -1, 4,  2,   STATE_DATA },
552
    {   0,  0,  0,  0,  0, 0, -1, 4,  2,   STATE_SIGN },
553
    {   0,  0,  0,  0,  0, 0, -1, 4,  3,   STATE_DATA },
554
    {   0,  0,  0,  0,  0, 0, -1, 4,  3,   STATE_SIGN },
555
    {   0,  0,  0,  0,  0, 0, -1, 5,  2, STATE_FOLLOW },
556
    {   0,  0,  0,  0,  0, 0, -1, 5,  3, STATE_FOLLOW },
557
    {   0,  0,  0,  0,  0, 0, -1, 6,  1,   STATE_DATA },
558
    {   0,  0,  0,  0,  0, 0, -1, 7,  0,  STATE_START },
559
    {   0,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
560
    {   0,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
561
    {  +1,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
562
    {  +1,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
563
    {   0,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
564
    {   0,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
565
    {   0,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
566
    {   0,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
567
    {  +2,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
568
    {  +2,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
569
    {  +3,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
570
    {  +3,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
571
    {  +1,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
572
    {  +1,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
573
    {  +1,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
574
    {  +1,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
575
    {   0,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
576
    {   0,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
577
    {   0,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
578
    {   0,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
579
    {   0,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
580
    {   0,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
581
    {   0,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
582
    {   0,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
583
    {   0,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
584
    {   0,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
585
    {   0,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
586
    {   0,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
587
    {   0,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
588
    {   0,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
589
    {   0,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
590
    {   0,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
591
    {  +4,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
592
    {  +4,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
593
    {  +5,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
594
    {  +5,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
595
    {  +2,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
596
    {  +2,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
597
    {  +2,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
598
    {  +2,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
599
    {  +6,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
600
    {  +6,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
601
    {  +7,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
602
    {  +7,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
603
    {  +3,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
604
    {  +3,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
605
    {  +3,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
606
    {  +3,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
607
    {  +1,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
608
    {  +1,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
609
    {  +1,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
610
    {  +1,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
611
    {  +1,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
612
    {  +1,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
613
    {  +1,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
614
    {  +1,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
615
    {  +1,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
616
    {  +1,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
617
    {  +1,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
618
    {  +1,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
619
    {  +1,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
620
    {  +1,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
621
    {  +1,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
622
    {  +1,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
623
    {   0,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_DATA },
624
    {   0,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_SIGN },
625
    {   0,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_DATA },
626
    {   0,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_SIGN },
627
    {   0, +1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
628
    {   0, +1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
629
    {   0, -1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
630
    {   0, -1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
631
    {   0,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_DATA },
632
    {   0,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_SIGN },
633
    {   0,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_DATA },
634
    {   0,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_SIGN },
635
    {   0, +2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
636
    {   0, +2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
637
    {   0, -2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
638
    {   0, -2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
639
    {   0,  0,  0,  0,  0, 1, +1, 2,  4, STATE_FOLLOW },
640
    {   0,  0,  0,  0,  0, 1, +1, 2,  5, STATE_FOLLOW },
641
    {   0,  0, +1,  0,  0, 1, +1, 3,  0,  STATE_START },
642
    {   0,  0, -1,  0,  0, 1, +1, 3,  0,  STATE_START },
643
    {   0,  0,  0,  0,  0, 1, +1, 2,  6, STATE_FOLLOW },
644
    {   0,  0,  0,  0,  0, 1, +1, 2,  7, STATE_FOLLOW },
645
    {   0,  0, +2,  0,  0, 1, +1, 3,  0,  STATE_START },
646
    {   0,  0, -2,  0,  0, 1, +1, 3,  0,  STATE_START },
647
    {   0,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_DATA },
648
    {   0,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_SIGN },
649
    {   0,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_DATA },
650
    {   0,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_SIGN },
651
    {   0,  0,  0,  0,  0, 1, +1, 4,  2, STATE_FOLLOW },
652
    {   0,  0,  0,  0,  0, 1, +1, 4,  3, STATE_FOLLOW },
653
    {   0,  0,  0,  0,  0, 1, +1, 5,  1,   STATE_DATA },
654
    {   0,  0,  0,  0,  0, 1, +1, 6,  0,  STATE_START },
655
    {   0,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_DATA },
656
    {   0,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_SIGN },
657
    {   0,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_DATA },
658
    {   0,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_SIGN },
659
    {   0, +1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
660
    {   0, +1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
661
    {   0, -1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
662
    {   0, -1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
663
    {   0,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_DATA },
664
    {   0,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_SIGN },
665
    {   0,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_DATA },
666
    {   0,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_SIGN },
667
    {   0, +2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
668
    {   0, +2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
669
    {   0, -2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
670
    {   0, -2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
671
    {   0,  0,  0,  0,  0, 1, -1, 2,  4, STATE_FOLLOW },
672
    {   0,  0,  0,  0,  0, 1, -1, 2,  5, STATE_FOLLOW },
673
    {   0,  0, +1,  0,  0, 1, -1, 3,  0,  STATE_START },
674
    {   0,  0, -1,  0,  0, 1, -1, 3,  0,  STATE_START },
675
    {   0,  0,  0,  0,  0, 1, -1, 2,  6, STATE_FOLLOW },
676
    {   0,  0,  0,  0,  0, 1, -1, 2,  7, STATE_FOLLOW },
677
    {   0,  0, +2,  0,  0, 1, -1, 3,  0,  STATE_START },
678
    {   0,  0, -2,  0,  0, 1, -1, 3,  0,  STATE_START },
679
    {   0,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_DATA },
680
    {   0,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_SIGN },
681
    {   0,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_DATA },
682
    {   0,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_SIGN },
683
    {   0,  0,  0,  0,  0, 1, -1, 4,  2, STATE_FOLLOW },
684
    {   0,  0,  0,  0,  0, 1, -1, 4,  3, STATE_FOLLOW },
685
    {   0,  0,  0,  0,  0, 1, -1, 5,  1,   STATE_DATA },
686
    {   0,  0,  0,  0,  0, 1, -1, 6,  0,  STATE_START },
687
    {  +8,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
688
    {  +8,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
689
    {  +9,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
690
    {  +9,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
691
    {  +4,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
692
    {  +4,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
693
    {  +4,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
694
    {  +4,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
695
    { +10,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
696
    { +10,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
697
    { +11,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
698
    { +11,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
699
    {  +5,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
700
    {  +5,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
701
    {  +5,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
702
    {  +5,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
703
    {  +2,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
704
    {  +2,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
705
    {  +2,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
706
    {  +2,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
707
    {  +2,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
708
    {  +2,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
709
    {  +2,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
710
    {  +2,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
711
    {  +2,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
712
    {  +2,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
713
    {  +2,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
714
    {  +2,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
715
    {  +2,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
716
    {  +2,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
717
    {  +2,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
718
    {  +2,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
719
    { +12,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
720
    { +12,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
721
    { +13,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
722
    { +13,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
723
    {  +6,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
724
    {  +6,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
725
    {  +6,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
726
    {  +6,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
727
    { +14,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
728
    { +14,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
729
    { +15,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_DATA },
730
    { +15,  0,  0,  0,  0, 4, +1, 0,  0,   STATE_SIGN },
731
    {  +7,  0,  0,  0,  0, 3, +1, 1,  1,   STATE_DATA },
732
    {  +7,  0,  0,  0,  0, 3, +1, 2,  0,  STATE_START },
733
    {  +7,  0,  0,  0,  0, 3, -1, 1,  1,   STATE_DATA },
734
    {  +7,  0,  0,  0,  0, 3, -1, 2,  0,  STATE_START },
735
    {  +3,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_DATA },
736
    {  +3,  0,  0,  0,  0, 2, +1, 1,  2,   STATE_SIGN },
737
    {  +3,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_DATA },
738
    {  +3,  0,  0,  0,  0, 2, +1, 1,  3,   STATE_SIGN },
739
    {  +3,  0,  0,  0,  0, 2, +1, 2,  2, STATE_FOLLOW },
740
    {  +3,  0,  0,  0,  0, 2, +1, 2,  3, STATE_FOLLOW },
741
    {  +3,  0,  0,  0,  0, 2, +1, 3,  1,   STATE_DATA },
742
    {  +3,  0,  0,  0,  0, 2, +1, 4,  0,  STATE_START },
743
    {  +3,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_DATA },
744
    {  +3,  0,  0,  0,  0, 2, -1, 1,  2,   STATE_SIGN },
745
    {  +3,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_DATA },
746
    {  +3,  0,  0,  0,  0, 2, -1, 1,  3,   STATE_SIGN },
747
    {  +3,  0,  0,  0,  0, 2, -1, 2,  2, STATE_FOLLOW },
748
    {  +3,  0,  0,  0,  0, 2, -1, 2,  3, STATE_FOLLOW },
749
    {  +3,  0,  0,  0,  0, 2, -1, 3,  1,   STATE_DATA },
750
    {  +3,  0,  0,  0,  0, 2, -1, 4,  0,  STATE_START },
751
    {  +1,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_DATA },
752
    {  +1,  0,  0,  0,  0, 1, +1, 1,  4,   STATE_SIGN },
753
    {  +1,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_DATA },
754
    {  +1,  0,  0,  0,  0, 1, +1, 1,  5,   STATE_SIGN },
755
    {  +1, +1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
756
    {  +1, +1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
757
    {  +1, -1,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
758
    {  +1, -1,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
759
    {  +1,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_DATA },
760
    {  +1,  0,  0,  0,  0, 1, +1, 1,  6,   STATE_SIGN },
761
    {  +1,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_DATA },
762
    {  +1,  0,  0,  0,  0, 1, +1, 1,  7,   STATE_SIGN },
763
    {  +1, +2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
764
    {  +1, +2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
765
    {  +1, -2,  0,  0,  0, 1, +1, 2,  1,   STATE_DATA },
766
    {  +1, -2,  0,  0,  0, 1, +1, 3,  0,  STATE_START },
767
    {  +1,  0,  0,  0,  0, 1, +1, 2,  4, STATE_FOLLOW },
768
    {  +1,  0,  0,  0,  0, 1, +1, 2,  5, STATE_FOLLOW },
769
    {  +1,  0, +1,  0,  0, 1, +1, 3,  0,  STATE_START },
770
    {  +1,  0, -1,  0,  0, 1, +1, 3,  0,  STATE_START },
771
    {  +1,  0,  0,  0,  0, 1, +1, 2,  6, STATE_FOLLOW },
772
    {  +1,  0,  0,  0,  0, 1, +1, 2,  7, STATE_FOLLOW },
773
    {  +1,  0, +2,  0,  0, 1, +1, 3,  0,  STATE_START },
774
    {  +1,  0, -2,  0,  0, 1, +1, 3,  0,  STATE_START },
775
    {  +1,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_DATA },
776
    {  +1,  0,  0,  0,  0, 1, +1, 3,  2,   STATE_SIGN },
777
    {  +1,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_DATA },
778
    {  +1,  0,  0,  0,  0, 1, +1, 3,  3,   STATE_SIGN },
779
    {  +1,  0,  0,  0,  0, 1, +1, 4,  2, STATE_FOLLOW },
780
    {  +1,  0,  0,  0,  0, 1, +1, 4,  3, STATE_FOLLOW },
781
    {  +1,  0,  0,  0,  0, 1, +1, 5,  1,   STATE_DATA },
782
    {  +1,  0,  0,  0,  0, 1, +1, 6,  0,  STATE_START },
783
    {  +1,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_DATA },
784
    {  +1,  0,  0,  0,  0, 1, -1, 1,  4,   STATE_SIGN },
785
    {  +1,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_DATA },
786
    {  +1,  0,  0,  0,  0, 1, -1, 1,  5,   STATE_SIGN },
787
    {  +1, +1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
788
    {  +1, +1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
789
    {  +1, -1,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
790
    {  +1, -1,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
791
    {  +1,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_DATA },
792
    {  +1,  0,  0,  0,  0, 1, -1, 1,  6,   STATE_SIGN },
793
    {  +1,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_DATA },
794
    {  +1,  0,  0,  0,  0, 1, -1, 1,  7,   STATE_SIGN },
795
    {  +1, +2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
796
    {  +1, +2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
797
    {  +1, -2,  0,  0,  0, 1, -1, 2,  1,   STATE_DATA },
798
    {  +1, -2,  0,  0,  0, 1, -1, 3,  0,  STATE_START },
799
    {  +1,  0,  0,  0,  0, 1, -1, 2,  4, STATE_FOLLOW },
800
    {  +1,  0,  0,  0,  0, 1, -1, 2,  5, STATE_FOLLOW },
801
    {  +1,  0, +1,  0,  0, 1, -1, 3,  0,  STATE_START },
802
    {  +1,  0, -1,  0,  0, 1, -1, 3,  0,  STATE_START },
803
    {  +1,  0,  0,  0,  0, 1, -1, 2,  6, STATE_FOLLOW },
804
    {  +1,  0,  0,  0,  0, 1, -1, 2,  7, STATE_FOLLOW },
805
    {  +1,  0, +2,  0,  0, 1, -1, 3,  0,  STATE_START },
806
    {  +1,  0, -2,  0,  0, 1, -1, 3,  0,  STATE_START },
807
    {  +1,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_DATA },
808
    {  +1,  0,  0,  0,  0, 1, -1, 3,  2,   STATE_SIGN },
809
    {  +1,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_DATA },
810
    {  +1,  0,  0,  0,  0, 1, -1, 3,  3,   STATE_SIGN },
811
    {  +1,  0,  0,  0,  0, 1, -1, 4,  2, STATE_FOLLOW },
812
    {  +1,  0,  0,  0,  0, 1, -1, 4,  3, STATE_FOLLOW },
813
    {  +1,  0,  0,  0,  0, 1, -1, 5,  1,   STATE_DATA },
814
    {  +1,  0,  0,  0,  0, 1, -1, 6,  0,  STATE_START },
815
    {   0,  0,  0,  0,  0, 0, +1, 1,  8,   STATE_DATA },
816
    {   0,  0,  0,  0,  0, 0, +1, 1,  8,   STATE_SIGN },
817
    {   0,  0,  0,  0,  0, 0, +1, 1,  9,   STATE_DATA },
818
    {   0,  0,  0,  0,  0, 0, +1, 1,  9,   STATE_SIGN },
819
    {   0, +3,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
820
    {   0, +3,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
821
    {   0, -3,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
822
    {   0, -3,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
823
    {   0,  0,  0,  0,  0, 0, +1, 1, 10,   STATE_DATA },
824
    {   0,  0,  0,  0,  0, 0, +1, 1, 10,   STATE_SIGN },
825
    {   0,  0,  0,  0,  0, 0, +1, 1, 11,   STATE_DATA },
826
    {   0,  0,  0,  0,  0, 0, +1, 1, 11,   STATE_SIGN },
827
    {   0, +4,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
828
    {   0, +4,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
829
    {   0, -4,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
830
    {   0, -4,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
831
    {   0, +1,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
832
    {   0, +1,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
833
    {   0, +1,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
834
    {   0, +1,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
835
    {   0, +1,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
836
    {   0, +1,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
837
    {   0, +1,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
838
    {   0, +1,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
839
    {   0, -1,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
840
    {   0, -1,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
841
    {   0, -1,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
842
    {   0, -1,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
843
    {   0, -1,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
844
    {   0, -1,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
845
    {   0, -1,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
846
    {   0, -1,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
847
    {   0,  0,  0,  0,  0, 0, +1, 1, 12,   STATE_DATA },
848
    {   0,  0,  0,  0,  0, 0, +1, 1, 12,   STATE_SIGN },
849
    {   0,  0,  0,  0,  0, 0, +1, 1, 13,   STATE_DATA },
850
    {   0,  0,  0,  0,  0, 0, +1, 1, 13,   STATE_SIGN },
851
    {   0, +5,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
852
    {   0, +5,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
853
    {   0, -5,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
854
    {   0, -5,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
855
    {   0,  0,  0,  0,  0, 0, +1, 1, 14,   STATE_DATA },
856
    {   0,  0,  0,  0,  0, 0, +1, 1, 14,   STATE_SIGN },
857
    {   0,  0,  0,  0,  0, 0, +1, 1, 15,   STATE_DATA },
858
    {   0,  0,  0,  0,  0, 0, +1, 1, 15,   STATE_SIGN },
859
    {   0, +6,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
860
    {   0, +6,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
861
    {   0, -6,  0,  0,  0, 0, +1, 2,  1,   STATE_DATA },
862
    {   0, -6,  0,  0,  0, 0, +1, 3,  0,  STATE_START },
863
    {   0, +2,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
864
    {   0, +2,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
865
    {   0, +2,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
866
    {   0, +2,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
867
    {   0, +2,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
868
    {   0, +2,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
869
    {   0, +2,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
870
    {   0, +2,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
871
    {   0, -2,  0,  0,  0, 0, +1, 2,  2,   STATE_DATA },
872
    {   0, -2,  0,  0,  0, 0, +1, 2,  2,   STATE_SIGN },
873
    {   0, -2,  0,  0,  0, 0, +1, 2,  3,   STATE_DATA },
874
    {   0, -2,  0,  0,  0, 0, +1, 2,  3,   STATE_SIGN },
875
    {   0, -2,  0,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
876
    {   0, -2,  0,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
877
    {   0, -2,  0,  0,  0, 0, +1, 4,  1,   STATE_DATA },
878
    {   0, -2,  0,  0,  0, 0, +1, 5,  0,  STATE_START },
879
    {   0,  0,  0,  0,  0, 0, +1, 2,  8, STATE_FOLLOW },
880
    {   0,  0,  0,  0,  0, 0, +1, 2,  9, STATE_FOLLOW },
881
    {   0,  0, +3,  0,  0, 0, +1, 3,  0,  STATE_START },
882
    {   0,  0, -3,  0,  0, 0, +1, 3,  0,  STATE_START },
883
    {   0,  0,  0,  0,  0, 0, +1, 2, 10, STATE_FOLLOW },
884
    {   0,  0,  0,  0,  0, 0, +1, 2, 11, STATE_FOLLOW },
885
    {   0,  0, +4,  0,  0, 0, +1, 3,  0,  STATE_START },
886
    {   0,  0, -4,  0,  0, 0, +1, 3,  0,  STATE_START },
887
    {   0,  0, +1,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
888
    {   0,  0, +1,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
889
    {   0,  0, +1,  0,  0, 0, +1, 4,  1,   STATE_DATA },
890
    {   0,  0, +1,  0,  0, 0, +1, 5,  0,  STATE_START },
891
    {   0,  0, -1,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
892
    {   0,  0, -1,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
893
    {   0,  0, -1,  0,  0, 0, +1, 4,  1,   STATE_DATA },
894
    {   0,  0, -1,  0,  0, 0, +1, 5,  0,  STATE_START },
895
    {   0,  0,  0,  0,  0, 0, +1, 2, 12, STATE_FOLLOW },
896
    {   0,  0,  0,  0,  0, 0, +1, 2, 13, STATE_FOLLOW },
897
    {   0,  0, +5,  0,  0, 0, +1, 3,  0,  STATE_START },
898
    {   0,  0, -5,  0,  0, 0, +1, 3,  0,  STATE_START },
899
    {   0,  0,  0,  0,  0, 0, +1, 2, 14, STATE_FOLLOW },
900
    {   0,  0,  0,  0,  0, 0, +1, 2, 15, STATE_FOLLOW },
901
    {   0,  0, +6,  0,  0, 0, +1, 3,  0,  STATE_START },
902
    {   0,  0, -6,  0,  0, 0, +1, 3,  0,  STATE_START },
903
    {   0,  0, +2,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
904
    {   0,  0, +2,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
905
    {   0,  0, +2,  0,  0, 0, +1, 4,  1,   STATE_DATA },
906
    {   0,  0, +2,  0,  0, 0, +1, 5,  0,  STATE_START },
907
    {   0,  0, -2,  0,  0, 0, +1, 3,  2, STATE_FOLLOW },
908
    {   0,  0, -2,  0,  0, 0, +1, 3,  3, STATE_FOLLOW },
909
    {   0,  0, -2,  0,  0, 0, +1, 4,  1,   STATE_DATA },
910
    {   0,  0, -2,  0,  0, 0, +1, 5,  0,  STATE_START },
911
    {   0,  0,  0,  0,  0, 0, +1, 3,  4,   STATE_DATA },
912
    {   0,  0,  0,  0,  0, 0, +1, 3,  4,   STATE_SIGN },
913
    {   0,  0,  0,  0,  0, 0, +1, 3,  5,   STATE_DATA },
914
    {   0,  0,  0,  0,  0, 0, +1, 3,  5,   STATE_SIGN },
915
    {   0,  0,  0, +1,  0, 0, +1, 4,  1,   STATE_DATA },
916
    {   0,  0,  0, +1,  0, 0, +1, 5,  0,  STATE_START },
917
    {   0,  0,  0, -1,  0, 0, +1, 4,  1,   STATE_DATA },
918
    {   0,  0,  0, -1,  0, 0, +1, 5,  0,  STATE_START },
919
    {   0,  0,  0,  0,  0, 0, +1, 3,  6,   STATE_DATA },
920
    {   0,  0,  0,  0,  0, 0, +1, 3,  6,   STATE_SIGN },
921
    {   0,  0,  0,  0,  0, 0, +1, 3,  7,   STATE_DATA },
922
    {   0,  0,  0,  0,  0, 0, +1, 3,  7,   STATE_SIGN },
923
    {   0,  0,  0, +2,  0, 0, +1, 4,  1,   STATE_DATA },
924
    {   0,  0,  0, +2,  0, 0, +1, 5,  0,  STATE_START },
925
    {   0,  0,  0, -2,  0, 0, +1, 4,  1,   STATE_DATA },
926
    {   0,  0,  0, -2,  0, 0, +1, 5,  0,  STATE_START },
927
    {   0,  0,  0,  0,  0, 0, +1, 4,  4, STATE_FOLLOW },
928
    {   0,  0,  0,  0,  0, 0, +1, 4,  5, STATE_FOLLOW },
929
    {   0,  0,  0,  0, +1, 0, +1, 5,  0,  STATE_START },
930
    {   0,  0,  0,  0, -1, 0, +1, 5,  0,  STATE_START },
931
    {   0,  0,  0,  0,  0, 0, +1, 4,  6, STATE_FOLLOW },
932
    {   0,  0,  0,  0,  0, 0, +1, 4,  7, STATE_FOLLOW },
933
    {   0,  0,  0,  0, +2, 0, +1, 5,  0,  STATE_START },
934
    {   0,  0,  0,  0, -2, 0, +1, 5,  0,  STATE_START },
935
    {   0,  0,  0,  0,  0, 0, +1, 5,  2,   STATE_DATA },
936
    {   0,  0,  0,  0,  0, 0, +1, 5,  2,   STATE_SIGN },
937
    {   0,  0,  0,  0,  0, 0, +1, 5,  3,   STATE_DATA },
938
    {   0,  0,  0,  0,  0, 0, +1, 5,  3,   STATE_SIGN },
939
    {   0,  0,  0,  0,  0, 0, +1, 6,  2, STATE_FOLLOW },
940
    {   0,  0,  0,  0,  0, 0, +1, 6,  3, STATE_FOLLOW },
941
    {   0,  0,  0,  0,  0, 0, +1, 7,  1,   STATE_DATA },
942
    {   0,  0,  0,  0,  0, 0, +1, 8,  0,  STATE_START },
943
    {   0,  0,  0,  0,  0, 0, -1, 1,  8,   STATE_DATA },
944
    {   0,  0,  0,  0,  0, 0, -1, 1,  8,   STATE_SIGN },
945
    {   0,  0,  0,  0,  0, 0, -1, 1,  9,   STATE_DATA },
946
    {   0,  0,  0,  0,  0, 0, -1, 1,  9,   STATE_SIGN },
947
    {   0, +3,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
948
    {   0, +3,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
949
    {   0, -3,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
950
    {   0, -3,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
951
    {   0,  0,  0,  0,  0, 0, -1, 1, 10,   STATE_DATA },
952
    {   0,  0,  0,  0,  0, 0, -1, 1, 10,   STATE_SIGN },
953
    {   0,  0,  0,  0,  0, 0, -1, 1, 11,   STATE_DATA },
954
    {   0,  0,  0,  0,  0, 0, -1, 1, 11,   STATE_SIGN },
955
    {   0, +4,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
956
    {   0, +4,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
957
    {   0, -4,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
958
    {   0, -4,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
959
    {   0, +1,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
960
    {   0, +1,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
961
    {   0, +1,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
962
    {   0, +1,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
963
    {   0, +1,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
964
    {   0, +1,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
965
    {   0, +1,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
966
    {   0, +1,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
967
    {   0, -1,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
968
    {   0, -1,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
969
    {   0, -1,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
970
    {   0, -1,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
971
    {   0, -1,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
972
    {   0, -1,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
973
    {   0, -1,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
974
    {   0, -1,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
975
    {   0,  0,  0,  0,  0, 0, -1, 1, 12,   STATE_DATA },
976
    {   0,  0,  0,  0,  0, 0, -1, 1, 12,   STATE_SIGN },
977
    {   0,  0,  0,  0,  0, 0, -1, 1, 13,   STATE_DATA },
978
    {   0,  0,  0,  0,  0, 0, -1, 1, 13,   STATE_SIGN },
979
    {   0, +5,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
980
    {   0, +5,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
981
    {   0, -5,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
982
    {   0, -5,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
983
    {   0,  0,  0,  0,  0, 0, -1, 1, 14,   STATE_DATA },
984
    {   0,  0,  0,  0,  0, 0, -1, 1, 14,   STATE_SIGN },
985
    {   0,  0,  0,  0,  0, 0, -1, 1, 15,   STATE_DATA },
986
    {   0,  0,  0,  0,  0, 0, -1, 1, 15,   STATE_SIGN },
987
    {   0, +6,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
988
    {   0, +6,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
989
    {   0, -6,  0,  0,  0, 0, -1, 2,  1,   STATE_DATA },
990
    {   0, -6,  0,  0,  0, 0, -1, 3,  0,  STATE_START },
991
    {   0, +2,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
992
    {   0, +2,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
993
    {   0, +2,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
994
    {   0, +2,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
995
    {   0, +2,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
996
    {   0, +2,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
997
    {   0, +2,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
998
    {   0, +2,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
999
    {   0, -2,  0,  0,  0, 0, -1, 2,  2,   STATE_DATA },
1000
    {   0, -2,  0,  0,  0, 0, -1, 2,  2,   STATE_SIGN },
1001
    {   0, -2,  0,  0,  0, 0, -1, 2,  3,   STATE_DATA },
1002
    {   0, -2,  0,  0,  0, 0, -1, 2,  3,   STATE_SIGN },
1003
    {   0, -2,  0,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1004
    {   0, -2,  0,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1005
    {   0, -2,  0,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1006
    {   0, -2,  0,  0,  0, 0, -1, 5,  0,  STATE_START },
1007
    {   0,  0,  0,  0,  0, 0, -1, 2,  8, STATE_FOLLOW },
1008
    {   0,  0,  0,  0,  0, 0, -1, 2,  9, STATE_FOLLOW },
1009
    {   0,  0, +3,  0,  0, 0, -1, 3,  0,  STATE_START },
1010
    {   0,  0, -3,  0,  0, 0, -1, 3,  0,  STATE_START },
1011
    {   0,  0,  0,  0,  0, 0, -1, 2, 10, STATE_FOLLOW },
1012
    {   0,  0,  0,  0,  0, 0, -1, 2, 11, STATE_FOLLOW },
1013
    {   0,  0, +4,  0,  0, 0, -1, 3,  0,  STATE_START },
1014
    {   0,  0, -4,  0,  0, 0, -1, 3,  0,  STATE_START },
1015
    {   0,  0, +1,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1016
    {   0,  0, +1,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1017
    {   0,  0, +1,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1018
    {   0,  0, +1,  0,  0, 0, -1, 5,  0,  STATE_START },
1019
    {   0,  0, -1,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1020
    {   0,  0, -1,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1021
    {   0,  0, -1,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1022
    {   0,  0, -1,  0,  0, 0, -1, 5,  0,  STATE_START },
1023
    {   0,  0,  0,  0,  0, 0, -1, 2, 12, STATE_FOLLOW },
1024
    {   0,  0,  0,  0,  0, 0, -1, 2, 13, STATE_FOLLOW },
1025
    {   0,  0, +5,  0,  0, 0, -1, 3,  0,  STATE_START },
1026
    {   0,  0, -5,  0,  0, 0, -1, 3,  0,  STATE_START },
1027
    {   0,  0,  0,  0,  0, 0, -1, 2, 14, STATE_FOLLOW },
1028
    {   0,  0,  0,  0,  0, 0, -1, 2, 15, STATE_FOLLOW },
1029
    {   0,  0, +6,  0,  0, 0, -1, 3,  0,  STATE_START },
1030
    {   0,  0, -6,  0,  0, 0, -1, 3,  0,  STATE_START },
1031
    {   0,  0, +2,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1032
    {   0,  0, +2,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1033
    {   0,  0, +2,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1034
    {   0,  0, +2,  0,  0, 0, -1, 5,  0,  STATE_START },
1035
    {   0,  0, -2,  0,  0, 0, -1, 3,  2, STATE_FOLLOW },
1036
    {   0,  0, -2,  0,  0, 0, -1, 3,  3, STATE_FOLLOW },
1037
    {   0,  0, -2,  0,  0, 0, -1, 4,  1,   STATE_DATA },
1038
    {   0,  0, -2,  0,  0, 0, -1, 5,  0,  STATE_START },
1039
    {   0,  0,  0,  0,  0, 0, -1, 3,  4,   STATE_DATA },
1040
    {   0,  0,  0,  0,  0, 0, -1, 3,  4,   STATE_SIGN },
1041
    {   0,  0,  0,  0,  0, 0, -1, 3,  5,   STATE_DATA },
1042
    {   0,  0,  0,  0,  0, 0, -1, 3,  5,   STATE_SIGN },
1043
    {   0,  0,  0, +1,  0, 0, -1, 4,  1,   STATE_DATA },
1044
    {   0,  0,  0, +1,  0, 0, -1, 5,  0,  STATE_START },
1045
    {   0,  0,  0, -1,  0, 0, -1, 4,  1,   STATE_DATA },
1046
    {   0,  0,  0, -1,  0, 0, -1, 5,  0,  STATE_START },
1047
    {   0,  0,  0,  0,  0, 0, -1, 3,  6,   STATE_DATA },
1048
    {   0,  0,  0,  0,  0, 0, -1, 3,  6,   STATE_SIGN },
1049
    {   0,  0,  0,  0,  0, 0, -1, 3,  7,   STATE_DATA },
1050
    {   0,  0,  0,  0,  0, 0, -1, 3,  7,   STATE_SIGN },
1051
    {   0,  0,  0, +2,  0, 0, -1, 4,  1,   STATE_DATA },
1052
    {   0,  0,  0, +2,  0, 0, -1, 5,  0,  STATE_START },
1053
    {   0,  0,  0, -2,  0, 0, -1, 4,  1,   STATE_DATA },
1054
    {   0,  0,  0, -2,  0, 0, -1, 5,  0,  STATE_START },
1055
    {   0,  0,  0,  0,  0, 0, -1, 4,  4, STATE_FOLLOW },
1056
    {   0,  0,  0,  0,  0, 0, -1, 4,  5, STATE_FOLLOW },
1057
    {   0,  0,  0,  0, +1, 0, -1, 5,  0,  STATE_START },
1058
    {   0,  0,  0,  0, -1, 0, -1, 5,  0,  STATE_START },
1059
    {   0,  0,  0,  0,  0, 0, -1, 4,  6, STATE_FOLLOW },
1060
    {   0,  0,  0,  0,  0, 0, -1, 4,  7, STATE_FOLLOW },
1061
    {   0,  0,  0,  0, +2, 0, -1, 5,  0,  STATE_START },
1062
    {   0,  0,  0,  0, -2, 0, -1, 5,  0,  STATE_START },
1063
    {   0,  0,  0,  0,  0, 0, -1, 5,  2,   STATE_DATA },
1064
    {   0,  0,  0,  0,  0, 0, -1, 5,  2,   STATE_SIGN },
1065
    {   0,  0,  0,  0,  0, 0, -1, 5,  3,   STATE_DATA },
1066
    {   0,  0,  0,  0,  0, 0, -1, 5,  3,   STATE_SIGN },
1067
    {   0,  0,  0,  0,  0, 0, -1, 6,  2, STATE_FOLLOW },
1068
    {   0,  0,  0,  0,  0, 0, -1, 6,  3, STATE_FOLLOW },
1069
    {   0,  0,  0,  0,  0, 0, -1, 7,  1,   STATE_DATA },
1070
    {   0,  0,  0,  0,  0, 0, -1, 8,  0,  STATE_START },
1071
};
1072
1073
#define PROCESS_VALS                                   \
1074
    do {                                               \
1075
        val  <<= lut.val0_bits;                        \
1076
        val   |= lut.val0;                             \
1077
        dst[0] = (val - 1) * lut.sign;                 \
1078
        dst[1] = lut.val1;                             \
1079
        dst[2] = lut.val2;                             \
1080
        dst[3] = lut.val3;                             \
1081
        dst[4] = lut.val4;                             \
1082
        dst[5] = 0;                                    \
1083
        dst[6] = 0;                                    \
1084
        dst[7] = 0;                                    \
1085
        if (lut.num)                                   \
1086
            val = lut.val;                             \
1087
        dst += lut.num;                                \
1088
        if (dst >= last)                               \
1089
            return coeffs;                             \
1090
        lut = ff_dirac_golomb_lut[lut.state + *buf++]; \
1091
    } while (0)
1092
1093
32076
int ff_dirac_golomb_read_16bit(const uint8_t *buf, int bytes,
1094
                               uint8_t *_dst, int coeffs)
1095
{
1096
32076
    LUTState lut = ff_dirac_golomb_lut[*buf++];
1097
32076
    int16_t *dst = (int16_t *)_dst, *last = dst + coeffs;
1098
32076
    int16_t val = 0;
1099
1100
8831968
    for (int i = 1; i < bytes; i++)
1101

8831806
        PROCESS_VALS;
1102
1103
    /* Reader needs to be flushed */
1104

162
    PROCESS_VALS;
1105
1106
    /* Still short of coeffs - try to guess and at least output what we have */
1107
    if (lut.state != STATE_START)
1108
        *dst++ = -((lut.state != STATE_SIGN ? (val << 1) | 1 : val) - 1);
1109
1110
    return coeffs - (int)(last - dst);
1111
}
1112
1113
85536
int ff_dirac_golomb_read_32bit(const uint8_t *buf, int bytes,
1114
                               uint8_t *_dst, int coeffs)
1115
{
1116
85536
    LUTState lut = ff_dirac_golomb_lut[*buf++];
1117
85536
    int32_t *dst = (int32_t *)_dst, *last = dst + coeffs;
1118
85536
    int32_t val = 0;
1119
1120
38628086
    for (int i = 1; i < bytes; i++)
1121

38627692
        PROCESS_VALS;
1122
1123
    /* Reader needs to be flushed */
1124

394
    PROCESS_VALS;
1125
1126
    /* Still short of coeffs - try to guess and at least output what we have */
1127
    if (lut.state != STATE_START)
1128
        *dst++ = -((lut.state != STATE_SIGN ? (val << 1) | 1 : val) - 1);
1129
1130
    return coeffs - (int)(last - dst);
1131
}