class DecoderSpecificInfo extends BaseDescriptor {
    byte[] bytes;

    public DecoderSpecificInfo() {
        tag = 0x5;
    }

    @Override
    public void parseDetail(ByteBuffer bb) throws IOException {
        bytes = new byte[bb.remaining()];
        bb.get(bytes);
    }

    public void setData(byte[] bytes) {
        this.bytes = bytes;
    }

    int getContentSize() {
        return bytes.length;
    }

    public ByteBuffer serialize() {<FILL_FUNCTION_BODY>}

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("DecoderSpecificInfo");
        sb.append("{bytes=").append(bytes == null ? "null" : Hex.encodeHex(bytes));
        sb.append('}');
        return sb.toString();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        DecoderSpecificInfo that = (DecoderSpecificInfo) o;

        if (!Arrays.equals(bytes, that.bytes)) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {
        return bytes != null ? Arrays.hashCode(bytes) : 0;
    }
}

        ByteBuffer out = ByteBuffer.allocate(getSize());
        IsoTypeWriter.writeUInt8(out, tag);
        writeSize(out, getContentSize());
        out.put(bytes);
        return (ByteBuffer) ((Buffer)out).rewind();
    
<methods>public void <init>() ,public int getSize() ,public int getSizeSize() ,public int getTag() ,public final void parse(int, java.nio.ByteBuffer) throws java.io.IOException,public abstract void parseDetail(java.nio.ByteBuffer) throws java.io.IOException,public abstract java.nio.ByteBuffer serialize() ,public java.lang.String toString() ,public void writeSize(java.nio.ByteBuffer, int) <variables>int sizeBytes,int sizeOfInstance,int tag