// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.26.0
// 	protoc        v3.9.1
// source: vote.proto

package types

import (
	reflect "reflect"
	sync "sync"

	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// vote 合约交易行为总类型
type VoteAction struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Ty int32 `protobuf:"varint,1,opt,name=ty,proto3" json:"ty,omitempty"`
	// Types that are assignable to Value:
	//	*VoteAction_CreateGroup
	//	*VoteAction_UpdateGroup
	//	*VoteAction_CreateVote
	//	*VoteAction_CommitVote
	//	*VoteAction_CloseVote
	//	*VoteAction_UpdateMember
	Value isVoteAction_Value `protobuf_oneof:"value"`
}

func (x *VoteAction) Reset() {
	*x = VoteAction{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VoteAction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VoteAction) ProtoMessage() {}

func (x *VoteAction) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VoteAction.ProtoReflect.Descriptor instead.
func (*VoteAction) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{0}
}

func (x *VoteAction) GetTy() int32 {
	if x != nil {
		return x.Ty
	}
	return 0
}

func (m *VoteAction) GetValue() isVoteAction_Value {
	if m != nil {
		return m.Value
	}
	return nil
}

func (x *VoteAction) GetCreateGroup() *CreateGroup {
	if x, ok := x.GetValue().(*VoteAction_CreateGroup); ok {
		return x.CreateGroup
	}
	return nil
}

func (x *VoteAction) GetUpdateGroup() *UpdateGroup {
	if x, ok := x.GetValue().(*VoteAction_UpdateGroup); ok {
		return x.UpdateGroup
	}
	return nil
}

func (x *VoteAction) GetCreateVote() *CreateVote {
	if x, ok := x.GetValue().(*VoteAction_CreateVote); ok {
		return x.CreateVote
	}
	return nil
}

func (x *VoteAction) GetCommitVote() *CommitVote {
	if x, ok := x.GetValue().(*VoteAction_CommitVote); ok {
		return x.CommitVote
	}
	return nil
}

func (x *VoteAction) GetCloseVote() *CloseVote {
	if x, ok := x.GetValue().(*VoteAction_CloseVote); ok {
		return x.CloseVote
	}
	return nil
}

func (x *VoteAction) GetUpdateMember() *UpdateMember {
	if x, ok := x.GetValue().(*VoteAction_UpdateMember); ok {
		return x.UpdateMember
	}
	return nil
}

type isVoteAction_Value interface {
	isVoteAction_Value()
}

type VoteAction_CreateGroup struct {
	CreateGroup *CreateGroup `protobuf:"bytes,2,opt,name=createGroup,proto3,oneof"` //创建投票组
}

type VoteAction_UpdateGroup struct {
	UpdateGroup *UpdateGroup `protobuf:"bytes,3,opt,name=updateGroup,proto3,oneof"` //更新组成员
}

type VoteAction_CreateVote struct {
	CreateVote *CreateVote `protobuf:"bytes,4,opt,name=createVote,proto3,oneof"` //创建一个投票
}

type VoteAction_CommitVote struct {
	CommitVote *CommitVote `protobuf:"bytes,5,opt,name=commitVote,proto3,oneof"` //组员提交投票
}

type VoteAction_CloseVote struct {
	CloseVote *CloseVote `protobuf:"bytes,6,opt,name=closeVote,proto3,oneof"` //关闭投票
}

type VoteAction_UpdateMember struct {
	UpdateMember *UpdateMember `protobuf:"bytes,7,opt,name=updateMember,proto3,oneof"` //更新用户信息
}

func (*VoteAction_CreateGroup) isVoteAction_Value() {}

func (*VoteAction_UpdateGroup) isVoteAction_Value() {}

func (*VoteAction_CreateVote) isVoteAction_Value() {}

func (*VoteAction_CommitVote) isVoteAction_Value() {}

func (*VoteAction_CloseVote) isVoteAction_Value() {}

func (*VoteAction_UpdateMember) isVoteAction_Value() {}

