static int decode_hextile(VmncContext *c, uint8_t* dst, uint8_t* src, int w, int h, int stride)

{

    int i, j, k;

    int bg = 0, fg = 0, rects, color, flags, xy, wh;

    const int bpp = c->bpp2;

    uint8_t *dst2;

    int bw = 16, bh = 16;

    uint8_t *ssrc=src;



    for(j = 0; j < h; j += 16) {

        dst2 = dst;

        bw = 16;

        if(j + 16 > h) bh = h - j;

        for(i = 0; i < w; i += 16, dst2 += 16 * bpp) {

            if(i + 16 > w) bw = w - i;

            flags = *src++;

            if(flags & HT_RAW) {

                paint_raw(dst2, bw, bh, src, bpp, c->bigendian, stride);

                src += bw * bh * bpp;

            } else {

                if(flags & HT_BKG) {

                    bg = vmnc_get_pixel(src, bpp, c->bigendian); src += bpp;

                }

                if(flags & HT_FG) {

                    fg = vmnc_get_pixel(src, bpp, c->bigendian); src += bpp;

                }

                rects = 0;

                if(flags & HT_SUB)

                    rects = *src++;

                color = (flags & HT_CLR);



                paint_rect(dst2, 0, 0, bw, bh, bg, bpp, stride);



                for(k = 0; k < rects; k++) {

                    if(color) {

                        fg = vmnc_get_pixel(src, bpp, c->bigendian); src += bpp;

                    }

                    xy = *src++;

                    wh = *src++;

                    paint_rect(dst2, xy >> 4, xy & 0xF, (wh>>4)+1, (wh & 0xF)+1, fg, bpp, stride);

                }

            }

        }

        dst += stride * 16;

    }

    return src - ssrc;

}

static int decode_hextile(VmncContext *c, uint8_t* dst, uint8_t* src, int w, int h, int stride)

{

    int i, j, k;

    int bg = 0, fg = 0, rects, color, flags, xy, wh;

    const int bpp = c->bpp2;

    uint8_t *dst2;

    int bw = 16, bh = 16;

    uint8_t *ssrc=src;



    for(j = 0; j < h; j += 16) {

        dst2 = dst;

        bw = 16;

        if(j + 16 > h) bh = h - j;

        for(i = 0; i < w; i += 16, dst2 += 16 * bpp) {

            if(i + 16 > w) bw = w - i;

            flags = *src++;

            if(flags & HT_RAW) {

                paint_raw(dst2, bw, bh, src, bpp, c->bigendian, stride);

                src += bw * bh * bpp;

            } else {

                if(flags & HT_BKG) {

                    bg = vmnc_get_pixel(src, bpp, c->bigendian); src += bpp;

                }

                if(flags & HT_FG) {

                    fg = vmnc_get_pixel(src, bpp, c->bigendian); src += bpp;

                }

                rects = 0;

                if(flags & HT_SUB)

                    rects = *src++;

                color = (flags & HT_CLR);



                paint_rect(dst2, 0, 0, bw, bh, bg, bpp, stride);



                for(k = 0; k < rects; k++) {

                    if(color) {

                        fg = vmnc_get_pixel(src, bpp, c->bigendian); src += bpp;

                    }

                    xy = *src++;

                    wh = *src++;

                    paint_rect(dst2, xy >> 4, xy & 0xF, (wh>>4)+1, (wh & 0xF)+1, fg, bpp, stride);

                }

            }

        }

        dst += stride * 16;

    }

    return src - ssrc;

}

static int decode_hextile(VmncContext *c, uint8_t* dst, uint8_t* src, int w, int h, int stride)                 color = (flags & HT_CLR);
static int FUNC_0(VmncContext *VAR_0, uint8_t* VAR_1, uint8_t* VAR_2, int VAR_3, int VAR_4, int VAR_5)

