xref: /aosp_15_r20/external/grpc-grpc/test/cpp/microbenchmarks/huffman_geometries/decode_huff_10_16.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 // Copyright 2023 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // This file is autogenerated: see
16 // tools/codegen/core/gen_huffman_decompressor.cc
17 
18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_10_16_H
19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_10_16_H
20 #include <cstddef>
21 #include <cstdint>
22 
23 #include <grpc/support/port_platform.h>
24 namespace grpc_core {
25 namespace geometry_10_16 {
26 class HuffDecoderCommon {
27  protected:
GetOp2(size_t i)28   static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; }
GetEmit2(size_t,size_t emit)29   static inline uint64_t GetEmit2(size_t, size_t emit) {
30     return table2_0_emit_[emit];
31   }
GetOp3(size_t i)32   static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; }
GetEmit3(size_t,size_t emit)33   static inline uint64_t GetEmit3(size_t, size_t emit) {
34     return table3_0_emit_[emit];
35   }
GetOp4(size_t i)36   static inline uint64_t GetOp4(size_t i) {
37     return table4_ops_[i >> 6][i & 0x3f];
38   }
GetEmit4(size_t i,size_t emit)39   static inline uint64_t GetEmit4(size_t i, size_t emit) {
40     return table4_emit_[i >> 6][emit];
41   }
GetOp5(size_t i)42   static inline uint64_t GetOp5(size_t i) {
43     return table5_ops_[i >> 7][i & 0x7f];
44   }
GetEmit5(size_t i,size_t emit)45   static inline uint64_t GetEmit5(size_t i, size_t emit) {
46     return table5_emit_[i >> 7][emit];
47   }
GetOp6(size_t i)48   static inline uint64_t GetOp6(size_t i) {
49     return table6_ops_[i >> 5][i & 0x1f];
50   }
GetEmit6(size_t i,size_t emit)51   static inline uint64_t GetEmit6(size_t i, size_t emit) {
52     return table6_emit_[i >> 5][emit];
53   }
GetOp1(size_t i)54   static inline uint64_t GetOp1(size_t i) {
55     return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]];
56   }
GetEmit1(size_t i,size_t emit)57   static inline uint64_t GetEmit1(size_t i, size_t emit) {
58     return table1_emit_[i >> 6][emit];
59   }
GetOp7(size_t i)60   static inline uint64_t GetOp7(size_t i) { return i ? 3 : 1; }
GetEmit7(size_t,size_t emit)61   static inline uint64_t GetEmit7(size_t, size_t emit) {
62     return emit ? 43 : 39;
63   }
GetOp9(size_t i)64   static inline uint64_t GetOp9(size_t i) { return table9_0_inner_[i]; }
GetEmit9(size_t,size_t emit)65   static inline uint64_t GetEmit9(size_t, size_t emit) {
66     return table9_0_emit_[emit];
67   }
GetOp10(size_t i)68   static inline uint64_t GetOp10(size_t i) {
69     return table10_0_inner_[table10_0_outer_[i]];
70   }
GetEmit10(size_t,size_t emit)71   static inline uint64_t GetEmit10(size_t, size_t emit) {
72     return table10_0_emit_[emit];
73   }
GetOp11(size_t i)74   static inline uint64_t GetOp11(size_t i) { return table11_0_ops_[i]; }
GetEmit11(size_t,size_t emit)75   static inline uint64_t GetEmit11(size_t, size_t emit) {
76     return table11_0_emit_[emit];
77   }
GetOp12(size_t i)78   static inline uint64_t GetOp12(size_t i) { return table12_0_ops_[i]; }
GetEmit12(size_t,size_t emit)79   static inline uint64_t GetEmit12(size_t, size_t emit) {
80     return table11_0_emit_[emit];
81   }
GetOp13(size_t i)82   static inline uint64_t GetOp13(size_t i) { return table13_0_ops_[i]; }
GetEmit13(size_t,size_t emit)83   static inline uint64_t GetEmit13(size_t, size_t emit) {
84     return table11_0_emit_[emit];
85   }
GetOp14(size_t i)86   static inline uint64_t GetOp14(size_t i) {
87     return table14_ops_[i >> 6][i & 0x3f];
88   }
GetEmit14(size_t i,size_t emit)89   static inline uint64_t GetEmit14(size_t i, size_t emit) {
90     return table14_emit_[i >> 6][emit];
91   }
GetOp15(size_t i)92   static inline uint64_t GetOp15(size_t i) {
93     return table15_ops_[i >> 6][i & 0x3f];
94   }
GetEmit15(size_t i,size_t emit)95   static inline uint64_t GetEmit15(size_t i, size_t emit) {
96     return table15_emit_[i >> 6][emit];
97   }
GetOp16(size_t i)98   static inline uint64_t GetOp16(size_t i) {
99     return table16_ops_[i >> 6][i & 0x3f];
100   }
GetEmit16(size_t i,size_t emit)101   static inline uint64_t GetEmit16(size_t i, size_t emit) {
102     return table16_emit_[i >> 6][emit];
103   }
GetOp17(size_t i)104   static inline uint64_t GetOp17(size_t i) {
105     return table17_ops_[i >> 6][i & 0x3f];
106   }
GetEmit17(size_t i,size_t emit)107   static inline uint64_t GetEmit17(size_t i, size_t emit) {
108     return table17_emit_[i >> 6][emit];
109   }
GetOp18(size_t i)110   static inline uint64_t GetOp18(size_t i) {
111     return table18_ops_[i >> 7][i & 0x7f];
112   }
GetEmit18(size_t i,size_t emit)113   static inline uint64_t GetEmit18(size_t i, size_t emit) {
114     return table18_emit_[i >> 7][emit];
115   }
GetOp19(size_t i)116   static inline uint64_t GetOp19(size_t i) {
117     return table19_ops_[i >> 7][i & 0x7f];
118   }
GetEmit19(size_t i,size_t emit)119   static inline uint64_t GetEmit19(size_t i, size_t emit) {
120     return table19_emit_[i >> 7][emit];
121   }
GetOp20(size_t i)122   static inline uint64_t GetOp20(size_t i) {
123     return table20_ops_[i >> 7][i & 0x7f];
124   }
GetEmit20(size_t i,size_t emit)125   static inline uint64_t GetEmit20(size_t i, size_t emit) {
126     return table20_emit_[i >> 7][emit];
127   }
GetOp21(size_t i)128   static inline uint64_t GetOp21(size_t i) {
129     return table21_ops_[i >> 7][i & 0x7f];
130   }
GetEmit21(size_t i,size_t emit)131   static inline uint64_t GetEmit21(size_t i, size_t emit) {
132     return table21_emit_[i >> 7][emit];
133   }
GetOp8(size_t i)134   static inline uint64_t GetOp8(size_t i) {
135     return table8_inner_[i >> 9][table8_outer_[i >> 9][i & 0x1ff]];
136   }
GetEmit8(size_t i,size_t emit)137   static inline uint64_t GetEmit8(size_t i, size_t emit) {
138     return table8_emit_[i >> 9][emit];
139   }
GetOp22(size_t i)140   static inline uint64_t GetOp22(size_t i) { return i ? 3 : 1; }
GetEmit22(size_t,size_t emit)141   static inline uint64_t GetEmit22(size_t, size_t emit) { return emit + 203; }
GetOp23(size_t i)142   static inline uint64_t GetOp23(size_t i) { return i ? 3 : 1; }
GetEmit23(size_t,size_t emit)143   static inline uint64_t GetEmit23(size_t, size_t emit) { return emit + 211; }
GetOp24(size_t i)144   static inline uint64_t GetOp24(size_t i) { return i ? 3 : 1; }
GetEmit24(size_t,size_t emit)145   static inline uint64_t GetEmit24(size_t, size_t emit) {
146     return emit ? 221 : 214;
147   }
GetOp25(size_t i)148   static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; }
GetEmit25(size_t,size_t emit)149   static inline uint64_t GetEmit25(size_t, size_t emit) { return emit + 222; }
GetOp26(size_t i)150   static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; }
GetEmit26(size_t,size_t emit)151   static inline uint64_t GetEmit26(size_t, size_t emit) {
152     return emit ? 244 : 241;
153   }
GetOp27(size_t i)154   static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; }
GetEmit27(size_t,size_t emit)155   static inline uint64_t GetEmit27(size_t, size_t emit) { return emit + 245; }
GetOp28(size_t i)156   static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; }
GetEmit28(size_t,size_t emit)157   static inline uint64_t GetEmit28(size_t, size_t emit) { return emit + 247; }
GetOp29(size_t i)158   static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; }
GetEmit29(size_t,size_t emit)159   static inline uint64_t GetEmit29(size_t, size_t emit) { return emit + 250; }
GetOp30(size_t i)160   static inline uint64_t GetOp30(size_t i) { return i ? 3 : 1; }
GetEmit30(size_t,size_t emit)161   static inline uint64_t GetEmit30(size_t, size_t emit) { return emit + 252; }
GetOp31(size_t i)162   static inline uint64_t GetOp31(size_t i) {
163     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
164   }
GetEmit31(size_t,size_t emit)165   static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 4; }
GetOp32(size_t i)166   static inline uint64_t GetOp32(size_t i) {
167     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
168   }
GetEmit32(size_t,size_t emit)169   static inline uint64_t GetEmit32(size_t, size_t emit) {
170     return (emit < 2 ? (emit ? 11 : 8) : ((emit - 2) ? 14 : 12));
171   }
GetOp33(size_t i)172   static inline uint64_t GetOp33(size_t i) {
173     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
174   }
GetEmit33(size_t,size_t emit)175   static inline uint64_t GetEmit33(size_t, size_t emit) { return emit + 15; }
GetOp34(size_t i)176   static inline uint64_t GetOp34(size_t i) {
177     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
178   }
GetEmit34(size_t,size_t emit)179   static inline uint64_t GetEmit34(size_t, size_t emit) {
180     return (emit < 2 ? (emit + 19) : ((emit - 2) ? 23 : 21));
181   }
GetOp35(size_t i)182   static inline uint64_t GetOp35(size_t i) {
183     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
184   }
GetEmit35(size_t,size_t emit)185   static inline uint64_t GetEmit35(size_t, size_t emit) { return emit + 24; }
GetOp36(size_t i)186   static inline uint64_t GetOp36(size_t i) {
187     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
188   }
GetEmit36(size_t,size_t emit)189   static inline uint64_t GetEmit36(size_t, size_t emit) { return emit + 28; }
GetOp38(size_t i)190   static inline uint64_t GetOp38(size_t i) { return i; }
GetEmit38(size_t,size_t emit)191   static inline uint64_t GetEmit38(size_t, size_t emit) {
192     return ((void)emit, 254);
193   }
GetOp37(size_t i)194   static inline uint64_t GetOp37(size_t i) {
195     return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1
196                 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1))
197                 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6));
198   }
GetEmit37(size_t,size_t emit)199   static inline uint64_t GetEmit37(size_t, size_t emit) {
200     return (emit < 1 ? (((void)emit, 254)) : ((emit - 1) + 2));
201   }
GetOp40(size_t i)202   static inline uint64_t GetOp40(size_t i) {
203     return (i < 2 ? (i ? 2 : 0) : ((i - 2) ? 1 : 4));
204   }
GetEmit40(size_t,size_t emit)205   static inline uint64_t GetEmit40(size_t, size_t emit) {
206     return (emit < 1 ? (((void)emit, 127)) : ((emit - 1) ? 249 : 220));
207   }
GetOp41(size_t i)208   static inline uint64_t GetOp41(size_t i) {
209     return table41_0_inner_[table41_0_outer_[i]];
210   }
GetEmit41(size_t,size_t emit)211   static inline uint64_t GetEmit41(size_t, size_t emit) {
212     return (emit < 1 ? (((void)emit, 127)) : ((emit - 1) ? 249 : 220));
213   }
GetOp39(size_t i)214   static inline uint64_t GetOp39(size_t i) {
215     return table39_0_inner_[(i < 11 ? (i / 4 + 0) : ((i - 11) + 2))];
216   }
GetEmit39(size_t,size_t emit)217   static inline uint64_t GetEmit39(size_t, size_t emit) {
218     return table39_0_emit_[emit];
219   }
GetOp43(size_t i)220   static inline uint64_t GetOp43(size_t i) { return i; }
GetEmit43(size_t,size_t emit)221   static inline uint64_t GetEmit43(size_t, size_t emit) {
222     return ((void)emit, 124);
223   }
GetOp42(size_t i)224   static inline uint64_t GetOp42(size_t i) {
225     return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1
226                 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1))
227                 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6));
228   }
GetEmit42(size_t,size_t emit)229   static inline uint64_t GetEmit42(size_t, size_t emit) {
230     return (emit < 1 ? (((void)emit, 124)) : ((emit - 1) ? 62 : 35));
231   }
232 
233  private:
234   static const uint8_t table2_0_emit_[10];
235   static const uint8_t table2_0_ops_[32];
236   static const uint8_t table3_0_emit_[36];
237   static const uint8_t table3_0_ops_[64];
238   static const uint8_t table4_0_emit_[22];
239   static const uint8_t table4_0_ops_[64];
240   static const uint8_t table4_1_emit_[46];
241   static const uint8_t table4_1_ops_[64];
242   static const uint8_t* const table4_emit_[2];
243   static const uint8_t* const table4_ops_[2];
244   static const uint8_t table5_0_ops_[128];
245   static const uint8_t table5_1_emit_[52];
246   static const uint8_t table5_1_ops_[128];
247   static const uint8_t* const table5_emit_[2];
248   static const uint8_t* const table5_ops_[2];
249   static const uint8_t table6_0_emit_[2];
250   static const uint8_t table6_0_ops_[32];
251   static const uint8_t table6_1_emit_[2];
252   static const uint8_t table6_2_emit_[2];
253   static const uint8_t table6_3_emit_[2];
254   static const uint8_t table6_4_emit_[2];
255   static const uint8_t table6_5_emit_[4];
256   static const uint8_t table6_5_ops_[32];
257   static const uint8_t table6_6_emit_[4];
258   static const uint8_t table6_7_emit_[4];
259   static const uint8_t table6_8_emit_[4];
260   static const uint8_t table6_9_emit_[4];
261   static const uint8_t table6_10_emit_[4];
262   static const uint8_t table6_11_emit_[6];
263   static const uint8_t table6_11_ops_[32];
264   static const uint8_t table6_12_emit_[8];
265   static const uint8_t table6_12_ops_[32];
266   static const uint8_t table6_13_emit_[8];
267   static const uint8_t table6_14_emit_[8];
268   static const uint8_t table6_15_emit_[10];
269   static const uint8_t table6_15_ops_[32];
270   static const uint8_t* const table6_emit_[16];
271   static const uint8_t* const table6_ops_[16];
272   static const uint8_t table1_0_emit_[36];
273   static const uint16_t table1_0_inner_[22];
274   static const uint8_t table1_0_outer_[64];
275   static const uint8_t table1_1_emit_[36];
276   static const uint16_t table1_1_inner_[22];
277   static const uint8_t table1_2_emit_[36];
278   static const uint16_t table1_2_inner_[22];
279   static const uint8_t table1_3_emit_[36];
280   static const uint16_t table1_3_inner_[22];
281   static const uint8_t table1_4_emit_[38];
282   static const uint16_t table1_4_inner_[22];
283   static const uint16_t table1_5_inner_[4];
284   static const uint8_t table1_5_outer_[64];
285   static const uint16_t table1_11_inner_[6];
286   static const uint8_t table1_11_outer_[64];
287   static const uint16_t table1_12_inner_[8];
288   static const uint8_t table1_12_outer_[64];
289   static const uint8_t table1_15_emit_[15];
290   static const uint16_t table1_15_inner_[18];
291   static const uint8_t table1_15_outer_[64];
292   static const uint8_t* const table1_emit_[16];
293   static const uint16_t* const table1_inner_[16];
294   static const uint8_t* const table1_outer_[16];
295   static const uint8_t table9_0_emit_[6];
296   static const uint8_t table9_0_inner_[8];
297   static const uint8_t table10_0_emit_[8];
298   static const uint8_t table10_0_inner_[10];
299   static const uint8_t table10_0_outer_[16];
300   static const uint8_t table11_0_emit_[11];
301   static const uint8_t table11_0_ops_[32];
302   static const uint8_t table12_0_ops_[64];
303   static const uint8_t table13_0_ops_[128];
304   static const uint8_t table14_0_emit_[40];
305   static const uint8_t table14_0_ops_[64];
306   static const uint8_t table14_1_emit_[40];
307   static const uint8_t table14_2_emit_[40];
308   static const uint8_t table14_3_emit_[5];
309   static const uint8_t table14_3_ops_[64];
310   static const uint8_t* const table14_emit_[4];
311   static const uint8_t* const table14_ops_[4];
312   static const uint8_t table15_0_emit_[72];
313   static const uint16_t table15_0_ops_[64];
314   static const uint8_t table15_1_emit_[72];
315   static const uint8_t table15_2_emit_[72];
316   static const uint8_t table15_3_emit_[72];
317   static const uint8_t table15_4_emit_[72];
318   static const uint8_t table15_5_emit_[72];
319   static const uint8_t table15_6_emit_[40];
320   static const uint16_t table15_6_ops_[64];
321   static const uint8_t table15_7_emit_[6];
322   static const uint16_t table15_7_ops_[64];
323   static const uint8_t* const table15_emit_[8];
324   static const uint16_t* const table15_ops_[8];
325   static const uint8_t table16_0_emit_[44];
326   static const uint16_t table16_0_ops_[64];
327   static const uint8_t table16_1_emit_[92];
328   static const uint16_t table16_1_ops_[64];
329   static const uint8_t table16_2_emit_[44];
330   static const uint8_t table16_3_emit_[92];
331   static const uint8_t table16_4_emit_[44];
332   static const uint8_t table16_5_emit_[92];
333   static const uint8_t table16_6_emit_[44];
334   static const uint8_t table16_7_emit_[92];
335   static const uint8_t table16_8_emit_[44];
336   static const uint8_t table16_9_emit_[92];
337   static const uint8_t table16_10_emit_[44];
338   static const uint8_t table16_11_emit_[92];
339   static const uint8_t table16_12_emit_[72];
340   static const uint8_t table16_13_emit_[72];
341   static const uint8_t table16_14_emit_[40];
342   static const uint8_t table16_15_emit_[31];
343   static const uint16_t table16_15_ops_[64];
344   static const uint8_t* const table16_emit_[16];
345   static const uint16_t* const table16_ops_[16];
346   static const uint8_t table17_0_emit_[16];
347   static const uint16_t table17_0_ops_[64];
348   static const uint8_t table17_1_emit_[28];
349   static const uint16_t table17_1_ops_[64];
350   static const uint8_t table17_2_emit_[36];
351   static const uint16_t table17_2_ops_[64];
352   static const uint8_t table17_3_emit_[68];
353   static const uint16_t table17_3_ops_[64];
354   static const uint8_t table17_4_emit_[16];
355   static const uint8_t table17_5_emit_[28];
356   static const uint8_t table17_6_emit_[36];
357   static const uint8_t table17_7_emit_[68];
358   static const uint8_t table17_8_emit_[16];
359   static const uint8_t table17_9_emit_[28];
360   static const uint8_t table17_10_emit_[36];
361   static const uint8_t table17_11_emit_[68];
362   static const uint8_t table17_12_emit_[16];
363   static const uint8_t table17_13_emit_[28];
364   static const uint8_t table17_14_emit_[36];
365   static const uint8_t table17_15_emit_[68];
366   static const uint8_t table17_16_emit_[16];
367   static const uint8_t table17_17_emit_[28];
368   static const uint8_t table17_18_emit_[36];
369   static const uint8_t table17_19_emit_[68];
370   static const uint8_t table17_20_emit_[16];
371   static const uint8_t table17_21_emit_[28];
372   static const uint8_t table17_22_emit_[36];
373   static const uint8_t table17_23_emit_[68];
374   static const uint8_t table17_24_emit_[44];
375   static const uint8_t table17_25_emit_[92];
376   static const uint8_t table17_26_emit_[44];
377   static const uint8_t table17_27_emit_[92];
378   static const uint8_t table17_28_emit_[72];
379   static const uint8_t table17_29_emit_[72];
380   static const uint8_t table17_30_emit_[72];
381   static const uint8_t table17_31_emit_[24];
382   static const uint16_t table17_31_ops_[64];
383   static const uint8_t* const table17_emit_[32];
384   static const uint16_t* const table17_ops_[32];
385   static const uint16_t table18_0_ops_[128];
386   static const uint16_t table18_1_ops_[128];
387   static const uint16_t table18_2_ops_[128];
388   static const uint16_t table18_3_ops_[128];
389   static const uint16_t table18_24_ops_[128];
390   static const uint8_t table18_25_emit_[104];
391   static const uint16_t table18_25_ops_[128];
392   static const uint8_t table18_27_emit_[104];
393   static const uint8_t table18_28_emit_[136];
394   static const uint16_t table18_28_ops_[128];
395   static const uint8_t table18_29_emit_[136];
396   static const uint8_t table18_30_emit_[136];
397   static const uint8_t table18_31_emit_[50];
398   static const uint16_t table18_31_ops_[128];
399   static const uint8_t* const table18_emit_[32];
400   static const uint16_t* const table18_ops_[32];
401   static const uint8_t table19_0_emit_[120];
402   static const uint16_t table19_0_ops_[128];
403   static const uint8_t table19_1_emit_[120];
404   static const uint8_t table19_2_emit_[68];
405   static const uint16_t table19_2_ops_[128];
406   static const uint8_t table19_3_emit_[16];
407   static const uint16_t table19_3_ops_[128];
408   static const uint8_t table19_4_emit_[16];
409   static const uint8_t table19_5_emit_[20];
410   static const uint16_t table19_5_ops_[128];
411   static const uint8_t table19_6_emit_[32];
412   static const uint16_t table19_6_ops_[128];
413   static const uint8_t table19_7_emit_[46];
414   static const uint16_t table19_7_ops_[128];
415   static const uint8_t table19_8_emit_[120];
416   static const uint8_t table19_9_emit_[120];
417   static const uint8_t table19_10_emit_[68];
418   static const uint8_t table19_11_emit_[16];
419   static const uint8_t table19_12_emit_[16];
420   static const uint8_t table19_13_emit_[20];
421   static const uint8_t table19_14_emit_[32];
422   static const uint8_t table19_15_emit_[46];
423   static const uint8_t table19_16_emit_[120];
424   static const uint8_t table19_17_emit_[120];
425   static const uint8_t table19_18_emit_[68];
426   static const uint8_t table19_19_emit_[16];
427   static const uint8_t table19_20_emit_[16];
428   static const uint8_t table19_21_emit_[20];
429   static const uint8_t table19_22_emit_[32];
430   static const uint8_t table19_23_emit_[46];
431   static const uint8_t table19_24_emit_[120];
432   static const uint8_t table19_25_emit_[120];
433   static const uint8_t table19_26_emit_[68];
434   static const uint8_t table19_27_emit_[16];
435   static const uint8_t table19_28_emit_[16];
436   static const uint8_t table19_29_emit_[20];
437   static const uint8_t table19_30_emit_[32];
438   static const uint8_t table19_31_emit_[46];
439   static const uint8_t table19_32_emit_[120];
440   static const uint8_t table19_33_emit_[120];
441   static const uint8_t table19_34_emit_[68];
442   static const uint8_t table19_35_emit_[16];
443   static const uint8_t table19_36_emit_[16];
444   static const uint8_t table19_37_emit_[20];
445   static const uint8_t table19_38_emit_[32];
446   static const uint8_t table19_39_emit_[46];
447   static const uint8_t table19_40_emit_[120];
448   static const uint8_t table19_41_emit_[120];
449   static const uint8_t table19_42_emit_[68];
450   static const uint8_t table19_43_emit_[16];
451   static const uint8_t table19_44_emit_[16];
452   static const uint8_t table19_45_emit_[20];
453   static const uint8_t table19_46_emit_[32];
454   static const uint8_t table19_47_emit_[46];
455   static const uint8_t table19_48_emit_[16];
456   static const uint8_t table19_49_emit_[28];
457   static const uint16_t table19_49_ops_[128];
458   static const uint8_t table19_50_emit_[36];
459   static const uint16_t table19_50_ops_[128];
460   static const uint8_t table19_51_emit_[68];
461   static const uint16_t table19_51_ops_[128];
462   static const uint8_t table19_52_emit_[16];
463   static const uint8_t table19_53_emit_[28];
464   static const uint8_t table19_54_emit_[36];
465   static const uint8_t table19_55_emit_[68];
466   static const uint8_t table19_56_emit_[44];
467   static const uint16_t table19_56_ops_[128];
468   static const uint8_t table19_57_emit_[104];
469   static const uint16_t table19_57_ops_[128];
470   static const uint8_t table19_58_emit_[44];
471   static const uint8_t table19_59_emit_[104];
472   static const uint8_t table19_60_emit_[44];
473   static const uint8_t table19_61_emit_[104];
474   static const uint8_t table19_62_emit_[15];
475   static const uint16_t table19_62_ops_[128];
476   static const uint8_t table19_63_emit_[64];
477   static const uint16_t table19_63_ops_[128];
478   static const uint8_t* const table19_emit_[64];
479   static const uint16_t* const table19_ops_[64];
480   static const uint8_t table20_0_emit_[216];
481   static const uint16_t table20_0_ops_[128];
482   static const uint8_t table20_1_emit_[216];
483   static const uint8_t table20_2_emit_[216];
484   static const uint8_t table20_3_emit_[216];
485   static const uint8_t table20_4_emit_[216];
486   static const uint8_t table20_5_emit_[120];
487   static const uint16_t table20_5_ops_[128];
488   static const uint8_t table20_6_emit_[120];
489   static const uint8_t table20_7_emit_[120];
490   static const uint8_t table20_8_emit_[120];
491   static const uint8_t table20_9_emit_[120];
492   static const uint8_t table20_10_emit_[120];
493   static const uint8_t table20_11_emit_[68];
494   static const uint16_t table20_11_ops_[128];
495   static const uint8_t table20_12_emit_[16];
496   static const uint16_t table20_12_ops_[128];
497   static const uint8_t table20_13_emit_[16];
498   static const uint8_t table20_14_emit_[16];
499   static const uint8_t table20_15_emit_[36];
500   static const uint16_t table20_15_ops_[128];
501   static const uint8_t table20_16_emit_[216];
502   static const uint8_t table20_17_emit_[216];
503   static const uint8_t table20_18_emit_[216];
504   static const uint8_t table20_19_emit_[216];
505   static const uint8_t table20_20_emit_[216];
506   static const uint8_t table20_21_emit_[120];
507   static const uint8_t table20_22_emit_[120];
508   static const uint8_t table20_23_emit_[120];
509   static const uint8_t table20_24_emit_[120];
510   static const uint8_t table20_25_emit_[120];
511   static const uint8_t table20_26_emit_[120];
512   static const uint8_t table20_27_emit_[68];
513   static const uint8_t table20_28_emit_[16];
514   static const uint8_t table20_29_emit_[16];
515   static const uint8_t table20_30_emit_[16];
516   static const uint8_t table20_31_emit_[36];
517   static const uint8_t table20_32_emit_[216];
518   static const uint8_t table20_33_emit_[216];
519   static const uint8_t table20_34_emit_[216];
520   static const uint8_t table20_35_emit_[216];
521   static const uint8_t table20_36_emit_[216];
522   static const uint8_t table20_37_emit_[120];
523   static const uint8_t table20_38_emit_[120];
524   static const uint8_t table20_39_emit_[120];
525   static const uint8_t table20_40_emit_[120];
526   static const uint8_t table20_41_emit_[120];
527   static const uint8_t table20_42_emit_[120];
528   static const uint8_t table20_43_emit_[68];
529   static const uint8_t table20_44_emit_[16];
530   static const uint8_t table20_45_emit_[16];
531   static const uint8_t table20_46_emit_[16];
532   static const uint8_t table20_47_emit_[36];
533   static const uint8_t table20_48_emit_[216];
534   static const uint8_t table20_49_emit_[216];
535   static const uint8_t table20_50_emit_[216];
536   static const uint8_t table20_51_emit_[216];
537   static const uint8_t table20_52_emit_[216];
538   static const uint8_t table20_53_emit_[120];
539   static const uint8_t table20_54_emit_[120];
540   static const uint8_t table20_55_emit_[120];
541   static const uint8_t table20_56_emit_[120];
542   static const uint8_t table20_57_emit_[120];
543   static const uint8_t table20_58_emit_[120];
544   static const uint8_t table20_59_emit_[68];
545   static const uint8_t table20_60_emit_[16];
546   static const uint8_t table20_61_emit_[16];
547   static const uint8_t table20_62_emit_[16];
548   static const uint8_t table20_63_emit_[36];
549   static const uint8_t table20_64_emit_[216];
550   static const uint8_t table20_65_emit_[216];
551   static const uint8_t table20_66_emit_[216];
552   static const uint8_t table20_67_emit_[216];
553   static const uint8_t table20_68_emit_[216];
554   static const uint8_t table20_69_emit_[120];
555   static const uint8_t table20_70_emit_[120];
556   static const uint8_t table20_71_emit_[120];
557   static const uint8_t table20_72_emit_[120];
558   static const uint8_t table20_73_emit_[120];
559   static const uint8_t table20_74_emit_[120];
560   static const uint8_t table20_75_emit_[68];
561   static const uint8_t table20_76_emit_[16];
562   static const uint8_t table20_77_emit_[16];
563   static const uint8_t table20_78_emit_[16];
564   static const uint8_t table20_79_emit_[36];
565   static const uint8_t table20_80_emit_[216];
566   static const uint8_t table20_81_emit_[216];
567   static const uint8_t table20_82_emit_[216];
568   static const uint8_t table20_83_emit_[216];
569   static const uint8_t table20_84_emit_[216];
570   static const uint8_t table20_85_emit_[120];
571   static const uint8_t table20_86_emit_[120];
572   static const uint8_t table20_87_emit_[120];
573   static const uint8_t table20_88_emit_[120];
574   static const uint8_t table20_89_emit_[120];
575   static const uint8_t table20_90_emit_[120];
576   static const uint8_t table20_91_emit_[68];
577   static const uint8_t table20_92_emit_[16];
578   static const uint8_t table20_93_emit_[16];
579   static const uint8_t table20_94_emit_[16];
580   static const uint8_t table20_95_emit_[36];
581   static const uint8_t table20_96_emit_[120];
582   static const uint8_t table20_97_emit_[120];
583   static const uint8_t table20_98_emit_[68];
584   static const uint8_t table20_99_emit_[16];
585   static const uint8_t table20_100_emit_[16];
586   static const uint8_t table20_101_emit_[20];
587   static const uint16_t table20_101_ops_[128];
588   static const uint8_t table20_102_emit_[32];
589   static const uint16_t table20_102_ops_[128];
590   static const uint8_t table20_103_emit_[46];
591   static const uint16_t table20_103_ops_[128];
592   static const uint8_t table20_104_emit_[120];
593   static const uint8_t table20_105_emit_[120];
594   static const uint8_t table20_106_emit_[68];
595   static const uint8_t table20_107_emit_[16];
596   static const uint8_t table20_108_emit_[16];
597   static const uint8_t table20_109_emit_[20];
598   static const uint8_t table20_110_emit_[32];
599   static const uint8_t table20_111_emit_[46];
600   static const uint8_t table20_112_emit_[16];
601   static const uint8_t table20_113_emit_[28];
602   static const uint16_t table20_113_ops_[128];
603   static const uint8_t table20_114_emit_[36];
604   static const uint16_t table20_114_ops_[128];
605   static const uint8_t table20_115_emit_[68];
606   static const uint16_t table20_115_ops_[128];
607   static const uint8_t table20_116_emit_[16];
608   static const uint8_t table20_117_emit_[28];
609   static const uint8_t table20_118_emit_[36];
610   static const uint8_t table20_119_emit_[68];
611   static const uint8_t table20_120_emit_[16];
612   static const uint8_t table20_121_emit_[28];
613   static const uint8_t table20_122_emit_[36];
614   static const uint8_t table20_123_emit_[68];
615   static const uint8_t table20_124_emit_[62];
616   static const uint16_t table20_124_ops_[128];
617   static const uint8_t table20_125_emit_[10];
618   static const uint16_t table20_125_ops_[128];
619   static const uint8_t table20_126_emit_[23];
620   static const uint16_t table20_126_ops_[128];
621   static const uint8_t table20_127_emit_[53];
622   static const uint16_t table20_127_ops_[128];
623   static const uint8_t* const table20_emit_[128];
624   static const uint16_t* const table20_ops_[128];
625   static const uint8_t table21_0_emit_[204];
626   static const uint16_t table21_0_ops_[128];
627   static const uint8_t table21_1_emit_[204];
628   static const uint8_t table21_2_emit_[204];
629   static const uint8_t table21_3_emit_[204];
630   static const uint8_t table21_4_emit_[204];
631   static const uint8_t table21_5_emit_[204];
632   static const uint8_t table21_6_emit_[204];
633   static const uint8_t table21_7_emit_[204];
634   static const uint8_t table21_8_emit_[204];
635   static const uint8_t table21_9_emit_[204];
636   static const uint8_t table21_10_emit_[216];
637   static const uint8_t table21_11_emit_[216];
638   static const uint8_t table21_12_emit_[216];
639   static const uint8_t table21_13_emit_[216];
640   static const uint8_t table21_14_emit_[216];
641   static const uint8_t table21_15_emit_[216];
642   static const uint8_t table21_16_emit_[216];
643   static const uint8_t table21_17_emit_[216];
644   static const uint8_t table21_18_emit_[216];
645   static const uint8_t table21_19_emit_[216];
646   static const uint8_t table21_20_emit_[216];
647   static const uint8_t table21_21_emit_[216];
648   static const uint8_t table21_22_emit_[216];
649   static const uint8_t table21_23_emit_[120];
650   static const uint8_t table21_24_emit_[120];
651   static const uint8_t table21_25_emit_[120];
652   static const uint8_t table21_26_emit_[120];
653   static const uint8_t table21_27_emit_[120];
654   static const uint8_t table21_28_emit_[120];
655   static const uint8_t table21_29_emit_[120];
656   static const uint8_t table21_30_emit_[120];
657   static const uint8_t table21_31_emit_[32];
658   static const uint16_t table21_31_ops_[128];
659   static const uint8_t table21_32_emit_[204];
660   static const uint8_t table21_33_emit_[204];
661   static const uint8_t table21_34_emit_[204];
662   static const uint8_t table21_35_emit_[204];
663   static const uint8_t table21_36_emit_[204];
664   static const uint8_t table21_37_emit_[204];
665   static const uint8_t table21_38_emit_[204];
666   static const uint8_t table21_39_emit_[204];
667   static const uint8_t table21_40_emit_[204];
668   static const uint8_t table21_41_emit_[204];
669   static const uint8_t table21_42_emit_[216];
670   static const uint8_t table21_43_emit_[216];
671   static const uint8_t table21_44_emit_[216];
672   static const uint8_t table21_45_emit_[216];
673   static const uint8_t table21_46_emit_[216];
674   static const uint8_t table21_47_emit_[216];
675   static const uint8_t table21_48_emit_[216];
676   static const uint8_t table21_49_emit_[216];
677   static const uint8_t table21_50_emit_[216];
678   static const uint8_t table21_51_emit_[216];
679   static const uint8_t table21_52_emit_[216];
680   static const uint8_t table21_53_emit_[216];
681   static const uint8_t table21_54_emit_[216];
682   static const uint8_t table21_55_emit_[120];
683   static const uint8_t table21_56_emit_[120];
684   static const uint8_t table21_57_emit_[120];
685   static const uint8_t table21_58_emit_[120];
686   static const uint8_t table21_59_emit_[120];
687   static const uint8_t table21_60_emit_[120];
688   static const uint8_t table21_61_emit_[120];
689   static const uint8_t table21_62_emit_[120];
690   static const uint8_t table21_63_emit_[32];
691   static const uint8_t table21_64_emit_[204];
692   static const uint8_t table21_65_emit_[204];
693   static const uint8_t table21_66_emit_[204];
694   static const uint8_t table21_67_emit_[204];
695   static const uint8_t table21_68_emit_[204];
696   static const uint8_t table21_69_emit_[204];
697   static const uint8_t table21_70_emit_[204];
698   static const uint8_t table21_71_emit_[204];
699   static const uint8_t table21_72_emit_[204];
700   static const uint8_t table21_73_emit_[204];
701   static const uint8_t table21_74_emit_[216];
702   static const uint8_t table21_75_emit_[216];
703   static const uint8_t table21_76_emit_[216];
704   static const uint8_t table21_77_emit_[216];
705   static const uint8_t table21_78_emit_[216];
706   static const uint8_t table21_79_emit_[216];
707   static const uint8_t table21_80_emit_[216];
708   static const uint8_t table21_81_emit_[216];
709   static const uint8_t table21_82_emit_[216];
710   static const uint8_t table21_83_emit_[216];
711   static const uint8_t table21_84_emit_[216];
712   static const uint8_t table21_85_emit_[216];
713   static const uint8_t table21_86_emit_[216];
714   static const uint8_t table21_87_emit_[120];
715   static const uint8_t table21_88_emit_[120];
716   static const uint8_t table21_89_emit_[120];
717   static const uint8_t table21_90_emit_[120];
718   static const uint8_t table21_91_emit_[120];
719   static const uint8_t table21_92_emit_[120];
720   static const uint8_t table21_93_emit_[120];
721   static const uint8_t table21_94_emit_[120];
722   static const uint8_t table21_95_emit_[32];
723   static const uint8_t table21_96_emit_[204];
724   static const uint8_t table21_97_emit_[204];
725   static const uint8_t table21_98_emit_[204];
726   static const uint8_t table21_99_emit_[204];
727   static const uint8_t table21_100_emit_[204];
728   static const uint8_t table21_101_emit_[204];
729   static const uint8_t table21_102_emit_[204];
730   static const uint8_t table21_103_emit_[204];
731   static const uint8_t table21_104_emit_[204];
732   static const uint8_t table21_105_emit_[204];
733   static const uint8_t table21_106_emit_[216];
734   static const uint8_t table21_107_emit_[216];
735   static const uint8_t table21_108_emit_[216];
736   static const uint8_t table21_109_emit_[216];
737   static const uint8_t table21_110_emit_[216];
738   static const uint8_t table21_111_emit_[216];
739   static const uint8_t table21_112_emit_[216];
740   static const uint8_t table21_113_emit_[216];
741   static const uint8_t table21_114_emit_[216];
742   static const uint8_t table21_115_emit_[216];
743   static const uint8_t table21_116_emit_[216];
744   static const uint8_t table21_117_emit_[216];
745   static const uint8_t table21_118_emit_[216];
746   static const uint8_t table21_119_emit_[120];
747   static const uint8_t table21_120_emit_[120];
748   static const uint8_t table21_121_emit_[120];
749   static const uint8_t table21_122_emit_[120];
750   static const uint8_t table21_123_emit_[120];
751   static const uint8_t table21_124_emit_[120];
752   static const uint8_t table21_125_emit_[120];
753   static const uint8_t table21_126_emit_[120];
754   static const uint8_t table21_127_emit_[32];
755   static const uint8_t table21_128_emit_[204];
756   static const uint8_t table21_129_emit_[204];
757   static const uint8_t table21_130_emit_[204];
758   static const uint8_t table21_131_emit_[204];
759   static const uint8_t table21_132_emit_[204];
760   static const uint8_t table21_133_emit_[204];
761   static const uint8_t table21_134_emit_[204];
762   static const uint8_t table21_135_emit_[204];
763   static const uint8_t table21_136_emit_[204];
764   static const uint8_t table21_137_emit_[204];
765   static const uint8_t table21_138_emit_[216];
766   static const uint8_t table21_139_emit_[216];
767   static const uint8_t table21_140_emit_[216];
768   static const uint8_t table21_141_emit_[216];
769   static const uint8_t table21_142_emit_[216];
770   static const uint8_t table21_143_emit_[216];
771   static const uint8_t table21_144_emit_[216];
772   static const uint8_t table21_145_emit_[216];
773   static const uint8_t table21_146_emit_[216];
774   static const uint8_t table21_147_emit_[216];
775   static const uint8_t table21_148_emit_[216];
776   static const uint8_t table21_149_emit_[216];
777   static const uint8_t table21_150_emit_[216];
778   static const uint8_t table21_151_emit_[120];
779   static const uint8_t table21_152_emit_[120];
780   static const uint8_t table21_153_emit_[120];
781   static const uint8_t table21_154_emit_[120];
782   static const uint8_t table21_155_emit_[120];
783   static const uint8_t table21_156_emit_[120];
784   static const uint8_t table21_157_emit_[120];
785   static const uint8_t table21_158_emit_[120];
786   static const uint8_t table21_159_emit_[32];
787   static const uint8_t table21_160_emit_[204];
788   static const uint8_t table21_161_emit_[204];
789   static const uint8_t table21_162_emit_[204];
790   static const uint8_t table21_163_emit_[204];
791   static const uint8_t table21_164_emit_[204];
792   static const uint8_t table21_165_emit_[204];
793   static const uint8_t table21_166_emit_[204];
794   static const uint8_t table21_167_emit_[204];
795   static const uint8_t table21_168_emit_[204];
796   static const uint8_t table21_169_emit_[204];
797   static const uint8_t table21_170_emit_[216];
798   static const uint8_t table21_171_emit_[216];
799   static const uint8_t table21_172_emit_[216];
800   static const uint8_t table21_173_emit_[216];
801   static const uint8_t table21_174_emit_[216];
802   static const uint8_t table21_175_emit_[216];
803   static const uint8_t table21_176_emit_[216];
804   static const uint8_t table21_177_emit_[216];
805   static const uint8_t table21_178_emit_[216];
806   static const uint8_t table21_179_emit_[216];
807   static const uint8_t table21_180_emit_[216];
808   static const uint8_t table21_181_emit_[216];
809   static const uint8_t table21_182_emit_[216];
810   static const uint8_t table21_183_emit_[120];
811   static const uint8_t table21_184_emit_[120];
812   static const uint8_t table21_185_emit_[120];
813   static const uint8_t table21_186_emit_[120];
814   static const uint8_t table21_187_emit_[120];
815   static const uint8_t table21_188_emit_[120];
816   static const uint8_t table21_189_emit_[120];
817   static const uint8_t table21_190_emit_[120];
818   static const uint8_t table21_191_emit_[32];
819   static const uint8_t table21_192_emit_[216];
820   static const uint8_t table21_193_emit_[216];
821   static const uint8_t table21_194_emit_[216];
822   static const uint8_t table21_195_emit_[216];
823   static const uint8_t table21_196_emit_[216];
824   static const uint8_t table21_197_emit_[120];
825   static const uint8_t table21_198_emit_[120];
826   static const uint8_t table21_199_emit_[120];
827   static const uint8_t table21_200_emit_[120];
828   static const uint8_t table21_201_emit_[120];
829   static const uint8_t table21_202_emit_[120];
830   static const uint8_t table21_203_emit_[68];
831   static const uint8_t table21_204_emit_[16];
832   static const uint8_t table21_205_emit_[16];
833   static const uint8_t table21_206_emit_[16];
834   static const uint8_t table21_207_emit_[36];
835   static const uint8_t table21_208_emit_[216];
836   static const uint8_t table21_209_emit_[216];
837   static const uint8_t table21_210_emit_[216];
838   static const uint8_t table21_211_emit_[216];
839   static const uint8_t table21_212_emit_[216];
840   static const uint8_t table21_213_emit_[120];
841   static const uint8_t table21_214_emit_[120];
842   static const uint8_t table21_215_emit_[120];
843   static const uint8_t table21_216_emit_[120];
844   static const uint8_t table21_217_emit_[120];
845   static const uint8_t table21_218_emit_[120];
846   static const uint8_t table21_219_emit_[68];
847   static const uint8_t table21_220_emit_[16];
848   static const uint8_t table21_221_emit_[16];
849   static const uint8_t table21_222_emit_[16];
850   static const uint8_t table21_223_emit_[36];
851   static const uint8_t table21_224_emit_[120];
852   static const uint8_t table21_225_emit_[120];
853   static const uint8_t table21_226_emit_[68];
854   static const uint8_t table21_227_emit_[16];
855   static const uint8_t table21_228_emit_[16];
856   static const uint8_t table21_229_emit_[20];
857   static const uint8_t table21_230_emit_[32];
858   static const uint8_t table21_231_emit_[46];
859   static const uint8_t table21_232_emit_[120];
860   static const uint8_t table21_233_emit_[120];
861   static const uint8_t table21_234_emit_[68];
862   static const uint8_t table21_235_emit_[16];
863   static const uint8_t table21_236_emit_[16];
864   static const uint8_t table21_237_emit_[20];
865   static const uint8_t table21_238_emit_[32];
866   static const uint8_t table21_239_emit_[46];
867   static const uint8_t table21_240_emit_[120];
868   static const uint8_t table21_241_emit_[120];
869   static const uint8_t table21_242_emit_[68];
870   static const uint8_t table21_243_emit_[16];
871   static const uint8_t table21_244_emit_[16];
872   static const uint8_t table21_245_emit_[20];
873   static const uint8_t table21_246_emit_[32];
874   static const uint8_t table21_247_emit_[46];
875   static const uint8_t table21_248_emit_[144];
876   static const uint16_t table21_248_ops_[128];
877   static const uint8_t table21_249_emit_[112];
878   static const uint16_t table21_249_ops_[128];
879   static const uint8_t table21_250_emit_[80];
880   static const uint16_t table21_250_ops_[128];
881   static const uint8_t table21_251_emit_[44];
882   static const uint16_t table21_251_ops_[128];
883   static const uint8_t table21_252_emit_[8];
884   static const uint16_t table21_252_ops_[128];
885   static const uint8_t table21_253_emit_[15];
886   static const uint16_t table21_253_ops_[128];
887   static const uint8_t table21_254_emit_[20];
888   static const uint16_t table21_254_ops_[128];
889   static const uint8_t table21_255_emit_[37];
890   static const uint16_t table21_255_ops_[128];
891   static const uint8_t* const table21_emit_[256];
892   static const uint16_t* const table21_ops_[256];
893   static const uint8_t table8_0_emit_[1];
894   static const uint32_t table8_0_inner_[1];
895   static const uint8_t table8_0_outer_[512];
896   static const uint8_t table8_16_emit_[1];
897   static const uint8_t table8_32_emit_[1];
898   static const uint8_t table8_48_emit_[1];
899   static const uint8_t table8_64_emit_[1];
900   static const uint8_t table8_80_emit_[1];
901   static const uint8_t table8_96_emit_[1];
902   static const uint32_t table8_96_inner_[1];
903   static const uint8_t table8_104_emit_[1];
904   static const uint8_t table8_112_emit_[1];
905   static const uint32_t table8_112_inner_[1];
906   static const uint8_t table8_116_emit_[1];
907   static const uint8_t table8_120_emit_[1];
908   static const uint8_t table8_124_emit_[5];
909   static const uint32_t table8_124_inner_[5];
910   static const uint8_t table8_124_outer_[512];
911   static const uint32_t table8_125_inner_[10];
912   static const uint8_t table8_125_outer_[512];
913   static const uint32_t table8_126_inner_[23];
914   static const uint8_t table8_126_outer_[512];
915   static const uint8_t table8_127_emit_[72];
916   static const uint32_t table8_127_inner_[89];
917   static const uint8_t table8_127_outer_[512];
918   static const uint8_t* const table8_emit_[128];
919   static const uint32_t* const table8_inner_[128];
920   static const uint8_t* const table8_outer_[128];
921   static const uint8_t table41_0_inner_[5];
922   static const uint8_t table41_0_outer_[8];
923   static const uint8_t table39_0_emit_[6];
924   static const uint8_t table39_0_inner_[7];
925 };
926 template <typename F>
927 class HuffDecoder : public HuffDecoderCommon {
928  public:
HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)929   HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end)
930       : sink_(sink), begin_(begin), end_(end) {}
Run()931   bool Run() {
932     while (!done_) {
933       if (!RefillTo10()) {
934         Done0();
935         break;
936       }
937       const auto index = (buffer_ >> (buffer_len_ - 10)) & 0x3ff;
938       const auto op = GetOp1(index);
939       const int consumed = op & 15;
940       buffer_len_ -= consumed;
941       const auto emit_ofs = op >> 7;
942       switch ((op >> 4) & 7) {
943         case 0: {
944           sink_(GetEmit1(index, emit_ofs + 0));
945           sink_(GetEmit1(index, emit_ofs + 1));
946           break;
947         }
948         case 1: {
949           sink_(GetEmit1(index, emit_ofs + 0));
950           break;
951         }
952         case 2: {
953           DecodeStep0();
954           break;
955         }
956         case 3: {
957           DecodeStep19();
958           break;
959         }
960         case 4: {
961           DecodeStep1();
962           break;
963         }
964       }
965     }
966     return ok_;
967   }
968 
969  private:
RefillTo10()970   bool RefillTo10() {
971     switch (buffer_len_) {
972       case 0: {
973         return Read2to8Bytes();
974       }
975       case 1: {
976         return Read2to7Bytes();
977       }
978       case 2:
979       case 3:
980       case 4:
981       case 5:
982       case 6:
983       case 7:
984       case 8: {
985         return Read1to7Bytes();
986       }
987       case 9: {
988         return Read1to6Bytes();
989       }
990     }
991     return true;
992   }
Read2to8Bytes()993   bool Read2to8Bytes() {
994     switch (end_ - begin_) {
995       case 0:
996       case 1: {
997         return false;
998       }
999       case 2: {
1000         Fill2();
1001         return true;
1002       }
1003       case 3: {
1004         Fill3();
1005         return true;
1006       }
1007       case 4: {
1008         Fill4();
1009         return true;
1010       }
1011       case 5: {
1012         Fill5();
1013         return true;
1014       }
1015       case 6: {
1016         Fill6();
1017         return true;
1018       }
1019       case 7: {
1020         Fill7();
1021         return true;
1022       }
1023       default: {
1024         Fill8();
1025         return true;
1026       }
1027     }
1028   }
Fill2()1029   void Fill2() {
1030     buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) |
1031               (static_cast<uint64_t>(begin_[1]) << 0);
1032     begin_ += 2;
1033     buffer_len_ += 16;
1034   }
Fill3()1035   void Fill3() {
1036     buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) |
1037               (static_cast<uint64_t>(begin_[1]) << 8) |
1038               (static_cast<uint64_t>(begin_[2]) << 0);
1039     begin_ += 3;
1040     buffer_len_ += 24;
1041   }
Fill4()1042   void Fill4() {
1043     buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) |
1044               (static_cast<uint64_t>(begin_[1]) << 16) |
1045               (static_cast<uint64_t>(begin_[2]) << 8) |
1046               (static_cast<uint64_t>(begin_[3]) << 0);
1047     begin_ += 4;
1048     buffer_len_ += 32;
1049   }
Fill5()1050   void Fill5() {
1051     buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) |
1052               (static_cast<uint64_t>(begin_[1]) << 24) |
1053               (static_cast<uint64_t>(begin_[2]) << 16) |
1054               (static_cast<uint64_t>(begin_[3]) << 8) |
1055               (static_cast<uint64_t>(begin_[4]) << 0);
1056     begin_ += 5;
1057     buffer_len_ += 40;
1058   }
Fill6()1059   void Fill6() {
1060     buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) |
1061               (static_cast<uint64_t>(begin_[1]) << 32) |
1062               (static_cast<uint64_t>(begin_[2]) << 24) |
1063               (static_cast<uint64_t>(begin_[3]) << 16) |
1064               (static_cast<uint64_t>(begin_[4]) << 8) |
1065               (static_cast<uint64_t>(begin_[5]) << 0);
1066     begin_ += 6;
1067     buffer_len_ += 48;
1068   }
Fill7()1069   void Fill7() {
1070     buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) |
1071               (static_cast<uint64_t>(begin_[1]) << 40) |
1072               (static_cast<uint64_t>(begin_[2]) << 32) |
1073               (static_cast<uint64_t>(begin_[3]) << 24) |
1074               (static_cast<uint64_t>(begin_[4]) << 16) |
1075               (static_cast<uint64_t>(begin_[5]) << 8) |
1076               (static_cast<uint64_t>(begin_[6]) << 0);
1077     begin_ += 7;
1078     buffer_len_ += 56;
1079   }
Fill8()1080   void Fill8() {
1081     buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) |
1082               (static_cast<uint64_t>(begin_[1]) << 48) |
1083               (static_cast<uint64_t>(begin_[2]) << 40) |
1084               (static_cast<uint64_t>(begin_[3]) << 32) |
1085               (static_cast<uint64_t>(begin_[4]) << 24) |
1086               (static_cast<uint64_t>(begin_[5]) << 16) |
1087               (static_cast<uint64_t>(begin_[6]) << 8) |
1088               (static_cast<uint64_t>(begin_[7]) << 0);
1089     begin_ += 8;
1090     buffer_len_ += 64;
1091   }
Read2to7Bytes()1092   bool Read2to7Bytes() {
1093     switch (end_ - begin_) {
1094       case 0:
1095       case 1: {
1096         return false;
1097       }
1098       case 2: {
1099         Fill2();
1100         return true;
1101       }
1102       case 3: {
1103         Fill3();
1104         return true;
1105       }
1106       case 4: {
1107         Fill4();
1108         return true;
1109       }
1110       case 5: {
1111         Fill5();
1112         return true;
1113       }
1114       case 6: {
1115         Fill6();
1116         return true;
1117       }
1118       default: {
1119         Fill7();
1120         return true;
1121       }
1122     }
1123   }
Read1to7Bytes()1124   bool Read1to7Bytes() {
1125     switch (end_ - begin_) {
1126       case 0: {
1127         return false;
1128       }
1129       case 1: {
1130         Fill1();
1131         return true;
1132       }
1133       case 2: {
1134         Fill2();
1135         return true;
1136       }
1137       case 3: {
1138         Fill3();
1139         return true;
1140       }
1141       case 4: {
1142         Fill4();
1143         return true;
1144       }
1145       case 5: {
1146         Fill5();
1147         return true;
1148       }
1149       case 6: {
1150         Fill6();
1151         return true;
1152       }
1153       default: {
1154         Fill7();
1155         return true;
1156       }
1157     }
1158   }
Fill1()1159   void Fill1() {
1160     buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0);
1161     begin_ += 1;
1162     buffer_len_ += 8;
1163   }
Read1to6Bytes()1164   bool Read1to6Bytes() {
1165     switch (end_ - begin_) {
1166       case 0: {
1167         return false;
1168       }
1169       case 1: {
1170         Fill1();
1171         return true;
1172       }
1173       case 2: {
1174         Fill2();
1175         return true;
1176       }
1177       case 3: {
1178         Fill3();
1179         return true;
1180       }
1181       case 4: {
1182         Fill4();
1183         return true;
1184       }
1185       case 5: {
1186         Fill5();
1187         return true;
1188       }
1189       default: {
1190         Fill6();
1191         return true;
1192       }
1193     }
1194   }
Done0()1195   void Done0() {
1196     done_ = true;
1197     switch (end_ - begin_) {
1198       case 1: {
1199         Fill1();
1200         break;
1201       }
1202     }
1203     switch (buffer_len_) {
1204       case 1:
1205       case 2:
1206       case 3:
1207       case 4: {
1208         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1209         return;
1210       }
1211       case 5: {
1212         const auto index = buffer_ & 31;
1213         const auto op = GetOp2(index);
1214         switch (op & 3) {
1215           case 0: {
1216             sink_(GetEmit2(index, (op >> 2) + 0));
1217             break;
1218           }
1219           case 1: {
1220             ok_ = false;
1221             break;
1222           }
1223         }
1224         return;
1225       }
1226       case 6: {
1227         const auto index = buffer_ & 63;
1228         const auto op = GetOp3(index);
1229         switch (op & 3) {
1230           case 0: {
1231             ok_ = false;
1232             break;
1233           }
1234           case 1: {
1235             sink_(GetEmit3(index, (op >> 2) + 0));
1236             break;
1237           }
1238         }
1239         return;
1240       }
1241       case 7: {
1242         const auto index = buffer_ & 127;
1243         const auto op = GetOp4(index);
1244         switch (op & 3) {
1245           case 0: {
1246             ok_ = false;
1247             break;
1248           }
1249           case 1: {
1250             sink_(GetEmit4(index, (op >> 2) + 0));
1251             break;
1252           }
1253         }
1254         return;
1255       }
1256       case 8: {
1257         const auto index = buffer_ & 255;
1258         const auto op = GetOp5(index);
1259         switch (op & 3) {
1260           case 0: {
1261             ok_ = false;
1262             break;
1263           }
1264           case 1: {
1265             sink_(GetEmit5(index, (op >> 2) + 0));
1266             break;
1267           }
1268         }
1269         return;
1270       }
1271       case 9: {
1272         const auto index = buffer_ & 511;
1273         const auto op = GetOp6(index);
1274         switch (op & 3) {
1275           case 0: {
1276             ok_ = false;
1277             break;
1278           }
1279           case 1: {
1280             sink_(GetEmit6(index, (op >> 2) + 0));
1281             break;
1282           }
1283         }
1284         return;
1285       }
1286       case 0: {
1287         return;
1288       }
1289     }
1290   }
DecodeStep0()1291   void DecodeStep0() {
1292     if (!RefillTo1()) {
1293       Done1();
1294       return;
1295     }
1296     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1297     const auto op = GetOp7(index);
1298     const int consumed = op & 1;
1299     buffer_len_ -= consumed;
1300     const auto emit_ofs = op >> 1;
1301     sink_(GetEmit7(index, emit_ofs + 0));
1302   }
RefillTo1()1303   bool RefillTo1() {
1304     switch (buffer_len_) {
1305       case 0: {
1306         return Read1to8Bytes();
1307       }
1308     }
1309     return true;
1310   }
Read1to8Bytes()1311   bool Read1to8Bytes() {
1312     switch (end_ - begin_) {
1313       case 0: {
1314         return false;
1315       }
1316       case 1: {
1317         Fill1();
1318         return true;
1319       }
1320       case 2: {
1321         Fill2();
1322         return true;
1323       }
1324       case 3: {
1325         Fill3();
1326         return true;
1327       }
1328       case 4: {
1329         Fill4();
1330         return true;
1331       }
1332       case 5: {
1333         Fill5();
1334         return true;
1335       }
1336       case 6: {
1337         Fill6();
1338         return true;
1339       }
1340       case 7: {
1341         Fill7();
1342         return true;
1343       }
1344       default: {
1345         Fill8();
1346         return true;
1347       }
1348     }
1349   }
Done1()1350   void Done1() {
1351     done_ = true;
1352     ok_ = false;
1353   }
DecodeStep1()1354   void DecodeStep1() {
1355     if (!RefillTo16()) {
1356       Done2();
1357       return;
1358     }
1359     const auto index = (buffer_ >> (buffer_len_ - 16)) & 0xffff;
1360     const auto op = GetOp8(index);
1361     const int consumed = op & 31;
1362     buffer_len_ -= consumed;
1363     const auto emit_ofs = op >> 10;
1364     switch ((op >> 5) & 31) {
1365       case 0: {
1366         sink_(GetEmit8(index, emit_ofs + 0));
1367         break;
1368       }
1369       case 1: {
1370         DecodeStep2();
1371         break;
1372       }
1373       case 2: {
1374         DecodeStep3();
1375         break;
1376       }
1377       case 3: {
1378         DecodeStep4();
1379         break;
1380       }
1381       case 4: {
1382         DecodeStep5();
1383         break;
1384       }
1385       case 5: {
1386         DecodeStep6();
1387         break;
1388       }
1389       case 6: {
1390         DecodeStep7();
1391         break;
1392       }
1393       case 7: {
1394         DecodeStep8();
1395         break;
1396       }
1397       case 8: {
1398         DecodeStep9();
1399         break;
1400       }
1401       case 9: {
1402         DecodeStep10();
1403         break;
1404       }
1405       case 10: {
1406         DecodeStep17();
1407         break;
1408       }
1409       case 11: {
1410         DecodeStep11();
1411         break;
1412       }
1413       case 12: {
1414         DecodeStep12();
1415         break;
1416       }
1417       case 13: {
1418         DecodeStep13();
1419         break;
1420       }
1421       case 14: {
1422         DecodeStep14();
1423         break;
1424       }
1425       case 15: {
1426         DecodeStep15();
1427         break;
1428       }
1429       case 16: {
1430         DecodeStep16();
1431         break;
1432       }
1433       case 17: {
1434         DecodeStep18();
1435         break;
1436       }
1437     }
1438   }
RefillTo16()1439   bool RefillTo16() {
1440     switch (buffer_len_) {
1441       case 0: {
1442         return Read2to8Bytes();
1443       }
1444       case 1:
1445       case 2:
1446       case 3:
1447       case 4:
1448       case 5:
1449       case 6:
1450       case 7: {
1451         return Read2to7Bytes();
1452       }
1453       case 8: {
1454         return Read1to7Bytes();
1455       }
1456       case 9:
1457       case 10:
1458       case 11:
1459       case 12:
1460       case 13:
1461       case 14:
1462       case 15: {
1463         return Read1to6Bytes();
1464       }
1465     }
1466     return true;
1467   }
Done2()1468   void Done2() {
1469     done_ = true;
1470     switch (end_ - begin_) {
1471       case 1: {
1472         Fill1();
1473         break;
1474       }
1475     }
1476     switch (buffer_len_) {
1477       case 1:
1478       case 2: {
1479         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1480         return;
1481       }
1482       case 3: {
1483         const auto index = buffer_ & 7;
1484         const auto op = GetOp9(index);
1485         switch (op & 3) {
1486           case 0: {
1487             sink_(GetEmit9(index, (op >> 2) + 0));
1488             break;
1489           }
1490           case 1: {
1491             ok_ = false;
1492             break;
1493           }
1494         }
1495         return;
1496       }
1497       case 4: {
1498         const auto index = buffer_ & 15;
1499         const auto op = GetOp10(index);
1500         switch (op & 3) {
1501           case 0: {
1502             ok_ = false;
1503             break;
1504           }
1505           case 1: {
1506             sink_(GetEmit10(index, (op >> 2) + 0));
1507             break;
1508           }
1509         }
1510         return;
1511       }
1512       case 5: {
1513         const auto index = buffer_ & 31;
1514         const auto op = GetOp11(index);
1515         switch (op & 3) {
1516           case 0: {
1517             ok_ = false;
1518             break;
1519           }
1520           case 1: {
1521             sink_(GetEmit11(index, (op >> 2) + 0));
1522             break;
1523           }
1524         }
1525         return;
1526       }
1527       case 6: {
1528         const auto index = buffer_ & 63;
1529         const auto op = GetOp12(index);
1530         switch (op & 3) {
1531           case 0: {
1532             ok_ = false;
1533             break;
1534           }
1535           case 1: {
1536             sink_(GetEmit12(index, (op >> 2) + 0));
1537             break;
1538           }
1539         }
1540         return;
1541       }
1542       case 7: {
1543         const auto index = buffer_ & 127;
1544         const auto op = GetOp13(index);
1545         switch (op & 3) {
1546           case 0: {
1547             ok_ = false;
1548             break;
1549           }
1550           case 1: {
1551             sink_(GetEmit13(index, (op >> 2) + 0));
1552             break;
1553           }
1554         }
1555         return;
1556       }
1557       case 8: {
1558         const auto index = buffer_ & 255;
1559         const auto op = GetOp14(index);
1560         switch (op & 3) {
1561           case 0: {
1562             sink_(GetEmit14(index, (op >> 2) + 0));
1563             sink_(GetEmit14(index, (op >> 2) + 1));
1564             break;
1565           }
1566           case 1: {
1567             ok_ = false;
1568             break;
1569           }
1570           case 2: {
1571             sink_(GetEmit14(index, (op >> 2) + 0));
1572             break;
1573           }
1574         }
1575         return;
1576       }
1577       case 9: {
1578         const auto index = buffer_ & 511;
1579         const auto op = GetOp15(index);
1580         switch (op & 3) {
1581           case 0: {
1582             ok_ = false;
1583             break;
1584           }
1585           case 1: {
1586             sink_(GetEmit15(index, (op >> 2) + 0));
1587             sink_(GetEmit15(index, (op >> 2) + 1));
1588             break;
1589           }
1590           case 2: {
1591             sink_(GetEmit15(index, (op >> 2) + 0));
1592             break;
1593           }
1594         }
1595         return;
1596       }
1597       case 10: {
1598         const auto index = buffer_ & 1023;
1599         const auto op = GetOp16(index);
1600         switch (op & 3) {
1601           case 0: {
1602             ok_ = false;
1603             break;
1604           }
1605           case 1: {
1606             sink_(GetEmit16(index, (op >> 2) + 0));
1607             sink_(GetEmit16(index, (op >> 2) + 1));
1608             break;
1609           }
1610           case 2: {
1611             sink_(GetEmit16(index, (op >> 2) + 0));
1612             break;
1613           }
1614         }
1615         return;
1616       }
1617       case 11: {
1618         const auto index = buffer_ & 2047;
1619         const auto op = GetOp17(index);
1620         switch (op & 3) {
1621           case 0: {
1622             ok_ = false;
1623             break;
1624           }
1625           case 1: {
1626             sink_(GetEmit17(index, (op >> 2) + 0));
1627             sink_(GetEmit17(index, (op >> 2) + 1));
1628             break;
1629           }
1630           case 2: {
1631             sink_(GetEmit17(index, (op >> 2) + 0));
1632             break;
1633           }
1634         }
1635         return;
1636       }
1637       case 12: {
1638         const auto index = buffer_ & 4095;
1639         const auto op = GetOp18(index);
1640         switch (op & 3) {
1641           case 0: {
1642             ok_ = false;
1643             break;
1644           }
1645           case 1: {
1646             sink_(GetEmit18(index, (op >> 2) + 0));
1647             sink_(GetEmit18(index, (op >> 2) + 1));
1648             break;
1649           }
1650           case 2: {
1651             sink_(GetEmit18(index, (op >> 2) + 0));
1652             break;
1653           }
1654         }
1655         return;
1656       }
1657       case 13: {
1658         const auto index = buffer_ & 8191;
1659         const auto op = GetOp19(index);
1660         switch (op & 7) {
1661           case 0: {
1662             sink_(GetEmit19(index, (op >> 3) + 0));
1663             sink_(GetEmit19(index, (op >> 3) + 1));
1664             sink_(GetEmit19(index, (op >> 3) + 2));
1665             break;
1666           }
1667           case 1: {
1668             ok_ = false;
1669             break;
1670           }
1671           case 2: {
1672             sink_(GetEmit19(index, (op >> 3) + 0));
1673             sink_(GetEmit19(index, (op >> 3) + 1));
1674             break;
1675           }
1676           case 3: {
1677             sink_(GetEmit19(index, (op >> 3) + 0));
1678             break;
1679           }
1680         }
1681         return;
1682       }
1683       case 14: {
1684         const auto index = buffer_ & 16383;
1685         const auto op = GetOp20(index);
1686         switch (op & 7) {
1687           case 0: {
1688             ok_ = false;
1689             break;
1690           }
1691           case 1: {
1692             sink_(GetEmit20(index, (op >> 3) + 0));
1693             sink_(GetEmit20(index, (op >> 3) + 1));
1694             sink_(GetEmit20(index, (op >> 3) + 2));
1695             break;
1696           }
1697           case 2: {
1698             sink_(GetEmit20(index, (op >> 3) + 0));
1699             sink_(GetEmit20(index, (op >> 3) + 1));
1700             break;
1701           }
1702           case 3: {
1703             sink_(GetEmit20(index, (op >> 3) + 0));
1704             break;
1705           }
1706         }
1707         return;
1708       }
1709       case 15: {
1710         const auto index = buffer_ & 32767;
1711         const auto op = GetOp21(index);
1712         switch (op & 7) {
1713           case 0: {
1714             ok_ = false;
1715             break;
1716           }
1717           case 1: {
1718             sink_(GetEmit21(index, (op >> 3) + 0));
1719             sink_(GetEmit21(index, (op >> 3) + 1));
1720             sink_(GetEmit21(index, (op >> 3) + 2));
1721             break;
1722           }
1723           case 2: {
1724             sink_(GetEmit21(index, (op >> 3) + 0));
1725             sink_(GetEmit21(index, (op >> 3) + 1));
1726             break;
1727           }
1728           case 3: {
1729             sink_(GetEmit21(index, (op >> 3) + 0));
1730             break;
1731           }
1732         }
1733         return;
1734       }
1735       case 0: {
1736         return;
1737       }
1738     }
1739   }
DecodeStep2()1740   void DecodeStep2() {
1741     if (!RefillTo1()) {
1742       Done3();
1743       return;
1744     }
1745     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1746     const auto op = GetOp22(index);
1747     const int consumed = op & 1;
1748     buffer_len_ -= consumed;
1749     const auto emit_ofs = op >> 1;
1750     sink_(GetEmit22(index, emit_ofs + 0));
1751   }
Done3()1752   void Done3() {
1753     done_ = true;
1754     ok_ = false;
1755   }
DecodeStep3()1756   void DecodeStep3() {
1757     if (!RefillTo1()) {
1758       Done4();
1759       return;
1760     }
1761     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1762     const auto op = GetOp23(index);
1763     const int consumed = op & 1;
1764     buffer_len_ -= consumed;
1765     const auto emit_ofs = op >> 1;
1766     sink_(GetEmit23(index, emit_ofs + 0));
1767   }
Done4()1768   void Done4() {
1769     done_ = true;
1770     ok_ = false;
1771   }
DecodeStep4()1772   void DecodeStep4() {
1773     if (!RefillTo1()) {
1774       Done5();
1775       return;
1776     }
1777     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1778     const auto op = GetOp24(index);
1779     const int consumed = op & 1;
1780     buffer_len_ -= consumed;
1781     const auto emit_ofs = op >> 1;
1782     sink_(GetEmit24(index, emit_ofs + 0));
1783   }
Done5()1784   void Done5() {
1785     done_ = true;
1786     ok_ = false;
1787   }
DecodeStep5()1788   void DecodeStep5() {
1789     if (!RefillTo1()) {
1790       Done6();
1791       return;
1792     }
1793     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1794     const auto op = GetOp25(index);
1795     const int consumed = op & 1;
1796     buffer_len_ -= consumed;
1797     const auto emit_ofs = op >> 1;
1798     sink_(GetEmit25(index, emit_ofs + 0));
1799   }
Done6()1800   void Done6() {
1801     done_ = true;
1802     ok_ = false;
1803   }
DecodeStep6()1804   void DecodeStep6() {
1805     if (!RefillTo1()) {
1806       Done7();
1807       return;
1808     }
1809     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1810     const auto op = GetOp26(index);
1811     const int consumed = op & 1;
1812     buffer_len_ -= consumed;
1813     const auto emit_ofs = op >> 1;
1814     sink_(GetEmit26(index, emit_ofs + 0));
1815   }
Done7()1816   void Done7() {
1817     done_ = true;
1818     ok_ = false;
1819   }
DecodeStep7()1820   void DecodeStep7() {
1821     if (!RefillTo1()) {
1822       Done8();
1823       return;
1824     }
1825     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1826     const auto op = GetOp27(index);
1827     const int consumed = op & 1;
1828     buffer_len_ -= consumed;
1829     const auto emit_ofs = op >> 1;
1830     sink_(GetEmit27(index, emit_ofs + 0));
1831   }
Done8()1832   void Done8() {
1833     done_ = true;
1834     ok_ = false;
1835   }
DecodeStep8()1836   void DecodeStep8() {
1837     if (!RefillTo1()) {
1838       Done9();
1839       return;
1840     }
1841     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1842     const auto op = GetOp28(index);
1843     const int consumed = op & 1;
1844     buffer_len_ -= consumed;
1845     const auto emit_ofs = op >> 1;
1846     sink_(GetEmit28(index, emit_ofs + 0));
1847   }
Done9()1848   void Done9() {
1849     done_ = true;
1850     ok_ = false;
1851   }
DecodeStep9()1852   void DecodeStep9() {
1853     if (!RefillTo1()) {
1854       Done10();
1855       return;
1856     }
1857     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1858     const auto op = GetOp29(index);
1859     const int consumed = op & 1;
1860     buffer_len_ -= consumed;
1861     const auto emit_ofs = op >> 1;
1862     sink_(GetEmit29(index, emit_ofs + 0));
1863   }
Done10()1864   void Done10() {
1865     done_ = true;
1866     ok_ = false;
1867   }
DecodeStep10()1868   void DecodeStep10() {
1869     if (!RefillTo1()) {
1870       Done11();
1871       return;
1872     }
1873     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1874     const auto op = GetOp30(index);
1875     const int consumed = op & 1;
1876     buffer_len_ -= consumed;
1877     const auto emit_ofs = op >> 1;
1878     sink_(GetEmit30(index, emit_ofs + 0));
1879   }
Done11()1880   void Done11() {
1881     done_ = true;
1882     ok_ = false;
1883   }
DecodeStep11()1884   void DecodeStep11() {
1885     if (!RefillTo2()) {
1886       Done12();
1887       return;
1888     }
1889     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1890     const auto op = GetOp31(index);
1891     const int consumed = op & 3;
1892     buffer_len_ -= consumed;
1893     const auto emit_ofs = op >> 2;
1894     sink_(GetEmit31(index, emit_ofs + 0));
1895   }
RefillTo2()1896   bool RefillTo2() {
1897     switch (buffer_len_) {
1898       case 0: {
1899         return Read1to8Bytes();
1900       }
1901       case 1: {
1902         return Read1to7Bytes();
1903       }
1904     }
1905     return true;
1906   }
Done12()1907   void Done12() {
1908     done_ = true;
1909     switch (buffer_len_) {
1910       case 1:
1911       case 0: {
1912         ok_ = false;
1913         return;
1914       }
1915     }
1916   }
DecodeStep12()1917   void DecodeStep12() {
1918     if (!RefillTo2()) {
1919       Done13();
1920       return;
1921     }
1922     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1923     const auto op = GetOp32(index);
1924     const int consumed = op & 3;
1925     buffer_len_ -= consumed;
1926     const auto emit_ofs = op >> 2;
1927     sink_(GetEmit32(index, emit_ofs + 0));
1928   }
Done13()1929   void Done13() {
1930     done_ = true;
1931     switch (buffer_len_) {
1932       case 1:
1933       case 0: {
1934         ok_ = false;
1935         return;
1936       }
1937     }
1938   }
DecodeStep13()1939   void DecodeStep13() {
1940     if (!RefillTo2()) {
1941       Done14();
1942       return;
1943     }
1944     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1945     const auto op = GetOp33(index);
1946     const int consumed = op & 3;
1947     buffer_len_ -= consumed;
1948     const auto emit_ofs = op >> 2;
1949     sink_(GetEmit33(index, emit_ofs + 0));
1950   }
Done14()1951   void Done14() {
1952     done_ = true;
1953     switch (buffer_len_) {
1954       case 1:
1955       case 0: {
1956         ok_ = false;
1957         return;
1958       }
1959     }
1960   }
DecodeStep14()1961   void DecodeStep14() {
1962     if (!RefillTo2()) {
1963       Done15();
1964       return;
1965     }
1966     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1967     const auto op = GetOp34(index);
1968     const int consumed = op & 3;
1969     buffer_len_ -= consumed;
1970     const auto emit_ofs = op >> 2;
1971     sink_(GetEmit34(index, emit_ofs + 0));
1972   }
Done15()1973   void Done15() {
1974     done_ = true;
1975     switch (buffer_len_) {
1976       case 1:
1977       case 0: {
1978         ok_ = false;
1979         return;
1980       }
1981     }
1982   }
DecodeStep15()1983   void DecodeStep15() {
1984     if (!RefillTo2()) {
1985       Done16();
1986       return;
1987     }
1988     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1989     const auto op = GetOp35(index);
1990     const int consumed = op & 3;
1991     buffer_len_ -= consumed;
1992     const auto emit_ofs = op >> 2;
1993     sink_(GetEmit35(index, emit_ofs + 0));
1994   }
Done16()1995   void Done16() {
1996     done_ = true;
1997     switch (buffer_len_) {
1998       case 1:
1999       case 0: {
2000         ok_ = false;
2001         return;
2002       }
2003     }
2004   }
DecodeStep16()2005   void DecodeStep16() {
2006     if (!RefillTo2()) {
2007       Done17();
2008       return;
2009     }
2010     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2011     const auto op = GetOp36(index);
2012     const int consumed = op & 3;
2013     buffer_len_ -= consumed;
2014     const auto emit_ofs = op >> 2;
2015     sink_(GetEmit36(index, emit_ofs + 0));
2016   }
Done17()2017   void Done17() {
2018     done_ = true;
2019     switch (buffer_len_) {
2020       case 1:
2021       case 0: {
2022         ok_ = false;
2023         return;
2024       }
2025     }
2026   }
DecodeStep17()2027   void DecodeStep17() {
2028     if (!RefillTo2()) {
2029       Done18();
2030       return;
2031     }
2032     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2033     const auto op = GetOp37(index);
2034     const int consumed = op & 3;
2035     buffer_len_ -= consumed;
2036     const auto emit_ofs = op >> 2;
2037     sink_(GetEmit37(index, emit_ofs + 0));
2038   }
Done18()2039   void Done18() {
2040     done_ = true;
2041     switch (buffer_len_) {
2042       case 1: {
2043         const auto index = buffer_ & 1;
2044         const auto op = GetOp38(index);
2045         switch (op & 1) {
2046           case 0: {
2047             sink_(GetEmit38(index, (op >> 1) + 0));
2048             break;
2049           }
2050           case 1: {
2051             ok_ = false;
2052             break;
2053           }
2054         }
2055         return;
2056       }
2057       case 0: {
2058         ok_ = false;
2059         return;
2060       }
2061     }
2062   }
DecodeStep18()2063   void DecodeStep18() {
2064     if (!RefillTo4()) {
2065       Done19();
2066       return;
2067     }
2068     const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf;
2069     const auto op = GetOp39(index);
2070     const int consumed = op & 7;
2071     buffer_len_ -= consumed;
2072     const auto emit_ofs = op >> 4;
2073     switch ((op >> 3) & 1) {
2074       case 0: {
2075         sink_(GetEmit39(index, emit_ofs + 0));
2076         break;
2077       }
2078       case 1: {
2079         begin_ = end_;
2080         buffer_len_ = 0;
2081         break;
2082       }
2083     }
2084   }
RefillTo4()2085   bool RefillTo4() {
2086     switch (buffer_len_) {
2087       case 0: {
2088         return Read1to8Bytes();
2089       }
2090       case 1:
2091       case 2:
2092       case 3: {
2093         return Read1to7Bytes();
2094       }
2095     }
2096     return true;
2097   }
Done19()2098   void Done19() {
2099     done_ = true;
2100     switch (buffer_len_) {
2101       case 1: {
2102         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
2103         return;
2104       }
2105       case 2: {
2106         const auto index = buffer_ & 3;
2107         const auto op = GetOp40(index);
2108         switch (op & 1) {
2109           case 0: {
2110             sink_(GetEmit40(index, (op >> 1) + 0));
2111             break;
2112           }
2113         }
2114         return;
2115       }
2116       case 3: {
2117         const auto index = buffer_ & 7;
2118         const auto op = GetOp41(index);
2119         switch (op & 3) {
2120           case 0: {
2121             ok_ = false;
2122             break;
2123           }
2124           case 1: {
2125             sink_(GetEmit41(index, (op >> 2) + 0));
2126             break;
2127           }
2128         }
2129         return;
2130       }
2131       case 0: {
2132         return;
2133       }
2134     }
2135   }
DecodeStep19()2136   void DecodeStep19() {
2137     if (!RefillTo2()) {
2138       Done20();
2139       return;
2140     }
2141     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2142     const auto op = GetOp42(index);
2143     const int consumed = op & 3;
2144     buffer_len_ -= consumed;
2145     const auto emit_ofs = op >> 2;
2146     sink_(GetEmit42(index, emit_ofs + 0));
2147   }
Done20()2148   void Done20() {
2149     done_ = true;
2150     switch (buffer_len_) {
2151       case 1: {
2152         const auto index = buffer_ & 1;
2153         const auto op = GetOp43(index);
2154         switch (op & 1) {
2155           case 0: {
2156             sink_(GetEmit43(index, (op >> 1) + 0));
2157             break;
2158           }
2159           case 1: {
2160             ok_ = false;
2161             break;
2162           }
2163         }
2164         return;
2165       }
2166       case 0: {
2167         ok_ = false;
2168         return;
2169       }
2170     }
2171   }
2172   F sink_;
2173   const uint8_t* begin_;
2174   const uint8_t* const end_;
2175   uint64_t buffer_ = 0;
2176   int buffer_len_ = 0;
2177   bool ok_ = true;
2178   bool done_ = false;
2179 };
2180 }  // namespace geometry_10_16
2181 }  // namespace grpc_core
2182 #endif  // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_10_16_H
2183