type GroupMember struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Addr       string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`              //用户地址
	VoteWeight uint32 `protobuf:"varint,2,opt,name=voteWeight,proto3" json:"voteWeight,omitempty"` //投票权重， 不填时默认为1
	NickName   string `protobuf:"bytes,3,opt,name=nickName,proto3" json:"nickName,omitempty"`      //群昵称
}

func (x *GroupMember) Reset() {
	*x = GroupMember{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GroupMember) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GroupMember) ProtoMessage() {}

func (x *GroupMember) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GroupMember.ProtoReflect.Descriptor instead.
func (*GroupMember) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{1}
}

func (x *GroupMember) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *GroupMember) GetVoteWeight() uint32 {
	if x != nil {
		return x.VoteWeight
	}
	return 0
}

func (x *GroupMember) GetNickName() string {
	if x != nil {
		return x.NickName
	}
	return ""
}

//创建投票组
type CreateGroup struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name        string         `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`               //投票组名称
	Admins      []string       `protobuf:"bytes,2,rep,name=admins,proto3" json:"admins,omitempty"`           //管理员地址列表，创建者默认为管理员
	Members     []*GroupMember `protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"`         //组员
	Description string         `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` //描述
}

func (x *CreateGroup) Reset() {
	*x = CreateGroup{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CreateGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CreateGroup) ProtoMessage() {}

func (x *CreateGroup) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CreateGroup.ProtoReflect.Descriptor instead.
func (*CreateGroup) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{2}
}

func (x *CreateGroup) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CreateGroup) GetAdmins() []string {
	if x != nil {
		return x.Admins
	}
	return nil
}

func (x *CreateGroup) GetMembers() []*GroupMember {
	if x != nil {
		return x.Members
	}
	return nil
}

func (x *CreateGroup) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

//更新投票组
type UpdateGroup struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupID       string         `protobuf:"bytes,1,opt,name=groupID,proto3" json:"groupID,omitempty"`             //投票组ID
	AddMembers    []*GroupMember `protobuf:"bytes,2,rep,name=addMembers,proto3" json:"addMembers,omitempty"`       //需要增加的组成员
	RemoveMembers []string       `protobuf:"bytes,3,rep,name=removeMembers,proto3" json:"removeMembers,omitempty"` //删除组成员的地址列表
	AddAdmins     []string       `protobuf:"bytes,4,rep,name=addAdmins,proto3" json:"addAdmins,omitempty"`         //增加管理员
	RemoveAdmins  []string       `protobuf:"bytes,5,rep,name=removeAdmins,proto3" json:"removeAdmins,omitempty"`   //删除管理员
}

func (x *UpdateGroup) Reset() {
	*x = UpdateGroup{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *UpdateGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateGroup) ProtoMessage() {}

func (x *UpdateGroup) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpdateGroup.ProtoReflect.Descriptor instead.
func (*UpdateGroup) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{3}
}

func (x *UpdateGroup) GetGroupID() string {
	if x != nil {
		return x.GroupID
	}
	return ""
}

func (x *UpdateGroup) GetAddMembers() []*GroupMember {
	if x != nil {
		return x.AddMembers
	}
	return nil
}

func (x *UpdateGroup) GetRemoveMembers() []string {
	if x != nil {
		return x.RemoveMembers
	}
	return nil
}

func (x *UpdateGroup) GetAddAdmins() []string {
	if x != nil {
		return x.AddAdmins
	}
	return nil
}

func (x *UpdateGroup) GetRemoveAdmins() []string {
	if x != nil {
		return x.RemoveAdmins
	}
	return nil
}

// 投票组信息
type GroupInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ID          string         `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`                   //投票组ID
	Name        string         `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`               //投票组名称
	MemberNum   uint32         `protobuf:"varint,3,opt,name=memberNum,proto3" json:"memberNum,omitempty"`    //组员数量
	Creator     string         `protobuf:"bytes,4,opt,name=creator,proto3" json:"creator,omitempty"`         //创建者
	Admins      []string       `protobuf:"bytes,5,rep,name=admins,proto3" json:"admins,omitempty"`           //管理员列表
	Members     []*GroupMember `protobuf:"bytes,6,rep,name=members,proto3" json:"members,omitempty"`         //成员列表
	Description string         `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` //描述信息
	VoteNum     uint32         `protobuf:"varint,8,opt,name=voteNum,proto3" json:"voteNum,omitempty"`        //投票数量
}

