class MessageEndMultipartPart extends MultipartPart<FileLikePart> {

    // lazy
    private ByteBuf contentBuffer;

    public MessageEndMultipartPart(byte[] boundary) {
        super(null, boundary);
        state = MultipartState.PRE_CONTENT;
    }

    @Override
    public long transferTo(ByteBuf target) {
        return transfer(lazyLoadContentBuffer(), target, MultipartState.DONE);
    }

    @Override
    public long transferTo(WritableByteChannel target) throws IOException {
        slowTarget = false;
        return transfer(lazyLoadContentBuffer(), target, MultipartState.DONE);
    }

    private ByteBuf lazyLoadContentBuffer() {<FILL_FUNCTION_BODY>}

    @Override
    protected int computePreContentLength() {
        return 0;
    }

    @Override
    protected ByteBuf computePreContentBytes(int preContentLength) {
        return Unpooled.EMPTY_BUFFER;
    }

    @Override
    protected int computePostContentLength() {
        return 0;
    }

    @Override
    protected ByteBuf computePostContentBytes(int postContentLength) {
        return Unpooled.EMPTY_BUFFER;
    }

    @Override
    protected long getContentLength() {
        return EXTRA_BYTES.length + boundary.length + EXTRA_BYTES.length + CRLF_BYTES.length;
    }

    @Override
    protected long transferContentTo(ByteBuf target) {
        throw new UnsupportedOperationException("Not supposed to be called");
    }

    @Override
    protected long transferContentTo(WritableByteChannel target) {
        throw new UnsupportedOperationException("Not supposed to be called");
    }

    @Override
    public void close() {
        super.close();
        if (contentBuffer != null) {
            contentBuffer.release();
        }
    }
}

        if (contentBuffer == null) {
            contentBuffer = ByteBufAllocator.DEFAULT.buffer((int) getContentLength());
            contentBuffer.writeBytes(EXTRA_BYTES).writeBytes(boundary).writeBytes(EXTRA_BYTES).writeBytes(CRLF_BYTES);
        }
        return contentBuffer;
    
<methods>public void close() ,public org.asynchttpclient.request.body.multipart.part.MultipartState getState() ,public boolean isTargetSlow() ,public long length() ,public long transferTo(ByteBuf) throws java.io.IOException,public long transferTo(java.nio.channels.WritableByteChannel) throws java.io.IOException<variables>private static final byte[] CHARSET_BYTES,private static final byte[] CONTENT_DISPOSITION_BYTES,private static final byte[] CONTENT_ID_BYTES,private static final byte[] CONTENT_TRANSFER_ENCODING_BYTES,private static final byte[] CONTENT_TYPE_BYTES,protected static final byte[] CRLF_BYTES,protected static final byte[] EXTRA_BYTES,private static final byte[] FORM_DATA_DISPOSITION_TYPE_BYTES,private static final byte[] HEADER_NAME_VALUE_SEPARATOR_BYTES,private static final byte[] NAME_BYTES,static final byte QUOTE_BYTE,protected final non-sealed byte[] boundary,protected final non-sealed org.asynchttpclient.request.body.multipart.FileLikePart part,private ByteBuf postContentBuffer,private final non-sealed int postContentLength,private ByteBuf preContentBuffer,private final non-sealed int preContentLength,boolean slowTarget,protected org.asynchttpclient.request.body.multipart.part.MultipartState state