JEB output JAD output
// Decompiled by JEB v0.9.0 alpha

public static int lzss_decompress(byte[] arg12, byte[] arg13) {
    int v9 = -1;
    int v2 = 0;
    int v4 = 0;
    int v1 = 0;
    int v0 = 7;
    while(v4 < arg13.length) {
        ++v0;
        if(v0 == 8) {
            if(v2 < arg12.length) {
                v1 = arg12[v2] & 0xFF;
                v0 = 0;
                ++v2;
            }
            else {
                break;
            }

        }

        if((v1 & 1) != 0) {
            if(v2 + 1 < arg12.length) {
                int v8 = arg12[v2] & 0xFF | (arg12[v2 + 1] & 0xFF) << 8;
                v2 += 2;
                int v7 = (v8 >> 4) + 1;
                int v6 = (v8 & 0xF) + 3;
                if(v7 > v4) {
                    v4 = v9;
                    break;
                }
                else if(arg13.length - v4 < v6) {
                    v4 = v9;
                    break;
                }
                else {
                    int v5 = 0;
                    while(v5 < v6) {
                        arg13[v4 + v5] = arg13[v4 + v5 - v7];
                        ++v5;
                    }

                    v4 += v6;
                }

            }
            else {
                v4 = v9;
                break;
            }

        }
        else if(v2 < arg12.length) {
            arg13[v4] = arg12[v2];
            ++v4;
            ++v2;
        }
        else {
            break;
        }

        v1 >>= 1;
    }

    return v4;
}
// Decompiled by Jad v1.5.8g

public static int lzss_decompress(byte abyte0[], byte abyte1[])
{
    int i;
    int j;
    int k;
    int l;
    i = 0;
    j = 0;
    k = 0;
    l = 7;
_L7:
    if(j < abyte1.length) goto _L2; else goto _L1
_L1:
    return j;
_L2:
    if(++l != 8)
        break MISSING_BLOCK_LABEL_55;
    if(i >= abyte0.length) goto _L1; else goto _L3
_L3:
    int i2 = i + 1;
    k = 0xff & abyte0[i];
    l = 0;
    i = i2;
    if((k & 1) != 0) goto _L5; else goto _L4
_L4:
    if(i >= abyte0.length) goto _L1; else goto _L6
_L6:
    abyte1[j] = abyte0[i];
    j++;
    i++;
_L8:
    k >>= 1;
      goto _L7
_L5:
    int j1;
    int k1;
    if(i + 1 >= abyte0.length)
    {
        j = -1;
    } else
    {
        int i1 = 0xff & abyte0[i] | (0xff & abyte0[i + 1]) << 8;
        i += 2;
        j1 = 1 + (i1 >> 4);
        k1 = 3 + (i1 & 0xf);
        if(j1 > j)
        {
            j = -1;
        } else
        {
label0:
            {
                if(abyte1.length - j >= k1)
                    break label0;
                j = -1;
            }
        }
    }
      goto _L1
    int l1 = 0;
_L9:
label1:
    {
        if(l1 < k1)
            break label1;
        j += k1;
    }
      goto _L8
    abyte1[j + l1] = abyte1[(j + l1) - j1];
    l1++;
      goto _L9
}