func (x *GroupInfo) Reset() {
	*x = GroupInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GroupInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GroupInfo) ProtoMessage() {}

func (x *GroupInfo) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GroupInfo.ProtoReflect.Descriptor instead.
func (*GroupInfo) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{4}
}

func (x *GroupInfo) GetID() string {
	if x != nil {
		return x.ID
	}
	return ""
}

func (x *GroupInfo) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *GroupInfo) GetMemberNum() uint32 {
	if x != nil {
		return x.MemberNum
	}
	return 0
}

func (x *GroupInfo) GetCreator() string {
	if x != nil {
		return x.Creator
	}
	return ""
}

func (x *GroupInfo) GetAdmins() []string {
	if x != nil {
		return x.Admins
	}
	return nil
}

func (x *GroupInfo) GetMembers() []*GroupMember {
	if x != nil {
		return x.Members
	}
	return nil
}

func (x *GroupInfo) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *GroupInfo) GetVoteNum() uint32 {
	if x != nil {
		return x.VoteNum
	}
	return 0
}

type GroupInfos struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupList []*GroupInfo `protobuf:"bytes,1,rep,name=groupList,proto3" json:"groupList,omitempty"` //投票组信息列表
}

func (x *GroupInfos) Reset() {
	*x = GroupInfos{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GroupInfos) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GroupInfos) ProtoMessage() {}

func (x *GroupInfos) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GroupInfos.ProtoReflect.Descriptor instead.
func (*GroupInfos) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{5}
}

func (x *GroupInfos) GetGroupList() []*GroupInfo {
	if x != nil {
		return x.GroupList
	}
	return nil
}

//投票选项
type VoteOption struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Option string `protobuf:"bytes,1,opt,name=option,proto3" json:"option,omitempty"` //投票选项
	Score  uint32 `protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"`  //投票得分
}

func (x *VoteOption) Reset() {
	*x = VoteOption{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VoteOption) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VoteOption) ProtoMessage() {}

func (x *VoteOption) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[6]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VoteOption.ProtoReflect.Descriptor instead.
func (*VoteOption) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{6}
}

func (x *VoteOption) GetOption() string {
	if x != nil {
		return x.Option
	}
	return ""
}

func (x *VoteOption) GetScore() uint32 {
	if x != nil {
		return x.Score
	}
	return 0
}

// 创建投票交易，请求结构
type CreateVote struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name           string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`                      //投票名称
	GroupID        string   `protobuf:"bytes,2,opt,name=groupID,proto3" json:"groupID,omitempty"`                //投票关联组
	VoteOptions    []string `protobuf:"bytes,3,rep,name=voteOptions,proto3" json:"voteOptions,omitempty"`        //投票选项列表
	BeginTimestamp int64    `protobuf:"varint,4,opt,name=beginTimestamp,proto3" json:"beginTimestamp,omitempty"` //投票开始时间戳
	EndTimestamp   int64    `protobuf:"varint,5,opt,name=endTimestamp,proto3" json:"endTimestamp,omitempty"`     //投票结束时间戳
	Description    string   `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"`        //描述信息
}

func (x *CreateVote) Reset() {
	*x = CreateVote{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CreateVote) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CreateVote) ProtoMessage() {}

func (x *CreateVote) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[7]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CreateVote.ProtoReflect.Descriptor instead.
func (*CreateVote) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{7}
}

func (x *CreateVote) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CreateVote) GetGroupID() string {
	if x != nil {
		return x.GroupID
	}
	return ""
}

func (x *CreateVote) GetVoteOptions() []string {
	if x != nil {
		return x.VoteOptions
	}
	return nil
}

func (x *CreateVote) GetBeginTimestamp() int64 {
	if x != nil {
		return x.BeginTimestamp
	}
	return 0
}

