diff --git a/internal/pkg/chainsdk/core/group.go b/internal/pkg/chainsdk/core/group.go index f0f401b4..f166ea5a 100644 --- a/internal/pkg/chainsdk/core/group.go +++ b/internal/pkg/chainsdk/core/group.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/golang/protobuf/proto" - "github.com/google/uuid" "github.com/rumsystem/quorum/internal/pkg/conn" "github.com/rumsystem/quorum/internal/pkg/logging" "github.com/rumsystem/quorum/internal/pkg/nodectx" @@ -17,9 +16,6 @@ import ( var group_log = logging.Logger("group") -const DEFAULT_EPOCH_DURATION = 1000 //ms -const INIT_FORK_TRX_ID = "00000000-0000-0000-0000-000000000000" - type Group struct { Item *quorumpb.GroupItem ChainCtx *Chain @@ -27,98 +23,6 @@ type Group struct { Nodename string } -func (grp *Group) NewGroup(item *quorumpb.GroupItem) (*quorumpb.Block, error) { - group_log.Debugf("<%s> NewGroup called", item.GroupId) - - grp.Item = item - grp.GroupId = item.GroupId - grp.Nodename = nodectx.GetNodeCtx().Name - - //create and initial chain - grp.ChainCtx = &Chain{} - grp.ChainCtx.NewChain(item, grp.Nodename, false) - - ks := nodectx.GetNodeCtx().Keystore - - //create initial consensus for genesis block - consensusInfo := &quorumpb.ConsensusInfo{ - ConsensusId: uuid.New().String(), - ChainVer: 0, - InTrx: INIT_FORK_TRX_ID, - ForkFromBlock: 0, - } - - //save consensus info to db - group_log.Debugf("<%s> save consensus result", grp.Item.GroupId) - err := nodectx.GetNodeCtx().GetChainStorage().SaveGroupConsensusInfo(item.GroupId, consensusInfo, grp.Nodename) - if err != nil { - group_log.Debugf("<%s> save consensus result failed", grp.Item.GroupId) - return nil, err - } - - //create fork trx - forkItem := &quorumpb.ForkItem{ - GroupId: item.GroupId, - Consensus: consensusInfo, - StartFromBlock: 0, - StartFromEpoch: 0, - EpochDuration: DEFAULT_EPOCH_DURATION, - Producers: []string{item.OwnerPubKey}, //owner is the first producer - Memo: "genesis fork", - } - - forkTrx, err := grp.ChainCtx.GetTrxFactory().GetForkTrx("", forkItem) - if err != nil { - return nil, err - } - - //create and save genesis block - group_log.Debugf("<%s> create and save genesis block", grp.Item.GroupId) - genesisBlock, err := rumchaindata.CreateGenesisBlockByEthKey(item.GroupId, consensusInfo, forkTrx, item.OwnerPubKey, ks, "") - err = nodectx.GetNodeCtx().GetChainStorage().AddGensisBlock(genesisBlock, false, grp.Nodename) - if err != nil { - return nil, err - } - - //add group owner as the first group producer - group_log.Debugf("<%s> add owner as the first producer", grp.Item.GroupId) - pItem := &quorumpb.ProducerItem{} - pItem.GroupId = item.GroupId - pItem.ProducerPubkey = item.OwnerPubKey - pItem.ProofTrxId = "" - pItem.BlkCnt = 0 - pItem.Memo = "Owner Registated as the first group producer" - err = nodectx.GetNodeCtx().GetChainStorage().AddProducer(pItem, grp.Nodename) - if err != nil { - return nil, err - } - - //load and update group producers - grp.ChainCtx.updateProducerPool() - - //create and register ConnMgr for chainctx - conn.GetConn().RegisterChainCtx(item.GroupId, - item.OwnerPubKey, - item.UserSignPubkey, - grp.ChainCtx) - - //commented by cuicat - //update producer list for ConnMgr just created - //grp.ChainCtx.UpdConnMgrProducer() - - //create group consensus - grp.ChainCtx.CreateConsensus() - - //save groupItem to db - err = nodectx.GetNodeCtx().GetChainStorage().AddGroup(grp.Item) - if err != nil { - return nil, err - } - - group_log.Debugf("Group <%s> created", grp.Item.GroupId) - return genesisBlock, nil -} - func (grp *Group) JoinGroup(item *quorumpb.GroupItem) error { group_log.Debugf("<%s> JoinGoup called", item.GroupId) diff --git a/pkg/chainapi/api/joingroup_v2.go b/pkg/chainapi/api/joingroup_v2.go index 4637b689..dffef310 100644 --- a/pkg/chainapi/api/joingroup_v2.go +++ b/pkg/chainapi/api/joingroup_v2.go @@ -22,6 +22,10 @@ import ( "github.com/rumsystem/quorum/testnode" ) +type JoinGroupParamV2 struct { + Seed string `json:"seed" validate:"required" example:"rum://seed?v=1&e=0&n=0&b=tknSczG2RC6hEBTXZyig7w&c=Za8zI2nAWaTNSvSv6cnPPxHCZef9sGtKtgsZ8iSxj0E&g=SfGcugfLTZ68Hc-xscFwMQ&k=AnRP4sojIvAH-Ugqnd7ZaM1H8j_c1pX6clyeXgAORiGZ&s=mrcA0LDzo54zUujZTINvWM_k2HSifv2T4JfYHAY2EzsCRGdR5vxHbvVNStlJOOBK_ohT6vFGs0FDk2pWYVRPUQE&t=FyvyFrtDGC0&a=timeline.dev&y=group_timeline&u=http%3A%2F%2F1.2.3.4%3A6090%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbGxvd0dyb3VwcyI6WyI0OWYxOWNiYS0wN2NiLTRkOWUtYmMxZC1jZmIxYjFjMTcwMzEiXSwiZXhwIjoxODI3Mzc0MjgyLCJuYW1lIjoiYWxsb3ctNDlmMTljYmEtMDdjYi00ZDllLWJjMWQtY2ZiMWIxYzE3MDMxIiwicm9sZSI6Im5vZGUifQ.rr_tYm0aUdmOeM0EYVzNpKmoNDOpSGzD38s6tjlxuCo"` // seed url +} + type JoinGroupResult struct { GroupId string `json:"group_id" validate:"required,uuid4" example:"c0020941-e648-40c9-92dc-682645acd17e"` GroupName string `json:"group_name" validate:"required" example:"demo group"` diff --git a/pkg/chainapi/api/newseed.go b/pkg/chainapi/api/newseed.go new file mode 100644 index 00000000..90d8afed --- /dev/null +++ b/pkg/chainapi/api/newseed.go @@ -0,0 +1,37 @@ +package api + +import ( + "net/http" + + "github.com/labstack/echo/v4" + "github.com/rumsystem/quorum/internal/pkg/options" + "github.com/rumsystem/quorum/internal/pkg/utils" + handlers "github.com/rumsystem/quorum/pkg/chainapi/handlers" + _ "github.com/rumsystem/quorum/pkg/pb" //import for swaggo +) + +// @Tags Groups +// @Summary CreateGroupUrl +// @Description Create a new group +// @Accept json +// @Produce json +// @Param data body handlers.CreateGroupParam true "GroupInfo" +// @Success 200 {object} handlers.CreateGroupResult +// @Router /api/v1/group [post] +func (h *Handler) NewSeed() echo.HandlerFunc { + return func(c echo.Context) error { + cc := c.(*utils.CustomContext) + + params := new(handlers.NewSeedParams) + if err := cc.BindAndValidate(params); err != nil { + return err + } + + seed, err := handlers.NewSeed(params, options.GetNodeOptions()) + if err != nil { + return err + } + + return c.JSON(http.StatusOK, seed) + } +} diff --git a/pkg/chainapi/api/server.go b/pkg/chainapi/api/server.go index 8877d4f6..d0d35ea3 100644 --- a/pkg/chainapi/api/server.go +++ b/pkg/chainapi/api/server.go @@ -84,6 +84,8 @@ func StartFullNodeServer(config StartServerParam, signalch chan os.Signal, h *Ha a := e.Group("/app/api") r.GET("/quit", quitapp) + r.POST("/v2/group/newseed", h.NewSeed()) + r.POST("/v1/group", h.CreateGroupUrl()) r.POST("/v2/group/join", h.JoinGroupV2()) r.POST("/v1/group/leave", h.LeaveGroup) diff --git a/pkg/chainapi/handlers/newseed.go b/pkg/chainapi/handlers/newseed.go new file mode 100644 index 00000000..45eb2fe6 --- /dev/null +++ b/pkg/chainapi/handlers/newseed.go @@ -0,0 +1,130 @@ +package handlers + +import ( + "encoding/hex" + "errors" + + "github.com/go-playground/validator/v10" + guuid "github.com/google/uuid" + "github.com/rumsystem/quorum/internal/pkg/nodectx" + "github.com/rumsystem/quorum/internal/pkg/options" + localcrypto "github.com/rumsystem/quorum/pkg/crypto" + rumchaindata "github.com/rumsystem/quorum/pkg/data" + "github.com/rumsystem/quorum/pkg/pb" + "google.golang.org/protobuf/proto" +) + +type NewSeedParams struct { + AppKey string `from:"app_key" json:"app_key" validate:"required,max=20,min=4" example:"test_app"` + GroupName string `from:"group_name" json:"group_name" validate:"required,max=100,min=2" example:"demo group"` + ConsensusType string `from:"consensus_type" json:"consensus_type" validate:"required,oneof=pos poa" example:"poa"` + EncryptionType string `from:"encryption_type" json:"encryption_type" validate:"required,oneof=public private" example:"public"` +} + +type NewSeedResult struct { + AppKey string `json:"app_key" validate:"required" example:"test_app"` + GroupId string `json:"group_id" validate:"required,uuid4" example:"c0020941-e648-40c9-92dc-682645acd17e"` + Seed *pb.GroupSeedRumLite `json:"seed" validate:"required"` +} + +const DEFAULT_EPOCH_DURATION = 1000 //ms + +func NewSeed(params *NewSeedParams, nodeoptions *options.NodeOptions) (*NewSeedResult, error) { + validate := validator.New() + if err := validate.Struct(params); err != nil { + return nil, err + } + + if params.ConsensusType != "poa" { + return nil, errors.New("consensus_type must be poa, other types are not supported in rum-lite") + } + + if params.EncryptionType != "public" { + return nil, errors.New("encryption_type must be public, other types are not supported in rum-lite") + } + + //create groupid + groupid := guuid.New().String() + + //init keystore + ks := nodectx.GetNodeCtx().Keystore + + //init ownerpubkey + ownerpubkey, err := initSignKey(groupid, ks, nodeoptions) + if err != nil { + return nil, errors.New("group key can't be decoded, err:" + err.Error()) + } + + //init cipher key + cipherKey, err := localcrypto.CreateAesKey() + if err != nil { + return nil, err + } + + //create genesis block + genesisBlock, err := rumchaindata.CreateGenesisBlockByEthKey(groupid, ownerpubkey, ks, "") + if err != nil { + return nil, err + } + + groupConsensusInfo := &pb.PoaGroupConsensusInfo{ + EpochDuration: DEFAULT_EPOCH_DURATION, + Producers: []string{ownerpubkey}, + CurrEpoch: 0, + CurrBlockId: 0, + } + + //initial PublicPoaGroupItem + publicPoaGroup := &pb.PublicPOAGroupItem{ + AppKey: params.AppKey, + GroupId: groupid, + GroupName: params.GroupName, + OwnerPubKey: ownerpubkey, + SignPubkey: ownerpubkey, + CipherKey: hex.EncodeToString(cipherKey), + GenesisBlock: genesisBlock, + ConsensusInfo: groupConsensusInfo, + } + + //marshal PublicPoaGroupItem + publicPoaGroupByts, err := proto.Marshal(publicPoaGroup) + if err != nil { + return nil, err + } // + + //create GroupItemRumLite + groupItem := &pb.GroupItemRumLite{ + Type: pb.GroupType_PUBLIC_POA, + GroupData: publicPoaGroupByts, + } + + //marshal GroupItemRumLite + groupItemByts, err := proto.Marshal(groupItem) + if err != nil { + return nil, err + } + + //create hash + hash := localcrypto.Hash(groupItemByts) + + //create signature + signature, err := ks.EthSignByKeyAlias(groupid, hash) + if err != nil { + return nil, err + } + + //create GroupSeedRumLite + groupSeed := &pb.GroupSeedRumLite{ + Group: groupItem, + Hash: hash, + Signature: signature, + } + + result := &NewSeedResult{ + AppKey: params.AppKey, + GroupId: groupid, + Seed: groupSeed, + } + + return result, nil +} diff --git a/pkg/data/block.go b/pkg/data/block.go index 4a188c7d..60643b9b 100644 --- a/pkg/data/block.go +++ b/pkg/data/block.go @@ -14,7 +14,7 @@ import ( "time" ) -func CreateBlockByEthKey(parentBlk *quorumpb.Block, consensusInfo *quorumpb.ConsensusInfo, trxs []*quorumpb.Trx, groupPublicKey string, keystore localcrypto.Keystore, keyalias string, opts ...string) (*quorumpb.Block, error) { +func CreateBlockByEthKey(parentBlk *quorumpb.Block, trxs []*quorumpb.Trx, groupPublicKey string, keystore localcrypto.Keystore, keyalias string, opts ...string) (*quorumpb.Block, error) { newBlock := &quorumpb.Block{ GroupId: parentBlk.GroupId, BlockId: parentBlk.BlockId + 1, @@ -51,15 +51,16 @@ func CreateBlockByEthKey(parentBlk *quorumpb.Block, consensusInfo *quorumpb.Cons return newBlock, nil } -func CreateGenesisBlockByEthKey(groupId string, consensusInfo *quorumpb.ConsensusInfo, forkTrx *quorumpb.Trx, groupPublicKey string, keystore localcrypto.Keystore, keyalias string) (*quorumpb.Block, error) { +func CreateGenesisBlockByEthKey(groupId string, producerPubkey string, keystore localcrypto.Keystore, keyalias string) (*quorumpb.Block, error) { genesisBlock := &quorumpb.Block{ GroupId: groupId, BlockId: 0, PrevHash: nil, - ProducerPubkey: groupPublicKey, - Trxs: []*quorumpb.Trx{forkTrx}, + ProducerPubkey: producerPubkey, + Trxs: nil, TimeStamp: time.Now().UnixNano(), - Consensus: consensusInfo, + BlockHash: nil, + ProducerSign: nil, } bbytes, err := proto.Marshal(genesisBlock) @@ -96,7 +97,6 @@ func ValidBlockWithParent(newBlock, parentBlock *quorumpb.Block) (bool, error) { ProducerPubkey: newBlock.ProducerPubkey, Trxs: newBlock.Trxs, TimeStamp: newBlock.TimeStamp, - Consensus: newBlock.Consensus, BlockHash: nil, ProducerSign: nil, } @@ -157,7 +157,6 @@ func ValidGenesisBlock(genesisBlock *quorumpb.Block) (bool, error) { ProducerPubkey: genesisBlock.ProducerPubkey, Trxs: genesisBlock.Trxs, TimeStamp: genesisBlock.TimeStamp, - Consensus: genesisBlock.Consensus, BlockHash: nil, ProducerSign: nil, } diff --git a/pkg/pb/chain.pb.go b/pkg/pb/chain.pb.go index 0ef22f3c..33abc365 100644 --- a/pkg/pb/chain.pb.go +++ b/pkg/pb/chain.pb.go @@ -785,6 +785,52 @@ func (GroupConsenseType) EnumDescriptor() ([]byte, []int) { return file_chain_proto_rawDescGZIP(), []int{15} } +type GroupType int32 + +const ( + GroupType_PUBLIC_POA GroupType = 0 + GroupType_PRIVATE_POA GroupType = 1 +) + +// Enum value maps for GroupType. +var ( + GroupType_name = map[int32]string{ + 0: "PUBLIC_POA", + 1: "PRIVATE_POA", + } + GroupType_value = map[string]int32{ + "PUBLIC_POA": 0, + "PRIVATE_POA": 1, + } +) + +func (x GroupType) Enum() *GroupType { + p := new(GroupType) + *p = x + return p +} + +func (x GroupType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GroupType) Descriptor() protoreflect.EnumDescriptor { + return file_chain_proto_enumTypes[16].Descriptor() +} + +func (GroupType) Type() protoreflect.EnumType { + return &file_chain_proto_enumTypes[16] +} + +func (x GroupType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GroupType.Descriptor instead. +func (GroupType) EnumDescriptor() ([]byte, []int) { + return file_chain_proto_rawDescGZIP(), []int{16} +} + type HBMsgPayloadType int32 const ( @@ -815,11 +861,11 @@ func (x HBMsgPayloadType) String() string { } func (HBMsgPayloadType) Descriptor() protoreflect.EnumDescriptor { - return file_chain_proto_enumTypes[16].Descriptor() + return file_chain_proto_enumTypes[17].Descriptor() } func (HBMsgPayloadType) Type() protoreflect.EnumType { - return &file_chain_proto_enumTypes[16] + return &file_chain_proto_enumTypes[17] } func (x HBMsgPayloadType) Number() protoreflect.EnumNumber { @@ -828,7 +874,7 @@ func (x HBMsgPayloadType) Number() protoreflect.EnumNumber { // Deprecated: Use HBMsgPayloadType.Descriptor instead. func (HBMsgPayloadType) EnumDescriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{16} + return file_chain_proto_rawDescGZIP(), []int{17} } type RBCMsgType int32 @@ -864,11 +910,11 @@ func (x RBCMsgType) String() string { } func (RBCMsgType) Descriptor() protoreflect.EnumDescriptor { - return file_chain_proto_enumTypes[17].Descriptor() + return file_chain_proto_enumTypes[18].Descriptor() } func (RBCMsgType) Type() protoreflect.EnumType { - return &file_chain_proto_enumTypes[17] + return &file_chain_proto_enumTypes[18] } func (x RBCMsgType) Number() protoreflect.EnumNumber { @@ -877,7 +923,7 @@ func (x RBCMsgType) Number() protoreflect.EnumNumber { // Deprecated: Use RBCMsgType.Descriptor instead. func (RBCMsgType) EnumDescriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{17} + return file_chain_proto_rawDescGZIP(), []int{18} } type BBAMsgType int32 @@ -910,11 +956,11 @@ func (x BBAMsgType) String() string { } func (BBAMsgType) Descriptor() protoreflect.EnumDescriptor { - return file_chain_proto_enumTypes[18].Descriptor() + return file_chain_proto_enumTypes[19].Descriptor() } func (BBAMsgType) Type() protoreflect.EnumType { - return &file_chain_proto_enumTypes[18] + return &file_chain_proto_enumTypes[19] } func (x BBAMsgType) Number() protoreflect.EnumNumber { @@ -923,7 +969,7 @@ func (x BBAMsgType) Number() protoreflect.EnumNumber { // Deprecated: Use BBAMsgType.Descriptor instead. func (BBAMsgType) EnumDescriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{18} + return file_chain_proto_rawDescGZIP(), []int{19} } type Package struct { @@ -1912,15 +1958,14 @@ type Block struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GroupId string `protobuf:"bytes,1,opt,name=GroupId,proto3" json:"GroupId,omitempty"` - BlockId uint64 `protobuf:"varint,2,opt,name=BlockId,proto3" json:"BlockId,omitempty"` - PrevHash []byte `protobuf:"bytes,3,opt,name=PrevHash,proto3" json:"PrevHash,omitempty"` - ProducerPubkey string `protobuf:"bytes,4,opt,name=ProducerPubkey,proto3" json:"ProducerPubkey,omitempty"` - Trxs []*Trx `protobuf:"bytes,5,rep,name=Trxs,proto3" json:"Trxs,omitempty"` - TimeStamp int64 `protobuf:"varint,6,opt,name=TimeStamp,proto3" json:"TimeStamp,omitempty,string"` - Consensus *ConsensusInfo `protobuf:"bytes,7,opt,name=Consensus,proto3" json:"Consensus,omitempty"` - BlockHash []byte `protobuf:"bytes,8,opt,name=BlockHash,proto3" json:"BlockHash,omitempty"` - ProducerSign []byte `protobuf:"bytes,9,opt,name=ProducerSign,proto3" json:"ProducerSign,omitempty"` + BlockId uint64 `protobuf:"varint,1,opt,name=BlockId,proto3" json:"BlockId,omitempty"` + GroupId string `protobuf:"bytes,2,opt,name=GroupId,proto3" json:"GroupId,omitempty"` + PrevHash []byte `protobuf:"bytes,3,opt,name=PrevHash,proto3" json:"PrevHash,omitempty"` + Trxs []*Trx `protobuf:"bytes,4,rep,name=Trxs,proto3" json:"Trxs,omitempty"` + ProducerPubkey string `protobuf:"bytes,5,opt,name=ProducerPubkey,proto3" json:"ProducerPubkey,omitempty"` + TimeStamp int64 `protobuf:"varint,6,opt,name=TimeStamp,proto3" json:"TimeStamp,omitempty,string"` + BlockHash []byte `protobuf:"bytes,7,opt,name=BlockHash,proto3" json:"BlockHash,omitempty"` + ProducerSign []byte `protobuf:"bytes,8,opt,name=ProducerSign,proto3" json:"ProducerSign,omitempty"` } func (x *Block) Reset() { @@ -1955,13 +2000,6 @@ func (*Block) Descriptor() ([]byte, []int) { return file_chain_proto_rawDescGZIP(), []int{12} } -func (x *Block) GetGroupId() string { - if x != nil { - return x.GroupId - } - return "" -} - func (x *Block) GetBlockId() uint64 { if x != nil { return x.BlockId @@ -1969,18 +2007,18 @@ func (x *Block) GetBlockId() uint64 { return 0 } -func (x *Block) GetPrevHash() []byte { +func (x *Block) GetGroupId() string { if x != nil { - return x.PrevHash + return x.GroupId } - return nil + return "" } -func (x *Block) GetProducerPubkey() string { +func (x *Block) GetPrevHash() []byte { if x != nil { - return x.ProducerPubkey + return x.PrevHash } - return "" + return nil } func (x *Block) GetTrxs() []*Trx { @@ -1990,18 +2028,18 @@ func (x *Block) GetTrxs() []*Trx { return nil } -func (x *Block) GetTimeStamp() int64 { +func (x *Block) GetProducerPubkey() string { if x != nil { - return x.TimeStamp + return x.ProducerPubkey } - return 0 + return "" } -func (x *Block) GetConsensus() *ConsensusInfo { +func (x *Block) GetTimeStamp() int64 { if x != nil { - return x.Consensus + return x.TimeStamp } - return nil + return 0 } func (x *Block) GetBlockHash() []byte { @@ -3298,6 +3336,417 @@ func (x *NodeSDKGroupItem) GetGroupSeed() string { return "" } +type PoaGroupConsensusInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EpochDuration uint64 `protobuf:"varint,1,opt,name=EpochDuration,proto3" json:"EpochDuration,omitempty"` + Producers []string `protobuf:"bytes,2,rep,name=Producers,proto3" json:"Producers,omitempty"` + CurrEpoch uint64 `protobuf:"varint,3,opt,name=CurrEpoch,proto3" json:"CurrEpoch,omitempty"` + CurrBlockId uint64 `protobuf:"varint,4,opt,name=CurrBlockId,proto3" json:"CurrBlockId,omitempty"` +} + +func (x *PoaGroupConsensusInfo) Reset() { + *x = PoaGroupConsensusInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_chain_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PoaGroupConsensusInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PoaGroupConsensusInfo) ProtoMessage() {} + +func (x *PoaGroupConsensusInfo) ProtoReflect() protoreflect.Message { + mi := &file_chain_proto_msgTypes[29] + 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 PoaGroupConsensusInfo.ProtoReflect.Descriptor instead. +func (*PoaGroupConsensusInfo) Descriptor() ([]byte, []int) { + return file_chain_proto_rawDescGZIP(), []int{29} +} + +func (x *PoaGroupConsensusInfo) GetEpochDuration() uint64 { + if x != nil { + return x.EpochDuration + } + return 0 +} + +func (x *PoaGroupConsensusInfo) GetProducers() []string { + if x != nil { + return x.Producers + } + return nil +} + +func (x *PoaGroupConsensusInfo) GetCurrEpoch() uint64 { + if x != nil { + return x.CurrEpoch + } + return 0 +} + +func (x *PoaGroupConsensusInfo) GetCurrBlockId() uint64 { + if x != nil { + return x.CurrBlockId + } + return 0 +} + +type PublicPOAGroupItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppKey string `protobuf:"bytes,1,opt,name=AppKey,proto3" json:"AppKey,omitempty"` + GroupId string `protobuf:"bytes,2,opt,name=GroupId,proto3" json:"GroupId,omitempty"` + GroupName string `protobuf:"bytes,3,opt,name=GroupName,proto3" json:"GroupName,omitempty"` + OwnerPubKey string `protobuf:"bytes,4,opt,name=OwnerPubKey,proto3" json:"OwnerPubKey,omitempty"` + SignPubkey string `protobuf:"bytes,5,opt,name=SignPubkey,proto3" json:"SignPubkey,omitempty"` + CipherKey string `protobuf:"bytes,6,opt,name=CipherKey,proto3" json:"CipherKey,omitempty"` + GenesisBlock *Block `protobuf:"bytes,7,opt,name=GenesisBlock,proto3" json:"GenesisBlock,omitempty"` + ConsensusInfo *PoaGroupConsensusInfo `protobuf:"bytes,8,opt,name=ConsensusInfo,proto3" json:"ConsensusInfo,omitempty"` + LastUpdate int64 `protobuf:"varint,9,opt,name=LastUpdate,proto3" json:"LastUpdate,omitempty"` +} + +func (x *PublicPOAGroupItem) Reset() { + *x = PublicPOAGroupItem{} + if protoimpl.UnsafeEnabled { + mi := &file_chain_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PublicPOAGroupItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PublicPOAGroupItem) ProtoMessage() {} + +func (x *PublicPOAGroupItem) ProtoReflect() protoreflect.Message { + mi := &file_chain_proto_msgTypes[30] + 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 PublicPOAGroupItem.ProtoReflect.Descriptor instead. +func (*PublicPOAGroupItem) Descriptor() ([]byte, []int) { + return file_chain_proto_rawDescGZIP(), []int{30} +} + +func (x *PublicPOAGroupItem) GetAppKey() string { + if x != nil { + return x.AppKey + } + return "" +} + +func (x *PublicPOAGroupItem) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *PublicPOAGroupItem) GetGroupName() string { + if x != nil { + return x.GroupName + } + return "" +} + +func (x *PublicPOAGroupItem) GetOwnerPubKey() string { + if x != nil { + return x.OwnerPubKey + } + return "" +} + +func (x *PublicPOAGroupItem) GetSignPubkey() string { + if x != nil { + return x.SignPubkey + } + return "" +} + +func (x *PublicPOAGroupItem) GetCipherKey() string { + if x != nil { + return x.CipherKey + } + return "" +} + +func (x *PublicPOAGroupItem) GetGenesisBlock() *Block { + if x != nil { + return x.GenesisBlock + } + return nil +} + +func (x *PublicPOAGroupItem) GetConsensusInfo() *PoaGroupConsensusInfo { + if x != nil { + return x.ConsensusInfo + } + return nil +} + +func (x *PublicPOAGroupItem) GetLastUpdate() int64 { + if x != nil { + return x.LastUpdate + } + return 0 +} + +type PrivatePOAGroupItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppKey string `protobuf:"bytes,1,opt,name=AppKey,proto3" json:"AppKey,omitempty"` + GroupId string `protobuf:"bytes,2,opt,name=GroupId,proto3" json:"GroupId,omitempty"` + GroupName string `protobuf:"bytes,3,opt,name=GroupName,proto3" json:"GroupName,omitempty"` + OwnerPubKey string `protobuf:"bytes,4,opt,name=OwnerPubKey,proto3" json:"OwnerPubKey,omitempty"` + UserSignPubkey string `protobuf:"bytes,5,opt,name=UserSignPubkey,proto3" json:"UserSignPubkey,omitempty"` + UserEncryptPubkey string `protobuf:"bytes,6,opt,name=UserEncryptPubkey,proto3" json:"UserEncryptPubkey,omitempty"` + GenesisBlock *Block `protobuf:"bytes,7,opt,name=GenesisBlock,proto3" json:"GenesisBlock,omitempty"` + ConsensusInfo *PoaGroupConsensusInfo `protobuf:"bytes,8,opt,name=ConsensusInfo,proto3" json:"ConsensusInfo,omitempty"` + LastUpdate int64 `protobuf:"varint,9,opt,name=LastUpdate,proto3" json:"LastUpdate,omitempty"` +} + +func (x *PrivatePOAGroupItem) Reset() { + *x = PrivatePOAGroupItem{} + if protoimpl.UnsafeEnabled { + mi := &file_chain_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrivatePOAGroupItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivatePOAGroupItem) ProtoMessage() {} + +func (x *PrivatePOAGroupItem) ProtoReflect() protoreflect.Message { + mi := &file_chain_proto_msgTypes[31] + 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 PrivatePOAGroupItem.ProtoReflect.Descriptor instead. +func (*PrivatePOAGroupItem) Descriptor() ([]byte, []int) { + return file_chain_proto_rawDescGZIP(), []int{31} +} + +func (x *PrivatePOAGroupItem) GetAppKey() string { + if x != nil { + return x.AppKey + } + return "" +} + +func (x *PrivatePOAGroupItem) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *PrivatePOAGroupItem) GetGroupName() string { + if x != nil { + return x.GroupName + } + return "" +} + +func (x *PrivatePOAGroupItem) GetOwnerPubKey() string { + if x != nil { + return x.OwnerPubKey + } + return "" +} + +func (x *PrivatePOAGroupItem) GetUserSignPubkey() string { + if x != nil { + return x.UserSignPubkey + } + return "" +} + +func (x *PrivatePOAGroupItem) GetUserEncryptPubkey() string { + if x != nil { + return x.UserEncryptPubkey + } + return "" +} + +func (x *PrivatePOAGroupItem) GetGenesisBlock() *Block { + if x != nil { + return x.GenesisBlock + } + return nil +} + +func (x *PrivatePOAGroupItem) GetConsensusInfo() *PoaGroupConsensusInfo { + if x != nil { + return x.ConsensusInfo + } + return nil +} + +func (x *PrivatePOAGroupItem) GetLastUpdate() int64 { + if x != nil { + return x.LastUpdate + } + return 0 +} + +type GroupItemRumLite struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type GroupType `protobuf:"varint,1,opt,name=Type,proto3,enum=quorum.pb.GroupType" json:"Type,omitempty"` + GroupData []byte `protobuf:"bytes,2,opt,name=GroupData,proto3" json:"GroupData,omitempty"` +} + +func (x *GroupItemRumLite) Reset() { + *x = GroupItemRumLite{} + if protoimpl.UnsafeEnabled { + mi := &file_chain_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupItemRumLite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupItemRumLite) ProtoMessage() {} + +func (x *GroupItemRumLite) ProtoReflect() protoreflect.Message { + mi := &file_chain_proto_msgTypes[32] + 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 GroupItemRumLite.ProtoReflect.Descriptor instead. +func (*GroupItemRumLite) Descriptor() ([]byte, []int) { + return file_chain_proto_rawDescGZIP(), []int{32} +} + +func (x *GroupItemRumLite) GetType() GroupType { + if x != nil { + return x.Type + } + return GroupType_PUBLIC_POA +} + +func (x *GroupItemRumLite) GetGroupData() []byte { + if x != nil { + return x.GroupData + } + return nil +} + +type GroupSeedRumLite struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Group *GroupItemRumLite `protobuf:"bytes,1,opt,name=Group,proto3" json:"Group,omitempty"` + Hash []byte `protobuf:"bytes,2,opt,name=Hash,proto3" json:"Hash,omitempty"` + Signature []byte `protobuf:"bytes,3,opt,name=Signature,proto3" json:"Signature,omitempty"` +} + +func (x *GroupSeedRumLite) Reset() { + *x = GroupSeedRumLite{} + if protoimpl.UnsafeEnabled { + mi := &file_chain_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupSeedRumLite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupSeedRumLite) ProtoMessage() {} + +func (x *GroupSeedRumLite) ProtoReflect() protoreflect.Message { + mi := &file_chain_proto_msgTypes[33] + 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 GroupSeedRumLite.ProtoReflect.Descriptor instead. +func (*GroupSeedRumLite) Descriptor() ([]byte, []int) { + return file_chain_proto_rawDescGZIP(), []int{33} +} + +func (x *GroupSeedRumLite) GetGroup() *GroupItemRumLite { + if x != nil { + return x.Group + } + return nil +} + +func (x *GroupSeedRumLite) GetHash() []byte { + if x != nil { + return x.Hash + } + return nil +} + +func (x *GroupSeedRumLite) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + //HB_MSG //HB protocol is used for both change consensus and bft type HBTrxBundle struct { @@ -3311,7 +3760,7 @@ type HBTrxBundle struct { func (x *HBTrxBundle) Reset() { *x = HBTrxBundle{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[29] + mi := &file_chain_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3324,7 +3773,7 @@ func (x *HBTrxBundle) String() string { func (*HBTrxBundle) ProtoMessage() {} func (x *HBTrxBundle) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[29] + mi := &file_chain_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3337,7 +3786,7 @@ func (x *HBTrxBundle) ProtoReflect() protoreflect.Message { // Deprecated: Use HBTrxBundle.ProtoReflect.Descriptor instead. func (*HBTrxBundle) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{29} + return file_chain_proto_rawDescGZIP(), []int{34} } func (x *HBTrxBundle) GetTrxs() []*Trx { @@ -3362,7 +3811,7 @@ type HBMsgv1 struct { func (x *HBMsgv1) Reset() { *x = HBMsgv1{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[30] + mi := &file_chain_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3375,7 +3824,7 @@ func (x *HBMsgv1) String() string { func (*HBMsgv1) ProtoMessage() {} func (x *HBMsgv1) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[30] + mi := &file_chain_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3388,7 +3837,7 @@ func (x *HBMsgv1) ProtoReflect() protoreflect.Message { // Deprecated: Use HBMsgv1.ProtoReflect.Descriptor instead. func (*HBMsgv1) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{30} + return file_chain_proto_rawDescGZIP(), []int{35} } func (x *HBMsgv1) GetMsgId() string { @@ -3439,7 +3888,7 @@ type RBCMsg struct { func (x *RBCMsg) Reset() { *x = RBCMsg{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[31] + mi := &file_chain_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3452,7 +3901,7 @@ func (x *RBCMsg) String() string { func (*RBCMsg) ProtoMessage() {} func (x *RBCMsg) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[31] + mi := &file_chain_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3465,7 +3914,7 @@ func (x *RBCMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use RBCMsg.ProtoReflect.Descriptor instead. func (*RBCMsg) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{31} + return file_chain_proto_rawDescGZIP(), []int{36} } func (x *RBCMsg) GetType() RBCMsgType { @@ -3500,7 +3949,7 @@ type InitPropose struct { func (x *InitPropose) Reset() { *x = InitPropose{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[32] + mi := &file_chain_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3513,7 +3962,7 @@ func (x *InitPropose) String() string { func (*InitPropose) ProtoMessage() {} func (x *InitPropose) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[32] + mi := &file_chain_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3526,7 +3975,7 @@ func (x *InitPropose) ProtoReflect() protoreflect.Message { // Deprecated: Use InitPropose.ProtoReflect.Descriptor instead. func (*InitPropose) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{32} + return file_chain_proto_rawDescGZIP(), []int{37} } func (x *InitPropose) GetRootHash() []byte { @@ -3603,7 +4052,7 @@ type Echo struct { func (x *Echo) Reset() { *x = Echo{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[33] + mi := &file_chain_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3616,7 +4065,7 @@ func (x *Echo) String() string { func (*Echo) ProtoMessage() {} func (x *Echo) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[33] + mi := &file_chain_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3629,7 +4078,7 @@ func (x *Echo) ProtoReflect() protoreflect.Message { // Deprecated: Use Echo.ProtoReflect.Descriptor instead. func (*Echo) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{33} + return file_chain_proto_rawDescGZIP(), []int{38} } func (x *Echo) GetRootHash() []byte { @@ -3702,7 +4151,7 @@ type Ready struct { func (x *Ready) Reset() { *x = Ready{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[34] + mi := &file_chain_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3715,7 +4164,7 @@ func (x *Ready) String() string { func (*Ready) ProtoMessage() {} func (x *Ready) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[34] + mi := &file_chain_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3728,7 +4177,7 @@ func (x *Ready) ProtoReflect() protoreflect.Message { // Deprecated: Use Ready.ProtoReflect.Descriptor instead. func (*Ready) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{34} + return file_chain_proto_rawDescGZIP(), []int{39} } func (x *Ready) GetRootHash() []byte { @@ -3772,7 +4221,7 @@ type BBAMsg struct { func (x *BBAMsg) Reset() { *x = BBAMsg{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[35] + mi := &file_chain_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3785,7 +4234,7 @@ func (x *BBAMsg) String() string { func (*BBAMsg) ProtoMessage() {} func (x *BBAMsg) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[35] + mi := &file_chain_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3798,7 +4247,7 @@ func (x *BBAMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use BBAMsg.ProtoReflect.Descriptor instead. func (*BBAMsg) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{35} + return file_chain_proto_rawDescGZIP(), []int{40} } func (x *BBAMsg) GetType() BBAMsgType { @@ -3829,7 +4278,7 @@ type Bval struct { func (x *Bval) Reset() { *x = Bval{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[36] + mi := &file_chain_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3842,7 +4291,7 @@ func (x *Bval) String() string { func (*Bval) ProtoMessage() {} func (x *Bval) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[36] + mi := &file_chain_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3855,7 +4304,7 @@ func (x *Bval) ProtoReflect() protoreflect.Message { // Deprecated: Use Bval.ProtoReflect.Descriptor instead. func (*Bval) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{36} + return file_chain_proto_rawDescGZIP(), []int{41} } func (x *Bval) GetProposerId() string { @@ -3900,7 +4349,7 @@ type Aux struct { func (x *Aux) Reset() { *x = Aux{} if protoimpl.UnsafeEnabled { - mi := &file_chain_proto_msgTypes[37] + mi := &file_chain_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3913,7 +4362,7 @@ func (x *Aux) String() string { func (*Aux) ProtoMessage() {} func (x *Aux) ProtoReflect() protoreflect.Message { - mi := &file_chain_proto_msgTypes[37] + mi := &file_chain_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3926,7 +4375,7 @@ func (x *Aux) ProtoReflect() protoreflect.Message { // Deprecated: Use Aux.ProtoReflect.Descriptor instead. func (*Aux) Descriptor() ([]byte, []int) { - return file_chain_proto_rawDescGZIP(), []int{37} + return file_chain_proto_rawDescGZIP(), []int{42} } func (x *Aux) GetProposerId() string { @@ -4100,382 +4549,451 @@ var file_chain_proto_rawDesc = []byte{ 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x78, 0x53, 0x74, 0x72, 0x6f, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xbb, 0x02, 0x0a, 0x05, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x65, 0x76, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x83, 0x02, 0x0a, 0x05, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x65, 0x76, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x50, 0x72, 0x65, 0x76, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, - 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x50, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x04, - 0x54, 0x72, 0x78, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x75, 0x6f, - 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x78, 0x52, 0x04, 0x54, 0x72, 0x78, 0x73, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x04, 0x54, 0x72, 0x78, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x54, + 0x72, 0x78, 0x52, 0x04, 0x54, 0x72, 0x78, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x36, - 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x43, 0x6f, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, - 0x53, 0x69, 0x67, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x47, 0x0a, 0x06, 0x42, 0x66, 0x74, 0x4d, - 0x73, 0x67, 0x12, 0x29, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x66, 0x74, - 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, - 0x61, 0x22, 0x45, 0x0a, 0x05, 0x43, 0x43, 0x4d, 0x73, 0x67, 0x12, 0x28, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, - 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x43, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xde, 0x03, 0x0a, 0x12, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x14, 0x0a, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x52, 0x65, 0x71, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x12, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, - 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x41, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x4c, 0x65, 0x6e, 0x49, 0x6e, 0x4d, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x14, 0x41, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, - 0x63, 0x6b, 0x4c, 0x65, 0x6e, 0x49, 0x6e, 0x4d, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x41, 0x67, 0x72, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x41, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x54, 0x69, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x6f, - 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x46, 0x72, - 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x46, 0x72, 0x6f, 0x6d, - 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4d, - 0x65, 0x6d, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x12, - 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x4d, 0x73, 0x67, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x4d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x03, 0x52, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x52, - 0x03, 0x52, 0x65, 0x71, 0x12, 0x3e, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x43, 0x6e, 0x74, 0x22, 0xea, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x65, 0x73, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, - 0x73, 0x70, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2f, - 0x0a, 0x03, 0x52, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x52, 0x03, 0x52, 0x65, 0x71, 0x12, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, + 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0c, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, + 0x22, 0x47, 0x0a, 0x06, 0x42, 0x66, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x29, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, + 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x66, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, 0x05, 0x43, 0x43, 0x4d, + 0x73, 0x67, 0x12, 0x28, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x14, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x43, 0x4d, + 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x22, 0xde, 0x03, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, + 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, + 0x12, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, + 0x14, 0x41, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x4c, 0x65, + 0x6e, 0x49, 0x6e, 0x4d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x41, 0x67, 0x72, + 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x4c, 0x65, 0x6e, 0x49, 0x6e, 0x4d, + 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x41, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, + 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x41, + 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, + 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x24, 0x0a, + 0x0d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, - 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, + 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x48, 0x61, 0x73, + 0x73, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, - 0x6e, 0x22, 0x8c, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, - 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x04, - 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x6f, - 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x52, 0x04, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3e, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, - 0x22, 0xbb, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x3e, 0x0a, 0x1a, 0x52, 0x65, 0x71, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, - 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x52, - 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, - 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x03, 0x52, 0x65, 0x71, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, - 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x52, 0x03, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x04, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, + 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, + 0x6e, 0x22, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, + 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x4d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x03, 0x52, + 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x52, 0x04, 0x52, 0x65, 0x73, 0x70, 0x22, 0xbe, - 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x2f, - 0x0a, 0x03, 0x52, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x52, 0x03, 0x52, 0x65, 0x71, 0x12, - 0x34, 0x0a, 0x05, 0x52, 0x65, 0x73, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x52, 0x03, 0x52, 0x65, 0x71, 0x12, 0x3e, 0x0a, 0x1a, + 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, + 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x1a, 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, + 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x22, 0xea, 0x01, 0x0a, + 0x13, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x70, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x73, 0x70, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x03, 0x52, 0x65, 0x71, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x52, 0x03, 0x52, 0x65, 0x71, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4d, + 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x12, + 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x48, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x4d, 0x73, 0x67, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x8c, 0x01, 0x0a, 0x16, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x04, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x52, 0x04, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3e, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x52, 0x65, + 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, + 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x22, 0xbb, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x12, 0x3e, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x52, 0x65, 0x71, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6e, + 0x74, 0x12, 0x2f, 0x0a, 0x03, 0x52, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x52, 0x05, - 0x52, 0x65, 0x73, 0x70, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, - 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x63, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x44, 0x61, 0x74, 0x61, 0x22, 0xae, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x71, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x46, - 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x71, 0x52, 0x03, 0x52, + 0x65, 0x71, 0x12, 0x32, 0x0a, 0x04, 0x52, 0x65, 0x73, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x52, 0x04, 0x52, 0x65, 0x73, 0x70, 0x22, 0xbe, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x03, 0x52, 0x65, 0x71, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x52, 0x03, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x05, 0x52, 0x65, 0x73, 0x70, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, + 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x52, 0x05, 0x52, 0x65, 0x73, 0x70, 0x73, 0x12, 0x38, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x63, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x4d, + 0x73, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x6f, + 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xae, 0x01, 0x0a, + 0x08, 0x52, 0x65, 0x71, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x50, 0x75, + 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, 0x50, + 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x67, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x22, 0xec, 0x02, + 0x0a, 0x0c, 0x52, 0x65, 0x71, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, + 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, + 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x6f, + 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x71, 0x42, 0x6c, 0x6b, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x46, + 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x6c, 0x6b, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x71, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, - 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x53, 0x69, 0x67, 0x6e, 0x22, 0xec, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x71, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x22, 0x0a, 0x0c, 0x42, 0x6c, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x42, 0x6c, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x38, 0x0a, 0x0c, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x06, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, + 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0x50, 0x0a, 0x0c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, + 0x61, 0x73, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x2c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, + 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xc8, 0x03, 0x0a, 0x09, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, - 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x71, 0x42, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x6c, 0x6b, 0x73, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x42, - 0x6c, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x71, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x48, 0x61, 0x73, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x53, 0x69, 0x67, 0x6e, 0x22, 0x38, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, - 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0x50, - 0x0a, 0x0c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x2c, - 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x71, - 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, - 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, - 0x22, 0xc8, 0x03, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x50, - 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, - 0x53, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, - 0x12, 0x2c, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x50, - 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x55, 0x73, 0x65, - 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1e, - 0x0a, 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x34, - 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, - 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x3d, 0x0a, 0x0b, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x71, 0x75, 0x6f, 0x72, - 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x6f, 0x72, - 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4b, - 0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x22, 0xbd, 0x02, 0x0a, 0x09, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x0c, 0x47, 0x65, 0x6e, - 0x65, 0x73, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, + 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, + 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6b, + 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x69, + 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, + 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x61, 0x73, 0x74, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, + 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x3d, 0x0a, 0x0b, + 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1b, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, + 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x43, + 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0c, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x41, + 0x70, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x41, 0x70, 0x70, + 0x4b, 0x65, 0x79, 0x22, 0xbd, 0x02, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x65, + 0x64, 0x12, 0x34, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, + 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, + 0x73, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, + 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x41, + 0x70, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0xb6, 0x01, 0x0a, 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x44, 0x4b, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2a, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x41, + 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x45, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, + 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x69, 0x67, + 0x6e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x69, 0x55, 0x72, 0x6c, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x41, 0x70, 0x69, 0x55, 0x72, 0x6c, 0x12, 0x1c, + 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x65, 0x64, 0x22, 0x9b, 0x01, 0x0a, + 0x15, 0x50, 0x6f, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, + 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, + 0x72, 0x72, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x43, + 0x75, 0x72, 0x72, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x75, 0x72, 0x72, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x43, + 0x75, 0x72, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x22, 0xe2, 0x02, 0x0a, 0x12, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x4f, 0x41, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, + 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6b, 0x65, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, + 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4b, 0x65, 0x79, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4b, 0x65, + 0x79, 0x12, 0x34, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x46, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, + 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x61, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x1e, 0x0a, 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, + 0xfb, 0x02, 0x0a, 0x13, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x4f, 0x41, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, - 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x26, 0x0a, 0x0e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x4b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x69, 0x70, 0x68, - 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, - 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb6, 0x01, 0x0a, 0x10, - 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x44, 0x4b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x2a, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, + 0x72, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6b, 0x65, + 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x55, 0x73, + 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, + 0x34, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, + 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x46, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, + 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, + 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x61, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, + 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, + 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x5a, 0x0a, + 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x75, 0x6d, 0x4c, 0x69, 0x74, + 0x65, 0x12, 0x28, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x22, 0x0a, 0x0c, - 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x41, 0x70, 0x69, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x41, 0x70, 0x69, 0x55, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, - 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x53, 0x65, 0x65, 0x64, 0x22, 0x31, 0x0a, 0x0b, 0x48, 0x42, 0x54, 0x72, 0x78, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x54, 0x72, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, - 0x78, 0x52, 0x04, 0x54, 0x72, 0x78, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x07, 0x48, 0x42, 0x4d, 0x73, - 0x67, 0x76, 0x31, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x3d, 0x0a, 0x0b, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, - 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x42, 0x4d, 0x73, 0x67, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x4d, 0x0a, 0x06, 0x52, 0x42, 0x43, 0x4d, 0x73, 0x67, 0x12, 0x29, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x6f, - 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x42, 0x43, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x22, 0x8d, 0x02, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, - 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x4f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, - 0x0e, 0x52, 0x65, 0x63, 0x76, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x52, 0x65, 0x63, 0x76, 0x4e, 0x6f, 0x64, 0x65, 0x50, - 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, - 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, - 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, - 0x6e, 0x22, 0xa6, 0x02, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, - 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x52, 0x6f, - 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x4f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, - 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2e, - 0x0a, 0x12, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, - 0x62, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x45, 0x63, 0x68, 0x6f, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2a, - 0x0a, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x69, - 0x67, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, 0xbb, 0x01, 0x0a, 0x05, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x36, 0x0a, 0x16, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x16, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, - 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x52, 0x65, - 0x61, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x4d, 0x0a, 0x06, 0x42, 0x42, 0x41, 0x4d, - 0x73, 0x67, 0x12, 0x29, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x42, 0x41, - 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x76, 0x0a, 0x04, 0x42, 0x76, 0x61, 0x6c, 0x12, - 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x75, 0x0a, 0x03, 0x41, 0x75, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x57, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x52, 0x58, 0x10, 0x00, 0x12, 0x09, - 0x0a, 0x05, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x46, 0x54, - 0x5f, 0x4d, 0x53, 0x47, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x43, 0x5f, 0x4d, 0x53, 0x47, - 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, - 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x53, 0x47, 0x10, 0x05, 0x2a, - 0x21, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, - 0x03, 0x41, 0x44, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, - 0x10, 0x01, 0x2a, 0x26, 0x0a, 0x0e, 0x54, 0x72, 0x78, 0x53, 0x74, 0x72, 0x6f, 0x61, 0x67, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x01, 0x2a, 0x51, 0x0a, 0x07, 0x54, 0x72, - 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x00, 0x12, - 0x10, 0x0a, 0x0c, 0x55, 0x50, 0x44, 0x5f, 0x47, 0x52, 0x50, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, - 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x50, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4f, 0x52, 0x4b, 0x10, 0x05, 0x2a, 0x4c, 0x0a, - 0x0f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x15, 0x0a, 0x11, 0x53, 0x45, 0x54, 0x5f, 0x54, 0x52, 0x58, 0x5f, 0x41, 0x55, 0x54, 0x48, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x50, 0x44, 0x5f, 0x44, - 0x4e, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x50, 0x44, - 0x5f, 0x41, 0x4c, 0x57, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x0b, 0x54, - 0x72, 0x78, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x4f, - 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x4c, 0x57, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x00, 0x12, - 0x13, 0x0a, 0x0f, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x44, 0x4e, 0x59, 0x5f, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4e, 0x59, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0x01, 0x2a, 0x2e, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, - 0x47, 0x10, 0x02, 0x2a, 0x18, 0x0a, 0x0a, 0x42, 0x66, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x42, 0x5f, 0x42, 0x46, 0x54, 0x10, 0x00, 0x2a, 0x36, 0x0a, - 0x09, 0x43, 0x43, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x45, 0x4e, 0x53, 0x55, 0x53, 0x5f, 0x52, - 0x45, 0x51, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x43, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, - 0x5f, 0x48, 0x42, 0x10, 0x01, 0x2a, 0x2e, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0b, - 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, - 0x41, 0x49, 0x4c, 0x10, 0x01, 0x2a, 0x30, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x51, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x51, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x01, 0x2a, 0x50, 0x0a, 0x0c, 0x52, 0x65, 0x71, 0x42, 0x6c, - 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x5f, 0x4f, 0x4e, 0x5f, 0x54, - 0x4f, 0x50, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x2a, 0x1c, 0x0a, 0x0d, 0x42, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x45, - 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x10, 0x00, 0x2a, 0x2b, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x50, - 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, - 0x54, 0x45, 0x10, 0x01, 0x2a, 0x25, 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x4f, 0x41, - 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x4f, 0x53, 0x10, 0x01, 0x2a, 0x24, 0x0a, 0x10, 0x48, - 0x42, 0x4d, 0x73, 0x67, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x07, 0x0a, 0x03, 0x52, 0x42, 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x42, 0x41, 0x10, - 0x01, 0x2a, 0x33, 0x0a, 0x0a, 0x52, 0x42, 0x43, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x43, 0x48, 0x4f, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, - 0x45, 0x41, 0x44, 0x59, 0x10, 0x02, 0x2a, 0x1f, 0x0a, 0x0a, 0x42, 0x42, 0x41, 0x4d, 0x73, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x56, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x55, 0x58, 0x10, 0x01, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x75, 0x6d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x22, 0x77, 0x0a, 0x10, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x53, 0x65, 0x65, 0x64, 0x52, 0x75, 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x12, 0x31, 0x0a, + 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x71, + 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x75, 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x52, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x48, 0x42, 0x54, 0x72, 0x78, 0x42, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x12, 0x22, 0x0a, 0x04, 0x54, 0x72, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x78, 0x52, + 0x04, 0x54, 0x72, 0x78, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x07, 0x48, 0x42, 0x4d, 0x73, 0x67, 0x76, + 0x31, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x3d, 0x0a, 0x0b, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x71, + 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x42, 0x4d, 0x73, 0x67, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x22, 0x4d, 0x0a, 0x06, 0x52, 0x42, 0x43, 0x4d, 0x73, 0x67, 0x12, 0x29, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, + 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x42, 0x43, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0x8d, 0x02, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x50, + 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x12, + 0x2a, 0x0a, 0x10, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x4f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x52, + 0x65, 0x63, 0x76, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x52, 0x65, 0x63, 0x76, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, + 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, + 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, + 0xa6, 0x02, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x4f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x10, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x12, + 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, + 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x10, + 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, 0xbb, 0x01, 0x0a, 0x05, 0x52, 0x65, 0x61, + 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x36, + 0x0a, 0x16, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, + 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x13, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, + 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x11, 0x52, 0x65, 0x61, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x22, 0x4d, 0x0a, 0x06, 0x42, 0x42, 0x41, 0x4d, 0x73, 0x67, + 0x12, 0x29, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, + 0x2e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x42, 0x41, 0x4d, 0x73, + 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x76, 0x0a, 0x04, 0x42, 0x76, 0x61, 0x6c, 0x12, 0x1e, 0x0a, + 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, + 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x75, 0x0a, + 0x03, 0x41, 0x75, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, + 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x57, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x52, 0x58, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x46, 0x54, 0x5f, 0x4d, + 0x53, 0x47, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x43, 0x5f, 0x4d, 0x53, 0x47, 0x10, 0x03, + 0x12, 0x08, 0x0a, 0x04, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x52, + 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x5f, 0x4d, 0x53, 0x47, 0x10, 0x05, 0x2a, 0x21, 0x0a, + 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, + 0x44, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, + 0x2a, 0x26, 0x0a, 0x0e, 0x54, 0x72, 0x78, 0x53, 0x74, 0x72, 0x6f, 0x61, 0x67, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, + 0x05, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x01, 0x2a, 0x51, 0x0a, 0x07, 0x54, 0x72, 0x78, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x00, 0x12, 0x10, 0x0a, + 0x0c, 0x55, 0x50, 0x44, 0x5f, 0x47, 0x52, 0x50, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x02, 0x12, + 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, + 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x50, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, + 0x04, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4f, 0x52, 0x4b, 0x10, 0x05, 0x2a, 0x4c, 0x0a, 0x0f, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, + 0x0a, 0x11, 0x53, 0x45, 0x54, 0x5f, 0x54, 0x52, 0x58, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, + 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x50, 0x44, 0x5f, 0x44, 0x4e, 0x59, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x50, 0x44, 0x5f, 0x41, + 0x4c, 0x57, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x0b, 0x54, 0x72, 0x78, + 0x41, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x4f, 0x4c, 0x4c, + 0x4f, 0x57, 0x5f, 0x41, 0x4c, 0x57, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x00, 0x12, 0x13, 0x0a, + 0x0f, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x44, 0x4e, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, + 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x4c, 0x49, 0x53, 0x54, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4e, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0x01, 0x2a, 0x2e, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, + 0x4f, 0x4f, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, + 0x02, 0x2a, 0x18, 0x0a, 0x0a, 0x42, 0x66, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0a, 0x0a, 0x06, 0x48, 0x42, 0x5f, 0x42, 0x46, 0x54, 0x10, 0x00, 0x2a, 0x36, 0x0a, 0x09, 0x43, + 0x43, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x45, 0x4e, 0x53, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x51, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x43, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x48, + 0x42, 0x10, 0x01, 0x2a, 0x2e, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0b, 0x0a, 0x07, + 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, + 0x4c, 0x10, 0x01, 0x2a, 0x30, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x51, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, + 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x51, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x52, + 0x45, 0x53, 0x50, 0x10, 0x01, 0x2a, 0x50, 0x0a, 0x0c, 0x52, 0x65, 0x71, 0x42, 0x6c, 0x6b, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x49, + 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x42, 0x4c, 0x4f, 0x43, + 0x4b, 0x5f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x5f, 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x50, + 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x2a, 0x1c, 0x0a, 0x0d, 0x42, 0x72, 0x6f, 0x61, 0x64, + 0x63, 0x61, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x45, 0x4e, 0x45, + 0x52, 0x41, 0x4c, 0x10, 0x00, 0x2a, 0x2b, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, + 0x10, 0x01, 0x2a, 0x25, 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x73, 0x65, + 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x4f, 0x41, 0x10, 0x00, + 0x12, 0x07, 0x0a, 0x03, 0x50, 0x4f, 0x53, 0x10, 0x01, 0x2a, 0x2c, 0x0a, 0x09, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, + 0x5f, 0x50, 0x4f, 0x41, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, + 0x45, 0x5f, 0x50, 0x4f, 0x41, 0x10, 0x01, 0x2a, 0x24, 0x0a, 0x10, 0x48, 0x42, 0x4d, 0x73, 0x67, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x52, + 0x42, 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x42, 0x41, 0x10, 0x01, 0x2a, 0x33, 0x0a, + 0x0a, 0x52, 0x42, 0x43, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x49, + 0x4e, 0x49, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x45, 0x43, 0x48, 0x4f, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, + 0x10, 0x02, 0x2a, 0x1f, 0x0a, 0x0a, 0x42, 0x42, 0x41, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x08, 0x0a, 0x04, 0x42, 0x56, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x55, + 0x58, 0x10, 0x01, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x72, 0x75, 0x6d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x71, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -4490,8 +5008,8 @@ func file_chain_proto_rawDescGZIP() []byte { return file_chain_proto_rawDescData } -var file_chain_proto_enumTypes = make([]protoimpl.EnumInfo, 19) -var file_chain_proto_msgTypes = make([]protoimpl.MessageInfo, 38) +var file_chain_proto_enumTypes = make([]protoimpl.EnumInfo, 20) +var file_chain_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_chain_proto_goTypes = []interface{}{ (PackageType)(0), // 0: quorum.pb.PackageType (ActionType)(0), // 1: quorum.pb.ActionType @@ -4509,47 +5027,53 @@ var file_chain_proto_goTypes = []interface{}{ (BroadcastType)(0), // 13: quorum.pb.BroadcastType (GroupEncryptType)(0), // 14: quorum.pb.GroupEncryptType (GroupConsenseType)(0), // 15: quorum.pb.GroupConsenseType - (HBMsgPayloadType)(0), // 16: quorum.pb.HBMsgPayloadType - (RBCMsgType)(0), // 17: quorum.pb.RBCMsgType - (BBAMsgType)(0), // 18: quorum.pb.BBAMsgType - (*Package)(nil), // 19: quorum.pb.Package - (*PostItem)(nil), // 20: quorum.pb.PostItem - (*ProducerItem)(nil), // 21: quorum.pb.ProducerItem - (*UpdGroupUserItem)(nil), // 22: quorum.pb.UpdGroupUserItem - (*UserItem)(nil), // 23: quorum.pb.UserItem - (*ChainConfigItem)(nil), // 24: quorum.pb.ChainConfigItem - (*ChainSendTrxRuleListItem)(nil), // 25: quorum.pb.ChainSendTrxRuleListItem - (*SetTrxAuthModeItem)(nil), // 26: quorum.pb.SetTrxAuthModeItem - (*AppConfigItem)(nil), // 27: quorum.pb.AppConfigItem - (*ConsensusInfo)(nil), // 28: quorum.pb.ConsensusInfo - (*ForkItem)(nil), // 29: quorum.pb.ForkItem - (*Trx)(nil), // 30: quorum.pb.Trx - (*Block)(nil), // 31: quorum.pb.Block - (*BftMsg)(nil), // 32: quorum.pb.BftMsg - (*CCMsg)(nil), // 33: quorum.pb.CCMsg - (*ChangeConsensusReq)(nil), // 34: quorum.pb.ChangeConsensusReq - (*ChangeConsensusReqMsg)(nil), // 35: quorum.pb.ChangeConsensusReqMsg - (*ChangeConsensusResp)(nil), // 36: quorum.pb.ChangeConsensusResp - (*ChangeConsensusRespMsg)(nil), // 37: quorum.pb.ChangeConsensusRespMsg - (*ChangeConsensusProof)(nil), // 38: quorum.pb.ChangeConsensusProof - (*ChangeConsensusResultBundle)(nil), // 39: quorum.pb.ChangeConsensusResultBundle - (*SyncMsg)(nil), // 40: quorum.pb.SyncMsg - (*ReqBlock)(nil), // 41: quorum.pb.ReqBlock - (*ReqBlockResp)(nil), // 42: quorum.pb.ReqBlockResp - (*BlocksBundle)(nil), // 43: quorum.pb.BlocksBundle - (*BroadcastMsg)(nil), // 44: quorum.pb.BroadcastMsg - (*GroupItem)(nil), // 45: quorum.pb.GroupItem - (*GroupSeed)(nil), // 46: quorum.pb.GroupSeed - (*NodeSDKGroupItem)(nil), // 47: quorum.pb.NodeSDKGroupItem - (*HBTrxBundle)(nil), // 48: quorum.pb.HBTrxBundle - (*HBMsgv1)(nil), // 49: quorum.pb.HBMsgv1 - (*RBCMsg)(nil), // 50: quorum.pb.RBCMsg - (*InitPropose)(nil), // 51: quorum.pb.InitPropose - (*Echo)(nil), // 52: quorum.pb.Echo - (*Ready)(nil), // 53: quorum.pb.Ready - (*BBAMsg)(nil), // 54: quorum.pb.BBAMsg - (*Bval)(nil), // 55: quorum.pb.Bval - (*Aux)(nil), // 56: quorum.pb.Aux + (GroupType)(0), // 16: quorum.pb.GroupType + (HBMsgPayloadType)(0), // 17: quorum.pb.HBMsgPayloadType + (RBCMsgType)(0), // 18: quorum.pb.RBCMsgType + (BBAMsgType)(0), // 19: quorum.pb.BBAMsgType + (*Package)(nil), // 20: quorum.pb.Package + (*PostItem)(nil), // 21: quorum.pb.PostItem + (*ProducerItem)(nil), // 22: quorum.pb.ProducerItem + (*UpdGroupUserItem)(nil), // 23: quorum.pb.UpdGroupUserItem + (*UserItem)(nil), // 24: quorum.pb.UserItem + (*ChainConfigItem)(nil), // 25: quorum.pb.ChainConfigItem + (*ChainSendTrxRuleListItem)(nil), // 26: quorum.pb.ChainSendTrxRuleListItem + (*SetTrxAuthModeItem)(nil), // 27: quorum.pb.SetTrxAuthModeItem + (*AppConfigItem)(nil), // 28: quorum.pb.AppConfigItem + (*ConsensusInfo)(nil), // 29: quorum.pb.ConsensusInfo + (*ForkItem)(nil), // 30: quorum.pb.ForkItem + (*Trx)(nil), // 31: quorum.pb.Trx + (*Block)(nil), // 32: quorum.pb.Block + (*BftMsg)(nil), // 33: quorum.pb.BftMsg + (*CCMsg)(nil), // 34: quorum.pb.CCMsg + (*ChangeConsensusReq)(nil), // 35: quorum.pb.ChangeConsensusReq + (*ChangeConsensusReqMsg)(nil), // 36: quorum.pb.ChangeConsensusReqMsg + (*ChangeConsensusResp)(nil), // 37: quorum.pb.ChangeConsensusResp + (*ChangeConsensusRespMsg)(nil), // 38: quorum.pb.ChangeConsensusRespMsg + (*ChangeConsensusProof)(nil), // 39: quorum.pb.ChangeConsensusProof + (*ChangeConsensusResultBundle)(nil), // 40: quorum.pb.ChangeConsensusResultBundle + (*SyncMsg)(nil), // 41: quorum.pb.SyncMsg + (*ReqBlock)(nil), // 42: quorum.pb.ReqBlock + (*ReqBlockResp)(nil), // 43: quorum.pb.ReqBlockResp + (*BlocksBundle)(nil), // 44: quorum.pb.BlocksBundle + (*BroadcastMsg)(nil), // 45: quorum.pb.BroadcastMsg + (*GroupItem)(nil), // 46: quorum.pb.GroupItem + (*GroupSeed)(nil), // 47: quorum.pb.GroupSeed + (*NodeSDKGroupItem)(nil), // 48: quorum.pb.NodeSDKGroupItem + (*PoaGroupConsensusInfo)(nil), // 49: quorum.pb.PoaGroupConsensusInfo + (*PublicPOAGroupItem)(nil), // 50: quorum.pb.PublicPOAGroupItem + (*PrivatePOAGroupItem)(nil), // 51: quorum.pb.PrivatePOAGroupItem + (*GroupItemRumLite)(nil), // 52: quorum.pb.GroupItemRumLite + (*GroupSeedRumLite)(nil), // 53: quorum.pb.GroupSeedRumLite + (*HBTrxBundle)(nil), // 54: quorum.pb.HBTrxBundle + (*HBMsgv1)(nil), // 55: quorum.pb.HBMsgv1 + (*RBCMsg)(nil), // 56: quorum.pb.RBCMsg + (*InitPropose)(nil), // 57: quorum.pb.InitPropose + (*Echo)(nil), // 58: quorum.pb.Echo + (*Ready)(nil), // 59: quorum.pb.Ready + (*BBAMsg)(nil), // 60: quorum.pb.BBAMsg + (*Bval)(nil), // 61: quorum.pb.Bval + (*Aux)(nil), // 62: quorum.pb.Aux } var file_chain_proto_depIdxs = []int32{ 0, // 0: quorum.pb.Package.type:type_name -> quorum.pb.PackageType @@ -4561,40 +5085,45 @@ var file_chain_proto_depIdxs = []int32{ 5, // 6: quorum.pb.SetTrxAuthModeItem.Mode:type_name -> quorum.pb.TrxAuthMode 1, // 7: quorum.pb.AppConfigItem.Action:type_name -> quorum.pb.ActionType 7, // 8: quorum.pb.AppConfigItem.Type:type_name -> quorum.pb.AppConfigType - 28, // 9: quorum.pb.ForkItem.Consensus:type_name -> quorum.pb.ConsensusInfo + 29, // 9: quorum.pb.ForkItem.Consensus:type_name -> quorum.pb.ConsensusInfo 3, // 10: quorum.pb.Trx.Type:type_name -> quorum.pb.TrxType 2, // 11: quorum.pb.Trx.StorageType:type_name -> quorum.pb.TrxStroageType - 30, // 12: quorum.pb.Block.Trxs:type_name -> quorum.pb.Trx - 28, // 13: quorum.pb.Block.Consensus:type_name -> quorum.pb.ConsensusInfo - 8, // 14: quorum.pb.BftMsg.Type:type_name -> quorum.pb.BftMsgType - 9, // 15: quorum.pb.CCMsg.Type:type_name -> quorum.pb.CCMsgType - 34, // 16: quorum.pb.ChangeConsensusReqMsg.Req:type_name -> quorum.pb.ChangeConsensusReq - 34, // 17: quorum.pb.ChangeConsensusResp.Req:type_name -> quorum.pb.ChangeConsensusReq - 36, // 18: quorum.pb.ChangeConsensusRespMsg.Resp:type_name -> quorum.pb.ChangeConsensusResp - 34, // 19: quorum.pb.ChangeConsensusProof.Req:type_name -> quorum.pb.ChangeConsensusReq - 36, // 20: quorum.pb.ChangeConsensusProof.Resp:type_name -> quorum.pb.ChangeConsensusResp - 34, // 21: quorum.pb.ChangeConsensusResultBundle.Req:type_name -> quorum.pb.ChangeConsensusReq - 36, // 22: quorum.pb.ChangeConsensusResultBundle.Resps:type_name -> quorum.pb.ChangeConsensusResp - 10, // 23: quorum.pb.ChangeConsensusResultBundle.Result:type_name -> quorum.pb.ChangeConsensusResult - 11, // 24: quorum.pb.SyncMsg.Type:type_name -> quorum.pb.SyncMsgType - 12, // 25: quorum.pb.ReqBlockResp.Result:type_name -> quorum.pb.ReqBlkResult - 43, // 26: quorum.pb.ReqBlockResp.Blocks:type_name -> quorum.pb.BlocksBundle - 31, // 27: quorum.pb.BlocksBundle.Blocks:type_name -> quorum.pb.Block - 13, // 28: quorum.pb.BroadcastMsg.Type:type_name -> quorum.pb.BroadcastType - 31, // 29: quorum.pb.GroupItem.GenesisBlock:type_name -> quorum.pb.Block - 14, // 30: quorum.pb.GroupItem.EncryptType:type_name -> quorum.pb.GroupEncryptType - 15, // 31: quorum.pb.GroupItem.ConsenseType:type_name -> quorum.pb.GroupConsenseType - 31, // 32: quorum.pb.GroupSeed.GenesisBlock:type_name -> quorum.pb.Block - 45, // 33: quorum.pb.NodeSDKGroupItem.Group:type_name -> quorum.pb.GroupItem - 30, // 34: quorum.pb.HBTrxBundle.Trxs:type_name -> quorum.pb.Trx - 16, // 35: quorum.pb.HBMsgv1.PayloadType:type_name -> quorum.pb.HBMsgPayloadType - 17, // 36: quorum.pb.RBCMsg.Type:type_name -> quorum.pb.RBCMsgType - 18, // 37: quorum.pb.BBAMsg.Type:type_name -> quorum.pb.BBAMsgType - 38, // [38:38] is the sub-list for method output_type - 38, // [38:38] is the sub-list for method input_type - 38, // [38:38] is the sub-list for extension type_name - 38, // [38:38] is the sub-list for extension extendee - 0, // [0:38] is the sub-list for field type_name + 31, // 12: quorum.pb.Block.Trxs:type_name -> quorum.pb.Trx + 8, // 13: quorum.pb.BftMsg.Type:type_name -> quorum.pb.BftMsgType + 9, // 14: quorum.pb.CCMsg.Type:type_name -> quorum.pb.CCMsgType + 35, // 15: quorum.pb.ChangeConsensusReqMsg.Req:type_name -> quorum.pb.ChangeConsensusReq + 35, // 16: quorum.pb.ChangeConsensusResp.Req:type_name -> quorum.pb.ChangeConsensusReq + 37, // 17: quorum.pb.ChangeConsensusRespMsg.Resp:type_name -> quorum.pb.ChangeConsensusResp + 35, // 18: quorum.pb.ChangeConsensusProof.Req:type_name -> quorum.pb.ChangeConsensusReq + 37, // 19: quorum.pb.ChangeConsensusProof.Resp:type_name -> quorum.pb.ChangeConsensusResp + 35, // 20: quorum.pb.ChangeConsensusResultBundle.Req:type_name -> quorum.pb.ChangeConsensusReq + 37, // 21: quorum.pb.ChangeConsensusResultBundle.Resps:type_name -> quorum.pb.ChangeConsensusResp + 10, // 22: quorum.pb.ChangeConsensusResultBundle.Result:type_name -> quorum.pb.ChangeConsensusResult + 11, // 23: quorum.pb.SyncMsg.Type:type_name -> quorum.pb.SyncMsgType + 12, // 24: quorum.pb.ReqBlockResp.Result:type_name -> quorum.pb.ReqBlkResult + 44, // 25: quorum.pb.ReqBlockResp.Blocks:type_name -> quorum.pb.BlocksBundle + 32, // 26: quorum.pb.BlocksBundle.Blocks:type_name -> quorum.pb.Block + 13, // 27: quorum.pb.BroadcastMsg.Type:type_name -> quorum.pb.BroadcastType + 32, // 28: quorum.pb.GroupItem.GenesisBlock:type_name -> quorum.pb.Block + 14, // 29: quorum.pb.GroupItem.EncryptType:type_name -> quorum.pb.GroupEncryptType + 15, // 30: quorum.pb.GroupItem.ConsenseType:type_name -> quorum.pb.GroupConsenseType + 32, // 31: quorum.pb.GroupSeed.GenesisBlock:type_name -> quorum.pb.Block + 46, // 32: quorum.pb.NodeSDKGroupItem.Group:type_name -> quorum.pb.GroupItem + 32, // 33: quorum.pb.PublicPOAGroupItem.GenesisBlock:type_name -> quorum.pb.Block + 49, // 34: quorum.pb.PublicPOAGroupItem.ConsensusInfo:type_name -> quorum.pb.PoaGroupConsensusInfo + 32, // 35: quorum.pb.PrivatePOAGroupItem.GenesisBlock:type_name -> quorum.pb.Block + 49, // 36: quorum.pb.PrivatePOAGroupItem.ConsensusInfo:type_name -> quorum.pb.PoaGroupConsensusInfo + 16, // 37: quorum.pb.GroupItemRumLite.Type:type_name -> quorum.pb.GroupType + 52, // 38: quorum.pb.GroupSeedRumLite.Group:type_name -> quorum.pb.GroupItemRumLite + 31, // 39: quorum.pb.HBTrxBundle.Trxs:type_name -> quorum.pb.Trx + 17, // 40: quorum.pb.HBMsgv1.PayloadType:type_name -> quorum.pb.HBMsgPayloadType + 18, // 41: quorum.pb.RBCMsg.Type:type_name -> quorum.pb.RBCMsgType + 19, // 42: quorum.pb.BBAMsg.Type:type_name -> quorum.pb.BBAMsgType + 43, // [43:43] is the sub-list for method output_type + 43, // [43:43] is the sub-list for method input_type + 43, // [43:43] is the sub-list for extension type_name + 43, // [43:43] is the sub-list for extension extendee + 0, // [0:43] is the sub-list for field type_name } func init() { file_chain_proto_init() } @@ -4952,7 +5481,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HBTrxBundle); i { + switch v := v.(*PoaGroupConsensusInfo); i { case 0: return &v.state case 1: @@ -4964,7 +5493,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HBMsgv1); i { + switch v := v.(*PublicPOAGroupItem); i { case 0: return &v.state case 1: @@ -4976,7 +5505,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RBCMsg); i { + switch v := v.(*PrivatePOAGroupItem); i { case 0: return &v.state case 1: @@ -4988,7 +5517,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitPropose); i { + switch v := v.(*GroupItemRumLite); i { case 0: return &v.state case 1: @@ -5000,7 +5529,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Echo); i { + switch v := v.(*GroupSeedRumLite); i { case 0: return &v.state case 1: @@ -5012,7 +5541,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Ready); i { + switch v := v.(*HBTrxBundle); i { case 0: return &v.state case 1: @@ -5024,7 +5553,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BBAMsg); i { + switch v := v.(*HBMsgv1); i { case 0: return &v.state case 1: @@ -5036,7 +5565,7 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bval); i { + switch v := v.(*RBCMsg); i { case 0: return &v.state case 1: @@ -5048,6 +5577,66 @@ func file_chain_proto_init() { } } file_chain_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InitPropose); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chain_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Echo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chain_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Ready); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chain_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BBAMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chain_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Bval); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chain_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Aux); i { case 0: return &v.state @@ -5065,8 +5654,8 @@ func file_chain_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chain_proto_rawDesc, - NumEnums: 19, - NumMessages: 38, + NumEnums: 20, + NumMessages: 43, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/pb/chain.proto b/pkg/pb/chain.proto index d0652c2f..d6f969e8 100644 --- a/pkg/pb/chain.proto +++ b/pkg/pb/chain.proto @@ -154,15 +154,14 @@ message Trx { //BLOCK message Block { - string GroupId = 1; - uint64 BlockId = 2; + uint64 BlockId = 1; + string GroupId = 2; bytes PrevHash = 3; - string ProducerPubkey = 4; - repeated Trx Trxs = 5; - int64 TimeStamp = 6; - ConsensusInfo Consensus = 7; - bytes BlockHash = 8; - bytes ProducerSign = 9; + repeated Trx Trxs = 4; + string ProducerPubkey = 5; + int64 TimeStamp = 6; + bytes BlockHash = 7; + bytes ProducerSign = 8; } //BFT_MSG @@ -338,6 +337,54 @@ message NodeSDKGroupItem { string GroupSeed = 5; } +//GroupItem Rum_lite + +enum GroupType { + PUBLIC_POA = 0; + PRIVATE_POA = 1; +} + +message PoaGroupConsensusInfo { + uint64 EpochDuration = 1; + repeated string Producers = 2; + uint64 CurrEpoch = 3; + uint64 CurrBlockId = 4; +} + +message PublicPOAGroupItem { + string AppKey = 1; + string GroupId = 2; + string GroupName = 3; + string OwnerPubKey = 4; + string SignPubkey = 5; + string CipherKey = 6; + Block GenesisBlock = 7; + PoaGroupConsensusInfo ConsensusInfo = 8; + int64 LastUpdate = 9; +} + +message PrivatePOAGroupItem { + string AppKey = 1; + string GroupId = 2; + string GroupName = 3; + string OwnerPubKey = 4; + string UserSignPubkey = 5; + string UserEncryptPubkey = 6; + Block GenesisBlock = 7; + PoaGroupConsensusInfo ConsensusInfo = 8; + int64 LastUpdate = 9; +} + +message GroupItemRumLite { + GroupType Type = 1; + bytes GroupData = 2; +} + +message GroupSeedRumLite { + GroupItemRumLite Group = 1; + bytes Hash = 2; + bytes Signature = 3; +} //HB_MSG //HB protocol is used for both change consensus and bft