From d69dd7aa038a932a1229746df348da5cad1f1bd4 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sat, 20 Jan 2024 22:15:43 +0100 Subject: [PATCH] use parity aided polar codes --- decode.cc | 49 +++++++++++++++---------------------------------- encode.cc | 24 ++++++++++++------------ freezer.cc | 7 ++++--- polar_tables.hh | 6 +++--- 4 files changed, 34 insertions(+), 52 deletions(-) diff --git a/decode.cc b/decode.cc index 5116858..d0b602d 100644 --- a/decode.cc +++ b/decode.cc @@ -7,6 +7,7 @@ Copyright 2021 Ahmet Inan #include #include #include +#include #include namespace DSP { using std::abs; using std::min; using std::cos; using std::sin; } #include "bip_buffer.hh" @@ -31,9 +32,7 @@ namespace DSP { using std::abs; using std::min; using std::cos; using std::sin; #include "psk.hh" #include "qam.hh" #include "polar_tables.hh" -#include "polar_helper.hh" -#include "polar_encoder.hh" -#include "polar_list_decoder.hh" +#include "polar_parity_aided.hh" template struct SchmidlCox @@ -200,13 +199,12 @@ struct Decoder CODE::CRC crc0; CODE::CRC crc1; CODE::OrderedStatisticsDecoder<255, 71, 4> osddec; - CODE::PolarEncoder polarenc; - CODE::PolarListDecoder polardec; + CODE::PolarParityDecoder polardec; CODE::ReverseFisherYatesShuffle<4096> shuffle_4096; CODE::ReverseFisherYatesShuffle<8192> shuffle_8192; CODE::ReverseFisherYatesShuffle<16384> shuffle_16384; int8_t genmat[255*71]; - mesg_type mesg[bits_max], mess[bits_max]; + mesg_type mesg[bits_max]; code_type code[bits_max]; cmplx cons[cons_max], prev[cols_max]; cmplx fdom[symbol_len], tdom[symbol_len]; @@ -245,14 +243,6 @@ struct Decoder fdom[(i+mls0_off/2+symbol_len/2)%(symbol_len/2)] = nrz(seq0()); return fdom; } - void systematic() - { - polarenc(mess, mesg, frozen_bits, code_order); - int code_bits = 1 << code_order; - for (int i = 0, j = 0; i < code_bits && j < crc_bits; ++i) - if (!((frozen_bits[i/32] >> (i%32)) & 1)) - mesg[j++] = mess[i]; - } cmplx mod_map(code_type *b) { switch (mod_bits) { @@ -400,7 +390,7 @@ struct Decoder code_order = 12; code_cols = 256; data_bits = 2048; - frozen_bits = frozen_4096_2080; + frozen_bits = frozen_4096_2147; break; case 24: mod_bits = 2; @@ -409,7 +399,7 @@ struct Decoder code_order = 13; code_cols = 256; data_bits = 4096; - frozen_bits = frozen_8192_4128; + frozen_bits = frozen_8192_4261; break; case 25: mod_bits = 2; @@ -418,7 +408,7 @@ struct Decoder code_order = 14; code_cols = 256; data_bits = 8192; - frozen_bits = frozen_16384_8224; + frozen_bits = frozen_16384_8489; break; case 26: mod_bits = 4; @@ -427,7 +417,7 @@ struct Decoder code_order = 12; code_cols = 256; data_bits = 2048; - frozen_bits = frozen_4096_2080; + frozen_bits = frozen_4096_2147; break; case 27: mod_bits = 4; @@ -436,7 +426,7 @@ struct Decoder code_order = 13; code_cols = 256; data_bits = 4096; - frozen_bits = frozen_8192_4128; + frozen_bits = frozen_8192_4261; break; case 28: mod_bits = 4; @@ -445,7 +435,7 @@ struct Decoder code_order = 14; code_cols = 256; data_bits = 8192; - frozen_bits = frozen_16384_8224; + frozen_bits = frozen_16384_8489; break; case 29: mod_bits = 6; @@ -454,7 +444,7 @@ struct Decoder code_order = 13; code_cols = 273; data_bits = 4096; - frozen_bits = frozen_8192_4128; + frozen_bits = frozen_8192_4261; break; case 30: mod_bits = 6; @@ -463,7 +453,7 @@ struct Decoder code_order = 14; code_cols = 273; data_bits = 8192; - frozen_bits = frozen_16384_8224; + frozen_bits = frozen_16384_8489; break; default: return; @@ -576,8 +566,7 @@ struct Decoder for (int i = code_cols * cons_rows * mod_bits; i < bits_max; ++i) code[i] = 0; shuffle(code); - polardec(metric, mesg, code, frozen_bits, code_order); - systematic(); + polardec(metric, mesg, code, frozen_bits, code_order, 31); int order[mesg_type::SIZE]; for (int k = 0; k < mesg_type::SIZE; ++k) order[k] = k; @@ -597,16 +586,8 @@ struct Decoder *len = 0; return; } - int flips = 0; - for (int i = 0, j = 0; i < data_bits; ++i, ++j) { - while ((frozen_bits[j / 32] >> (j % 32)) & 1) - ++j; - bool received = code[j] < 0; - bool decoded = mesg[i].v[best] < 0; - flips += received != decoded; - CODE::set_le_bit(out, i, decoded); - } - std::cerr << "bit flips: " << flips << std::endl; + for (int i = 0; i < data_bits; ++i) + CODE::set_le_bit(out, i, mesg[i].v[best] < 0); } }; diff --git a/encode.cc b/encode.cc index d5c8e34..9a50169 100644 --- a/encode.cc +++ b/encode.cc @@ -6,6 +6,7 @@ Copyright 2021 Ahmet Inan #include #include +#include #include #include "xorshift.hh" #include "complex.hh" @@ -21,8 +22,7 @@ Copyright 2021 Ahmet Inan #include "psk.hh" #include "qam.hh" #include "polar_tables.hh" -#include "polar_helper.hh" -#include "polar_encoder.hh" +#include "polar_parity_aided.hh" #include "bose_chaudhuri_hocquenghem_encoder.hh" template @@ -44,7 +44,7 @@ struct Encoder CODE::CRC crc0; CODE::CRC crc1; CODE::BoseChaudhuriHocquenghemEncoder<255, 71> bchenc; - CODE::PolarSysEnc polarenc; + CODE::PolarParityEncoder polarenc; CODE::FisherYatesShuffle<4096> shuffle_4096; CODE::FisherYatesShuffle<8192> shuffle_8192; CODE::FisherYatesShuffle<16384> shuffle_16384; @@ -267,7 +267,7 @@ struct Encoder code_cols = 256; data_bits = 2048; reserved_tones = 0; - frozen_bits = frozen_4096_2080; + frozen_bits = frozen_4096_2147; break; case 24: mod_bits = 2; @@ -277,7 +277,7 @@ struct Encoder code_cols = 256; data_bits = 4096; reserved_tones = 0; - frozen_bits = frozen_8192_4128; + frozen_bits = frozen_8192_4261; break; case 25: mod_bits = 2; @@ -287,7 +287,7 @@ struct Encoder code_cols = 256; data_bits = 8192; reserved_tones = 0; - frozen_bits = frozen_16384_8224; + frozen_bits = frozen_16384_8489; break; case 26: mod_bits = 4; @@ -297,7 +297,7 @@ struct Encoder code_cols = 256; data_bits = 2048; reserved_tones = 8; - frozen_bits = frozen_4096_2080; + frozen_bits = frozen_4096_2147; break; case 27: mod_bits = 4; @@ -307,7 +307,7 @@ struct Encoder code_cols = 256; data_bits = 4096; reserved_tones = 8; - frozen_bits = frozen_8192_4128; + frozen_bits = frozen_8192_4261; break; case 28: mod_bits = 4; @@ -317,7 +317,7 @@ struct Encoder code_cols = 256; data_bits = 8192; reserved_tones = 8; - frozen_bits = frozen_16384_8224; + frozen_bits = frozen_16384_8489; break; case 29: mod_bits = 6; @@ -327,7 +327,7 @@ struct Encoder code_cols = 273; data_bits = 4096; reserved_tones = 15; - frozen_bits = frozen_8192_4128; + frozen_bits = frozen_8192_4261; break; case 30: mod_bits = 6; @@ -337,7 +337,7 @@ struct Encoder code_cols = 273; data_bits = 8192; reserved_tones = 15; - frozen_bits = frozen_16384_8224; + frozen_bits = frozen_16384_8489; break; default: return; @@ -372,7 +372,7 @@ struct Encoder crc1(inp[i]); for (int i = 0; i < 32; ++i) mesg[i+data_bits] = nrz((crc1()>>i)&1); - polarenc(code, mesg, frozen_bits, code_order); + polarenc(code, mesg, frozen_bits, code_order, 31); shuffle(code); for (int i = 0; i < cons_cols; ++i) prev[i] = fdom[bin(i+code_off)]; diff --git a/freezer.cc b/freezer.cc index a8a6e8f..41ac1d2 100644 --- a/freezer.cc +++ b/freezer.cc @@ -25,6 +25,7 @@ void code(int N, int K) (*freeze)(frozen, M, K+(1<(16384, 8192+32); - code<13>(8192, 4096+32); - code<12>(4096, 2048+32); + code<12>(4096, 2048+32+67); + code<13>(8192, 4096+32+133); + code<14>(16384, 8192+32+265); return 0; } diff --git a/polar_tables.hh b/polar_tables.hh index c55a18e..3d0d720 100644 --- a/polar_tables.hh +++ b/polar_tables.hh @@ -1,3 +1,3 @@ -static const uint32_t frozen_16384_8224[512] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x11717ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x177fffff, 0x177f7fff, 0x3177f, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x37f7fff, 0x1171fff, 0x10117, 0x7fffffff, 0x11717ff, 0x117177f, 0x10117, 0x117177f, 0x7, 0x1, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0xffffffff, 0x177f7fff, 0x13f7fff, 0x10117, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x11f7fff, 0x3fffffff, 0x117177f, 0x117177f, 0x117, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f, 0x177f7fff, 0x3177f, 0x1017f, 0x1, 0x17f7fff, 0x1011f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0xffffffff, 0x17ffffff, 0x177f7fff, 0x7177f, 0x77f7fff, 0x1011f, 0x10117, 0x1, 0x7fffffff, 0x177f7fff, 0x11f7fff, 0x10117, 0x11717ff, 0x10117, 0x10117, 0x1, 0x117177f, 0x10117, 0x17, 0x0, 0x3, 0x0, 0x0, 0x0, 0x7fffffff, 0x11717ff, 0x117177f, 0x10117, 0x117177f, 0x7, 0x1, 0x0, 0x3177f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1013f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1173fff, 0xffffffff, 0x7fffffff, 0x177fffff, 0x117177f, 0x177f7fff, 0x3177f, 0x1013f, 0x1, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x17ffffff, 0x177f7fff, 0x7177f, 0xffffffff, 0x177f7fff, 0x13f7fff, 0x10117, 0x1171fff, 0x10117, 0x10117, 0x1, 0x7fffffff, 0x1173fff, 0x117177f, 0x10117, 0x117177f, 0x117, 0x7, 0x0, 0x7177f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x11f7fff, 0x11717ff, 0x10117, 0x1fffffff, 0x117177f, 0x117177f, 0x117, 0x7177f, 0x1, 0x1, 0x0, 0x177f7fff, 0x17177f, 0x1037f, 0x1, 0x1011f, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x77f7fff, 0x1011f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x10117, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0x177fffff, 0x117177f, 0x1077f, 0x1, 0x177f7fff, 0x1017f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x1177fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x117177f, 0x10117, 0x10117, 0x1, 0x117, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x117177f, 0x117, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; -static const uint32_t frozen_8192_4128[256] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x11717ff, 0xffffffff, 0x1fffffff, 0x177fffff, 0x17177f, 0x177f7fff, 0x1013f, 0x10117, 0x1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0x177f7fff, 0x77f7fff, 0x1011f, 0x7fffffff, 0x13f7fff, 0x1171fff, 0x10117, 0x117177f, 0x117, 0x7, 0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x77f7fff, 0x7fffffff, 0x1171fff, 0x117177f, 0x10117, 0x17ffffff, 0x117177f, 0x3177f, 0x1, 0x1013f, 0x1, 0x1, 0x0, 0x177f7fff, 0x1017f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x11f7fff, 0x11717ff, 0x10117, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1171fff, 0x17ffffff, 0x117177f, 0x7177f, 0x1, 0x177f7fff, 0x1077f, 0x1011f, 0x1, 0x10117, 0x1, 0x1, 0x0, 0xffffffff, 0x17ffffff, 0x177fffff, 0x3177f, 0x37f7fff, 0x1011f, 0x10117, 0x1, 0x1171fff, 0x10117, 0x10117, 0x1, 0x117, 0x0, 0x0, 0x0, 0x117177f, 0x117, 0x17, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fffffff, 0x37f7fff, 0x1173fff, 0x10117, 0x11717ff, 0x10117, 0x17, 0x0, 0x117177f, 0x7, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1077f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1011f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; -static const uint32_t frozen_4096_2080[128] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x77f7fff, 0x7fffffff, 0x1173fff, 0x11717ff, 0x117, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x11f7fff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0x177fffff, 0x1077f, 0x1013f, 0x1, 0xffffffff, 0x177fffff, 0x177f7fff, 0x1013f, 0x11f7fff, 0x10117, 0x10117, 0x1, 0x11717ff, 0x117, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x17ffffff, 0x177fffff, 0x1077f, 0xffffffff, 0x177f7fff, 0x11f7fff, 0x10117, 0x11717ff, 0x10117, 0x17, 0x0, 0x7fffffff, 0x1171fff, 0x117177f, 0x17, 0x3177f, 0x1, 0x1, 0x0, 0x1017f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x177fffff, 0x7177f, 0x1037f, 0x1, 0x1011f, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10117, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; +static const uint32_t frozen_4096_2147[128] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x13f7fff, 0x7fffffff, 0x11717ff, 0x117177f, 0x7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1171fff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x17177f, 0x177f7fff, 0x1017f, 0x10117, 0x1, 0xffffffff, 0x177f7fff, 0x17f7fff, 0x1011f, 0x1171fff, 0x10117, 0x117, 0x0, 0x117177f, 0x17, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0x177fffff, 0x177f7fff, 0x1017f, 0x7fffffff, 0x17f7fff, 0x1173fff, 0x10117, 0x117177f, 0x17, 0x3, 0x0, 0x3fffffff, 0x11717ff, 0x17177f, 0x3, 0x1077f, 0x1, 0x1, 0x0, 0x1011f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x177fffff, 0x1077f, 0x1013f, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x117, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; +static const uint32_t frozen_8192_4261[256] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x17f7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0xffffffff, 0x177fffff, 0x177f7fff, 0x1077f, 0x13f7fff, 0x10117, 0x10117, 0x1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x1fffffff, 0x177fffff, 0x7177f, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0xffffffff, 0x177f7fff, 0x11f7fff, 0x10117, 0x7fffffff, 0x1171fff, 0x117177f, 0x10117, 0x17177f, 0x3, 0x1, 0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x11f7fff, 0x1fffffff, 0x117177f, 0x117177f, 0x7, 0x177fffff, 0x7177f, 0x1017f, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x37f7fff, 0x1011f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x37f7fff, 0x7fffffff, 0x1171fff, 0x117177f, 0x10117, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0x177fffff, 0x7177f, 0x1037f, 0x1, 0x77f7fff, 0x1011f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0xffffffff, 0x177fffff, 0x177f7fff, 0x1017f, 0x11f7fff, 0x10117, 0x10117, 0x1, 0x11717ff, 0x10117, 0x117, 0x0, 0x7, 0x0, 0x0, 0x0, 0x117177f, 0x17, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fffffff, 0x11f7fff, 0x11717ff, 0x10117, 0x117177f, 0x117, 0x7, 0x0, 0x7177f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1017f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; +static const uint32_t frozen_16384_8489[512] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x77f7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff, 0xffffffff, 0x177f7fff, 0x37f7fff, 0x1011f, 0xffffffff, 0xffffffff, 0x7fffffff, 0x177f7fff, 0x7fffffff, 0x1171fff, 0x117177f, 0x10117, 0x17ffffff, 0x117177f, 0x117177f, 0x7, 0x1077f, 0x1, 0x1, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x13f7fff, 0x1171fff, 0x10117, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x77f7fff, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x11717ff, 0x177fffff, 0x117177f, 0x7177f, 0x1, 0xffffffff, 0x17ffffff, 0x177f7fff, 0x17177f, 0x77f7fff, 0x1013f, 0x10117, 0x1, 0x1173fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x3fffffff, 0x177fffff, 0x117177f, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x1013f, 0x11f7fff, 0x10117, 0x10117, 0x1, 0x7fffffff, 0x13f7fff, 0x11717ff, 0x10117, 0x117177f, 0x10117, 0x117, 0x0, 0x117177f, 0x7, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1fffffff, 0x117177f, 0x117177f, 0x17, 0x3177f, 0x1, 0x1, 0x0, 0x1017f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x77f7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0xffffffff, 0x17ffffff, 0x177f7fff, 0x7177f, 0x77f7fff, 0x1011f, 0x10117, 0x1, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0x177f7fff, 0x177f7fff, 0x1017f, 0x7fffffff, 0x17f7fff, 0x1171fff, 0x10117, 0x117177f, 0x10117, 0x10117, 0x0, 0x3fffffff, 0x117177f, 0x117177f, 0x117, 0x17177f, 0x3, 0x1, 0x0, 0x1037f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x37f7fff, 0x7fffffff, 0x11717ff, 0x117177f, 0x10117, 0x177fffff, 0x117177f, 0x7177f, 0x1, 0x1037f, 0x1, 0x1, 0x0, 0x177f7fff, 0x1037f, 0x1011f, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x11f7fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10117, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fffffff, 0x177fffff, 0x117177f, 0x177f7fff, 0x3177f, 0x1013f, 0x1, 0x17f7fff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x11717ff, 0x10117, 0x10117, 0x1, 0x10117, 0x1, 0x0, 0x0, 0x117, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x117177f, 0x10117, 0x117, 0x0, 0x7, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x117177f, 0x7, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };