You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: file_checkpoints.pb.go
    path of file: ./repos/tidb/br/pkg/lightning/checkpoints/checkpointspb
    
    the code of the file until where you have to start completion: // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: file_checkpoints.proto

package checkpointspb

import (
	encoding_binary "encoding/binary"
	fmt "fmt"
	io "io"
	math "math"
	math_bits "math/bits"

	_ "github.com/gogo/protobuf/gogoproto"
	proto "github.com/gogo/protobuf/proto"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package

type CheckpointsModel struct {
	// key is table_name
	Checkpoints    map[string]*TableCheckpointModel `protobuf:"bytes,1,rep,name=checkpoints,proto3" json:"checkpoints,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	TaskCheckpoint *TaskCheckpointModel             `protobuf:"bytes,2,opt,name=task_checkpoint,json=taskCheckpoint,proto3" json:"task_checkpoint,omitempty"`
}

func (m *CheckpointsModel) Reset()         { *m = CheckpointsModel{} }
func (m *CheckpointsModel) String() string { return proto.CompactTextString(m) }
func (*CheckpointsModel) ProtoMessage()    {}
func (*CheckpointsModel) Descriptor() ([]byte, []int) {
	return fileDescriptor_975f281c215c00f7, []int{0}
}
func (m *CheckpointsModel) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *CheckpointsModel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_CheckpointsModel.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *CheckpointsModel) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CheckpointsModel.Merge(m, src)
}
func (m *CheckpointsModel) XXX_Size() int {
	return m.Size()
}
func (m *CheckpointsModel) XXX_DiscardUnknown() {
	xxx_messageInfo_CheckpointsModel.DiscardUnknown(m)
}

var xxx_messageInfo_CheckpointsModel proto.InternalMessageInfo

type TaskCheckpointModel struct {
	TaskId 
    
func (m *ChunkCheckpointModel) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.FileSize != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.FileSize))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0x88
	}
	if len(m.SortKey) > 0 {
		i -= len(m.SortKey)
		copy(dAtA[i:], m.SortKey)
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(len(m.SortKey)))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0x82
	}
	if m.Compression != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.Compression))
		i--
		dAtA[i] = 0x78
	}
	if m.Type != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.Type))
		i--
		dAtA[i] = 0x70
	}
	if m.Timestamp != 0 {
		i -= 8
		encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Timestamp))
		i--
		dAtA[i] = 0x69
	}
	if len(m.ColumnPermutation) > 0 {
		dAtA6 := make([]byte, len(m.ColumnPermutation)*10)
		var j5 int
		for _, num1 := range m.ColumnPermutation {
			num := uint64(num1)
			for num >= 1<<7 {
				dAtA6[j5] = uint8(uint64(num)&0x7f | 0x80)
				num >>= 7
				j5++
			}
			dAtA6[j5] = uint8(num)
			j5++
		}
		i -= j5
		copy(dAtA[i:], dAtA6[:j5])
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(j5))
		i--
		dAtA[i] = 0x62
	}
	if m.KvcChecksum != 0 {
		i -= 8
		encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.KvcChecksum))
		i--
		dAtA[i] = 0x59
	}
	if m.KvcKvs != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.KvcKvs))
		i--
		dAtA[i] = 0x50
	}
	if m.KvcBytes != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.KvcBytes))
		i--
		dAtA[i] = 0x48
	}
	if m.RowidMax != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.RowidMax))
		i--
		dAtA[i] = 0x40
	}
	if m.PrevRowidMax != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.PrevRowidMax))
		i--
		dAtA[i] = 0x38
	}
	if m.Pos != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.Pos))
		i--
		dAtA[i] = 0x30
	}
	if m.EndOffset != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.EndOffset))
		i--
		dAtA[i] = 0x28
	}
	if m.Offset != 0 {
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(m.Offset))
		i--
		dAtA[i] = 0x10
	}
	if len(m.Path) > 0 {
		i -= len(m.Path)
		copy(dAtA[i:], m.Path)
		i = encodeVarintFileCheckpoints(dAtA, i, uint64(len(m.Path)))
		i--
		dAtA[i] = 0xa
	}
	return len(dAtA) - i, nil
}