func (x *CreateVote) GetEndTimestamp() int64 {
	if x != nil {
		return x.EndTimestamp
	}
	return 0
}

func (x *CreateVote) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

// 创建提交投票交易，请求结构
type CommitVote struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	VoteID      string `protobuf:"bytes,1,opt,name=voteID,proto3" json:"voteID,omitempty"`            //投票ID
	OptionIndex uint32 `protobuf:"varint,2,opt,name=optionIndex,proto3" json:"optionIndex,omitempty"` //投票选项数组下标，下标对应投票内容
}

func (x *CommitVote) Reset() {
	*x = CommitVote{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CommitVote) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CommitVote) ProtoMessage() {}

func (x *CommitVote) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[8]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CommitVote.ProtoReflect.Descriptor instead.
func (*CommitVote) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{8}
}

func (x *CommitVote) GetVoteID() string {
	if x != nil {
		return x.VoteID
	}
	return ""
}

func (x *CommitVote) GetOptionIndex() uint32 {
	if x != nil {
		return x.OptionIndex
	}
	return 0
}

type CommitInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Addr       string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`              //提交地址
	TxHash     string `protobuf:"bytes,2,opt,name=txHash,proto3" json:"txHash,omitempty"`          //提交交易哈希
	VoteWeight uint32 `protobuf:"varint,3,opt,name=voteWeight,proto3" json:"voteWeight,omitempty"` //投票权重
}

func (x *CommitInfo) Reset() {
	*x = CommitInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CommitInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CommitInfo) ProtoMessage() {}

func (x *CommitInfo) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[9]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CommitInfo.ProtoReflect.Descriptor instead.
func (*CommitInfo) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{9}
}

func (x *CommitInfo) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *CommitInfo) GetTxHash() string {
	if x != nil {
		return x.TxHash
	}
	return ""
}

func (x *CommitInfo) GetVoteWeight() uint32 {
	if x != nil {
		return x.VoteWeight
	}
	return 0
}

type CloseVote struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	VoteID string `protobuf:"bytes,1,opt,name=voteID,proto3" json:"voteID,omitempty"` // 投票ID
}

func (x *CloseVote) Reset() {
	*x = CloseVote{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CloseVote) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CloseVote) ProtoMessage() {}

func (x *CloseVote) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[10]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CloseVote.ProtoReflect.Descriptor instead.
func (*CloseVote) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{10}
}

func (x *CloseVote) GetVoteID() string {
	if x != nil {
		return x.VoteID
	}
	return ""
}

type UpdateMember struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` //用户名称
}

func (x *UpdateMember) Reset() {
	*x = UpdateMember{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *UpdateMember) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateMember) ProtoMessage() {}

func (x *UpdateMember) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[11]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpdateMember.ProtoReflect.Descriptor instead.
func (*UpdateMember) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{11}
}

func (x *UpdateMember) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

//投票信息
type VoteInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ID             string        `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`                          //投票ID
	Name           string        `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`                      //投票名称
	Creator        string        `protobuf:"bytes,3,opt,name=creator,proto3" json:"creator,omitempty"`                //创建者
	GroupID        string        `protobuf:"bytes,4,opt,name=groupID,proto3" json:"groupID,omitempty"`                //投票关联的投票组
	VoteOptions    []*VoteOption `protobuf:"bytes,5,rep,name=voteOptions,proto3" json:"voteOptions,omitempty"`        //投票的选项
	BeginTimestamp int64         `protobuf:"varint,6,opt,name=beginTimestamp,proto3" json:"beginTimestamp,omitempty"` //投票开始时间戳
	EndTimestamp   int64         `protobuf:"varint,7,opt,name=endTimestamp,proto3" json:"endTimestamp,omitempty"`     //投票结束时间戳
	CommitInfos    []*CommitInfo `protobuf:"bytes,8,rep,name=commitInfos,proto3" json:"commitInfos,omitempty"`        //已投票的提交信息
	Description    string        `protobuf:"bytes,9,opt,name=description,proto3" json:"description,omitempty"`        //描述信息
	Status         uint32        `protobuf:"varint,10,opt,name=status,proto3" json:"status,omitempty"`                //状态，1即将开始，2正在进行，3已经结束，4已关闭
	GroupName      string        `protobuf:"bytes,11,opt,name=groupName,proto3" json:"groupName,omitempty"`           //所属投票组名称
}

