From 34de878e3dc5fe3ed75a1253c5bdd1aae1e658a0 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Date: Thu, 13 Mar 2025 10:57:56 +0100 Subject: [PATCH 04/17] avcodec/hqxvlc: Avoid hardcoded RL VLC table hqxvlc.c contains sort-of run-length VLCs in hardcoded form; they amount to 26688 elements, taking 104KiB. These tables contain many duplicated entries (they are partially created via a RPT_1024 macro). There are actually only 3039 different codes in all tables combined, making this very wasteful. This commit changes this by extracting the underlying entries and creating a (static) RL-VLC. This only costs 3*3039 bytes of .rodata. The resulting table needs only 15630 entries, because our VLC init code uses smaller subtables when possible (for an incomplete code, the negative of the length stored in the VLC code is the number of bits the subtable uses; the hardcoded tables uses a worst-case per table value). Using GET_RL_VLC also gets rid of an unnecessary reload in case a code is too long to be parsed in the first stage. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/hqx.c | 21 +- libavcodec/hqx.h | 12 +- libavcodec/hqxvlc.c | 2226 ++++++++++++++++--------------------------- 3 files changed, 829 insertions(+), 1430 deletions(-) diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c index ee6c5a6622..b31c35bbcc 100644 --- a/libavcodec/hqx.c +++ b/libavcodec/hqx.c @@ -97,19 +97,16 @@ static inline void put_blocks(HQXContext *ctx, int plane, } static inline void hqx_get_ac(GetBitContext *gb, const HQXAC *ac, - int *run, int *lev) + int *runp, int *lev) { - int val; - - val = show_bits(gb, ac->lut_bits); - if (ac->lut[val].bits == -1) { - GetBitContext gb2 = *gb; - skip_bits(&gb2, ac->lut_bits); - val = ac->lut[val].lev + show_bits(&gb2, ac->extra_bits); - } - *run = ac->lut[val].run; - *lev = ac->lut[val].lev; - skip_bits(gb, ac->lut[val].bits); + int level, run; + OPEN_READER(re, gb); + + UPDATE_CACHE(re, gb); + GET_RL_VLC(level, run, re, gb, ac->lut, ac->bits, 2, 0); + CLOSE_READER(re, gb); + *runp = run; + *lev = level; } static int decode_block(GetBitContext *gb, VLC *vlc, diff --git a/libavcodec/hqx.h b/libavcodec/hqx.h index 155ec7f84f..4f313a1dc3 100644 --- a/libavcodec/hqx.h +++ b/libavcodec/hqx.h @@ -39,15 +39,9 @@ enum HQXACMode { NUM_HQX_AC }; -typedef struct HQXLUT { - int16_t lev; - uint8_t run; - int8_t bits; -} HQXLUT; - typedef struct HQXAC { - int lut_bits, extra_bits; - const HQXLUT *lut; + int bits; + const RL_VLC_ELEM *lut; } HQXAC; struct HQXContext; @@ -81,7 +75,7 @@ typedef struct HQXContext { #define HQX_CBP_VLC_BITS 5 #define HQX_DC_VLC_BITS 9 -extern const HQXAC ff_hqx_ac[NUM_HQX_AC]; +extern HQXAC ff_hqx_ac[NUM_HQX_AC]; int ff_hqx_init_vlcs(HQXContext *ctx); diff --git a/libavcodec/hqxvlc.c b/libavcodec/hqxvlc.c index 1eeda4fcce..94ab21724c 100644 --- a/libavcodec/hqxvlc.c +++ b/libavcodec/hqxvlc.c @@ -19,6 +19,7 @@ */ #include "hqx.h" +#include "libavutil/thread.h" static const uint8_t cbp_vlc_bits[16] = { 0x04, 0x1C, 0x1D, 0x09, 0x1E, 0x0B, 0x1B, 0x08, @@ -719,1424 +720,790 @@ static const uint8_t dc11_vlc_lens[2048] = { 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, }; -#define RPT_2(a, b, c) { a, b, c }, { a, b, c } -#define RPT_4(a, b, c) RPT_2( a, b, c), RPT_2( a, b, c) -#define RPT_8(a, b, c) RPT_4( a, b, c), RPT_4( a, b, c) -#define RPT_16(a, b, c) RPT_8( a, b, c), RPT_8( a, b, c) -#define RPT_32(a, b, c) RPT_16( a, b, c), RPT_16( a, b, c) -#define RPT_64(a, b, c) RPT_32( a, b, c), RPT_32( a, b, c) -#define RPT_128(a, b, c) RPT_64( a, b, c), RPT_64( a, b, c) -#define RPT_256(a, b, c) RPT_128(a, b, c), RPT_128(a, b, c) -#define RPT_512(a, b, c) RPT_256(a, b, c), RPT_256(a, b, c) -#define RPT_1024(a, b, c) RPT_512(a, b, c), RPT_512(a, b, c) -static const HQXLUT ac0_lut[] = { - RPT_64 ( 1, 0, 4 ), RPT_64 ( -1, 0, 4 ), - RPT_64 ( 2, 0, 4 ), RPT_64 ( -2, 0, 4 ), - RPT_32 ( 3, 0, 5 ), RPT_32 ( -3, 0, 5 ), - RPT_32 ( 4, 0, 5 ), RPT_32 ( -4, 0, 5 ), - RPT_32 ( 1, 1, 5 ), RPT_32 ( -1, 1, 5 ), - RPT_16 ( 5, 0, 6 ), RPT_16 ( -5, 0, 6 ), - RPT_16 ( 6, 0, 6 ), RPT_16 ( -6, 0, 6 ), - RPT_16 ( 7, 0, 6 ), RPT_16 ( -7, 0, 6 ), - RPT_16 ( 8, 0, 6 ), RPT_16 ( -8, 0, 6 ), - { 1024, 0, -1 }, { 1056, 0, -1 }, { 1088, 0, -1 }, { 1120, 0, -1 }, - { 1152, 0, -1 }, { 1184, 0, -1 }, { 1216, 0, -1 }, { 1248, 0, -1 }, - { 1280, 0, -1 }, { 1312, 0, -1 }, { 1344, 0, -1 }, { 1376, 0, -1 }, - { 1408, 0, -1 }, { 1440, 0, -1 }, { 1472, 0, -1 }, { 1504, 0, -1 }, - { 1536, 0, -1 }, { 1568, 0, -1 }, { 1600, 0, -1 }, { 1632, 0, -1 }, - { 1664, 0, -1 }, { 1696, 0, -1 }, { 1728, 0, -1 }, { 1760, 0, -1 }, - { 1792, 0, -1 }, { 1824, 0, -1 }, { 1856, 0, -1 }, { 1888, 0, -1 }, - { 1920, 0, -1 }, { 1952, 0, -1 }, { 1984, 0, -1 }, { 2016, 0, -1 }, - RPT_32 ( 0, 64, 5 ), RPT_8 ( 9, 0, 7 ), - RPT_8 ( -9, 0, 7 ), RPT_8 ( 10, 0, 7 ), - RPT_8 ( -10, 0, 7 ), RPT_8 ( 11, 0, 7 ), - RPT_8 ( -11, 0, 7 ), RPT_8 ( 12, 0, 7 ), - RPT_8 ( -12, 0, 7 ), RPT_8 ( 13, 0, 7 ), - RPT_8 ( -13, 0, 7 ), RPT_8 ( 14, 0, 7 ), - RPT_8 ( -14, 0, 7 ), RPT_8 ( 2, 1, 7 ), - RPT_8 ( -2, 1, 7 ), RPT_8 ( 1, 2, 7 ), - RPT_8 ( -1, 2, 7 ), RPT_4 ( 15, 0, 8 ), - RPT_4 ( -15, 0, 8 ), RPT_4 ( 16, 0, 8 ), - RPT_4 ( -16, 0, 8 ), RPT_4 ( 17, 0, 8 ), - RPT_4 ( -17, 0, 8 ), RPT_4 ( 18, 0, 8 ), - RPT_4 ( -18, 0, 8 ), RPT_4 ( 19, 0, 8 ), - RPT_4 ( -19, 0, 8 ), RPT_4 ( 20, 0, 8 ), - RPT_4 ( -20, 0, 8 ), RPT_4 ( 21, 0, 8 ), - RPT_4 ( -21, 0, 8 ), RPT_4 ( 3, 1, 8 ), - RPT_4 ( -3, 1, 8 ), RPT_4 ( 4, 1, 8 ), - RPT_4 ( -4, 1, 8 ), RPT_4 ( 1, 3, 8 ), - RPT_4 ( -1, 3, 8 ), RPT_4 ( 1, 4, 8 ), - RPT_4 ( -1, 4, 8 ), RPT_4 ( 0, 0, 8 ), - RPT_2 ( 22, 0, 9 ), RPT_2 ( -22, 0, 9 ), - RPT_2 ( 23, 0, 9 ), RPT_2 ( -23, 0, 9 ), - RPT_2 ( 24, 0, 9 ), RPT_2 ( -24, 0, 9 ), - RPT_2 ( 25, 0, 9 ), RPT_2 ( -25, 0, 9 ), - RPT_2 ( 26, 0, 9 ), RPT_2 ( -26, 0, 9 ), - RPT_2 ( 27, 0, 9 ), RPT_2 ( -27, 0, 9 ), - RPT_2 ( 28, 0, 9 ), RPT_2 ( -28, 0, 9 ), - RPT_2 ( 29, 0, 9 ), RPT_2 ( -29, 0, 9 ), - RPT_2 ( 30, 0, 9 ), RPT_2 ( -30, 0, 9 ), - RPT_2 ( 31, 0, 9 ), RPT_2 ( -31, 0, 9 ), - RPT_2 ( 32, 0, 9 ), RPT_2 ( -32, 0, 9 ), - RPT_2 ( 33, 0, 9 ), RPT_2 ( -33, 0, 9 ), - RPT_2 ( 5, 1, 9 ), RPT_2 ( -5, 1, 9 ), - RPT_2 ( 6, 1, 9 ), RPT_2 ( -6, 1, 9 ), - RPT_2 ( 2, 2, 9 ), RPT_2 ( -2, 2, 9 ), - RPT_2 ( 1, 5, 9 ), RPT_2 ( -1, 5, 9 ), - RPT_2 ( 1, 6, 9 ), RPT_2 ( -1, 6, 9 ), - { 34, 0, 10 }, { -34, 0, 10 }, { 35, 0, 10 }, { -35, 0, 10 }, - { 36, 0, 10 }, { -36, 0, 10 }, { 37, 0, 10 }, { -37, 0, 10 }, - { 38, 0, 10 }, { -38, 0, 10 }, { 39, 0, 10 }, { -39, 0, 10 }, - { 40, 0, 10 }, { -40, 0, 10 }, { 41, 0, 10 }, { -41, 0, 10 }, - { 42, 0, 10 }, { -42, 0, 10 }, { 43, 0, 10 }, { -43, 0, 10 }, - { 44, 0, 10 }, { -44, 0, 10 }, { 45, 0, 10 }, { -45, 0, 10 }, - { 46, 0, 10 }, { -46, 0, 10 }, { 47, 0, 10 }, { -47, 0, 10 }, - { 48, 0, 10 }, { -48, 0, 10 }, { 49, 0, 10 }, { -49, 0, 10 }, - { 50, 0, 10 }, { -50, 0, 10 }, RPT_2 ( 0, 1, 9 ), - { 7, 1, 10 }, { -7, 1, 10 }, { 8, 1, 10 }, { -8, 1, 10 }, - { 9, 1, 10 }, { -9, 1, 10 }, { 10, 1, 10 }, { -10, 1, 10 }, - RPT_2 ( 0, 2, 9 ), { 3, 2, 10 }, { -3, 2, 10 }, - RPT_2 ( 0, 3, 9 ), { 2, 3, 10 }, { -2, 3, 10 }, - { 1, 7, 10 }, { -1, 7, 10 }, { 1, 8, 10 }, { -1, 8, 10 }, - { 2048, 0, -1 }, { 2080, 0, -1 }, { 2112, 0, -1 }, { 2144, 0, -1 }, - { 2176, 0, -1 }, { 2208, 0, -1 }, { 2240, 0, -1 }, { 2272, 0, -1 }, - { 2304, 0, -1 }, { 2336, 0, -1 }, { 2368, 0, -1 }, { 2400, 0, -1 }, - { 2432, 0, -1 }, { 2464, 0, -1 }, { 2496, 0, -1 }, { 2528, 0, -1 }, - { 2560, 0, -1 }, { 2592, 0, -1 }, { 2624, 0, -1 }, { 2656, 0, -1 }, - { 2688, 0, -1 }, { 2720, 0, -1 }, { 2752, 0, -1 }, { 0, 4, 10 }, - { 2784, 0, -1 }, { 0, 5, 10 }, { 0, 6, 10 }, { 2816, 0, -1 }, - { 2848, 0, -1 }, { 2880, 0, -1 }, { 2912, 0, -1 }, { 2944, 0, -1 }, - { 2976, 0, -1 }, { 3008, 0, -1 }, { 3040, 0, -1 }, { 3072, 0, -1 }, - { 3104, 0, -1 }, { 3136, 0, -1 }, { 3168, 0, -1 }, { 3200, 0, -1 }, - RPT_4 ( 0, 0, 13 ), RPT_2 ( 1, 0, 14 ), - RPT_2 ( -1, 0, 14 ), RPT_2 ( 2, 0, 14 ), - RPT_2 ( -2, 0, 14 ), RPT_2 ( 3, 0, 14 ), - RPT_2 ( -3, 0, 14 ), RPT_2 ( 4, 0, 14 ), - RPT_2 ( -4, 0, 14 ), RPT_2 ( 5, 0, 14 ), - RPT_2 ( -5, 0, 14 ), RPT_2 ( 6, 0, 14 ), - RPT_2 ( -6, 0, 14 ), RPT_2 ( 7, 0, 14 ), - RPT_2 ( -7, 0, 14 ), RPT_2 ( 8, 0, 14 ), - RPT_2 ( -8, 0, 14 ), RPT_2 ( 9, 0, 14 ), - RPT_2 ( -9, 0, 14 ), RPT_2 ( 10, 0, 14 ), - RPT_2 ( -10, 0, 14 ), RPT_2 ( 11, 0, 14 ), - RPT_2 ( -11, 0, 14 ), RPT_2 ( 12, 0, 14 ), - RPT_2 ( -12, 0, 14 ), RPT_2 ( 13, 0, 14 ), - RPT_2 ( -13, 0, 14 ), RPT_2 ( 14, 0, 14 ), - RPT_2 ( -14, 0, 14 ), RPT_2 ( 15, 0, 14 ), - RPT_2 ( -15, 0, 14 ), RPT_2 ( 16, 0, 14 ), - RPT_2 ( -16, 0, 14 ), RPT_2 ( 17, 0, 14 ), - RPT_2 ( -17, 0, 14 ), RPT_2 ( 18, 0, 14 ), - RPT_2 ( -18, 0, 14 ), RPT_2 ( 19, 0, 14 ), - RPT_2 ( -19, 0, 14 ), RPT_2 ( 20, 0, 14 ), - RPT_2 ( -20, 0, 14 ), RPT_2 ( 21, 0, 14 ), - RPT_2 ( -21, 0, 14 ), RPT_2 ( 22, 0, 14 ), - RPT_2 ( -22, 0, 14 ), RPT_2 ( 23, 0, 14 ), - RPT_2 ( -23, 0, 14 ), RPT_2 ( 24, 0, 14 ), - RPT_2 ( -24, 0, 14 ), RPT_2 ( 25, 0, 14 ), - RPT_2 ( -25, 0, 14 ), RPT_2 ( 26, 0, 14 ), - RPT_2 ( -26, 0, 14 ), RPT_2 ( 27, 0, 14 ), - RPT_2 ( -27, 0, 14 ), RPT_2 ( 28, 0, 14 ), - RPT_2 ( -28, 0, 14 ), RPT_2 ( 29, 0, 14 ), - RPT_2 ( -29, 0, 14 ), RPT_2 ( 30, 0, 14 ), - RPT_2 ( -30, 0, 14 ), RPT_2 ( 31, 0, 14 ), - RPT_2 ( -31, 0, 14 ), RPT_2 ( 32, 0, 14 ), - RPT_2 ( -32, 0, 14 ), RPT_2 ( 33, 0, 14 ), - RPT_2 ( -33, 0, 14 ), RPT_2 ( 34, 0, 14 ), - RPT_2 ( -34, 0, 14 ), RPT_2 ( 35, 0, 14 ), - RPT_2 ( -35, 0, 14 ), RPT_2 ( 36, 0, 14 ), - RPT_2 ( -36, 0, 14 ), RPT_2 ( 37, 0, 14 ), - RPT_2 ( -37, 0, 14 ), RPT_2 ( 38, 0, 14 ), - RPT_2 ( -38, 0, 14 ), RPT_2 ( 39, 0, 14 ), - RPT_2 ( -39, 0, 14 ), RPT_2 ( 40, 0, 14 ), - RPT_2 ( -40, 0, 14 ), RPT_2 ( 41, 0, 14 ), - RPT_2 ( -41, 0, 14 ), RPT_2 ( 42, 0, 14 ), - RPT_2 ( -42, 0, 14 ), RPT_2 ( 43, 0, 14 ), - RPT_2 ( -43, 0, 14 ), RPT_2 ( 44, 0, 14 ), - RPT_2 ( -44, 0, 14 ), RPT_2 ( 45, 0, 14 ), - RPT_2 ( -45, 0, 14 ), RPT_2 ( 46, 0, 14 ), - RPT_2 ( -46, 0, 14 ), RPT_2 ( 47, 0, 14 ), - RPT_2 ( -47, 0, 14 ), RPT_2 ( 48, 0, 14 ), - RPT_2 ( -48, 0, 14 ), RPT_2 ( 49, 0, 14 ), - RPT_2 ( -49, 0, 14 ), RPT_2 ( 50, 0, 14 ), - RPT_2 ( -50, 0, 14 ), RPT_2 ( 51, 0, 14 ), - RPT_2 ( -51, 0, 14 ), RPT_2 ( 52, 0, 14 ), - RPT_2 ( -52, 0, 14 ), RPT_2 ( 53, 0, 14 ), - RPT_2 ( -53, 0, 14 ), RPT_2 ( 54, 0, 14 ), - RPT_2 ( -54, 0, 14 ), RPT_2 ( 55, 0, 14 ), - RPT_2 ( -55, 0, 14 ), RPT_2 ( 56, 0, 14 ), - RPT_2 ( -56, 0, 14 ), RPT_2 ( 57, 0, 14 ), - RPT_2 ( -57, 0, 14 ), RPT_2 ( 58, 0, 14 ), - RPT_2 ( -58, 0, 14 ), RPT_2 ( 59, 0, 14 ), - RPT_2 ( -59, 0, 14 ), RPT_2 ( 60, 0, 14 ), - RPT_2 ( -60, 0, 14 ), RPT_2 ( 61, 0, 14 ), - RPT_2 ( -61, 0, 14 ), RPT_2 ( 62, 0, 14 ), - RPT_2 ( -62, 0, 14 ), RPT_2 ( 63, 0, 14 ), - RPT_2 ( -63, 0, 14 ), RPT_2 ( 64, 0, 14 ), - RPT_2 ( -64, 0, 14 ), RPT_2 ( 65, 0, 14 ), - RPT_2 ( -65, 0, 14 ), RPT_2 ( 66, 0, 14 ), - RPT_2 ( -66, 0, 14 ), RPT_2 ( 67, 0, 14 ), - RPT_2 ( -67, 0, 14 ), RPT_2 ( 68, 0, 14 ), - RPT_2 ( -68, 0, 14 ), RPT_2 ( 69, 0, 14 ), - RPT_2 ( -69, 0, 14 ), RPT_2 ( 70, 0, 14 ), - RPT_2 ( -70, 0, 14 ), RPT_2 ( 71, 0, 14 ), - RPT_2 ( -71, 0, 14 ), RPT_2 ( 72, 0, 14 ), - RPT_2 ( -72, 0, 14 ), RPT_2 ( 73, 0, 14 ), - RPT_2 ( -73, 0, 14 ), RPT_2 ( 74, 0, 14 ), - RPT_2 ( -74, 0, 14 ), RPT_2 ( 75, 0, 14 ), - RPT_2 ( -75, 0, 14 ), RPT_2 ( 76, 0, 14 ), - RPT_2 ( -76, 0, 14 ), RPT_2 ( 77, 0, 14 ), - RPT_2 ( -77, 0, 14 ), RPT_2 ( 78, 0, 14 ), - RPT_2 ( -78, 0, 14 ), RPT_2 ( 79, 0, 14 ), - RPT_2 ( -79, 0, 14 ), RPT_2 ( 80, 0, 14 ), - RPT_2 ( -80, 0, 14 ), RPT_2 ( 81, 0, 14 ), - RPT_2 ( -81, 0, 14 ), RPT_2 ( 82, 0, 14 ), - RPT_2 ( -82, 0, 14 ), RPT_2 ( 83, 0, 14 ), - RPT_2 ( -83, 0, 14 ), RPT_2 ( 84, 0, 14 ), - RPT_2 ( -84, 0, 14 ), RPT_2 ( 85, 0, 14 ), - RPT_2 ( -85, 0, 14 ), RPT_2 ( 86, 0, 14 ), - RPT_2 ( -86, 0, 14 ), RPT_2 ( 87, 0, 14 ), - RPT_2 ( -87, 0, 14 ), RPT_2 ( 88, 0, 14 ), - RPT_2 ( -88, 0, 14 ), RPT_2 ( 89, 0, 14 ), - RPT_2 ( -89, 0, 14 ), RPT_2 ( 90, 0, 14 ), - RPT_2 ( -90, 0, 14 ), RPT_2 ( 91, 0, 14 ), - RPT_2 ( -91, 0, 14 ), RPT_2 ( 92, 0, 14 ), - RPT_2 ( -92, 0, 14 ), RPT_2 ( 93, 0, 14 ), - RPT_2 ( -93, 0, 14 ), RPT_2 ( 94, 0, 14 ), - RPT_2 ( -94, 0, 14 ), RPT_2 ( 95, 0, 14 ), - RPT_2 ( -95, 0, 14 ), RPT_2 ( 96, 0, 14 ), - RPT_2 ( -96, 0, 14 ), RPT_2 ( 97, 0, 14 ), - RPT_2 ( -97, 0, 14 ), RPT_2 ( 98, 0, 14 ), - RPT_2 ( -98, 0, 14 ), RPT_2 ( 99, 0, 14 ), - RPT_2 ( -99, 0, 14 ), RPT_2 ( 100, 0, 14 ), - RPT_2 (-100, 0, 14 ), RPT_2 ( 101, 0, 14 ), - RPT_2 (-101, 0, 14 ), RPT_2 ( 102, 0, 14 ), - RPT_2 (-102, 0, 14 ), RPT_2 ( 103, 0, 14 ), - RPT_2 (-103, 0, 14 ), RPT_2 ( 104, 0, 14 ), - RPT_2 (-104, 0, 14 ), RPT_2 ( 105, 0, 14 ), - RPT_2 (-105, 0, 14 ), RPT_2 ( 106, 0, 14 ), - RPT_2 (-106, 0, 14 ), RPT_2 ( 107, 0, 14 ), - RPT_2 (-107, 0, 14 ), RPT_2 ( 108, 0, 14 ), - RPT_2 (-108, 0, 14 ), RPT_2 ( 109, 0, 14 ), - RPT_2 (-109, 0, 14 ), RPT_2 ( 110, 0, 14 ), - RPT_2 (-110, 0, 14 ), RPT_2 ( 111, 0, 14 ), - RPT_2 (-111, 0, 14 ), RPT_2 ( 112, 0, 14 ), - RPT_2 (-112, 0, 14 ), RPT_2 ( 113, 0, 14 ), - RPT_2 (-113, 0, 14 ), RPT_2 ( 114, 0, 14 ), - RPT_2 (-114, 0, 14 ), RPT_2 ( 115, 0, 14 ), - RPT_2 (-115, 0, 14 ), RPT_2 ( 116, 0, 14 ), - RPT_2 (-116, 0, 14 ), RPT_2 ( 117, 0, 14 ), - RPT_2 (-117, 0, 14 ), RPT_2 ( 118, 0, 14 ), - RPT_2 (-118, 0, 14 ), RPT_2 ( 119, 0, 14 ), - RPT_2 (-119, 0, 14 ), RPT_2 ( 120, 0, 14 ), - RPT_2 (-120, 0, 14 ), RPT_2 ( 121, 0, 14 ), - RPT_2 (-121, 0, 14 ), RPT_2 ( 122, 0, 14 ), - RPT_2 (-122, 0, 14 ), RPT_2 ( 123, 0, 14 ), - RPT_2 (-123, 0, 14 ), RPT_2 ( 124, 0, 14 ), - RPT_2 (-124, 0, 14 ), RPT_2 ( 125, 0, 14 ), - RPT_2 (-125, 0, 14 ), RPT_2 ( 126, 0, 14 ), - RPT_2 (-126, 0, 14 ), RPT_2 ( 127, 0, 14 ), - RPT_2 (-127, 0, 14 ), RPT_2 ( 128, 0, 14 ), - RPT_2 (-128, 0, 14 ), RPT_2 ( 129, 0, 14 ), - RPT_2 (-129, 0, 14 ), RPT_2 ( 130, 0, 14 ), - RPT_2 (-130, 0, 14 ), RPT_2 ( 131, 0, 14 ), - RPT_2 (-131, 0, 14 ), RPT_2 ( 132, 0, 14 ), - RPT_2 (-132, 0, 14 ), RPT_2 ( 133, 0, 14 ), - RPT_2 (-133, 0, 14 ), RPT_2 ( 134, 0, 14 ), - RPT_2 (-134, 0, 14 ), RPT_2 ( 135, 0, 14 ), - RPT_2 (-135, 0, 14 ), RPT_2 ( 136, 0, 14 ), - RPT_2 (-136, 0, 14 ), RPT_2 ( 137, 0, 14 ), - RPT_2 (-137, 0, 14 ), RPT_2 ( 138, 0, 14 ), - RPT_2 (-138, 0, 14 ), RPT_2 ( 139, 0, 14 ), - RPT_2 (-139, 0, 14 ), RPT_2 ( 140, 0, 14 ), - RPT_2 (-140, 0, 14 ), RPT_2 ( 141, 0, 14 ), - RPT_2 (-141, 0, 14 ), RPT_2 ( 142, 0, 14 ), - RPT_2 (-142, 0, 14 ), RPT_2 ( 143, 0, 14 ), - RPT_2 (-143, 0, 14 ), RPT_2 ( 144, 0, 14 ), - RPT_2 (-144, 0, 14 ), RPT_2 ( 145, 0, 14 ), - RPT_2 (-145, 0, 14 ), RPT_2 ( 146, 0, 14 ), - RPT_2 (-146, 0, 14 ), RPT_2 ( 147, 0, 14 ), - RPT_2 (-147, 0, 14 ), RPT_2 ( 148, 0, 14 ), - RPT_2 (-148, 0, 14 ), RPT_2 ( 149, 0, 14 ), - RPT_2 (-149, 0, 14 ), RPT_2 ( 150, 0, 14 ), - RPT_2 (-150, 0, 14 ), RPT_2 ( 151, 0, 14 ), - RPT_2 (-151, 0, 14 ), RPT_2 ( 152, 0, 14 ), - RPT_2 (-152, 0, 14 ), RPT_2 ( 153, 0, 14 ), - RPT_2 (-153, 0, 14 ), RPT_2 ( 154, 0, 14 ), - RPT_2 (-154, 0, 14 ), RPT_2 ( 155, 0, 14 ), - RPT_2 (-155, 0, 14 ), RPT_2 ( 156, 0, 14 ), - RPT_2 (-156, 0, 14 ), RPT_2 ( 157, 0, 14 ), - RPT_2 (-157, 0, 14 ), RPT_2 ( 158, 0, 14 ), - RPT_2 (-158, 0, 14 ), RPT_2 ( 159, 0, 14 ), - RPT_2 (-159, 0, 14 ), RPT_2 ( 160, 0, 14 ), - RPT_2 (-160, 0, 14 ), RPT_2 ( 161, 0, 14 ), - RPT_2 (-161, 0, 14 ), RPT_2 ( 162, 0, 14 ), - RPT_2 (-162, 0, 14 ), RPT_2 ( 163, 0, 14 ), - RPT_2 (-163, 0, 14 ), RPT_2 ( 164, 0, 14 ), - RPT_2 (-164, 0, 14 ), RPT_2 ( 165, 0, 14 ), - RPT_2 (-165, 0, 14 ), RPT_2 ( 166, 0, 14 ), - RPT_2 (-166, 0, 14 ), RPT_2 ( 167, 0, 14 ), - RPT_2 (-167, 0, 14 ), RPT_2 ( 168, 0, 14 ), - RPT_2 (-168, 0, 14 ), RPT_2 ( 169, 0, 14 ), - RPT_2 (-169, 0, 14 ), RPT_2 ( 170, 0, 14 ), - RPT_2 (-170, 0, 14 ), RPT_2 ( 171, 0, 14 ), - RPT_2 (-171, 0, 14 ), RPT_2 ( 172, 0, 14 ), - RPT_2 (-172, 0, 14 ), RPT_2 ( 173, 0, 14 ), - RPT_2 (-173, 0, 14 ), RPT_2 ( 174, 0, 14 ), - RPT_2 (-174, 0, 14 ), RPT_2 ( 175, 0, 14 ), - RPT_2 (-175, 0, 14 ), RPT_2 ( 176, 0, 14 ), - RPT_2 (-176, 0, 14 ), RPT_2 ( 177, 0, 14 ), - RPT_2 (-177, 0, 14 ), RPT_2 ( 178, 0, 14 ), - RPT_2 (-178, 0, 14 ), RPT_2 ( 179, 0, 14 ), - RPT_2 (-179, 0, 14 ), RPT_2 ( 180, 0, 14 ), - RPT_2 (-180, 0, 14 ), RPT_2 ( 181, 0, 14 ), - RPT_2 (-181, 0, 14 ), RPT_2 ( 182, 0, 14 ), - RPT_2 (-182, 0, 14 ), RPT_2 ( 183, 0, 14 ), - RPT_2 (-183, 0, 14 ), RPT_2 ( 184, 0, 14 ), - RPT_2 (-184, 0, 14 ), RPT_2 ( 185, 0, 14 ), - RPT_2 (-185, 0, 14 ), RPT_2 ( 186, 0, 14 ), - RPT_2 (-186, 0, 14 ), RPT_2 ( 187, 0, 14 ), - RPT_2 (-187, 0, 14 ), RPT_2 ( 188, 0, 14 ), - RPT_2 (-188, 0, 14 ), RPT_2 ( 189, 0, 14 ), - RPT_2 (-189, 0, 14 ), RPT_2 ( 190, 0, 14 ), - RPT_2 (-190, 0, 14 ), RPT_2 ( 191, 0, 14 ), - RPT_2 (-191, 0, 14 ), RPT_2 ( 192, 0, 14 ), - RPT_2 (-192, 0, 14 ), RPT_2 ( 193, 0, 14 ), - RPT_2 (-193, 0, 14 ), RPT_2 ( 194, 0, 14 ), - RPT_2 (-194, 0, 14 ), RPT_2 ( 195, 0, 14 ), - RPT_2 (-195, 0, 14 ), RPT_2 ( 196, 0, 14 ), - RPT_2 (-196, 0, 14 ), RPT_2 ( 197, 0, 14 ), - RPT_2 (-197, 0, 14 ), RPT_2 ( 198, 0, 14 ), - RPT_2 (-198, 0, 14 ), RPT_2 ( 199, 0, 14 ), - RPT_2 (-199, 0, 14 ), RPT_2 ( 200, 0, 14 ), - RPT_2 (-200, 0, 14 ), RPT_2 ( 201, 0, 14 ), - RPT_2 (-201, 0, 14 ), RPT_2 ( 202, 0, 14 ), - RPT_2 (-202, 0, 14 ), RPT_2 ( 203, 0, 14 ), - RPT_2 (-203, 0, 14 ), RPT_2 ( 204, 0, 14 ), - RPT_2 (-204, 0, 14 ), RPT_2 ( 205, 0, 14 ), - RPT_2 (-205, 0, 14 ), RPT_2 ( 206, 0, 14 ), - RPT_2 (-206, 0, 14 ), RPT_2 ( 207, 0, 14 ), - RPT_2 (-207, 0, 14 ), RPT_2 ( 208, 0, 14 ), - RPT_2 (-208, 0, 14 ), RPT_2 ( 209, 0, 14 ), - RPT_2 (-209, 0, 14 ), RPT_2 ( 210, 0, 14 ), - RPT_2 (-210, 0, 14 ), RPT_2 ( 211, 0, 14 ), - RPT_2 (-211, 0, 14 ), RPT_2 ( 212, 0, 14 ), - RPT_2 (-212, 0, 14 ), RPT_2 ( 213, 0, 14 ), - RPT_2 (-213, 0, 14 ), RPT_2 ( 214, 0, 14 ), - RPT_2 (-214, 0, 14 ), RPT_2 ( 215, 0, 14 ), - RPT_2 (-215, 0, 14 ), RPT_2 ( 216, 0, 14 ), - RPT_2 (-216, 0, 14 ), RPT_2 ( 217, 0, 14 ), - RPT_2 (-217, 0, 14 ), RPT_2 ( 218, 0, 14 ), - RPT_2 (-218, 0, 14 ), RPT_2 ( 219, 0, 14 ), - RPT_2 (-219, 0, 14 ), RPT_2 ( 220, 0, 14 ), - RPT_2 (-220, 0, 14 ), RPT_2 ( 221, 0, 14 ), - RPT_2 (-221, 0, 14 ), RPT_2 ( 222, 0, 14 ), - RPT_2 (-222, 0, 14 ), RPT_2 ( 223, 0, 14 ), - RPT_2 (-223, 0, 14 ), RPT_2 ( 224, 0, 14 ), - RPT_2 (-224, 0, 14 ), RPT_2 ( 225, 0, 14 ), - RPT_2 (-225, 0, 14 ), RPT_2 ( 226, 0, 14 ), - RPT_2 (-226, 0, 14 ), RPT_2 ( 227, 0, 14 ), - RPT_2 (-227, 0, 14 ), RPT_2 ( 228, 0, 14 ), - RPT_2 (-228, 0, 14 ), RPT_2 ( 229, 0, 14 ), - RPT_2 (-229, 0, 14 ), RPT_2 ( 230, 0, 14 ), - RPT_2 (-230, 0, 14 ), RPT_2 ( 231, 0, 14 ), - RPT_2 (-231, 0, 14 ), RPT_2 ( 232, 0, 14 ), - RPT_2 (-232, 0, 14 ), RPT_2 ( 233, 0, 14 ), - RPT_2 (-233, 0, 14 ), RPT_2 ( 234, 0, 14 ), - RPT_2 (-234, 0, 14 ), RPT_2 ( 235, 0, 14 ), - RPT_2 (-235, 0, 14 ), RPT_2 ( 236, 0, 14 ), - RPT_2 (-236, 0, 14 ), RPT_2 ( 237, 0, 14 ), - RPT_2 (-237, 0, 14 ), RPT_2 ( 238, 0, 14 ), - RPT_2 (-238, 0, 14 ), RPT_2 ( 239, 0, 14 ), - RPT_2 (-239, 0, 14 ), RPT_2 ( 240, 0, 14 ), - RPT_2 (-240, 0, 14 ), RPT_2 ( 241, 0, 14 ), - RPT_2 (-241, 0, 14 ), RPT_2 ( 242, 0, 14 ), - RPT_2 (-242, 0, 14 ), RPT_2 ( 243, 0, 14 ), - RPT_2 (-243, 0, 14 ), RPT_2 ( 244, 0, 14 ), - RPT_2 (-244, 0, 14 ), RPT_2 ( 245, 0, 14 ), - RPT_2 (-245, 0, 14 ), RPT_2 ( 246, 0, 14 ), - RPT_2 (-246, 0, 14 ), RPT_2 ( 247, 0, 14 ), - RPT_2 (-247, 0, 14 ), RPT_2 ( 248, 0, 14 ), - RPT_2 (-248, 0, 14 ), RPT_2 ( 249, 0, 14 ), - RPT_2 (-249, 0, 14 ), RPT_2 ( 250, 0, 14 ), - RPT_2 (-250, 0, 14 ), RPT_2 ( 251, 0, 14 ), - RPT_2 (-251, 0, 14 ), RPT_2 ( 252, 0, 14 ), - RPT_2 (-252, 0, 14 ), RPT_2 ( 253, 0, 14 ), - RPT_2 (-253, 0, 14 ), RPT_2 ( 254, 0, 14 ), - RPT_2 (-254, 0, 14 ), RPT_2 ( 255, 0, 14 ), - RPT_2 (-255, 0, 14 ), { 0, 0, 15 }, { 0, 1, 15 }, - { 0, 2, 15 }, { 0, 3, 15 }, { 0, 4, 15 }, { 0, 5, 15 }, - { 0, 6, 15 }, { 0, 7, 15 }, { 0, 8, 15 }, { 0, 9, 15 }, - { 0, 10, 15 }, { 0, 11, 15 }, { 0, 12, 15 }, { 0, 13, 15 }, - { 0, 14, 15 }, { 0, 15, 15 }, { 0, 16, 15 }, { 0, 17, 15 }, - { 0, 18, 15 }, { 0, 19, 15 }, { 0, 20, 15 }, { 0, 21, 15 }, - { 0, 22, 15 }, { 0, 23, 15 }, { 0, 24, 15 }, { 0, 25, 15 }, - { 0, 26, 15 }, { 0, 27, 15 }, { 0, 28, 15 }, { 0, 29, 15 }, - { 0, 30, 15 }, { 0, 31, 15 }, { 0, 32, 15 }, { 0, 33, 15 }, - { 0, 34, 15 }, { 0, 35, 15 }, { 0, 36, 15 }, { 0, 37, 15 }, - { 0, 38, 15 }, { 0, 39, 15 }, { 0, 40, 15 }, { 0, 41, 15 }, - { 0, 42, 15 }, { 0, 43, 15 }, { 0, 44, 15 }, { 0, 45, 15 }, - { 0, 46, 15 }, { 0, 47, 15 }, { 0, 48, 15 }, { 0, 49, 15 }, - { 0, 50, 15 }, { 0, 51, 15 }, { 0, 52, 15 }, { 0, 53, 15 }, - { 0, 54, 15 }, { 0, 55, 15 }, { 0, 56, 15 }, { 0, 57, 15 }, - { 0, 58, 15 }, { 0, 59, 15 }, { 0, 60, 15 }, { 0, 61, 15 }, - { 0, 62, 15 }, { 0, 63, 15 }, RPT_16 ( 51, 0, 11 ), - RPT_16 ( -51, 0, 11 ), RPT_16 ( 52, 0, 11 ), - RPT_16 ( -52, 0, 11 ), RPT_16 ( 53, 0, 11 ), - RPT_16 ( -53, 0, 11 ), RPT_16 ( 54, 0, 11 ), - RPT_16 ( -54, 0, 11 ), RPT_16 ( 55, 0, 11 ), - RPT_16 ( -55, 0, 11 ), RPT_16 ( 56, 0, 11 ), - RPT_16 ( -56, 0, 11 ), RPT_16 ( 57, 0, 11 ), - RPT_16 ( -57, 0, 11 ), RPT_16 ( 58, 0, 11 ), - RPT_16 ( -58, 0, 11 ), RPT_16 ( 59, 0, 11 ), - RPT_16 ( -59, 0, 11 ), RPT_16 ( 60, 0, 11 ), - RPT_16 ( -60, 0, 11 ), RPT_16 ( 61, 0, 11 ), - RPT_16 ( -61, 0, 11 ), RPT_16 ( 62, 0, 11 ), - RPT_16 ( -62, 0, 11 ), RPT_16 ( 63, 0, 11 ), - RPT_16 ( -63, 0, 11 ), RPT_16 ( 11, 1, 11 ), - RPT_16 ( -11, 1, 11 ), RPT_16 ( 12, 1, 11 ), - RPT_16 ( -12, 1, 11 ), RPT_16 ( 13, 1, 11 ), - RPT_16 ( -13, 1, 11 ), RPT_16 ( 14, 1, 11 ), - RPT_16 ( -14, 1, 11 ), RPT_16 ( 4, 2, 11 ), - RPT_16 ( -4, 2, 11 ), RPT_16 ( 5, 2, 11 ), - RPT_16 ( -5, 2, 11 ), RPT_16 ( 6, 2, 11 ), - RPT_16 ( -6, 2, 11 ), RPT_16 ( 3, 3, 11 ), - RPT_16 ( -3, 3, 11 ), RPT_16 ( 2, 4, 11 ), - RPT_16 ( -2, 4, 11 ), RPT_16 ( 1, 9, 11 ), - RPT_16 ( -1, 9, 11 ), RPT_16 ( 1, 10, 11 ), - RPT_16 ( -1, 10, 11 ), RPT_8 ( 15, 1, 12 ), - RPT_8 ( -15, 1, 12 ), RPT_8 ( 16, 1, 12 ), - RPT_8 ( -16, 1, 12 ), RPT_8 ( 17, 1, 12 ), - RPT_8 ( -17, 1, 12 ), RPT_8 ( 18, 1, 12 ), - RPT_8 ( -18, 1, 12 ), RPT_8 ( 7, 2, 12 ), - RPT_8 ( -7, 2, 12 ), RPT_8 ( 8, 2, 12 ), - RPT_8 ( -8, 2, 12 ), RPT_8 ( 9, 2, 12 ), - RPT_8 ( -9, 2, 12 ), RPT_8 ( 10, 2, 12 ), - RPT_8 ( -10, 2, 12 ), RPT_8 ( 4, 3, 12 ), - RPT_8 ( -4, 3, 12 ), RPT_8 ( 5, 3, 12 ), - RPT_8 ( -5, 3, 12 ), RPT_8 ( 6, 3, 12 ), - RPT_8 ( -6, 3, 12 ), RPT_8 ( 2, 5, 12 ), - RPT_8 ( -2, 5, 12 ), RPT_16 ( 0, 7, 11 ), - RPT_16 ( 0, 8, 11 ), RPT_16 ( 0, 9, 11 ), - RPT_16 ( 0, 10, 11 ), RPT_8 ( 1, 11, 12 ), - RPT_8 ( -1, 11, 12 ), RPT_8 ( 1, 12, 12 ), - RPT_8 ( -1, 12, 12 ), RPT_8 ( 1, 13, 12 ), - RPT_8 ( -1, 13, 12 ), RPT_8 ( 1, 14, 12 ), - RPT_8 ( -1, 14, 12 ), RPT_4 ( 19, 1, 13 ), - RPT_4 ( -19, 1, 13 ), RPT_4 ( 20, 1, 13 ), - RPT_4 ( -20, 1, 13 ), RPT_4 ( 3, 4, 13 ), - RPT_4 ( -3, 4, 13 ), RPT_4 ( 2, 6, 13 ), - RPT_4 ( -2, 6, 13 ), +HQXAC ff_hqx_ac[NUM_HQX_AC] = { + { 10 }, { 11 }, { 11 }, { 11 }, { 12 }, { 11 }, }; -static const HQXLUT ac8_lut[] = { - RPT_128 ( 1, 0, 4 ), RPT_128 ( -1, 0, 4 ), - RPT_128 ( 2, 0, 4 ), RPT_128 ( -2, 0, 4 ), - RPT_64 ( 3, 0, 5 ), RPT_64 ( -3, 0, 5 ), - RPT_64 ( 4, 0, 5 ), RPT_64 ( -4, 0, 5 ), - RPT_128 ( 0, 64, 4 ), RPT_32 ( 5, 0, 6 ), - RPT_32 ( -5, 0, 6 ), RPT_32 ( 6, 0, 6 ), - RPT_32 ( -6, 0, 6 ), RPT_32 ( 7, 0, 6 ), - RPT_32 ( -7, 0, 6 ), RPT_32 ( 8, 0, 6 ), - RPT_32 ( -8, 0, 6 ), RPT_32 ( 1, 1, 6 ), - RPT_32 ( -1, 1, 6 ), RPT_32 ( 2, 1, 6 ), - RPT_32 ( -2, 1, 6 ), RPT_16 ( 9, 0, 7 ), - RPT_16 ( -9, 0, 7 ), RPT_16 ( 10, 0, 7 ), - RPT_16 ( -10, 0, 7 ), RPT_16 ( 11, 0, 7 ), - RPT_16 ( -11, 0, 7 ), RPT_16 ( 12, 0, 7 ), - RPT_16 ( -12, 0, 7 ), RPT_16 ( 3, 1, 7 ), - RPT_16 ( -3, 1, 7 ), RPT_16 ( 4, 1, 7 ), - RPT_16 ( -4, 1, 7 ), RPT_16 ( 1, 2, 7 ), - RPT_16 ( -1, 2, 7 ), { 2048, 0, -1 }, { 2112, 0, -1 }, - { 2176, 0, -1 }, { 2240, 0, -1 }, { 2304, 0, -1 }, { 2368, 0, -1 }, - { 2432, 0, -1 }, { 2496, 0, -1 }, { 2560, 0, -1 }, { 2624, 0, -1 }, - { 2688, 0, -1 }, { 2752, 0, -1 }, { 2816, 0, -1 }, { 2880, 0, -1 }, - { 2944, 0, -1 }, { 3008, 0, -1 }, { 3072, 0, -1 }, { 3136, 0, -1 }, - { 3200, 0, -1 }, { 3264, 0, -1 }, { 3328, 0, -1 }, { 3392, 0, -1 }, - { 3456, 0, -1 }, { 3520, 0, -1 }, { 3584, 0, -1 }, { 3648, 0, -1 }, - { 3712, 0, -1 }, { 3776, 0, -1 }, { 3840, 0, -1 }, { 3904, 0, -1 }, - { 3968, 0, -1 }, { 4032, 0, -1 }, RPT_8 ( 13, 0, 8 ), - RPT_8 ( -13, 0, 8 ), RPT_8 ( 14, 0, 8 ), - RPT_8 ( -14, 0, 8 ), RPT_8 ( 15, 0, 8 ), - RPT_8 ( -15, 0, 8 ), RPT_8 ( 16, 0, 8 ), - RPT_8 ( -16, 0, 8 ), RPT_8 ( 17, 0, 8 ), - RPT_8 ( -17, 0, 8 ), RPT_8 ( 18, 0, 8 ), - RPT_8 ( -18, 0, 8 ), RPT_8 ( 5, 1, 8 ), - RPT_8 ( -5, 1, 8 ), RPT_8 ( 6, 1, 8 ), - RPT_8 ( -6, 1, 8 ), RPT_8 ( 2, 2, 8 ), - RPT_8 ( -2, 2, 8 ), RPT_8 ( 1, 3, 8 ), - RPT_8 ( -1, 3, 8 ), RPT_8 ( 0, 0, 8 ), - RPT_4 ( 19, 0, 9 ), RPT_4 ( -19, 0, 9 ), - RPT_4 ( 20, 0, 9 ), RPT_4 ( -20, 0, 9 ), - RPT_4 ( 21, 0, 9 ), RPT_4 ( -21, 0, 9 ), - RPT_4 ( 22, 0, 9 ), RPT_4 ( -22, 0, 9 ), - RPT_4 ( 23, 0, 9 ), RPT_4 ( -23, 0, 9 ), - RPT_4 ( 24, 0, 9 ), RPT_4 ( -24, 0, 9 ), - RPT_4 ( 25, 0, 9 ), RPT_4 ( -25, 0, 9 ), - RPT_4 ( 7, 1, 9 ), RPT_4 ( -7, 1, 9 ), - RPT_4 ( 8, 1, 9 ), RPT_4 ( -8, 1, 9 ), - RPT_4 ( 3, 2, 9 ), RPT_4 ( -3, 2, 9 ), - RPT_4 ( 2, 3, 9 ), RPT_4 ( -2, 3, 9 ), - RPT_4 ( 1, 4, 9 ), RPT_4 ( -1, 4, 9 ), - RPT_4 ( 1, 5, 9 ), RPT_4 ( -1, 5, 9 ), - RPT_2 ( 26, 0, 10 ), RPT_2 ( -26, 0, 10 ), - RPT_2 ( 27, 0, 10 ), RPT_2 ( -27, 0, 10 ), - RPT_2 ( 28, 0, 10 ), RPT_2 ( -28, 0, 10 ), - RPT_2 ( 29, 0, 10 ), RPT_2 ( -29, 0, 10 ), - RPT_2 ( 30, 0, 10 ), RPT_2 ( -30, 0, 10 ), - RPT_2 ( 31, 0, 10 ), RPT_2 ( -31, 0, 10 ), - RPT_2 ( 32, 0, 10 ), RPT_2 ( -32, 0, 10 ), - RPT_2 ( 33, 0, 10 ), RPT_2 ( -33, 0, 10 ), - RPT_2 ( 34, 0, 10 ), RPT_2 ( -34, 0, 10 ), - RPT_2 ( 35, 0, 10 ), RPT_2 ( -35, 0, 10 ), - RPT_2 ( 36, 0, 10 ), RPT_2 ( -36, 0, 10 ), - RPT_4 ( 0, 1, 9 ), RPT_2 ( 9, 1, 10 ), - RPT_2 ( -9, 1, 10 ), RPT_2 ( 10, 1, 10 ), - RPT_2 ( -10, 1, 10 ), RPT_2 ( 11, 1, 10 ), - RPT_2 ( -11, 1, 10 ), RPT_2 ( 12, 1, 10 ), - RPT_2 ( -12, 1, 10 ), RPT_4 ( 0, 2, 9 ), - RPT_2 ( 4, 2, 10 ), RPT_2 ( -4, 2, 10 ), - RPT_2 ( 5, 2, 10 ), RPT_2 ( -5, 2, 10 ), - RPT_2 ( 6, 2, 10 ), RPT_2 ( -6, 2, 10 ), - RPT_4 ( 0, 3, 9 ), RPT_2 ( 3, 3, 10 ), - RPT_2 ( -3, 3, 10 ), RPT_2 ( 4, 3, 10 ), - RPT_2 ( -4, 3, 10 ), RPT_4 ( 0, 4, 9 ), - RPT_2 ( 2, 4, 10 ), RPT_2 ( -2, 4, 10 ), - RPT_4 ( 0, 5, 9 ), RPT_2 ( 1, 6, 10 ), - RPT_2 ( -1, 6, 10 ), RPT_2 ( 1, 7, 10 ), - RPT_2 ( -1, 7, 10 ), RPT_2 ( 1, 8, 10 ), - RPT_2 ( -1, 8, 10 ), { 37, 0, 11 }, { -37, 0, 11 }, - { 38, 0, 11 }, { -38, 0, 11 }, { 39, 0, 11 }, { -39, 0, 11 }, - { 40, 0, 11 }, { -40, 0, 11 }, { 41, 0, 11 }, { -41, 0, 11 }, - { 42, 0, 11 }, { -42, 0, 11 }, { 43, 0, 11 }, { -43, 0, 11 }, - { 44, 0, 11 }, { -44, 0, 11 }, { 45, 0, 11 }, { -45, 0, 11 }, - { 46, 0, 11 }, { -46, 0, 11 }, { 47, 0, 11 }, { -47, 0, 11 }, - { 48, 0, 11 }, { -48, 0, 11 }, { 13, 1, 11 }, { -13, 1, 11 }, - { 14, 1, 11 }, { -14, 1, 11 }, { 15, 1, 11 }, { -15, 1, 11 }, - { 16, 1, 11 }, { -16, 1, 11 }, { 7, 2, 11 }, { -7, 2, 11 }, - { 8, 2, 11 }, { -8, 2, 11 }, { 5, 3, 11 }, { -5, 3, 11 }, - { 6, 3, 11 }, { -6, 3, 11 }, { 3, 4, 11 }, { -3, 4, 11 }, - { 4, 4, 11 }, { -4, 4, 11 }, { 2, 5, 11 }, { -2, 5, 11 }, - RPT_2 ( 0, 6, 10 ), { 2, 6, 11 }, { -2, 6, 11 }, - RPT_2 ( 0, 7, 10 ), RPT_2 ( 0, 8, 10 ), - RPT_2 ( 0, 9, 10 ), { 1, 9, 11 }, { -1, 9, 11 }, - { 1, 10, 11 }, { -1, 10, 11 }, { 1, 11, 11 }, { -1, 11, 11 }, - { 1, 12, 11 }, { -1, 12, 11 }, { 4096, 0, -1 }, { 4160, 0, -1 }, - { 4224, 0, -1 }, { 4288, 0, -1 }, { 4352, 0, -1 }, { 4416, 0, -1 }, - { 4480, 0, -1 }, { 4544, 0, -1 }, { 4608, 0, -1 }, { 4672, 0, -1 }, - { 4736, 0, -1 }, { 4800, 0, -1 }, { 4864, 0, -1 }, { 4928, 0, -1 }, - { 4992, 0, -1 }, { 5056, 0, -1 }, { 5120, 0, -1 }, { 5184, 0, -1 }, - { 5248, 0, -1 }, { 5312, 0, -1 }, { 5376, 0, -1 }, { 5440, 0, -1 }, - { 5504, 0, -1 }, { 5568, 0, -1 }, { 5632, 0, -1 }, { 5696, 0, -1 }, - { 5760, 0, -1 }, { 5824, 0, -1 }, { 5888, 0, -1 }, { 5952, 0, -1 }, - { 6016, 0, -1 }, { 6080, 0, -1 }, { 6144, 0, -1 }, { 6208, 0, -1 }, - { 6272, 0, -1 }, { 6336, 0, -1 }, { 6400, 0, -1 }, { 6464, 0, -1 }, - { 6528, 0, -1 }, { 6592, 0, -1 }, { 0, 10, 11 }, { 6656, 0, -1 }, - { 0, 11, 11 }, { 0, 12, 11 }, { 0, 13, 11 }, { 6720, 0, -1 }, - { 6784, 0, -1 }, { 6848, 0, -1 }, { 6912, 0, -1 }, { 6976, 0, -1 }, - { 7040, 0, -1 }, { 7104, 0, -1 }, { 7168, 0, -1 }, { 7232, 0, -1 }, - { 7296, 0, -1 }, { 7360, 0, -1 }, { 7424, 0, -1 }, { 7488, 0, -1 }, - { 7552, 0, -1 }, { 7616, 0, -1 }, RPT_8 ( 0, 0, 14 ), - RPT_4 ( 1, 0, 15 ), RPT_4 ( -1, 0, 15 ), - RPT_4 ( 2, 0, 15 ), RPT_4 ( -2, 0, 15 ), - RPT_4 ( 3, 0, 15 ), RPT_4 ( -3, 0, 15 ), - RPT_4 ( 4, 0, 15 ), RPT_4 ( -4, 0, 15 ), - RPT_4 ( 5, 0, 15 ), RPT_4 ( -5, 0, 15 ), - RPT_4 ( 6, 0, 15 ), RPT_4 ( -6, 0, 15 ), - RPT_4 ( 7, 0, 15 ), RPT_4 ( -7, 0, 15 ), - RPT_4 ( 8, 0, 15 ), RPT_4 ( -8, 0, 15 ), - RPT_4 ( 9, 0, 15 ), RPT_4 ( -9, 0, 15 ), - RPT_4 ( 10, 0, 15 ), RPT_4 ( -10, 0, 15 ), - RPT_4 ( 11, 0, 15 ), RPT_4 ( -11, 0, 15 ), - RPT_4 ( 12, 0, 15 ), RPT_4 ( -12, 0, 15 ), - RPT_4 ( 13, 0, 15 ), RPT_4 ( -13, 0, 15 ), - RPT_4 ( 14, 0, 15 ), RPT_4 ( -14, 0, 15 ), - RPT_4 ( 15, 0, 15 ), RPT_4 ( -15, 0, 15 ), - RPT_4 ( 16, 0, 15 ), RPT_4 ( -16, 0, 15 ), - RPT_4 ( 17, 0, 15 ), RPT_4 ( -17, 0, 15 ), - RPT_4 ( 18, 0, 15 ), RPT_4 ( -18, 0, 15 ), - RPT_4 ( 19, 0, 15 ), RPT_4 ( -19, 0, 15 ), - RPT_4 ( 20, 0, 15 ), RPT_4 ( -20, 0, 15 ), - RPT_4 ( 21, 0, 15 ), RPT_4 ( -21, 0, 15 ), - RPT_4 ( 22, 0, 15 ), RPT_4 ( -22, 0, 15 ), - RPT_4 ( 23, 0, 15 ), RPT_4 ( -23, 0, 15 ), - RPT_4 ( 24, 0, 15 ), RPT_4 ( -24, 0, 15 ), - RPT_4 ( 25, 0, 15 ), RPT_4 ( -25, 0, 15 ), - RPT_4 ( 26, 0, 15 ), RPT_4 ( -26, 0, 15 ), - RPT_4 ( 27, 0, 15 ), RPT_4 ( -27, 0, 15 ), - RPT_4 ( 28, 0, 15 ), RPT_4 ( -28, 0, 15 ), - RPT_4 ( 29, 0, 15 ), RPT_4 ( -29, 0, 15 ), - RPT_4 ( 30, 0, 15 ), RPT_4 ( -30, 0, 15 ), - RPT_4 ( 31, 0, 15 ), RPT_4 ( -31, 0, 15 ), - RPT_4 ( 32, 0, 15 ), RPT_4 ( -32, 0, 15 ), - RPT_4 ( 33, 0, 15 ), RPT_4 ( -33, 0, 15 ), - RPT_4 ( 34, 0, 15 ), RPT_4 ( -34, 0, 15 ), - RPT_4 ( 35, 0, 15 ), RPT_4 ( -35, 0, 15 ), - RPT_4 ( 36, 0, 15 ), RPT_4 ( -36, 0, 15 ), - RPT_4 ( 37, 0, 15 ), RPT_4 ( -37, 0, 15 ), - RPT_4 ( 38, 0, 15 ), RPT_4 ( -38, 0, 15 ), - RPT_4 ( 39, 0, 15 ), RPT_4 ( -39, 0, 15 ), - RPT_4 ( 40, 0, 15 ), RPT_4 ( -40, 0, 15 ), - RPT_4 ( 41, 0, 15 ), RPT_4 ( -41, 0, 15 ), - RPT_4 ( 42, 0, 15 ), RPT_4 ( -42, 0, 15 ), - RPT_4 ( 43, 0, 15 ), RPT_4 ( -43, 0, 15 ), - RPT_4 ( 44, 0, 15 ), RPT_4 ( -44, 0, 15 ), - RPT_4 ( 45, 0, 15 ), RPT_4 ( -45, 0, 15 ), - RPT_4 ( 46, 0, 15 ), RPT_4 ( -46, 0, 15 ), - RPT_4 ( 47, 0, 15 ), RPT_4 ( -47, 0, 15 ), - RPT_4 ( 48, 0, 15 ), RPT_4 ( -48, 0, 15 ), - RPT_4 ( 49, 0, 15 ), RPT_4 ( -49, 0, 15 ), - RPT_4 ( 50, 0, 15 ), RPT_4 ( -50, 0, 15 ), - RPT_4 ( 51, 0, 15 ), RPT_4 ( -51, 0, 15 ), - RPT_4 ( 52, 0, 15 ), RPT_4 ( -52, 0, 15 ), - RPT_4 ( 53, 0, 15 ), RPT_4 ( -53, 0, 15 ), - RPT_4 ( 54, 0, 15 ), RPT_4 ( -54, 0, 15 ), - RPT_4 ( 55, 0, 15 ), RPT_4 ( -55, 0, 15 ), - RPT_4 ( 56, 0, 15 ), RPT_4 ( -56, 0, 15 ), - RPT_4 ( 57, 0, 15 ), RPT_4 ( -57, 0, 15 ), - RPT_4 ( 58, 0, 15 ), RPT_4 ( -58, 0, 15 ), - RPT_4 ( 59, 0, 15 ), RPT_4 ( -59, 0, 15 ), - RPT_4 ( 60, 0, 15 ), RPT_4 ( -60, 0, 15 ), - RPT_4 ( 61, 0, 15 ), RPT_4 ( -61, 0, 15 ), - RPT_4 ( 62, 0, 15 ), RPT_4 ( -62, 0, 15 ), - RPT_4 ( 63, 0, 15 ), RPT_4 ( -63, 0, 15 ), - RPT_4 ( 64, 0, 15 ), RPT_4 ( -64, 0, 15 ), - RPT_4 ( 65, 0, 15 ), RPT_4 ( -65, 0, 15 ), - RPT_4 ( 66, 0, 15 ), RPT_4 ( -66, 0, 15 ), - RPT_4 ( 67, 0, 15 ), RPT_4 ( -67, 0, 15 ), - RPT_4 ( 68, 0, 15 ), RPT_4 ( -68, 0, 15 ), - RPT_4 ( 69, 0, 15 ), RPT_4 ( -69, 0, 15 ), - RPT_4 ( 70, 0, 15 ), RPT_4 ( -70, 0, 15 ), - RPT_4 ( 71, 0, 15 ), RPT_4 ( -71, 0, 15 ), - RPT_4 ( 72, 0, 15 ), RPT_4 ( -72, 0, 15 ), - RPT_4 ( 73, 0, 15 ), RPT_4 ( -73, 0, 15 ), - RPT_4 ( 74, 0, 15 ), RPT_4 ( -74, 0, 15 ), - RPT_4 ( 75, 0, 15 ), RPT_4 ( -75, 0, 15 ), - RPT_4 ( 76, 0, 15 ), RPT_4 ( -76, 0, 15 ), - RPT_4 ( 77, 0, 15 ), RPT_4 ( -77, 0, 15 ), - RPT_4 ( 78, 0, 15 ), RPT_4 ( -78, 0, 15 ), - RPT_4 ( 79, 0, 15 ), RPT_4 ( -79, 0, 15 ), - RPT_4 ( 80, 0, 15 ), RPT_4 ( -80, 0, 15 ), - RPT_4 ( 81, 0, 15 ), RPT_4 ( -81, 0, 15 ), - RPT_4 ( 82, 0, 15 ), RPT_4 ( -82, 0, 15 ), - RPT_4 ( 83, 0, 15 ), RPT_4 ( -83, 0, 15 ), - RPT_4 ( 84, 0, 15 ), RPT_4 ( -84, 0, 15 ), - RPT_4 ( 85, 0, 15 ), RPT_4 ( -85, 0, 15 ), - RPT_4 ( 86, 0, 15 ), RPT_4 ( -86, 0, 15 ), - RPT_4 ( 87, 0, 15 ), RPT_4 ( -87, 0, 15 ), - RPT_4 ( 88, 0, 15 ), RPT_4 ( -88, 0, 15 ), - RPT_4 ( 89, 0, 15 ), RPT_4 ( -89, 0, 15 ), - RPT_4 ( 90, 0, 15 ), RPT_4 ( -90, 0, 15 ), - RPT_4 ( 91, 0, 15 ), RPT_4 ( -91, 0, 15 ), - RPT_4 ( 92, 0, 15 ), RPT_4 ( -92, 0, 15 ), - RPT_4 ( 93, 0, 15 ), RPT_4 ( -93, 0, 15 ), - RPT_4 ( 94, 0, 15 ), RPT_4 ( -94, 0, 15 ), - RPT_4 ( 95, 0, 15 ), RPT_4 ( -95, 0, 15 ), - RPT_4 ( 96, 0, 15 ), RPT_4 ( -96, 0, 15 ), - RPT_4 ( 97, 0, 15 ), RPT_4 ( -97, 0, 15 ), - RPT_4 ( 98, 0, 15 ), RPT_4 ( -98, 0, 15 ), - RPT_4 ( 99, 0, 15 ), RPT_4 ( -99, 0, 15 ), - RPT_4 ( 100, 0, 15 ), RPT_4 (-100, 0, 15 ), - RPT_4 ( 101, 0, 15 ), RPT_4 (-101, 0, 15 ), - RPT_4 ( 102, 0, 15 ), RPT_4 (-102, 0, 15 ), - RPT_4 ( 103, 0, 15 ), RPT_4 (-103, 0, 15 ), - RPT_4 ( 104, 0, 15 ), RPT_4 (-104, 0, 15 ), - RPT_4 ( 105, 0, 15 ), RPT_4 (-105, 0, 15 ), - RPT_4 ( 106, 0, 15 ), RPT_4 (-106, 0, 15 ), - RPT_4 ( 107, 0, 15 ), RPT_4 (-107, 0, 15 ), - RPT_4 ( 108, 0, 15 ), RPT_4 (-108, 0, 15 ), - RPT_4 ( 109, 0, 15 ), RPT_4 (-109, 0, 15 ), - RPT_4 ( 110, 0, 15 ), RPT_4 (-110, 0, 15 ), - RPT_4 ( 111, 0, 15 ), RPT_4 (-111, 0, 15 ), - RPT_4 ( 112, 0, 15 ), RPT_4 (-112, 0, 15 ), - RPT_4 ( 113, 0, 15 ), RPT_4 (-113, 0, 15 ), - RPT_4 ( 114, 0, 15 ), RPT_4 (-114, 0, 15 ), - RPT_4 ( 115, 0, 15 ), RPT_4 (-115, 0, 15 ), - RPT_4 ( 116, 0, 15 ), RPT_4 (-116, 0, 15 ), - RPT_4 ( 117, 0, 15 ), RPT_4 (-117, 0, 15 ), - RPT_4 ( 118, 0, 15 ), RPT_4 (-118, 0, 15 ), - RPT_4 ( 119, 0, 15 ), RPT_4 (-119, 0, 15 ), - RPT_4 ( 120, 0, 15 ), RPT_4 (-120, 0, 15 ), - RPT_4 ( 121, 0, 15 ), RPT_4 (-121, 0, 15 ), - RPT_4 ( 122, 0, 15 ), RPT_4 (-122, 0, 15 ), - RPT_4 ( 123, 0, 15 ), RPT_4 (-123, 0, 15 ), - RPT_4 ( 124, 0, 15 ), RPT_4 (-124, 0, 15 ), - RPT_4 ( 125, 0, 15 ), RPT_4 (-125, 0, 15 ), - RPT_4 ( 126, 0, 15 ), RPT_4 (-126, 0, 15 ), - RPT_4 ( 127, 0, 15 ), RPT_4 (-127, 0, 15 ), - RPT_4 ( 128, 0, 15 ), RPT_4 (-128, 0, 15 ), - RPT_4 ( 129, 0, 15 ), RPT_4 (-129, 0, 15 ), - RPT_4 ( 130, 0, 15 ), RPT_4 (-130, 0, 15 ), - RPT_4 ( 131, 0, 15 ), RPT_4 (-131, 0, 15 ), - RPT_4 ( 132, 0, 15 ), RPT_4 (-132, 0, 15 ), - RPT_4 ( 133, 0, 15 ), RPT_4 (-133, 0, 15 ), - RPT_4 ( 134, 0, 15 ), RPT_4 (-134, 0, 15 ), - RPT_4 ( 135, 0, 15 ), RPT_4 (-135, 0, 15 ), - RPT_4 ( 136, 0, 15 ), RPT_4 (-136, 0, 15 ), - RPT_4 ( 137, 0, 15 ), RPT_4 (-137, 0, 15 ), - RPT_4 ( 138, 0, 15 ), RPT_4 (-138, 0, 15 ), - RPT_4 ( 139, 0, 15 ), RPT_4 (-139, 0, 15 ), - RPT_4 ( 140, 0, 15 ), RPT_4 (-140, 0, 15 ), - RPT_4 ( 141, 0, 15 ), RPT_4 (-141, 0, 15 ), - RPT_4 ( 142, 0, 15 ), RPT_4 (-142, 0, 15 ), - RPT_4 ( 143, 0, 15 ), RPT_4 (-143, 0, 15 ), - RPT_4 ( 144, 0, 15 ), RPT_4 (-144, 0, 15 ), - RPT_4 ( 145, 0, 15 ), RPT_4 (-145, 0, 15 ), - RPT_4 ( 146, 0, 15 ), RPT_4 (-146, 0, 15 ), - RPT_4 ( 147, 0, 15 ), RPT_4 (-147, 0, 15 ), - RPT_4 ( 148, 0, 15 ), RPT_4 (-148, 0, 15 ), - RPT_4 ( 149, 0, 15 ), RPT_4 (-149, 0, 15 ), - RPT_4 ( 150, 0, 15 ), RPT_4 (-150, 0, 15 ), - RPT_4 ( 151, 0, 15 ), RPT_4 (-151, 0, 15 ), - RPT_4 ( 152, 0, 15 ), RPT_4 (-152, 0, 15 ), - RPT_4 ( 153, 0, 15 ), RPT_4 (-153, 0, 15 ), - RPT_4 ( 154, 0, 15 ), RPT_4 (-154, 0, 15 ), - RPT_4 ( 155, 0, 15 ), RPT_4 (-155, 0, 15 ), - RPT_4 ( 156, 0, 15 ), RPT_4 (-156, 0, 15 ), - RPT_4 ( 157, 0, 15 ), RPT_4 (-157, 0, 15 ), - RPT_4 ( 158, 0, 15 ), RPT_4 (-158, 0, 15 ), - RPT_4 ( 159, 0, 15 ), RPT_4 (-159, 0, 15 ), - RPT_4 ( 160, 0, 15 ), RPT_4 (-160, 0, 15 ), - RPT_4 ( 161, 0, 15 ), RPT_4 (-161, 0, 15 ), - RPT_4 ( 162, 0, 15 ), RPT_4 (-162, 0, 15 ), - RPT_4 ( 163, 0, 15 ), RPT_4 (-163, 0, 15 ), - RPT_4 ( 164, 0, 15 ), RPT_4 (-164, 0, 15 ), - RPT_4 ( 165, 0, 15 ), RPT_4 (-165, 0, 15 ), - RPT_4 ( 166, 0, 15 ), RPT_4 (-166, 0, 15 ), - RPT_4 ( 167, 0, 15 ), RPT_4 (-167, 0, 15 ), - RPT_4 ( 168, 0, 15 ), RPT_4 (-168, 0, 15 ), - RPT_4 ( 169, 0, 15 ), RPT_4 (-169, 0, 15 ), - RPT_4 ( 170, 0, 15 ), RPT_4 (-170, 0, 15 ), - RPT_4 ( 171, 0, 15 ), RPT_4 (-171, 0, 15 ), - RPT_4 ( 172, 0, 15 ), RPT_4 (-172, 0, 15 ), - RPT_4 ( 173, 0, 15 ), RPT_4 (-173, 0, 15 ), - RPT_4 ( 174, 0, 15 ), RPT_4 (-174, 0, 15 ), - RPT_4 ( 175, 0, 15 ), RPT_4 (-175, 0, 15 ), - RPT_4 ( 176, 0, 15 ), RPT_4 (-176, 0, 15 ), - RPT_4 ( 177, 0, 15 ), RPT_4 (-177, 0, 15 ), - RPT_4 ( 178, 0, 15 ), RPT_4 (-178, 0, 15 ), - RPT_4 ( 179, 0, 15 ), RPT_4 (-179, 0, 15 ), - RPT_4 ( 180, 0, 15 ), RPT_4 (-180, 0, 15 ), - RPT_4 ( 181, 0, 15 ), RPT_4 (-181, 0, 15 ), - RPT_4 ( 182, 0, 15 ), RPT_4 (-182, 0, 15 ), - RPT_4 ( 183, 0, 15 ), RPT_4 (-183, 0, 15 ), - RPT_4 ( 184, 0, 15 ), RPT_4 (-184, 0, 15 ), - RPT_4 ( 185, 0, 15 ), RPT_4 (-185, 0, 15 ), - RPT_4 ( 186, 0, 15 ), RPT_4 (-186, 0, 15 ), - RPT_4 ( 187, 0, 15 ), RPT_4 (-187, 0, 15 ), - RPT_4 ( 188, 0, 15 ), RPT_4 (-188, 0, 15 ), - RPT_4 ( 189, 0, 15 ), RPT_4 (-189, 0, 15 ), - RPT_4 ( 190, 0, 15 ), RPT_4 (-190, 0, 15 ), - RPT_4 ( 191, 0, 15 ), RPT_4 (-191, 0, 15 ), - RPT_4 ( 192, 0, 15 ), RPT_4 (-192, 0, 15 ), - RPT_4 ( 193, 0, 15 ), RPT_4 (-193, 0, 15 ), - RPT_4 ( 194, 0, 15 ), RPT_4 (-194, 0, 15 ), - RPT_4 ( 195, 0, 15 ), RPT_4 (-195, 0, 15 ), - RPT_4 ( 196, 0, 15 ), RPT_4 (-196, 0, 15 ), - RPT_4 ( 197, 0, 15 ), RPT_4 (-197, 0, 15 ), - RPT_4 ( 198, 0, 15 ), RPT_4 (-198, 0, 15 ), - RPT_4 ( 199, 0, 15 ), RPT_4 (-199, 0, 15 ), - RPT_4 ( 200, 0, 15 ), RPT_4 (-200, 0, 15 ), - RPT_4 ( 201, 0, 15 ), RPT_4 (-201, 0, 15 ), - RPT_4 ( 202, 0, 15 ), RPT_4 (-202, 0, 15 ), - RPT_4 ( 203, 0, 15 ), RPT_4 (-203, 0, 15 ), - RPT_4 ( 204, 0, 15 ), RPT_4 (-204, 0, 15 ), - RPT_4 ( 205, 0, 15 ), RPT_4 (-205, 0, 15 ), - RPT_4 ( 206, 0, 15 ), RPT_4 (-206, 0, 15 ), - RPT_4 ( 207, 0, 15 ), RPT_4 (-207, 0, 15 ), - RPT_4 ( 208, 0, 15 ), RPT_4 (-208, 0, 15 ), - RPT_4 ( 209, 0, 15 ), RPT_4 (-209, 0, 15 ), - RPT_4 ( 210, 0, 15 ), RPT_4 (-210, 0, 15 ), - RPT_4 ( 211, 0, 15 ), RPT_4 (-211, 0, 15 ), - RPT_4 ( 212, 0, 15 ), RPT_4 (-212, 0, 15 ), - RPT_4 ( 213, 0, 15 ), RPT_4 (-213, 0, 15 ), - RPT_4 ( 214, 0, 15 ), RPT_4 (-214, 0, 15 ), - RPT_4 ( 215, 0, 15 ), RPT_4 (-215, 0, 15 ), - RPT_4 ( 216, 0, 15 ), RPT_4 (-216, 0, 15 ), - RPT_4 ( 217, 0, 15 ), RPT_4 (-217, 0, 15 ), - RPT_4 ( 218, 0, 15 ), RPT_4 (-218, 0, 15 ), - RPT_4 ( 219, 0, 15 ), RPT_4 (-219, 0, 15 ), - RPT_4 ( 220, 0, 15 ), RPT_4 (-220, 0, 15 ), - RPT_4 ( 221, 0, 15 ), RPT_4 (-221, 0, 15 ), - RPT_4 ( 222, 0, 15 ), RPT_4 (-222, 0, 15 ), - RPT_4 ( 223, 0, 15 ), RPT_4 (-223, 0, 15 ), - RPT_4 ( 224, 0, 15 ), RPT_4 (-224, 0, 15 ), - RPT_4 ( 225, 0, 15 ), RPT_4 (-225, 0, 15 ), - RPT_4 ( 226, 0, 15 ), RPT_4 (-226, 0, 15 ), - RPT_4 ( 227, 0, 15 ), RPT_4 (-227, 0, 15 ), - RPT_4 ( 228, 0, 15 ), RPT_4 (-228, 0, 15 ), - RPT_4 ( 229, 0, 15 ), RPT_4 (-229, 0, 15 ), - RPT_4 ( 230, 0, 15 ), RPT_4 (-230, 0, 15 ), - RPT_4 ( 231, 0, 15 ), RPT_4 (-231, 0, 15 ), - RPT_4 ( 232, 0, 15 ), RPT_4 (-232, 0, 15 ), - RPT_4 ( 233, 0, 15 ), RPT_4 (-233, 0, 15 ), - RPT_4 ( 234, 0, 15 ), RPT_4 (-234, 0, 15 ), - RPT_4 ( 235, 0, 15 ), RPT_4 (-235, 0, 15 ), - RPT_4 ( 236, 0, 15 ), RPT_4 (-236, 0, 15 ), - RPT_4 ( 237, 0, 15 ), RPT_4 (-237, 0, 15 ), - RPT_4 ( 238, 0, 15 ), RPT_4 (-238, 0, 15 ), - RPT_4 ( 239, 0, 15 ), RPT_4 (-239, 0, 15 ), - RPT_4 ( 240, 0, 15 ), RPT_4 (-240, 0, 15 ), - RPT_4 ( 241, 0, 15 ), RPT_4 (-241, 0, 15 ), - RPT_4 ( 242, 0, 15 ), RPT_4 (-242, 0, 15 ), - RPT_4 ( 243, 0, 15 ), RPT_4 (-243, 0, 15 ), - RPT_4 ( 244, 0, 15 ), RPT_4 (-244, 0, 15 ), - RPT_4 ( 245, 0, 15 ), RPT_4 (-245, 0, 15 ), - RPT_4 ( 246, 0, 15 ), RPT_4 (-246, 0, 15 ), - RPT_4 ( 247, 0, 15 ), RPT_4 (-247, 0, 15 ), - RPT_4 ( 248, 0, 15 ), RPT_4 (-248, 0, 15 ), - RPT_4 ( 249, 0, 15 ), RPT_4 (-249, 0, 15 ), - RPT_4 ( 250, 0, 15 ), RPT_4 (-250, 0, 15 ), - RPT_4 ( 251, 0, 15 ), RPT_4 (-251, 0, 15 ), - RPT_4 ( 252, 0, 15 ), RPT_4 (-252, 0, 15 ), - RPT_4 ( 253, 0, 15 ), RPT_4 (-253, 0, 15 ), - RPT_4 ( 254, 0, 15 ), RPT_4 (-254, 0, 15 ), - RPT_4 ( 255, 0, 15 ), RPT_4 (-255, 0, 15 ), - RPT_32 ( 49, 0, 12 ), RPT_32 ( -49, 0, 12 ), - RPT_32 ( 50, 0, 12 ), RPT_32 ( -50, 0, 12 ), - RPT_32 ( 51, 0, 12 ), RPT_32 ( -51, 0, 12 ), - RPT_32 ( 52, 0, 12 ), RPT_32 ( -52, 0, 12 ), - RPT_32 ( 53, 0, 12 ), RPT_32 ( -53, 0, 12 ), - RPT_32 ( 54, 0, 12 ), RPT_32 ( -54, 0, 12 ), - RPT_32 ( 55, 0, 12 ), RPT_32 ( -55, 0, 12 ), - RPT_32 ( 56, 0, 12 ), RPT_32 ( -56, 0, 12 ), - RPT_32 ( 57, 0, 12 ), RPT_32 ( -57, 0, 12 ), - RPT_32 ( 58, 0, 12 ), RPT_32 ( -58, 0, 12 ), - RPT_32 ( 59, 0, 12 ), RPT_32 ( -59, 0, 12 ), - RPT_32 ( 60, 0, 12 ), RPT_32 ( -60, 0, 12 ), - RPT_32 ( 61, 0, 12 ), RPT_32 ( -61, 0, 12 ), - RPT_32 ( 62, 0, 12 ), RPT_32 ( -62, 0, 12 ), - RPT_32 ( 63, 0, 12 ), RPT_32 ( -63, 0, 12 ), - RPT_32 ( 17, 1, 12 ), RPT_32 ( -17, 1, 12 ), - RPT_32 ( 18, 1, 12 ), RPT_32 ( -18, 1, 12 ), - RPT_32 ( 19, 1, 12 ), RPT_32 ( -19, 1, 12 ), - RPT_32 ( 20, 1, 12 ), RPT_32 ( -20, 1, 12 ), - RPT_32 ( 21, 1, 12 ), RPT_32 ( -21, 1, 12 ), - RPT_32 ( 22, 1, 12 ), RPT_32 ( -22, 1, 12 ), - RPT_32 ( 23, 1, 12 ), RPT_32 ( -23, 1, 12 ), - RPT_32 ( 24, 1, 12 ), RPT_32 ( -24, 1, 12 ), - RPT_32 ( 9, 2, 12 ), RPT_32 ( -9, 2, 12 ), - RPT_32 ( 10, 2, 12 ), RPT_32 ( -10, 2, 12 ), - RPT_32 ( 11, 2, 12 ), RPT_32 ( -11, 2, 12 ), - RPT_32 ( 12, 2, 12 ), RPT_32 ( -12, 2, 12 ), - RPT_32 ( 7, 3, 12 ), RPT_32 ( -7, 3, 12 ), - RPT_32 ( 8, 3, 12 ), RPT_32 ( -8, 3, 12 ), - RPT_32 ( 5, 4, 12 ), RPT_32 ( -5, 4, 12 ), - RPT_32 ( 6, 4, 12 ), RPT_32 ( -6, 4, 12 ), - RPT_32 ( 3, 5, 12 ), RPT_32 ( -3, 5, 12 ), - RPT_32 ( 4, 5, 12 ), RPT_32 ( -4, 5, 12 ), - RPT_32 ( 5, 5, 12 ), RPT_32 ( -5, 5, 12 ), - RPT_32 ( 6, 5, 12 ), RPT_32 ( -6, 5, 12 ), - RPT_32 ( 3, 6, 12 ), RPT_32 ( -3, 6, 12 ), - RPT_32 ( 4, 6, 12 ), RPT_32 ( -4, 6, 12 ), - RPT_32 ( 2, 7, 12 ), RPT_32 ( -2, 7, 12 ), - RPT_32 ( 2, 8, 12 ), RPT_32 ( -2, 8, 12 ), - RPT_32 ( 2, 9, 12 ), RPT_32 ( -2, 9, 12 ), - RPT_32 ( 2, 10, 12 ), RPT_32 ( -2, 10, 12 ), - RPT_32 ( 1, 13, 12 ), RPT_32 ( -1, 13, 12 ), - RPT_32 ( 1, 14, 12 ), RPT_32 ( -1, 14, 12 ), - { 0, 0, 17 }, { 0, 1, 17 }, { 0, 2, 17 }, { 0, 3, 17 }, - { 0, 4, 17 }, { 0, 5, 17 }, { 0, 6, 17 }, { 0, 7, 17 }, - { 0, 8, 17 }, { 0, 9, 17 }, { 0, 10, 17 }, { 0, 11, 17 }, - { 0, 12, 17 }, { 0, 13, 17 }, { 0, 14, 17 }, { 0, 15, 17 }, - { 0, 16, 17 }, { 0, 17, 17 }, { 0, 18, 17 }, { 0, 19, 17 }, - { 0, 20, 17 }, { 0, 21, 17 }, { 0, 22, 17 }, { 0, 23, 17 }, - { 0, 24, 17 }, { 0, 25, 17 }, { 0, 26, 17 }, { 0, 27, 17 }, - { 0, 28, 17 }, { 0, 29, 17 }, { 0, 30, 17 }, { 0, 31, 17 }, - { 0, 32, 17 }, { 0, 33, 17 }, { 0, 34, 17 }, { 0, 35, 17 }, - { 0, 36, 17 }, { 0, 37, 17 }, { 0, 38, 17 }, { 0, 39, 17 }, - { 0, 40, 17 }, { 0, 41, 17 }, { 0, 42, 17 }, { 0, 43, 17 }, - { 0, 44, 17 }, { 0, 45, 17 }, { 0, 46, 17 }, { 0, 47, 17 }, - { 0, 48, 17 }, { 0, 49, 17 }, { 0, 50, 17 }, { 0, 51, 17 }, - { 0, 52, 17 }, { 0, 53, 17 }, { 0, 54, 17 }, { 0, 55, 17 }, - { 0, 56, 17 }, { 0, 57, 17 }, { 0, 58, 17 }, { 0, 59, 17 }, - { 0, 60, 17 }, { 0, 61, 17 }, { 0, 62, 17 }, { 0, 63, 17 }, - RPT_16 ( 25, 1, 13 ), RPT_16 ( -25, 1, 13 ), - RPT_16 ( 26, 1, 13 ), RPT_16 ( -26, 1, 13 ), - RPT_16 ( 27, 1, 13 ), RPT_16 ( -27, 1, 13 ), - RPT_16 ( 28, 1, 13 ), RPT_16 ( -28, 1, 13 ), - RPT_16 ( 29, 1, 13 ), RPT_16 ( -29, 1, 13 ), - RPT_16 ( 30, 1, 13 ), RPT_16 ( -30, 1, 13 ), - RPT_16 ( 31, 1, 13 ), RPT_16 ( -31, 1, 13 ), - RPT_16 ( 32, 1, 13 ), RPT_16 ( -32, 1, 13 ), - RPT_16 ( 13, 2, 13 ), RPT_16 ( -13, 2, 13 ), - RPT_16 ( 14, 2, 13 ), RPT_16 ( -14, 2, 13 ), - RPT_16 ( 15, 2, 13 ), RPT_16 ( -15, 2, 13 ), - RPT_16 ( 16, 2, 13 ), RPT_16 ( -16, 2, 13 ), - RPT_16 ( 9, 3, 13 ), RPT_16 ( -9, 3, 13 ), - RPT_16 ( 10, 3, 13 ), RPT_16 ( -10, 3, 13 ), - RPT_16 ( 11, 3, 13 ), RPT_16 ( -11, 3, 13 ), - RPT_16 ( 7, 4, 13 ), RPT_16 ( -7, 4, 13 ), - RPT_16 ( 3, 7, 13 ), RPT_16 ( -3, 7, 13 ), - RPT_16 ( 4, 7, 13 ), RPT_16 ( -4, 7, 13 ), - RPT_16 ( 3, 8, 13 ), RPT_16 ( -3, 8, 13 ), - RPT_16 ( 4, 8, 13 ), RPT_16 ( -4, 8, 13 ), - RPT_16 ( 3, 9, 13 ), RPT_16 ( -3, 9, 13 ), - RPT_16 ( 2, 11, 13 ), RPT_16 ( -2, 11, 13 ), - RPT_16 ( 2, 12, 13 ), RPT_16 ( -2, 12, 13 ), - RPT_32 ( 0, 14, 12 ), -}; +// level is in -255..255 range, run 0..64, so it fits into 16 bits. +#define E(level, run) ((level * 128) | run) -static const HQXLUT ac16_lut[] = { - RPT_256 ( 1, 0, 3 ), RPT_256 ( -1, 0, 3 ), - RPT_128 ( 2, 0, 4 ), RPT_128 ( -2, 0, 4 ), - RPT_64 ( 3, 0, 5 ), RPT_64 ( -3, 0, 5 ), - RPT_64 ( 4, 0, 5 ), RPT_64 ( -4, 0, 5 ), - RPT_64 ( 1, 1, 5 ), RPT_64 ( -1, 1, 5 ), - RPT_128 ( 0, 64, 4 ), RPT_32 ( 5, 0, 6 ), - RPT_32 ( -5, 0, 6 ), RPT_32 ( 6, 0, 6 ), - RPT_32 ( -6, 0, 6 ), RPT_32 ( 2, 1, 6 ), - RPT_32 ( -2, 1, 6 ), RPT_32 ( 1, 2, 6 ), - RPT_32 ( -1, 2, 6 ), RPT_16 ( 7, 0, 7 ), - RPT_16 ( -7, 0, 7 ), RPT_16 ( 8, 0, 7 ), - RPT_16 ( -8, 0, 7 ), RPT_16 ( 9, 0, 7 ), - RPT_16 ( -9, 0, 7 ), RPT_16 ( 3, 1, 7 ), - RPT_16 ( -3, 1, 7 ), RPT_16 ( 1, 3, 7 ), - RPT_16 ( -1, 3, 7 ), RPT_16 ( 1, 4, 7 ), - RPT_16 ( -1, 4, 7 ), RPT_8 ( 10, 0, 8 ), - RPT_8 ( -10, 0, 8 ), RPT_8 ( 11, 0, 8 ), - RPT_8 ( -11, 0, 8 ), RPT_8 ( 12, 0, 8 ), - RPT_8 ( -12, 0, 8 ), RPT_8 ( 4, 1, 8 ), - RPT_8 ( -4, 1, 8 ), RPT_8 ( 2, 2, 8 ), - RPT_8 ( -2, 2, 8 ), RPT_8 ( 1, 5, 8 ), - RPT_8 ( -1, 5, 8 ), RPT_8 ( 1, 6, 8 ), - RPT_8 ( -1, 6, 8 ), RPT_4 ( 13, 0, 9 ), - RPT_4 ( -13, 0, 9 ), RPT_4 ( 14, 0, 9 ), - RPT_4 ( -14, 0, 9 ), RPT_4 ( 15, 0, 9 ), - RPT_4 ( -15, 0, 9 ), RPT_4 ( 16, 0, 9 ), - RPT_4 ( -16, 0, 9 ), RPT_4 ( 17, 0, 9 ), - RPT_4 ( -17, 0, 9 ), RPT_4 ( 5, 1, 9 ), - RPT_4 ( -5, 1, 9 ), RPT_4 ( 2, 3, 9 ), - RPT_4 ( -2, 3, 9 ), RPT_4 ( 1, 7, 9 ), - RPT_4 ( -1, 7, 9 ), RPT_4 ( 1, 8, 9 ), - RPT_4 ( -1, 8, 9 ), RPT_4 ( 1, 9, 9 ), - RPT_4 ( -1, 9, 9 ), RPT_4 ( 1, 10, 9 ), - RPT_4 ( -1, 10, 9 ), RPT_4 ( 0, 0, 9 ), - RPT_2 ( 18, 0, 10 ), RPT_2 ( -18, 0, 10 ), - RPT_2 ( 19, 0, 10 ), RPT_2 ( -19, 0, 10 ), - RPT_2 ( 20, 0, 10 ), RPT_2 ( -20, 0, 10 ), - RPT_2 ( 21, 0, 10 ), RPT_2 ( -21, 0, 10 ), - RPT_2 ( 22, 0, 10 ), RPT_2 ( -22, 0, 10 ), - RPT_2 ( 6, 1, 10 ), RPT_2 ( -6, 1, 10 ), - RPT_2 ( 7, 1, 10 ), RPT_2 ( -7, 1, 10 ), - RPT_2 ( 3, 2, 10 ), RPT_2 ( -3, 2, 10 ), - RPT_2 ( 2, 4, 10 ), RPT_2 ( -2, 4, 10 ), - RPT_2 ( 2, 5, 10 ), RPT_2 ( -2, 5, 10 ), - RPT_2 ( 1, 11, 10 ), RPT_2 ( -1, 11, 10 ), - RPT_2 ( 1, 12, 10 ), RPT_2 ( -1, 12, 10 ), - RPT_2 ( 1, 13, 10 ), RPT_2 ( -1, 13, 10 ), - { 2048, 0, -1 }, { 2112, 0, -1 }, { 2176, 0, -1 }, { 2240, 0, -1 }, - { 2304, 0, -1 }, { 2368, 0, -1 }, { 2432, 0, -1 }, { 2496, 0, -1 }, - { 23, 0, 11 }, { -23, 0, 11 }, { 24, 0, 11 }, { -24, 0, 11 }, - { 25, 0, 11 }, { -25, 0, 11 }, { 26, 0, 11 }, { -26, 0, 11 }, - { 27, 0, 11 }, { -27, 0, 11 }, { 28, 0, 11 }, { -28, 0, 11 }, - { 8, 1, 11 }, { -8, 1, 11 }, { 9, 1, 11 }, { -9, 1, 11 }, - { 4, 2, 11 }, { -4, 2, 11 }, { 3, 3, 11 }, { -3, 3, 11 }, - { 3, 4, 11 }, { -3, 4, 11 }, { 2, 6, 11 }, { -2, 6, 11 }, - { 2, 7, 11 }, { -2, 7, 11 }, { 2560, 0, -1 }, { 2624, 0, -1 }, - { 2688, 0, -1 }, { 2752, 0, -1 }, { 2816, 0, -1 }, { 2880, 0, -1 }, - { 2944, 0, -1 }, { 0, 1, 11 }, { 3008, 0, -1 }, { 3072, 0, -1 }, - { 3136, 0, -1 }, { 0, 2, 11 }, { 3200, 0, -1 }, { 0, 3, 11 }, - { 3264, 0, -1 }, { 3328, 0, -1 }, { 3392, 0, -1 }, { 3456, 0, -1 }, - { 3520, 0, -1 }, { 3584, 0, -1 }, { 3648, 0, -1 }, { 3712, 0, -1 }, - { 3776, 0, -1 }, { 3840, 0, -1 }, { 3904, 0, -1 }, { 3968, 0, -1 }, - { 4032, 0, -1 }, { 4096, 0, -1 }, { 4160, 0, -1 }, { 4224, 0, -1 }, - RPT_4 ( 0, 0, 15 ), RPT_4 ( 0, 1, 15 ), - RPT_4 ( 0, 2, 15 ), RPT_4 ( 0, 3, 15 ), - RPT_4 ( 0, 4, 15 ), RPT_4 ( 0, 5, 15 ), - RPT_4 ( 0, 6, 15 ), RPT_4 ( 0, 7, 15 ), - RPT_4 ( 0, 8, 15 ), RPT_4 ( 0, 9, 15 ), - RPT_4 ( 0, 10, 15 ), RPT_4 ( 0, 11, 15 ), - RPT_4 ( 0, 12, 15 ), RPT_4 ( 0, 13, 15 ), - RPT_4 ( 0, 14, 15 ), RPT_4 ( 0, 15, 15 ), - RPT_4 ( 0, 16, 15 ), RPT_4 ( 0, 17, 15 ), - RPT_4 ( 0, 18, 15 ), RPT_4 ( 0, 19, 15 ), - RPT_4 ( 0, 20, 15 ), RPT_4 ( 0, 21, 15 ), - RPT_4 ( 0, 22, 15 ), RPT_4 ( 0, 23, 15 ), - RPT_4 ( 0, 24, 15 ), RPT_4 ( 0, 25, 15 ), - RPT_4 ( 0, 26, 15 ), RPT_4 ( 0, 27, 15 ), - RPT_4 ( 0, 28, 15 ), RPT_4 ( 0, 29, 15 ), - RPT_4 ( 0, 30, 15 ), RPT_4 ( 0, 31, 15 ), - RPT_4 ( 0, 32, 15 ), RPT_4 ( 0, 33, 15 ), - RPT_4 ( 0, 34, 15 ), RPT_4 ( 0, 35, 15 ), - RPT_4 ( 0, 36, 15 ), RPT_4 ( 0, 37, 15 ), - RPT_4 ( 0, 38, 15 ), RPT_4 ( 0, 39, 15 ), - RPT_4 ( 0, 40, 15 ), RPT_4 ( 0, 41, 15 ), - RPT_4 ( 0, 42, 15 ), RPT_4 ( 0, 43, 15 ), - RPT_4 ( 0, 44, 15 ), RPT_4 ( 0, 45, 15 ), - RPT_4 ( 0, 46, 15 ), RPT_4 ( 0, 47, 15 ), - RPT_4 ( 0, 48, 15 ), RPT_4 ( 0, 49, 15 ), - RPT_4 ( 0, 50, 15 ), RPT_4 ( 0, 51, 15 ), - RPT_4 ( 0, 52, 15 ), RPT_4 ( 0, 53, 15 ), - RPT_4 ( 0, 54, 15 ), RPT_4 ( 0, 55, 15 ), - RPT_4 ( 0, 56, 15 ), RPT_4 ( 0, 57, 15 ), - RPT_4 ( 0, 58, 15 ), RPT_4 ( 0, 59, 15 ), - RPT_4 ( 0, 60, 15 ), RPT_4 ( 0, 61, 15 ), - RPT_4 ( 0, 62, 15 ), RPT_4 ( 0, 63, 15 ), - RPT_2 ( 0, 0, 16 ), { 1, 0, 17 }, { -1, 0, 17 }, - { 2, 0, 17 }, { -2, 0, 17 }, { 3, 0, 17 }, { -3, 0, 17 }, - { 4, 0, 17 }, { -4, 0, 17 }, { 5, 0, 17 }, { -5, 0, 17 }, - { 6, 0, 17 }, { -6, 0, 17 }, { 7, 0, 17 }, { -7, 0, 17 }, - { 8, 0, 17 }, { -8, 0, 17 }, { 9, 0, 17 }, { -9, 0, 17 }, - { 10, 0, 17 }, { -10, 0, 17 }, { 11, 0, 17 }, { -11, 0, 17 }, - { 12, 0, 17 }, { -12, 0, 17 }, { 13, 0, 17 }, { -13, 0, 17 }, - { 14, 0, 17 }, { -14, 0, 17 }, { 15, 0, 17 }, { -15, 0, 17 }, - { 16, 0, 17 }, { -16, 0, 17 }, { 17, 0, 17 }, { -17, 0, 17 }, - { 18, 0, 17 }, { -18, 0, 17 }, { 19, 0, 17 }, { -19, 0, 17 }, - { 20, 0, 17 }, { -20, 0, 17 }, { 21, 0, 17 }, { -21, 0, 17 }, - { 22, 0, 17 }, { -22, 0, 17 }, { 23, 0, 17 }, { -23, 0, 17 }, - { 24, 0, 17 }, { -24, 0, 17 }, { 25, 0, 17 }, { -25, 0, 17 }, - { 26, 0, 17 }, { -26, 0, 17 }, { 27, 0, 17 }, { -27, 0, 17 }, - { 28, 0, 17 }, { -28, 0, 17 }, { 29, 0, 17 }, { -29, 0, 17 }, - { 30, 0, 17 }, { -30, 0, 17 }, { 31, 0, 17 }, { -31, 0, 17 }, - { 32, 0, 17 }, { -32, 0, 17 }, { 33, 0, 17 }, { -33, 0, 17 }, - { 34, 0, 17 }, { -34, 0, 17 }, { 35, 0, 17 }, { -35, 0, 17 }, - { 36, 0, 17 }, { -36, 0, 17 }, { 37, 0, 17 }, { -37, 0, 17 }, - { 38, 0, 17 }, { -38, 0, 17 }, { 39, 0, 17 }, { -39, 0, 17 }, - { 40, 0, 17 }, { -40, 0, 17 }, { 41, 0, 17 }, { -41, 0, 17 }, - { 42, 0, 17 }, { -42, 0, 17 }, { 43, 0, 17 }, { -43, 0, 17 }, - { 44, 0, 17 }, { -44, 0, 17 }, { 45, 0, 17 }, { -45, 0, 17 }, - { 46, 0, 17 }, { -46, 0, 17 }, { 47, 0, 17 }, { -47, 0, 17 }, - { 48, 0, 17 }, { -48, 0, 17 }, { 49, 0, 17 }, { -49, 0, 17 }, - { 50, 0, 17 }, { -50, 0, 17 }, { 51, 0, 17 }, { -51, 0, 17 }, - { 52, 0, 17 }, { -52, 0, 17 }, { 53, 0, 17 }, { -53, 0, 17 }, - { 54, 0, 17 }, { -54, 0, 17 }, { 55, 0, 17 }, { -55, 0, 17 }, - { 56, 0, 17 }, { -56, 0, 17 }, { 57, 0, 17 }, { -57, 0, 17 }, - { 58, 0, 17 }, { -58, 0, 17 }, { 59, 0, 17 }, { -59, 0, 17 }, - { 60, 0, 17 }, { -60, 0, 17 }, { 61, 0, 17 }, { -61, 0, 17 }, - { 62, 0, 17 }, { -62, 0, 17 }, { 63, 0, 17 }, { -63, 0, 17 }, - { 64, 0, 17 }, { -64, 0, 17 }, { 65, 0, 17 }, { -65, 0, 17 }, - { 66, 0, 17 }, { -66, 0, 17 }, { 67, 0, 17 }, { -67, 0, 17 }, - { 68, 0, 17 }, { -68, 0, 17 }, { 69, 0, 17 }, { -69, 0, 17 }, - { 70, 0, 17 }, { -70, 0, 17 }, { 71, 0, 17 }, { -71, 0, 17 }, - { 72, 0, 17 }, { -72, 0, 17 }, { 73, 0, 17 }, { -73, 0, 17 }, - { 74, 0, 17 }, { -74, 0, 17 }, { 75, 0, 17 }, { -75, 0, 17 }, - { 76, 0, 17 }, { -76, 0, 17 }, { 77, 0, 17 }, { -77, 0, 17 }, - { 78, 0, 17 }, { -78, 0, 17 }, { 79, 0, 17 }, { -79, 0, 17 }, - { 80, 0, 17 }, { -80, 0, 17 }, { 81, 0, 17 }, { -81, 0, 17 }, - { 82, 0, 17 }, { -82, 0, 17 }, { 83, 0, 17 }, { -83, 0, 17 }, - { 84, 0, 17 }, { -84, 0, 17 }, { 85, 0, 17 }, { -85, 0, 17 }, - { 86, 0, 17 }, { -86, 0, 17 }, { 87, 0, 17 }, { -87, 0, 17 }, - { 88, 0, 17 }, { -88, 0, 17 }, { 89, 0, 17 }, { -89, 0, 17 }, - { 90, 0, 17 }, { -90, 0, 17 }, { 91, 0, 17 }, { -91, 0, 17 }, - { 92, 0, 17 }, { -92, 0, 17 }, { 93, 0, 17 }, { -93, 0, 17 }, - { 94, 0, 17 }, { -94, 0, 17 }, { 95, 0, 17 }, { -95, 0, 17 }, - { 96, 0, 17 }, { -96, 0, 17 }, { 97, 0, 17 }, { -97, 0, 17 }, - { 98, 0, 17 }, { -98, 0, 17 }, { 99, 0, 17 }, { -99, 0, 17 }, - { 100, 0, 17 }, { -100, 0, 17 }, { 101, 0, 17 }, { -101, 0, 17 }, - { 102, 0, 17 }, { -102, 0, 17 }, { 103, 0, 17 }, { -103, 0, 17 }, - { 104, 0, 17 }, { -104, 0, 17 }, { 105, 0, 17 }, { -105, 0, 17 }, - { 106, 0, 17 }, { -106, 0, 17 }, { 107, 0, 17 }, { -107, 0, 17 }, - { 108, 0, 17 }, { -108, 0, 17 }, { 109, 0, 17 }, { -109, 0, 17 }, - { 110, 0, 17 }, { -110, 0, 17 }, { 111, 0, 17 }, { -111, 0, 17 }, - { 112, 0, 17 }, { -112, 0, 17 }, { 113, 0, 17 }, { -113, 0, 17 }, - { 114, 0, 17 }, { -114, 0, 17 }, { 115, 0, 17 }, { -115, 0, 17 }, - { 116, 0, 17 }, { -116, 0, 17 }, { 117, 0, 17 }, { -117, 0, 17 }, - { 118, 0, 17 }, { -118, 0, 17 }, { 119, 0, 17 }, { -119, 0, 17 }, - { 120, 0, 17 }, { -120, 0, 17 }, { 121, 0, 17 }, { -121, 0, 17 }, - { 122, 0, 17 }, { -122, 0, 17 }, { 123, 0, 17 }, { -123, 0, 17 }, - { 124, 0, 17 }, { -124, 0, 17 }, { 125, 0, 17 }, { -125, 0, 17 }, - { 126, 0, 17 }, { -126, 0, 17 }, { 127, 0, 17 }, { -127, 0, 17 }, - RPT_32 ( 29, 0, 12 ), RPT_32 ( -29, 0, 12 ), - RPT_32 ( 30, 0, 12 ), RPT_32 ( -30, 0, 12 ), - RPT_32 ( 31, 0, 12 ), RPT_32 ( -31, 0, 12 ), - RPT_32 ( 32, 0, 12 ), RPT_32 ( -32, 0, 12 ), - RPT_32 ( 33, 0, 12 ), RPT_32 ( -33, 0, 12 ), - RPT_32 ( 34, 0, 12 ), RPT_32 ( -34, 0, 12 ), - RPT_32 ( 35, 0, 12 ), RPT_32 ( -35, 0, 12 ), - RPT_32 ( 10, 1, 12 ), RPT_32 ( -10, 1, 12 ), - RPT_32 ( 11, 1, 12 ), RPT_32 ( -11, 1, 12 ), - RPT_32 ( 12, 1, 12 ), RPT_32 ( -12, 1, 12 ), - RPT_32 ( 5, 2, 12 ), RPT_32 ( -5, 2, 12 ), - RPT_32 ( 4, 3, 12 ), RPT_32 ( -4, 3, 12 ), - RPT_32 ( 3, 5, 12 ), RPT_32 ( -3, 5, 12 ), - RPT_32 ( 2, 8, 12 ), RPT_32 ( -2, 8, 12 ), - RPT_32 ( 2, 9, 12 ), RPT_32 ( -2, 9, 12 ), - RPT_32 ( 1, 14, 12 ), RPT_32 ( -1, 14, 12 ), - RPT_32 ( 1, 15, 12 ), RPT_32 ( -1, 15, 12 ), - RPT_16 ( 36, 0, 13 ), RPT_16 ( -36, 0, 13 ), - RPT_16 ( 37, 0, 13 ), RPT_16 ( -37, 0, 13 ), - RPT_16 ( 38, 0, 13 ), RPT_16 ( -38, 0, 13 ), - RPT_16 ( 39, 0, 13 ), RPT_16 ( -39, 0, 13 ), - RPT_16 ( 40, 0, 13 ), RPT_16 ( -40, 0, 13 ), - RPT_16 ( 13, 1, 13 ), RPT_16 ( -13, 1, 13 ), - RPT_16 ( 14, 1, 13 ), RPT_16 ( -14, 1, 13 ), - RPT_16 ( 15, 1, 13 ), RPT_16 ( -15, 1, 13 ), - RPT_16 ( 6, 2, 13 ), RPT_16 ( -6, 2, 13 ), - RPT_16 ( 7, 2, 13 ), RPT_16 ( -7, 2, 13 ), - RPT_16 ( 5, 3, 13 ), RPT_16 ( -5, 3, 13 ), - RPT_32 ( 0, 4, 12 ), RPT_16 ( 4, 4, 13 ), - RPT_16 ( -4, 4, 13 ), RPT_32 ( 0, 5, 12 ), - RPT_32 ( 0, 6, 12 ), RPT_16 ( 3, 6, 13 ), - RPT_16 ( -3, 6, 13 ), RPT_32 ( 0, 7, 12 ), - RPT_16 ( 3, 7, 13 ), RPT_16 ( -3, 7, 13 ), - RPT_16 ( 2, 10, 13 ), RPT_16 ( -2, 10, 13 ), - RPT_16 ( 1, 16, 13 ), RPT_16 ( -1, 16, 13 ), +static const int16_t hqx_ac_run_level[] = { + // AC table Q0 - 815 elements + E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), E( 3, 0), + E( -3, 0), E( 4, 0), E( -4, 0), E( 1, 1), E( -1, 1), + E( 5, 0), E( -5, 0), E( 6, 0), E( -6, 0), E( 7, 0), + E( -7, 0), E( 8, 0), E( -8, 0), E( 0, 0), E( 1, 0), + E( -1, 0), E( 2, 0), E( -2, 0), E( 3, 0), E( -3, 0), + E( 4, 0), E( -4, 0), E( 5, 0), E( -5, 0), E( 6, 0), + E( -6, 0), E( 7, 0), E( -7, 0), E( 8, 0), E( -8, 0), + E( 9, 0), E( -9, 0), E( 10, 0), E( -10, 0), E( 11, 0), + E( -11, 0), E( 12, 0), E( -12, 0), E( 13, 0), E( -13, 0), + E( 14, 0), E( -14, 0), E( 15, 0), E( -15, 0), E( 16, 0), + E( -16, 0), E( 17, 0), E( -17, 0), E( 18, 0), E( -18, 0), + E( 19, 0), E( -19, 0), E( 20, 0), E( -20, 0), E( 21, 0), + E( -21, 0), E( 22, 0), E( -22, 0), E( 23, 0), E( -23, 0), + E( 24, 0), E( -24, 0), E( 25, 0), E( -25, 0), E( 26, 0), + E( -26, 0), E( 27, 0), E( -27, 0), E( 28, 0), E( -28, 0), + E( 29, 0), E( -29, 0), E( 30, 0), E( -30, 0), E( 31, 0), + E( -31, 0), E( 32, 0), E( -32, 0), E( 33, 0), E( -33, 0), + E( 34, 0), E( -34, 0), E( 35, 0), E( -35, 0), E( 36, 0), + E( -36, 0), E( 37, 0), E( -37, 0), E( 38, 0), E( -38, 0), + E( 39, 0), E( -39, 0), E( 40, 0), E( -40, 0), E( 41, 0), + E( -41, 0), E( 42, 0), E( -42, 0), E( 43, 0), E( -43, 0), + E( 44, 0), E( -44, 0), E( 45, 0), E( -45, 0), E( 46, 0), + E( -46, 0), E( 47, 0), E( -47, 0), E( 48, 0), E( -48, 0), + E( 49, 0), E( -49, 0), E( 50, 0), E( -50, 0), E( 51, 0), + E( -51, 0), E( 52, 0), E( -52, 0), E( 53, 0), E( -53, 0), + E( 54, 0), E( -54, 0), E( 55, 0), E( -55, 0), E( 56, 0), + E( -56, 0), E( 57, 0), E( -57, 0), E( 58, 0), E( -58, 0), + E( 59, 0), E( -59, 0), E( 60, 0), E( -60, 0), E( 61, 0), + E( -61, 0), E( 62, 0), E( -62, 0), E( 63, 0), E( -63, 0), + E( 64, 0), E( -64, 0), E( 65, 0), E( -65, 0), E( 66, 0), + E( -66, 0), E( 67, 0), E( -67, 0), E( 68, 0), E( -68, 0), + E( 69, 0), E( -69, 0), E( 70, 0), E( -70, 0), E( 71, 0), + E( -71, 0), E( 72, 0), E( -72, 0), E( 73, 0), E( -73, 0), + E( 74, 0), E( -74, 0), E( 75, 0), E( -75, 0), E( 76, 0), + E( -76, 0), E( 77, 0), E( -77, 0), E( 78, 0), E( -78, 0), + E( 79, 0), E( -79, 0), E( 80, 0), E( -80, 0), E( 81, 0), + E( -81, 0), E( 82, 0), E( -82, 0), E( 83, 0), E( -83, 0), + E( 84, 0), E( -84, 0), E( 85, 0), E( -85, 0), E( 86, 0), + E( -86, 0), E( 87, 0), E( -87, 0), E( 88, 0), E( -88, 0), + E( 89, 0), E( -89, 0), E( 90, 0), E( -90, 0), E( 91, 0), + E( -91, 0), E( 92, 0), E( -92, 0), E( 93, 0), E( -93, 0), + E( 94, 0), E( -94, 0), E( 95, 0), E( -95, 0), E( 96, 0), + E( -96, 0), E( 97, 0), E( -97, 0), E( 98, 0), E( -98, 0), + E( 99, 0), E( -99, 0), E( 100, 0), E(-100, 0), E( 101, 0), + E(-101, 0), E( 102, 0), E(-102, 0), E( 103, 0), E(-103, 0), + E( 104, 0), E(-104, 0), E( 105, 0), E(-105, 0), E( 106, 0), + E(-106, 0), E( 107, 0), E(-107, 0), E( 108, 0), E(-108, 0), + E( 109, 0), E(-109, 0), E( 110, 0), E(-110, 0), E( 111, 0), + E(-111, 0), E( 112, 0), E(-112, 0), E( 113, 0), E(-113, 0), + E( 114, 0), E(-114, 0), E( 115, 0), E(-115, 0), E( 116, 0), + E(-116, 0), E( 117, 0), E(-117, 0), E( 118, 0), E(-118, 0), + E( 119, 0), E(-119, 0), E( 120, 0), E(-120, 0), E( 121, 0), + E(-121, 0), E( 122, 0), E(-122, 0), E( 123, 0), E(-123, 0), + E( 124, 0), E(-124, 0), E( 125, 0), E(-125, 0), E( 126, 0), + E(-126, 0), E( 127, 0), E(-127, 0), E( 128, 0), E(-128, 0), + E( 129, 0), E(-129, 0), E( 130, 0), E(-130, 0), E( 131, 0), + E(-131, 0), E( 132, 0), E(-132, 0), E( 133, 0), E(-133, 0), + E( 134, 0), E(-134, 0), E( 135, 0), E(-135, 0), E( 136, 0), + E(-136, 0), E( 137, 0), E(-137, 0), E( 138, 0), E(-138, 0), + E( 139, 0), E(-139, 0), E( 140, 0), E(-140, 0), E( 141, 0), + E(-141, 0), E( 142, 0), E(-142, 0), E( 143, 0), E(-143, 0), + E( 144, 0), E(-144, 0), E( 145, 0), E(-145, 0), E( 146, 0), + E(-146, 0), E( 147, 0), E(-147, 0), E( 148, 0), E(-148, 0), + E( 149, 0), E(-149, 0), E( 150, 0), E(-150, 0), E( 151, 0), + E(-151, 0), E( 152, 0), E(-152, 0), E( 153, 0), E(-153, 0), + E( 154, 0), E(-154, 0), E( 155, 0), E(-155, 0), E( 156, 0), + E(-156, 0), E( 157, 0), E(-157, 0), E( 158, 0), E(-158, 0), + E( 159, 0), E(-159, 0), E( 160, 0), E(-160, 0), E( 161, 0), + E(-161, 0), E( 162, 0), E(-162, 0), E( 163, 0), E(-163, 0), + E( 164, 0), E(-164, 0), E( 165, 0), E(-165, 0), E( 166, 0), + E(-166, 0), E( 167, 0), E(-167, 0), E( 168, 0), E(-168, 0), + E( 169, 0), E(-169, 0), E( 170, 0), E(-170, 0), E( 171, 0), + E(-171, 0), E( 172, 0), E(-172, 0), E( 173, 0), E(-173, 0), + E( 174, 0), E(-174, 0), E( 175, 0), E(-175, 0), E( 176, 0), + E(-176, 0), E( 177, 0), E(-177, 0), E( 178, 0), E(-178, 0), + E( 179, 0), E(-179, 0), E( 180, 0), E(-180, 0), E( 181, 0), + E(-181, 0), E( 182, 0), E(-182, 0), E( 183, 0), E(-183, 0), + E( 184, 0), E(-184, 0), E( 185, 0), E(-185, 0), E( 186, 0), + E(-186, 0), E( 187, 0), E(-187, 0), E( 188, 0), E(-188, 0), + E( 189, 0), E(-189, 0), E( 190, 0), E(-190, 0), E( 191, 0), + E(-191, 0), E( 192, 0), E(-192, 0), E( 193, 0), E(-193, 0), + E( 194, 0), E(-194, 0), E( 195, 0), E(-195, 0), E( 196, 0), + E(-196, 0), E( 197, 0), E(-197, 0), E( 198, 0), E(-198, 0), + E( 199, 0), E(-199, 0), E( 200, 0), E(-200, 0), E( 201, 0), + E(-201, 0), E( 202, 0), E(-202, 0), E( 203, 0), E(-203, 0), + E( 204, 0), E(-204, 0), E( 205, 0), E(-205, 0), E( 206, 0), + E(-206, 0), E( 207, 0), E(-207, 0), E( 208, 0), E(-208, 0), + E( 209, 0), E(-209, 0), E( 210, 0), E(-210, 0), E( 211, 0), + E(-211, 0), E( 212, 0), E(-212, 0), E( 213, 0), E(-213, 0), + E( 214, 0), E(-214, 0), E( 215, 0), E(-215, 0), E( 216, 0), + E(-216, 0), E( 217, 0), E(-217, 0), E( 218, 0), E(-218, 0), + E( 219, 0), E(-219, 0), E( 220, 0), E(-220, 0), E( 221, 0), + E(-221, 0), E( 222, 0), E(-222, 0), E( 223, 0), E(-223, 0), + E( 224, 0), E(-224, 0), E( 225, 0), E(-225, 0), E( 226, 0), + E(-226, 0), E( 227, 0), E(-227, 0), E( 228, 0), E(-228, 0), + E( 229, 0), E(-229, 0), E( 230, 0), E(-230, 0), E( 231, 0), + E(-231, 0), E( 232, 0), E(-232, 0), E( 233, 0), E(-233, 0), + E( 234, 0), E(-234, 0), E( 235, 0), E(-235, 0), E( 236, 0), + E(-236, 0), E( 237, 0), E(-237, 0), E( 238, 0), E(-238, 0), + E( 239, 0), E(-239, 0), E( 240, 0), E(-240, 0), E( 241, 0), + E(-241, 0), E( 242, 0), E(-242, 0), E( 243, 0), E(-243, 0), + E( 244, 0), E(-244, 0), E( 245, 0), E(-245, 0), E( 246, 0), + E(-246, 0), E( 247, 0), E(-247, 0), E( 248, 0), E(-248, 0), + E( 249, 0), E(-249, 0), E( 250, 0), E(-250, 0), E( 251, 0), + E(-251, 0), E( 252, 0), E(-252, 0), E( 253, 0), E(-253, 0), + E( 254, 0), E(-254, 0), E( 255, 0), E(-255, 0), E( 0, 64), + E( 9, 0), E( -9, 0), E( 10, 0), E( -10, 0), E( 11, 0), + E( -11, 0), E( 12, 0), E( -12, 0), E( 13, 0), E( -13, 0), + E( 14, 0), E( -14, 0), E( 2, 1), E( -2, 1), E( 1, 2), + E( -1, 2), E( 15, 0), E( -15, 0), E( 16, 0), E( -16, 0), + E( 17, 0), E( -17, 0), E( 18, 0), E( -18, 0), E( 19, 0), + E( -19, 0), E( 20, 0), E( -20, 0), E( 21, 0), E( -21, 0), + E( 3, 1), E( -3, 1), E( 4, 1), E( -4, 1), E( 1, 3), + E( -1, 3), E( 1, 4), E( -1, 4), E( 0, 0), E( 22, 0), + E( -22, 0), E( 23, 0), E( -23, 0), E( 24, 0), E( -24, 0), + E( 25, 0), E( -25, 0), E( 26, 0), E( -26, 0), E( 27, 0), + E( -27, 0), E( 28, 0), E( -28, 0), E( 29, 0), E( -29, 0), + E( 30, 0), E( -30, 0), E( 31, 0), E( -31, 0), E( 32, 0), + E( -32, 0), E( 33, 0), E( -33, 0), E( 5, 1), E( -5, 1), + E( 6, 1), E( -6, 1), E( 2, 2), E( -2, 2), E( 1, 5), + E( -1, 5), E( 1, 6), E( -1, 6), E( 34, 0), E( -34, 0), + E( 35, 0), E( -35, 0), E( 36, 0), E( -36, 0), E( 37, 0), + E( -37, 0), E( 38, 0), E( -38, 0), E( 39, 0), E( -39, 0), + E( 40, 0), E( -40, 0), E( 41, 0), E( -41, 0), E( 42, 0), + E( -42, 0), E( 43, 0), E( -43, 0), E( 44, 0), E( -44, 0), + E( 45, 0), E( -45, 0), E( 46, 0), E( -46, 0), E( 47, 0), + E( -47, 0), E( 48, 0), E( -48, 0), E( 49, 0), E( -49, 0), + E( 50, 0), E( -50, 0), E( 0, 1), E( 7, 1), E( -7, 1), + E( 8, 1), E( -8, 1), E( 9, 1), E( -9, 1), E( 10, 1), + E( -10, 1), E( 0, 2), E( 3, 2), E( -3, 2), E( 0, 3), + E( 2, 3), E( -2, 3), E( 1, 7), E( -1, 7), E( 1, 8), + E( -1, 8), E( 0, 0), E( 0, 1), E( 0, 2), E( 0, 3), + E( 0, 4), E( 0, 5), E( 0, 6), E( 0, 7), E( 0, 8), + E( 0, 9), E( 0, 10), E( 0, 11), E( 0, 12), E( 0, 13), + E( 0, 14), E( 0, 15), E( 0, 16), E( 0, 17), E( 0, 18), + E( 0, 19), E( 0, 20), E( 0, 21), E( 0, 22), E( 0, 23), + E( 0, 24), E( 0, 25), E( 0, 26), E( 0, 27), E( 0, 28), + E( 0, 29), E( 0, 30), E( 0, 31), E( 0, 32), E( 0, 33), + E( 0, 34), E( 0, 35), E( 0, 36), E( 0, 37), E( 0, 38), + E( 0, 39), E( 0, 40), E( 0, 41), E( 0, 42), E( 0, 43), + E( 0, 44), E( 0, 45), E( 0, 46), E( 0, 47), E( 0, 48), + E( 0, 49), E( 0, 50), E( 0, 51), E( 0, 52), E( 0, 53), + E( 0, 54), E( 0, 55), E( 0, 56), E( 0, 57), E( 0, 58), + E( 0, 59), E( 0, 60), E( 0, 61), E( 0, 62), E( 0, 63), + E( 51, 0), E( -51, 0), E( 52, 0), E( -52, 0), E( 53, 0), + E( -53, 0), E( 54, 0), E( -54, 0), E( 55, 0), E( -55, 0), + E( 56, 0), E( -56, 0), E( 57, 0), E( -57, 0), E( 58, 0), + E( -58, 0), E( 59, 0), E( -59, 0), E( 60, 0), E( -60, 0), + E( 61, 0), E( -61, 0), E( 62, 0), E( -62, 0), E( 63, 0), + E( -63, 0), E( 11, 1), E( -11, 1), E( 12, 1), E( -12, 1), + E( 13, 1), E( -13, 1), E( 14, 1), E( -14, 1), E( 4, 2), + E( -4, 2), E( 5, 2), E( -5, 2), E( 6, 2), E( -6, 2), + E( 3, 3), E( -3, 3), E( 0, 4), E( 2, 4), E( -2, 4), + E( 0, 5), E( 0, 6), E( 1, 9), E( -1, 9), E( 1, 10), + E( -1, 10), E( 15, 1), E( -15, 1), E( 16, 1), E( -16, 1), + E( 17, 1), E( -17, 1), E( 18, 1), E( -18, 1), E( 7, 2), + E( -7, 2), E( 8, 2), E( -8, 2), E( 9, 2), E( -9, 2), + E( 10, 2), E( -10, 2), E( 4, 3), E( -4, 3), E( 5, 3), + E( -5, 3), E( 6, 3), E( -6, 3), E( 2, 5), E( -2, 5), + E( 0, 7), E( 0, 8), E( 0, 9), E( 0, 10), E( 1, 11), + E( -1, 11), E( 1, 12), E( -1, 12), E( 1, 13), E( -1, 13), + E( 1, 14), E( -1, 14), E( 19, 1), E( -19, 1), E( 20, 1), + E( -20, 1), E( 3, 4), E( -3, 4), E( 2, 6), E( -2, 6), + // AC table Q8 - 907 elements + E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), E( 3, 0), + E( -3, 0), E( 4, 0), E( -4, 0), E( 0, 64), E( 5, 0), + E( -5, 0), E( 6, 0), E( -6, 0), E( 7, 0), E( -7, 0), + E( 8, 0), E( -8, 0), E( 1, 1), E( -1, 1), E( 2, 1), + E( -2, 1), E( 9, 0), E( -9, 0), E( 10, 0), E( -10, 0), + E( 11, 0), E( -11, 0), E( 12, 0), E( -12, 0), E( 3, 1), + E( -3, 1), E( 4, 1), E( -4, 1), E( 1, 2), E( -1, 2), + E( 0, 0), E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), + E( 3, 0), E( -3, 0), E( 4, 0), E( -4, 0), E( 5, 0), + E( -5, 0), E( 6, 0), E( -6, 0), E( 7, 0), E( -7, 0), + E( 8, 0), E( -8, 0), E( 9, 0), E( -9, 0), E( 10, 0), + E( -10, 0), E( 11, 0), E( -11, 0), E( 12, 0), E( -12, 0), + E( 13, 0), E( -13, 0), E( 14, 0), E( -14, 0), E( 15, 0), + E( -15, 0), E( 16, 0), E( -16, 0), E( 17, 0), E( -17, 0), + E( 18, 0), E( -18, 0), E( 19, 0), E( -19, 0), E( 20, 0), + E( -20, 0), E( 21, 0), E( -21, 0), E( 22, 0), E( -22, 0), + E( 23, 0), E( -23, 0), E( 24, 0), E( -24, 0), E( 25, 0), + E( -25, 0), E( 26, 0), E( -26, 0), E( 27, 0), E( -27, 0), + E( 28, 0), E( -28, 0), E( 29, 0), E( -29, 0), E( 30, 0), + E( -30, 0), E( 31, 0), E( -31, 0), E( 32, 0), E( -32, 0), + E( 33, 0), E( -33, 0), E( 34, 0), E( -34, 0), E( 35, 0), + E( -35, 0), E( 36, 0), E( -36, 0), E( 37, 0), E( -37, 0), + E( 38, 0), E( -38, 0), E( 39, 0), E( -39, 0), E( 40, 0), + E( -40, 0), E( 41, 0), E( -41, 0), E( 42, 0), E( -42, 0), + E( 43, 0), E( -43, 0), E( 44, 0), E( -44, 0), E( 45, 0), + E( -45, 0), E( 46, 0), E( -46, 0), E( 47, 0), E( -47, 0), + E( 48, 0), E( -48, 0), E( 49, 0), E( -49, 0), E( 50, 0), + E( -50, 0), E( 51, 0), E( -51, 0), E( 52, 0), E( -52, 0), + E( 53, 0), E( -53, 0), E( 54, 0), E( -54, 0), E( 55, 0), + E( -55, 0), E( 56, 0), E( -56, 0), E( 57, 0), E( -57, 0), + E( 58, 0), E( -58, 0), E( 59, 0), E( -59, 0), E( 60, 0), + E( -60, 0), E( 61, 0), E( -61, 0), E( 62, 0), E( -62, 0), + E( 63, 0), E( -63, 0), E( 64, 0), E( -64, 0), E( 65, 0), + E( -65, 0), E( 66, 0), E( -66, 0), E( 67, 0), E( -67, 0), + E( 68, 0), E( -68, 0), E( 69, 0), E( -69, 0), E( 70, 0), + E( -70, 0), E( 71, 0), E( -71, 0), E( 72, 0), E( -72, 0), + E( 73, 0), E( -73, 0), E( 74, 0), E( -74, 0), E( 75, 0), + E( -75, 0), E( 76, 0), E( -76, 0), E( 77, 0), E( -77, 0), + E( 78, 0), E( -78, 0), E( 79, 0), E( -79, 0), E( 80, 0), + E( -80, 0), E( 81, 0), E( -81, 0), E( 82, 0), E( -82, 0), + E( 83, 0), E( -83, 0), E( 84, 0), E( -84, 0), E( 85, 0), + E( -85, 0), E( 86, 0), E( -86, 0), E( 87, 0), E( -87, 0), + E( 88, 0), E( -88, 0), E( 89, 0), E( -89, 0), E( 90, 0), + E( -90, 0), E( 91, 0), E( -91, 0), E( 92, 0), E( -92, 0), + E( 93, 0), E( -93, 0), E( 94, 0), E( -94, 0), E( 95, 0), + E( -95, 0), E( 96, 0), E( -96, 0), E( 97, 0), E( -97, 0), + E( 98, 0), E( -98, 0), E( 99, 0), E( -99, 0), E( 100, 0), + E(-100, 0), E( 101, 0), E(-101, 0), E( 102, 0), E(-102, 0), + E( 103, 0), E(-103, 0), E( 104, 0), E(-104, 0), E( 105, 0), + E(-105, 0), E( 106, 0), E(-106, 0), E( 107, 0), E(-107, 0), + E( 108, 0), E(-108, 0), E( 109, 0), E(-109, 0), E( 110, 0), + E(-110, 0), E( 111, 0), E(-111, 0), E( 112, 0), E(-112, 0), + E( 113, 0), E(-113, 0), E( 114, 0), E(-114, 0), E( 115, 0), + E(-115, 0), E( 116, 0), E(-116, 0), E( 117, 0), E(-117, 0), + E( 118, 0), E(-118, 0), E( 119, 0), E(-119, 0), E( 120, 0), + E(-120, 0), E( 121, 0), E(-121, 0), E( 122, 0), E(-122, 0), + E( 123, 0), E(-123, 0), E( 124, 0), E(-124, 0), E( 125, 0), + E(-125, 0), E( 126, 0), E(-126, 0), E( 127, 0), E(-127, 0), + E( 128, 0), E(-128, 0), E( 129, 0), E(-129, 0), E( 130, 0), + E(-130, 0), E( 131, 0), E(-131, 0), E( 132, 0), E(-132, 0), + E( 133, 0), E(-133, 0), E( 134, 0), E(-134, 0), E( 135, 0), + E(-135, 0), E( 136, 0), E(-136, 0), E( 137, 0), E(-137, 0), + E( 138, 0), E(-138, 0), E( 139, 0), E(-139, 0), E( 140, 0), + E(-140, 0), E( 141, 0), E(-141, 0), E( 142, 0), E(-142, 0), + E( 143, 0), E(-143, 0), E( 144, 0), E(-144, 0), E( 145, 0), + E(-145, 0), E( 146, 0), E(-146, 0), E( 147, 0), E(-147, 0), + E( 148, 0), E(-148, 0), E( 149, 0), E(-149, 0), E( 150, 0), + E(-150, 0), E( 151, 0), E(-151, 0), E( 152, 0), E(-152, 0), + E( 153, 0), E(-153, 0), E( 154, 0), E(-154, 0), E( 155, 0), + E(-155, 0), E( 156, 0), E(-156, 0), E( 157, 0), E(-157, 0), + E( 158, 0), E(-158, 0), E( 159, 0), E(-159, 0), E( 160, 0), + E(-160, 0), E( 161, 0), E(-161, 0), E( 162, 0), E(-162, 0), + E( 163, 0), E(-163, 0), E( 164, 0), E(-164, 0), E( 165, 0), + E(-165, 0), E( 166, 0), E(-166, 0), E( 167, 0), E(-167, 0), + E( 168, 0), E(-168, 0), E( 169, 0), E(-169, 0), E( 170, 0), + E(-170, 0), E( 171, 0), E(-171, 0), E( 172, 0), E(-172, 0), + E( 173, 0), E(-173, 0), E( 174, 0), E(-174, 0), E( 175, 0), + E(-175, 0), E( 176, 0), E(-176, 0), E( 177, 0), E(-177, 0), + E( 178, 0), E(-178, 0), E( 179, 0), E(-179, 0), E( 180, 0), + E(-180, 0), E( 181, 0), E(-181, 0), E( 182, 0), E(-182, 0), + E( 183, 0), E(-183, 0), E( 184, 0), E(-184, 0), E( 185, 0), + E(-185, 0), E( 186, 0), E(-186, 0), E( 187, 0), E(-187, 0), + E( 188, 0), E(-188, 0), E( 189, 0), E(-189, 0), E( 190, 0), + E(-190, 0), E( 191, 0), E(-191, 0), E( 192, 0), E(-192, 0), + E( 193, 0), E(-193, 0), E( 194, 0), E(-194, 0), E( 195, 0), + E(-195, 0), E( 196, 0), E(-196, 0), E( 197, 0), E(-197, 0), + E( 198, 0), E(-198, 0), E( 199, 0), E(-199, 0), E( 200, 0), + E(-200, 0), E( 201, 0), E(-201, 0), E( 202, 0), E(-202, 0), + E( 203, 0), E(-203, 0), E( 204, 0), E(-204, 0), E( 205, 0), + E(-205, 0), E( 206, 0), E(-206, 0), E( 207, 0), E(-207, 0), + E( 208, 0), E(-208, 0), E( 209, 0), E(-209, 0), E( 210, 0), + E(-210, 0), E( 211, 0), E(-211, 0), E( 212, 0), E(-212, 0), + E( 213, 0), E(-213, 0), E( 214, 0), E(-214, 0), E( 215, 0), + E(-215, 0), E( 216, 0), E(-216, 0), E( 217, 0), E(-217, 0), + E( 218, 0), E(-218, 0), E( 219, 0), E(-219, 0), E( 220, 0), + E(-220, 0), E( 221, 0), E(-221, 0), E( 222, 0), E(-222, 0), + E( 223, 0), E(-223, 0), E( 224, 0), E(-224, 0), E( 225, 0), + E(-225, 0), E( 226, 0), E(-226, 0), E( 227, 0), E(-227, 0), + E( 228, 0), E(-228, 0), E( 229, 0), E(-229, 0), E( 230, 0), + E(-230, 0), E( 231, 0), E(-231, 0), E( 232, 0), E(-232, 0), + E( 233, 0), E(-233, 0), E( 234, 0), E(-234, 0), E( 235, 0), + E(-235, 0), E( 236, 0), E(-236, 0), E( 237, 0), E(-237, 0), + E( 238, 0), E(-238, 0), E( 239, 0), E(-239, 0), E( 240, 0), + E(-240, 0), E( 241, 0), E(-241, 0), E( 242, 0), E(-242, 0), + E( 243, 0), E(-243, 0), E( 244, 0), E(-244, 0), E( 245, 0), + E(-245, 0), E( 246, 0), E(-246, 0), E( 247, 0), E(-247, 0), + E( 248, 0), E(-248, 0), E( 249, 0), E(-249, 0), E( 250, 0), + E(-250, 0), E( 251, 0), E(-251, 0), E( 252, 0), E(-252, 0), + E( 253, 0), E(-253, 0), E( 254, 0), E(-254, 0), E( 255, 0), + E(-255, 0), E( 13, 0), E( -13, 0), E( 14, 0), E( -14, 0), + E( 15, 0), E( -15, 0), E( 16, 0), E( -16, 0), E( 17, 0), + E( -17, 0), E( 18, 0), E( -18, 0), E( 5, 1), E( -5, 1), + E( 6, 1), E( -6, 1), E( 2, 2), E( -2, 2), E( 1, 3), + E( -1, 3), E( 0, 0), E( 19, 0), E( -19, 0), E( 20, 0), + E( -20, 0), E( 21, 0), E( -21, 0), E( 22, 0), E( -22, 0), + E( 23, 0), E( -23, 0), E( 24, 0), E( -24, 0), E( 25, 0), + E( -25, 0), E( 7, 1), E( -7, 1), E( 8, 1), E( -8, 1), + E( 3, 2), E( -3, 2), E( 2, 3), E( -2, 3), E( 1, 4), + E( -1, 4), E( 1, 5), E( -1, 5), E( 26, 0), E( -26, 0), + E( 27, 0), E( -27, 0), E( 28, 0), E( -28, 0), E( 29, 0), + E( -29, 0), E( 30, 0), E( -30, 0), E( 31, 0), E( -31, 0), + E( 32, 0), E( -32, 0), E( 33, 0), E( -33, 0), E( 34, 0), + E( -34, 0), E( 35, 0), E( -35, 0), E( 36, 0), E( -36, 0), + E( 0, 1), E( 9, 1), E( -9, 1), E( 10, 1), E( -10, 1), + E( 11, 1), E( -11, 1), E( 12, 1), E( -12, 1), E( 0, 2), + E( 4, 2), E( -4, 2), E( 5, 2), E( -5, 2), E( 6, 2), + E( -6, 2), E( 0, 3), E( 3, 3), E( -3, 3), E( 4, 3), + E( -4, 3), E( 0, 4), E( 2, 4), E( -2, 4), E( 0, 5), + E( 1, 6), E( -1, 6), E( 1, 7), E( -1, 7), E( 1, 8), + E( -1, 8), E( 37, 0), E( -37, 0), E( 38, 0), E( -38, 0), + E( 39, 0), E( -39, 0), E( 40, 0), E( -40, 0), E( 41, 0), + E( -41, 0), E( 42, 0), E( -42, 0), E( 43, 0), E( -43, 0), + E( 44, 0), E( -44, 0), E( 45, 0), E( -45, 0), E( 46, 0), + E( -46, 0), E( 47, 0), E( -47, 0), E( 48, 0), E( -48, 0), + E( 13, 1), E( -13, 1), E( 14, 1), E( -14, 1), E( 15, 1), + E( -15, 1), E( 16, 1), E( -16, 1), E( 7, 2), E( -7, 2), + E( 8, 2), E( -8, 2), E( 5, 3), E( -5, 3), E( 6, 3), + E( -6, 3), E( 3, 4), E( -3, 4), E( 4, 4), E( -4, 4), + E( 2, 5), E( -2, 5), E( 0, 6), E( 2, 6), E( -2, 6), + E( 0, 7), E( 0, 8), E( 0, 9), E( 1, 9), E( -1, 9), + E( 1, 10), E( -1, 10), E( 1, 11), E( -1, 11), E( 1, 12), + E( -1, 12), E( 49, 0), E( -49, 0), E( 50, 0), E( -50, 0), + E( 51, 0), E( -51, 0), E( 52, 0), E( -52, 0), E( 53, 0), + E( -53, 0), E( 54, 0), E( -54, 0), E( 55, 0), E( -55, 0), + E( 56, 0), E( -56, 0), E( 57, 0), E( -57, 0), E( 58, 0), + E( -58, 0), E( 59, 0), E( -59, 0), E( 60, 0), E( -60, 0), + E( 61, 0), E( -61, 0), E( 62, 0), E( -62, 0), E( 63, 0), + E( -63, 0), E( 17, 1), E( -17, 1), E( 18, 1), E( -18, 1), + E( 19, 1), E( -19, 1), E( 20, 1), E( -20, 1), E( 21, 1), + E( -21, 1), E( 22, 1), E( -22, 1), E( 23, 1), E( -23, 1), + E( 24, 1), E( -24, 1), E( 9, 2), E( -9, 2), E( 10, 2), + E( -10, 2), E( 11, 2), E( -11, 2), E( 12, 2), E( -12, 2), + E( 7, 3), E( -7, 3), E( 8, 3), E( -8, 3), E( 5, 4), + E( -5, 4), E( 6, 4), E( -6, 4), E( 3, 5), E( -3, 5), + E( 4, 5), E( -4, 5), E( 5, 5), E( -5, 5), E( 6, 5), + E( -6, 5), E( 3, 6), E( -3, 6), E( 4, 6), E( -4, 6), + E( 2, 7), E( -2, 7), E( 2, 8), E( -2, 8), E( 2, 9), + E( -2, 9), E( 0, 10), E( 2, 10), E( -2, 10), E( 0, 11), + E( 0, 12), E( 0, 13), E( 1, 13), E( -1, 13), E( 1, 14), + E( -1, 14), E( 0, 0), E( 0, 1), E( 0, 2), E( 0, 3), + E( 0, 4), E( 0, 5), E( 0, 6), E( 0, 7), E( 0, 8), + E( 0, 9), E( 0, 10), E( 0, 11), E( 0, 12), E( 0, 13), + E( 0, 14), E( 0, 15), E( 0, 16), E( 0, 17), E( 0, 18), + E( 0, 19), E( 0, 20), E( 0, 21), E( 0, 22), E( 0, 23), + E( 0, 24), E( 0, 25), E( 0, 26), E( 0, 27), E( 0, 28), + E( 0, 29), E( 0, 30), E( 0, 31), E( 0, 32), E( 0, 33), + E( 0, 34), E( 0, 35), E( 0, 36), E( 0, 37), E( 0, 38), + E( 0, 39), E( 0, 40), E( 0, 41), E( 0, 42), E( 0, 43), + E( 0, 44), E( 0, 45), E( 0, 46), E( 0, 47), E( 0, 48), + E( 0, 49), E( 0, 50), E( 0, 51), E( 0, 52), E( 0, 53), + E( 0, 54), E( 0, 55), E( 0, 56), E( 0, 57), E( 0, 58), + E( 0, 59), E( 0, 60), E( 0, 61), E( 0, 62), E( 0, 63), + E( 25, 1), E( -25, 1), E( 26, 1), E( -26, 1), E( 27, 1), + E( -27, 1), E( 28, 1), E( -28, 1), E( 29, 1), E( -29, 1), + E( 30, 1), E( -30, 1), E( 31, 1), E( -31, 1), E( 32, 1), + E( -32, 1), E( 13, 2), E( -13, 2), E( 14, 2), E( -14, 2), + E( 15, 2), E( -15, 2), E( 16, 2), E( -16, 2), E( 9, 3), + E( -9, 3), E( 10, 3), E( -10, 3), E( 11, 3), E( -11, 3), + E( 7, 4), E( -7, 4), E( 3, 7), E( -3, 7), E( 4, 7), + E( -4, 7), E( 3, 8), E( -3, 8), E( 4, 8), E( -4, 8), + E( 3, 9), E( -3, 9), E( 2, 11), E( -2, 11), E( 2, 12), + E( -2, 12), E( 0, 14), + // AC table Q16 - 512 elements + E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), E( 3, 0), + E( -3, 0), E( 4, 0), E( -4, 0), E( 1, 1), E( -1, 1), + E( 0, 64), E( 5, 0), E( -5, 0), E( 6, 0), E( -6, 0), + E( 2, 1), E( -2, 1), E( 1, 2), E( -1, 2), E( 7, 0), + E( -7, 0), E( 8, 0), E( -8, 0), E( 9, 0), E( -9, 0), + E( 3, 1), E( -3, 1), E( 1, 3), E( -1, 3), E( 1, 4), + E( -1, 4), E( 10, 0), E( -10, 0), E( 11, 0), E( -11, 0), + E( 12, 0), E( -12, 0), E( 4, 1), E( -4, 1), E( 2, 2), + E( -2, 2), E( 1, 5), E( -1, 5), E( 1, 6), E( -1, 6), + E( 13, 0), E( -13, 0), E( 14, 0), E( -14, 0), E( 15, 0), + E( -15, 0), E( 16, 0), E( -16, 0), E( 17, 0), E( -17, 0), + E( 5, 1), E( -5, 1), E( 2, 3), E( -2, 3), E( 1, 7), + E( -1, 7), E( 1, 8), E( -1, 8), E( 1, 9), E( -1, 9), + E( 1, 10), E( -1, 10), E( 0, 0), E( 18, 0), E( -18, 0), + E( 19, 0), E( -19, 0), E( 20, 0), E( -20, 0), E( 21, 0), + E( -21, 0), E( 22, 0), E( -22, 0), E( 6, 1), E( -6, 1), + E( 7, 1), E( -7, 1), E( 3, 2), E( -3, 2), E( 2, 4), + E( -2, 4), E( 2, 5), E( -2, 5), E( 1, 11), E( -1, 11), + E( 1, 12), E( -1, 12), E( 1, 13), E( -1, 13), E( 0, 0), + E( 0, 1), E( 0, 2), E( 0, 3), E( 0, 4), E( 0, 5), + E( 0, 6), E( 0, 7), E( 0, 8), E( 0, 9), E( 0, 10), + E( 0, 11), E( 0, 12), E( 0, 13), E( 0, 14), E( 0, 15), + E( 0, 16), E( 0, 17), E( 0, 18), E( 0, 19), E( 0, 20), + E( 0, 21), E( 0, 22), E( 0, 23), E( 0, 24), E( 0, 25), + E( 0, 26), E( 0, 27), E( 0, 28), E( 0, 29), E( 0, 30), + E( 0, 31), E( 0, 32), E( 0, 33), E( 0, 34), E( 0, 35), + E( 0, 36), E( 0, 37), E( 0, 38), E( 0, 39), E( 0, 40), + E( 0, 41), E( 0, 42), E( 0, 43), E( 0, 44), E( 0, 45), + E( 0, 46), E( 0, 47), E( 0, 48), E( 0, 49), E( 0, 50), + E( 0, 51), E( 0, 52), E( 0, 53), E( 0, 54), E( 0, 55), + E( 0, 56), E( 0, 57), E( 0, 58), E( 0, 59), E( 0, 60), + E( 0, 61), E( 0, 62), E( 0, 63), E( 0, 0), E( 1, 0), + E( -1, 0), E( 2, 0), E( -2, 0), E( 3, 0), E( -3, 0), + E( 4, 0), E( -4, 0), E( 5, 0), E( -5, 0), E( 6, 0), + E( -6, 0), E( 7, 0), E( -7, 0), E( 8, 0), E( -8, 0), + E( 9, 0), E( -9, 0), E( 10, 0), E( -10, 0), E( 11, 0), + E( -11, 0), E( 12, 0), E( -12, 0), E( 13, 0), E( -13, 0), + E( 14, 0), E( -14, 0), E( 15, 0), E( -15, 0), E( 16, 0), + E( -16, 0), E( 17, 0), E( -17, 0), E( 18, 0), E( -18, 0), + E( 19, 0), E( -19, 0), E( 20, 0), E( -20, 0), E( 21, 0), + E( -21, 0), E( 22, 0), E( -22, 0), E( 23, 0), E( -23, 0), + E( 24, 0), E( -24, 0), E( 25, 0), E( -25, 0), E( 26, 0), + E( -26, 0), E( 27, 0), E( -27, 0), E( 28, 0), E( -28, 0), + E( 29, 0), E( -29, 0), E( 30, 0), E( -30, 0), E( 31, 0), + E( -31, 0), E( 32, 0), E( -32, 0), E( 33, 0), E( -33, 0), + E( 34, 0), E( -34, 0), E( 35, 0), E( -35, 0), E( 36, 0), + E( -36, 0), E( 37, 0), E( -37, 0), E( 38, 0), E( -38, 0), + E( 39, 0), E( -39, 0), E( 40, 0), E( -40, 0), E( 41, 0), + E( -41, 0), E( 42, 0), E( -42, 0), E( 43, 0), E( -43, 0), + E( 44, 0), E( -44, 0), E( 45, 0), E( -45, 0), E( 46, 0), + E( -46, 0), E( 47, 0), E( -47, 0), E( 48, 0), E( -48, 0), + E( 49, 0), E( -49, 0), E( 50, 0), E( -50, 0), E( 51, 0), + E( -51, 0), E( 52, 0), E( -52, 0), E( 53, 0), E( -53, 0), + E( 54, 0), E( -54, 0), E( 55, 0), E( -55, 0), E( 56, 0), + E( -56, 0), E( 57, 0), E( -57, 0), E( 58, 0), E( -58, 0), + E( 59, 0), E( -59, 0), E( 60, 0), E( -60, 0), E( 61, 0), + E( -61, 0), E( 62, 0), E( -62, 0), E( 63, 0), E( -63, 0), + E( 64, 0), E( -64, 0), E( 65, 0), E( -65, 0), E( 66, 0), + E( -66, 0), E( 67, 0), E( -67, 0), E( 68, 0), E( -68, 0), + E( 69, 0), E( -69, 0), E( 70, 0), E( -70, 0), E( 71, 0), + E( -71, 0), E( 72, 0), E( -72, 0), E( 73, 0), E( -73, 0), + E( 74, 0), E( -74, 0), E( 75, 0), E( -75, 0), E( 76, 0), + E( -76, 0), E( 77, 0), E( -77, 0), E( 78, 0), E( -78, 0), + E( 79, 0), E( -79, 0), E( 80, 0), E( -80, 0), E( 81, 0), + E( -81, 0), E( 82, 0), E( -82, 0), E( 83, 0), E( -83, 0), + E( 84, 0), E( -84, 0), E( 85, 0), E( -85, 0), E( 86, 0), + E( -86, 0), E( 87, 0), E( -87, 0), E( 88, 0), E( -88, 0), + E( 89, 0), E( -89, 0), E( 90, 0), E( -90, 0), E( 91, 0), + E( -91, 0), E( 92, 0), E( -92, 0), E( 93, 0), E( -93, 0), + E( 94, 0), E( -94, 0), E( 95, 0), E( -95, 0), E( 96, 0), + E( -96, 0), E( 97, 0), E( -97, 0), E( 98, 0), E( -98, 0), + E( 99, 0), E( -99, 0), E( 100, 0), E(-100, 0), E( 101, 0), + E(-101, 0), E( 102, 0), E(-102, 0), E( 103, 0), E(-103, 0), + E( 104, 0), E(-104, 0), E( 105, 0), E(-105, 0), E( 106, 0), + E(-106, 0), E( 107, 0), E(-107, 0), E( 108, 0), E(-108, 0), + E( 109, 0), E(-109, 0), E( 110, 0), E(-110, 0), E( 111, 0), + E(-111, 0), E( 112, 0), E(-112, 0), E( 113, 0), E(-113, 0), + E( 114, 0), E(-114, 0), E( 115, 0), E(-115, 0), E( 116, 0), + E(-116, 0), E( 117, 0), E(-117, 0), E( 118, 0), E(-118, 0), + E( 119, 0), E(-119, 0), E( 120, 0), E(-120, 0), E( 121, 0), + E(-121, 0), E( 122, 0), E(-122, 0), E( 123, 0), E(-123, 0), + E( 124, 0), E(-124, 0), E( 125, 0), E(-125, 0), E( 126, 0), + E(-126, 0), E( 127, 0), E(-127, 0), E( 23, 0), E( -23, 0), + E( 24, 0), E( -24, 0), E( 25, 0), E( -25, 0), E( 26, 0), + E( -26, 0), E( 27, 0), E( -27, 0), E( 28, 0), E( -28, 0), + E( 8, 1), E( -8, 1), E( 9, 1), E( -9, 1), E( 4, 2), + E( -4, 2), E( 3, 3), E( -3, 3), E( 3, 4), E( -3, 4), + E( 2, 6), E( -2, 6), E( 2, 7), E( -2, 7), E( 29, 0), + E( -29, 0), E( 30, 0), E( -30, 0), E( 31, 0), E( -31, 0), + E( 32, 0), E( -32, 0), E( 33, 0), E( -33, 0), E( 34, 0), + E( -34, 0), E( 35, 0), E( -35, 0), E( 0, 1), E( 10, 1), + E( -10, 1), E( 11, 1), E( -11, 1), E( 12, 1), E( -12, 1), + E( 0, 2), E( 5, 2), E( -5, 2), E( 0, 3), E( 4, 3), + E( -4, 3), E( 3, 5), E( -3, 5), E( 2, 8), E( -2, 8), + E( 2, 9), E( -2, 9), E( 1, 14), E( -1, 14), E( 1, 15), + E( -1, 15), E( 36, 0), E( -36, 0), E( 37, 0), E( -37, 0), + E( 38, 0), E( -38, 0), E( 39, 0), E( -39, 0), E( 40, 0), + E( -40, 0), E( 13, 1), E( -13, 1), E( 14, 1), E( -14, 1), + E( 15, 1), E( -15, 1), E( 6, 2), E( -6, 2), E( 7, 2), + E( -7, 2), E( 5, 3), E( -5, 3), E( 0, 4), E( 4, 4), + E( -4, 4), E( 0, 5), E( 0, 6), E( 3, 6), E( -3, 6), + E( 0, 7), E( 3, 7), E( -3, 7), E( 2, 10), E( -2, 10), + E( 1, 16), E( -1, 16), + // AC table Q32 - 354 elements + E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), E( 0, 64), E( 3, 0), + E( -3, 0), E( 1, 1), E( -1, 1), E( 4, 0), E( -4, 0), E( 5, 0), + E( -5, 0), E( 2, 1), E( -2, 1), E( 1, 2), E( -1, 2), E( 1, 3), + E( -1, 3), E( 6, 0), E( -6, 0), E( 7, 0), E( -7, 0), E( 3, 1), + E( -3, 1), E( 1, 4), E( -1, 4), E( 1, 5), E( -1, 5), E( 8, 0), + E( -8, 0), E( 9, 0), E( -9, 0), E( 10, 0), E(-10, 0), E( 4, 1), + E( -4, 1), E( 2, 2), E( -2, 2), E( 1, 6), E( -1, 6), E( 1, 7), + E( -1, 7), E( 1, 8), E( -1, 8), E( 11, 0), E(-11, 0), E( 12, 0), + E(-12, 0), E( 13, 0), E(-13, 0), E( 5, 1), E( -5, 1), E( 2, 3), + E( -2, 3), E( 1, 9), E( -1, 9), E( 1, 10), E( -1, 10), E( 14, 0), + E(-14, 0), E( 15, 0), E(-15, 0), E( 16, 0), E(-16, 0), E( 6, 1), + E( -6, 1), E( 7, 1), E( -7, 1), E( 3, 2), E( -3, 2), E( 3, 3), + E( -3, 3), E( 2, 4), E( -2, 4), E( 2, 5), E( -2, 5), E( 1, 11), + E( -1, 11), E( 1, 12), E( -1, 12), E( 1, 13), E( -1, 13), E( 0, 0), + E( 0, 1), E( 0, 2), E( 0, 3), E( 0, 4), E( 0, 5), E( 0, 6), + E( 0, 7), E( 0, 8), E( 0, 9), E( 0, 10), E( 0, 11), E( 0, 12), + E( 0, 13), E( 0, 14), E( 0, 15), E( 0, 16), E( 0, 17), E( 0, 18), + E( 0, 19), E( 0, 20), E( 0, 21), E( 0, 22), E( 0, 23), E( 0, 24), + E( 0, 25), E( 0, 26), E( 0, 27), E( 0, 28), E( 0, 29), E( 0, 30), + E( 0, 31), E( 0, 32), E( 0, 33), E( 0, 34), E( 0, 35), E( 0, 36), + E( 0, 37), E( 0, 38), E( 0, 39), E( 0, 40), E( 0, 41), E( 0, 42), + E( 0, 43), E( 0, 44), E( 0, 45), E( 0, 46), E( 0, 47), E( 0, 48), + E( 0, 49), E( 0, 50), E( 0, 51), E( 0, 52), E( 0, 53), E( 0, 54), + E( 0, 55), E( 0, 56), E( 0, 57), E( 0, 58), E( 0, 59), E( 0, 60), + E( 0, 61), E( 0, 62), E( 0, 63), E( 0, 0), E( 17, 0), E(-17, 0), + E( 18, 0), E(-18, 0), E( 19, 0), E(-19, 0), E( 20, 0), E(-20, 0), + E( 8, 1), E( -8, 1), E( 9, 1), E( -9, 1), E( 4, 2), E( -4, 2), + E( 3, 4), E( -3, 4), E( 2, 6), E( -2, 6), E( 2, 7), E( -2, 7), + E( 2, 8), E( -2, 8), E( 1, 14), E( -1, 14), E( 0, 0), E( 1, 0), + E( -1, 0), E( 2, 0), E( -2, 0), E( 3, 0), E( -3, 0), E( 4, 0), + E( -4, 0), E( 5, 0), E( -5, 0), E( 6, 0), E( -6, 0), E( 7, 0), + E( -7, 0), E( 8, 0), E( -8, 0), E( 9, 0), E( -9, 0), E( 10, 0), + E(-10, 0), E( 11, 0), E(-11, 0), E( 12, 0), E(-12, 0), E( 13, 0), + E(-13, 0), E( 14, 0), E(-14, 0), E( 15, 0), E(-15, 0), E( 16, 0), + E(-16, 0), E( 17, 0), E(-17, 0), E( 18, 0), E(-18, 0), E( 19, 0), + E(-19, 0), E( 20, 0), E(-20, 0), E( 21, 0), E(-21, 0), E( 22, 0), + E(-22, 0), E( 23, 0), E(-23, 0), E( 24, 0), E(-24, 0), E( 25, 0), + E(-25, 0), E( 26, 0), E(-26, 0), E( 27, 0), E(-27, 0), E( 28, 0), + E(-28, 0), E( 29, 0), E(-29, 0), E( 30, 0), E(-30, 0), E( 31, 0), + E(-31, 0), E( 32, 0), E(-32, 0), E( 33, 0), E(-33, 0), E( 34, 0), + E(-34, 0), E( 35, 0), E(-35, 0), E( 36, 0), E(-36, 0), E( 37, 0), + E(-37, 0), E( 38, 0), E(-38, 0), E( 39, 0), E(-39, 0), E( 40, 0), + E(-40, 0), E( 41, 0), E(-41, 0), E( 42, 0), E(-42, 0), E( 43, 0), + E(-43, 0), E( 44, 0), E(-44, 0), E( 45, 0), E(-45, 0), E( 46, 0), + E(-46, 0), E( 47, 0), E(-47, 0), E( 48, 0), E(-48, 0), E( 49, 0), + E(-49, 0), E( 50, 0), E(-50, 0), E( 51, 0), E(-51, 0), E( 52, 0), + E(-52, 0), E( 53, 0), E(-53, 0), E( 54, 0), E(-54, 0), E( 55, 0), + E(-55, 0), E( 56, 0), E(-56, 0), E( 57, 0), E(-57, 0), E( 58, 0), + E(-58, 0), E( 59, 0), E(-59, 0), E( 60, 0), E(-60, 0), E( 61, 0), + E(-61, 0), E( 62, 0), E(-62, 0), E( 63, 0), E(-63, 0), E( 21, 0), + E(-21, 0), E( 22, 0), E(-22, 0), E( 23, 0), E(-23, 0), E( 0, 1), + E( 10, 1), E(-10, 1), E( 11, 1), E(-11, 1), E( 0, 2), E( 5, 2), + E( -5, 2), E( 6, 2), E( -6, 2), E( 0, 3), E( 4, 3), E( -4, 3), + E( 0, 4), E( 3, 5), E( -3, 5), E( 3, 6), E( -3, 6), E( 2, 9), + E( -2, 9), E( 1, 15), E( -1, 15), E( 24, 0), E(-24, 0), E( 25, 0), + E(-25, 0), E( 26, 0), E(-26, 0), E( 12, 1), E(-12, 1), E( 13, 1), + E(-13, 1), E( 5, 3), E( -5, 3), E( 4, 4), E( -4, 4), E( 0, 5), + E( 4, 5), E( -4, 5), E( 0, 6), E( 0, 7), E( 3, 7), E( -3, 7), + E( 0, 8), E( 3, 8), E( -3, 8), E( 0, 9), E( 1, 16), E( -1, 16), + // AC table Q64 - 257 elements + E( 1, 0), E( -1, 0), E( 0, 64), E( 2, 0), E( -2, 0), E( 3, 0), + E( -3, 0), E( 1, 1), E( -1, 1), E( 4, 0), E( -4, 0), E( 2, 1), + E( -2, 1), E( 1, 2), E( -1, 2), E( 5, 0), E( -5, 0), E( 1, 3), + E( -1, 3), E( 1, 4), E( -1, 4), E( 6, 0), E( -6, 0), E( 3, 1), + E( -3, 1), E( 2, 2), E( -2, 2), E( 1, 5), E( -1, 5), E( 1, 6), + E( -1, 6), E( 1, 7), E( -1, 7), E( 7, 0), E( -7, 0), E( 8, 0), + E( -8, 0), E( 4, 1), E( -4, 1), E( 2, 3), E( -2, 3), E( 1, 8), + E( -1, 8), E( 1, 9), E( -1, 9), E( 9, 0), E( -9, 0), E( 10, 0), + E(-10, 0), E( 5, 1), E( -5, 1), E( 3, 2), E( -3, 2), E( 2, 4), + E( -2, 4), E( 2, 5), E( -2, 5), E( 1, 10), E( -1, 10), E( 1, 11), + E( -1, 11), E( 0, 0), E( 0, 1), E( 0, 2), E( 0, 3), E( 0, 4), + E( 0, 5), E( 0, 6), E( 0, 7), E( 0, 8), E( 0, 9), E( 0, 10), + E( 0, 11), E( 0, 12), E( 0, 13), E( 0, 14), E( 0, 15), E( 0, 16), + E( 0, 17), E( 0, 18), E( 0, 19), E( 0, 20), E( 0, 21), E( 0, 22), + E( 0, 23), E( 0, 24), E( 0, 25), E( 0, 26), E( 0, 27), E( 0, 28), + E( 0, 29), E( 0, 30), E( 0, 31), E( 0, 32), E( 0, 33), E( 0, 34), + E( 0, 35), E( 0, 36), E( 0, 37), E( 0, 38), E( 0, 39), E( 0, 40), + E( 0, 41), E( 0, 42), E( 0, 43), E( 0, 44), E( 0, 45), E( 0, 46), + E( 0, 47), E( 0, 48), E( 0, 49), E( 0, 50), E( 0, 51), E( 0, 52), + E( 0, 53), E( 0, 54), E( 0, 55), E( 0, 56), E( 0, 57), E( 0, 58), + E( 0, 59), E( 0, 60), E( 0, 61), E( 0, 62), E( 0, 63), E( 0, 0), + E( 11, 0), E(-11, 0), E( 12, 0), E(-12, 0), E( 6, 1), E( -6, 1), + E( 7, 1), E( -7, 1), E( 3, 3), E( -3, 3), E( 3, 4), E( -3, 4), + E( 3, 5), E( -3, 5), E( 2, 6), E( -2, 6), E( 2, 7), E( -2, 7), + E( 1, 12), E( -1, 12), E( 1, 13), E( -1, 13), E( 1, 14), E( -1, 14), + E( 13, 0), E(-13, 0), E( 14, 0), E(-14, 0), E( 0, 1), E( 8, 1), + E( -8, 1), E( 4, 2), E( -4, 2), E( 4, 3), E( -4, 3), E( 2, 8), + E( -2, 8), E( 2, 9), E( -2, 9), E( 1, 15), E( -1, 15), E( 0, 0), + E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), E( 3, 0), E( -3, 0), + E( 4, 0), E( -4, 0), E( 5, 0), E( -5, 0), E( 6, 0), E( -6, 0), + E( 7, 0), E( -7, 0), E( 8, 0), E( -8, 0), E( 9, 0), E( -9, 0), + E( 10, 0), E(-10, 0), E( 11, 0), E(-11, 0), E( 12, 0), E(-12, 0), + E( 13, 0), E(-13, 0), E( 14, 0), E(-14, 0), E( 15, 0), E(-15, 0), + E( 16, 0), E(-16, 0), E( 17, 0), E(-17, 0), E( 18, 0), E(-18, 0), + E( 19, 0), E(-19, 0), E( 20, 0), E(-20, 0), E( 21, 0), E(-21, 0), + E( 22, 0), E(-22, 0), E( 23, 0), E(-23, 0), E( 24, 0), E(-24, 0), + E( 25, 0), E(-25, 0), E( 26, 0), E(-26, 0), E( 27, 0), E(-27, 0), + E( 28, 0), E(-28, 0), E( 29, 0), E(-29, 0), E( 30, 0), E(-30, 0), + E( 31, 0), E(-31, 0), E( 15, 0), E(-15, 0), E( 9, 1), E( -9, 1), + E( 10, 1), E(-10, 1), E( 0, 2), E( 5, 2), E( -5, 2), E( 0, 3), + E( 5, 3), E( -5, 3), E( 0, 4), E( 4, 4), E( -4, 4), E( 0, 5), + E( 4, 5), E( -4, 5), E( 0, 6), E( 3, 6), E( -3, 6), E( 3, 7), + E( -3, 7), E( 1, 16), E( -1, 16), E( 1, 17), E( -1, 17), + // AC table Q128 - 194 elements + E( 1, 0), E( -1, 0), E( 0, 64), E( 1, 1), E( -1, 1), E( 2, 0), + E( -2, 0), E( 3, 0), E( -3, 0), E( 2, 1), E( -2, 1), E( 1, 2), + E( -1, 2), E( 1, 3), E( -1, 3), E( 1, 4), E( -1, 4), E( 4, 0), + E( -4, 0), E( 1, 5), E( -1, 5), E( 1, 6), E( -1, 6), E( 1, 7), + E( -1, 7), E( 5, 0), E( -5, 0), E( 3, 1), E( -3, 1), E( 2, 2), + E( -2, 2), E( 2, 3), E( -2, 3), E( 1, 8), E( -1, 8), E( 1, 9), + E( -1, 9), E( 6, 0), E( -6, 0), E( 4, 1), E( -4, 1), E( 2, 4), + E( -2, 4), E( 2, 5), E( -2, 5), E( 1, 10), E( -1, 10), E( 7, 0), + E( -7, 0), E( 5, 1), E( -5, 1), E( 3, 2), E( -3, 2), E( 3, 3), + E( -3, 3), E( 2, 6), E( -2, 6), E( 0, 0), E( 0, 1), E( 0, 2), + E( 0, 3), E( 0, 4), E( 0, 5), E( 0, 6), E( 0, 7), E( 0, 8), + E( 0, 9), E( 0, 10), E( 0, 11), E( 0, 12), E( 0, 13), E( 0, 14), + E( 0, 15), E( 0, 16), E( 0, 17), E( 0, 18), E( 0, 19), E( 0, 20), + E( 0, 21), E( 0, 22), E( 0, 23), E( 0, 24), E( 0, 25), E( 0, 26), + E( 0, 27), E( 0, 28), E( 0, 29), E( 0, 30), E( 0, 31), E( 0, 32), + E( 0, 33), E( 0, 34), E( 0, 35), E( 0, 36), E( 0, 37), E( 0, 38), + E( 0, 39), E( 0, 40), E( 0, 41), E( 0, 42), E( 0, 43), E( 0, 44), + E( 0, 45), E( 0, 46), E( 0, 47), E( 0, 48), E( 0, 49), E( 0, 50), + E( 0, 51), E( 0, 52), E( 0, 53), E( 0, 54), E( 0, 55), E( 0, 56), + E( 0, 57), E( 0, 58), E( 0, 59), E( 0, 60), E( 0, 61), E( 0, 62), + E( 0, 63), E( 6, 1), E( -6, 1), E( 7, 1), E( -7, 1), E( 3, 4), + E( -3, 4), E( 3, 5), E( -3, 5), E( 2, 7), E( -2, 7), E( 2, 8), + E( -2, 8), E( 2, 9), E( -2, 9), E( 1, 11), E( -1, 11), E( 1, 12), + E( -1, 12), E( 1, 13), E( -1, 13), E( 0, 0), E( 8, 0), E( -8, 0), + E( 9, 0), E( -9, 0), E( 8, 1), E( -8, 1), E( 4, 2), E( -4, 2), + E( 4, 3), E( -4, 3), E( 3, 6), E( -3, 6), E( 1, 14), E( -1, 14), + E( 1, 15), E( -1, 15), E( 1, 16), E( -1, 16), E( 0, 1), E( 0, 2), + E( 0, 3), E( 0, 0), E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), + E( 3, 0), E( -3, 0), E( 4, 0), E( -4, 0), E( 5, 0), E( -5, 0), + E( 6, 0), E( -6, 0), E( 7, 0), E( -7, 0), E( 8, 0), E( -8, 0), + E( 9, 0), E( -9, 0), E( 10, 0), E(-10, 0), E( 11, 0), E(-11, 0), + E( 12, 0), E(-12, 0), E( 13, 0), E(-13, 0), E( 14, 0), E(-14, 0), + E( 15, 0), E(-15, 0), }; -static const HQXLUT ac32_lut[] = { - RPT_256 ( 1, 0, 3 ), RPT_256 ( -1, 0, 3 ), - RPT_128 ( 2, 0, 4 ), RPT_128 ( -2, 0, 4 ), - RPT_256 ( 0, 64, 3 ), RPT_64 ( 3, 0, 5 ), - RPT_64 ( -3, 0, 5 ), RPT_64 ( 1, 1, 5 ), - RPT_64 ( -1, 1, 5 ), RPT_32 ( 4, 0, 6 ), - RPT_32 ( -4, 0, 6 ), RPT_32 ( 5, 0, 6 ), - RPT_32 ( -5, 0, 6 ), RPT_32 ( 2, 1, 6 ), - RPT_32 ( -2, 1, 6 ), RPT_32 ( 1, 2, 6 ), - RPT_32 ( -1, 2, 6 ), RPT_32 ( 1, 3, 6 ), - RPT_32 ( -1, 3, 6 ), RPT_16 ( 6, 0, 7 ), - RPT_16 ( -6, 0, 7 ), RPT_16 ( 7, 0, 7 ), - RPT_16 ( -7, 0, 7 ), RPT_16 ( 3, 1, 7 ), - RPT_16 ( -3, 1, 7 ), RPT_16 ( 1, 4, 7 ), - RPT_16 ( -1, 4, 7 ), RPT_16 ( 1, 5, 7 ), - RPT_16 ( -1, 5, 7 ), RPT_8 ( 8, 0, 8 ), - RPT_8 ( -8, 0, 8 ), RPT_8 ( 9, 0, 8 ), - RPT_8 ( -9, 0, 8 ), RPT_8 ( 10, 0, 8 ), - RPT_8 ( -10, 0, 8 ), RPT_8 ( 4, 1, 8 ), - RPT_8 ( -4, 1, 8 ), RPT_8 ( 2, 2, 8 ), - RPT_8 ( -2, 2, 8 ), RPT_8 ( 1, 6, 8 ), - RPT_8 ( -1, 6, 8 ), RPT_8 ( 1, 7, 8 ), - RPT_8 ( -1, 7, 8 ), RPT_8 ( 1, 8, 8 ), - RPT_8 ( -1, 8, 8 ), RPT_4 ( 11, 0, 9 ), - RPT_4 ( -11, 0, 9 ), RPT_4 ( 12, 0, 9 ), - RPT_4 ( -12, 0, 9 ), RPT_4 ( 13, 0, 9 ), - RPT_4 ( -13, 0, 9 ), RPT_4 ( 5, 1, 9 ), - RPT_4 ( -5, 1, 9 ), RPT_4 ( 2, 3, 9 ), - RPT_4 ( -2, 3, 9 ), RPT_4 ( 1, 9, 9 ), - RPT_4 ( -1, 9, 9 ), RPT_4 ( 1, 10, 9 ), - RPT_4 ( -1, 10, 9 ), RPT_2 ( 14, 0, 10 ), - RPT_2 ( -14, 0, 10 ), RPT_2 ( 15, 0, 10 ), - RPT_2 ( -15, 0, 10 ), RPT_2 ( 16, 0, 10 ), - RPT_2 ( -16, 0, 10 ), RPT_2 ( 6, 1, 10 ), - RPT_2 ( -6, 1, 10 ), RPT_2 ( 7, 1, 10 ), - RPT_2 ( -7, 1, 10 ), RPT_2 ( 3, 2, 10 ), - RPT_2 ( -3, 2, 10 ), RPT_2 ( 3, 3, 10 ), - RPT_2 ( -3, 3, 10 ), RPT_2 ( 2, 4, 10 ), - RPT_2 ( -2, 4, 10 ), RPT_2 ( 2, 5, 10 ), - RPT_2 ( -2, 5, 10 ), RPT_2 ( 1, 11, 10 ), - RPT_2 ( -1, 11, 10 ), RPT_2 ( 1, 12, 10 ), - RPT_2 ( -1, 12, 10 ), RPT_2 ( 1, 13, 10 ), - RPT_2 ( -1, 13, 10 ), { 2048, 0, -1 }, { 2112, 0, -1 }, - { 2176, 0, -1 }, { 2240, 0, -1 }, RPT_2 ( 0, 0, 10 ), - { 17, 0, 11 }, { -17, 0, 11 }, { 18, 0, 11 }, { -18, 0, 11 }, - { 19, 0, 11 }, { -19, 0, 11 }, { 20, 0, 11 }, { -20, 0, 11 }, - { 8, 1, 11 }, { -8, 1, 11 }, { 9, 1, 11 }, { -9, 1, 11 }, - { 4, 2, 11 }, { -4, 2, 11 }, { 3, 4, 11 }, { -3, 4, 11 }, - { 2, 6, 11 }, { -2, 6, 11 }, { 2, 7, 11 }, { -2, 7, 11 }, - { 2, 8, 11 }, { -2, 8, 11 }, { 1, 14, 11 }, { -1, 14, 11 }, - { 2304, 0, -1 }, { 2368, 0, -1 }, { 2432, 0, -1 }, { 2496, 0, -1 }, - { 2560, 0, -1 }, { 0, 1, 11 }, { 2624, 0, -1 }, { 2688, 0, -1 }, - { 0, 2, 11 }, { 2752, 0, -1 }, { 2816, 0, -1 }, { 0, 3, 11 }, - { 2880, 0, -1 }, { 0, 4, 11 }, { 2944, 0, -1 }, { 3008, 0, -1 }, - { 3072, 0, -1 }, { 3136, 0, -1 }, { 3200, 0, -1 }, { 3264, 0, -1 }, - { 3328, 0, -1 }, { 3392, 0, -1 }, { 3456, 0, -1 }, { 3520, 0, -1 }, - { 3584, 0, -1 }, { 3648, 0, -1 }, RPT_4 ( 0, 0, 15 ), - RPT_4 ( 0, 1, 15 ), RPT_4 ( 0, 2, 15 ), - RPT_4 ( 0, 3, 15 ), RPT_4 ( 0, 4, 15 ), - RPT_4 ( 0, 5, 15 ), RPT_4 ( 0, 6, 15 ), - RPT_4 ( 0, 7, 15 ), RPT_4 ( 0, 8, 15 ), - RPT_4 ( 0, 9, 15 ), RPT_4 ( 0, 10, 15 ), - RPT_4 ( 0, 11, 15 ), RPT_4 ( 0, 12, 15 ), - RPT_4 ( 0, 13, 15 ), RPT_4 ( 0, 14, 15 ), - RPT_4 ( 0, 15, 15 ), RPT_4 ( 0, 16, 15 ), - RPT_4 ( 0, 17, 15 ), RPT_4 ( 0, 18, 15 ), - RPT_4 ( 0, 19, 15 ), RPT_4 ( 0, 20, 15 ), - RPT_4 ( 0, 21, 15 ), RPT_4 ( 0, 22, 15 ), - RPT_4 ( 0, 23, 15 ), RPT_4 ( 0, 24, 15 ), - RPT_4 ( 0, 25, 15 ), RPT_4 ( 0, 26, 15 ), - RPT_4 ( 0, 27, 15 ), RPT_4 ( 0, 28, 15 ), - RPT_4 ( 0, 29, 15 ), RPT_4 ( 0, 30, 15 ), - RPT_4 ( 0, 31, 15 ), RPT_4 ( 0, 32, 15 ), - RPT_4 ( 0, 33, 15 ), RPT_4 ( 0, 34, 15 ), - RPT_4 ( 0, 35, 15 ), RPT_4 ( 0, 36, 15 ), - RPT_4 ( 0, 37, 15 ), RPT_4 ( 0, 38, 15 ), - RPT_4 ( 0, 39, 15 ), RPT_4 ( 0, 40, 15 ), - RPT_4 ( 0, 41, 15 ), RPT_4 ( 0, 42, 15 ), - RPT_4 ( 0, 43, 15 ), RPT_4 ( 0, 44, 15 ), - RPT_4 ( 0, 45, 15 ), RPT_4 ( 0, 46, 15 ), - RPT_4 ( 0, 47, 15 ), RPT_4 ( 0, 48, 15 ), - RPT_4 ( 0, 49, 15 ), RPT_4 ( 0, 50, 15 ), - RPT_4 ( 0, 51, 15 ), RPT_4 ( 0, 52, 15 ), - RPT_4 ( 0, 53, 15 ), RPT_4 ( 0, 54, 15 ), - RPT_4 ( 0, 55, 15 ), RPT_4 ( 0, 56, 15 ), - RPT_4 ( 0, 57, 15 ), RPT_4 ( 0, 58, 15 ), - RPT_4 ( 0, 59, 15 ), RPT_4 ( 0, 60, 15 ), - RPT_4 ( 0, 61, 15 ), RPT_4 ( 0, 62, 15 ), - RPT_4 ( 0, 63, 15 ), RPT_2 ( 0, 0, 16 ), - { 1, 0, 17 }, { -1, 0, 17 }, { 2, 0, 17 }, { -2, 0, 17 }, - { 3, 0, 17 }, { -3, 0, 17 }, { 4, 0, 17 }, { -4, 0, 17 }, - { 5, 0, 17 }, { -5, 0, 17 }, { 6, 0, 17 }, { -6, 0, 17 }, - { 7, 0, 17 }, { -7, 0, 17 }, { 8, 0, 17 }, { -8, 0, 17 }, - { 9, 0, 17 }, { -9, 0, 17 }, { 10, 0, 17 }, { -10, 0, 17 }, - { 11, 0, 17 }, { -11, 0, 17 }, { 12, 0, 17 }, { -12, 0, 17 }, - { 13, 0, 17 }, { -13, 0, 17 }, { 14, 0, 17 }, { -14, 0, 17 }, - { 15, 0, 17 }, { -15, 0, 17 }, { 16, 0, 17 }, { -16, 0, 17 }, - { 17, 0, 17 }, { -17, 0, 17 }, { 18, 0, 17 }, { -18, 0, 17 }, - { 19, 0, 17 }, { -19, 0, 17 }, { 20, 0, 17 }, { -20, 0, 17 }, - { 21, 0, 17 }, { -21, 0, 17 }, { 22, 0, 17 }, { -22, 0, 17 }, - { 23, 0, 17 }, { -23, 0, 17 }, { 24, 0, 17 }, { -24, 0, 17 }, - { 25, 0, 17 }, { -25, 0, 17 }, { 26, 0, 17 }, { -26, 0, 17 }, - { 27, 0, 17 }, { -27, 0, 17 }, { 28, 0, 17 }, { -28, 0, 17 }, - { 29, 0, 17 }, { -29, 0, 17 }, { 30, 0, 17 }, { -30, 0, 17 }, - { 31, 0, 17 }, { -31, 0, 17 }, { 32, 0, 17 }, { -32, 0, 17 }, - { 33, 0, 17 }, { -33, 0, 17 }, { 34, 0, 17 }, { -34, 0, 17 }, - { 35, 0, 17 }, { -35, 0, 17 }, { 36, 0, 17 }, { -36, 0, 17 }, - { 37, 0, 17 }, { -37, 0, 17 }, { 38, 0, 17 }, { -38, 0, 17 }, - { 39, 0, 17 }, { -39, 0, 17 }, { 40, 0, 17 }, { -40, 0, 17 }, - { 41, 0, 17 }, { -41, 0, 17 }, { 42, 0, 17 }, { -42, 0, 17 }, - { 43, 0, 17 }, { -43, 0, 17 }, { 44, 0, 17 }, { -44, 0, 17 }, - { 45, 0, 17 }, { -45, 0, 17 }, { 46, 0, 17 }, { -46, 0, 17 }, - { 47, 0, 17 }, { -47, 0, 17 }, { 48, 0, 17 }, { -48, 0, 17 }, - { 49, 0, 17 }, { -49, 0, 17 }, { 50, 0, 17 }, { -50, 0, 17 }, - { 51, 0, 17 }, { -51, 0, 17 }, { 52, 0, 17 }, { -52, 0, 17 }, - { 53, 0, 17 }, { -53, 0, 17 }, { 54, 0, 17 }, { -54, 0, 17 }, - { 55, 0, 17 }, { -55, 0, 17 }, { 56, 0, 17 }, { -56, 0, 17 }, - { 57, 0, 17 }, { -57, 0, 17 }, { 58, 0, 17 }, { -58, 0, 17 }, - { 59, 0, 17 }, { -59, 0, 17 }, { 60, 0, 17 }, { -60, 0, 17 }, - { 61, 0, 17 }, { -61, 0, 17 }, { 62, 0, 17 }, { -62, 0, 17 }, - { 63, 0, 17 }, { -63, 0, 17 }, RPT_32 ( 21, 0, 12 ), - RPT_32 ( -21, 0, 12 ), RPT_32 ( 22, 0, 12 ), - RPT_32 ( -22, 0, 12 ), RPT_32 ( 23, 0, 12 ), - RPT_32 ( -23, 0, 12 ), RPT_32 ( 10, 1, 12 ), - RPT_32 ( -10, 1, 12 ), RPT_32 ( 11, 1, 12 ), - RPT_32 ( -11, 1, 12 ), RPT_32 ( 5, 2, 12 ), - RPT_32 ( -5, 2, 12 ), RPT_32 ( 6, 2, 12 ), - RPT_32 ( -6, 2, 12 ), RPT_32 ( 4, 3, 12 ), - RPT_32 ( -4, 3, 12 ), RPT_32 ( 3, 5, 12 ), - RPT_32 ( -3, 5, 12 ), RPT_32 ( 3, 6, 12 ), - RPT_32 ( -3, 6, 12 ), RPT_32 ( 2, 9, 12 ), - RPT_32 ( -2, 9, 12 ), RPT_32 ( 1, 15, 12 ), - RPT_32 ( -1, 15, 12 ), RPT_16 ( 24, 0, 13 ), - RPT_16 ( -24, 0, 13 ), RPT_16 ( 25, 0, 13 ), - RPT_16 ( -25, 0, 13 ), RPT_16 ( 26, 0, 13 ), - RPT_16 ( -26, 0, 13 ), RPT_16 ( 12, 1, 13 ), - RPT_16 ( -12, 1, 13 ), RPT_16 ( 13, 1, 13 ), - RPT_16 ( -13, 1, 13 ), RPT_16 ( 5, 3, 13 ), - RPT_16 ( -5, 3, 13 ), RPT_16 ( 4, 4, 13 ), - RPT_16 ( -4, 4, 13 ), RPT_32 ( 0, 5, 12 ), - RPT_16 ( 4, 5, 13 ), RPT_16 ( -4, 5, 13 ), - RPT_32 ( 0, 6, 12 ), RPT_32 ( 0, 7, 12 ), - RPT_16 ( 3, 7, 13 ), RPT_16 ( -3, 7, 13 ), - RPT_32 ( 0, 8, 12 ), RPT_16 ( 3, 8, 13 ), - RPT_16 ( -3, 8, 13 ), RPT_32 ( 0, 9, 12 ), - RPT_16 ( 1, 16, 13 ), RPT_16 ( -1, 16, 13 ), +static const uint8_t hqx_ac_lens[] = { + // AC table Q0 - 815 elements + 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, + 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, + 10, 9, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, + 13, 13, 13, 13, 13, + // AC table Q8 - 907 elements + 4, 4, 4, 4, 5, 5, 5, 5, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, 10, 10, 10, 10, + 10, 9, 10, 10, 10, 10, 9, 10, 10, 9, 10, 10, 10, 10, 10, 10, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 10, 11, 11, 10, 10, 10, 11, 11, 11, 11, + 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 11, 11, 11, + 12, 12, 12, 12, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 12, + // AC table Q16 - 512 elements + 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 4, 6, 6, 6, 6, 6, 6, 6, + 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 11, 12, 12, 11, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 13, 13, 12, 12, 13, + 13, 12, 13, 13, 13, 13, 13, 13, + // AC table Q32 - 354 elements + 3, 3, 4, 4, 3, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 12, 12, 12, 12, 12, 12, 11, + 12, 12, 12, 12, 11, 12, 12, 12, 12, 11, 12, 12, 11, 12, 12, 12, 12, 12, + 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, + 13, 13, 12, 12, 13, 13, 12, 13, 13, 12, 13, 13, + // AC table Q64 - 257 elements + 3, 3, 2, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, + 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 10, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 13, 13, + 13, 13, 12, 13, 13, 12, 13, 13, 12, 13, 13, 12, 13, 13, 12, 13, 13, 13, + 13, 13, 13, 13, 13, + // AC table Q128 - 194 elements + 3, 3, 2, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, + 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, }; -static const HQXLUT ac64_lut[] = { - RPT_512 ( 1, 0, 3 ), RPT_512 ( -1, 0, 3 ), - RPT_1024( 0, 64, 2 ), RPT_256 ( 2, 0, 4 ), - RPT_256 ( -2, 0, 4 ), RPT_128 ( 3, 0, 5 ), - RPT_128 ( -3, 0, 5 ), RPT_128 ( 1, 1, 5 ), - RPT_128 ( -1, 1, 5 ), RPT_64 ( 4, 0, 6 ), - RPT_64 ( -4, 0, 6 ), RPT_64 ( 2, 1, 6 ), - RPT_64 ( -2, 1, 6 ), RPT_64 ( 1, 2, 6 ), - RPT_64 ( -1, 2, 6 ), RPT_32 ( 5, 0, 7 ), - RPT_32 ( -5, 0, 7 ), RPT_32 ( 1, 3, 7 ), - RPT_32 ( -1, 3, 7 ), RPT_32 ( 1, 4, 7 ), - RPT_32 ( -1, 4, 7 ), RPT_16 ( 6, 0, 8 ), - RPT_16 ( -6, 0, 8 ), RPT_16 ( 3, 1, 8 ), - RPT_16 ( -3, 1, 8 ), RPT_16 ( 2, 2, 8 ), - RPT_16 ( -2, 2, 8 ), RPT_16 ( 1, 5, 8 ), - RPT_16 ( -1, 5, 8 ), RPT_16 ( 1, 6, 8 ), - RPT_16 ( -1, 6, 8 ), RPT_16 ( 1, 7, 8 ), - RPT_16 ( -1, 7, 8 ), RPT_8 ( 7, 0, 9 ), - RPT_8 ( -7, 0, 9 ), RPT_8 ( 8, 0, 9 ), - RPT_8 ( -8, 0, 9 ), RPT_8 ( 4, 1, 9 ), - RPT_8 ( -4, 1, 9 ), RPT_8 ( 2, 3, 9 ), - RPT_8 ( -2, 3, 9 ), RPT_8 ( 1, 8, 9 ), - RPT_8 ( -1, 8, 9 ), RPT_8 ( 1, 9, 9 ), - RPT_8 ( -1, 9, 9 ), RPT_4 ( 9, 0, 10 ), - RPT_4 ( -9, 0, 10 ), RPT_4 ( 10, 0, 10 ), - RPT_4 ( -10, 0, 10 ), RPT_4 ( 5, 1, 10 ), - RPT_4 ( -5, 1, 10 ), RPT_4 ( 3, 2, 10 ), - RPT_4 ( -3, 2, 10 ), RPT_4 ( 2, 4, 10 ), - RPT_4 ( -2, 4, 10 ), RPT_4 ( 2, 5, 10 ), - RPT_4 ( -2, 5, 10 ), RPT_4 ( 1, 10, 10 ), - RPT_4 ( -1, 10, 10 ), RPT_4 ( 1, 11, 10 ), - RPT_4 ( -1, 11, 10 ), { 4096, 0, -1 }, { 4128, 0, -1 }, - { 4160, 0, -1 }, { 4192, 0, -1 }, { 4224, 0, -1 }, { 4256, 0, -1 }, - { 4288, 0, -1 }, { 4320, 0, -1 }, RPT_4 ( 0, 0, 10 ), - RPT_2 ( 11, 0, 11 ), RPT_2 ( -11, 0, 11 ), - RPT_2 ( 12, 0, 11 ), RPT_2 ( -12, 0, 11 ), - RPT_2 ( 6, 1, 11 ), RPT_2 ( -6, 1, 11 ), - RPT_2 ( 7, 1, 11 ), RPT_2 ( -7, 1, 11 ), - RPT_2 ( 3, 3, 11 ), RPT_2 ( -3, 3, 11 ), - RPT_2 ( 3, 4, 11 ), RPT_2 ( -3, 4, 11 ), - RPT_2 ( 3, 5, 11 ), RPT_2 ( -3, 5, 11 ), - RPT_2 ( 2, 6, 11 ), RPT_2 ( -2, 6, 11 ), - RPT_2 ( 2, 7, 11 ), RPT_2 ( -2, 7, 11 ), - RPT_2 ( 1, 12, 11 ), RPT_2 ( -1, 12, 11 ), - RPT_2 ( 1, 13, 11 ), RPT_2 ( -1, 13, 11 ), - RPT_2 ( 1, 14, 11 ), RPT_2 ( -1, 14, 11 ), - { 13, 0, 12 }, { -13, 0, 12 }, { 14, 0, 12 }, { -14, 0, 12 }, - RPT_2 ( 0, 1, 11 ), { 8, 1, 12 }, { -8, 1, 12 }, - { 4, 2, 12 }, { -4, 2, 12 }, { 4, 3, 12 }, { -4, 3, 12 }, - { 2, 8, 12 }, { -2, 8, 12 }, { 2, 9, 12 }, { -2, 9, 12 }, - { 1, 15, 12 }, { -1, 15, 12 }, { 4352, 0, -1 }, { 4384, 0, -1 }, - { 4416, 0, -1 }, { 4448, 0, -1 }, { 4480, 0, -1 }, { 0, 2, 12 }, - { 4512, 0, -1 }, { 0, 3, 12 }, { 4544, 0, -1 }, { 0, 4, 12 }, - { 4576, 0, -1 }, { 0, 5, 12 }, { 4608, 0, -1 }, { 0, 6, 12 }, - { 4640, 0, -1 }, { 4672, 0, -1 }, { 4704, 0, -1 }, { 4736, 0, -1 }, - RPT_4 ( 0, 0, 15 ), RPT_4 ( 0, 1, 15 ), - RPT_4 ( 0, 2, 15 ), RPT_4 ( 0, 3, 15 ), - RPT_4 ( 0, 4, 15 ), RPT_4 ( 0, 5, 15 ), - RPT_4 ( 0, 6, 15 ), RPT_4 ( 0, 7, 15 ), - RPT_4 ( 0, 8, 15 ), RPT_4 ( 0, 9, 15 ), - RPT_4 ( 0, 10, 15 ), RPT_4 ( 0, 11, 15 ), - RPT_4 ( 0, 12, 15 ), RPT_4 ( 0, 13, 15 ), - RPT_4 ( 0, 14, 15 ), RPT_4 ( 0, 15, 15 ), - RPT_4 ( 0, 16, 15 ), RPT_4 ( 0, 17, 15 ), - RPT_4 ( 0, 18, 15 ), RPT_4 ( 0, 19, 15 ), - RPT_4 ( 0, 20, 15 ), RPT_4 ( 0, 21, 15 ), - RPT_4 ( 0, 22, 15 ), RPT_4 ( 0, 23, 15 ), - RPT_4 ( 0, 24, 15 ), RPT_4 ( 0, 25, 15 ), - RPT_4 ( 0, 26, 15 ), RPT_4 ( 0, 27, 15 ), - RPT_4 ( 0, 28, 15 ), RPT_4 ( 0, 29, 15 ), - RPT_4 ( 0, 30, 15 ), RPT_4 ( 0, 31, 15 ), - RPT_4 ( 0, 32, 15 ), RPT_4 ( 0, 33, 15 ), - RPT_4 ( 0, 34, 15 ), RPT_4 ( 0, 35, 15 ), - RPT_4 ( 0, 36, 15 ), RPT_4 ( 0, 37, 15 ), - RPT_4 ( 0, 38, 15 ), RPT_4 ( 0, 39, 15 ), - RPT_4 ( 0, 40, 15 ), RPT_4 ( 0, 41, 15 ), - RPT_4 ( 0, 42, 15 ), RPT_4 ( 0, 43, 15 ), - RPT_4 ( 0, 44, 15 ), RPT_4 ( 0, 45, 15 ), - RPT_4 ( 0, 46, 15 ), RPT_4 ( 0, 47, 15 ), - RPT_4 ( 0, 48, 15 ), RPT_4 ( 0, 49, 15 ), - RPT_4 ( 0, 50, 15 ), RPT_4 ( 0, 51, 15 ), - RPT_4 ( 0, 52, 15 ), RPT_4 ( 0, 53, 15 ), - RPT_4 ( 0, 54, 15 ), RPT_4 ( 0, 55, 15 ), - RPT_4 ( 0, 56, 15 ), RPT_4 ( 0, 57, 15 ), - RPT_4 ( 0, 58, 15 ), RPT_4 ( 0, 59, 15 ), - RPT_4 ( 0, 60, 15 ), RPT_4 ( 0, 61, 15 ), - RPT_4 ( 0, 62, 15 ), RPT_4 ( 0, 63, 15 ), - RPT_2 ( 0, 0, 16 ), { 1, 0, 17 }, { -1, 0, 17 }, - { 2, 0, 17 }, { -2, 0, 17 }, { 3, 0, 17 }, { -3, 0, 17 }, - { 4, 0, 17 }, { -4, 0, 17 }, { 5, 0, 17 }, { -5, 0, 17 }, - { 6, 0, 17 }, { -6, 0, 17 }, { 7, 0, 17 }, { -7, 0, 17 }, - { 8, 0, 17 }, { -8, 0, 17 }, { 9, 0, 17 }, { -9, 0, 17 }, - { 10, 0, 17 }, { -10, 0, 17 }, { 11, 0, 17 }, { -11, 0, 17 }, - { 12, 0, 17 }, { -12, 0, 17 }, { 13, 0, 17 }, { -13, 0, 17 }, - { 14, 0, 17 }, { -14, 0, 17 }, { 15, 0, 17 }, { -15, 0, 17 }, - { 16, 0, 17 }, { -16, 0, 17 }, { 17, 0, 17 }, { -17, 0, 17 }, - { 18, 0, 17 }, { -18, 0, 17 }, { 19, 0, 17 }, { -19, 0, 17 }, - { 20, 0, 17 }, { -20, 0, 17 }, { 21, 0, 17 }, { -21, 0, 17 }, - { 22, 0, 17 }, { -22, 0, 17 }, { 23, 0, 17 }, { -23, 0, 17 }, - { 24, 0, 17 }, { -24, 0, 17 }, { 25, 0, 17 }, { -25, 0, 17 }, - { 26, 0, 17 }, { -26, 0, 17 }, { 27, 0, 17 }, { -27, 0, 17 }, - { 28, 0, 17 }, { -28, 0, 17 }, { 29, 0, 17 }, { -29, 0, 17 }, - { 30, 0, 17 }, { -30, 0, 17 }, { 31, 0, 17 }, { -31, 0, 17 }, - RPT_16 ( 15, 0, 13 ), RPT_16 ( -15, 0, 13 ), - RPT_16 ( 9, 1, 13 ), RPT_16 ( -9, 1, 13 ), - RPT_16 ( 10, 1, 13 ), RPT_16 ( -10, 1, 13 ), - RPT_16 ( 5, 2, 13 ), RPT_16 ( -5, 2, 13 ), - RPT_16 ( 5, 3, 13 ), RPT_16 ( -5, 3, 13 ), - RPT_16 ( 4, 4, 13 ), RPT_16 ( -4, 4, 13 ), - RPT_16 ( 4, 5, 13 ), RPT_16 ( -4, 5, 13 ), - RPT_16 ( 3, 6, 13 ), RPT_16 ( -3, 6, 13 ), - RPT_16 ( 3, 7, 13 ), RPT_16 ( -3, 7, 13 ), - RPT_16 ( 1, 16, 13 ), RPT_16 ( -1, 16, 13 ), - RPT_16 ( 1, 17, 13 ), RPT_16 ( -1, 17, 13 ), -}; +static const uint16_t hqx_ac_nb_elems[] = { 815, 907, 512, 354, 257, 194 }; -static const HQXLUT ac128_lut[] = { - RPT_256 ( 1, 0, 3 ), RPT_256 ( -1, 0, 3 ), - RPT_512 ( 0, 64, 2 ), RPT_128 ( 1, 1, 4 ), - RPT_128 ( -1, 1, 4 ), RPT_64 ( 2, 0, 5 ), - RPT_64 ( -2, 0, 5 ), RPT_32 ( 3, 0, 6 ), - RPT_32 ( -3, 0, 6 ), RPT_32 ( 2, 1, 6 ), - RPT_32 ( -2, 1, 6 ), RPT_32 ( 1, 2, 6 ), - RPT_32 ( -1, 2, 6 ), RPT_32 ( 1, 3, 6 ), - RPT_32 ( -1, 3, 6 ), RPT_32 ( 1, 4, 6 ), - RPT_32 ( -1, 4, 6 ), RPT_16 ( 4, 0, 7 ), - RPT_16 ( -4, 0, 7 ), RPT_16 ( 1, 5, 7 ), - RPT_16 ( -1, 5, 7 ), RPT_16 ( 1, 6, 7 ), - RPT_16 ( -1, 6, 7 ), RPT_16 ( 1, 7, 7 ), - RPT_16 ( -1, 7, 7 ), RPT_8 ( 5, 0, 8 ), - RPT_8 ( -5, 0, 8 ), RPT_8 ( 3, 1, 8 ), - RPT_8 ( -3, 1, 8 ), RPT_8 ( 2, 2, 8 ), - RPT_8 ( -2, 2, 8 ), RPT_8 ( 2, 3, 8 ), - RPT_8 ( -2, 3, 8 ), RPT_8 ( 1, 8, 8 ), - RPT_8 ( -1, 8, 8 ), RPT_8 ( 1, 9, 8 ), - RPT_8 ( -1, 9, 8 ), RPT_4 ( 6, 0, 9 ), - RPT_4 ( -6, 0, 9 ), RPT_4 ( 4, 1, 9 ), - RPT_4 ( -4, 1, 9 ), RPT_4 ( 2, 4, 9 ), - RPT_4 ( -2, 4, 9 ), RPT_4 ( 2, 5, 9 ), - RPT_4 ( -2, 5, 9 ), RPT_4 ( 1, 10, 9 ), - RPT_4 ( -1, 10, 9 ), RPT_2 ( 7, 0, 10 ), - RPT_2 ( -7, 0, 10 ), RPT_2 ( 5, 1, 10 ), - RPT_2 ( -5, 1, 10 ), RPT_2 ( 3, 2, 10 ), - RPT_2 ( -3, 2, 10 ), RPT_2 ( 3, 3, 10 ), - RPT_2 ( -3, 3, 10 ), RPT_2 ( 2, 6, 10 ), - RPT_2 ( -2, 6, 10 ), { 2048, 0, -1 }, { 2112, 0, -1 }, - { 2176, 0, -1 }, { 2240, 0, -1 }, { 6, 1, 11 }, { -6, 1, 11 }, - { 7, 1, 11 }, { -7, 1, 11 }, { 3, 4, 11 }, { -3, 4, 11 }, - { 3, 5, 11 }, { -3, 5, 11 }, { 2, 7, 11 }, { -2, 7, 11 }, - { 2, 8, 11 }, { -2, 8, 11 }, { 2, 9, 11 }, { -2, 9, 11 }, - { 1, 11, 11 }, { -1, 11, 11 }, { 1, 12, 11 }, { -1, 12, 11 }, - { 1, 13, 11 }, { -1, 13, 11 }, { 0, 0, 11 }, { 2304, 0, -1 }, - { 2368, 0, -1 }, { 2432, 0, -1 }, { 2496, 0, -1 }, { 2560, 0, -1 }, - { 2624, 0, -1 }, { 2688, 0, -1 }, { 2752, 0, -1 }, { 2816, 0, -1 }, - { 2880, 0, -1 }, { 2944, 0, -1 }, RPT_4 ( 0, 0, 15 ), - RPT_4 ( 0, 1, 15 ), RPT_4 ( 0, 2, 15 ), - RPT_4 ( 0, 3, 15 ), RPT_4 ( 0, 4, 15 ), - RPT_4 ( 0, 5, 15 ), RPT_4 ( 0, 6, 15 ), - RPT_4 ( 0, 7, 15 ), RPT_4 ( 0, 8, 15 ), - RPT_4 ( 0, 9, 15 ), RPT_4 ( 0, 10, 15 ), - RPT_4 ( 0, 11, 15 ), RPT_4 ( 0, 12, 15 ), - RPT_4 ( 0, 13, 15 ), RPT_4 ( 0, 14, 15 ), - RPT_4 ( 0, 15, 15 ), RPT_4 ( 0, 16, 15 ), - RPT_4 ( 0, 17, 15 ), RPT_4 ( 0, 18, 15 ), - RPT_4 ( 0, 19, 15 ), RPT_4 ( 0, 20, 15 ), - RPT_4 ( 0, 21, 15 ), RPT_4 ( 0, 22, 15 ), - RPT_4 ( 0, 23, 15 ), RPT_4 ( 0, 24, 15 ), - RPT_4 ( 0, 25, 15 ), RPT_4 ( 0, 26, 15 ), - RPT_4 ( 0, 27, 15 ), RPT_4 ( 0, 28, 15 ), - RPT_4 ( 0, 29, 15 ), RPT_4 ( 0, 30, 15 ), - RPT_4 ( 0, 31, 15 ), RPT_4 ( 0, 32, 15 ), - RPT_4 ( 0, 33, 15 ), RPT_4 ( 0, 34, 15 ), - RPT_4 ( 0, 35, 15 ), RPT_4 ( 0, 36, 15 ), - RPT_4 ( 0, 37, 15 ), RPT_4 ( 0, 38, 15 ), - RPT_4 ( 0, 39, 15 ), RPT_4 ( 0, 40, 15 ), - RPT_4 ( 0, 41, 15 ), RPT_4 ( 0, 42, 15 ), - RPT_4 ( 0, 43, 15 ), RPT_4 ( 0, 44, 15 ), - RPT_4 ( 0, 45, 15 ), RPT_4 ( 0, 46, 15 ), - RPT_4 ( 0, 47, 15 ), RPT_4 ( 0, 48, 15 ), - RPT_4 ( 0, 49, 15 ), RPT_4 ( 0, 50, 15 ), - RPT_4 ( 0, 51, 15 ), RPT_4 ( 0, 52, 15 ), - RPT_4 ( 0, 53, 15 ), RPT_4 ( 0, 54, 15 ), - RPT_4 ( 0, 55, 15 ), RPT_4 ( 0, 56, 15 ), - RPT_4 ( 0, 57, 15 ), RPT_4 ( 0, 58, 15 ), - RPT_4 ( 0, 59, 15 ), RPT_4 ( 0, 60, 15 ), - RPT_4 ( 0, 61, 15 ), RPT_4 ( 0, 62, 15 ), - RPT_4 ( 0, 63, 15 ), RPT_32 ( 8, 0, 12 ), - RPT_32 ( -8, 0, 12 ), RPT_32 ( 9, 0, 12 ), - RPT_32 ( -9, 0, 12 ), RPT_32 ( 8, 1, 12 ), - RPT_32 ( -8, 1, 12 ), RPT_32 ( 4, 2, 12 ), - RPT_32 ( -4, 2, 12 ), RPT_32 ( 4, 3, 12 ), - RPT_32 ( -4, 3, 12 ), RPT_32 ( 3, 6, 12 ), - RPT_32 ( -3, 6, 12 ), RPT_32 ( 1, 14, 12 ), - RPT_32 ( -1, 14, 12 ), RPT_32 ( 1, 15, 12 ), - RPT_32 ( -1, 15, 12 ), RPT_32 ( 1, 16, 12 ), - RPT_32 ( -1, 16, 12 ), RPT_32 ( 0, 1, 12 ), - RPT_32 ( 0, 2, 12 ), RPT_32 ( 0, 3, 12 ), - RPT_2 ( 0, 0, 16 ), { 1, 0, 17 }, { -1, 0, 17 }, - { 2, 0, 17 }, { -2, 0, 17 }, { 3, 0, 17 }, { -3, 0, 17 }, - { 4, 0, 17 }, { -4, 0, 17 }, { 5, 0, 17 }, { -5, 0, 17 }, - { 6, 0, 17 }, { -6, 0, 17 }, { 7, 0, 17 }, { -7, 0, 17 }, - { 8, 0, 17 }, { -8, 0, 17 }, { 9, 0, 17 }, { -9, 0, 17 }, - { 10, 0, 17 }, { -10, 0, 17 }, { 11, 0, 17 }, { -11, 0, 17 }, - { 12, 0, 17 }, { -12, 0, 17 }, { 13, 0, 17 }, { -13, 0, 17 }, - { 14, 0, 17 }, { -14, 0, 17 }, { 15, 0, 17 }, { -15, 0, 17 }, -}; - -const HQXAC ff_hqx_ac[NUM_HQX_AC] = { - { 10, 5, ac0_lut }, - { 11, 6, ac8_lut }, - { 11, 6, ac16_lut }, - { 11, 6, ac32_lut }, - { 12, 5, ac64_lut }, - { 11, 6, ac128_lut }, -}; +static RL_VLC_ELEM hqx_ac_rl_vlc[15630]; #define INIT_DC_TABLE(idx, name) \ do { \ @@ -2148,8 +1515,47 @@ const HQXAC ff_hqx_ac[NUM_HQX_AC] = { return ret; \ } while (0) +static av_cold void hqx_init_static(void) +{ + VLCInitState state = VLC_INIT_STATE(hqx_ac_rl_vlc); + const uint8_t *lens = hqx_ac_lens; + const int16_t *run_level = hqx_ac_run_level; + + for (int i = 0; i < NUM_HQX_AC; ++i) { + RL_VLC_ELEM *lut = state.table; + unsigned nb_codes = state.size; + + ff_hqx_ac[i].lut = + ff_vlc_init_tables_from_lengths(&state, ff_hqx_ac[i].bits, + hqx_ac_nb_elems[i], lens, 1, + run_level, 2, 2, 0, 0); + + nb_codes -= state.size; + + for (unsigned j = 0; j < nb_codes; ++j) { + // lut[j] is in VLC (not RL_VLC) state + int sym = lut[j].sym; + int len = lut[j].len; + int level; + + if (len < 0) { + level = sym; + } else { + level = sym >> 7; + lut[j].run = sym & 0x7f; + } + // lut[j] is now in RL_VLC state + lut[j].len8 = len; + lut[j].level = level; + } + lens += hqx_ac_nb_elems[i]; + run_level += hqx_ac_nb_elems[i]; + } +} + av_cold int ff_hqx_init_vlcs(HQXContext *ctx) { + static AVOnce init_static_once = AV_ONCE_INIT; int ret = vlc_init(&ctx->cbp_vlc, HQX_CBP_VLC_BITS, FF_ARRAY_ELEMS(cbp_vlc_lens), cbp_vlc_lens, 1, 1, cbp_vlc_bits, 1, 1, 0); if (ret < 0) @@ -2159,5 +1565,7 @@ av_cold int ff_hqx_init_vlcs(HQXContext *ctx) INIT_DC_TABLE(1, dc10); INIT_DC_TABLE(2, dc11); + ff_thread_once(&init_static_once, hqx_init_static); + return 0; } -- 2.45.2