wildCopy<copy_amount>(op, ip, copy_end); 
        if (copy_end == output_end)
            return true;
        ip += length;
        op = copy_end;
    decompress_match:
        if (unlikely(ip + 1 >= input_end))
            return false;
        
        size_t offset = LZ4_readLE16(ip);
        ip += 2;
        const UInt8 * match = op - offset;
        if (unlikely(match < output_begin))
            return false;
        
        length = token & 0x0F;
        if (length == 0x0F)
        {
            if (unlikely(ip + 1 >= input_end))
                return false;
            continue_read_length();
        }
        length += 4;
        
        copy_end = op + length;
        /** Here we can write up to copy_amount - 1 - 4 * 2 bytes after buffer.
          * The worst case when offset = 1 and length = 4
          */
        if (unlikely(offset < copy_amount))
        {