func (x *VoteInfo) Reset() {
	*x = VoteInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VoteInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VoteInfo) ProtoMessage() {}

func (x *VoteInfo) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[12]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VoteInfo.ProtoReflect.Descriptor instead.
func (*VoteInfo) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{12}
}

func (x *VoteInfo) GetID() string {
	if x != nil {
		return x.ID
	}
	return ""
}

func (x *VoteInfo) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *VoteInfo) GetCreator() string {
	if x != nil {
		return x.Creator
	}
	return ""
}

func (x *VoteInfo) GetGroupID() string {
	if x != nil {
		return x.GroupID
	}
	return ""
}

func (x *VoteInfo) GetVoteOptions() []*VoteOption {
	if x != nil {
		return x.VoteOptions
	}
	return nil
}

func (x *VoteInfo) GetBeginTimestamp() int64 {
	if x != nil {
		return x.BeginTimestamp
	}
	return 0
}

func (x *VoteInfo) GetEndTimestamp() int64 {
	if x != nil {
		return x.EndTimestamp
	}
	return 0
}

func (x *VoteInfo) GetCommitInfos() []*CommitInfo {
	if x != nil {
		return x.CommitInfos
	}
	return nil
}

func (x *VoteInfo) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *VoteInfo) GetStatus() uint32 {
	if x != nil {
		return x.Status
	}
	return 0
}

func (x *VoteInfo) GetGroupName() string {
	if x != nil {
		return x.GroupName
	}
	return ""
}

type VoteInfos struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	VoteList []*VoteInfo `protobuf:"bytes,1,rep,name=voteList,proto3" json:"voteList,omitempty"` //投票信息列表
}

func (x *VoteInfos) Reset() {
	*x = VoteInfos{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VoteInfos) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VoteInfos) ProtoMessage() {}

func (x *VoteInfos) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[13]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VoteInfos.ProtoReflect.Descriptor instead.
func (*VoteInfos) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{13}
}

func (x *VoteInfos) GetVoteList() []*VoteInfo {
	if x != nil {
		return x.VoteList
	}
	return nil
}

type MemberInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Addr     string   `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`         //地址
	Name     string   `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`         //用户名称
	GroupIDs []string `protobuf:"bytes,3,rep,name=groupIDs,proto3" json:"groupIDs,omitempty"` //所属投票组的ID列表
}

func (x *MemberInfo) Reset() {
	*x = MemberInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *MemberInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MemberInfo) ProtoMessage() {}

func (x *MemberInfo) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[14]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MemberInfo.ProtoReflect.Descriptor instead.
func (*MemberInfo) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{14}
}

func (x *MemberInfo) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *MemberInfo) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *MemberInfo) GetGroupIDs() []string {
	if x != nil {
		return x.GroupIDs
	}
	return nil
}

type MemberInfos struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	MemberList []*MemberInfo `protobuf:"bytes,1,rep,name=memberList,proto3" json:"memberList,omitempty"` //投票组成员信息列表
}

func (x *MemberInfos) Reset() {
	*x = MemberInfos{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *MemberInfos) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MemberInfos) ProtoMessage() {}

func (x *MemberInfos) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[15]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MemberInfos.ProtoReflect.Descriptor instead.
func (*MemberInfos) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{15}
}

func (x *MemberInfos) GetMemberList() []*MemberInfo {
	if x != nil {
		return x.MemberList
	}
	return nil
}

type ReqStrings struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Items []string `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` //请求项数组
}

func (x *ReqStrings) Reset() {
	*x = ReqStrings{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReqStrings) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReqStrings) ProtoMessage() {}

func (x *ReqStrings) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[16]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReqStrings.ProtoReflect.Descriptor instead.
func (*ReqStrings) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{16}
}

