static void read_tree(GetBitContext *gb, Tree *tree)

{

    uint8_t tmp1[16], tmp2[16], *in = tmp1, *out = tmp2;

    int i, t, len;



    tree->vlc_num = get_bits(gb, 4);

    if (!tree->vlc_num) {

        for (i = 0; i < 16; i++)

            tree->syms[i] = i;

        return;

    }

    if (get_bits1(gb)) {

        len = get_bits(gb, 3);

        memset(tmp1, 0, sizeof(tmp1));

        for (i = 0; i <= len; i++) {

            tree->syms[i] = get_bits(gb, 4);

            tmp1[tree->syms[i]] = 1;

        }

        for (i = 0; i < 16; i++)

            if (!tmp1[i])

                tree->syms[++len] = i;

    } else {

        len = get_bits(gb, 2);

        for (i = 0; i < 16; i++)

            in[i] = i;

        for (i = 0; i <= len; i++) {

            int size = 1 << i;

            for (t = 0; t < 16; t += size << 1)

                merge(gb, out + t, in + t, size);

            FFSWAP(uint8_t*, in, out);

        }

        memcpy(tree->syms, in, 16);

    }

}

static void read_tree(GetBitContext *gb, Tree *tree)

{

    uint8_t tmp1[16], tmp2[16], *in = tmp1, *out = tmp2;

    int i, t, len;



    tree->vlc_num = get_bits(gb, 4);

    if (!tree->vlc_num) {

        for (i = 0; i < 16; i++)

            tree->syms[i] = i;

        return;

    }

    if (get_bits1(gb)) {

        len = get_bits(gb, 3);

        memset(tmp1, 0, sizeof(tmp1));

        for (i = 0; i <= len; i++) {

            tree->syms[i] = get_bits(gb, 4);

            tmp1[tree->syms[i]] = 1;

        }

        for (i = 0; i < 16; i++)

            if (!tmp1[i])

                tree->syms[++len] = i;

    } else {

        len = get_bits(gb, 2);

        for (i = 0; i < 16; i++)

            in[i] = i;

        for (i = 0; i <= len; i++) {

            int size = 1 << i;

            for (t = 0; t < 16; t += size << 1)

                merge(gb, out + t, in + t, size);

            FFSWAP(uint8_t*, in, out);

        }

        memcpy(tree->syms, in, 16);

    }

}

        for (i = 0; i < 16; i++)
static void FUNC_0(GetBitContext *VAR_0, Tree *VAR_1)

{

    uint8_t tmp1[16], tmp2[16], *in = tmp1, *out = tmp2;

    int VAR_2, VAR_3, VAR_4;



    VAR_1->vlc_num = get_bits(VAR_0, 4);

    if (!VAR_1->vlc_num) {

        for (VAR_2 = 0; VAR_2 < 16; VAR_2++)

            VAR_1->syms[VAR_2] = VAR_2;

        return;

    }

    if (get_bits1(VAR_0)) {

        VAR_4 = get_bits(VAR_0, 3);

        memset(tmp1, 0, sizeof(tmp1));

        for (VAR_2 = 0; VAR_2 <= VAR_4; VAR_2++) {

            VAR_1->syms[VAR_2] = get_bits(VAR_0, 4);

            tmp1[VAR_1->syms[VAR_2]] = 1;

        }

        for (VAR_2 = 0; VAR_2 < 16; VAR_2++)

            if (!tmp1[VAR_2])

                VAR_1->syms[++VAR_4] = VAR_2;

    } else {

        VAR_4 = get_bits(VAR_0, 2);

        for (VAR_2 = 0; VAR_2 < 16; VAR_2++)

            in[VAR_2] = VAR_2;

        for (VAR_2 = 0; VAR_2 <= VAR_4; VAR_2++) {

            int VAR_5 = 1 << VAR_2;

            for (VAR_3 = 0; VAR_3 < 16; VAR_3 += VAR_5 << 1)

                merge(VAR_0, out + VAR_3, in + VAR_3, VAR_5);

            FFSWAP(uint8_t*, in, out);

        }

        memcpy(VAR_1->syms, in, 16);

    }

}

static void FUNC_0(GetBitContext *VAR_0, Tree *VAR_1)
{ uint8_t tmp1[16], tmp2[16], *in = tmp1, *out = tmp2; int VAR_2, VAR_3, VAR_4; VAR_1->vlc_num = get_bits(VAR_0, 4); if (!VAR_1->vlc_num) { for (VAR_2 = 0; VAR_2 < 16; VAR_2++) VAR_1->syms[VAR_2] = VAR_2; return; } if (get_bits1(VAR_0)) { VAR_4 = get_bits(VAR_0, 3); memset(tmp1, 0, sizeof(tmp1)); for (VAR_2 = 0; VAR_2 <= VAR_4; VAR_2++) { VAR_1->syms[VAR_2] = get_bits(VAR_0, 4); tmp1[VAR_1->syms[VAR_2]] = 1; } for (VAR_2 = 0; VAR_2 < 16; VAR_2++) if (!tmp1[VAR_2])
VAR_1->syms[++VAR_4] = VAR_2; } else { VAR_4 = get_bits(VAR_0, 2); for (VAR_2 = 0; VAR_2 < 16; VAR_2++) in[VAR_2] = VAR_2; for (VAR_2 = 0; VAR_2 <= VAR_4; VAR_2++) { int VAR_5 = 1 << VAR_2; for (VAR_3 = 0; VAR_3 < 16; VAR_3 += VAR_5 << 1) merge(VAR_0, out + VAR_3, in + VAR_3, VAR_5); FFSWAP(uint8_t*, in, out); } memcpy(VAR_1->syms, in, 16); } }