{

    int VAR_6, VAR_7, VAR_8;

    int VAR_9 = 0, VAR_10 = 0, VAR_11, VAR_12, VAR_13, VAR_14, VAR_15;

    const int VAR_16 = VAR_0->bpp2;

    uint8_t *dst2;

    int VAR_17 = 16, VAR_18 = 16;

    uint8_t *ssrc=VAR_2;



    for(VAR_7 = 0; VAR_7 < VAR_4; VAR_7 += 16) {

        dst2 = VAR_1;

        VAR_17 = 16;

        if(VAR_7 + 16 > VAR_4) VAR_18 = VAR_4 - VAR_7;

        for(VAR_6 = 0; VAR_6 < VAR_3; VAR_6 += 16, dst2 += 16 * VAR_16) {

            if(VAR_6 + 16 > VAR_3) VAR_17 = VAR_3 - VAR_6;

            VAR_13 = *VAR_2++;

            if(VAR_13 & HT_RAW) {

                paint_raw(dst2, VAR_17, VAR_18, VAR_2, VAR_16, VAR_0->bigendian, VAR_5);

                VAR_2 += VAR_17 * VAR_18 * VAR_16;

            } else {

                if(VAR_13 & HT_BKG) {

                    VAR_9 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_2 += VAR_16;

                }

                if(VAR_13 & HT_FG) {

                    VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_2 += VAR_16;

                }

                VAR_11 = 0;

                if(VAR_13 & HT_SUB)

                    VAR_11 = *VAR_2++;

                VAR_12 = (VAR_13 & HT_CLR);



                paint_rect(dst2, 0, 0, VAR_17, VAR_18, VAR_9, VAR_16, VAR_5);



                for(VAR_8 = 0; VAR_8 < VAR_11; VAR_8++) {

                    if(VAR_12) {

                        VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_2 += VAR_16;

                    }

                    VAR_14 = *VAR_2++;

                    VAR_15 = *VAR_2++;

                    paint_rect(dst2, VAR_14 >> 4, VAR_14 & 0xF, (VAR_15>>4)+1, (VAR_15 & 0xF)+1, VAR_10, VAR_16, VAR_5);

                }

            }

        }

        VAR_1 += VAR_5 * 16;

    }

    return VAR_2 - ssrc;

}

static int FUNC_0(VmncContext *VAR_0, uint8_t* VAR_1, uint8_t* VAR_2, int VAR_3, int VAR_4, int VAR_5)
{ int VAR_6, VAR_7, VAR_8; int VAR_9 = 0, VAR_10 = 0, VAR_11, VAR_12, VAR_13, VAR_14, VAR_15; const int VAR_16 = VAR_0->bpp2; uint8_t *dst2; int VAR_17 = 16, VAR_18 = 16; uint8_t *ssrc=VAR_2; for(VAR_7 = 0; VAR_7 < VAR_4; VAR_7 += 16) { dst2 = VAR_1; VAR_17 = 16; if(VAR_7 + 16 > VAR_4) VAR_18 = VAR_4 - VAR_7; for(VAR_6 = 0; VAR_6 < VAR_3; VAR_6 += 16, dst2 += 16 * VAR_16) { if(VAR_6 + 16 > VAR_3) VAR_17 = VAR_3 - VAR_6; VAR_13 = *VAR_2++; if(VAR_13 & HT_RAW) { paint_raw(dst2, VAR_17, VAR_18, VAR_2, VAR_16, VAR_0->bigendian, VAR_5); VAR_2 += VAR_17 * VAR_18 * VAR_16; } else { if(VAR_13 & HT_BKG) { VAR_9 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_2 += VAR_16; } if(VAR_13 & HT_FG) { VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_2 += VAR_16; } VAR_11 = 0; if(VAR_13 & HT_SUB)
VAR_11 = *VAR_2++; VAR_12 = (VAR_13 & HT_CLR); paint_rect(dst2, 0, 0, VAR_17, VAR_18, VAR_9, VAR_16, VAR_5); for(VAR_8 = 0; VAR_8 < VAR_11; VAR_8++) { if(VAR_12) { VAR_10 = vmnc_get_pixel(VAR_2, VAR_16, VAR_0->bigendian); VAR_2 += VAR_16; } VAR_14 = *VAR_2++; VAR_15 = *VAR_2++; paint_rect(dst2, VAR_14 >> 4, VAR_14 & 0xF, (VAR_15>>4)+1, (VAR_15 & 0xF)+1, VAR_10, VAR_16, VAR_5); } } } VAR_1 += VAR_5 * 16; } return VAR_2 - ssrc; }