func (x *ReqStrings) GetItems() []string {
	if x != nil {
		return x.Items
	}
	return nil
}

//列表请求结构
type ReqListItem struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	StartItemID string `protobuf:"bytes,1,opt,name=startItemID,proto3" json:"startItemID,omitempty"` //列表开始的ID，如请求组列表即groupID，不包含在结果中
	Count       int32  `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`            //请求列表项数量, 0表示请求所有
	Direction   int32  `protobuf:"varint,3,opt,name=direction,proto3" json:"direction,omitempty"`    // 0表示根据ID降序，1表示升序，目前ID和区块高度正相关
}

func (x *ReqListItem) Reset() {
	*x = ReqListItem{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReqListItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReqListItem) ProtoMessage() {}

func (x *ReqListItem) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[17]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReqListItem.ProtoReflect.Descriptor instead.
func (*ReqListItem) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{17}
}

func (x *ReqListItem) GetStartItemID() string {
	if x != nil {
		return x.StartItemID
	}
	return ""
}

func (x *ReqListItem) GetCount() int32 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *ReqListItem) GetDirection() int32 {
	if x != nil {
		return x.Direction
	}
	return 0
}

type ReqListVote struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupID string       `protobuf:"bytes,1,opt,name=groupID,proto3" json:"groupID,omitempty"` //指定所属组ID
	ListReq *ReqListItem `protobuf:"bytes,2,opt,name=listReq,proto3" json:"listReq,omitempty"` //列表请求
	Status  uint32       `protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`  //指定投票状态
}

func (x *ReqListVote) Reset() {
	*x = ReqListVote{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReqListVote) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReqListVote) ProtoMessage() {}

func (x *ReqListVote) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[18]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReqListVote.ProtoReflect.Descriptor instead.
func (*ReqListVote) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{18}
}

func (x *ReqListVote) GetGroupID() string {
	if x != nil {
		return x.GroupID
	}
	return ""
}

func (x *ReqListVote) GetListReq() *ReqListItem {
	if x != nil {
		return x.ListReq
	}
	return nil
}

func (x *ReqListVote) GetStatus() uint32 {
	if x != nil {
		return x.Status
	}
	return 0
}

type ReplyVoteList struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	VoteList         []*VoteInfo `protobuf:"bytes,1,rep,name=voteList,proto3" json:"voteList,omitempty"`                  //投票列表
	CurrentTimestamp int64       `protobuf:"varint,2,opt,name=currentTimestamp,proto3" json:"currentTimestamp,omitempty"` //当前系统时间
}

func (x *ReplyVoteList) Reset() {
	*x = ReplyVoteList{}
	if protoimpl.UnsafeEnabled {
		mi := &file_vote_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ReplyVoteList) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReplyVoteList) ProtoMessage() {}

func (x *ReplyVoteList) ProtoReflect() protoreflect.Message {
	mi := &file_vote_proto_msgTypes[19]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReplyVoteList.ProtoReflect.Descriptor instead.
func (*ReplyVoteList) Descriptor() ([]byte, []int) {
	return file_vote_proto_rawDescGZIP(), []int{19}
}

func (x *ReplyVoteList) GetVoteList() []*VoteInfo {
	if x != nil {
		return x.VoteList
	}
	return nil
}

func (x *ReplyVoteList) GetCurrentTimestamp() int64 {
	if x != nil {
		return x.CurrentTimestamp
	}
	return 0
}

var File_vote_proto protoreflect.FileDescriptor

var file_vote_proto_rawDesc = []byte{
	0x0a, 0x0a, 0x76, 0x6f, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x22, 0xec, 0x02, 0x0a, 0x0a, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69,
	0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
	0x74, 0x79, 0x12, 0x36, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75,
	0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x63,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x75, 0x70,
	0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x74, 0x65,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
	0x74, 0x56, 0x6f, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00,
	0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x09,
	0x63, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x6f, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x6f, 0x74,
	0x65, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x39,
	0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64,
	0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x70, 0x64,
	0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x22, 0x5d, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x6f, 0x74, 0x65, 0x57, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x76, 0x6f, 0x74, 0x65, 0x57,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d,
	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d,
	0x65, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75,
	0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x18,
	0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0x2c, 0x0a,
	0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62,
	0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64,
	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc3, 0x01,
	0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a,
	0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x64, 0x64, 0x4d, 0x65,
	0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52,
	0x0a, 0x61, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72,
	0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x18, 0x04,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12,
	0x22, 0x0a, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x18,
	0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x6d,
	0x69, 0x6e, 0x73, 0x22, 0xe9, 0x01, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66,
	0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49,
	0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e,
	0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a,
	0x06, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x61,
	0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73,
	0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x47,
	0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62,
	0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x74, 0x65, 0x4e, 0x75, 0x6d,
	0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x6f, 0x74, 0x65, 0x4e, 0x75, 0x6d, 0x22,
	0x3c, 0x0a, 0x0a, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2e, 0x0a,
	0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e,
	0x66, 0x6f, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3a, 0x0a,
	0x0a, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x74,
	0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0d, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x0a, 0x43, 0x72,
	0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67,
	0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6f, 0x74, 0x65, 0x4f, 0x70,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x6f, 0x74,
	0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x62, 0x65, 0x67, 0x69,
	0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x0e, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
	0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73,
	0x74, 0x61, 0x6d, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
	0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
	0x56, 0x6f, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x65, 0x49, 0x44, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x65, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b,
	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x58,
	0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04,
	0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72,
	0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x6f, 0x74, 0x65,
	0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x76, 0x6f,
	0x74, 0x65, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x73,
	0x65, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x65, 0x49, 0x44, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x65, 0x49, 0x44, 0x22, 0x22, 0x0a,
	0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
	0x65, 0x22, 0xf0, 0x02, 0x0a, 0x08, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e,
	0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12,
	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67,
	0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12, 0x33, 0x0a, 0x0b, 0x76, 0x6f, 0x74, 0x65, 0x4f, 0x70,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b,
	0x76, 0x6f, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x62,
	0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x0e, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
	0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
	0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69,
	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
	0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52,
	0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b,
	0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06,
	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e,
	0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70,
	0x4e, 0x61, 0x6d, 0x65, 0x22, 0x38, 0x0a, 0x09, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f,
	0x73, 0x12, 0x2b, 0x0a, 0x08, 0x76, 0x6f, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x6f, 0x74, 0x65,
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, 0x6f, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x50,
	0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04,
	0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72,
	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x73,
	0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x73,
	0x22, 0x40, 0x0a, 0x0b, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12,
	0x31, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x6d, 0x62,
	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69,
	0x73, 0x74, 0x22, 0x22, 0x0a, 0x0a, 0x52, 0x65, 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73,
	0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x63, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x4c, 0x69, 0x73,
	0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x74,
	0x65, 0x6d, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72,
	0x74, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a,
	0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, 0x0b, 0x52,
	0x65, 0x71, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72,
	0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f,
	0x75, 0x70, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65,
	0x71, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x52,
	0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x68, 0x0a, 0x0d, 0x52, 0x65,
	0x70, 0x6c, 0x79, 0x56, 0x6f, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x08, 0x76,
	0x6f, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
	0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08,
	0x76, 0x6f, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72,
	0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73,
	0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_vote_proto_rawDescOnce sync.Once
	file_vote_proto_rawDescData = file_vote_proto_rawDesc
)

func file_vote_proto_rawDescGZIP() []byte {
	file_vote_proto_rawDescOnce.Do(func() {
		file_vote_proto_rawDescData = protoimpl.X.CompressGZIP(file_vote_proto_rawDescData)
	})
	return file_vote_proto_rawDescData
}

var file_vote_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_vote_proto_goTypes = []interface{}{
	(*VoteAction)(nil),    // 0: types.VoteAction
	(*GroupMember)(nil),   // 1: types.GroupMember
	(*CreateGroup)(nil),   // 2: types.CreateGroup
	(*UpdateGroup)(nil),   // 3: types.UpdateGroup
	(*GroupInfo)(nil),     // 4: types.GroupInfo
	(*GroupInfos)(nil),    // 5: types.GroupInfos
	(*VoteOption)(nil),    // 6: types.VoteOption
	(*CreateVote)(nil),    // 7: types.CreateVote
	(*CommitVote)(nil),    // 8: types.CommitVote
	(*CommitInfo)(nil),    // 9: types.CommitInfo
	(*CloseVote)(nil),     // 10: types.CloseVote
	(*UpdateMember)(nil),  // 11: types.UpdateMember
	(*VoteInfo)(nil),      // 12: types.VoteInfo
	(*VoteInfos)(nil),     // 13: types.VoteInfos
	(*MemberInfo)(nil),    // 14: types.MemberInfo
	(*MemberInfos)(nil),   // 15: types.MemberInfos
	(*ReqStrings)(nil),    // 16: types.ReqStrings
	(*ReqListItem)(nil),   // 17: types.ReqListItem
	(*ReqListVote)(nil),   // 18: types.ReqListVote
	(*ReplyVoteList)(nil), // 19: types.ReplyVoteList
}
var file_vote_proto_depIdxs = []int32{
	2,  // 0: types.VoteAction.createGroup:type_name -> types.CreateGroup
	3,  // 1: types.VoteAction.updateGroup:type_name -> types.UpdateGroup
	7,  // 2: types.VoteAction.createVote:type_name -> types.CreateVote
	8,  // 3: types.VoteAction.commitVote:type_name -> types.CommitVote
	10, // 4: types.VoteAction.closeVote:type_name -> types.CloseVote
	11, // 5: types.VoteAction.updateMember:type_name -> types.UpdateMember
	1,  // 6: types.CreateGroup.members:type_name -> types.GroupMember
	1,  // 7: types.UpdateGroup.addMembers:type_name -> types.GroupMember
	1,  // 8: types.GroupInfo.members:type_name -> types.GroupMember
	4,  // 9: types.GroupInfos.groupList:type_name -> types.GroupInfo
	6,  // 10: types.VoteInfo.voteOptions:type_name -> types.VoteOption
	9,  // 11: types.VoteInfo.commitInfos:type_name -> types.CommitInfo
	12, // 12: types.VoteInfos.voteList:type_name -> types.VoteInfo
	14, // 13: types.MemberInfos.memberList:type_name -> types.MemberInfo
	17, // 14: types.ReqListVote.listReq:type_name -> types.ReqListItem
	12, // 15: types.ReplyVoteList.voteList:type_name -> types.VoteInfo
	16, // [16:16] is the sub-list for method output_type
	16, // [16:16] is the sub-list for method input_type
	16, // [16:16] is the sub-list for extension type_name
	16, // [16:16] is the sub-list for extension extendee
	0,  // [0:16] is the sub-list for field type_name
}

func init() { file_vote_proto_init() }
func file_vote_proto_init() {
	if File_vote_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_vote_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VoteAction); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GroupMember); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGroup); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UpdateGroup); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GroupInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GroupInfos); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VoteOption); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateVote); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CommitVote); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CommitInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CloseVote); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UpdateMember); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VoteInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VoteInfos); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MemberInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MemberInfos); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqStrings); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqListItem); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqListVote); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_vote_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReplyVoteList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_vote_proto_msgTypes[0].OneofWrappers = []interface{}{
		(*VoteAction_CreateGroup)(nil),
		(*VoteAction_UpdateGroup)(nil),
		(*VoteAction_CreateVote)(nil),
		(*VoteAction_CommitVote)(nil),
		(*VoteAction_CloseVote)(nil),
		(*VoteAction_UpdateMember)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_vote_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   20,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_vote_proto_goTypes,
		DependencyIndexes: file_vote_proto_depIdxs,
		MessageInfos:      file_vote_proto_msgTypes,
	}.Build()
	File_vote_proto = out.File
	file_vote_proto_rawDesc = nil
	file_vote_proto_goTypes = nil
	file_vote_proto_depIdxs = nil
}
