diff --git a/.gitignore b/.gitignore index 94ab39d26d..9101657e1b 100644 --- a/.gitignore +++ b/.gitignore @@ -137,6 +137,7 @@ build.yml # bscp 软连接 bcs-services/bscp.io .vscode +__debug_* bcs-scenarios/bcs-kourse-rollout/bin/* diff --git a/bcs-services/bcs-bscp/cmd/cache-service/service/cache/client/client.go b/bcs-services/bcs-bscp/cmd/cache-service/service/cache/client/client.go index 88c95ecb14..a066707e6e 100644 --- a/bcs-services/bcs-bscp/cmd/cache-service/service/cache/client/client.go +++ b/bcs-services/bcs-bscp/cmd/cache-service/service/cache/client/client.go @@ -16,11 +16,14 @@ package client import ( "context" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/cache-service/service/cache/keys" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/bedis" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/dao" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" + pbclient "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client" + pbce "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client-event" pbds "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/data-service" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/runtime/jsoni" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/runtime/lock" @@ -37,6 +40,8 @@ type Interface interface { RefreshAppCache(kt *kit.Kit, bizID uint32, appID uint32) error GetReleasedKv(kt *kit.Kit, bizID uint32, releaseID uint32) (string, error) GetReleasedKvValue(kt *kit.Kit, bizID, appID, releaseID uint32, key string) (string, error) + SetClientMetric(kt *kit.Kit, bizID, appID uint32, payload []byte) error + BatchUpsertClientMetrics(kt *kit.Kit, clientData []*pbclient.Client, clientEventData []*pbce.ClientEvent) error } // New initialize a cache client. @@ -103,3 +108,25 @@ func (c *client) RefreshAppCache(kt *kit.Kit, bizID uint32, appID uint32) error return nil } + +// SetClientMetric set client metric data +func (c *client) SetClientMetric(kt *kit.Kit, bizID, appID uint32, payload []byte) error { + if err := c.bds.LPush(kt.Ctx, keys.Key.ClientMetricKey(bizID, appID), payload); err != nil { + return err + } + return nil +} + +// BatchUpsertClientMetrics batch upsert client metrics data +func (c *client) BatchUpsertClientMetrics(kt *kit.Kit, clientData []*pbclient.Client, + clientEventData []*pbce.ClientEvent) error { + in := &pbds.BatchUpsertClientMetricsReq{ + ClientItems: clientData, + ClientEventItems: clientEventData, + } + _, err := c.db.BatchUpsertClientMetrics(kt.Ctx, in) + if err != nil { + return err + } + return nil +} diff --git a/bcs-services/bcs-bscp/cmd/cache-service/service/cache/event/client_metric.go b/bcs-services/bcs-bscp/cmd/cache-service/service/cache/event/client_metric.go new file mode 100644 index 0000000000..a63df5e611 --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/cache-service/service/cache/event/client_metric.go @@ -0,0 +1,360 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package event handle client metric +package event + +import ( + "context" + "fmt" + "regexp" + "time" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/cache-service/service/cache/client" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/bedis" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/dao" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" + pbclient "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client" + pbce "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client-event" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/runtime/jsoni" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/runtime/shutdown" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/serviced" + sfs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/sf-share" +) + +const ( + defaultClientMetricTaskInterval = 10 * time.Second + clientMetricPattern = `*bscp:client-metric:*` + clientMetricKey = `\{\d+\}bscp:client-metric:\d+` +) + +// ClientMetric xxx +type ClientMetric struct { + set dao.Set + state serviced.State + bds bedis.Client + op client.Interface +} + +// NewClientMetric init client metric +func NewClientMetric(set dao.Set, state serviced.State, bds bedis.Client, op client.Interface) ClientMetric { + return ClientMetric{ + set: set, + state: state, + bds: bds, + op: op, + } +} + +// Run the client metric task +func (cm *ClientMetric) Run() { + logs.Infof("start client metric task") + notifier := shutdown.AddNotifier() + go func() { + ticker := time.NewTicker(defaultClientMetricTaskInterval) + defer ticker.Stop() + for { + kt := kit.New() + ctx, cancel := context.WithCancel(kt.Ctx) + kt.Ctx = ctx + + select { + case <-notifier.Signal: + logs.Infof("stop handle client metric data success") + cancel() + notifier.Done() + return + case <-ticker.C: + logs.Infof("start handle client metric data") + + if !cm.state.IsMaster() { + logs.V(2).Infof("this is slave, do not need to purge, skip. rid: %s", kt.Rid) + time.Sleep(sleepTime) + continue + } + cm.consumeClientMetricData(kt) + } + } + }() +} + +// 消费队列中的 client metric 数据 +func (cm *ClientMetric) consumeClientMetricData(kt *kit.Kit) { + // 先获取符合规则的key + keys, err := cm.matchKeys() + if err != nil { + logs.Errorf("the KEY is not matched, err: %s, rid: %s", err.Error(), kt.Rid) + return + } + if len(keys) == 0 { + logs.V(2).Infof("there is no matching KEY, rid: %s", kt.Rid) + return + } + for _, key := range keys { + lLen, err := cm.bds.LLen(kt.Ctx, key) + if err != nil { + logs.Errorf("get key: %s list length failed, err: %s", key, err.Error()) + continue + } + if lLen != 0 { + cm.getClientMetricList(kt, key, lLen) + } + } +} + +// 获取 client metric 数据列表 +func (cm *ClientMetric) getClientMetricList(kt *kit.Kit, key string, listLen int64) { + batchSize := 1000 + for i := 0; i < int(listLen); i += batchSize { + startIndex := int64(i) + endIndex := int64(i + batchSize - 1) + if endIndex >= listLen { + endIndex = listLen - 1 + } + list, err := cm.bds.LRange(kt.Ctx, key, startIndex, endIndex) + if err != nil { + logs.Errorf("get key: %s %v to %v client metric data failed, rid: %s, err: %s ", key, + startIndex, endIndex, kt.Rid, err.Error()) + continue + } + err = cm.handleClientMetricData(kt, list) + if err != nil { + logs.Errorf("handle client metric data failed, rid: %s, err: %s", kt.Rid, err.Error()) + continue + } + + _, err = cm.bds.LTrim(kt.Ctx, key, endIndex+1, -1) + if err != nil { + logs.Errorf("delete the Specify keys values data failed, key: %s, rid: %s, err: %s", key, kt.Rid, err.Error()) + continue + } + } + +} + +// 处理 client metric 数据 +// client 表是按照 业务+服务+客户端 维度:数据做聚合 +// 多条心跳把每条每一列中的最大值取出来,组合成一条 +// 多条变更数据只需要最后一条 +// 多条客户端连接也是最后一条 +// 多条取数据也是上报最后一条 +// client event 表是按照 业务+服务+事件ID 维度:数据做聚合 +func (cm *ClientMetric) handleClientMetricData(kt *kit.Kit, payload []string) error { // nolint + vc := new(sfs.VersionChangePayload) + hb := new(sfs.HeartbeatItem) + ci := new(sfs.ClientInfoItem) + ps := new(sfs.PullStatusPayload) + clientData := make([]*pbclient.Client, 0) + clientEventData := make([]*pbce.ClientEvent, 0) + + psClientEvent := map[string]*pbce.ClientEvent{} + hbClientEvent := map[string]*pbce.ClientEvent{} + psClient := map[string]*pbclient.Client{} + hbClient := map[string]*pbclient.Client{} + vcClient := map[string]*pbclient.Client{} + ciClient := map[string]*pbclient.Client{} + + maxResourceUsageValues := make(map[string]*pbclient.ClientResource) + + clientMetricData := sfs.ClientMetricData{} + for _, v := range payload { + err := jsoni.Unmarshal([]byte(v), &clientMetricData) + if err != nil { + return err + } + switch sfs.MessagingType(clientMetricData.MessagingType) { + case sfs.PullStatus: + err = ps.Decode(clientMetricData.Payload) + if err != nil { + return err + } + ps.Application.AppID = clientMetricData.AppID + clientMetric, cErr := ps.PbClientMetric() + if cErr != nil { + return cErr + } + psClient = lastClientData(clientMetric, psClient) + + clientEventMetric, ceErr := ps.PbClientEventMetric() + if ceErr != nil { + return ceErr + } + psClientEvent = lastClientEventData(clientEventMetric, psClientEvent) + case sfs.Heartbeat: + err = jsoni.Unmarshal(clientMetricData.Payload, hb) + if err != nil { + return err + } + + hb.Application.AppID = clientMetricData.AppID + clientMetric, errHb := hb.PbClientMetric() + if errHb != nil { + return errHb + } + if clientMetric == nil { + continue + } + key := fmt.Sprintf("%d-%d-%s", clientMetric.Attachment.BizId, + clientMetric.Attachment.AppId, clientMetric.Attachment.Uid) + // 如果 key 已存在,比较并更新最大值 + if existing, ok := maxResourceUsageValues[key]; ok { + if clientMetric.Spec.Resource.CpuMaxUsage > existing.CpuMaxUsage { + existing.CpuMaxUsage = clientMetric.Spec.Resource.CpuMaxUsage + } + if clientMetric.Spec.Resource.CpuUsage > existing.CpuUsage { + existing.CpuUsage = clientMetric.Spec.Resource.CpuUsage + } + if clientMetric.Spec.Resource.MemoryMaxUsage > existing.MemoryMaxUsage { + existing.MemoryMaxUsage = clientMetric.Spec.Resource.MemoryMaxUsage + } + if clientMetric.Spec.Resource.MemoryUsage > existing.MemoryUsage { + existing.MemoryUsage = clientMetric.Spec.Resource.MemoryUsage + } + maxResourceUsageValues[key] = existing + } else { + maxResourceUsageValues[key] = &pbclient.ClientResource{ + CpuMaxUsage: clientMetric.Spec.Resource.CpuMaxUsage, + CpuUsage: clientMetric.Spec.Resource.CpuUsage, + MemoryUsage: clientMetric.Spec.Resource.MemoryUsage, + MemoryMaxUsage: clientMetric.Spec.Resource.MemoryMaxUsage, + } + } + clientMetric.Spec.Resource = maxResourceUsageValues[key] + hbClient[key] = clientMetric + // 处理clientEvent数据 + clientEventMetric, ceErr := hb.PbClientEventMetric() + if ceErr != nil { + return ceErr + } + hbClientEvent = lastClientEventData(clientEventMetric, hbClientEvent) + case sfs.VersionChangeMessage: + err = vc.Decode(clientMetricData.Payload) + if err != nil { + return err + } + vc.Application.AppID = clientMetricData.AppID + clientMetric, errCeVc := vc.PbClientMetric() + if errCeVc != nil { + return errCeVc + } + vcClient = lastClientData(clientMetric, vcClient) + clientEventMetric, errVc := vc.PbClientEventMetric() + if errVc != nil { + return errVc + } + clientEventData = append(clientEventData, clientEventMetric) + case sfs.ClientInfo: + err = jsoni.Unmarshal(clientMetricData.Payload, ci) + if err != nil { + return err + } + ci.Application.AppID = clientMetricData.AppID + clientMetric, errCi := ci.PbClientMetric() + if errCi != nil { + return errCi + } + ciClient = lastClientData(clientMetric, ciClient) + } + } + + for _, v := range ciClient { + clientData = append(clientData, v) + } + for _, v := range vcClient { + clientData = append(clientData, v) + } + for _, v := range psClient { + clientData = append(clientData, v) + } + for _, v := range hbClient { + clientData = append(clientData, v) + } + for _, v := range psClientEvent { + clientEventData = append(clientEventData, v) + } + for _, v := range hbClientEvent { + clientEventData = append(clientEventData, v) + } + + err := cm.op.BatchUpsertClientMetrics(kt, clientData, clientEventData) + if err != nil { + logs.Errorf("batch upsert client metrics failed, rid: %s, err: %s", kt.Rid, err.Error()) + return err + } + + return nil +} + +// matchKeys xxx +func (cm *ClientMetric) matchKeys() ([]string, error) { + kt := kit.New() + keys, err := cm.bds.Keys(kt.Ctx, clientMetricPattern) + if err != nil { + return nil, err + } + // 再次过滤 + keys, err = filterKeysByRegex(keys, clientMetricKey) + if err != nil { + return nil, err + } + return keys, nil +} + +// filterKeysByRegex 使用正则表达式筛选符合规则的键 +func filterKeysByRegex(keys []string, pattern string) ([]string, error) { + re, err := regexp.Compile(pattern) + if err != nil { + return nil, err + } + var matchingKeys []string + for _, key := range keys { + if re.MatchString(key) { + matchingKeys = append(matchingKeys, key) + } + } + return matchingKeys, nil +} + +// 过滤出最后一条数据 +func lastClientData(clientMetric *pbclient.Client, clientMap map[string]*pbclient.Client) map[string]*pbclient.Client { + if clientMetric == nil { + return nil + } + key := fmt.Sprintf("%d-%d-%s", clientMetric.Attachment.BizId, + clientMetric.Attachment.AppId, clientMetric.Attachment.Uid) + if p, ok := clientMap[key]; ok { + if p.Spec.LastHeartbeatTime.AsTime().After(clientMetric.Spec.LastHeartbeatTime.AsTime()) { + clientMap[key] = p + } + } else { + clientMap[key] = clientMetric + } + return clientMap +} + +func lastClientEventData(clientEventMetric *pbce.ClientEvent, + clientEventMap map[string]*pbce.ClientEvent) map[string]*pbce.ClientEvent { + if clientEventMetric == nil { + return nil + } + key := fmt.Sprintf("%d-%d-%s", clientEventMetric.Attachment.BizId, + clientEventMetric.Attachment.AppId, clientEventMetric.Attachment.CursorId) + if p, ok := clientEventMap[key]; ok { + if p.HeartbeatTime.AsTime().After(clientEventMetric.HeartbeatTime.AsTime()) { + clientEventMap[key] = p + } + } else { + clientEventMap[key] = clientEventMetric + } + return clientEventMap +} diff --git a/bcs-services/bcs-bscp/cmd/cache-service/service/cache/keys/cache.go b/bcs-services/bcs-bscp/cmd/cache-service/service/cache/keys/cache.go index fbf008c7cf..76b5ed0dea 100644 --- a/bcs-services/bcs-bscp/cmd/cache-service/service/cache/keys/cache.go +++ b/bcs-services/bcs-bscp/cmd/cache-service/service/cache/keys/cache.go @@ -48,6 +48,7 @@ const ( appMeta namespace = "app-meta" appID namespace = "app-id" releasedKv namespace = "released-kv" + clientMetric namespace = "client-metric" ) type keyGenerator struct { @@ -62,6 +63,15 @@ type keyGenerator struct { appHasRITTLRange [2]int } +// ClientMetricKey generate the client metric cache key. +func (k keyGenerator) ClientMetricKey(bizID uint32, appID uint32) string { + return element{ + biz: bizID, + ns: clientMetric, + key: strconv.FormatUint(uint64(appID), 10), + }.String() +} + // ReleasedGroup generate a release's released group cache key to save all the released groups under this release func (k keyGenerator) ReleasedGroup(bizID uint32, appID uint32) string { return element{ diff --git a/bcs-services/bcs-bscp/cmd/cache-service/service/feed.go b/bcs-services/bcs-bscp/cmd/cache-service/service/feed.go index 0cdf642a55..a34f48ae54 100644 --- a/bcs-services/bcs-bscp/cmd/cache-service/service/feed.go +++ b/bcs-services/bcs-bscp/cmd/cache-service/service/feed.go @@ -226,3 +226,14 @@ func (s *Service) ListEventsMeta(ctx context.Context, req *pbcs.ListEventsReq) ( return &pbcs.ListEventsResp{List: pbcs.PbEventMeta(metas)}, nil } + +// SetClientMetric set client metric +func (s *Service) SetClientMetric(ctx context.Context, req *pbcs.SetClientMetricReq) (*pbcs.SetClientMetricResp, + error) { + kt := kit.FromGrpcContext(ctx) + err := s.op.SetClientMetric(kt, req.BizId, req.AppId, req.Payload) + if err != nil { + return nil, err + } + return &pbcs.SetClientMetricResp{}, nil +} diff --git a/bcs-services/bcs-bscp/cmd/cache-service/service/service.go b/bcs-services/bcs-bscp/cmd/cache-service/service/service.go index b1f1c0ec55..d07945bc5c 100644 --- a/bcs-services/bcs-bscp/cmd/cache-service/service/service.go +++ b/bcs-services/bcs-bscp/cmd/cache-service/service/service.go @@ -41,7 +41,8 @@ func NewService(sd serviced.State, daoSet dao.Set, bs bedis.Client, op client.In if err != nil { return nil, fmt.Errorf("run event handling task failed, err: %v", err) } - + metric := event.NewClientMetric(daoSet, sd, bs, op) + metric.Run() gateway, err := newGateway(sd, daoSet, bs) if err != nil { return nil, fmt.Errorf("new gateway failed, err: %v", err) diff --git a/bcs-services/bcs-bscp/cmd/data-service/app/app.go b/bcs-services/bcs-bscp/cmd/data-service/app/app.go index 163dafeeda..6d9c2e5c61 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/app/app.go +++ b/bcs-services/bcs-bscp/cmd/data-service/app/app.go @@ -29,6 +29,7 @@ import ( "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/data-service/options" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/data-service/service" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/data-service/service/crontab" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/cc" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/uuid" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/dao" @@ -133,6 +134,12 @@ func (ds *dataService) prepare(opt *options.Option) error { ds.daoSet = set + // 同步客户端状态 + go func() { + state := crontab.NewSyncClientOnlineState(ds.daoSet) + state.Run() + }() + // initial Vault set vaultSet, err := vault.NewSet(cc.DataService().Vault) if err != nil { diff --git a/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20231212174648_add_client.go b/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20231212174648_add_client.go new file mode 100644 index 0000000000..0968687c94 --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20231212174648_add_client.go @@ -0,0 +1,92 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "time" + + "gorm.io/gorm" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrator" +) + +func init() { + // add current migration to migrator + migrator.GetMigrator().AddMigration(&migrator.Migration{ + Version: "20231212174648", + Name: "20231212174648_add_client", + Mode: migrator.GormMode, + Up: mig20231212174648Up, + Down: mig20231212174648Down, + }) +} + +// mig20231212174648Up for up migration +func mig20231212174648Up(tx *gorm.DB) error { + // Clients : client + type Clients struct { + ID uint `gorm:"column:id;type:bigint(1) unsigned;primary_key;autoIncrement:false"` + + BizID uint `gorm:"type:bigint(1) unsigned not null;uniqueIndex:idx_bizID_appID_uid,priority:1"` + APPID uint `gorm:"type:bigint(1) unsigned not null;uniqueIndex:idx_bizID_appID_uid,priority:2"` + UID string `gorm:"column:uid;type:varchar(64);NOT NULL;uniqueIndex:idx_bizID_appID_uid,priority:3"` + + ClientVersion string `gorm:"column:client_version;type:varchar(20);default:'';NOT NULL"` + Ip string `gorm:"column:ip;type:varchar(16);default:'';NOT NULL"` + Labels string `gorm:"column:labels;type:json;default:NULL"` + Annotations string `gorm:"column:annotations;type:json;default:NULL"` + FirstConnectTime time.Time `gorm:"column:first_connect_time;type:datetime(6);default:NULL"` + LastHeartbeatTime time.Time `gorm:"column:last_heartbeat_time;type:datetime(6);default:NULL;index:idx_lastHeartbeatTime_onlineStatus,priority:1"` // nolint + OnlineStatus string `gorm:"column:online_status;type:varchar(20);default:'';NOT NULL;index:idx_lastHeartbeatTime_onlineStatus,priority:2"` // nolint + CpuUsage float64 `gorm:"column:cpu_usage;type:double unsigned;default:0;NOT NULL"` + CpuMaxUsage float64 `gorm:"column:cpu_max_usage;type:double unsigned;default:0;NOT NULL"` + MemoryUsage uint64 `gorm:"column:memory_usage;type:bigint(1) unsigned;default:0;NOT NULL"` + MemoryMaxUsage uint64 `gorm:"column:memory_max_usage;type:bigint(1) unsigned;default:0;NOT NULL"` + CurrentReleaseID uint `gorm:"column:current_release_id;type:bigint(1) unsigned;default:0;NOT NULL"` + TargetReleaseID uint `gorm:"column:target_release_id;type:bigint(1) unsigned;default:0;NOT NULL"` + ReleaseChangeStatus string `gorm:"column:release_change_status;type:varchar(20);default:'';NOT NULL"` + ReleaseChangeFailedReason string `gorm:"column:release_change_failed_reason;type:varchar(20);default:'';NOT NULL"` + FailedDetailReason string `gorm:"column:failed_detail_reason;type:varchar(255);default:'';NOT NULL"` + } + + // IDGenerators : ID生成器 + type IDGenerators struct { + ID uint `gorm:"type:bigint(1) unsigned not null;primaryKey"` + Resource string `gorm:"type:varchar(50) not null;uniqueIndex:idx_resource"` + MaxID uint `gorm:"type:bigint(1) unsigned not null"` + UpdatedAt time.Time `gorm:"type:datetime(6) not null"` + } + + if err := tx.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4"). + AutoMigrate(&Clients{}); err != nil { + return err + } + + now := time.Now() + if result := tx.Create([]IDGenerators{ + {Resource: "clients", MaxID: 0, UpdatedAt: now}, + }); result.Error != nil { + return result.Error + } + return nil + +} + +// mig20231212174648Down for down migration +func mig20231212174648Down(tx *gorm.DB) error { + if err := tx.Migrator().DropTable("model_example"); err != nil { + return err + } + + return nil +} diff --git a/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20231212174736_add_client_event.go b/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20231212174736_add_client_event.go new file mode 100644 index 0000000000..1a8314078f --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20231212174736_add_client_event.go @@ -0,0 +1,92 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "time" + + "gorm.io/gorm" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrator" +) + +func init() { + // add current migration to migrator + migrator.GetMigrator().AddMigration(&migrator.Migration{ + Version: "20231212174736", + Name: "20231212174736_add_client_event", + Mode: migrator.GormMode, + Up: mig20231212174736Up, + Down: mig20231212174736Down, + }) +} + +// mig20231212174736Up for up migration +func mig20231212174736Up(tx *gorm.DB) error { + // ClientEvents : ClientEvents + type ClientEvents struct { + ID uint `gorm:"column:id;type:bigint(1) unsigned;primary_key"` + ClientID uint `gorm:"column:client_id;type:bigint(1) unsigned;NOT NULL;index:idx_clientID,priority:1"` + CursorID string `gorm:"column:cursor_id;type:varchar(128);NOT NULL;uniqueIndex:idx_bizID_appID_uid_cursorID,priority:1"` // nolint + + BizID uint `gorm:"type:bigint(1) unsigned not null;uniqueIndex:idx_bizID_appID_uid_cursorID,priority:2"` + AppID uint `gorm:"type:bigint(1) unsigned not null;uniqueIndex:idx_bizID_appID_uid_cursorID,priority:3"` + + UID string `gorm:"column:uid;type:varchar(64);NOT NULL;uniqueIndex:idx_bizID_appID_uid_cursorID,priority:4"` // nolint + ClientMode string `gorm:"column:client_mode;type:varchar(20);default:'';NOT NULL;"` + OriginalReleaseID uint `gorm:"column:original_release_id;type:bigint(1) unsigned;default:0;NOT NULL"` + TargetReleaseID uint `gorm:"column:target_release_id;type:bigint(1) unsigned;default:0;NOT NULL"` + StartTime time.Time `gorm:"column:start_time;type:datetime(6);default:NULL"` + EndTime time.Time `gorm:"column:end_time;type:datetime(6);default:NULL"` + TotalSeconds float64 `gorm:"column:total_seconds;type:double unsigned;default:0;NOT NULL"` + TotalFileSize float64 `gorm:"column:total_file_size;type:double unsigned;default:0;NOT NULL"` + DownloadFileSize float64 `gorm:"column:download_file_size;type:double unsigned;default:0;NOT NULL"` + TotalFileNum uint `gorm:"column:total_file_num;type:int(3) unsigned;default:0;NOT NULL"` + DownloadFileNum uint `gorm:"column:download_file_num;type:int(3) unsigned;default:0;NOT NULL"` + ReleaseChangeStatus string `gorm:"column:release_change_status;type:varchar(20);default:;NOT NULL"` + ReleaseChangeFailedReason string `gorm:"column:release_change_failed_reason;type:varchar(20);default:'';NOT NULL"` + FailedDetailReason string `gorm:"column:failed_detail_reason;type:varchar(255);default:'';NOT NULL"` + } + + // IDGenerators : ID生成器 + type IDGenerators struct { + ID uint `gorm:"type:bigint(1) unsigned not null;primaryKey"` + Resource string `gorm:"type:varchar(50) not null;uniqueIndex:idx_resource"` + MaxID uint `gorm:"type:bigint(1) unsigned not null"` + UpdatedAt time.Time `gorm:"type:datetime(6) not null"` + } + + if err := tx.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4"). + AutoMigrate(&ClientEvents{}); err != nil { + return err + } + + now := time.Now() + if result := tx.Create([]IDGenerators{ + {Resource: "client_events", MaxID: 0, UpdatedAt: now}, + }); result.Error != nil { + return result.Error + } + + return nil + +} + +// mig20231212174736Down for down migration +func mig20231212174736Down(tx *gorm.DB) error { + if err := tx.Migrator().DropTable("model_example"); err != nil { + return err + } + + return nil +} diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/client.go b/bcs-services/bcs-bscp/cmd/data-service/service/client.go new file mode 100644 index 0000000000..2bba86e193 --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/data-service/service/client.go @@ -0,0 +1,257 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package service + +import ( + "context" + "fmt" + "sort" + + "google.golang.org/protobuf/types/known/timestamppb" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" + pbclient "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client" + pbds "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/data-service" + sfs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/sf-share" +) + +// BatchUpsertClientMetrics 批量操作client metrics +func (s *Service) BatchUpsertClientMetrics(ctx context.Context, req *pbds.BatchUpsertClientMetricsReq) ( // nolint + *pbds.BatchUpsertClientMetricsResp, error) { + kt := kit.FromGrpcContext(ctx) + + var err error + toCreate := make([]*table.Client, 0) + clientUpdateData := make([]*pbclient.Client, 0) + if len(req.GetClientItems()) != 0 { + toCreate, clientUpdateData, err = s.handleBatchCreateClients(kt, req.GetClientItems()) + if err != nil { + return nil, err + } + } + + tx := s.dao.GenQuery().Begin() + err = s.dao.Client().BatchCreateWithTx(kt, tx, toCreate) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + + createID := make(map[string]uint32) + for _, item := range toCreate { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizID, item.Attachment.AppID, item.Attachment.UID) + createID[key] = item.ID + } + + updateID := make(map[string]uint32) + if len(clientUpdateData) > 0 { + s.updatePrimaryKey(clientUpdateData, createID) + // 根据类型更新对应字段 + heartbeatData := []*table.Client{} + clientInfoData := []*table.Client{} + pullStatusData := []*table.Client{} + versionChangeData := []*table.Client{} + for _, item := range clientUpdateData { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizId, item.Attachment.AppId, item.Attachment.Uid) + updateID[key] = item.Id + switch item.MessageType { + case "Heartbeat": + heartbeatData = append(heartbeatData, &table.Client{ + ID: item.Id, + Attachment: item.Attachment.ClientAttachment(), + Spec: item.Spec.ClientSpec(), + }) + case "ClientInfo": + clientInfoData = append(clientInfoData, &table.Client{ + ID: item.Id, + Attachment: item.Attachment.ClientAttachment(), + Spec: item.Spec.ClientSpec(), + }) + case "PullStatus": + pullStatusData = append(pullStatusData, &table.Client{ + ID: item.Id, + Attachment: item.Attachment.ClientAttachment(), + Spec: item.Spec.ClientSpec(), + }) + case "VersionChange": + versionChangeData = append(versionChangeData, &table.Client{ + ID: item.Id, + Attachment: item.Attachment.ClientAttachment(), + Spec: item.Spec.ClientSpec(), + }) + } + } + if len(heartbeatData) != 0 { + err = s.dao.Client().BatchUpdateSelectFieldTx(kt, tx, sfs.Heartbeat, heartbeatData) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + } + if len(clientInfoData) != 0 { + err = s.dao.Client().BatchUpdateSelectFieldTx(kt, tx, sfs.ClientInfo, clientInfoData) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + } + if len(versionChangeData) != 0 { + err = s.dao.Client().BatchUpdateSelectFieldTx(kt, tx, sfs.VersionChangeMessage, versionChangeData) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + } + if len(pullStatusData) != 0 { + err = s.dao.Client().BatchUpdateSelectFieldTx(kt, tx, sfs.PullStatus, pullStatusData) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + } + } + + if len(req.GetClientEventItems()) != 0 { + mergedMap := make(map[string]uint32) + for key, value := range createID { + mergedMap[key] = value + } + for key, value := range updateID { + if _, exists := mergedMap[key]; !exists { + mergedMap[key] = value + } + } + + err = s.doBatchCreateClientEvents(kt, tx, req.GetClientEventItems(), mergedMap) + if err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err + } + } + + if e := tx.Commit(); e != nil { + logs.Errorf("commit transaction failed, err: %v, rid: %s", e, kt.Rid) + return nil, e + } + return &pbds.BatchUpsertClientMetricsResp{}, nil +} + +func (s *Service) handleBatchCreateClients(kt *kit.Kit, clients []*pbclient.Client) (toCreate []*table.Client, + clientUpdateData []*pbclient.Client, err error) { + data := [][]interface{}{} + oldData := make(map[string]*table.Client) + + clientCreateData := []*pbclient.Client{} + clientUpdateData = []*pbclient.Client{} + + for _, item := range clients { + data = append(data, []interface{}{item.Attachment.BizId, item.Attachment.AppId, item.Attachment.Uid}) + } + tuple, err := s.dao.Client().ListClientByTuple(kt, data) + if err != nil { + return nil, nil, err + } + if len(tuple) != 0 { + for _, item := range tuple { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizID, item.Attachment.AppID, item.Attachment.UID) + oldData[key] = item + } + } + + // 以心跳时间排序时间asc + sort.Slice(clients, func(i, j int) bool { + return clients[i].Spec.LastHeartbeatTime.AsTime().Before(clients[j].Spec.LastHeartbeatTime.AsTime()) + }) + for _, item := range clients { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizId, item.Attachment.AppId, item.Attachment.Uid) + v, ok := oldData[key] + // 判断数据是否存在 + if !ok { + clientCreateData = append(clientCreateData, &pbclient.Client{ + Attachment: item.GetAttachment(), + Spec: item.GetSpec(), + MessageType: item.MessageType, + }) + } else { + // 处理第一次连接时间 + item.Spec.FirstConnectTime = timestamppb.New(v.Spec.FirstConnectTime) + if item.Spec.ReleaseChangeStatus != sfs.Success.String() { + item.Spec.CurrentReleaseId = v.Spec.CurrentReleaseID + } + clientUpdateData = append(clientUpdateData, &pbclient.Client{ + Id: v.ID, // 只需要填充ID + Attachment: item.GetAttachment(), + Spec: item.Spec, + MessageType: item.MessageType, + }) + } + } + + // 通过时间排序 + sort.Slice(clientCreateData, func(i, j int) bool { + return clientCreateData[i].Spec.LastHeartbeatTime.AsTime().Before(clientCreateData[j].Spec.LastHeartbeatTime.AsTime()) + }) + + // Client数据会存在同一维度下多个类型的消息 + // 如果同一维度下的数据都存在那么都是更新 + // 如果同一维度下的数据不存在,只允许一条创建其他都是更新操作 + createData := make(map[string]*pbclient.Client) + updateData := make([]*pbclient.Client, 0) + for _, item := range clientCreateData { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizId, item.Attachment.AppId, item.Attachment.Uid) + if _, ok := createData[key]; !ok { + createData[key] = item + } else { + updateData = append(updateData, item) + } + } + + // 该数据是最终需要创建的数据 + toCreate = []*table.Client{} + for _, item := range createData { + toCreate = append(toCreate, &table.Client{ + Attachment: item.GetAttachment().ClientAttachment(), + Spec: item.GetSpec().ClientSpec(), + }) + } + clientUpdateData = append(clientUpdateData, updateData...) + return toCreate, clientUpdateData, nil +} + +// func filterCreateClientMetriceData() { + +// } + +func (s *Service) updatePrimaryKey(clientData []*pbclient.Client, createID map[string]uint32) { + for _, item := range clientData { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizId, item.Attachment.AppId, item.Attachment.Uid) + v, ok := createID[key] + if ok { + item.Id = v + } + } +} diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/client_event.go b/bcs-services/bcs-bscp/cmd/data-service/service/client_event.go new file mode 100644 index 0000000000..22f601b45b --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/data-service/service/client_event.go @@ -0,0 +1,166 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package service + +import ( + "fmt" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + pbce "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client-event" + sfs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/sf-share" +) + +func (s *Service) doBatchCreateClientEvents(kt *kit.Kit, tx *gen.QueryTx, clientEvents []*pbce.ClientEvent, // nolint + clientID map[string]uint32) error { + + // 处理clientID + clientEventsData := []*pbce.ClientEvent{} + for _, item := range clientEvents { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizId, item.Attachment.AppId, item.Attachment.Uid) + id, ok := clientID[key] + if ok { + item.Attachment.ClientId = id + clientEventsData = append(clientEventsData, &pbce.ClientEvent{ + Attachment: item.Attachment, + Spec: item.Spec, + MessageType: item.MessageType, + }) + } + } + + if len(clientEventsData) == 0 { + return nil + } + + // 根据 bizID + appID + UID + CursorID 查找存在的数据 + data := [][]interface{}{} + for _, item := range clientEventsData { + data = append(data, []interface{}{item.Attachment.BizId, item.Attachment.AppId, item.Attachment.Uid, + item.Attachment.CursorId}) + } + list, err := s.dao.ClientEvent().ListClientByTuple(kt, data) + if err != nil { + return err + } + clientEventID := map[string]uint32{} + for _, v := range list { + clientEventID[v.Attachment.CursorID] = v.ID + } + + clientEUpdateData := []*pbce.ClientEvent{} + clientECreateData := []*pbce.ClientEvent{} + + // 验证哪些数据需要新增和修改 + for _, item := range clientEventsData { + id, ok := clientEventID[item.Attachment.CursorId] + if !ok { + clientECreateData = append(clientECreateData, &pbce.ClientEvent{ + Attachment: item.GetAttachment(), + Spec: item.GetSpec(), + MessageType: item.MessageType, + }) + } else { + clientEUpdateData = append(clientEUpdateData, &pbce.ClientEvent{ + Id: id, + Attachment: item.GetAttachment(), + Spec: item.GetSpec(), + MessageType: item.MessageType, + }) + } + } + + // 过滤clientECreateData中重复的数据 + createData := make(map[string]*pbce.ClientEvent) + otherCreateData := make([]*pbce.ClientEvent, 0) + for _, item := range clientECreateData { + key := fmt.Sprintf("%d-%d-%s", item.Attachment.BizId, item.Attachment.AppId, item.Attachment.CursorId) + _, ok := createData[key] + if ok { + otherCreateData = append(otherCreateData, item) + } else { + createData[key] = item + } + } + toCreateEvent := []*table.ClientEvent{} + for _, v := range createData { + toCreateEvent = append(toCreateEvent, &table.ClientEvent{ + Spec: v.Spec.ClientEventSpec(), + Attachment: v.Attachment.ClientEventAttachment(), + }) + } + + clientEUpdateData = append(clientEUpdateData, otherCreateData...) + + err = s.dao.ClientEvent().BatchCreateWithTx(kt, tx, toCreateEvent) + if err != nil { + return err + } + // 获取创建后的ID + createID := make(map[string]uint32) + for _, item := range toCreateEvent { + createID[item.Attachment.CursorID] = item.ID + } + + // 判断类型更新对应字段 + heartbeatData := []*table.ClientEvent{} + pullStatusData := []*table.ClientEvent{} + versionChangeData := []*table.ClientEvent{} + for _, v := range clientEUpdateData { + id := createID[v.Attachment.CursorId] + switch v.MessageType { + case "Heartbeat": + heartbeatData = append(heartbeatData, &table.ClientEvent{ + ID: id, + Attachment: v.Attachment.ClientEventAttachment(), + Spec: v.Spec.ClientEventSpec(), + }) + case "PullStatus": + pullStatusData = append(pullStatusData, &table.ClientEvent{ + ID: id, + Attachment: v.Attachment.ClientEventAttachment(), + Spec: v.Spec.ClientEventSpec(), + }) + case "VersionChange": + versionChangeData = append(versionChangeData, &table.ClientEvent{ + ID: id, + Attachment: v.Attachment.ClientEventAttachment(), + Spec: v.Spec.ClientEventSpec(), + }) + } + } + + if len(heartbeatData) != 0 { + err = s.dao.ClientEvent().BatchUpdateSelectFieldTx(kt, tx, sfs.Heartbeat, heartbeatData) + if err != nil { + return err + } + } + + if len(versionChangeData) != 0 { + err = s.dao.ClientEvent().BatchUpdateSelectFieldTx(kt, tx, sfs.VersionChangeMessage, versionChangeData) + if err != nil { + return err + } + } + + if len(pullStatusData) != 0 { + err = s.dao.ClientEvent().BatchUpdateSelectFieldTx(kt, tx, sfs.PullStatus, pullStatusData) + if err != nil { + return err + } + } + + return nil +} diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/crontab/sync_client_online_state.go b/bcs-services/bcs-bscp/cmd/data-service/service/crontab/sync_client_online_state.go new file mode 100644 index 0000000000..9251dfe97b --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/data-service/service/crontab/sync_client_online_state.go @@ -0,0 +1,126 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package crontab example Synchronize the online status of the client +package crontab + +import ( + "context" + "sync" + "time" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/dao" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/runtime/shutdown" +) + +const ( + defaultSyncClientStateInterval = 15 * time.Second +) + +// NewSyncClientOnlineState init client online state +func NewSyncClientOnlineState(set dao.Set) ClientOnlineState { + return ClientOnlineState{ + set: set, + } +} + +// ClientOnlineState xxx +type ClientOnlineState struct { + set dao.Set + mutex sync.Mutex +} + +// Run the sync client online state task +func (c *ClientOnlineState) Run() { + logs.Infof("example Start an online synchronization task for the client") + notifier := shutdown.AddNotifier() + go func() { + ticker := time.NewTicker(defaultSyncClientStateInterval) + defer ticker.Stop() + for { + kt := kit.New() + ctx, cancel := context.WithCancel(kt.Ctx) + kt.Ctx = ctx + + select { + case <-notifier.Signal: + logs.Infof("stop sync client online status success") + cancel() + notifier.Done() + return + case <-ticker.C: + logs.Infof("starts to synchronize the client online status") + c.syncClientOnlineState(kt) + } + } + }() +} + +// sync the online status of the client +func (c *ClientOnlineState) syncClientOnlineState(kt *kit.Kit) { + c.mutex.Lock() + defer func() { + c.mutex.Unlock() + }() + heartbeatTime := time.Now().Add(-60 * time.Second) + onlineStatus := "online" + var page uint32 + + limit := 100 + count, err := c.set.Client().GetClientCountByCondition(kt, heartbeatTime, onlineStatus) + if err != nil { + return + } + if count == 0 { + logs.Infof("there is no data to process,rid: %s, heartbeatTime: %s - onlineStatus: %s", kt.Rid, + heartbeatTime, onlineStatus) + return + } + listLen := int(count) + for i := 0; i < listLen; i += limit { + list, err := c.set.Client().ListByHeartbeatTimeOnlineState(kt, heartbeatTime, onlineStatus, limit, page) + if err != nil { + logs.Errorf("get client data failed, rid: %s, heartbeatTime: %s, page: %s, err: %s", kt.Rid, + heartbeatTime, page, err.Error()) + return + } + if len(list) == 0 { + logs.Infof("there is no data to process, rid: %s, heartbeatTime: %s, page: %s", kt.Rid, + heartbeatTime, page) + return + } + page = list[len(list)-1].ID + err = c.updateClientOnlineState(kt, list, heartbeatTime, onlineStatus) + if err != nil { + logs.Errorf("update client online state failed, rid: %s, heartbeatTime: %s, page: %s, err: %s", kt.Rid, + heartbeatTime, page, err.Error()) + return + } + } +} + +// Update the online status of the client +func (c *ClientOnlineState) updateClientOnlineState(kt *kit.Kit, list []*table.Client, + heartbeatTime time.Time, onlineStatus string) error { + ids := []uint32{} + for _, item := range list { + ids = append(ids, item.ID) + } + err := c.set.Client().UpdateClientOnlineState(kt, heartbeatTime, onlineStatus, ids) + if err != nil { + return err + } + return nil +} diff --git a/bcs-services/bcs-bscp/cmd/feed-server/bll/bll.go b/bcs-services/bcs-bscp/cmd/feed-server/bll/bll.go index 2b9718ec6d..790d1e468c 100644 --- a/bcs-services/bcs-bscp/cmd/feed-server/bll/bll.go +++ b/bcs-services/bcs-bscp/cmd/feed-server/bll/bll.go @@ -107,3 +107,8 @@ func (b *BLL) AppCache() *lcache.App { func (b *BLL) RKvCache() *lcache.ReleasedKv { return b.cache.ReleasedKv } + +// ClientMetric return the client metric instance. +func (b *BLL) ClientMetric() *lcache.ClientMetric { + return b.cache.ClientMetric +} diff --git a/bcs-services/bcs-bscp/cmd/feed-server/bll/lcache/cache.go b/bcs-services/bcs-bscp/cmd/feed-server/bll/lcache/cache.go index 5aaa7c8abf..c07fcdec57 100644 --- a/bcs-services/bcs-bscp/cmd/feed-server/bll/lcache/cache.go +++ b/bcs-services/bcs-bscp/cmd/feed-server/bll/lcache/cache.go @@ -35,6 +35,7 @@ func NewLocalCache(cs *clientset.ClientSet) (*Cache, error) { ReleasedHook: newReleasedHook(mc, cs), Credential: newCredential(mc, cs), Auth: newAuth(mc, cs.Authorizer()), + ClientMetric: newClientMetric(mc, cs), }, nil } @@ -47,6 +48,7 @@ type Cache struct { Credential *Credential ReleasedHook *ReleasedHook Auth *Auth + ClientMetric *ClientMetric } // Purge is used to clean the resource's cache with events. diff --git a/bcs-services/bcs-bscp/cmd/feed-server/bll/lcache/cilent_metric.go b/bcs-services/bcs-bscp/cmd/feed-server/bll/lcache/cilent_metric.go new file mode 100644 index 0000000000..fba974e7b6 --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/feed-server/bll/lcache/cilent_metric.go @@ -0,0 +1,86 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package lcache + +import ( + "time" + + "github.com/bluele/gcache" + prm "github.com/prometheus/client_golang/prometheus" + + clientset "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/feed-server/bll/client-set" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/cc" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" + pbcs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/cache-service" +) + +// newClientMetric xxx +func newClientMetric(mc *metric, cs *clientset.ClientSet) *ClientMetric { + cm := new(ClientMetric) + cm.mc = mc + opt := cc.FeedServer().FSLocalCache + client := gcache.New(int(opt.ReleasedCICacheSize)). + LRU(). + EvictedFunc(cm.evictRecorder). + Expiration(time.Duration(opt.ReleasedCICacheTTLSec) * time.Second). + Build() + + cm.client = client + cm.cs = cs + cm.collectHitRate() + + return cm +} + +// ClientMetric xxx +type ClientMetric struct { + mc *metric + client gcache.Cache + cs *clientset.ClientSet +} + +// Set tore client metric data into redis queues +func (cm *ClientMetric) Set(kt *kit.Kit, bizID, appID uint32, payload []byte) error { + _, err := cm.cs.CS().SetClientMetric(kt.Ctx, &pbcs.SetClientMetricReq{ + BizId: bizID, + AppId: appID, + Payload: payload, + }) + if err != nil { + return err + } + return nil +} + +func (cm *ClientMetric) evictRecorder(key interface{}, _ interface{}) { + bizID, yes := key.(uint32) + if !yes { + return + } + + cm.mc.evictCounter.With(prm.Labels{"resource": "biz_id"}).Inc() + + if logs.V(2) { + logs.Infof("evict client metric cache, release: %d", bizID) + } +} + +func (cm *ClientMetric) collectHitRate() { + go func() { + for { + time.Sleep(5 * time.Second) + cm.mc.hitRate.With(prm.Labels{"resource": "client_metric"}).Set(cm.client.HitRate()) + } + }() +} diff --git a/bcs-services/bcs-bscp/cmd/feed-server/service/metric.go b/bcs-services/bcs-bscp/cmd/feed-server/service/metric.go index 5d274e6577..9bde9dc090 100644 --- a/bcs-services/bcs-bscp/cmd/feed-server/service/metric.go +++ b/bcs-services/bcs-bscp/cmd/feed-server/service/metric.go @@ -42,6 +42,39 @@ func initMetric(name string) *metric { }, []string{"biz"}) metrics.Register().MustRegister(m.watchCounter) + m.clientMaxCPUUsage = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: metrics.Namespace, + Subsystem: metrics.FSConfigConsume, + Name: "client_max_cpu_usage", + Help: "record the maximum cpu usage", + ConstLabels: labels, + }, []string{"bizID", "appName"}) + metrics.Register().MustRegister(m.clientMaxCPUUsage) + m.clientMaxMemUsage = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: metrics.Namespace, + Subsystem: metrics.FSConfigConsume, + Name: "client_max_memory_usage", + Help: "record the maximum memory usage", + ConstLabels: labels, + }, []string{"bizID", "appName"}) + metrics.Register().MustRegister(m.clientMaxMemUsage) + m.clientCurrentCPUUsage = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: metrics.Namespace, + Subsystem: metrics.FSConfigConsume, + Name: "client_current_cpu_usage", + Help: "record the current cpu usage", + ConstLabels: labels, + }, []string{"bizID", "appName"}) + metrics.Register().MustRegister(m.clientCurrentCPUUsage) + m.clientCurrentMemUsage = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: metrics.Namespace, + Subsystem: metrics.FSConfigConsume, + Name: "client_current_memory_usage", + Help: "record the current memory usage", + ConstLabels: labels, + }, []string{"bizID", "appName"}) + metrics.Register().MustRegister(m.clientCurrentMemUsage) + return m } @@ -51,4 +84,12 @@ type metric struct { // watchCounter record the total connection count of sidecars with watch, used to get the new the connection count // within a specified time range. watchCounter *prometheus.CounterVec + // clientMaxCPUUsage The maximum cpu usage of the client was collected + clientMaxCPUUsage *prometheus.GaugeVec + // clientMaxMemUsage the maximum memory usage was collected + clientMaxMemUsage *prometheus.GaugeVec + // clientCurrentCPUUsage the cpu usage of the client was collected + clientCurrentCPUUsage *prometheus.GaugeVec + // clientCurrentMemUsage the current memory usage of the client is collected + clientCurrentMemUsage *prometheus.GaugeVec } diff --git a/bcs-services/bcs-bscp/cmd/feed-server/service/rpc_sidecar.go b/bcs-services/bcs-bscp/cmd/feed-server/service/rpc_sidecar.go index 6081b12058..a59aa867f3 100644 --- a/bcs-services/bcs-bscp/cmd/feed-server/service/rpc_sidecar.go +++ b/bcs-services/bcs-bscp/cmd/feed-server/service/rpc_sidecar.go @@ -16,6 +16,7 @@ import ( "context" "fmt" "path" + "strconv" "strings" prm "github.com/prometheus/client_golang/prometheus" @@ -180,7 +181,7 @@ func (s *Service) Watch(swm *pbfs.SideWatchMeta, fws pbfs.Upstream_WatchServer) } // Messaging received messages delivered from sidecar. -func (s *Service) Messaging(ctx context.Context, msg *pbfs.MessagingMeta) (*pbfs.MessagingResp, error) { +func (s *Service) Messaging(ctx context.Context, msg *pbfs.MessagingMeta) (*pbfs.MessagingResp, error) { // nolint im, err := sfs.ParseFeedIncomingContext(ctx) if err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) @@ -196,6 +197,99 @@ func (s *Service) Messaging(ctx context.Context, msg *pbfs.MessagingMeta) (*pbfs return nil, status.Errorf(codes.PermissionDenied, "no permission to access bscp server") } + vc := new(sfs.VersionChangePayload) + hb := new(sfs.HeartbeatPayload) + ci := new(sfs.ClientInfoPayload) + ps := new(sfs.PullStatusPayload) + + clientMetricData := make(map[string]*sfs.ClientMetricData) + + // 按照服务级别上报数据 + switch sfs.MessagingType(msg.Type) { + case sfs.VersionChangeMessage: + err = vc.Decode(msg.Payload) + if err != nil { + logs.Errorf("version change message decoding failed, %s", err.Error()) + return nil, err + } + s.handleResourceUsageMetrics(vc.BasicData.BizID, vc.Application.App, vc.ResourceUsage) + clientMetricData[vc.Application.App] = &sfs.ClientMetricData{ + MessagingType: msg.Type, + Payload: msg.Payload, + } + case sfs.ClientInfo: + err = ci.Decode(msg.Payload) + if err != nil { + logs.Errorf("client conn message decoding failed, %s", err.Error()) + return nil, err + } + for _, item := range ci.Applications { + data := sfs.ClientInfoItem{ + BasicData: ci.BasicData, + Application: item, + } + marshal, errCi := jsoni.Marshal(data) + if errCi != nil { + return nil, errCi + } + clientMetricData[item.App] = &sfs.ClientMetricData{ + MessagingType: msg.Type, + Payload: marshal, + } + } + case sfs.Heartbeat: + err = hb.Decode(msg.Payload) + if err != nil { + return nil, err + } + for _, item := range hb.Applications { + s.handleResourceUsageMetrics(hb.BasicData.BizID, item.App, hb.ResourceUsage) + oneData := sfs.HeartbeatItem{ + BasicData: hb.BasicData, + Application: item, + ResourceUsage: hb.ResourceUsage, + } + marshal, errHb := jsoni.Marshal(oneData) + if errHb != nil { + return nil, errHb + } + clientMetricData[item.App] = &sfs.ClientMetricData{ + MessagingType: msg.Type, + Payload: marshal, + } + } + case sfs.PullStatus: + err = ps.Decode(msg.Payload) + if err != nil { + return nil, err + } + clientMetricData[ps.Application.App] = &sfs.ClientMetricData{ + MessagingType: msg.Type, + Payload: msg.Payload, + } + } + + for appName, v := range clientMetricData { + appID, err := s.bll.AppCache().GetAppID(im.Kit, im.Meta.BizID, appName) + if err != nil { + logs.Errorf("get app id failed, %s", err.Error()) + continue + } + v.AppID = appID + payload, err := jsoni.Marshal(v) + if err != nil { + logs.Errorf("failed to serialize clientMetricData, err: %s", err.Error()) + continue + } + if im.Meta.BizID != 0 && len(payload) != 0 { + err = s.bll.ClientMetric().Set(im.Kit, im.Meta.BizID, appID, payload) + if err != nil { + logs.Errorf("send %d biz %s message, payload: %s, rid: %s", im.Meta.BizID, im.Meta.Fingerprint, + payload, msg.Rid) + continue + } + } + } logs.V(3).Infof("receive %d biz %s sidecar %s message, payload: %s, rid: %s", im.Meta.BizID, im.Meta.Fingerprint, sfs.MessagingType(msg.Type).String(), msg.Payload, msg.Rid) return new(pbfs.MessagingResp), nil @@ -530,6 +624,13 @@ func matchPattern(name string, match []string) bool { return true } } - return false } + +func (s *Service) handleResourceUsageMetrics(bizID uint32, appName string, resource sfs.ResourceUsage) { + s.mc.clientMaxCPUUsage.WithLabelValues(strconv.Itoa(int(bizID)), appName).Set(resource.CpuMaxUsage) + s.mc.clientCurrentCPUUsage.WithLabelValues(strconv.Itoa(int(bizID)), appName).Set(resource.CpuUsage) + s.mc.clientMaxMemUsage.WithLabelValues(strconv.Itoa(int(bizID)), appName).Set(float64(resource.MemoryMaxUsage)) + s.mc.clientCurrentMemUsage.WithLabelValues(strconv.Itoa(int(bizID)), appName).Set(float64(resource.MemoryUsage)) + +} diff --git a/bcs-services/bcs-bscp/pkg/dal/bedis/base.go b/bcs-services/bcs-bscp/pkg/dal/bedis/base.go index 8a4f952112..93b45f0bc2 100644 --- a/bcs-services/bcs-bscp/pkg/dal/bedis/base.go +++ b/bcs-services/bcs-bscp/pkg/dal/bedis/base.go @@ -410,3 +410,122 @@ func (bs *bedis) Healthz() error { return nil } + +// LPush 将一个或多个值插入到列表头部 +func (bs *bedis) LPush(ctx context.Context, key string, values ...interface{}) error { + start := time.Now() + _, err := bs.client.LPush(ctx, key, values).Result() + if err != nil { + bs.mc.errCounter.With(prm.Labels{"cmd": "lpush"}).Inc() + return err + } + bs.logSlowCmd(ctx, key, time.Since(start)) + bs.mc.cmdLagMS.With(prm.Labels{"cmd": "lpush"}).Observe(float64(time.Since(start).Milliseconds())) + return nil +} + +// LRange 获取列表指定范围内的元素 +func (bs *bedis) LRange(ctx context.Context, key string, start, stop int64) ([]string, error) { + startTime := time.Now() + list, err := bs.client.LRange(ctx, key, start, stop).Result() + if err != nil { + if IsNilError(err) { + return nil, nil + } + bs.mc.errCounter.With(prm.Labels{"cmd": "lrange"}).Inc() + return nil, err + } + values := make([]string, 0) + for _, val := range list { + if val == "" { + continue + } + if len(val) == 0 { + continue + } + + values = append(values, val) + } + bs.logSlowCmd(ctx, "", time.Since(startTime)) + bs.mc.cmdLagMS.With(prm.Labels{"cmd": "lrange"}).Observe(float64(time.Since(startTime).Milliseconds())) + return values, nil +} + +// RPop 移出并获取列表的第一个元素 +func (bs *bedis) RPop(ctx context.Context, key string) (string, error) { + start := time.Now() + value, err := bs.client.RPop(ctx, key).Result() + if err != nil { + if IsNilError(err) { + return "", nil + } + bs.mc.errCounter.With(prm.Labels{"cmd": "rpop"}).Inc() + return "", err + } + bs.logSlowCmd(ctx, "", time.Since(start)) + bs.mc.cmdLagMS.With(prm.Labels{"cmd": "rpop"}).Observe(float64(time.Since(start).Milliseconds())) + + return value, nil +} + +// Keys finds all keys that match a given pattern +func (bs *bedis) Keys(ctx context.Context, pattern string) ([]string, error) { + start := time.Now() + list, err := bs.client.Keys(ctx, pattern).Result() + if err != nil { + if IsNilError(err) { + return nil, nil + } + bs.mc.errCounter.With(prm.Labels{"cmd": "keys"}).Inc() + return nil, err + } + values := make([]string, 0) + for _, val := range list { + if val == "" { + continue + } + if len(val) == 0 { + continue + } + + values = append(values, val) + } + bs.logSlowCmd(ctx, "", time.Since(start)) + bs.mc.cmdLagMS.With(prm.Labels{"cmd": "keys"}).Observe(float64(time.Since(start).Milliseconds())) + return values, nil +} + +// LLen get list length +func (bs *bedis) LLen(ctx context.Context, key string) (int64, error) { + start := time.Now() + value, err := bs.client.LLen(ctx, key).Result() + if err != nil { + if IsNilError(err) { + return 0, nil + } + bs.mc.errCounter.With(prm.Labels{"cmd": "llen"}).Inc() + return 0, err + } + bs.logSlowCmd(ctx, "", time.Since(start)) + bs.mc.cmdLagMS.With(prm.Labels{"cmd": "llen"}).Observe(float64(time.Since(start).Milliseconds())) + + return value, nil +} + +// LTrim trim a list, that is, make the list keep only the elements within the specified interval, +// and the elements that are not within the specified interval are deleted. +func (bs *bedis) LTrim(ctx context.Context, key string, start, stop int64) (string, error) { + startTime := time.Now() + value, err := bs.client.LTrim(ctx, key, start, stop).Result() + if err != nil { + if IsNilError(err) { + return "", nil + } + bs.mc.errCounter.With(prm.Labels{"cmd": "ltrim"}).Inc() + return "", err + } + bs.logSlowCmd(ctx, "", time.Since(startTime)) + bs.mc.cmdLagMS.With(prm.Labels{"cmd": "ltrim"}).Observe(float64(time.Since(startTime).Milliseconds())) + + return value, nil +} diff --git a/bcs-services/bcs-bscp/pkg/dal/bedis/bedis.go b/bcs-services/bcs-bscp/pkg/dal/bedis/bedis.go index db174198d9..91f89297ef 100644 --- a/bcs-services/bcs-bscp/pkg/dal/bedis/bedis.go +++ b/bcs-services/bcs-bscp/pkg/dal/bedis/bedis.go @@ -58,6 +58,12 @@ type RedisClient interface { Del(ctx context.Context, keys ...string) *redis.IntCmd Do(ctx context.Context, args ...interface{}) *redis.Cmd Ping(ctx context.Context) *redis.StatusCmd + LPush(ctx context.Context, key string, values ...interface{}) *redis.IntCmd + LRange(ctx context.Context, key string, start, stop int64) *redis.StringSliceCmd + RPop(ctx context.Context, key string) *redis.StringCmd + Keys(ctx context.Context, pattern string) *redis.StringSliceCmd + LLen(ctx context.Context, key string) *redis.IntCmd + LTrim(ctx context.Context, key string, start, stop int64) *redis.StatusCmd } // Client defines all the bscp used redis command @@ -78,6 +84,12 @@ type Client interface { Delete(ctx context.Context, keys ...string) error Expire(ctx context.Context, key string, ttlSeconds int, mode ExpireMode) error Healthz() error + LPush(ctx context.Context, key string, values ...interface{}) error + LRange(ctx context.Context, key string, start, stop int64) ([]string, error) + RPop(ctx context.Context, key string) (string, error) + Keys(ctx context.Context, pattern string) ([]string, error) + LLen(ctx context.Context, key string) (int64, error) + LTrim(ctx context.Context, key string, start, stop int64) (string, error) } // NewRedisCache create a redis cluster client. diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/client.go b/bcs-services/bcs-bscp/pkg/dal/dao/client.go new file mode 100644 index 0000000000..11347a4904 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/dal/dao/client.go @@ -0,0 +1,154 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dao + +import ( + "time" + + "gorm.io/gen/field" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + sfs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/sf-share" +) + +// Client supplies all the client related operations. +type Client interface { + // BatchCreateWithTx batch create client instances with transaction. + BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, data []*table.Client) error + // BatchUpdateWithTx batch update client instances with transaction. + BatchUpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, data []*table.Client) error + // ListClientByTuple Query the client list according to multiple fields in + ListClientByTuple(kit *kit.Kit, data [][]interface{}) ([]*table.Client, error) + // BatchUpdateSelectFieldTx Update selected field + BatchUpdateSelectFieldTx(kit *kit.Kit, tx *gen.QueryTx, messageType sfs.MessagingType, data []*table.Client) error + // ListByHeartbeatTimeOnlineState obtain data based on the last heartbeat time and online status + ListByHeartbeatTimeOnlineState(kit *kit.Kit, heartbeatTime time.Time, onlineState string, + limit int, id uint32) ([]*table.Client, error) + // UpdateClientOnlineState Update the online status of the client + UpdateClientOnlineState(kit *kit.Kit, heartbeatTime time.Time, onlineState string, ids []uint32) error + // GetClientCountByCondition Get the total according to the condition + GetClientCountByCondition(kit *kit.Kit, heartbeatTime time.Time, onlineState string) (int64, error) +} + +var _ Client = new(clientDao) + +type clientDao struct { + genQ *gen.Query + idGen IDGenInterface + auditDao AuditDao +} + +// GetClientCountByCondition Get the total according to the condition +func (dao *clientDao) GetClientCountByCondition(kit *kit.Kit, heartbeatTime time.Time, + onlineState string) (int64, error) { + m := dao.genQ.Client + count, err := dao.genQ.Client.WithContext(kit.Ctx). + Where(m.LastHeartbeatTime.Lt(heartbeatTime)). + Where(m.OnlineStatus.Eq(onlineState)).Count() + return count, err +} + +// UpdateClientOnlineState Update the online status of the client +func (dao *clientDao) UpdateClientOnlineState(kit *kit.Kit, heartbeatTime time.Time, + onlineState string, ids []uint32) error { + m := dao.genQ.Client + _, err := dao.genQ.Client.WithContext(kit.Ctx). + Where(m.ID.In(ids...)). + Where(m.LastHeartbeatTime.Lt(heartbeatTime)). + Where(m.OnlineStatus.Eq(onlineState)). + Update(m.OnlineStatus, sfs.Offline.String()) + return err +} + +// ListByHeartbeatTimeOnlineState obtain data based on the last heartbeat time and online status +func (dao *clientDao) ListByHeartbeatTimeOnlineState(kit *kit.Kit, heartbeatTime time.Time, + onlineState string, limit int, id uint32) ([]*table.Client, error) { + m := dao.genQ.Client + q := dao.genQ.Client.WithContext(kit.Ctx) + find, err := q.Select(m.ID, m.LastHeartbeatTime, m.OnlineStatus). + Where(m.ID.Gt(id)). + Where(m.LastHeartbeatTime.Lt(heartbeatTime)). + Where(m.OnlineStatus.Eq(onlineState)). + Limit(limit). + Find() + return find, err +} + +// BatchUpdateSelectFieldTx Update selected field +func (dao *clientDao) BatchUpdateSelectFieldTx(kit *kit.Kit, tx *gen.QueryTx, + messageType sfs.MessagingType, data []*table.Client) error { + if len(data) == 0 { + return nil + } + m := dao.genQ.Client + q := tx.Client.WithContext(kit.Ctx) + + // 根据类型更新字段 + // 拉取状态时没有上报资源信息所以忽略cpu和内存等信息 + switch messageType { + case sfs.VersionChangeMessage: + q = q.Omit(m.FirstConnectTime) + case sfs.Heartbeat: + q = q.Omit(m.ClientVersion, m.Ip, m.Labels, m.Annotations, m.FirstConnectTime, m.CurrentReleaseID, + m.TargetReleaseID, m.FailedDetailReason) + case sfs.PullStatus: + q = q.Omit(m.ClientVersion, m.Ip, m.Labels, m.Annotations, m.FirstConnectTime, m.CpuUsage, m.CpuMaxUsage, + m.MemoryUsage, m.MemoryMaxUsage) + case sfs.ClientInfo: + q = q.Omit(m.FirstConnectTime, m.CurrentReleaseID, m.TargetReleaseID, + m.ReleaseChangeStatus, m.ReleaseChangeFailedReason, m.FailedDetailReason, m.CpuUsage, m.CpuMaxUsage, + m.MemoryUsage, m.MemoryMaxUsage) + } + + return q.Save(data...) +} + +// BatchUpdateWithTx batch update client instances with transaction. +func (dao *clientDao) BatchUpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, data []*table.Client) error { + if len(data) == 0 { + return nil + } + return tx.Client.WithContext(kit.Ctx).Save(data...) +} + +// ListClientByTuple Query the client list according to multiple fields in +func (dao *clientDao) ListClientByTuple(kit *kit.Kit, data [][]interface{}) ([]*table.Client, error) { + m := dao.genQ.Client + return dao.genQ.Client.WithContext(kit.Ctx). + Select(m.ID, m.BizID, m.AppID, m.UID, m.FirstConnectTime, m.CurrentReleaseID). + Where(m.WithContext(kit.Ctx).Columns(m.BizID, m.AppID, m.UID). + In(field.Values(data))). + Find() +} + +// BatchCreateWithTx batch create client instances with transaction. +func (dao *clientDao) BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, data []*table.Client) error { + // generate an config item id and update to config item. + if len(data) == 0 { + return nil + } + ids, err := dao.idGen.Batch(kit, table.ClientTable, len(data)) + if err != nil { + return err + } + for i, item := range data { + if err := item.ValidateCreate(); err != nil { + return err + } + item.ID = ids[i] + } + + return tx.Client.WithContext(kit.Ctx).Save(data...) +} diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/client_event.go b/bcs-services/bcs-bscp/pkg/dal/dao/client_event.go new file mode 100644 index 0000000000..076b5318f3 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/dal/dao/client_event.go @@ -0,0 +1,96 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dao + +import ( + "gorm.io/gen/field" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" + sfs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/sf-share" +) + +// ClientEvent supplies all the client event related operations. +type ClientEvent interface { + // BatchCreateWithTx batch create client event instances with transaction. + BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, data []*table.ClientEvent) error + // BatchUpdateSelectFieldTx Update selected field + BatchUpdateSelectFieldTx(kit *kit.Kit, tx *gen.QueryTx, messageType sfs.MessagingType, data []*table.ClientEvent) error + // ListClientByTuple Query the client list according to multiple fields in + ListClientByTuple(kit *kit.Kit, data [][]interface{}) ([]*table.ClientEvent, error) +} + +var _ ClientEvent = new(clientEventDao) + +type clientEventDao struct { + genQ *gen.Query + idGen IDGenInterface + auditDao AuditDao +} + +// ListClientByTuple implements ClientEvent. +func (dao *clientEventDao) ListClientByTuple(kit *kit.Kit, data [][]interface{}) ([]*table.ClientEvent, error) { + m := dao.genQ.ClientEvent + return dao.genQ.ClientEvent.WithContext(kit.Ctx). + Select(m.ID, m.BizID, m.AppID, m.UID, m.CursorID, m.ClientMode). + Where(m.WithContext(kit.Ctx).Columns(m.BizID, m.AppID, m.UID, m.CursorID). + In(field.Values(data))). + Find() +} + +// BatchUpdateSelectFieldTx implements ClientEvent. +// 版本变更主要更新下载数和下载文件大小 +// 心跳主要更新下载数和下载文件大小、变更状态 +// 拉取状态主要更新目标和当前版本、最终变更状态、开始变更时间 +func (dao *clientEventDao) BatchUpdateSelectFieldTx(kit *kit.Kit, tx *gen.QueryTx, messageType sfs.MessagingType, + data []*table.ClientEvent) error { + m := dao.genQ.ClientEvent + q := tx.ClientEvent.WithContext(kit.Ctx) + + // 根据类型更新字段 + switch messageType { + case sfs.VersionChangeMessage: + q = q.Omit(m.TotalFileNum, m.TotalFileSize) + case sfs.Heartbeat: + q = q.Omit(m.ClientMode, m.TotalFileNum, m.TotalFileSize, m.TotalSeconds, m.OriginalReleaseID, + m.TargetReleaseID, m.StartTime, m.EndTime, m.ReleaseChangeFailedReason) + case sfs.PullStatus: + q = q.Omit(m.ClientMode, m.TotalSeconds, m.ReleaseChangeFailedReason, m.EndTime, m.DownloadFileNum, + m.DownloadFileSize) + } + + return q.Save(data...) +} + +// BatchCreateWithTx batch create client event instances with transaction. +func (dao *clientEventDao) BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, data []*table.ClientEvent) error { + // generate an config item id and update to config item. + if len(data) == 0 { + return nil + } + ids, err := dao.idGen.Batch(kit, table.ClientEventTable, len(data)) + if err != nil { + return err + } + for i, item := range data { + if err := item.ValidateCreate(); err != nil { + return err + } + item.ID = ids[i] + } + if err := tx.ClientEvent.WithContext(kit.Ctx).Save(data...); err != nil { + return err + } + return nil +} diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/dao.go b/bcs-services/bcs-bscp/pkg/dal/dao/dao.go index d97f7c8e8a..fc4ccb1afc 100644 --- a/bcs-services/bcs-bscp/pkg/dal/dao/dao.go +++ b/bcs-services/bcs-bscp/pkg/dal/dao/dao.go @@ -67,6 +67,8 @@ type Set interface { CredentialScope() CredentialScope Kv() Kv ReleasedKv() ReleasedKv + Client() Client + ClientEvent() ClientEvent } // NewDaoSet create the DAO set instance. @@ -459,3 +461,21 @@ func (s *set) ReleasedKv() ReleasedKv { genQ: s.genQ, } } + +// Client returns the Client scope's DAO +func (s *set) Client() Client { + return &clientDao{ + idGen: s.idGen, + auditDao: s.auditDao, + genQ: s.genQ, + } +} + +// ClientEvent returns the ClientEvent scope's DAO +func (s *set) ClientEvent() ClientEvent { + return &clientEventDao{ + idGen: s.idGen, + auditDao: s.auditDao, + genQ: s.genQ, + } +} diff --git a/bcs-services/bcs-bscp/pkg/dal/gen/client_events.gen.go b/bcs-services/bcs-bscp/pkg/dal/gen/client_events.gen.go new file mode 100644 index 0000000000..4b7a3d66a4 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/dal/gen/client_events.gen.go @@ -0,0 +1,462 @@ +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. + +package gen + +import ( + "context" + + "gorm.io/gorm" + "gorm.io/gorm/clause" + "gorm.io/gorm/schema" + + "gorm.io/gen" + "gorm.io/gen/field" + + "gorm.io/plugin/dbresolver" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" +) + +func newClientEvent(db *gorm.DB, opts ...gen.DOOption) clientEvent { + _clientEvent := clientEvent{} + + _clientEvent.clientEventDo.UseDB(db, opts...) + _clientEvent.clientEventDo.UseModel(&table.ClientEvent{}) + + tableName := _clientEvent.clientEventDo.TableName() + _clientEvent.ALL = field.NewAsterisk(tableName) + _clientEvent.ID = field.NewUint32(tableName, "id") + _clientEvent.ClientID = field.NewUint32(tableName, "client_id") + _clientEvent.CursorID = field.NewString(tableName, "cursor_id") + _clientEvent.UID = field.NewString(tableName, "uid") + _clientEvent.BizID = field.NewUint32(tableName, "biz_id") + _clientEvent.AppID = field.NewUint32(tableName, "app_id") + _clientEvent.ClientMode = field.NewString(tableName, "client_mode") + _clientEvent.OriginalReleaseID = field.NewUint32(tableName, "original_release_id") + _clientEvent.TargetReleaseID = field.NewUint32(tableName, "target_release_id") + _clientEvent.StartTime = field.NewTime(tableName, "start_time") + _clientEvent.EndTime = field.NewTime(tableName, "end_time") + _clientEvent.TotalSeconds = field.NewFloat64(tableName, "total_seconds") + _clientEvent.TotalFileSize = field.NewFloat64(tableName, "total_file_size") + _clientEvent.DownloadFileSize = field.NewFloat64(tableName, "download_file_size") + _clientEvent.TotalFileNum = field.NewUint32(tableName, "total_file_num") + _clientEvent.DownloadFileNum = field.NewUint32(tableName, "download_file_num") + _clientEvent.ReleaseChangeStatus = field.NewString(tableName, "release_change_status") + _clientEvent.ReleaseChangeFailedReason = field.NewString(tableName, "release_change_failed_reason") + _clientEvent.FailedDetailReason = field.NewString(tableName, "failed_detail_reason") + + _clientEvent.fillFieldMap() + + return _clientEvent +} + +type clientEvent struct { + clientEventDo clientEventDo + + ALL field.Asterisk + ID field.Uint32 + ClientID field.Uint32 + CursorID field.String + UID field.String + BizID field.Uint32 + AppID field.Uint32 + ClientMode field.String + OriginalReleaseID field.Uint32 + TargetReleaseID field.Uint32 + StartTime field.Time + EndTime field.Time + TotalSeconds field.Float64 + TotalFileSize field.Float64 + DownloadFileSize field.Float64 + TotalFileNum field.Uint32 + DownloadFileNum field.Uint32 + ReleaseChangeStatus field.String + ReleaseChangeFailedReason field.String + FailedDetailReason field.String + + fieldMap map[string]field.Expr +} + +func (c clientEvent) Table(newTableName string) *clientEvent { + c.clientEventDo.UseTable(newTableName) + return c.updateTableName(newTableName) +} + +func (c clientEvent) As(alias string) *clientEvent { + c.clientEventDo.DO = *(c.clientEventDo.As(alias).(*gen.DO)) + return c.updateTableName(alias) +} + +func (c *clientEvent) updateTableName(table string) *clientEvent { + c.ALL = field.NewAsterisk(table) + c.ID = field.NewUint32(table, "id") + c.ClientID = field.NewUint32(table, "client_id") + c.CursorID = field.NewString(table, "cursor_id") + c.UID = field.NewString(table, "uid") + c.BizID = field.NewUint32(table, "biz_id") + c.AppID = field.NewUint32(table, "app_id") + c.ClientMode = field.NewString(table, "client_mode") + c.OriginalReleaseID = field.NewUint32(table, "original_release_id") + c.TargetReleaseID = field.NewUint32(table, "target_release_id") + c.StartTime = field.NewTime(table, "start_time") + c.EndTime = field.NewTime(table, "end_time") + c.TotalSeconds = field.NewFloat64(table, "total_seconds") + c.TotalFileSize = field.NewFloat64(table, "total_file_size") + c.DownloadFileSize = field.NewFloat64(table, "download_file_size") + c.TotalFileNum = field.NewUint32(table, "total_file_num") + c.DownloadFileNum = field.NewUint32(table, "download_file_num") + c.ReleaseChangeStatus = field.NewString(table, "release_change_status") + c.ReleaseChangeFailedReason = field.NewString(table, "release_change_failed_reason") + c.FailedDetailReason = field.NewString(table, "failed_detail_reason") + + c.fillFieldMap() + + return c +} + +func (c *clientEvent) WithContext(ctx context.Context) IClientEventDo { + return c.clientEventDo.WithContext(ctx) +} + +func (c clientEvent) TableName() string { return c.clientEventDo.TableName() } + +func (c clientEvent) Alias() string { return c.clientEventDo.Alias() } + +func (c clientEvent) Columns(cols ...field.Expr) gen.Columns { return c.clientEventDo.Columns(cols...) } + +func (c *clientEvent) GetFieldByName(fieldName string) (field.OrderExpr, bool) { + _f, ok := c.fieldMap[fieldName] + if !ok || _f == nil { + return nil, false + } + _oe, ok := _f.(field.OrderExpr) + return _oe, ok +} + +func (c *clientEvent) fillFieldMap() { + c.fieldMap = make(map[string]field.Expr, 19) + c.fieldMap["id"] = c.ID + c.fieldMap["client_id"] = c.ClientID + c.fieldMap["cursor_id"] = c.CursorID + c.fieldMap["uid"] = c.UID + c.fieldMap["biz_id"] = c.BizID + c.fieldMap["app_id"] = c.AppID + c.fieldMap["client_mode"] = c.ClientMode + c.fieldMap["original_release_id"] = c.OriginalReleaseID + c.fieldMap["target_release_id"] = c.TargetReleaseID + c.fieldMap["start_time"] = c.StartTime + c.fieldMap["end_time"] = c.EndTime + c.fieldMap["total_seconds"] = c.TotalSeconds + c.fieldMap["total_file_size"] = c.TotalFileSize + c.fieldMap["download_file_size"] = c.DownloadFileSize + c.fieldMap["total_file_num"] = c.TotalFileNum + c.fieldMap["download_file_num"] = c.DownloadFileNum + c.fieldMap["release_change_status"] = c.ReleaseChangeStatus + c.fieldMap["release_change_failed_reason"] = c.ReleaseChangeFailedReason + c.fieldMap["failed_detail_reason"] = c.FailedDetailReason +} + +func (c clientEvent) clone(db *gorm.DB) clientEvent { + c.clientEventDo.ReplaceConnPool(db.Statement.ConnPool) + return c +} + +func (c clientEvent) replaceDB(db *gorm.DB) clientEvent { + c.clientEventDo.ReplaceDB(db) + return c +} + +type clientEventDo struct{ gen.DO } + +type IClientEventDo interface { + gen.SubQuery + Debug() IClientEventDo + WithContext(ctx context.Context) IClientEventDo + WithResult(fc func(tx gen.Dao)) gen.ResultInfo + ReplaceDB(db *gorm.DB) + ReadDB() IClientEventDo + WriteDB() IClientEventDo + As(alias string) gen.Dao + Session(config *gorm.Session) IClientEventDo + Columns(cols ...field.Expr) gen.Columns + Clauses(conds ...clause.Expression) IClientEventDo + Not(conds ...gen.Condition) IClientEventDo + Or(conds ...gen.Condition) IClientEventDo + Select(conds ...field.Expr) IClientEventDo + Where(conds ...gen.Condition) IClientEventDo + Order(conds ...field.Expr) IClientEventDo + Distinct(cols ...field.Expr) IClientEventDo + Omit(cols ...field.Expr) IClientEventDo + Join(table schema.Tabler, on ...field.Expr) IClientEventDo + LeftJoin(table schema.Tabler, on ...field.Expr) IClientEventDo + RightJoin(table schema.Tabler, on ...field.Expr) IClientEventDo + Group(cols ...field.Expr) IClientEventDo + Having(conds ...gen.Condition) IClientEventDo + Limit(limit int) IClientEventDo + Offset(offset int) IClientEventDo + Count() (count int64, err error) + Scopes(funcs ...func(gen.Dao) gen.Dao) IClientEventDo + Unscoped() IClientEventDo + Create(values ...*table.ClientEvent) error + CreateInBatches(values []*table.ClientEvent, batchSize int) error + Save(values ...*table.ClientEvent) error + First() (*table.ClientEvent, error) + Take() (*table.ClientEvent, error) + Last() (*table.ClientEvent, error) + Find() ([]*table.ClientEvent, error) + FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.ClientEvent, err error) + FindInBatches(result *[]*table.ClientEvent, batchSize int, fc func(tx gen.Dao, batch int) error) error + Pluck(column field.Expr, dest interface{}) error + Delete(...*table.ClientEvent) (info gen.ResultInfo, err error) + Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + Updates(value interface{}) (info gen.ResultInfo, err error) + UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + UpdateColumns(value interface{}) (info gen.ResultInfo, err error) + UpdateFrom(q gen.SubQuery) gen.Dao + Attrs(attrs ...field.AssignExpr) IClientEventDo + Assign(attrs ...field.AssignExpr) IClientEventDo + Joins(fields ...field.RelationField) IClientEventDo + Preload(fields ...field.RelationField) IClientEventDo + FirstOrInit() (*table.ClientEvent, error) + FirstOrCreate() (*table.ClientEvent, error) + FindByPage(offset int, limit int) (result []*table.ClientEvent, count int64, err error) + ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Scan(result interface{}) (err error) + Returning(value interface{}, columns ...string) IClientEventDo + UnderlyingDB() *gorm.DB + schema.Tabler +} + +func (c clientEventDo) Debug() IClientEventDo { + return c.withDO(c.DO.Debug()) +} + +func (c clientEventDo) WithContext(ctx context.Context) IClientEventDo { + return c.withDO(c.DO.WithContext(ctx)) +} + +func (c clientEventDo) ReadDB() IClientEventDo { + return c.Clauses(dbresolver.Read) +} + +func (c clientEventDo) WriteDB() IClientEventDo { + return c.Clauses(dbresolver.Write) +} + +func (c clientEventDo) Session(config *gorm.Session) IClientEventDo { + return c.withDO(c.DO.Session(config)) +} + +func (c clientEventDo) Clauses(conds ...clause.Expression) IClientEventDo { + return c.withDO(c.DO.Clauses(conds...)) +} + +func (c clientEventDo) Returning(value interface{}, columns ...string) IClientEventDo { + return c.withDO(c.DO.Returning(value, columns...)) +} + +func (c clientEventDo) Not(conds ...gen.Condition) IClientEventDo { + return c.withDO(c.DO.Not(conds...)) +} + +func (c clientEventDo) Or(conds ...gen.Condition) IClientEventDo { + return c.withDO(c.DO.Or(conds...)) +} + +func (c clientEventDo) Select(conds ...field.Expr) IClientEventDo { + return c.withDO(c.DO.Select(conds...)) +} + +func (c clientEventDo) Where(conds ...gen.Condition) IClientEventDo { + return c.withDO(c.DO.Where(conds...)) +} + +func (c clientEventDo) Order(conds ...field.Expr) IClientEventDo { + return c.withDO(c.DO.Order(conds...)) +} + +func (c clientEventDo) Distinct(cols ...field.Expr) IClientEventDo { + return c.withDO(c.DO.Distinct(cols...)) +} + +func (c clientEventDo) Omit(cols ...field.Expr) IClientEventDo { + return c.withDO(c.DO.Omit(cols...)) +} + +func (c clientEventDo) Join(table schema.Tabler, on ...field.Expr) IClientEventDo { + return c.withDO(c.DO.Join(table, on...)) +} + +func (c clientEventDo) LeftJoin(table schema.Tabler, on ...field.Expr) IClientEventDo { + return c.withDO(c.DO.LeftJoin(table, on...)) +} + +func (c clientEventDo) RightJoin(table schema.Tabler, on ...field.Expr) IClientEventDo { + return c.withDO(c.DO.RightJoin(table, on...)) +} + +func (c clientEventDo) Group(cols ...field.Expr) IClientEventDo { + return c.withDO(c.DO.Group(cols...)) +} + +func (c clientEventDo) Having(conds ...gen.Condition) IClientEventDo { + return c.withDO(c.DO.Having(conds...)) +} + +func (c clientEventDo) Limit(limit int) IClientEventDo { + return c.withDO(c.DO.Limit(limit)) +} + +func (c clientEventDo) Offset(offset int) IClientEventDo { + return c.withDO(c.DO.Offset(offset)) +} + +func (c clientEventDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IClientEventDo { + return c.withDO(c.DO.Scopes(funcs...)) +} + +func (c clientEventDo) Unscoped() IClientEventDo { + return c.withDO(c.DO.Unscoped()) +} + +func (c clientEventDo) Create(values ...*table.ClientEvent) error { + if len(values) == 0 { + return nil + } + return c.DO.Create(values) +} + +func (c clientEventDo) CreateInBatches(values []*table.ClientEvent, batchSize int) error { + return c.DO.CreateInBatches(values, batchSize) +} + +// Save : !!! underlying implementation is different with GORM +// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values) +func (c clientEventDo) Save(values ...*table.ClientEvent) error { + if len(values) == 0 { + return nil + } + return c.DO.Save(values) +} + +func (c clientEventDo) First() (*table.ClientEvent, error) { + if result, err := c.DO.First(); err != nil { + return nil, err + } else { + return result.(*table.ClientEvent), nil + } +} + +func (c clientEventDo) Take() (*table.ClientEvent, error) { + if result, err := c.DO.Take(); err != nil { + return nil, err + } else { + return result.(*table.ClientEvent), nil + } +} + +func (c clientEventDo) Last() (*table.ClientEvent, error) { + if result, err := c.DO.Last(); err != nil { + return nil, err + } else { + return result.(*table.ClientEvent), nil + } +} + +func (c clientEventDo) Find() ([]*table.ClientEvent, error) { + result, err := c.DO.Find() + return result.([]*table.ClientEvent), err +} + +func (c clientEventDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.ClientEvent, err error) { + buf := make([]*table.ClientEvent, 0, batchSize) + err = c.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error { + defer func() { results = append(results, buf...) }() + return fc(tx, batch) + }) + return results, err +} + +func (c clientEventDo) FindInBatches(result *[]*table.ClientEvent, batchSize int, fc func(tx gen.Dao, batch int) error) error { + return c.DO.FindInBatches(result, batchSize, fc) +} + +func (c clientEventDo) Attrs(attrs ...field.AssignExpr) IClientEventDo { + return c.withDO(c.DO.Attrs(attrs...)) +} + +func (c clientEventDo) Assign(attrs ...field.AssignExpr) IClientEventDo { + return c.withDO(c.DO.Assign(attrs...)) +} + +func (c clientEventDo) Joins(fields ...field.RelationField) IClientEventDo { + for _, _f := range fields { + c = *c.withDO(c.DO.Joins(_f)) + } + return &c +} + +func (c clientEventDo) Preload(fields ...field.RelationField) IClientEventDo { + for _, _f := range fields { + c = *c.withDO(c.DO.Preload(_f)) + } + return &c +} + +func (c clientEventDo) FirstOrInit() (*table.ClientEvent, error) { + if result, err := c.DO.FirstOrInit(); err != nil { + return nil, err + } else { + return result.(*table.ClientEvent), nil + } +} + +func (c clientEventDo) FirstOrCreate() (*table.ClientEvent, error) { + if result, err := c.DO.FirstOrCreate(); err != nil { + return nil, err + } else { + return result.(*table.ClientEvent), nil + } +} + +func (c clientEventDo) FindByPage(offset int, limit int) (result []*table.ClientEvent, count int64, err error) { + result, err = c.Offset(offset).Limit(limit).Find() + if err != nil { + return + } + + if size := len(result); 0 < limit && 0 < size && size < limit { + count = int64(size + offset) + return + } + + count, err = c.Offset(-1).Limit(-1).Count() + return +} + +func (c clientEventDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) { + count, err = c.Count() + if err != nil { + return + } + + err = c.Offset(offset).Limit(limit).Scan(result) + return +} + +func (c clientEventDo) Scan(result interface{}) (err error) { + return c.DO.Scan(result) +} + +func (c clientEventDo) Delete(models ...*table.ClientEvent) (result gen.ResultInfo, err error) { + return c.DO.Delete(models) +} + +func (c *clientEventDo) withDO(do gen.Dao) *clientEventDo { + c.DO = *do.(*gen.DO) + return c +} diff --git a/bcs-services/bcs-bscp/pkg/dal/gen/clients.gen.go b/bcs-services/bcs-bscp/pkg/dal/gen/clients.gen.go new file mode 100644 index 0000000000..96a2bccc38 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/dal/gen/clients.gen.go @@ -0,0 +1,464 @@ +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. +// Code generated by gorm.io/gen. DO NOT EDIT. + +package gen + +import ( + "context" + + "gorm.io/gorm" + "gorm.io/gorm/clause" + "gorm.io/gorm/schema" + + "gorm.io/gen" + "gorm.io/gen/field" + + "gorm.io/plugin/dbresolver" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" +) + +func newClient(db *gorm.DB, opts ...gen.DOOption) client { + _client := client{} + + _client.clientDo.UseDB(db, opts...) + _client.clientDo.UseModel(&table.Client{}) + + tableName := _client.clientDo.TableName() + _client.ALL = field.NewAsterisk(tableName) + _client.ID = field.NewUint32(tableName, "id") + _client.UID = field.NewString(tableName, "uid") + _client.BizID = field.NewUint32(tableName, "biz_id") + _client.AppID = field.NewUint32(tableName, "app_id") + _client.ClientVersion = field.NewString(tableName, "client_version") + _client.Ip = field.NewString(tableName, "ip") + _client.Labels = field.NewString(tableName, "labels") + _client.Annotations = field.NewString(tableName, "annotations") + _client.FirstConnectTime = field.NewTime(tableName, "first_connect_time") + _client.LastHeartbeatTime = field.NewTime(tableName, "last_heartbeat_time") + _client.OnlineStatus = field.NewString(tableName, "online_status") + _client.CpuUsage = field.NewFloat64(tableName, "cpu_usage") + _client.CpuMaxUsage = field.NewFloat64(tableName, "cpu_max_usage") + _client.MemoryUsage = field.NewUint64(tableName, "memory_usage") + _client.MemoryMaxUsage = field.NewUint64(tableName, "memory_max_usage") + _client.CurrentReleaseID = field.NewUint32(tableName, "current_release_id") + _client.TargetReleaseID = field.NewUint32(tableName, "target_release_id") + _client.ReleaseChangeStatus = field.NewString(tableName, "release_change_status") + _client.ReleaseChangeFailedReason = field.NewString(tableName, "release_change_failed_reason") + _client.FailedDetailReason = field.NewString(tableName, "failed_detail_reason") + + _client.fillFieldMap() + + return _client +} + +type client struct { + clientDo clientDo + + ALL field.Asterisk + ID field.Uint32 + UID field.String + BizID field.Uint32 + AppID field.Uint32 + ClientVersion field.String + Ip field.String + Labels field.String + Annotations field.String + FirstConnectTime field.Time + LastHeartbeatTime field.Time + OnlineStatus field.String + CpuUsage field.Float64 + CpuMaxUsage field.Float64 + MemoryUsage field.Uint64 + MemoryMaxUsage field.Uint64 + CurrentReleaseID field.Uint32 + TargetReleaseID field.Uint32 + ReleaseChangeStatus field.String + ReleaseChangeFailedReason field.String + FailedDetailReason field.String + + fieldMap map[string]field.Expr +} + +func (c client) Table(newTableName string) *client { + c.clientDo.UseTable(newTableName) + return c.updateTableName(newTableName) +} + +func (c client) As(alias string) *client { + c.clientDo.DO = *(c.clientDo.As(alias).(*gen.DO)) + return c.updateTableName(alias) +} + +func (c *client) updateTableName(table string) *client { + c.ALL = field.NewAsterisk(table) + c.ID = field.NewUint32(table, "id") + c.UID = field.NewString(table, "uid") + c.BizID = field.NewUint32(table, "biz_id") + c.AppID = field.NewUint32(table, "app_id") + c.ClientVersion = field.NewString(table, "client_version") + c.Ip = field.NewString(table, "ip") + c.Labels = field.NewString(table, "labels") + c.Annotations = field.NewString(table, "annotations") + c.FirstConnectTime = field.NewTime(table, "first_connect_time") + c.LastHeartbeatTime = field.NewTime(table, "last_heartbeat_time") + c.OnlineStatus = field.NewString(table, "online_status") + c.CpuUsage = field.NewFloat64(table, "cpu_usage") + c.CpuMaxUsage = field.NewFloat64(table, "cpu_max_usage") + c.MemoryUsage = field.NewUint64(table, "memory_usage") + c.MemoryMaxUsage = field.NewUint64(table, "memory_max_usage") + c.CurrentReleaseID = field.NewUint32(table, "current_release_id") + c.TargetReleaseID = field.NewUint32(table, "target_release_id") + c.ReleaseChangeStatus = field.NewString(table, "release_change_status") + c.ReleaseChangeFailedReason = field.NewString(table, "release_change_failed_reason") + c.FailedDetailReason = field.NewString(table, "failed_detail_reason") + + c.fillFieldMap() + + return c +} + +func (c *client) WithContext(ctx context.Context) IClientDo { return c.clientDo.WithContext(ctx) } + +func (c client) TableName() string { return c.clientDo.TableName() } + +func (c client) Alias() string { return c.clientDo.Alias() } + +func (c client) Columns(cols ...field.Expr) gen.Columns { return c.clientDo.Columns(cols...) } + +func (c *client) GetFieldByName(fieldName string) (field.OrderExpr, bool) { + _f, ok := c.fieldMap[fieldName] + if !ok || _f == nil { + return nil, false + } + _oe, ok := _f.(field.OrderExpr) + return _oe, ok +} + +func (c *client) fillFieldMap() { + c.fieldMap = make(map[string]field.Expr, 20) + c.fieldMap["id"] = c.ID + c.fieldMap["uid"] = c.UID + c.fieldMap["biz_id"] = c.BizID + c.fieldMap["app_id"] = c.AppID + c.fieldMap["client_version"] = c.ClientVersion + c.fieldMap["ip"] = c.Ip + c.fieldMap["labels"] = c.Labels + c.fieldMap["annotations"] = c.Annotations + c.fieldMap["first_connect_time"] = c.FirstConnectTime + c.fieldMap["last_heartbeat_time"] = c.LastHeartbeatTime + c.fieldMap["online_status"] = c.OnlineStatus + c.fieldMap["cpu_usage"] = c.CpuUsage + c.fieldMap["cpu_max_usage"] = c.CpuMaxUsage + c.fieldMap["memory_usage"] = c.MemoryUsage + c.fieldMap["memory_max_usage"] = c.MemoryMaxUsage + c.fieldMap["current_release_id"] = c.CurrentReleaseID + c.fieldMap["target_release_id"] = c.TargetReleaseID + c.fieldMap["release_change_status"] = c.ReleaseChangeStatus + c.fieldMap["release_change_failed_reason"] = c.ReleaseChangeFailedReason + c.fieldMap["failed_detail_reason"] = c.FailedDetailReason +} + +func (c client) clone(db *gorm.DB) client { + c.clientDo.ReplaceConnPool(db.Statement.ConnPool) + return c +} + +func (c client) replaceDB(db *gorm.DB) client { + c.clientDo.ReplaceDB(db) + return c +} + +type clientDo struct{ gen.DO } + +type IClientDo interface { + gen.SubQuery + Debug() IClientDo + WithContext(ctx context.Context) IClientDo + WithResult(fc func(tx gen.Dao)) gen.ResultInfo + ReplaceDB(db *gorm.DB) + ReadDB() IClientDo + WriteDB() IClientDo + As(alias string) gen.Dao + Session(config *gorm.Session) IClientDo + Columns(cols ...field.Expr) gen.Columns + Clauses(conds ...clause.Expression) IClientDo + Not(conds ...gen.Condition) IClientDo + Or(conds ...gen.Condition) IClientDo + Select(conds ...field.Expr) IClientDo + Where(conds ...gen.Condition) IClientDo + Order(conds ...field.Expr) IClientDo + Distinct(cols ...field.Expr) IClientDo + Omit(cols ...field.Expr) IClientDo + Join(table schema.Tabler, on ...field.Expr) IClientDo + LeftJoin(table schema.Tabler, on ...field.Expr) IClientDo + RightJoin(table schema.Tabler, on ...field.Expr) IClientDo + Group(cols ...field.Expr) IClientDo + Having(conds ...gen.Condition) IClientDo + Limit(limit int) IClientDo + Offset(offset int) IClientDo + Count() (count int64, err error) + Scopes(funcs ...func(gen.Dao) gen.Dao) IClientDo + Unscoped() IClientDo + Create(values ...*table.Client) error + CreateInBatches(values []*table.Client, batchSize int) error + Save(values ...*table.Client) error + First() (*table.Client, error) + Take() (*table.Client, error) + Last() (*table.Client, error) + Find() ([]*table.Client, error) + FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.Client, err error) + FindInBatches(result *[]*table.Client, batchSize int, fc func(tx gen.Dao, batch int) error) error + Pluck(column field.Expr, dest interface{}) error + Delete(...*table.Client) (info gen.ResultInfo, err error) + Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + Updates(value interface{}) (info gen.ResultInfo, err error) + UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error) + UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error) + UpdateColumns(value interface{}) (info gen.ResultInfo, err error) + UpdateFrom(q gen.SubQuery) gen.Dao + Attrs(attrs ...field.AssignExpr) IClientDo + Assign(attrs ...field.AssignExpr) IClientDo + Joins(fields ...field.RelationField) IClientDo + Preload(fields ...field.RelationField) IClientDo + FirstOrInit() (*table.Client, error) + FirstOrCreate() (*table.Client, error) + FindByPage(offset int, limit int) (result []*table.Client, count int64, err error) + ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Scan(result interface{}) (err error) + Returning(value interface{}, columns ...string) IClientDo + UnderlyingDB() *gorm.DB + schema.Tabler +} + +func (c clientDo) Debug() IClientDo { + return c.withDO(c.DO.Debug()) +} + +func (c clientDo) WithContext(ctx context.Context) IClientDo { + return c.withDO(c.DO.WithContext(ctx)) +} + +func (c clientDo) ReadDB() IClientDo { + return c.Clauses(dbresolver.Read) +} + +func (c clientDo) WriteDB() IClientDo { + return c.Clauses(dbresolver.Write) +} + +func (c clientDo) Session(config *gorm.Session) IClientDo { + return c.withDO(c.DO.Session(config)) +} + +func (c clientDo) Clauses(conds ...clause.Expression) IClientDo { + return c.withDO(c.DO.Clauses(conds...)) +} + +func (c clientDo) Returning(value interface{}, columns ...string) IClientDo { + return c.withDO(c.DO.Returning(value, columns...)) +} + +func (c clientDo) Not(conds ...gen.Condition) IClientDo { + return c.withDO(c.DO.Not(conds...)) +} + +func (c clientDo) Or(conds ...gen.Condition) IClientDo { + return c.withDO(c.DO.Or(conds...)) +} + +func (c clientDo) Select(conds ...field.Expr) IClientDo { + return c.withDO(c.DO.Select(conds...)) +} + +func (c clientDo) Where(conds ...gen.Condition) IClientDo { + return c.withDO(c.DO.Where(conds...)) +} + +func (c clientDo) Order(conds ...field.Expr) IClientDo { + return c.withDO(c.DO.Order(conds...)) +} + +func (c clientDo) Distinct(cols ...field.Expr) IClientDo { + return c.withDO(c.DO.Distinct(cols...)) +} + +func (c clientDo) Omit(cols ...field.Expr) IClientDo { + return c.withDO(c.DO.Omit(cols...)) +} + +func (c clientDo) Join(table schema.Tabler, on ...field.Expr) IClientDo { + return c.withDO(c.DO.Join(table, on...)) +} + +func (c clientDo) LeftJoin(table schema.Tabler, on ...field.Expr) IClientDo { + return c.withDO(c.DO.LeftJoin(table, on...)) +} + +func (c clientDo) RightJoin(table schema.Tabler, on ...field.Expr) IClientDo { + return c.withDO(c.DO.RightJoin(table, on...)) +} + +func (c clientDo) Group(cols ...field.Expr) IClientDo { + return c.withDO(c.DO.Group(cols...)) +} + +func (c clientDo) Having(conds ...gen.Condition) IClientDo { + return c.withDO(c.DO.Having(conds...)) +} + +func (c clientDo) Limit(limit int) IClientDo { + return c.withDO(c.DO.Limit(limit)) +} + +func (c clientDo) Offset(offset int) IClientDo { + return c.withDO(c.DO.Offset(offset)) +} + +func (c clientDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IClientDo { + return c.withDO(c.DO.Scopes(funcs...)) +} + +func (c clientDo) Unscoped() IClientDo { + return c.withDO(c.DO.Unscoped()) +} + +func (c clientDo) Create(values ...*table.Client) error { + if len(values) == 0 { + return nil + } + return c.DO.Create(values) +} + +func (c clientDo) CreateInBatches(values []*table.Client, batchSize int) error { + return c.DO.CreateInBatches(values, batchSize) +} + +// Save : !!! underlying implementation is different with GORM +// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values) +func (c clientDo) Save(values ...*table.Client) error { + if len(values) == 0 { + return nil + } + return c.DO.Save(values) +} + +func (c clientDo) First() (*table.Client, error) { + if result, err := c.DO.First(); err != nil { + return nil, err + } else { + return result.(*table.Client), nil + } +} + +func (c clientDo) Take() (*table.Client, error) { + if result, err := c.DO.Take(); err != nil { + return nil, err + } else { + return result.(*table.Client), nil + } +} + +func (c clientDo) Last() (*table.Client, error) { + if result, err := c.DO.Last(); err != nil { + return nil, err + } else { + return result.(*table.Client), nil + } +} + +func (c clientDo) Find() ([]*table.Client, error) { + result, err := c.DO.Find() + return result.([]*table.Client), err +} + +func (c clientDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*table.Client, err error) { + buf := make([]*table.Client, 0, batchSize) + err = c.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error { + defer func() { results = append(results, buf...) }() + return fc(tx, batch) + }) + return results, err +} + +func (c clientDo) FindInBatches(result *[]*table.Client, batchSize int, fc func(tx gen.Dao, batch int) error) error { + return c.DO.FindInBatches(result, batchSize, fc) +} + +func (c clientDo) Attrs(attrs ...field.AssignExpr) IClientDo { + return c.withDO(c.DO.Attrs(attrs...)) +} + +func (c clientDo) Assign(attrs ...field.AssignExpr) IClientDo { + return c.withDO(c.DO.Assign(attrs...)) +} + +func (c clientDo) Joins(fields ...field.RelationField) IClientDo { + for _, _f := range fields { + c = *c.withDO(c.DO.Joins(_f)) + } + return &c +} + +func (c clientDo) Preload(fields ...field.RelationField) IClientDo { + for _, _f := range fields { + c = *c.withDO(c.DO.Preload(_f)) + } + return &c +} + +func (c clientDo) FirstOrInit() (*table.Client, error) { + if result, err := c.DO.FirstOrInit(); err != nil { + return nil, err + } else { + return result.(*table.Client), nil + } +} + +func (c clientDo) FirstOrCreate() (*table.Client, error) { + if result, err := c.DO.FirstOrCreate(); err != nil { + return nil, err + } else { + return result.(*table.Client), nil + } +} + +func (c clientDo) FindByPage(offset int, limit int) (result []*table.Client, count int64, err error) { + result, err = c.Offset(offset).Limit(limit).Find() + if err != nil { + return + } + + if size := len(result); 0 < limit && 0 < size && size < limit { + count = int64(size + offset) + return + } + + count, err = c.Offset(-1).Limit(-1).Count() + return +} + +func (c clientDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) { + count, err = c.Count() + if err != nil { + return + } + + err = c.Offset(offset).Limit(limit).Scan(result) + return +} + +func (c clientDo) Scan(result interface{}) (err error) { + return c.DO.Scan(result) +} + +func (c clientDo) Delete(models ...*table.Client) (result gen.ResultInfo, err error) { + return c.DO.Delete(models) +} + +func (c *clientDo) withDO(do gen.Dao) *clientDo { + c.DO = *do.(*gen.DO) + return c +} diff --git a/bcs-services/bcs-bscp/pkg/dal/gen/gen.go b/bcs-services/bcs-bscp/pkg/dal/gen/gen.go index 1ce00b235c..d76a5df05b 100644 --- a/bcs-services/bcs-bscp/pkg/dal/gen/gen.go +++ b/bcs-services/bcs-bscp/pkg/dal/gen/gen.go @@ -22,6 +22,8 @@ var ( AppTemplateVariable *appTemplateVariable ArchivedApp *archivedApp Audit *audit + Client *client + ClientEvent *clientEvent Commit *commit ConfigItem *configItem Content *content @@ -57,6 +59,8 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) { AppTemplateVariable = &Q.AppTemplateVariable ArchivedApp = &Q.ArchivedApp Audit = &Q.Audit + Client = &Q.Client + ClientEvent = &Q.ClientEvent Commit = &Q.Commit ConfigItem = &Q.ConfigItem Content = &Q.Content @@ -93,6 +97,8 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query { AppTemplateVariable: newAppTemplateVariable(db, opts...), ArchivedApp: newArchivedApp(db, opts...), Audit: newAudit(db, opts...), + Client: newClient(db, opts...), + ClientEvent: newClientEvent(db, opts...), Commit: newCommit(db, opts...), ConfigItem: newConfigItem(db, opts...), Content: newContent(db, opts...), @@ -130,6 +136,8 @@ type Query struct { AppTemplateVariable appTemplateVariable ArchivedApp archivedApp Audit audit + Client client + ClientEvent clientEvent Commit commit ConfigItem configItem Content content @@ -168,6 +176,8 @@ func (q *Query) clone(db *gorm.DB) *Query { AppTemplateVariable: q.AppTemplateVariable.clone(db), ArchivedApp: q.ArchivedApp.clone(db), Audit: q.Audit.clone(db), + Client: q.Client.clone(db), + ClientEvent: q.ClientEvent.clone(db), Commit: q.Commit.clone(db), ConfigItem: q.ConfigItem.clone(db), Content: q.Content.clone(db), @@ -213,6 +223,8 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query { AppTemplateVariable: q.AppTemplateVariable.replaceDB(db), ArchivedApp: q.ArchivedApp.replaceDB(db), Audit: q.Audit.replaceDB(db), + Client: q.Client.replaceDB(db), + ClientEvent: q.ClientEvent.replaceDB(db), Commit: q.Commit.replaceDB(db), ConfigItem: q.ConfigItem.replaceDB(db), Content: q.Content.replaceDB(db), @@ -248,6 +260,8 @@ type queryCtx struct { AppTemplateVariable IAppTemplateVariableDo ArchivedApp IArchivedAppDo Audit IAuditDo + Client IClientDo + ClientEvent IClientEventDo Commit ICommitDo ConfigItem IConfigItemDo Content IContentDo @@ -283,6 +297,8 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx { AppTemplateVariable: q.AppTemplateVariable.WithContext(ctx), ArchivedApp: q.ArchivedApp.WithContext(ctx), Audit: q.Audit.WithContext(ctx), + Client: q.Client.WithContext(ctx), + ClientEvent: q.ClientEvent.WithContext(ctx), Commit: q.Commit.WithContext(ctx), ConfigItem: q.ConfigItem.WithContext(ctx), Content: q.Content.WithContext(ctx), diff --git a/bcs-services/bcs-bscp/pkg/dal/table/client.go b/bcs-services/bcs-bscp/pkg/dal/table/client.go new file mode 100644 index 0000000000..937c6297f0 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/dal/table/client.go @@ -0,0 +1,215 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package table + +import ( + "errors" + "fmt" + "time" +) + +// Client is a client +type Client struct { + ID uint32 `gorm:"column:id" json:"id"` + Attachment *ClientAttachment `json:"attachment" gorm:"embedded"` + Spec *ClientSpec `json:"spec" gorm:"embedded"` +} + +// ClientSpec is a client spec +type ClientSpec struct { + ClientVersion string `gorm:"column:client_version" json:"client_version"` + Ip string `gorm:"column:ip" json:"ip"` + Labels string `gorm:"column:labels" json:"labels"` + Annotations string `gorm:"column:annotations" json:"annotations"` + FirstConnectTime time.Time `gorm:"column:first_connect_time" json:"first_connect_time"` + LastHeartbeatTime time.Time `gorm:"column:last_heartbeat_time" json:"last_heartbeat_time"` + OnlineStatus OnlineStatus `gorm:"column:online_status" json:"online_status"` + Resource Resource `json:"resource" gorm:"embedded"` + CurrentReleaseID uint32 `gorm:"column:current_release_id" json:"current_release_id"` + TargetReleaseID uint32 `gorm:"column:target_release_id" json:"target_release_id"` + ReleaseChangeStatus Status `gorm:"column:release_change_status" json:"release_change_status"` + ReleaseChangeFailedReason FailedReason `gorm:"column:release_change_failed_reason" json:"release_change_failed_reason"` + FailedDetailReason string `gorm:"column:failed_detail_reason" json:"failed_detail_reason"` +} + +// ClientAttachment is a client attachment +type ClientAttachment struct { + UID string `gorm:"column:uid" json:"uid"` + BizID uint32 `db:"biz_id" gorm:"column:biz_id"` + AppID uint32 `db:"app_id" gorm:"column:app_id"` +} + +// Resource resource information +type Resource struct { + CpuUsage float64 `gorm:"column:cpu_usage" json:"cpu_usage"` + CpuMaxUsage float64 `gorm:"column:cpu_max_usage" json:"cpu_max_usage"` + MemoryUsage uint64 `gorm:"column:memory_usage" json:"memory_usage"` + MemoryMaxUsage uint64 `gorm:"column:memory_max_usage" json:"memory_max_usage"` +} + +// TableName is the app's database table name. +func (c *Client) TableName() string { + return "clients" +} + +// AppID AuditRes interface +func (c *Client) AppID() uint32 { + return c.ID +} + +// ResID AuditRes interface +func (c *Client) ResID() uint32 { + return c.ID +} + +// ResType AuditRes interface +func (c *Client) ResType() string { + return "client" +} + +// ValidateCreate validate app's info when created. +func (c *Client) ValidateCreate() error { + if c.ID != 0 { + return errors.New("id can not be set") + } + + if c.Spec == nil { + return errors.New("spec not set") + } + + if err := c.Spec.ValidateCreate(); err != nil { + return err + } + + if c.Attachment == nil { + return errors.New("attachment not set") + } + + if err := c.Attachment.ValidateCreate(); err != nil { + return err + } + + return nil +} + +// ValidateCreate validate client spec when it is created. +func (c *ClientSpec) ValidateCreate() error { + if c.ClientVersion == "" { + return errors.New("client version not set") + } + + if c.Ip == "" { + return errors.New("ip not set") + } + + if c.LastHeartbeatTime.String() == "" { + return errors.New("last heartbeat time not set") + } + + if err := c.OnlineStatus.Validate(); err != nil { + return err + } + + return nil +} + +// ValidateCreate validate client attachment when it is created. +func (c *ClientAttachment) ValidateCreate() error { + if c.BizID <= 0 { + return errors.New("biz id not set") + } + + if c.UID == "" { + return errors.New("uid not set") + } + + if c.AppID <= 0 { + return errors.New("app id not set") + } + + return nil +} + +// Status define the status structure +type Status string + +const ( + // Success xxx + Success Status = "Success" + // Failed xxx + Failed Status = "Failed" + // Processing xxx + Processing Status = "Processing" + // Skip xxx + Skip Status = "Skip" +) + +// Validate the version change status is valid or not. +func (rs Status) Validate() error { + switch rs { + case Success: + case Failed: + case Processing: + case Skip: + } + + return nil +} + +// OnlineStatus define the online status structure +type OnlineStatus string + +const ( + // Online xxx + Online OnlineStatus = "online" + // Offline xxx + Offline OnlineStatus = "offline" +) + +// Validate the online status is valid or not. +func (os OnlineStatus) Validate() error { + switch os { + case Online: + case Offline: + default: + return fmt.Errorf("unknown %s sidecar online status", os) + } + + return nil +} + +// FailedReason define the failure cause structure +type FailedReason string + +const ( + // PreHookFailed pre hook failed + PreHookFailed FailedReason = "PreHookFailed" + // PostHookFailed post hook failed + PostHookFailed FailedReason = "PostHookFailed" + // DownloadFailed download failed + DownloadFailed FailedReason = "DownloadFailed" + // SkipFailed Skip failed + SkipFailed FailedReason = "SkipFailed" +) + +// Validate the failed reason is valid or not. +func (fr FailedReason) Validate() error { + switch fr { + case PreHookFailed: + case PostHookFailed: + case DownloadFailed: + case SkipFailed: + } + + return nil +} diff --git a/bcs-services/bcs-bscp/pkg/dal/table/client_event.go b/bcs-services/bcs-bscp/pkg/dal/table/client_event.go new file mode 100644 index 0000000000..7e41cc5fc9 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/dal/table/client_event.go @@ -0,0 +1,162 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package table + +import ( + "errors" + "fmt" + "time" +) + +// ClientEvent is a client event +type ClientEvent struct { + ID uint32 `gorm:"column:id" json:"id"` + Attachment *ClientEventAttachment `json:"attachment" gorm:"embedded"` + Spec *ClientEventSpec `json:"spec" gorm:"embedded"` +} + +// ClientEventSpec is a client event spec +type ClientEventSpec struct { + OriginalReleaseID uint32 `gorm:"column:original_release_id" json:"original_release_id"` + TargetReleaseID uint32 `gorm:"column:target_release_id" json:"target_release_id"` + StartTime time.Time `gorm:"column:start_time" json:"start_time"` + EndTime time.Time `gorm:"column:end_time" json:"end_time"` + TotalSeconds float64 `gorm:"column:total_seconds" json:"total_seconds"` + TotalFileSize float64 `gorm:"column:total_file_size" json:"total_file_size"` + DownloadFileSize float64 `gorm:"column:download_file_size" json:"download_file_size"` + TotalFileNum uint32 `gorm:"column:total_file_num" json:"total_file_num"` + DownloadFileNum uint32 `gorm:"column:download_file_num" json:"download_file_num"` + ReleaseChangeStatus Status `gorm:"column:release_change_status" json:"release_change_status"` + ReleaseChangeFailedReason FailedReason `gorm:"column:release_change_failed_reason" json:"release_change_failed_reason"` + FailedDetailReason string `gorm:"column:failed_detail_reason" json:"failed_detail_reason"` +} + +// ClientEventAttachment is a client event attachment +type ClientEventAttachment struct { + ClientID uint32 `gorm:"column:client_id" json:"client_id"` + CursorID string `gorm:"column:cursor_id" json:"cursor_id"` + UID string `gorm:"column:uid" json:"uid"` + BizID uint32 `db:"biz_id" gorm:"column:biz_id"` + AppID uint32 `db:"app_id" gorm:"column:app_id"` + ClientMode ClientMode `gorm:"column:client_mode" json:"client_mode"` +} + +// ClientMode define the client mode structure +type ClientMode string + +const ( + // Pull xxx + Pull ClientMode = "Pull" + // Watch xxx + Watch ClientMode = "Watch" +) + +// Validate the client mode is valid or not. +func (cm ClientMode) Validate() error { + switch cm { + case Pull: + case Watch: + default: + return fmt.Errorf("unknown %s sidecar client mode", cm) + } + + return nil +} + +// TableName is the app's database table name. +func (c *ClientEvent) TableName() string { + return "client_events" +} + +// AppID AuditRes interface +func (c *ClientEvent) AppID() uint32 { + return c.ID +} + +// ResID AuditRes interface +func (c *ClientEvent) ResID() uint32 { + return c.ID +} + +// ResType AuditRes interface +func (c *ClientEvent) ResType() string { + return "client_event" +} + +// ValidateCreate validate group is valid or not when create it. +func (c *ClientEvent) ValidateCreate() error { + + if c.ID > 0 { + return errors.New("id should not be set") + } + + if c.Spec == nil { + return errors.New("spec not set") + } + + if err := c.Spec.ValidateCreate(); err != nil { + return err + } + + if c.Attachment == nil { + return errors.New("attachment not set") + } + + if err := c.Attachment.ValidateCreate(); err != nil { + return err + } + + return nil +} + +// ValidateCreate validate client event spec when it is created. +func (c *ClientEventSpec) ValidateCreate() error { + // if c.TargetReleaseID <= 0 { + // return errors.New("target release id not set") + // } + + if c.StartTime.String() == "" { + return errors.New("start time not set") + } + + if c.EndTime.String() == "" { + return errors.New("end time not set") + } + + return nil +} + +// ValidateCreate validate client event attachment when it is created. +func (c *ClientEventAttachment) ValidateCreate() error { + if c.BizID <= 0 { + return errors.New("biz id not set") + } + + if c.UID == "" { + return errors.New("uid not set") + } + + if c.AppID <= 0 { + return errors.New("app id not set") + } + + if c.ClientID <= 0 { + return errors.New("client id not set") + } + + if err := c.ClientMode.Validate(); err != nil { + return err + } + + return nil +} diff --git a/bcs-services/bcs-bscp/pkg/dal/table/table.go b/bcs-services/bcs-bscp/pkg/dal/table/table.go index 70690260ef..83bff273d3 100644 --- a/bcs-services/bcs-bscp/pkg/dal/table/table.go +++ b/bcs-services/bcs-bscp/pkg/dal/table/table.go @@ -247,6 +247,10 @@ const ( TemplateRevisionsTable Name = "template_revisions" // ReleasedKvTable is released kv table's name ReleasedKvTable Name = "released_kvs" + // ClientTable is clients table's name + ClientTable Name = "clients" + // ClientEventTable is client_events table's name + ClientEventTable Name = "client_events" ) // RevisionColumns defines all the Revision table's columns. diff --git a/bcs-services/bcs-bscp/pkg/protocol/auth-server/auth_server.pb.go b/bcs-services/bcs-bscp/pkg/protocol/auth-server/auth_server.pb.go index ec52e9a43f..7ca3c740f4 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/auth-server/auth_server.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/auth-server/auth_server.pb.go @@ -2383,7 +2383,7 @@ var file_auth_server_proto_rawDesc = []byte{ 0x65, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, + 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x61, 0x75, 0x74, 0x68, diff --git a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.go b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.go index 8d80b22dae..a3485eeea0 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.go @@ -1347,6 +1347,107 @@ func (x *GetReleasedKvValueReq) GetKey() string { return "" } +type SetClientMetricReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` +} + +func (x *SetClientMetricReq) Reset() { + *x = SetClientMetricReq{} + if protoimpl.UnsafeEnabled { + mi := &file_cache_service_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetClientMetricReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetClientMetricReq) ProtoMessage() {} + +func (x *SetClientMetricReq) ProtoReflect() protoreflect.Message { + mi := &file_cache_service_proto_msgTypes[24] + 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 SetClientMetricReq.ProtoReflect.Descriptor instead. +func (*SetClientMetricReq) Descriptor() ([]byte, []int) { + return file_cache_service_proto_rawDescGZIP(), []int{24} +} + +func (x *SetClientMetricReq) GetBizId() uint32 { + if x != nil { + return x.BizId + } + return 0 +} + +func (x *SetClientMetricReq) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *SetClientMetricReq) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +type SetClientMetricResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SetClientMetricResp) Reset() { + *x = SetClientMetricResp{} + if protoimpl.UnsafeEnabled { + mi := &file_cache_service_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetClientMetricResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetClientMetricResp) ProtoMessage() {} + +func (x *SetClientMetricResp) ProtoReflect() protoreflect.Message { + mi := &file_cache_service_proto_msgTypes[25] + 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 SetClientMetricResp.ProtoReflect.Descriptor instead. +func (*SetClientMetricResp) Descriptor() ([]byte, []int) { + return file_cache_service_proto_rawDescGZIP(), []int{25} +} + var File_cache_service_proto protoreflect.FileDescriptor var file_cache_service_proto_rawDesc = []byte{ @@ -1479,103 +1580,119 @@ var file_cache_service_proto_rawDesc = []byte{ 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x32, - 0x8d, 0x0b, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x6c, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x22, 0x39, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x12, 0x6b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x70, - 0x70, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, - 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x33, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, - 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0d, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, + 0x5c, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x15, 0x0a, + 0x13, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x52, 0x65, 0x73, 0x70, 0x32, 0x99, 0x0c, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x6c, + 0x0a, 0x08, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x49, 0x44, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x12, 0x6b, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, + 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x61, 0x70, 0x70, + 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x33, 0x0a, 0x08, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x73, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x70, + 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x12, + 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x43, 0x49, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, + 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x2f, 0x63, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0x76, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x48, + 0x6f, 0x6f, 0x6b, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2f, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, - 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, - 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, - 0x63, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2f, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x18, + 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x69, + 0x6e, 0x64, 0x65, 0x72, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x69, 0x6e, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, + 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x72, 0x65, 0x6d, + 0x69, 0x6e, 0x64, 0x65, 0x72, 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, + 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x76, 0x0a, 0x0d, 0x47, 0x65, + 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, + 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x7d, 0x12, 0x3f, 0x0a, 0x0c, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x41, 0x70, 0x70, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x41, + 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x0f, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x65, + 0x6e, 0x63, 0x68, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x52, 0x65, 0x71, + 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x70, 0x0a, + 0x0d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x1e, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, + 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x2f, 0x6b, 0x76, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2f, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x92, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, + 0x76, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, + 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x3a, 0x01, + 0x2a, 0x22, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x2f, 0x6b, 0x76, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2f, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x2f, 0x7b, + 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x89, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, + 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x22, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, - 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x6c, 0x69, 0x73, - 0x74, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, - 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, - 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, - 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x76, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x11, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7d, 0x12, 0x3f, 0x0a, - 0x0c, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x15, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x65, 0x6e, 0x63, - 0x68, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x48, - 0x0a, 0x0f, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, - 0x49, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x43, 0x49, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, - 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, - 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x6b, - 0x76, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x3a, 0x01, 0x2a, 0x22, 0x41, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x6b, 0x76, 0x2f, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x42, - 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, - 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, - 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x3b, 0x70, 0x62, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x42, 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, + 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, + 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3b, 0x70, 0x62, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1590,7 +1707,7 @@ func file_cache_service_proto_rawDescGZIP() []byte { return file_cache_service_proto_rawDescData } -var file_cache_service_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_cache_service_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_cache_service_proto_goTypes = []interface{}{ (*JsonRawResp)(nil), // 0: pbcs.JsonRawResp (*GetAppIDReq)(nil), // 1: pbcs.GetAppIDReq @@ -1616,24 +1733,26 @@ var file_cache_service_proto_goTypes = []interface{}{ (*GetCredentialReq)(nil), // 21: pbcs.GetCredentialReq (*GetReleasedKvReq)(nil), // 22: pbcs.GetReleasedKvReq (*GetReleasedKvValueReq)(nil), // 23: pbcs.GetReleasedKvValueReq - nil, // 24: pbcs.BenchAppMetaResp.MetaEntry - (*app.App)(nil), // 25: pbapp.App - (*app.Reload)(nil), // 26: pbapp.Reload - (*released_ci.ReleasedConfigItem)(nil), // 27: pbrci.ReleasedConfigItem - (*base.BasePage)(nil), // 28: pbbase.BasePage - (*event.EventSpec)(nil), // 29: pbevent.EventSpec - (*event.EventAttachment)(nil), // 30: pbevent.EventAttachment - (*base.EmptyReq)(nil), // 31: pbbase.EmptyReq + (*SetClientMetricReq)(nil), // 24: pbcs.SetClientMetricReq + (*SetClientMetricResp)(nil), // 25: pbcs.SetClientMetricResp + nil, // 26: pbcs.BenchAppMetaResp.MetaEntry + (*app.App)(nil), // 27: pbapp.App + (*app.Reload)(nil), // 28: pbapp.Reload + (*released_ci.ReleasedConfigItem)(nil), // 29: pbrci.ReleasedConfigItem + (*base.BasePage)(nil), // 30: pbbase.BasePage + (*event.EventSpec)(nil), // 31: pbevent.EventSpec + (*event.EventAttachment)(nil), // 32: pbevent.EventAttachment + (*base.EmptyReq)(nil), // 33: pbbase.EmptyReq } var file_cache_service_proto_depIdxs = []int32{ - 25, // 0: pbcs.ListAppsResp.details:type_name -> pbapp.App - 24, // 1: pbcs.BenchAppMetaResp.meta:type_name -> pbcs.BenchAppMetaResp.MetaEntry - 26, // 2: pbcs.AppMeta.reload:type_name -> pbapp.Reload - 27, // 3: pbcs.BenchReleasedCIResp.meta:type_name -> pbrci.ReleasedConfigItem - 28, // 4: pbcs.ListEventsReq.page:type_name -> pbbase.BasePage + 27, // 0: pbcs.ListAppsResp.details:type_name -> pbapp.App + 26, // 1: pbcs.BenchAppMetaResp.meta:type_name -> pbcs.BenchAppMetaResp.MetaEntry + 28, // 2: pbcs.AppMeta.reload:type_name -> pbapp.Reload + 29, // 3: pbcs.BenchReleasedCIResp.meta:type_name -> pbrci.ReleasedConfigItem + 30, // 4: pbcs.ListEventsReq.page:type_name -> pbbase.BasePage 19, // 5: pbcs.ListEventsResp.list:type_name -> pbcs.EventMeta - 29, // 6: pbcs.EventMeta.spec:type_name -> pbevent.EventSpec - 30, // 7: pbcs.EventMeta.attachment:type_name -> pbevent.EventAttachment + 31, // 6: pbcs.EventMeta.spec:type_name -> pbevent.EventSpec + 32, // 7: pbcs.EventMeta.attachment:type_name -> pbevent.EventAttachment 12, // 8: pbcs.BenchAppMetaResp.MetaEntry.value:type_name -> pbcs.AppMeta 1, // 9: pbcs.Cache.GetAppID:input_type -> pbcs.GetAppIDReq 3, // 10: pbcs.Cache.GetAppMeta:input_type -> pbcs.GetAppMetaReq @@ -1641,28 +1760,30 @@ var file_cache_service_proto_depIdxs = []int32{ 6, // 12: pbcs.Cache.GetReleasedCI:input_type -> pbcs.GetReleasedCIReq 7, // 13: pbcs.Cache.GetReleasedHook:input_type -> pbcs.GetReleasedHookReq 8, // 14: pbcs.Cache.ListAppReleasedGroups:input_type -> pbcs.ListAppReleasedGroupsReq - 31, // 15: pbcs.Cache.GetCurrentCursorReminder:input_type -> pbbase.EmptyReq + 33, // 15: pbcs.Cache.GetCurrentCursorReminder:input_type -> pbbase.EmptyReq 17, // 16: pbcs.Cache.ListEventsMeta:input_type -> pbcs.ListEventsReq 21, // 17: pbcs.Cache.GetCredential:input_type -> pbcs.GetCredentialReq 10, // 18: pbcs.Cache.BenchAppMeta:input_type -> pbcs.BenchAppMetaReq 14, // 19: pbcs.Cache.BenchReleasedCI:input_type -> pbcs.BenchReleasedCIReq 22, // 20: pbcs.Cache.GetReleasedKv:input_type -> pbcs.GetReleasedKvReq 23, // 21: pbcs.Cache.GetReleasedKvValue:input_type -> pbcs.GetReleasedKvValueReq - 2, // 22: pbcs.Cache.GetAppID:output_type -> pbcs.GetAppIDResp - 0, // 23: pbcs.Cache.GetAppMeta:output_type -> pbcs.JsonRawResp - 5, // 24: pbcs.Cache.ListApps:output_type -> pbcs.ListAppsResp - 0, // 25: pbcs.Cache.GetReleasedCI:output_type -> pbcs.JsonRawResp - 0, // 26: pbcs.Cache.GetReleasedHook:output_type -> pbcs.JsonRawResp - 0, // 27: pbcs.Cache.ListAppReleasedGroups:output_type -> pbcs.JsonRawResp - 16, // 28: pbcs.Cache.GetCurrentCursorReminder:output_type -> pbcs.CurrentCursorReminderResp - 18, // 29: pbcs.Cache.ListEventsMeta:output_type -> pbcs.ListEventsResp - 0, // 30: pbcs.Cache.GetCredential:output_type -> pbcs.JsonRawResp - 11, // 31: pbcs.Cache.BenchAppMeta:output_type -> pbcs.BenchAppMetaResp - 15, // 32: pbcs.Cache.BenchReleasedCI:output_type -> pbcs.BenchReleasedCIResp - 0, // 33: pbcs.Cache.GetReleasedKv:output_type -> pbcs.JsonRawResp - 0, // 34: pbcs.Cache.GetReleasedKvValue:output_type -> pbcs.JsonRawResp - 22, // [22:35] is the sub-list for method output_type - 9, // [9:22] is the sub-list for method input_type + 24, // 22: pbcs.Cache.SetClientMetric:input_type -> pbcs.SetClientMetricReq + 2, // 23: pbcs.Cache.GetAppID:output_type -> pbcs.GetAppIDResp + 0, // 24: pbcs.Cache.GetAppMeta:output_type -> pbcs.JsonRawResp + 5, // 25: pbcs.Cache.ListApps:output_type -> pbcs.ListAppsResp + 0, // 26: pbcs.Cache.GetReleasedCI:output_type -> pbcs.JsonRawResp + 0, // 27: pbcs.Cache.GetReleasedHook:output_type -> pbcs.JsonRawResp + 0, // 28: pbcs.Cache.ListAppReleasedGroups:output_type -> pbcs.JsonRawResp + 16, // 29: pbcs.Cache.GetCurrentCursorReminder:output_type -> pbcs.CurrentCursorReminderResp + 18, // 30: pbcs.Cache.ListEventsMeta:output_type -> pbcs.ListEventsResp + 0, // 31: pbcs.Cache.GetCredential:output_type -> pbcs.JsonRawResp + 11, // 32: pbcs.Cache.BenchAppMeta:output_type -> pbcs.BenchAppMetaResp + 15, // 33: pbcs.Cache.BenchReleasedCI:output_type -> pbcs.BenchReleasedCIResp + 0, // 34: pbcs.Cache.GetReleasedKv:output_type -> pbcs.JsonRawResp + 0, // 35: pbcs.Cache.GetReleasedKvValue:output_type -> pbcs.JsonRawResp + 25, // 36: pbcs.Cache.SetClientMetric:output_type -> pbcs.SetClientMetricResp + 23, // [23:37] is the sub-list for method output_type + 9, // [9:23] is the sub-list for method input_type 9, // [9:9] is the sub-list for extension type_name 9, // [9:9] is the sub-list for extension extendee 0, // [0:9] is the sub-list for field type_name @@ -1962,6 +2083,30 @@ func file_cache_service_proto_init() { return nil } } + file_cache_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetClientMetricReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cache_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetClientMetricResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1969,7 +2114,7 @@ func file_cache_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cache_service_proto_rawDesc, NumEnums: 0, - NumMessages: 25, + NumMessages: 27, NumExtensions: 0, NumServices: 1, }, diff --git a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.gw.go b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.gw.go index 5270f940fe..2f2d70a7a4 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.gw.go +++ b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.pb.gw.go @@ -714,6 +714,94 @@ func local_request_Cache_GetReleasedKvValue_0(ctx context.Context, marshaler run } +func request_Cache_SetClientMetric_0(ctx context.Context, marshaler runtime.Marshaler, client CacheClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetClientMetricReq + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + msg, err := client.SetClientMetric(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Cache_SetClientMetric_0(ctx context.Context, marshaler runtime.Marshaler, server CacheServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetClientMetricReq + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["biz_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "biz_id") + } + + protoReq.BizId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "biz_id", err) + } + + val, ok = pathParams["app_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "app_id") + } + + protoReq.AppId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "app_id", err) + } + + msg, err := server.SetClientMetric(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterCacheHandlerServer registers the http handlers for service Cache to "mux". // UnaryRPC :call CacheServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -970,6 +1058,31 @@ func RegisterCacheHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("POST", pattern_Cache_SetClientMetric_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbcs.Cache/SetClientMetric", runtime.WithHTTPPathPattern("/api/v1/cache/biz/{biz_id}/apps/{app_id}/client_metric")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Cache_SetClientMetric_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Cache_SetClientMetric_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1231,6 +1344,28 @@ func RegisterCacheHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("POST", pattern_Cache_SetClientMetric_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pbcs.Cache/SetClientMetric", runtime.WithHTTPPathPattern("/api/v1/cache/biz/{biz_id}/apps/{app_id}/client_metric")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Cache_SetClientMetric_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Cache_SetClientMetric_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1254,6 +1389,8 @@ var ( pattern_Cache_GetReleasedKv_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "cache", "kv", "released", "biz_id"}, "")) pattern_Cache_GetReleasedKvValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 2, 8, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "cache", "kv", "released", "biz_id", "apps", "app_id", "key"}, "")) + + pattern_Cache_SetClientMetric_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"api", "v1", "cache", "biz", "biz_id", "apps", "app_id", "client_metric"}, "")) ) var ( @@ -1276,4 +1413,6 @@ var ( forward_Cache_GetReleasedKv_0 = runtime.ForwardResponseMessage forward_Cache_GetReleasedKvValue_0 = runtime.ForwardResponseMessage + + forward_Cache_SetClientMetric_0 = runtime.ForwardResponseMessage ) diff --git a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.proto b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.proto index 1c6da9b468..12332630a5 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.proto +++ b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service.proto @@ -94,6 +94,13 @@ service Cache { body: "*" }; } + + rpc SetClientMetric(SetClientMetricReq) returns (SetClientMetricResp) { + option (google.api.http) = { + post: "/api/v1/cache/biz/{biz_id}/apps/{app_id}/client_metric" + body: "*" + }; + } } message JsonRawResp { @@ -216,4 +223,12 @@ message GetReleasedKvValueReq { uint32 release_id = 2; uint32 app_id = 3; string key = 4; -} \ No newline at end of file +} + +message SetClientMetricReq { + uint32 biz_id = 1; + uint32 app_id = 2; + bytes payload = 3; +} + +message SetClientMetricResp {} \ No newline at end of file diff --git a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service_grpc.pb.go b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service_grpc.pb.go index 461ddef492..ea71c01a21 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service_grpc.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/cache-service/cache_service_grpc.pb.go @@ -33,6 +33,7 @@ const ( Cache_BenchReleasedCI_FullMethodName = "/pbcs.Cache/BenchReleasedCI" Cache_GetReleasedKv_FullMethodName = "/pbcs.Cache/GetReleasedKv" Cache_GetReleasedKvValue_FullMethodName = "/pbcs.Cache/GetReleasedKvValue" + Cache_SetClientMetric_FullMethodName = "/pbcs.Cache/SetClientMetric" ) // CacheClient is the client API for Cache service. @@ -53,6 +54,7 @@ type CacheClient interface { BenchReleasedCI(ctx context.Context, in *BenchReleasedCIReq, opts ...grpc.CallOption) (*BenchReleasedCIResp, error) GetReleasedKv(ctx context.Context, in *GetReleasedKvReq, opts ...grpc.CallOption) (*JsonRawResp, error) GetReleasedKvValue(ctx context.Context, in *GetReleasedKvValueReq, opts ...grpc.CallOption) (*JsonRawResp, error) + SetClientMetric(ctx context.Context, in *SetClientMetricReq, opts ...grpc.CallOption) (*SetClientMetricResp, error) } type cacheClient struct { @@ -180,6 +182,15 @@ func (c *cacheClient) GetReleasedKvValue(ctx context.Context, in *GetReleasedKvV return out, nil } +func (c *cacheClient) SetClientMetric(ctx context.Context, in *SetClientMetricReq, opts ...grpc.CallOption) (*SetClientMetricResp, error) { + out := new(SetClientMetricResp) + err := c.cc.Invoke(ctx, Cache_SetClientMetric_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // CacheServer is the server API for Cache service. // All implementations should embed UnimplementedCacheServer // for forward compatibility @@ -198,6 +209,7 @@ type CacheServer interface { BenchReleasedCI(context.Context, *BenchReleasedCIReq) (*BenchReleasedCIResp, error) GetReleasedKv(context.Context, *GetReleasedKvReq) (*JsonRawResp, error) GetReleasedKvValue(context.Context, *GetReleasedKvValueReq) (*JsonRawResp, error) + SetClientMetric(context.Context, *SetClientMetricReq) (*SetClientMetricResp, error) } // UnimplementedCacheServer should be embedded to have forward compatible implementations. @@ -243,6 +255,9 @@ func (UnimplementedCacheServer) GetReleasedKv(context.Context, *GetReleasedKvReq func (UnimplementedCacheServer) GetReleasedKvValue(context.Context, *GetReleasedKvValueReq) (*JsonRawResp, error) { return nil, status.Errorf(codes.Unimplemented, "method GetReleasedKvValue not implemented") } +func (UnimplementedCacheServer) SetClientMetric(context.Context, *SetClientMetricReq) (*SetClientMetricResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetClientMetric not implemented") +} // UnsafeCacheServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to CacheServer will @@ -489,6 +504,24 @@ func _Cache_GetReleasedKvValue_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Cache_SetClientMetric_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetClientMetricReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CacheServer).SetClientMetric(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Cache_SetClientMetric_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CacheServer).SetClientMetric(ctx, req.(*SetClientMetricReq)) + } + return interceptor(ctx, in, info, handler) +} + // Cache_ServiceDesc is the grpc.ServiceDesc for Cache service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -548,6 +581,10 @@ var Cache_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetReleasedKvValue", Handler: _Cache_GetReleasedKvValue_Handler, }, + { + MethodName: "SetClientMetric", + Handler: _Cache_SetClientMetric_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cache_service.proto", diff --git a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go index b8d916bd43..98028f1f7d 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go @@ -19962,7 +19962,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, - 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, + 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x73, 0x65, 0x72, 0x76, diff --git a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go index 7576c0e290..abaabb692d 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service_grpc.pb.go @@ -222,12 +222,12 @@ type ConfigClient interface { CreateTemplateRevision(ctx context.Context, in *CreateTemplateRevisionReq, opts ...grpc.CallOption) (*CreateTemplateRevisionResp, error) ListTemplateRevisions(ctx context.Context, in *ListTemplateRevisionsReq, opts ...grpc.CallOption) (*ListTemplateRevisionsResp, error) // 暂时不对外开发(删除模版后,服务引用的latest版本会回退到上一个老版本) - // rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns (DeleteTemplateRevisionResp) { - // option (google.api.http) = { - // delete : - // "/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" - // }; - // } + //rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns (DeleteTemplateRevisionResp) { + //option (google.api.http) = { + //delete : + //"/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" + //}; + //} ListTemplateRevisionsByIDs(ctx context.Context, in *ListTemplateRevisionsByIDsReq, opts ...grpc.CallOption) (*ListTemplateRevisionsByIDsResp, error) ListTmplRevisionNamesByTmplIDs(ctx context.Context, in *ListTmplRevisionNamesByTmplIDsReq, opts ...grpc.CallOption) (*ListTmplRevisionNamesByTmplIDsResp, error) CreateTemplateSet(ctx context.Context, in *CreateTemplateSetReq, opts ...grpc.CallOption) (*CreateTemplateSetResp, error) @@ -1498,12 +1498,12 @@ type ConfigServer interface { CreateTemplateRevision(context.Context, *CreateTemplateRevisionReq) (*CreateTemplateRevisionResp, error) ListTemplateRevisions(context.Context, *ListTemplateRevisionsReq) (*ListTemplateRevisionsResp, error) // 暂时不对外开发(删除模版后,服务引用的latest版本会回退到上一个老版本) - // rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns (DeleteTemplateRevisionResp) { - // option (google.api.http) = { - // delete : - // "/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" - // }; - // } + //rpc DeleteTemplateRevision(DeleteTemplateRevisionReq) returns (DeleteTemplateRevisionResp) { + //option (google.api.http) = { + //delete : + //"/api/v1/config/biz/{biz_id}/template_spaces/{template_space_id}/templates/{template_id}/template_revisions/{template_revision_id}" + //}; + //} ListTemplateRevisionsByIDs(context.Context, *ListTemplateRevisionsByIDsReq) (*ListTemplateRevisionsByIDsResp, error) ListTmplRevisionNamesByTmplIDs(context.Context, *ListTmplRevisionNamesByTmplIDsReq) (*ListTmplRevisionNamesByTmplIDsResp, error) CreateTemplateSet(context.Context, *CreateTemplateSetReq) (*CreateTemplateSetResp, error) diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/Makefile b/bcs-services/bcs-bscp/pkg/protocol/core/Makefile index c6ebdaef17..46b175986f 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/Makefile +++ b/bcs-services/bcs-bscp/pkg/protocol/core/Makefile @@ -23,6 +23,8 @@ all: @cd app-template-variable && make @cd kv && make @cd released-kv && make + @cd client && make + @cd client-event && make clean: @cd base && make clean @@ -49,4 +51,5 @@ clean: @cd app-template-variable && make clean @cd kv && make clean @cd released-kv && make clean - + @cd client && make clean + @cd client-event && make clean diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/app-template-binding/app_template_binding.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/app-template-binding/app_template_binding.pb.go index 0d4358566c..e0bd09a10c 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/app-template-binding/app_template_binding.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/app-template-binding/app_template_binding.pb.go @@ -1695,7 +1695,7 @@ var file_app_template_binding_proto_rawDesc = []byte{ 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x66, 0x5a, 0x64, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, - 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, + 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/app-template-variable/app_template_variable.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/app-template-variable/app_template_variable.pb.go index 15363b6d01..bf15d692a7 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/app-template-variable/app_template_variable.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/app-template-variable/app_template_variable.pb.go @@ -377,7 +377,7 @@ var file_app_template_variable_proto_rawDesc = []byte{ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x67, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, + 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/app/app.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/app/app.pb.go index 203ef70273..ee3bd0b258 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/app/app.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/app/app.pb.go @@ -372,7 +372,7 @@ var file_app_proto_rawDesc = []byte{ 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x42, 0x55, 0x5a, 0x53, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, + 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x3b, 0x70, 0x62, 0x61, 0x70, 0x70, 0x62, 0x06, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client-event/Makefile b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/Makefile new file mode 100644 index 0000000000..296efe0f5c --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/Makefile @@ -0,0 +1 @@ +include ../../../../scripts/makefile/core_pb.mk diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client-event/client_event.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/client_event.pb.go new file mode 100644 index 0000000000..ac89d684ff --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/client_event.pb.go @@ -0,0 +1,500 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.25.1 +// source: client_event.proto + +package pbce + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// ClientEvent source resource reference: pkg/dal/table/client-event.go +type ClientEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Spec *ClientEventSpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` + Attachment *ClientEventAttachment `protobuf:"bytes,3,opt,name=attachment,proto3" json:"attachment,omitempty"` + HeartbeatTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=heartbeat_time,json=heartbeatTime,proto3" json:"heartbeat_time,omitempty"` + MessageType string `protobuf:"bytes,5,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` +} + +func (x *ClientEvent) Reset() { + *x = ClientEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_client_event_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientEvent) ProtoMessage() {} + +func (x *ClientEvent) ProtoReflect() protoreflect.Message { + mi := &file_client_event_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientEvent.ProtoReflect.Descriptor instead. +func (*ClientEvent) Descriptor() ([]byte, []int) { + return file_client_event_proto_rawDescGZIP(), []int{0} +} + +func (x *ClientEvent) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClientEvent) GetSpec() *ClientEventSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *ClientEvent) GetAttachment() *ClientEventAttachment { + if x != nil { + return x.Attachment + } + return nil +} + +func (x *ClientEvent) GetHeartbeatTime() *timestamppb.Timestamp { + if x != nil { + return x.HeartbeatTime + } + return nil +} + +func (x *ClientEvent) GetMessageType() string { + if x != nil { + return x.MessageType + } + return "" +} + +// ClientEventSpec source resource reference: pkg/dal/table/client-event.go +type ClientEventSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OriginalReleaseId uint32 `protobuf:"varint,1,opt,name=original_release_id,json=originalReleaseId,proto3" json:"original_release_id,omitempty"` + TargetReleaseId uint32 `protobuf:"varint,2,opt,name=target_release_id,json=targetReleaseId,proto3" json:"target_release_id,omitempty"` + StartTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + EndTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + TotalSeconds float64 `protobuf:"fixed64,5,opt,name=total_seconds,json=totalSeconds,proto3" json:"total_seconds,omitempty"` + TotalFileSize float64 `protobuf:"fixed64,6,opt,name=total_file_size,json=totalFileSize,proto3" json:"total_file_size,omitempty"` + DownloadFileSize float64 `protobuf:"fixed64,7,opt,name=download_file_size,json=downloadFileSize,proto3" json:"download_file_size,omitempty"` + TotalFileNum uint32 `protobuf:"varint,8,opt,name=total_file_num,json=totalFileNum,proto3" json:"total_file_num,omitempty"` + DownloadFileNum uint32 `protobuf:"varint,9,opt,name=download_file_num,json=downloadFileNum,proto3" json:"download_file_num,omitempty"` + ReleaseChangeStatus string `protobuf:"bytes,10,opt,name=release_change_status,json=releaseChangeStatus,proto3" json:"release_change_status,omitempty"` + ReleaseChangeFailedReason string `protobuf:"bytes,11,opt,name=release_change_failed_reason,json=releaseChangeFailedReason,proto3" json:"release_change_failed_reason,omitempty"` + FailedDetailReason string `protobuf:"bytes,12,opt,name=failed_detail_reason,json=failedDetailReason,proto3" json:"failed_detail_reason,omitempty"` +} + +func (x *ClientEventSpec) Reset() { + *x = ClientEventSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_client_event_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientEventSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientEventSpec) ProtoMessage() {} + +func (x *ClientEventSpec) ProtoReflect() protoreflect.Message { + mi := &file_client_event_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientEventSpec.ProtoReflect.Descriptor instead. +func (*ClientEventSpec) Descriptor() ([]byte, []int) { + return file_client_event_proto_rawDescGZIP(), []int{1} +} + +func (x *ClientEventSpec) GetOriginalReleaseId() uint32 { + if x != nil { + return x.OriginalReleaseId + } + return 0 +} + +func (x *ClientEventSpec) GetTargetReleaseId() uint32 { + if x != nil { + return x.TargetReleaseId + } + return 0 +} + +func (x *ClientEventSpec) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *ClientEventSpec) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +func (x *ClientEventSpec) GetTotalSeconds() float64 { + if x != nil { + return x.TotalSeconds + } + return 0 +} + +func (x *ClientEventSpec) GetTotalFileSize() float64 { + if x != nil { + return x.TotalFileSize + } + return 0 +} + +func (x *ClientEventSpec) GetDownloadFileSize() float64 { + if x != nil { + return x.DownloadFileSize + } + return 0 +} + +func (x *ClientEventSpec) GetTotalFileNum() uint32 { + if x != nil { + return x.TotalFileNum + } + return 0 +} + +func (x *ClientEventSpec) GetDownloadFileNum() uint32 { + if x != nil { + return x.DownloadFileNum + } + return 0 +} + +func (x *ClientEventSpec) GetReleaseChangeStatus() string { + if x != nil { + return x.ReleaseChangeStatus + } + return "" +} + +func (x *ClientEventSpec) GetReleaseChangeFailedReason() string { + if x != nil { + return x.ReleaseChangeFailedReason + } + return "" +} + +func (x *ClientEventSpec) GetFailedDetailReason() string { + if x != nil { + return x.FailedDetailReason + } + return "" +} + +// ClientEventAttachment source resource reference: pkg/dal/table/client-event.go +type ClientEventAttachment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClientId uint32 `protobuf:"varint,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` + BizId uint32 `protobuf:"varint,3,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,4,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + ClientMode string `protobuf:"bytes,5,opt,name=client_mode,json=clientMode,proto3" json:"client_mode,omitempty"` + CursorId string `protobuf:"bytes,6,opt,name=cursor_id,json=cursorId,proto3" json:"cursor_id,omitempty"` +} + +func (x *ClientEventAttachment) Reset() { + *x = ClientEventAttachment{} + if protoimpl.UnsafeEnabled { + mi := &file_client_event_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientEventAttachment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientEventAttachment) ProtoMessage() {} + +func (x *ClientEventAttachment) ProtoReflect() protoreflect.Message { + mi := &file_client_event_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientEventAttachment.ProtoReflect.Descriptor instead. +func (*ClientEventAttachment) Descriptor() ([]byte, []int) { + return file_client_event_proto_rawDescGZIP(), []int{2} +} + +func (x *ClientEventAttachment) GetClientId() uint32 { + if x != nil { + return x.ClientId + } + return 0 +} + +func (x *ClientEventAttachment) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *ClientEventAttachment) GetBizId() uint32 { + if x != nil { + return x.BizId + } + return 0 +} + +func (x *ClientEventAttachment) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *ClientEventAttachment) GetClientMode() string { + if x != nil { + return x.ClientMode + } + return "" +} + +func (x *ClientEventAttachment) GetCursorId() string { + if x != nil { + return x.CursorId + } + return "" +} + +var File_client_event_proto protoreflect.FileDescriptor + +var file_client_event_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x70, 0x62, 0x63, 0x65, 0x1a, 0x1a, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xeb, 0x01, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x41, + 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x22, 0xd3, 0x04, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, + 0x4e, 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xb2, 0x01, 0x0a, 0x15, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x49, 0x64, 0x42, + 0x5d, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, + 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, + 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x3b, 0x70, 0x62, 0x63, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_client_event_proto_rawDescOnce sync.Once + file_client_event_proto_rawDescData = file_client_event_proto_rawDesc +) + +func file_client_event_proto_rawDescGZIP() []byte { + file_client_event_proto_rawDescOnce.Do(func() { + file_client_event_proto_rawDescData = protoimpl.X.CompressGZIP(file_client_event_proto_rawDescData) + }) + return file_client_event_proto_rawDescData +} + +var file_client_event_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_client_event_proto_goTypes = []interface{}{ + (*ClientEvent)(nil), // 0: pbce.ClientEvent + (*ClientEventSpec)(nil), // 1: pbce.ClientEventSpec + (*ClientEventAttachment)(nil), // 2: pbce.ClientEventAttachment + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp +} +var file_client_event_proto_depIdxs = []int32{ + 1, // 0: pbce.ClientEvent.spec:type_name -> pbce.ClientEventSpec + 2, // 1: pbce.ClientEvent.attachment:type_name -> pbce.ClientEventAttachment + 3, // 2: pbce.ClientEvent.heartbeat_time:type_name -> google.protobuf.Timestamp + 3, // 3: pbce.ClientEventSpec.start_time:type_name -> google.protobuf.Timestamp + 3, // 4: pbce.ClientEventSpec.end_time:type_name -> google.protobuf.Timestamp + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_client_event_proto_init() } +func file_client_event_proto_init() { + if File_client_event_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_client_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_client_event_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientEventSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_client_event_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientEventAttachment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_client_event_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_client_event_proto_goTypes, + DependencyIndexes: file_client_event_proto_depIdxs, + MessageInfos: file_client_event_proto_msgTypes, + }.Build() + File_client_event_proto = out.File + file_client_event_proto_rawDesc = nil + file_client_event_proto_goTypes = nil + file_client_event_proto_depIdxs = nil +} diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client-event/client_event.proto b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/client_event.proto new file mode 100644 index 0000000000..2d7ac29d2f --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/client_event.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; + +import "google/api/timestamp.proto"; + +package pbce; + +option go_package = "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client-event;pbce"; + +// ClientEvent source resource reference: pkg/dal/table/client-event.go +message ClientEvent { + uint32 id = 1; + ClientEventSpec spec = 2; + ClientEventAttachment attachment = 3; + google.protobuf.Timestamp heartbeat_time = 4; + string message_type = 5; +} + +// ClientEventSpec source resource reference: pkg/dal/table/client-event.go +message ClientEventSpec { + uint32 original_release_id = 1; + uint32 target_release_id = 2; + google.protobuf.Timestamp start_time = 3; + google.protobuf.Timestamp end_time = 4; + double total_seconds = 5; + double total_file_size = 6; + double download_file_size = 7; + uint32 total_file_num = 8; + uint32 download_file_num = 9; + string release_change_status = 10; + string release_change_failed_reason = 11; + string failed_detail_reason = 12; +} + +// ClientEventAttachment source resource reference: pkg/dal/table/client-event.go +message ClientEventAttachment { + uint32 client_id = 1; + string uid = 2; + uint32 biz_id = 3; + uint32 app_id = 4; + string client_mode = 5; + string cursor_id = 6; +} diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client-event/convert.go b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/convert.go new file mode 100644 index 0000000000..fe5f83efa1 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client-event/convert.go @@ -0,0 +1,56 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package pbce xxx +package pbce + +import ( + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" +) + +// ClientEventSpec convert pb ClientEventSpec to table ClientEventSpec +func (c *ClientEventSpec) ClientEventSpec() *table.ClientEventSpec { + if c == nil { + return nil + } + + return &table.ClientEventSpec{ + OriginalReleaseID: c.OriginalReleaseId, + TargetReleaseID: c.TargetReleaseId, + StartTime: c.StartTime.AsTime(), + EndTime: c.EndTime.AsTime(), + TotalSeconds: c.TotalSeconds, + TotalFileSize: c.TotalFileSize, + DownloadFileSize: c.DownloadFileSize, + TotalFileNum: c.TotalFileNum, + DownloadFileNum: c.DownloadFileNum, + ReleaseChangeStatus: table.Status(c.ReleaseChangeStatus), + ReleaseChangeFailedReason: table.FailedReason(c.ReleaseChangeFailedReason), + FailedDetailReason: c.FailedDetailReason, + } +} + +// ClientEventAttachment convert pb ClientEventAttachment to table ClientEventAttachment +func (c *ClientEventAttachment) ClientEventAttachment() *table.ClientEventAttachment { + if c == nil { + return nil + } + + return &table.ClientEventAttachment{ + ClientID: c.ClientId, + CursorID: c.CursorId, + UID: c.Uid, + BizID: c.BizId, + AppID: c.AppId, + ClientMode: table.ClientMode(c.ClientMode), + } +} diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client/Makefile b/bcs-services/bcs-bscp/pkg/protocol/core/client/Makefile new file mode 100644 index 0000000000..296efe0f5c --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client/Makefile @@ -0,0 +1 @@ +include ../../../../scripts/makefile/core_pb.mk diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client/client.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/client/client.pb.go new file mode 100644 index 0000000000..917978510f --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client/client.pb.go @@ -0,0 +1,562 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.25.1 +// source: client.proto + +package pbclient + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Client source resource reference: pkg/dal/table/client.go +type Client struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Spec *ClientSpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` + Attachment *ClientAttachment `protobuf:"bytes,3,opt,name=attachment,proto3" json:"attachment,omitempty"` + MessageType string `protobuf:"bytes,4,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` +} + +func (x *Client) Reset() { + *x = Client{} + if protoimpl.UnsafeEnabled { + mi := &file_client_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Client) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Client) ProtoMessage() {} + +func (x *Client) ProtoReflect() protoreflect.Message { + mi := &file_client_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Client.ProtoReflect.Descriptor instead. +func (*Client) Descriptor() ([]byte, []int) { + return file_client_proto_rawDescGZIP(), []int{0} +} + +func (x *Client) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Client) GetSpec() *ClientSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *Client) GetAttachment() *ClientAttachment { + if x != nil { + return x.Attachment + } + return nil +} + +func (x *Client) GetMessageType() string { + if x != nil { + return x.MessageType + } + return "" +} + +// ClientSpec source resource reference: pkg/dal/table/client.go +type ClientSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClientVersion string `protobuf:"bytes,1,opt,name=client_version,json=clientVersion,proto3" json:"client_version,omitempty"` + Ip string `protobuf:"bytes,2,opt,name=ip,proto3" json:"ip,omitempty"` + Labels string `protobuf:"bytes,3,opt,name=labels,proto3" json:"labels,omitempty"` + Annotations string `protobuf:"bytes,4,opt,name=annotations,proto3" json:"annotations,omitempty"` + FirstConnectTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=first_connect_time,json=firstConnectTime,proto3" json:"first_connect_time,omitempty"` + LastHeartbeatTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_heartbeat_time,json=lastHeartbeatTime,proto3" json:"last_heartbeat_time,omitempty"` + OnlineStatus string `protobuf:"bytes,7,opt,name=online_status,json=onlineStatus,proto3" json:"online_status,omitempty"` + Resource *ClientResource `protobuf:"bytes,8,opt,name=resource,proto3" json:"resource,omitempty"` + CurrentReleaseId uint32 `protobuf:"varint,9,opt,name=current_release_id,json=currentReleaseId,proto3" json:"current_release_id,omitempty"` + TargetReleaseId uint32 `protobuf:"varint,10,opt,name=target_release_id,json=targetReleaseId,proto3" json:"target_release_id,omitempty"` + ReleaseChangeStatus string `protobuf:"bytes,11,opt,name=release_change_status,json=releaseChangeStatus,proto3" json:"release_change_status,omitempty"` + ReleaseChangeFailedReason string `protobuf:"bytes,12,opt,name=release_change_failed_reason,json=releaseChangeFailedReason,proto3" json:"release_change_failed_reason,omitempty"` + FailedDetailReason string `protobuf:"bytes,13,opt,name=failed_detail_reason,json=failedDetailReason,proto3" json:"failed_detail_reason,omitempty"` +} + +func (x *ClientSpec) Reset() { + *x = ClientSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_client_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientSpec) ProtoMessage() {} + +func (x *ClientSpec) ProtoReflect() protoreflect.Message { + mi := &file_client_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientSpec.ProtoReflect.Descriptor instead. +func (*ClientSpec) Descriptor() ([]byte, []int) { + return file_client_proto_rawDescGZIP(), []int{1} +} + +func (x *ClientSpec) GetClientVersion() string { + if x != nil { + return x.ClientVersion + } + return "" +} + +func (x *ClientSpec) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *ClientSpec) GetLabels() string { + if x != nil { + return x.Labels + } + return "" +} + +func (x *ClientSpec) GetAnnotations() string { + if x != nil { + return x.Annotations + } + return "" +} + +func (x *ClientSpec) GetFirstConnectTime() *timestamppb.Timestamp { + if x != nil { + return x.FirstConnectTime + } + return nil +} + +func (x *ClientSpec) GetLastHeartbeatTime() *timestamppb.Timestamp { + if x != nil { + return x.LastHeartbeatTime + } + return nil +} + +func (x *ClientSpec) GetOnlineStatus() string { + if x != nil { + return x.OnlineStatus + } + return "" +} + +func (x *ClientSpec) GetResource() *ClientResource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ClientSpec) GetCurrentReleaseId() uint32 { + if x != nil { + return x.CurrentReleaseId + } + return 0 +} + +func (x *ClientSpec) GetTargetReleaseId() uint32 { + if x != nil { + return x.TargetReleaseId + } + return 0 +} + +func (x *ClientSpec) GetReleaseChangeStatus() string { + if x != nil { + return x.ReleaseChangeStatus + } + return "" +} + +func (x *ClientSpec) GetReleaseChangeFailedReason() string { + if x != nil { + return x.ReleaseChangeFailedReason + } + return "" +} + +func (x *ClientSpec) GetFailedDetailReason() string { + if x != nil { + return x.FailedDetailReason + } + return "" +} + +// ClientAttachment source resource reference: pkg/dal/table/client.go +type ClientAttachment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"` + BizId uint32 `protobuf:"varint,2,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,3,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` +} + +func (x *ClientAttachment) Reset() { + *x = ClientAttachment{} + if protoimpl.UnsafeEnabled { + mi := &file_client_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientAttachment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientAttachment) ProtoMessage() {} + +func (x *ClientAttachment) ProtoReflect() protoreflect.Message { + mi := &file_client_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientAttachment.ProtoReflect.Descriptor instead. +func (*ClientAttachment) Descriptor() ([]byte, []int) { + return file_client_proto_rawDescGZIP(), []int{2} +} + +func (x *ClientAttachment) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *ClientAttachment) GetBizId() uint32 { + if x != nil { + return x.BizId + } + return 0 +} + +func (x *ClientAttachment) GetAppId() uint32 { + if x != nil { + return x.AppId + } + return 0 +} + +// ClientResource source resource reference: pkg/dal/table/client.go +type ClientResource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CpuUsage float64 `protobuf:"fixed64,1,opt,name=cpu_usage,json=cpuUsage,proto3" json:"cpu_usage,omitempty"` + CpuMaxUsage float64 `protobuf:"fixed64,2,opt,name=cpu_max_usage,json=cpuMaxUsage,proto3" json:"cpu_max_usage,omitempty"` + MemoryUsage uint64 `protobuf:"varint,3,opt,name=memory_usage,json=memoryUsage,proto3" json:"memory_usage,omitempty"` + MemoryMaxUsage uint64 `protobuf:"varint,4,opt,name=memory_max_usage,json=memoryMaxUsage,proto3" json:"memory_max_usage,omitempty"` +} + +func (x *ClientResource) Reset() { + *x = ClientResource{} + if protoimpl.UnsafeEnabled { + mi := &file_client_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientResource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientResource) ProtoMessage() {} + +func (x *ClientResource) ProtoReflect() protoreflect.Message { + mi := &file_client_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientResource.ProtoReflect.Descriptor instead. +func (*ClientResource) Descriptor() ([]byte, []int) { + return file_client_proto_rawDescGZIP(), []int{3} +} + +func (x *ClientResource) GetCpuUsage() float64 { + if x != nil { + return x.CpuUsage + } + return 0 +} + +func (x *ClientResource) GetCpuMaxUsage() float64 { + if x != nil { + return x.CpuMaxUsage + } + return 0 +} + +func (x *ClientResource) GetMemoryUsage() uint64 { + if x != nil { + return x.MemoryUsage + } + return 0 +} + +func (x *ClientResource) GetMemoryMaxUsage() uint64 { + if x != nil { + return x.MemoryMaxUsage + } + return 0 +} + +var File_client_proto protoreflect.FileDescriptor + +var file_client_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, + 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x1a, 0x1a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa1, 0x01, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xef, 0x04, 0x0a, 0x0a, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, 0x16, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x12, 0x66, 0x69, 0x72, 0x73, + 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x10, 0x66, 0x69, 0x72, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, + 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x6c, 0x61, 0x73, + 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x10, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x9e, + 0x01, 0x0a, 0x0e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, + 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x4d, 0x61, 0x78, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, + 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, + 0x5b, 0x5a, 0x59, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, + 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, + 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x3b, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_client_proto_rawDescOnce sync.Once + file_client_proto_rawDescData = file_client_proto_rawDesc +) + +func file_client_proto_rawDescGZIP() []byte { + file_client_proto_rawDescOnce.Do(func() { + file_client_proto_rawDescData = protoimpl.X.CompressGZIP(file_client_proto_rawDescData) + }) + return file_client_proto_rawDescData +} + +var file_client_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_client_proto_goTypes = []interface{}{ + (*Client)(nil), // 0: pbclient.Client + (*ClientSpec)(nil), // 1: pbclient.ClientSpec + (*ClientAttachment)(nil), // 2: pbclient.ClientAttachment + (*ClientResource)(nil), // 3: pbclient.ClientResource + (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp +} +var file_client_proto_depIdxs = []int32{ + 1, // 0: pbclient.Client.spec:type_name -> pbclient.ClientSpec + 2, // 1: pbclient.Client.attachment:type_name -> pbclient.ClientAttachment + 4, // 2: pbclient.ClientSpec.first_connect_time:type_name -> google.protobuf.Timestamp + 4, // 3: pbclient.ClientSpec.last_heartbeat_time:type_name -> google.protobuf.Timestamp + 3, // 4: pbclient.ClientSpec.resource:type_name -> pbclient.ClientResource + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_client_proto_init() } +func file_client_proto_init() { + if File_client_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_client_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Client); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_client_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_client_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientAttachment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_client_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientResource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_client_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_client_proto_goTypes, + DependencyIndexes: file_client_proto_depIdxs, + MessageInfos: file_client_proto_msgTypes, + }.Build() + File_client_proto = out.File + file_client_proto_rawDesc = nil + file_client_proto_goTypes = nil + file_client_proto_depIdxs = nil +} diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client/client.proto b/bcs-services/bcs-bscp/pkg/protocol/core/client/client.proto new file mode 100644 index 0000000000..54a6e5a514 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client/client.proto @@ -0,0 +1,47 @@ +syntax = "proto3"; + +import "google/api/timestamp.proto"; + +package pbclient; + +option go_package = "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client;pbclient"; + +// Client source resource reference: pkg/dal/table/client.go +message Client { + uint32 id = 1; + ClientSpec spec = 2; + ClientAttachment attachment = 3; + string message_type = 4; +} + +// ClientSpec source resource reference: pkg/dal/table/client.go +message ClientSpec { + string client_version = 1; + string ip = 2; + string labels = 3; + string annotations = 4; + google.protobuf.Timestamp first_connect_time = 5; + google.protobuf.Timestamp last_heartbeat_time = 6; + string online_status = 7; + ClientResource resource = 8; + uint32 current_release_id = 9; + uint32 target_release_id = 10; + string release_change_status = 11; + string release_change_failed_reason = 12; + string failed_detail_reason = 13; +} + +// ClientAttachment source resource reference: pkg/dal/table/client.go +message ClientAttachment { + string uid = 1; + uint32 biz_id = 2; + uint32 app_id = 3; +} + +// ClientResource source resource reference: pkg/dal/table/client.go +message ClientResource { + double cpu_usage = 1; + double cpu_max_usage = 2; + uint64 memory_usage = 3; + uint64 memory_max_usage = 4; +} \ No newline at end of file diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/client/convert.go b/bcs-services/bcs-bscp/pkg/protocol/core/client/convert.go new file mode 100644 index 0000000000..10ac85394a --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/protocol/core/client/convert.go @@ -0,0 +1,70 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package pbclient xxx +package pbclient + +import ( + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" +) + +// ClientSpec convert pb ClientSpec to table ClientSpec +func (c *ClientSpec) ClientSpec() *table.ClientSpec { + if c == nil { + return nil + } + resource := table.Resource{} + if c.Resource != nil { + resource = table.Resource{ + CpuMaxUsage: c.Resource.CpuMaxUsage, + MemoryMaxUsage: c.Resource.MemoryMaxUsage, + CpuUsage: c.Resource.CpuUsage, + MemoryUsage: c.Resource.MemoryUsage, + } + } + return &table.ClientSpec{ + ClientVersion: c.ClientVersion, + Ip: c.Ip, + Labels: c.Labels, + Annotations: c.Annotations, + FirstConnectTime: c.FirstConnectTime.AsTime(), + LastHeartbeatTime: c.LastHeartbeatTime.AsTime(), + OnlineStatus: table.OnlineStatus(c.OnlineStatus), + Resource: resource, + CurrentReleaseID: c.CurrentReleaseId, + TargetReleaseID: c.TargetReleaseId, + ReleaseChangeStatus: table.Status(c.ReleaseChangeStatus), + ReleaseChangeFailedReason: table.FailedReason(c.ReleaseChangeFailedReason), + FailedDetailReason: c.FailedDetailReason, + } +} + +// ClientAttachment convert pb ClientAttachment to table ClientAttachment +func (c *ClientAttachment) ClientAttachment() *table.ClientAttachment { + return &table.ClientAttachment{ + UID: c.Uid, + BizID: c.BizId, + AppID: c.AppId, + } +} + +// PbClientAttachment convert table ClientAttachment to pb ClientAttachment +func PbClientAttachment(attachment *table.ClientAttachment) *ClientAttachment { // nolint + if attachment == nil { + return nil + } + return &ClientAttachment{ + Uid: attachment.UID, + BizId: attachment.BizID, + AppId: attachment.AppID, + } +} diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/commit/commit.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/commit/commit.pb.go index af7435f279..8c7e7335ee 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/commit/commit.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/commit/commit.pb.go @@ -330,7 +330,7 @@ var file_commit_proto_rawDesc = []byte{ 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x42, 0x5b, 0x5a, 0x59, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, - 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, + 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x3b, 0x70, 0x62, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/config-item/config_item.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/config-item/config_item.pb.go index 351f253507..859913c1a4 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/config-item/config_item.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/config-item/config_item.pb.go @@ -448,7 +448,7 @@ var file_config_item_proto_rawDesc = []byte{ 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x42, 0x5c, 0x5a, 0x5a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, - 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, + 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/content/content.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/content/content.pb.go index be1d7ba1dc..f104fd4551 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/content/content.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/content/content.pb.go @@ -326,7 +326,7 @@ var file_content_proto_rawDesc = []byte{ 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x42, 0x5d, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, + 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/credential-scope/credential-scope.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/credential-scope/credential-scope.pb.go index c78095d8ed..7ebb8c0920 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/credential-scope/credential-scope.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/credential-scope/credential-scope.pb.go @@ -300,7 +300,7 @@ var file_credential_scope_proto_rawDesc = []byte{ 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x62, 0x5a, 0x60, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/credential/credential.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/credential/credential.pb.go index 314014d5bb..705a2a4fbb 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/credential/credential.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/credential/credential.pb.go @@ -312,7 +312,7 @@ var file_credential_proto_rawDesc = []byte{ 0x63, 0x6f, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x63, 0x5a, 0x61, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, - 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, + 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/group/group.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/group/group.pb.go index 8296b06be7..1208f0fb52 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/group/group.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/group/group.pb.go @@ -264,7 +264,7 @@ var file_group_proto_rawDesc = []byte{ 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x42, 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/hook-revision/hook_revision.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/hook-revision/hook_revision.pb.go index 7e23bd5267..ff0911a30f 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/hook-revision/hook_revision.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/hook-revision/hook_revision.pb.go @@ -252,7 +252,7 @@ var file_hook_revision_proto_rawDesc = []byte{ 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x42, 0x5e, 0x5a, 0x5c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2d, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/hook/hook.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/hook/hook.pb.go index 6960acabc8..1b5e834c62 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/hook/hook.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/hook/hook.pb.go @@ -386,7 +386,7 @@ var file_hook_proto_rawDesc = []byte{ 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, + 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go index 9e1ee29583..5d8d489b17 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go @@ -248,7 +248,7 @@ var file_kvs_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x42, 0x53, 0x5a, 0x51, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, + 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/release/release.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/release/release.pb.go index b080db1227..a9722a885b 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/release/release.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/release/release.pb.go @@ -441,7 +441,7 @@ var file_release_proto_rawDesc = []byte{ 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x42, 0x5d, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, - 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, + 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x3b, 0x70, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/released_ci.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/released_ci.pb.go index bf3a2be084..144a301292 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/released_ci.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/released-ci/released_ci.pb.go @@ -162,7 +162,7 @@ var file_released_ci_proto_rawDesc = []byte{ 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x5d, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, + 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/released-kv/released_kv.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/released-kv/released_kv.pb.go index 60400e2cc3..a814fdd037 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/released-kv/released_kv.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/released-kv/released_kv.pb.go @@ -124,7 +124,7 @@ var file_released_kv_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x5d, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, - 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, + 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, 0x65, 0x6c, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/template-revision/template_revision.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/template-revision/template_revision.pb.go index 00072fb859..8d69f9e9e5 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/template-revision/template_revision.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/template-revision/template_revision.pb.go @@ -480,7 +480,7 @@ var file_template_revision_proto_rawDesc = []byte{ 0x28, 0x09, 0x52, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x42, 0x62, 0x5a, 0x60, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, - 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, + 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x72, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/template-set/template_set.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/template-set/template_set.pb.go index 61b9a27ec3..d585ceeccb 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/template-set/template_set.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/template-set/template_set.pb.go @@ -496,7 +496,7 @@ var file_template_set_proto_rawDesc = []byte{ 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x5f, 0x5a, 0x5d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/template-space/template_space.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/template-space/template_space.pb.go index a5b137d580..9d9e7ab421 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/template-space/template_space.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/template-space/template_space.pb.go @@ -224,7 +224,7 @@ var file_template_space_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x42, 0x5f, 0x5a, 0x5d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, - 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, + 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/template-variable/template_variable.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/template-variable/template_variable.pb.go index 1ccdfa9093..b50062fb56 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/template-variable/template_variable.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/template-variable/template_variable.pb.go @@ -244,7 +244,7 @@ var file_template_variable_proto_rawDesc = []byte{ 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x42, 0x62, 0x5a, 0x60, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, + 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/template/template.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/template/template.pb.go index c2ee6ee581..3b394a3aa7 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/template/template.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/template/template.pb.go @@ -243,7 +243,7 @@ var file_template_proto_rawDesc = []byte{ 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, 0x5f, 0x5a, 0x5d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, diff --git a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go index bbde33d4bf..c7ea568173 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.pb.go @@ -11,6 +11,8 @@ import ( app_template_binding "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/app-template-binding" app_template_variable "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/app-template-variable" base "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" + client "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client" + client_event "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client-event" commit "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/commit" config_item "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/config-item" content "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/content" @@ -13334,6 +13336,99 @@ func (x *UnDeleteKvReq) GetAttachment() *kv.KvAttachment { return nil } +type BatchUpsertClientMetricsReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClientItems []*client.Client `protobuf:"bytes,1,rep,name=client_items,json=clientItems,proto3" json:"client_items,omitempty"` + ClientEventItems []*client_event.ClientEvent `protobuf:"bytes,2,rep,name=client_event_items,json=clientEventItems,proto3" json:"client_event_items,omitempty"` +} + +func (x *BatchUpsertClientMetricsReq) Reset() { + *x = BatchUpsertClientMetricsReq{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[212] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchUpsertClientMetricsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchUpsertClientMetricsReq) ProtoMessage() {} + +func (x *BatchUpsertClientMetricsReq) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[212] + 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 BatchUpsertClientMetricsReq.ProtoReflect.Descriptor instead. +func (*BatchUpsertClientMetricsReq) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{212} +} + +func (x *BatchUpsertClientMetricsReq) GetClientItems() []*client.Client { + if x != nil { + return x.ClientItems + } + return nil +} + +func (x *BatchUpsertClientMetricsReq) GetClientEventItems() []*client_event.ClientEvent { + if x != nil { + return x.ClientEventItems + } + return nil +} + +type BatchUpsertClientMetricsResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *BatchUpsertClientMetricsResp) Reset() { + *x = BatchUpsertClientMetricsResp{} + if protoimpl.UnsafeEnabled { + mi := &file_data_service_proto_msgTypes[213] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchUpsertClientMetricsResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchUpsertClientMetricsResp) ProtoMessage() {} + +func (x *BatchUpsertClientMetricsResp) ProtoReflect() protoreflect.Message { + mi := &file_data_service_proto_msgTypes[213] + 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 BatchUpsertClientMetricsResp.ProtoReflect.Descriptor instead. +func (*BatchUpsertClientMetricsResp) Descriptor() ([]byte, []int) { + return file_data_service_proto_rawDescGZIP(), []int{213} +} + type BatchUpsertConfigItemsReq_ConfigItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -13347,7 +13442,7 @@ type BatchUpsertConfigItemsReq_ConfigItem struct { func (x *BatchUpsertConfigItemsReq_ConfigItem) Reset() { *x = BatchUpsertConfigItemsReq_ConfigItem{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[212] + mi := &file_data_service_proto_msgTypes[214] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13360,7 +13455,7 @@ func (x *BatchUpsertConfigItemsReq_ConfigItem) String() string { func (*BatchUpsertConfigItemsReq_ConfigItem) ProtoMessage() {} func (x *BatchUpsertConfigItemsReq_ConfigItem) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[212] + mi := &file_data_service_proto_msgTypes[214] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13411,7 +13506,7 @@ type ListConfigItemByTupleReq_Item struct { func (x *ListConfigItemByTupleReq_Item) Reset() { *x = ListConfigItemByTupleReq_Item{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[213] + mi := &file_data_service_proto_msgTypes[215] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13424,7 +13519,7 @@ func (x *ListConfigItemByTupleReq_Item) String() string { func (*ListConfigItemByTupleReq_Item) ProtoMessage() {} func (x *ListConfigItemByTupleReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[213] + mi := &file_data_service_proto_msgTypes[215] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13479,7 +13574,7 @@ type GetHookInfoSpec_Releases struct { func (x *GetHookInfoSpec_Releases) Reset() { *x = GetHookInfoSpec_Releases{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[214] + mi := &file_data_service_proto_msgTypes[216] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13492,7 +13587,7 @@ func (x *GetHookInfoSpec_Releases) String() string { func (*GetHookInfoSpec_Releases) ProtoMessage() {} func (x *GetHookInfoSpec_Releases) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[214] + mi := &file_data_service_proto_msgTypes[216] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13529,7 +13624,7 @@ type ListHooksResp_Detail struct { func (x *ListHooksResp_Detail) Reset() { *x = ListHooksResp_Detail{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[215] + mi := &file_data_service_proto_msgTypes[217] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13542,7 +13637,7 @@ func (x *ListHooksResp_Detail) String() string { func (*ListHooksResp_Detail) ProtoMessage() {} func (x *ListHooksResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[215] + mi := &file_data_service_proto_msgTypes[217] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13604,7 +13699,7 @@ type ListHookReferencesResp_Detail struct { func (x *ListHookReferencesResp_Detail) Reset() { *x = ListHookReferencesResp_Detail{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[216] + mi := &file_data_service_proto_msgTypes[218] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13617,7 +13712,7 @@ func (x *ListHookReferencesResp_Detail) String() string { func (*ListHookReferencesResp_Detail) ProtoMessage() {} func (x *ListHookReferencesResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[216] + mi := &file_data_service_proto_msgTypes[218] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13702,7 +13797,7 @@ type ListHookRevisionsResp_ListHookRevisionsData struct { func (x *ListHookRevisionsResp_ListHookRevisionsData) Reset() { *x = ListHookRevisionsResp_ListHookRevisionsData{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[217] + mi := &file_data_service_proto_msgTypes[219] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13715,7 +13810,7 @@ func (x *ListHookRevisionsResp_ListHookRevisionsData) String() string { func (*ListHookRevisionsResp_ListHookRevisionsData) ProtoMessage() {} func (x *ListHookRevisionsResp_ListHookRevisionsData) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[217] + mi := &file_data_service_proto_msgTypes[219] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13770,7 +13865,7 @@ type ListHookRevisionReferencesResp_Detail struct { func (x *ListHookRevisionReferencesResp_Detail) Reset() { *x = ListHookRevisionReferencesResp_Detail{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[218] + mi := &file_data_service_proto_msgTypes[220] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13783,7 +13878,7 @@ func (x *ListHookRevisionReferencesResp_Detail) String() string { func (*ListHookRevisionReferencesResp_Detail) ProtoMessage() {} func (x *ListHookRevisionReferencesResp_Detail) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[218] + mi := &file_data_service_proto_msgTypes[220] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13872,7 +13967,7 @@ type GetReleaseHookResp_Hook struct { func (x *GetReleaseHookResp_Hook) Reset() { *x = GetReleaseHookResp_Hook{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[219] + mi := &file_data_service_proto_msgTypes[221] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13885,7 +13980,7 @@ func (x *GetReleaseHookResp_Hook) String() string { func (*GetReleaseHookResp_Hook) ProtoMessage() {} func (x *GetReleaseHookResp_Hook) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[219] + mi := &file_data_service_proto_msgTypes[221] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13964,7 +14059,7 @@ type ListTemplateByTupleReq_Item struct { func (x *ListTemplateByTupleReq_Item) Reset() { *x = ListTemplateByTupleReq_Item{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[220] + mi := &file_data_service_proto_msgTypes[222] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13977,7 +14072,7 @@ func (x *ListTemplateByTupleReq_Item) String() string { func (*ListTemplateByTupleReq_Item) ProtoMessage() {} func (x *ListTemplateByTupleReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[220] + mi := &file_data_service_proto_msgTypes[222] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14033,7 +14128,7 @@ type ListTemplateByTupleReqResp_Item struct { func (x *ListTemplateByTupleReqResp_Item) Reset() { *x = ListTemplateByTupleReqResp_Item{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[221] + mi := &file_data_service_proto_msgTypes[223] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14046,7 +14141,7 @@ func (x *ListTemplateByTupleReqResp_Item) String() string { func (*ListTemplateByTupleReqResp_Item) ProtoMessage() {} func (x *ListTemplateByTupleReqResp_Item) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[221] + mi := &file_data_service_proto_msgTypes[223] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14088,7 +14183,7 @@ type BatchUpsertTemplatesReq_Item struct { func (x *BatchUpsertTemplatesReq_Item) Reset() { *x = BatchUpsertTemplatesReq_Item{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[222] + mi := &file_data_service_proto_msgTypes[224] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14101,7 +14196,7 @@ func (x *BatchUpsertTemplatesReq_Item) String() string { func (*BatchUpsertTemplatesReq_Item) ProtoMessage() {} func (x *BatchUpsertTemplatesReq_Item) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[222] + mi := &file_data_service_proto_msgTypes[224] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14148,7 +14243,7 @@ type ListAppGroupsResp_ListAppGroupsData struct { func (x *ListAppGroupsResp_ListAppGroupsData) Reset() { *x = ListAppGroupsResp_ListAppGroupsData{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[223] + mi := &file_data_service_proto_msgTypes[225] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14161,7 +14256,7 @@ func (x *ListAppGroupsResp_ListAppGroupsData) String() string { func (*ListAppGroupsResp_ListAppGroupsData) ProtoMessage() {} func (x *ListAppGroupsResp_ListAppGroupsData) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[223] + mi := &file_data_service_proto_msgTypes[225] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14239,7 +14334,7 @@ type CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData struct { func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) Reset() { *x = CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[224] + mi := &file_data_service_proto_msgTypes[226] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14252,7 +14347,7 @@ func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) String() strin func (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) ProtoMessage() {} func (x *CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[224] + mi := &file_data_service_proto_msgTypes[226] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14304,7 +14399,7 @@ type ListGroupReleasedAppsResp_ListGroupReleasedAppsData struct { func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) Reset() { *x = ListGroupReleasedAppsResp_ListGroupReleasedAppsData{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[225] + mi := &file_data_service_proto_msgTypes[227] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14317,7 +14412,7 @@ func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) String() string { func (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoMessage() {} func (x *ListGroupReleasedAppsResp_ListGroupReleasedAppsData) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[225] + mi := &file_data_service_proto_msgTypes[227] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14380,7 +14475,7 @@ type BatchUpsertKvsReq_Kv struct { func (x *BatchUpsertKvsReq_Kv) Reset() { *x = BatchUpsertKvsReq_Kv{} if protoimpl.UnsafeEnabled { - mi := &file_data_service_proto_msgTypes[226] + mi := &file_data_service_proto_msgTypes[228] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14393,7 +14488,7 @@ func (x *BatchUpsertKvsReq_Kv) String() string { func (*BatchUpsertKvsReq_Kv) ProtoMessage() {} func (x *BatchUpsertKvsReq_Kv) ProtoReflect() protoreflect.Message { - mi := &file_data_service_proto_msgTypes[226] + mi := &file_data_service_proto_msgTypes[228] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14440,1155 +14535,889 @@ var file_data_service_proto_rawDesc = []byte{ 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x6b, 0x67, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x39, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2d, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x70, 0x6b, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x70, 0x6b, 0x67, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x21, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2d, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x6b, 0x67, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2d, 0x63, - 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x69, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x4b, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x39, 0x70, 0x6b, 0x67, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2f, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2d, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x70, 0x6b, 0x67, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x68, + 0x6f, 0x6f, 0x6b, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, - 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x70, 0x6b, 0x67, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, + 0x65, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x2d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2f, + 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2d, 0x63, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x70, + 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x4b, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x73, 0x65, 0x74, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x35, 0x70, 0x6b, 0x67, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x43, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x2d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x2d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x76, 0x2f, 0x6b, 0x76, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x2d, 0x6b, 0x76, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x6b, 0x76, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x62, 0x63, 0x72, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x30, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x1c, 0x0a, - 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6d, 0x0a, 0x19, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, - 0x62, 0x63, 0x72, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, - 0x66, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x70, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x2d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x31, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x73, + 0x65, 0x74, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x35, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x2d, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x43, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x61, 0x70, 0x70, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x76, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x3b, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x6b, 0x76, 0x2f, 0x6b, 0x76, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x2d, 0x6b, 0x76, 0x2f, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x6b, 0x76, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd9, 0x01, 0x0a, 0x19, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x07, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, + 0x62, 0x63, 0x72, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, - 0x71, 0x12, 0x42, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x74, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x62, 0x0a, - 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6d, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x55, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x18, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, + 0x62, 0x63, 0x72, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x70, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x30, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, - 0x69, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x54, 0x0a, 0x13, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, - 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x22, 0x1c, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x85, - 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x48, 0x6f, - 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x6f, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x49, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x22, 0x59, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x22, 0x74, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x62, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x13, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, - 0x2e, 0x41, 0x70, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x35, - 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x22, 0x39, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x69, 0x0a, 0x13, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x42, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x54, 0x0a, 0x13, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x1c, 0x0a, 0x0a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x20, + 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x64, + 0x22, 0x40, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x22, 0x49, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, + 0x41, 0x70, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x59, 0x0a, + 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x35, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x22, + 0x39, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x26, 0x0a, 0x0d, 0x47, 0x65, + 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, + 0x22, 0x4a, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, + 0x41, 0x70, 0x70, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x24, 0x0a, 0x10, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, + 0x64, 0x73, 0x22, 0x39, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, + 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, + 0x2e, 0x41, 0x70, 0x70, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xe2, 0x01, + 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x50, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x12, 0x39, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x22, 0x88, 0x03, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x40, + 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x6c, + 0x6c, 0x1a, 0xd9, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x50, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, + 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, + 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x39, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x22, 0x2e, 0x0a, + 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x8b, 0x01, + 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x61, 0x0a, 0x13, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x50, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x22, 0x26, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x43, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, - 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x96, 0x01, - 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x4a, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, - 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0x24, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, - 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x39, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x50, 0x0a, 0x16, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, - 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, - 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x70, 0x65, - 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x12, 0x39, 0x0a, - 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x22, 0x88, 0x03, 0x0a, 0x19, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x22, 0xfb, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, + 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1f, 0x0a, + 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x57, + 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, + 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xef, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x1a, 0xd9, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x50, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x12, 0x39, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, - 0x70, 0x65, 0x63, 0x22, 0x2e, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, - 0x63, 0x22, 0x61, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x50, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0xfb, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, + 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x62, 0x72, 0x63, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0x46, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x57, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2a, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xef, 0x01, - 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x17, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xb3, 0x01, 0x0a, + 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, + 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, + 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x5c, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x22, 0x50, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x33, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x22, 0x7c, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, + 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x22, 0x4d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x68, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xb6, + 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, + 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0x56, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x66, 0x0a, + 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x13, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x72, 0x63, 0x69, 0x2e, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x46, 0x0a, 0x16, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, - 0x64, 0x22, 0x4f, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x70, 0x62, 0x63, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x5c, 0x0a, 0x04, 0x49, 0x74, - 0x65, 0x6d, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x15, 0x55, 0x6e, 0x44, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x50, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, - 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x7c, 0x0a, 0x10, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3c, - 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x4d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x68, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x24, - 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x49, 0x64, 0x22, 0xb6, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0xbb, 0x01, - 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, + 0x5f, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, + 0x22, 0x85, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x43, 0x49, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x92, 0x02, 0x0a, 0x11, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, + 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, - 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x0a, - 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0x56, 0x0a, 0x10, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x17, 0x0a, + 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x22, 0x57, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x70, 0x62, 0x72, 0x6b, 0x76, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x6d, 0x0a, 0x0d, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x27, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x13, 0x44, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, + 0x64, 0x22, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, + 0xae, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x29, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0xee, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6e, 0x75, + 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x4e, 0x75, 0x6d, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x1a, + 0x30, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6e, + 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, + 0x64, 0x22, 0xc0, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, - 0x64, 0x0a, 0x15, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x49, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x71, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x22, 0x92, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x57, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x72, 0x6b, 0x76, 0x2e, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0x6d, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, - 0x6f, 0x6b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, - 0x48, 0x6f, 0x6f, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x27, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x22, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, + 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x54, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4b, 0x65, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x22, 0x80, 0x02, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x1a, 0xa2, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, + 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, + 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x12, + 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, + 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, + 0x67, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x15, + 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, - 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, - 0x6f, 0x6b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, - 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xee, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4e, 0x75, 0x6d, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, - 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x1a, 0x30, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0xc0, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x74, 0x5f, 0x74, - 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x54, 0x61, 0x67, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0x80, 0x02, 0x0a, 0x0d, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, - 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xa2, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, - 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4e, - 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, - 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x2f, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x22, 0x91, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, + 0xf8, 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, + 0x88, 0x02, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, + 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, + 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x55, 0x0a, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xf8, 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x88, 0x02, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x6f, - 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x22, 0x55, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xb9, 0x01, 0x0a, 0x14, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, - 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x91, 0x02, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x94, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x37, - 0x0a, 0x0d, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x68, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x58, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, - 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, - 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x22, 0x81, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xb9, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x58, 0x0a, 0x16, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x91, 0x02, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x94, + 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x0d, 0x68, 0x6f, 0x6f, 0x6b, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x25, + 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x58, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x58, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x79, 0x50, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, - 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, - 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x15, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xba, 0x01, - 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, + 0x58, 0x0a, 0x16, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x58, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x42, 0x79, 0x50, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x68, 0x72, + 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xba, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x22, 0xf6, 0x02, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xf6, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, + 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xf6, 0x02, 0x0a, 0x1e, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x60, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, + 0xe3, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x5f, 0x68, 0x6f, + 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x07, 0x70, 0x72, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x12, 0x3a, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x1a, 0xd6, 0x01, 0x0a, + 0x04, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x68, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, + 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xb4, 0x01, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, + 0x61, 0x6c, 0x6c, 0x22, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xf6, 0x01, 0x0a, 0x06, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0xe3, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x07, 0x70, - 0x72, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x3a, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x68, - 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x48, 0x6f, - 0x6f, 0x6b, 0x1a, 0xd6, 0x01, 0x0a, 0x04, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x6f, - 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, - 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x16, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, - 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x22, 0xb4, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, - 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, + 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x67, 0x0a, 0x16, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, - 0x67, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x35, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x73, 0x22, - 0x32, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, - 0x48, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, - 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6e, 0x74, 0x22, 0x35, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, + 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x17, 0x0a, 0x07, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x06, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x19, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x22, 0x2a, 0x0a, + 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, + 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x17, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x33, 0x0a, - 0x07, 0x74, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x74, 0x72, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0xed, 0x01, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, - 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x74, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x28, 0x0a, 0x10, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, + 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x91, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x79, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, + 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x22, 0x80, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, + 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, + 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0xac, 0x01, + 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, + 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x29, 0x0a, 0x15, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, + 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x15, + 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x61, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x79, 0x0a, 0x11, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x15, 0x41, 0x64, - 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x49, 0x64, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, - 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, - 0x64, 0x73, 0x22, 0x29, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, - 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, - 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, - 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x9a, 0x02, 0x0a, 0x15, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, - 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x61, 0x0a, - 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, - 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0x9a, 0x02, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, - 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, - 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5e, 0x0a, - 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc4, 0x01, - 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x1a, 0x71, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x22, 0xd8, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x52, 0x65, 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x1a, 0x7d, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0xd2, 0x01, 0x0a, 0x17, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x38, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x7d, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, - 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, - 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x84, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, - 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x63, 0x0a, 0x19, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x22, 0x6d, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, - 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x22, 0x31, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, - 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x22, 0x52, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x5d, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x22, 0x61, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, - 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x14, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xde, - 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x5b, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa8, 0x01, 0x0a, - 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, - 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, - 0x63, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x7b, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x48, 0x0a, 0x17, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, - 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x2c, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x03, 0x69, 0x64, 0x73, 0x22, 0x4a, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0x34, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x5b, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, - 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, - 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0x44, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x38, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x95, 0x01, 0x0a, - 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x0a, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x1b, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, - 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, - 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, - 0x63, 0x22, 0x72, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, - 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6c, 0x0a, 0x1d, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xf9, 0x01, 0x0a, 0x24, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, @@ -15596,181 +15425,68 @@ var file_data_service_proto_rawDesc = []byte{ 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7c, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, - 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x23, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3b, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x94, 0x01, - 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x0a, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x22, 0x48, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x4a, - 0x0a, 0x1a, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x1b, 0x45, 0x78, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0x49, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, - 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x5b, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x70, 0x0a, 0x21, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, - 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x63, 0x0a, - 0x22, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, - 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x44, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x47, 0x0a, 0x17, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, - 0x70, 0x49, 0x64, 0x22, 0x50, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, - 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x6e, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, - 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0x7e, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x22, - 0x4f, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, - 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0xb8, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5e, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x2e, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x71, 0x0a, 0x04, 0x49, + 0x74, 0x65, 0x6d, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x5f, 0x0a, 0x1f, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x88, 0x01, 0x0a, - 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x55, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x87, - 0x02, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x74, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3e, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x85, - 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0xd8, + 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x7d, 0x0a, 0x04, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd2, 0x01, 0x0a, 0x17, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, + 0x7d, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2f, + 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, + 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, + 0x8d, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, + 0x84, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, @@ -15785,511 +15501,907 @@ var file_data_service_proto_rawDesc = []byte{ 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x70, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, - 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x72, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, - 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x1d, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x63, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, + 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x6d, 0x0a, 0x19, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, + 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x31, 0x0a, 0x1d, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x52, 0x0a, + 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x5d, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, + 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, + 0x22, 0x61, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, + 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x74, 0x72, 0x2e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x0a, + 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x73, + 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xde, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x5b, 0x0a, 0x14, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, + 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, + 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, + 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x22, 0x7b, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0a, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x46, + 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x48, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x22, 0x2c, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, + 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x4a, + 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x34, 0x0a, 0x20, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, + 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, + 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, + 0x22, 0x5b, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x49, 0x44, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x72, 0x69, 0x65, 0x66, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x44, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, + 0x69, 0x7a, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, + 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x70, 0x62, 0x74, 0x73, 0x65, 0x74, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, + 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, + 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x88, + 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, + 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, + 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, + 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x72, 0x0a, 0x1b, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, + 0xf3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6c, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0xf9, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, + 0x7c, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, + 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa3, 0x01, + 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, + 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x06, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, + 0x74, 0x62, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x94, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, + 0x74, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x61, 0x74, + 0x62, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x48, + 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x70, 0x62, 0x61, 0x74, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x4a, 0x0a, 0x1a, 0x45, 0x78, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, + 0x70, 0x70, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x1b, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, + 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x49, 0x0a, + 0x19, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, + 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, + 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x70, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x95, 0x01, 0x0a, + 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x44, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x32, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x70, 0x62, 0x61, 0x74, 0x76, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x22, 0x47, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, + 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x50, 0x0a, + 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, + 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, + 0x6e, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, + 0x58, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x7e, 0x0a, 0x16, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x22, 0x4f, 0x0a, 0x17, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x5f, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x74, 0x62, + 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, + 0x73, 0x22, 0x55, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x37, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x1b, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, + 0x6c, 0x6c, 0x22, 0x74, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x74, 0x62, + 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, + 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x85, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, + 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, + 0x22, 0x70, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, - 0x6c, 0x22, 0x7c, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, - 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, - 0x62, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0xc1, 0x02, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x6c, 0x22, 0x72, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, - 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbf, 0x02, 0x0a, 0x21, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, - 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, - 0x22, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, - 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0xc9, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7a, 0x0a, 0x1f, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x74, - 0x62, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7c, 0x0a, 0x1e, 0x4c, + 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc1, 0x02, 0x0a, 0x23, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x84, 0x01, + 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x22, 0xbf, 0x02, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, + 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x1e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, + 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x7a, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x41, + 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x22, 0xc7, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x76, 0x0a, 0x1d, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0xc5, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, + 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, 0x22, - 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, 0x62, - 0x72, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x8d, - 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x0a, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, - 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x65, - 0x0a, 0x1a, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, + 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc7, 0x01, 0x0a, 0x1c, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, - 0x73, 0x70, 0x65, 0x63, 0x73, 0x22, 0x44, 0x0a, 0x1b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x18, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x63, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x76, - 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x19, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x76, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc5, 0x01, + 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x62, 0x74, 0x62, 0x72, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, + 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, + 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x65, 0x0a, 0x1a, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x30, 0x0a, + 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x6d, 0x0a, 0x19, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, - 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x72, 0x0a, 0x0e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x38, 0x0a, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x29, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0xfa, 0x02, 0x0a, 0x11, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x43, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x9f, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0x49, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x22, + 0x44, 0x0a, 0x1b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x25, + 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, + 0x63, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x22, 0x6d, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x22, 0x72, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x26, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x29, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x82, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, - 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, - 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x5a, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, - 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x4b, 0x0a, 0x1a, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, - 0xd8, 0x01, 0x0a, 0x1b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x51, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, - 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x1a, 0x66, 0x0a, 0x1b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x18, 0x4c, - 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb0, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x22, 0xfa, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x62, 0x64, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x9f, + 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x0b, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x0c, + 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x6e, 0x65, 0x77, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, + 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, + 0x22, 0x49, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x0e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, + 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x22, 0x5a, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4b, 0x0a, 0x1a, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x1b, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, + 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x66, 0x0a, 0x1b, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, + 0x69, 0x74, 0x65, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x62, 0x64, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb0, + 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xa7, 0x01, - 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x22, 0xad, 0x02, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x61, - 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xf2, 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x38, 0x0a, 0x09, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x61, 0x79, - 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, 0x0b, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x1d, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, - 0x79, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x1a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x53, 0x74, 0x72, - 0x61, 0x74, 0x65, 0x67, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x9b, - 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, - 0x73, 0x65, 0x50, 0x61, 0x67, 0x65, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0x5b, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x4d, 0x0a, 0x14, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, - 0x22, 0x45, 0x0a, 0x15, 0x46, 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x71, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x1d, 0x0a, 0x07, 0x50, 0x69, - 0x6e, 0x67, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x0b, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, - 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, - 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x73, - 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, - 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x22, 0xd5, 0x02, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, + 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0xa7, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x69, + 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, + 0x64, 0x22, 0xad, 0x02, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, + 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, + 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, + 0x61, 0x6c, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x61, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x67, 0x72, 0x61, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0xf2, 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, - 0x6c, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x47, 0x0a, 0x0b, 0x4c, - 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x22, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x22, 0x73, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, - 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, - 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xf6, 0x01, 0x0a, 0x11, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2c, 0x0a, - 0x03, 0x6b, 0x76, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x64, - 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, - 0x52, 0x65, 0x71, 0x2e, 0x4b, 0x76, 0x52, 0x03, 0x6b, 0x76, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x1a, 0x64, 0x0a, 0x02, - 0x4b, 0x76, 0x12, 0x37, 0x0a, 0x0d, 0x6b, 0x76, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, - 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x6b, - 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x07, 0x6b, - 0x76, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, - 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x6b, 0x76, 0x53, 0x70, - 0x65, 0x63, 0x22, 0x75, 0x0a, 0x0d, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, - 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, - 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x32, 0x84, 0x53, 0x0a, 0x04, 0x44, 0x61, + 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6d, + 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, + 0x6c, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x72, 0x61, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, + 0x72, 0x61, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, 0x0b, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x68, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x9b, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, + 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x24, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x50, 0x61, 0x67, 0x65, + 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0x5b, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x30, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x22, 0x36, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x14, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x45, 0x0a, 0x15, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x71, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x22, 0x1d, 0x0a, 0x07, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x73, 0x67, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, + 0x65, 0x71, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x73, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, + 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, + 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xd5, 0x02, + 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x47, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, + 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x73, + 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, + 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, + 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x22, 0xf6, 0x01, 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x03, 0x6b, 0x76, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4b, 0x76, + 0x52, 0x03, 0x6b, 0x76, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x1a, 0x64, 0x0a, 0x02, 0x4b, 0x76, 0x12, 0x37, 0x0a, 0x0d, + 0x6b, 0x76, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x6b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x6b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x22, 0x75, 0x0a, 0x0d, + 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, + 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, + 0x32, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x22, 0x93, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3f, 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x32, 0xe9, 0x53, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, @@ -16954,13 +17066,19 @@ var file_data_service_proto_rawDesc = []byte{ 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x73, 0x67, 0x1a, 0x0d, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x73, 0x67, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x3a, 0x01, 0x2a, 0x22, 0x05, 0x2f, 0x70, 0x69, 0x6e, 0x67, - 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, - 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, - 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x3b, 0x70, 0x62, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x12, 0x63, 0x0a, 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x21, 0x2e, 0x70, + 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x22, 0x2e, 0x70, 0x62, 0x64, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, + 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x64, 0x61, + 0x74, 0x61, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3b, 0x70, 0x62, 0x64, 0x73, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -16975,7 +17093,7 @@ func file_data_service_proto_rawDescGZIP() []byte { return file_data_service_proto_rawDescData } -var file_data_service_proto_msgTypes = make([]protoimpl.MessageInfo, 227) +var file_data_service_proto_msgTypes = make([]protoimpl.MessageInfo, 229) var file_data_service_proto_goTypes = []interface{}{ (*UpdateCredentialScopesReq)(nil), // 0: pbds.UpdateCredentialScopesReq (*UpdateCredentialScopesResp)(nil), // 1: pbds.UpdateCredentialScopesResp @@ -17189,544 +17307,552 @@ var file_data_service_proto_goTypes = []interface{}{ (*DeleteKvReq)(nil), // 209: pbds.DeleteKvReq (*BatchUpsertKvsReq)(nil), // 210: pbds.BatchUpsertKvsReq (*UnDeleteKvReq)(nil), // 211: pbds.UnDeleteKvReq - (*BatchUpsertConfigItemsReq_ConfigItem)(nil), // 212: pbds.BatchUpsertConfigItemsReq.ConfigItem - (*ListConfigItemByTupleReq_Item)(nil), // 213: pbds.ListConfigItemByTupleReq.Item - (*GetHookInfoSpec_Releases)(nil), // 214: pbds.GetHookInfoSpec.Releases - (*ListHooksResp_Detail)(nil), // 215: pbds.ListHooksResp.Detail - (*ListHookReferencesResp_Detail)(nil), // 216: pbds.ListHookReferencesResp.Detail - (*ListHookRevisionsResp_ListHookRevisionsData)(nil), // 217: pbds.ListHookRevisionsResp.ListHookRevisionsData - (*ListHookRevisionReferencesResp_Detail)(nil), // 218: pbds.ListHookRevisionReferencesResp.Detail - (*GetReleaseHookResp_Hook)(nil), // 219: pbds.GetReleaseHookResp.Hook - (*ListTemplateByTupleReq_Item)(nil), // 220: pbds.ListTemplateByTupleReq.Item - (*ListTemplateByTupleReqResp_Item)(nil), // 221: pbds.ListTemplateByTupleReqResp.Item - (*BatchUpsertTemplatesReq_Item)(nil), // 222: pbds.BatchUpsertTemplatesReq.Item - (*ListAppGroupsResp_ListAppGroupsData)(nil), // 223: pbds.ListAppGroupsResp.ListAppGroupsData - (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData)(nil), // 224: pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData - (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData)(nil), // 225: pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData - (*BatchUpsertKvsReq_Kv)(nil), // 226: pbds.BatchUpsertKvsReq.Kv - (*credential_scope.CredentialScopeSpec)(nil), // 227: pbcrs.CredentialScopeSpec - (*credential_scope.UpdateScopeSpec)(nil), // 228: pbcrs.UpdateScopeSpec - (*credential_scope.CredentialScopeAttachment)(nil), // 229: pbcrs.CredentialScopeAttachment - (*credential_scope.CredentialScopeList)(nil), // 230: pbcrs.CredentialScopeList - (*credential.CredentialAttachment)(nil), // 231: pbcredential.CredentialAttachment - (*credential.CredentialSpec)(nil), // 232: pbcredential.CredentialSpec - (*credential.CredentialList)(nil), // 233: pbcredential.CredentialList - (*app.AppSpec)(nil), // 234: pbapp.AppSpec - (*app.App)(nil), // 235: pbapp.App - (*config_item.ConfigItemAttachment)(nil), // 236: pbci.ConfigItemAttachment - (*config_item.ConfigItemSpec)(nil), // 237: pbci.ConfigItemSpec - (*content.ContentSpec)(nil), // 238: pbcontent.ContentSpec - (*config_item.ConfigItem)(nil), // 239: pbci.ConfigItem - (*released_ci.ReleasedConfigItem)(nil), // 240: pbrci.ReleasedConfigItem - (*config_item.ListConfigItemCounts)(nil), // 241: pbci.ListConfigItemCounts - (*content.ContentAttachment)(nil), // 242: pbcontent.ContentAttachment - (*commit.CommitAttachment)(nil), // 243: pbcommit.CommitAttachment - (*release.ReleaseAttachment)(nil), // 244: pbrelease.ReleaseAttachment - (*release.ReleaseSpec)(nil), // 245: pbrelease.ReleaseSpec - (*template_variable.TemplateVariableSpec)(nil), // 246: pbtv.TemplateVariableSpec - (*release.Release)(nil), // 247: pbrelease.Release - (*released_kv.ReleasedKv)(nil), // 248: pbrkv.ReleasedKv - (*hook.HookAttachment)(nil), // 249: pbhook.HookAttachment - (*hook.HookSpec)(nil), // 250: pbhook.HookSpec - (*base.Revision)(nil), // 251: pbbase.Revision - (*hook.CountHookTags)(nil), // 252: pbhook.CountHookTags - (*hook_revision.HookRevisionAttachment)(nil), // 253: pbhr.HookRevisionAttachment - (*hook_revision.HookRevisionSpec)(nil), // 254: pbhr.HookRevisionSpec - (*template_space.TemplateSpaceAttachment)(nil), // 255: pbts.TemplateSpaceAttachment - (*template_space.TemplateSpaceSpec)(nil), // 256: pbts.TemplateSpaceSpec - (*template_space.TemplateSpace)(nil), // 257: pbts.TemplateSpace - (*template.TemplateAttachment)(nil), // 258: pbtemplate.TemplateAttachment - (*template.TemplateSpec)(nil), // 259: pbtemplate.TemplateSpec - (*template_revision.TemplateRevisionSpec)(nil), // 260: pbtr.TemplateRevisionSpec - (*template.Template)(nil), // 261: pbtemplate.Template - (*template_revision.TemplateRevisionAttachment)(nil), // 262: pbtr.TemplateRevisionAttachment - (*template_revision.TemplateRevision)(nil), // 263: pbtr.TemplateRevision - (*template_revision.TemplateRevisionNamesDetail)(nil), // 264: pbtr.TemplateRevisionNamesDetail - (*template_set.TemplateSetAttachment)(nil), // 265: pbtset.TemplateSetAttachment - (*template_set.TemplateSetSpec)(nil), // 266: pbtset.TemplateSetSpec - (*template_set.TemplateSet)(nil), // 267: pbtset.TemplateSet - (*template_set.TemplateSetBriefInfo)(nil), // 268: pbtset.TemplateSetBriefInfo - (*template_set.TemplateSetOfBizDetail)(nil), // 269: pbtset.TemplateSetOfBizDetail - (*app_template_binding.AppTemplateBindingAttachment)(nil), // 270: pbatb.AppTemplateBindingAttachment - (*app_template_binding.AppTemplateBindingSpec)(nil), // 271: pbatb.AppTemplateBindingSpec - (*app_template_binding.AppTemplateBinding)(nil), // 272: pbatb.AppTemplateBinding - (*app_template_binding.AppBoundTmplRevision)(nil), // 273: pbatb.AppBoundTmplRevision - (*app_template_binding.ReleasedAppBoundTmplRevision)(nil), // 274: pbatb.ReleasedAppBoundTmplRevision - (*app_template_binding.Conflict)(nil), // 275: pbatb.Conflict - (*app_template_variable.AppTemplateVariableReference)(nil), // 276: pbatv.AppTemplateVariableReference - (*app_template_variable.AppTemplateVariableAttachment)(nil), // 277: pbatv.AppTemplateVariableAttachment - (*app_template_variable.AppTemplateVariableSpec)(nil), // 278: pbatv.AppTemplateVariableSpec - (*template_binding_relation.TemplateBoundCounts)(nil), // 279: pbtbr.TemplateBoundCounts - (*template_binding_relation.TemplateRevisionBoundCounts)(nil), // 280: pbtbr.TemplateRevisionBoundCounts - (*template_binding_relation.TemplateSetBoundCounts)(nil), // 281: pbtbr.TemplateSetBoundCounts - (*template_binding_relation.TemplateBoundUnnamedAppDetail)(nil), // 282: pbtbr.TemplateBoundUnnamedAppDetail - (*template_binding_relation.TemplateBoundNamedAppDetail)(nil), // 283: pbtbr.TemplateBoundNamedAppDetail - (*template_binding_relation.TemplateBoundTemplateSetDetail)(nil), // 284: pbtbr.TemplateBoundTemplateSetDetail - (*template_binding_relation.MultiTemplateBoundTemplateSetDetail)(nil), // 285: pbtbr.MultiTemplateBoundTemplateSetDetail - (*template_binding_relation.TemplateRevisionBoundUnnamedAppDetail)(nil), // 286: pbtbr.TemplateRevisionBoundUnnamedAppDetail - (*template_binding_relation.TemplateRevisionBoundNamedAppDetail)(nil), // 287: pbtbr.TemplateRevisionBoundNamedAppDetail - (*template_binding_relation.TemplateSetBoundUnnamedAppDetail)(nil), // 288: pbtbr.TemplateSetBoundUnnamedAppDetail - (*template_binding_relation.MultiTemplateSetBoundUnnamedAppDetail)(nil), // 289: pbtbr.MultiTemplateSetBoundUnnamedAppDetail - (*template_binding_relation.TemplateSetBoundNamedAppDetail)(nil), // 290: pbtbr.TemplateSetBoundNamedAppDetail - (*template_binding_relation.LatestTemplateBoundUnnamedAppDetail)(nil), // 291: pbtbr.LatestTemplateBoundUnnamedAppDetail - (*template_variable.TemplateVariableAttachment)(nil), // 292: pbtv.TemplateVariableAttachment - (*template_variable.TemplateVariable)(nil), // 293: pbtv.TemplateVariable - (*group.GroupAttachment)(nil), // 294: pbgroup.GroupAttachment - (*group.GroupSpec)(nil), // 295: pbgroup.GroupSpec - (*group.Group)(nil), // 296: pbgroup.Group - (*structpb.Struct)(nil), // 297: google.protobuf.Struct - (*base.BasePage)(nil), // 298: pbbase.BasePage - (*kv.KvAttachment)(nil), // 299: pbkv.KvAttachment - (*kv.KvSpec)(nil), // 300: pbkv.KvSpec - (*kv.Kv)(nil), // 301: pbkv.Kv - (*hook.Hook)(nil), // 302: pbhook.Hook - (*hook_revision.HookRevision)(nil), // 303: pbhr.HookRevision - (*base.EmptyReq)(nil), // 304: pbbase.EmptyReq - (*base.EmptyResp)(nil), // 305: pbbase.EmptyResp - (*content.Content)(nil), // 306: pbcontent.Content - (*commit.Commit)(nil), // 307: pbcommit.Commit + (*BatchUpsertClientMetricsReq)(nil), // 212: pbds.BatchUpsertClientMetricsReq + (*BatchUpsertClientMetricsResp)(nil), // 213: pbds.BatchUpsertClientMetricsResp + (*BatchUpsertConfigItemsReq_ConfigItem)(nil), // 214: pbds.BatchUpsertConfigItemsReq.ConfigItem + (*ListConfigItemByTupleReq_Item)(nil), // 215: pbds.ListConfigItemByTupleReq.Item + (*GetHookInfoSpec_Releases)(nil), // 216: pbds.GetHookInfoSpec.Releases + (*ListHooksResp_Detail)(nil), // 217: pbds.ListHooksResp.Detail + (*ListHookReferencesResp_Detail)(nil), // 218: pbds.ListHookReferencesResp.Detail + (*ListHookRevisionsResp_ListHookRevisionsData)(nil), // 219: pbds.ListHookRevisionsResp.ListHookRevisionsData + (*ListHookRevisionReferencesResp_Detail)(nil), // 220: pbds.ListHookRevisionReferencesResp.Detail + (*GetReleaseHookResp_Hook)(nil), // 221: pbds.GetReleaseHookResp.Hook + (*ListTemplateByTupleReq_Item)(nil), // 222: pbds.ListTemplateByTupleReq.Item + (*ListTemplateByTupleReqResp_Item)(nil), // 223: pbds.ListTemplateByTupleReqResp.Item + (*BatchUpsertTemplatesReq_Item)(nil), // 224: pbds.BatchUpsertTemplatesReq.Item + (*ListAppGroupsResp_ListAppGroupsData)(nil), // 225: pbds.ListAppGroupsResp.ListAppGroupsData + (*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData)(nil), // 226: pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData + (*ListGroupReleasedAppsResp_ListGroupReleasedAppsData)(nil), // 227: pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData + (*BatchUpsertKvsReq_Kv)(nil), // 228: pbds.BatchUpsertKvsReq.Kv + (*credential_scope.CredentialScopeSpec)(nil), // 229: pbcrs.CredentialScopeSpec + (*credential_scope.UpdateScopeSpec)(nil), // 230: pbcrs.UpdateScopeSpec + (*credential_scope.CredentialScopeAttachment)(nil), // 231: pbcrs.CredentialScopeAttachment + (*credential_scope.CredentialScopeList)(nil), // 232: pbcrs.CredentialScopeList + (*credential.CredentialAttachment)(nil), // 233: pbcredential.CredentialAttachment + (*credential.CredentialSpec)(nil), // 234: pbcredential.CredentialSpec + (*credential.CredentialList)(nil), // 235: pbcredential.CredentialList + (*app.AppSpec)(nil), // 236: pbapp.AppSpec + (*app.App)(nil), // 237: pbapp.App + (*config_item.ConfigItemAttachment)(nil), // 238: pbci.ConfigItemAttachment + (*config_item.ConfigItemSpec)(nil), // 239: pbci.ConfigItemSpec + (*content.ContentSpec)(nil), // 240: pbcontent.ContentSpec + (*config_item.ConfigItem)(nil), // 241: pbci.ConfigItem + (*released_ci.ReleasedConfigItem)(nil), // 242: pbrci.ReleasedConfigItem + (*config_item.ListConfigItemCounts)(nil), // 243: pbci.ListConfigItemCounts + (*content.ContentAttachment)(nil), // 244: pbcontent.ContentAttachment + (*commit.CommitAttachment)(nil), // 245: pbcommit.CommitAttachment + (*release.ReleaseAttachment)(nil), // 246: pbrelease.ReleaseAttachment + (*release.ReleaseSpec)(nil), // 247: pbrelease.ReleaseSpec + (*template_variable.TemplateVariableSpec)(nil), // 248: pbtv.TemplateVariableSpec + (*release.Release)(nil), // 249: pbrelease.Release + (*released_kv.ReleasedKv)(nil), // 250: pbrkv.ReleasedKv + (*hook.HookAttachment)(nil), // 251: pbhook.HookAttachment + (*hook.HookSpec)(nil), // 252: pbhook.HookSpec + (*base.Revision)(nil), // 253: pbbase.Revision + (*hook.CountHookTags)(nil), // 254: pbhook.CountHookTags + (*hook_revision.HookRevisionAttachment)(nil), // 255: pbhr.HookRevisionAttachment + (*hook_revision.HookRevisionSpec)(nil), // 256: pbhr.HookRevisionSpec + (*template_space.TemplateSpaceAttachment)(nil), // 257: pbts.TemplateSpaceAttachment + (*template_space.TemplateSpaceSpec)(nil), // 258: pbts.TemplateSpaceSpec + (*template_space.TemplateSpace)(nil), // 259: pbts.TemplateSpace + (*template.TemplateAttachment)(nil), // 260: pbtemplate.TemplateAttachment + (*template.TemplateSpec)(nil), // 261: pbtemplate.TemplateSpec + (*template_revision.TemplateRevisionSpec)(nil), // 262: pbtr.TemplateRevisionSpec + (*template.Template)(nil), // 263: pbtemplate.Template + (*template_revision.TemplateRevisionAttachment)(nil), // 264: pbtr.TemplateRevisionAttachment + (*template_revision.TemplateRevision)(nil), // 265: pbtr.TemplateRevision + (*template_revision.TemplateRevisionNamesDetail)(nil), // 266: pbtr.TemplateRevisionNamesDetail + (*template_set.TemplateSetAttachment)(nil), // 267: pbtset.TemplateSetAttachment + (*template_set.TemplateSetSpec)(nil), // 268: pbtset.TemplateSetSpec + (*template_set.TemplateSet)(nil), // 269: pbtset.TemplateSet + (*template_set.TemplateSetBriefInfo)(nil), // 270: pbtset.TemplateSetBriefInfo + (*template_set.TemplateSetOfBizDetail)(nil), // 271: pbtset.TemplateSetOfBizDetail + (*app_template_binding.AppTemplateBindingAttachment)(nil), // 272: pbatb.AppTemplateBindingAttachment + (*app_template_binding.AppTemplateBindingSpec)(nil), // 273: pbatb.AppTemplateBindingSpec + (*app_template_binding.AppTemplateBinding)(nil), // 274: pbatb.AppTemplateBinding + (*app_template_binding.AppBoundTmplRevision)(nil), // 275: pbatb.AppBoundTmplRevision + (*app_template_binding.ReleasedAppBoundTmplRevision)(nil), // 276: pbatb.ReleasedAppBoundTmplRevision + (*app_template_binding.Conflict)(nil), // 277: pbatb.Conflict + (*app_template_variable.AppTemplateVariableReference)(nil), // 278: pbatv.AppTemplateVariableReference + (*app_template_variable.AppTemplateVariableAttachment)(nil), // 279: pbatv.AppTemplateVariableAttachment + (*app_template_variable.AppTemplateVariableSpec)(nil), // 280: pbatv.AppTemplateVariableSpec + (*template_binding_relation.TemplateBoundCounts)(nil), // 281: pbtbr.TemplateBoundCounts + (*template_binding_relation.TemplateRevisionBoundCounts)(nil), // 282: pbtbr.TemplateRevisionBoundCounts + (*template_binding_relation.TemplateSetBoundCounts)(nil), // 283: pbtbr.TemplateSetBoundCounts + (*template_binding_relation.TemplateBoundUnnamedAppDetail)(nil), // 284: pbtbr.TemplateBoundUnnamedAppDetail + (*template_binding_relation.TemplateBoundNamedAppDetail)(nil), // 285: pbtbr.TemplateBoundNamedAppDetail + (*template_binding_relation.TemplateBoundTemplateSetDetail)(nil), // 286: pbtbr.TemplateBoundTemplateSetDetail + (*template_binding_relation.MultiTemplateBoundTemplateSetDetail)(nil), // 287: pbtbr.MultiTemplateBoundTemplateSetDetail + (*template_binding_relation.TemplateRevisionBoundUnnamedAppDetail)(nil), // 288: pbtbr.TemplateRevisionBoundUnnamedAppDetail + (*template_binding_relation.TemplateRevisionBoundNamedAppDetail)(nil), // 289: pbtbr.TemplateRevisionBoundNamedAppDetail + (*template_binding_relation.TemplateSetBoundUnnamedAppDetail)(nil), // 290: pbtbr.TemplateSetBoundUnnamedAppDetail + (*template_binding_relation.MultiTemplateSetBoundUnnamedAppDetail)(nil), // 291: pbtbr.MultiTemplateSetBoundUnnamedAppDetail + (*template_binding_relation.TemplateSetBoundNamedAppDetail)(nil), // 292: pbtbr.TemplateSetBoundNamedAppDetail + (*template_binding_relation.LatestTemplateBoundUnnamedAppDetail)(nil), // 293: pbtbr.LatestTemplateBoundUnnamedAppDetail + (*template_variable.TemplateVariableAttachment)(nil), // 294: pbtv.TemplateVariableAttachment + (*template_variable.TemplateVariable)(nil), // 295: pbtv.TemplateVariable + (*group.GroupAttachment)(nil), // 296: pbgroup.GroupAttachment + (*group.GroupSpec)(nil), // 297: pbgroup.GroupSpec + (*group.Group)(nil), // 298: pbgroup.Group + (*structpb.Struct)(nil), // 299: google.protobuf.Struct + (*base.BasePage)(nil), // 300: pbbase.BasePage + (*kv.KvAttachment)(nil), // 301: pbkv.KvAttachment + (*kv.KvSpec)(nil), // 302: pbkv.KvSpec + (*kv.Kv)(nil), // 303: pbkv.Kv + (*client.Client)(nil), // 304: pbclient.Client + (*client_event.ClientEvent)(nil), // 305: pbce.ClientEvent + (*hook.Hook)(nil), // 306: pbhook.Hook + (*hook_revision.HookRevision)(nil), // 307: pbhr.HookRevision + (*base.EmptyReq)(nil), // 308: pbbase.EmptyReq + (*base.EmptyResp)(nil), // 309: pbbase.EmptyResp + (*content.Content)(nil), // 310: pbcontent.Content + (*commit.Commit)(nil), // 311: pbcommit.Commit } var file_data_service_proto_depIdxs = []int32{ - 227, // 0: pbds.UpdateCredentialScopesReq.created:type_name -> pbcrs.CredentialScopeSpec - 228, // 1: pbds.UpdateCredentialScopesReq.updated:type_name -> pbcrs.UpdateScopeSpec - 229, // 2: pbds.DeleteCredentialScopesReq.attachment:type_name -> pbcrs.CredentialScopeAttachment - 230, // 3: pbds.ListCredentialScopesResp.details:type_name -> pbcrs.CredentialScopeList - 229, // 4: pbds.CreateCredentialScopeReq.attachment:type_name -> pbcrs.CredentialScopeAttachment - 231, // 5: pbds.CreateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment - 232, // 6: pbds.CreateCredentialReq.spec:type_name -> pbcredential.CredentialSpec - 233, // 7: pbds.ListCredentialResp.details:type_name -> pbcredential.CredentialList - 231, // 8: pbds.UpdateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment - 232, // 9: pbds.UpdateCredentialReq.spec:type_name -> pbcredential.CredentialSpec - 231, // 10: pbds.DeleteCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment - 234, // 11: pbds.CreateAppReq.spec:type_name -> pbapp.AppSpec - 234, // 12: pbds.UpdateAppReq.spec:type_name -> pbapp.AppSpec - 235, // 13: pbds.ListAppsResp.details:type_name -> pbapp.App - 235, // 14: pbds.ListAppsByIDsResp.details:type_name -> pbapp.App - 236, // 15: pbds.CreateConfigItemReq.config_item_attachment:type_name -> pbci.ConfigItemAttachment - 237, // 16: pbds.CreateConfigItemReq.config_item_spec:type_name -> pbci.ConfigItemSpec - 238, // 17: pbds.CreateConfigItemReq.content_spec:type_name -> pbcontent.ContentSpec - 212, // 18: pbds.BatchUpsertConfigItemsReq.items:type_name -> pbds.BatchUpsertConfigItemsReq.ConfigItem - 236, // 19: pbds.UpdateConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment - 237, // 20: pbds.UpdateConfigItemReq.spec:type_name -> pbci.ConfigItemSpec - 236, // 21: pbds.DeleteConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment - 239, // 22: pbds.ListConfigItemsResp.details:type_name -> pbci.ConfigItem - 240, // 23: pbds.ListReleasedConfigItemsResp.details:type_name -> pbrci.ReleasedConfigItem - 241, // 24: pbds.ListConfigItemCountResp.details:type_name -> pbci.ListConfigItemCounts - 213, // 25: pbds.ListConfigItemByTupleReq.items:type_name -> pbds.ListConfigItemByTupleReq.Item - 239, // 26: pbds.ListConfigItemByTupleResp.config_items:type_name -> pbci.ConfigItem - 242, // 27: pbds.CreateContentReq.attachment:type_name -> pbcontent.ContentAttachment - 238, // 28: pbds.CreateContentReq.spec:type_name -> pbcontent.ContentSpec - 243, // 29: pbds.CreateCommitReq.attachment:type_name -> pbcommit.CommitAttachment - 244, // 30: pbds.CreateReleaseReq.attachment:type_name -> pbrelease.ReleaseAttachment - 245, // 31: pbds.CreateReleaseReq.spec:type_name -> pbrelease.ReleaseSpec - 246, // 32: pbds.CreateReleaseReq.variables:type_name -> pbtv.TemplateVariableSpec - 247, // 33: pbds.ListReleasesResp.details:type_name -> pbrelease.Release - 248, // 34: pbds.ListReleasedKvResp.details:type_name -> pbrkv.ReleasedKv - 249, // 35: pbds.CreateHookReq.attachment:type_name -> pbhook.HookAttachment - 250, // 36: pbds.CreateHookReq.spec:type_name -> pbhook.HookSpec + 229, // 0: pbds.UpdateCredentialScopesReq.created:type_name -> pbcrs.CredentialScopeSpec + 230, // 1: pbds.UpdateCredentialScopesReq.updated:type_name -> pbcrs.UpdateScopeSpec + 231, // 2: pbds.DeleteCredentialScopesReq.attachment:type_name -> pbcrs.CredentialScopeAttachment + 232, // 3: pbds.ListCredentialScopesResp.details:type_name -> pbcrs.CredentialScopeList + 231, // 4: pbds.CreateCredentialScopeReq.attachment:type_name -> pbcrs.CredentialScopeAttachment + 233, // 5: pbds.CreateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment + 234, // 6: pbds.CreateCredentialReq.spec:type_name -> pbcredential.CredentialSpec + 235, // 7: pbds.ListCredentialResp.details:type_name -> pbcredential.CredentialList + 233, // 8: pbds.UpdateCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment + 234, // 9: pbds.UpdateCredentialReq.spec:type_name -> pbcredential.CredentialSpec + 233, // 10: pbds.DeleteCredentialReq.attachment:type_name -> pbcredential.CredentialAttachment + 236, // 11: pbds.CreateAppReq.spec:type_name -> pbapp.AppSpec + 236, // 12: pbds.UpdateAppReq.spec:type_name -> pbapp.AppSpec + 237, // 13: pbds.ListAppsResp.details:type_name -> pbapp.App + 237, // 14: pbds.ListAppsByIDsResp.details:type_name -> pbapp.App + 238, // 15: pbds.CreateConfigItemReq.config_item_attachment:type_name -> pbci.ConfigItemAttachment + 239, // 16: pbds.CreateConfigItemReq.config_item_spec:type_name -> pbci.ConfigItemSpec + 240, // 17: pbds.CreateConfigItemReq.content_spec:type_name -> pbcontent.ContentSpec + 214, // 18: pbds.BatchUpsertConfigItemsReq.items:type_name -> pbds.BatchUpsertConfigItemsReq.ConfigItem + 238, // 19: pbds.UpdateConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment + 239, // 20: pbds.UpdateConfigItemReq.spec:type_name -> pbci.ConfigItemSpec + 238, // 21: pbds.DeleteConfigItemReq.attachment:type_name -> pbci.ConfigItemAttachment + 241, // 22: pbds.ListConfigItemsResp.details:type_name -> pbci.ConfigItem + 242, // 23: pbds.ListReleasedConfigItemsResp.details:type_name -> pbrci.ReleasedConfigItem + 243, // 24: pbds.ListConfigItemCountResp.details:type_name -> pbci.ListConfigItemCounts + 215, // 25: pbds.ListConfigItemByTupleReq.items:type_name -> pbds.ListConfigItemByTupleReq.Item + 241, // 26: pbds.ListConfigItemByTupleResp.config_items:type_name -> pbci.ConfigItem + 244, // 27: pbds.CreateContentReq.attachment:type_name -> pbcontent.ContentAttachment + 240, // 28: pbds.CreateContentReq.spec:type_name -> pbcontent.ContentSpec + 245, // 29: pbds.CreateCommitReq.attachment:type_name -> pbcommit.CommitAttachment + 246, // 30: pbds.CreateReleaseReq.attachment:type_name -> pbrelease.ReleaseAttachment + 247, // 31: pbds.CreateReleaseReq.spec:type_name -> pbrelease.ReleaseSpec + 248, // 32: pbds.CreateReleaseReq.variables:type_name -> pbtv.TemplateVariableSpec + 249, // 33: pbds.ListReleasesResp.details:type_name -> pbrelease.Release + 250, // 34: pbds.ListReleasedKvResp.details:type_name -> pbrkv.ReleasedKv + 251, // 35: pbds.CreateHookReq.attachment:type_name -> pbhook.HookAttachment + 252, // 36: pbds.CreateHookReq.spec:type_name -> pbhook.HookSpec 59, // 37: pbds.GetHookResp.spec:type_name -> pbds.GetHookInfoSpec - 249, // 38: pbds.GetHookResp.attachment:type_name -> pbhook.HookAttachment - 251, // 39: pbds.GetHookResp.revision:type_name -> pbbase.Revision - 214, // 40: pbds.GetHookInfoSpec.releases:type_name -> pbds.GetHookInfoSpec.Releases - 215, // 41: pbds.ListHooksResp.details:type_name -> pbds.ListHooksResp.Detail - 252, // 42: pbds.ListHookTagResp.details:type_name -> pbhook.CountHookTags - 216, // 43: pbds.ListHookReferencesResp.details:type_name -> pbds.ListHookReferencesResp.Detail - 253, // 44: pbds.CreateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment - 254, // 45: pbds.CreateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec - 217, // 46: pbds.ListHookRevisionsResp.details:type_name -> pbds.ListHookRevisionsResp.ListHookRevisionsData - 253, // 47: pbds.UpdateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment - 254, // 48: pbds.UpdateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec - 218, // 49: pbds.ListHookRevisionReferencesResp.details:type_name -> pbds.ListHookRevisionReferencesResp.Detail - 219, // 50: pbds.GetReleaseHookResp.pre_hook:type_name -> pbds.GetReleaseHookResp.Hook - 219, // 51: pbds.GetReleaseHookResp.post_hook:type_name -> pbds.GetReleaseHookResp.Hook - 255, // 52: pbds.CreateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment - 256, // 53: pbds.CreateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec - 257, // 54: pbds.ListTemplateSpacesResp.details:type_name -> pbts.TemplateSpace - 255, // 55: pbds.UpdateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment - 256, // 56: pbds.UpdateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec - 255, // 57: pbds.DeleteTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment - 257, // 58: pbds.ListTmplSpacesByIDsResp.details:type_name -> pbts.TemplateSpace - 258, // 59: pbds.CreateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 259, // 60: pbds.CreateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec - 260, // 61: pbds.CreateTemplateReq.tr_spec:type_name -> pbtr.TemplateRevisionSpec - 261, // 62: pbds.ListTemplatesResp.details:type_name -> pbtemplate.Template - 258, // 63: pbds.UpdateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 259, // 64: pbds.UpdateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec - 258, // 65: pbds.DeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 258, // 66: pbds.BatchDeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment - 261, // 67: pbds.ListTemplatesByIDsResp.details:type_name -> pbtemplate.Template - 261, // 68: pbds.ListTemplatesNotBoundResp.details:type_name -> pbtemplate.Template - 261, // 69: pbds.ListTmplsOfTmplSetResp.details:type_name -> pbtemplate.Template - 220, // 70: pbds.ListTemplateByTupleReq.items:type_name -> pbds.ListTemplateByTupleReq.Item - 221, // 71: pbds.ListTemplateByTupleReqResp.items:type_name -> pbds.ListTemplateByTupleReqResp.Item - 222, // 72: pbds.BatchUpsertTemplatesReq.items:type_name -> pbds.BatchUpsertTemplatesReq.Item - 262, // 73: pbds.CreateTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment - 260, // 74: pbds.CreateTemplateRevisionReq.spec:type_name -> pbtr.TemplateRevisionSpec - 263, // 75: pbds.ListTemplateRevisionsResp.details:type_name -> pbtr.TemplateRevision - 262, // 76: pbds.DeleteTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment - 263, // 77: pbds.ListTemplateRevisionsByIDsResp.details:type_name -> pbtr.TemplateRevision - 264, // 78: pbds.ListTmplRevisionNamesByTmplIDsResp.details:type_name -> pbtr.TemplateRevisionNamesDetail - 265, // 79: pbds.CreateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment - 266, // 80: pbds.CreateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec - 267, // 81: pbds.ListTemplateSetsResp.details:type_name -> pbtset.TemplateSet - 265, // 82: pbds.UpdateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment - 266, // 83: pbds.UpdateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec - 265, // 84: pbds.DeleteTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment - 267, // 85: pbds.ListAppTemplateSetsResp.details:type_name -> pbtset.TemplateSet - 267, // 86: pbds.ListTemplateSetsByIDsResp.details:type_name -> pbtset.TemplateSet - 268, // 87: pbds.ListTemplateSetBriefInfoByIDsResp.details:type_name -> pbtset.TemplateSetBriefInfo - 269, // 88: pbds.ListTmplSetsOfBizResp.details:type_name -> pbtset.TemplateSetOfBizDetail - 270, // 89: pbds.CreateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 271, // 90: pbds.CreateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec - 272, // 91: pbds.ListAppTemplateBindingsResp.details:type_name -> pbatb.AppTemplateBinding - 270, // 92: pbds.UpdateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 271, // 93: pbds.UpdateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec - 270, // 94: pbds.DeleteAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 273, // 95: pbds.ListAppBoundTmplRevisionsResp.details:type_name -> pbatb.AppBoundTmplRevision - 274, // 96: pbds.ListReleasedAppBoundTmplRevisionsResp.details:type_name -> pbatb.ReleasedAppBoundTmplRevision - 274, // 97: pbds.GetReleasedAppBoundTmplRevisionResp.detail:type_name -> pbatb.ReleasedAppBoundTmplRevision - 270, // 98: pbds.CheckAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment - 271, // 99: pbds.CheckAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec - 275, // 100: pbds.CheckAppTemplateBindingResp.details:type_name -> pbatb.Conflict - 276, // 101: pbds.GetAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference - 276, // 102: pbds.GetReleasedAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference - 277, // 103: pbds.UpdateAppTmplVariablesReq.attachment:type_name -> pbatv.AppTemplateVariableAttachment - 278, // 104: pbds.UpdateAppTmplVariablesReq.spec:type_name -> pbatv.AppTemplateVariableSpec - 246, // 105: pbds.ListAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec - 246, // 106: pbds.ListReleasedAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec - 279, // 107: pbds.ListTmplBoundCountsResp.details:type_name -> pbtbr.TemplateBoundCounts - 280, // 108: pbds.ListTmplRevisionBoundCountsResp.details:type_name -> pbtbr.TemplateRevisionBoundCounts - 281, // 109: pbds.ListTmplSetBoundCountsResp.details:type_name -> pbtbr.TemplateSetBoundCounts - 282, // 110: pbds.ListTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateBoundUnnamedAppDetail - 283, // 111: pbds.ListTmplBoundNamedAppsResp.details:type_name -> pbtbr.TemplateBoundNamedAppDetail - 284, // 112: pbds.ListTmplBoundTmplSetsResp.details:type_name -> pbtbr.TemplateBoundTemplateSetDetail - 285, // 113: pbds.ListMultiTmplBoundTmplSetsResp.details:type_name -> pbtbr.MultiTemplateBoundTemplateSetDetail - 286, // 114: pbds.ListTmplRevisionBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundUnnamedAppDetail - 287, // 115: pbds.ListTmplRevisionBoundNamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundNamedAppDetail - 288, // 116: pbds.ListTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundUnnamedAppDetail - 289, // 117: pbds.ListMultiTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.MultiTemplateSetBoundUnnamedAppDetail - 290, // 118: pbds.ListTmplSetBoundNamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundNamedAppDetail - 291, // 119: pbds.ListLatestTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.LatestTemplateBoundUnnamedAppDetail - 292, // 120: pbds.CreateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment - 246, // 121: pbds.CreateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec - 246, // 122: pbds.ImportTemplateVariablesReq.specs:type_name -> pbtv.TemplateVariableSpec - 293, // 123: pbds.ListTemplateVariablesResp.details:type_name -> pbtv.TemplateVariable - 292, // 124: pbds.UpdateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment - 246, // 125: pbds.UpdateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec - 292, // 126: pbds.DeleteTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment - 294, // 127: pbds.CreateGroupReq.attachment:type_name -> pbgroup.GroupAttachment - 295, // 128: pbds.CreateGroupReq.spec:type_name -> pbgroup.GroupSpec - 296, // 129: pbds.ListAllGroupsResp.details:type_name -> pbgroup.Group - 223, // 130: pbds.ListAppGroupsResp.details:type_name -> pbds.ListAppGroupsResp.ListAppGroupsData - 294, // 131: pbds.UpdateGroupReq.attachment:type_name -> pbgroup.GroupAttachment - 295, // 132: pbds.UpdateGroupReq.spec:type_name -> pbgroup.GroupSpec - 294, // 133: pbds.DeleteGroupReq.attachment:type_name -> pbgroup.GroupAttachment - 224, // 134: pbds.CountGroupsReleasedAppsResp.data:type_name -> pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData - 225, // 135: pbds.ListGroupReleasedAppsResp.details:type_name -> pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData - 297, // 136: pbds.PublishReq.labels:type_name -> google.protobuf.Struct - 246, // 137: pbds.GenerateReleaseAndPublishReq.variables:type_name -> pbtv.TemplateVariableSpec - 297, // 138: pbds.GenerateReleaseAndPublishReq.labels:type_name -> google.protobuf.Struct - 298, // 139: pbds.ListInstancesReq.page:type_name -> pbbase.BasePage + 251, // 38: pbds.GetHookResp.attachment:type_name -> pbhook.HookAttachment + 253, // 39: pbds.GetHookResp.revision:type_name -> pbbase.Revision + 216, // 40: pbds.GetHookInfoSpec.releases:type_name -> pbds.GetHookInfoSpec.Releases + 217, // 41: pbds.ListHooksResp.details:type_name -> pbds.ListHooksResp.Detail + 254, // 42: pbds.ListHookTagResp.details:type_name -> pbhook.CountHookTags + 218, // 43: pbds.ListHookReferencesResp.details:type_name -> pbds.ListHookReferencesResp.Detail + 255, // 44: pbds.CreateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment + 256, // 45: pbds.CreateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec + 219, // 46: pbds.ListHookRevisionsResp.details:type_name -> pbds.ListHookRevisionsResp.ListHookRevisionsData + 255, // 47: pbds.UpdateHookRevisionReq.attachment:type_name -> pbhr.HookRevisionAttachment + 256, // 48: pbds.UpdateHookRevisionReq.spec:type_name -> pbhr.HookRevisionSpec + 220, // 49: pbds.ListHookRevisionReferencesResp.details:type_name -> pbds.ListHookRevisionReferencesResp.Detail + 221, // 50: pbds.GetReleaseHookResp.pre_hook:type_name -> pbds.GetReleaseHookResp.Hook + 221, // 51: pbds.GetReleaseHookResp.post_hook:type_name -> pbds.GetReleaseHookResp.Hook + 257, // 52: pbds.CreateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment + 258, // 53: pbds.CreateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec + 259, // 54: pbds.ListTemplateSpacesResp.details:type_name -> pbts.TemplateSpace + 257, // 55: pbds.UpdateTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment + 258, // 56: pbds.UpdateTemplateSpaceReq.spec:type_name -> pbts.TemplateSpaceSpec + 257, // 57: pbds.DeleteTemplateSpaceReq.attachment:type_name -> pbts.TemplateSpaceAttachment + 259, // 58: pbds.ListTmplSpacesByIDsResp.details:type_name -> pbts.TemplateSpace + 260, // 59: pbds.CreateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 261, // 60: pbds.CreateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec + 262, // 61: pbds.CreateTemplateReq.tr_spec:type_name -> pbtr.TemplateRevisionSpec + 263, // 62: pbds.ListTemplatesResp.details:type_name -> pbtemplate.Template + 260, // 63: pbds.UpdateTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 261, // 64: pbds.UpdateTemplateReq.spec:type_name -> pbtemplate.TemplateSpec + 260, // 65: pbds.DeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 260, // 66: pbds.BatchDeleteTemplateReq.attachment:type_name -> pbtemplate.TemplateAttachment + 263, // 67: pbds.ListTemplatesByIDsResp.details:type_name -> pbtemplate.Template + 263, // 68: pbds.ListTemplatesNotBoundResp.details:type_name -> pbtemplate.Template + 263, // 69: pbds.ListTmplsOfTmplSetResp.details:type_name -> pbtemplate.Template + 222, // 70: pbds.ListTemplateByTupleReq.items:type_name -> pbds.ListTemplateByTupleReq.Item + 223, // 71: pbds.ListTemplateByTupleReqResp.items:type_name -> pbds.ListTemplateByTupleReqResp.Item + 224, // 72: pbds.BatchUpsertTemplatesReq.items:type_name -> pbds.BatchUpsertTemplatesReq.Item + 264, // 73: pbds.CreateTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment + 262, // 74: pbds.CreateTemplateRevisionReq.spec:type_name -> pbtr.TemplateRevisionSpec + 265, // 75: pbds.ListTemplateRevisionsResp.details:type_name -> pbtr.TemplateRevision + 264, // 76: pbds.DeleteTemplateRevisionReq.attachment:type_name -> pbtr.TemplateRevisionAttachment + 265, // 77: pbds.ListTemplateRevisionsByIDsResp.details:type_name -> pbtr.TemplateRevision + 266, // 78: pbds.ListTmplRevisionNamesByTmplIDsResp.details:type_name -> pbtr.TemplateRevisionNamesDetail + 267, // 79: pbds.CreateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment + 268, // 80: pbds.CreateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec + 269, // 81: pbds.ListTemplateSetsResp.details:type_name -> pbtset.TemplateSet + 267, // 82: pbds.UpdateTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment + 268, // 83: pbds.UpdateTemplateSetReq.spec:type_name -> pbtset.TemplateSetSpec + 267, // 84: pbds.DeleteTemplateSetReq.attachment:type_name -> pbtset.TemplateSetAttachment + 269, // 85: pbds.ListAppTemplateSetsResp.details:type_name -> pbtset.TemplateSet + 269, // 86: pbds.ListTemplateSetsByIDsResp.details:type_name -> pbtset.TemplateSet + 270, // 87: pbds.ListTemplateSetBriefInfoByIDsResp.details:type_name -> pbtset.TemplateSetBriefInfo + 271, // 88: pbds.ListTmplSetsOfBizResp.details:type_name -> pbtset.TemplateSetOfBizDetail + 272, // 89: pbds.CreateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 273, // 90: pbds.CreateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec + 274, // 91: pbds.ListAppTemplateBindingsResp.details:type_name -> pbatb.AppTemplateBinding + 272, // 92: pbds.UpdateAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 273, // 93: pbds.UpdateAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec + 272, // 94: pbds.DeleteAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 275, // 95: pbds.ListAppBoundTmplRevisionsResp.details:type_name -> pbatb.AppBoundTmplRevision + 276, // 96: pbds.ListReleasedAppBoundTmplRevisionsResp.details:type_name -> pbatb.ReleasedAppBoundTmplRevision + 276, // 97: pbds.GetReleasedAppBoundTmplRevisionResp.detail:type_name -> pbatb.ReleasedAppBoundTmplRevision + 272, // 98: pbds.CheckAppTemplateBindingReq.attachment:type_name -> pbatb.AppTemplateBindingAttachment + 273, // 99: pbds.CheckAppTemplateBindingReq.spec:type_name -> pbatb.AppTemplateBindingSpec + 277, // 100: pbds.CheckAppTemplateBindingResp.details:type_name -> pbatb.Conflict + 278, // 101: pbds.GetAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference + 278, // 102: pbds.GetReleasedAppTmplVariableRefsResp.details:type_name -> pbatv.AppTemplateVariableReference + 279, // 103: pbds.UpdateAppTmplVariablesReq.attachment:type_name -> pbatv.AppTemplateVariableAttachment + 280, // 104: pbds.UpdateAppTmplVariablesReq.spec:type_name -> pbatv.AppTemplateVariableSpec + 248, // 105: pbds.ListAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec + 248, // 106: pbds.ListReleasedAppTmplVariablesResp.details:type_name -> pbtv.TemplateVariableSpec + 281, // 107: pbds.ListTmplBoundCountsResp.details:type_name -> pbtbr.TemplateBoundCounts + 282, // 108: pbds.ListTmplRevisionBoundCountsResp.details:type_name -> pbtbr.TemplateRevisionBoundCounts + 283, // 109: pbds.ListTmplSetBoundCountsResp.details:type_name -> pbtbr.TemplateSetBoundCounts + 284, // 110: pbds.ListTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateBoundUnnamedAppDetail + 285, // 111: pbds.ListTmplBoundNamedAppsResp.details:type_name -> pbtbr.TemplateBoundNamedAppDetail + 286, // 112: pbds.ListTmplBoundTmplSetsResp.details:type_name -> pbtbr.TemplateBoundTemplateSetDetail + 287, // 113: pbds.ListMultiTmplBoundTmplSetsResp.details:type_name -> pbtbr.MultiTemplateBoundTemplateSetDetail + 288, // 114: pbds.ListTmplRevisionBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundUnnamedAppDetail + 289, // 115: pbds.ListTmplRevisionBoundNamedAppsResp.details:type_name -> pbtbr.TemplateRevisionBoundNamedAppDetail + 290, // 116: pbds.ListTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundUnnamedAppDetail + 291, // 117: pbds.ListMultiTmplSetBoundUnnamedAppsResp.details:type_name -> pbtbr.MultiTemplateSetBoundUnnamedAppDetail + 292, // 118: pbds.ListTmplSetBoundNamedAppsResp.details:type_name -> pbtbr.TemplateSetBoundNamedAppDetail + 293, // 119: pbds.ListLatestTmplBoundUnnamedAppsResp.details:type_name -> pbtbr.LatestTemplateBoundUnnamedAppDetail + 294, // 120: pbds.CreateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment + 248, // 121: pbds.CreateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec + 248, // 122: pbds.ImportTemplateVariablesReq.specs:type_name -> pbtv.TemplateVariableSpec + 295, // 123: pbds.ListTemplateVariablesResp.details:type_name -> pbtv.TemplateVariable + 294, // 124: pbds.UpdateTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment + 248, // 125: pbds.UpdateTemplateVariableReq.spec:type_name -> pbtv.TemplateVariableSpec + 294, // 126: pbds.DeleteTemplateVariableReq.attachment:type_name -> pbtv.TemplateVariableAttachment + 296, // 127: pbds.CreateGroupReq.attachment:type_name -> pbgroup.GroupAttachment + 297, // 128: pbds.CreateGroupReq.spec:type_name -> pbgroup.GroupSpec + 298, // 129: pbds.ListAllGroupsResp.details:type_name -> pbgroup.Group + 225, // 130: pbds.ListAppGroupsResp.details:type_name -> pbds.ListAppGroupsResp.ListAppGroupsData + 296, // 131: pbds.UpdateGroupReq.attachment:type_name -> pbgroup.GroupAttachment + 297, // 132: pbds.UpdateGroupReq.spec:type_name -> pbgroup.GroupSpec + 296, // 133: pbds.DeleteGroupReq.attachment:type_name -> pbgroup.GroupAttachment + 226, // 134: pbds.CountGroupsReleasedAppsResp.data:type_name -> pbds.CountGroupsReleasedAppsResp.CountGroupsReleasedAppsData + 227, // 135: pbds.ListGroupReleasedAppsResp.details:type_name -> pbds.ListGroupReleasedAppsResp.ListGroupReleasedAppsData + 299, // 136: pbds.PublishReq.labels:type_name -> google.protobuf.Struct + 248, // 137: pbds.GenerateReleaseAndPublishReq.variables:type_name -> pbtv.TemplateVariableSpec + 299, // 138: pbds.GenerateReleaseAndPublishReq.labels:type_name -> google.protobuf.Struct + 300, // 139: pbds.ListInstancesReq.page:type_name -> pbbase.BasePage 200, // 140: pbds.ListInstancesResp.details:type_name -> pbds.InstanceResource 203, // 141: pbds.FetchInstanceInfoResp.details:type_name -> pbds.InstanceInfo - 299, // 142: pbds.CreateKvReq.attachment:type_name -> pbkv.KvAttachment - 300, // 143: pbds.CreateKvReq.spec:type_name -> pbkv.KvSpec - 299, // 144: pbds.UpdateKvReq.attachment:type_name -> pbkv.KvAttachment - 300, // 145: pbds.UpdateKvReq.spec:type_name -> pbkv.KvSpec - 301, // 146: pbds.ListKvsResp.details:type_name -> pbkv.Kv - 300, // 147: pbds.DeleteKvReq.spec:type_name -> pbkv.KvSpec - 299, // 148: pbds.DeleteKvReq.attachment:type_name -> pbkv.KvAttachment - 226, // 149: pbds.BatchUpsertKvsReq.kvs:type_name -> pbds.BatchUpsertKvsReq.Kv - 300, // 150: pbds.UnDeleteKvReq.spec:type_name -> pbkv.KvSpec - 299, // 151: pbds.UnDeleteKvReq.attachment:type_name -> pbkv.KvAttachment - 236, // 152: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_attachment:type_name -> pbci.ConfigItemAttachment - 237, // 153: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_spec:type_name -> pbci.ConfigItemSpec - 238, // 154: pbds.BatchUpsertConfigItemsReq.ConfigItem.content_spec:type_name -> pbcontent.ContentSpec - 302, // 155: pbds.ListHooksResp.Detail.hook:type_name -> pbhook.Hook - 303, // 156: pbds.ListHookRevisionsResp.ListHookRevisionsData.hook_revision:type_name -> pbhr.HookRevision - 261, // 157: pbds.ListTemplateByTupleReqResp.Item.template:type_name -> pbtemplate.Template - 263, // 158: pbds.ListTemplateByTupleReqResp.Item.template_revision:type_name -> pbtr.TemplateRevision - 261, // 159: pbds.BatchUpsertTemplatesReq.Item.template:type_name -> pbtemplate.Template - 263, // 160: pbds.BatchUpsertTemplatesReq.Item.template_revision:type_name -> pbtr.TemplateRevision - 297, // 161: pbds.ListAppGroupsResp.ListAppGroupsData.old_selector:type_name -> google.protobuf.Struct - 297, // 162: pbds.ListAppGroupsResp.ListAppGroupsData.new_selector:type_name -> google.protobuf.Struct - 299, // 163: pbds.BatchUpsertKvsReq.Kv.kv_attachment:type_name -> pbkv.KvAttachment - 300, // 164: pbds.BatchUpsertKvsReq.Kv.kv_spec:type_name -> pbkv.KvSpec - 16, // 165: pbds.Data.CreateApp:input_type -> pbds.CreateAppReq - 17, // 166: pbds.Data.UpdateApp:input_type -> pbds.UpdateAppReq - 18, // 167: pbds.Data.DeleteApp:input_type -> pbds.DeleteAppReq - 19, // 168: pbds.Data.GetApp:input_type -> pbds.GetAppReq - 20, // 169: pbds.Data.GetAppByID:input_type -> pbds.GetAppByIDReq - 21, // 170: pbds.Data.GetAppByName:input_type -> pbds.GetAppByNameReq - 22, // 171: pbds.Data.ListAppsRest:input_type -> pbds.ListAppsRestReq - 24, // 172: pbds.Data.ListAppsByIDs:input_type -> pbds.ListAppsByIDsReq - 26, // 173: pbds.Data.CreateConfigItem:input_type -> pbds.CreateConfigItemReq - 27, // 174: pbds.Data.BatchUpsertConfigItems:input_type -> pbds.BatchUpsertConfigItemsReq - 29, // 175: pbds.Data.UpdateConfigItem:input_type -> pbds.UpdateConfigItemReq - 30, // 176: pbds.Data.DeleteConfigItem:input_type -> pbds.DeleteConfigItemReq - 31, // 177: pbds.Data.GetConfigItem:input_type -> pbds.GetConfigItemReq - 32, // 178: pbds.Data.ListConfigItems:input_type -> pbds.ListConfigItemsReq - 34, // 179: pbds.Data.ListReleasedConfigItems:input_type -> pbds.ListReleasedConfigItemsReq - 36, // 180: pbds.Data.ListConfigItemCount:input_type -> pbds.ListConfigItemCountReq - 38, // 181: pbds.Data.ListConfigItemByTuple:input_type -> pbds.ListConfigItemByTupleReq - 14, // 182: pbds.Data.UpdateConfigHook:input_type -> pbds.UpdateConfigHookReq - 40, // 183: pbds.Data.CreateContent:input_type -> pbds.CreateContentReq - 41, // 184: pbds.Data.GetContent:input_type -> pbds.GetContentReq - 42, // 185: pbds.Data.CreateCommit:input_type -> pbds.CreateCommitReq - 43, // 186: pbds.Data.GetLatestCommit:input_type -> pbds.GetLatestCommitReq - 44, // 187: pbds.Data.CreateRelease:input_type -> pbds.CreateReleaseReq - 45, // 188: pbds.Data.ListReleases:input_type -> pbds.ListReleasesReq - 47, // 189: pbds.Data.GetReleaseByName:input_type -> pbds.GetReleaseByNameReq - 48, // 190: pbds.Data.DeprecateRelease:input_type -> pbds.DeprecateReleaseReq - 49, // 191: pbds.Data.UnDeprecateRelease:input_type -> pbds.UnDeprecateReleaseReq - 50, // 192: pbds.Data.DeleteRelease:input_type -> pbds.DeleteReleaseReq - 51, // 193: pbds.Data.GetReleasedConfigItem:input_type -> pbds.GetReleasedCIReq - 52, // 194: pbds.Data.GetReleasedKv:input_type -> pbds.GetReleasedKvReq - 53, // 195: pbds.Data.ListReleasedKvs:input_type -> pbds.ListReleasedKvReq - 55, // 196: pbds.Data.CreateHook:input_type -> pbds.CreateHookReq - 60, // 197: pbds.Data.ListHooks:input_type -> pbds.ListHooksReq - 65, // 198: pbds.Data.DeleteHook:input_type -> pbds.DeleteHookReq - 56, // 199: pbds.Data.ListHookTags:input_type -> pbds.ListHookTagReq - 63, // 200: pbds.Data.ListHookReferences:input_type -> pbds.ListHookReferencesReq - 57, // 201: pbds.Data.GetHook:input_type -> pbds.GetHookReq - 66, // 202: pbds.Data.CreateHookRevision:input_type -> pbds.CreateHookRevisionReq - 67, // 203: pbds.Data.ListHookRevisions:input_type -> pbds.ListHookRevisionsReq - 69, // 204: pbds.Data.GetHookRevisionByID:input_type -> pbds.GetHookRevisionByIdReq - 70, // 205: pbds.Data.DeleteHookRevision:input_type -> pbds.DeleteHookRevisionReq - 71, // 206: pbds.Data.PublishHookRevision:input_type -> pbds.PublishHookRevisionReq - 72, // 207: pbds.Data.GetHookRevisionByPubState:input_type -> pbds.GetByPubStateReq - 73, // 208: pbds.Data.UpdateHookRevision:input_type -> pbds.UpdateHookRevisionReq - 74, // 209: pbds.Data.ListHookRevisionReferences:input_type -> pbds.ListHookRevisionReferencesReq - 76, // 210: pbds.Data.GetReleaseHook:input_type -> pbds.GetReleaseHookReq - 78, // 211: pbds.Data.CreateTemplateSpace:input_type -> pbds.CreateTemplateSpaceReq - 79, // 212: pbds.Data.ListTemplateSpaces:input_type -> pbds.ListTemplateSpacesReq - 81, // 213: pbds.Data.UpdateTemplateSpace:input_type -> pbds.UpdateTemplateSpaceReq - 82, // 214: pbds.Data.DeleteTemplateSpace:input_type -> pbds.DeleteTemplateSpaceReq - 304, // 215: pbds.Data.GetAllBizsOfTmplSpaces:input_type -> pbbase.EmptyReq - 84, // 216: pbds.Data.CreateDefaultTmplSpace:input_type -> pbds.CreateDefaultTmplSpaceReq - 85, // 217: pbds.Data.ListTmplSpacesByIDs:input_type -> pbds.ListTmplSpacesByIDsReq - 87, // 218: pbds.Data.CreateTemplate:input_type -> pbds.CreateTemplateReq - 88, // 219: pbds.Data.ListTemplates:input_type -> pbds.ListTemplatesReq - 90, // 220: pbds.Data.UpdateTemplate:input_type -> pbds.UpdateTemplateReq - 91, // 221: pbds.Data.DeleteTemplate:input_type -> pbds.DeleteTemplateReq - 92, // 222: pbds.Data.BatchDeleteTemplate:input_type -> pbds.BatchDeleteTemplateReq - 93, // 223: pbds.Data.AddTmplsToTmplSets:input_type -> pbds.AddTmplsToTmplSetsReq - 94, // 224: pbds.Data.DeleteTmplsFromTmplSets:input_type -> pbds.DeleteTmplsFromTmplSetsReq - 95, // 225: pbds.Data.ListTemplatesByIDs:input_type -> pbds.ListTemplatesByIDsReq - 97, // 226: pbds.Data.ListTemplatesNotBound:input_type -> pbds.ListTemplatesNotBoundReq - 99, // 227: pbds.Data.ListTmplsOfTmplSet:input_type -> pbds.ListTmplsOfTmplSetReq - 101, // 228: pbds.Data.ListTemplateByTuple:input_type -> pbds.ListTemplateByTupleReq - 103, // 229: pbds.Data.BatchUpsertTemplates:input_type -> pbds.BatchUpsertTemplatesReq - 105, // 230: pbds.Data.CreateTemplateRevision:input_type -> pbds.CreateTemplateRevisionReq - 106, // 231: pbds.Data.ListTemplateRevisions:input_type -> pbds.ListTemplateRevisionsReq - 108, // 232: pbds.Data.DeleteTemplateRevision:input_type -> pbds.DeleteTemplateRevisionReq - 109, // 233: pbds.Data.ListTemplateRevisionsByIDs:input_type -> pbds.ListTemplateRevisionsByIDsReq - 111, // 234: pbds.Data.ListTmplRevisionNamesByTmplIDs:input_type -> pbds.ListTmplRevisionNamesByTmplIDsReq - 113, // 235: pbds.Data.CreateTemplateSet:input_type -> pbds.CreateTemplateSetReq - 114, // 236: pbds.Data.ListTemplateSets:input_type -> pbds.ListTemplateSetsReq - 116, // 237: pbds.Data.UpdateTemplateSet:input_type -> pbds.UpdateTemplateSetReq - 117, // 238: pbds.Data.DeleteTemplateSet:input_type -> pbds.DeleteTemplateSetReq - 118, // 239: pbds.Data.ListAppTemplateSets:input_type -> pbds.ListAppTemplateSetsReq - 120, // 240: pbds.Data.ListTemplateSetsByIDs:input_type -> pbds.ListTemplateSetsByIDsReq - 122, // 241: pbds.Data.ListTemplateSetBriefInfoByIDs:input_type -> pbds.ListTemplateSetBriefInfoByIDsReq - 124, // 242: pbds.Data.ListTmplSetsOfBiz:input_type -> pbds.ListTmplSetsOfBizReq - 126, // 243: pbds.Data.CreateAppTemplateBinding:input_type -> pbds.CreateAppTemplateBindingReq - 127, // 244: pbds.Data.ListAppTemplateBindings:input_type -> pbds.ListAppTemplateBindingsReq - 129, // 245: pbds.Data.UpdateAppTemplateBinding:input_type -> pbds.UpdateAppTemplateBindingReq - 130, // 246: pbds.Data.DeleteAppTemplateBinding:input_type -> pbds.DeleteAppTemplateBindingReq - 131, // 247: pbds.Data.ListAppBoundTmplRevisions:input_type -> pbds.ListAppBoundTmplRevisionsReq - 133, // 248: pbds.Data.ListReleasedAppBoundTmplRevisions:input_type -> pbds.ListReleasedAppBoundTmplRevisionsReq - 135, // 249: pbds.Data.GetReleasedAppBoundTmplRevision:input_type -> pbds.GetReleasedAppBoundTmplRevisionReq - 137, // 250: pbds.Data.CheckAppTemplateBinding:input_type -> pbds.CheckAppTemplateBindingReq - 139, // 251: pbds.Data.ExtractAppTmplVariables:input_type -> pbds.ExtractAppTmplVariablesReq - 141, // 252: pbds.Data.GetAppTmplVariableRefs:input_type -> pbds.GetAppTmplVariableRefsReq - 143, // 253: pbds.Data.GetReleasedAppTmplVariableRefs:input_type -> pbds.GetReleasedAppTmplVariableRefsReq - 145, // 254: pbds.Data.UpdateAppTmplVariables:input_type -> pbds.UpdateAppTmplVariablesReq - 146, // 255: pbds.Data.ListAppTmplVariables:input_type -> pbds.ListAppTmplVariablesReq - 148, // 256: pbds.Data.ListReleasedAppTmplVariables:input_type -> pbds.ListReleasedAppTmplVariablesReq - 150, // 257: pbds.Data.ListTmplBoundCounts:input_type -> pbds.ListTmplBoundCountsReq - 152, // 258: pbds.Data.ListTmplRevisionBoundCounts:input_type -> pbds.ListTmplRevisionBoundCountsReq - 154, // 259: pbds.Data.ListTmplSetBoundCounts:input_type -> pbds.ListTmplSetBoundCountsReq - 156, // 260: pbds.Data.ListTmplBoundUnnamedApps:input_type -> pbds.ListTmplBoundUnnamedAppsReq - 158, // 261: pbds.Data.ListTmplBoundNamedApps:input_type -> pbds.ListTmplBoundNamedAppsReq - 160, // 262: pbds.Data.ListTmplBoundTmplSets:input_type -> pbds.ListTmplBoundTmplSetsReq - 162, // 263: pbds.Data.ListMultiTmplBoundTmplSets:input_type -> pbds.ListMultiTmplBoundTmplSetsReq - 164, // 264: pbds.Data.ListTmplRevisionBoundUnnamedApps:input_type -> pbds.ListTmplRevisionBoundUnnamedAppsReq - 166, // 265: pbds.Data.ListTmplRevisionBoundNamedApps:input_type -> pbds.ListTmplRevisionBoundNamedAppsReq - 168, // 266: pbds.Data.ListTmplSetBoundUnnamedApps:input_type -> pbds.ListTmplSetBoundUnnamedAppsReq - 170, // 267: pbds.Data.ListMultiTmplSetBoundUnnamedApps:input_type -> pbds.ListMultiTmplSetBoundUnnamedAppsReq - 172, // 268: pbds.Data.ListTmplSetBoundNamedApps:input_type -> pbds.ListTmplSetBoundNamedAppsReq - 174, // 269: pbds.Data.ListLatestTmplBoundUnnamedApps:input_type -> pbds.ListLatestTmplBoundUnnamedAppsReq - 176, // 270: pbds.Data.CreateTemplateVariable:input_type -> pbds.CreateTemplateVariableReq - 179, // 271: pbds.Data.ListTemplateVariables:input_type -> pbds.ListTemplateVariablesReq - 181, // 272: pbds.Data.UpdateTemplateVariable:input_type -> pbds.UpdateTemplateVariableReq - 182, // 273: pbds.Data.DeleteTemplateVariable:input_type -> pbds.DeleteTemplateVariableReq - 177, // 274: pbds.Data.ImportTemplateVariables:input_type -> pbds.ImportTemplateVariablesReq - 183, // 275: pbds.Data.CreateGroup:input_type -> pbds.CreateGroupReq - 184, // 276: pbds.Data.ListAllGroups:input_type -> pbds.ListAllGroupsReq - 186, // 277: pbds.Data.ListAppGroups:input_type -> pbds.ListAppGroupsReq - 188, // 278: pbds.Data.GetGroupByName:input_type -> pbds.GetGroupByNameReq - 189, // 279: pbds.Data.UpdateGroup:input_type -> pbds.UpdateGroupReq - 190, // 280: pbds.Data.DeleteGroup:input_type -> pbds.DeleteGroupReq - 191, // 281: pbds.Data.CountGroupsReleasedApps:input_type -> pbds.CountGroupsReleasedAppsReq - 193, // 282: pbds.Data.ListGroupReleasedApps:input_type -> pbds.ListGroupReleasedAppsReq - 195, // 283: pbds.Data.Publish:input_type -> pbds.PublishReq - 196, // 284: pbds.Data.GenerateReleaseAndPublish:input_type -> pbds.GenerateReleaseAndPublishReq - 7, // 285: pbds.Data.CreateCredential:input_type -> pbds.CreateCredentialReq - 8, // 286: pbds.Data.ListCredentials:input_type -> pbds.ListCredentialReq - 11, // 287: pbds.Data.DeleteCredential:input_type -> pbds.DeleteCredentialReq - 10, // 288: pbds.Data.UpdateCredential:input_type -> pbds.UpdateCredentialReq - 4, // 289: pbds.Data.ListCredentialScopes:input_type -> pbds.ListCredentialScopesReq - 0, // 290: pbds.Data.UpdateCredentialScopes:input_type -> pbds.UpdateCredentialScopesReq - 205, // 291: pbds.Data.CreateKv:input_type -> pbds.CreateKvReq - 206, // 292: pbds.Data.UpdateKv:input_type -> pbds.UpdateKvReq - 207, // 293: pbds.Data.ListKvs:input_type -> pbds.ListKvsReq - 209, // 294: pbds.Data.DeleteKv:input_type -> pbds.DeleteKvReq - 210, // 295: pbds.Data.BatchUpsertKvs:input_type -> pbds.BatchUpsertKvsReq - 211, // 296: pbds.Data.UnDeleteKv:input_type -> pbds.UnDeleteKvReq - 198, // 297: pbds.Data.ListInstances:input_type -> pbds.ListInstancesReq - 201, // 298: pbds.Data.FetchInstanceInfo:input_type -> pbds.FetchInstanceInfoReq - 204, // 299: pbds.Data.Ping:input_type -> pbds.PingMsg - 13, // 300: pbds.Data.CreateApp:output_type -> pbds.CreateResp - 235, // 301: pbds.Data.UpdateApp:output_type -> pbapp.App - 305, // 302: pbds.Data.DeleteApp:output_type -> pbbase.EmptyResp - 235, // 303: pbds.Data.GetApp:output_type -> pbapp.App - 235, // 304: pbds.Data.GetAppByID:output_type -> pbapp.App - 235, // 305: pbds.Data.GetAppByName:output_type -> pbapp.App - 23, // 306: pbds.Data.ListAppsRest:output_type -> pbds.ListAppsResp - 25, // 307: pbds.Data.ListAppsByIDs:output_type -> pbds.ListAppsByIDsResp - 13, // 308: pbds.Data.CreateConfigItem:output_type -> pbds.CreateResp - 28, // 309: pbds.Data.BatchUpsertConfigItems:output_type -> pbds.BatchUpsertConfigItemsResp - 305, // 310: pbds.Data.UpdateConfigItem:output_type -> pbbase.EmptyResp - 305, // 311: pbds.Data.DeleteConfigItem:output_type -> pbbase.EmptyResp - 239, // 312: pbds.Data.GetConfigItem:output_type -> pbci.ConfigItem - 33, // 313: pbds.Data.ListConfigItems:output_type -> pbds.ListConfigItemsResp - 35, // 314: pbds.Data.ListReleasedConfigItems:output_type -> pbds.ListReleasedConfigItemsResp - 37, // 315: pbds.Data.ListConfigItemCount:output_type -> pbds.ListConfigItemCountResp - 39, // 316: pbds.Data.ListConfigItemByTuple:output_type -> pbds.ListConfigItemByTupleResp - 305, // 317: pbds.Data.UpdateConfigHook:output_type -> pbbase.EmptyResp - 13, // 318: pbds.Data.CreateContent:output_type -> pbds.CreateResp - 306, // 319: pbds.Data.GetContent:output_type -> pbcontent.Content - 13, // 320: pbds.Data.CreateCommit:output_type -> pbds.CreateResp - 307, // 321: pbds.Data.GetLatestCommit:output_type -> pbcommit.Commit - 13, // 322: pbds.Data.CreateRelease:output_type -> pbds.CreateResp - 46, // 323: pbds.Data.ListReleases:output_type -> pbds.ListReleasesResp - 247, // 324: pbds.Data.GetReleaseByName:output_type -> pbrelease.Release - 305, // 325: pbds.Data.DeprecateRelease:output_type -> pbbase.EmptyResp - 305, // 326: pbds.Data.UnDeprecateRelease:output_type -> pbbase.EmptyResp - 305, // 327: pbds.Data.DeleteRelease:output_type -> pbbase.EmptyResp - 240, // 328: pbds.Data.GetReleasedConfigItem:output_type -> pbrci.ReleasedConfigItem - 248, // 329: pbds.Data.GetReleasedKv:output_type -> pbrkv.ReleasedKv - 54, // 330: pbds.Data.ListReleasedKvs:output_type -> pbds.ListReleasedKvResp - 13, // 331: pbds.Data.CreateHook:output_type -> pbds.CreateResp - 61, // 332: pbds.Data.ListHooks:output_type -> pbds.ListHooksResp - 305, // 333: pbds.Data.DeleteHook:output_type -> pbbase.EmptyResp - 62, // 334: pbds.Data.ListHookTags:output_type -> pbds.ListHookTagResp - 64, // 335: pbds.Data.ListHookReferences:output_type -> pbds.ListHookReferencesResp - 58, // 336: pbds.Data.GetHook:output_type -> pbds.GetHookResp - 13, // 337: pbds.Data.CreateHookRevision:output_type -> pbds.CreateResp - 68, // 338: pbds.Data.ListHookRevisions:output_type -> pbds.ListHookRevisionsResp - 303, // 339: pbds.Data.GetHookRevisionByID:output_type -> pbhr.HookRevision - 305, // 340: pbds.Data.DeleteHookRevision:output_type -> pbbase.EmptyResp - 305, // 341: pbds.Data.PublishHookRevision:output_type -> pbbase.EmptyResp - 303, // 342: pbds.Data.GetHookRevisionByPubState:output_type -> pbhr.HookRevision - 305, // 343: pbds.Data.UpdateHookRevision:output_type -> pbbase.EmptyResp - 75, // 344: pbds.Data.ListHookRevisionReferences:output_type -> pbds.ListHookRevisionReferencesResp - 77, // 345: pbds.Data.GetReleaseHook:output_type -> pbds.GetReleaseHookResp - 13, // 346: pbds.Data.CreateTemplateSpace:output_type -> pbds.CreateResp - 80, // 347: pbds.Data.ListTemplateSpaces:output_type -> pbds.ListTemplateSpacesResp - 305, // 348: pbds.Data.UpdateTemplateSpace:output_type -> pbbase.EmptyResp - 305, // 349: pbds.Data.DeleteTemplateSpace:output_type -> pbbase.EmptyResp - 83, // 350: pbds.Data.GetAllBizsOfTmplSpaces:output_type -> pbds.GetAllBizsOfTmplSpacesResp - 13, // 351: pbds.Data.CreateDefaultTmplSpace:output_type -> pbds.CreateResp - 86, // 352: pbds.Data.ListTmplSpacesByIDs:output_type -> pbds.ListTmplSpacesByIDsResp - 13, // 353: pbds.Data.CreateTemplate:output_type -> pbds.CreateResp - 89, // 354: pbds.Data.ListTemplates:output_type -> pbds.ListTemplatesResp - 305, // 355: pbds.Data.UpdateTemplate:output_type -> pbbase.EmptyResp - 305, // 356: pbds.Data.DeleteTemplate:output_type -> pbbase.EmptyResp - 305, // 357: pbds.Data.BatchDeleteTemplate:output_type -> pbbase.EmptyResp - 305, // 358: pbds.Data.AddTmplsToTmplSets:output_type -> pbbase.EmptyResp - 305, // 359: pbds.Data.DeleteTmplsFromTmplSets:output_type -> pbbase.EmptyResp - 96, // 360: pbds.Data.ListTemplatesByIDs:output_type -> pbds.ListTemplatesByIDsResp - 98, // 361: pbds.Data.ListTemplatesNotBound:output_type -> pbds.ListTemplatesNotBoundResp - 100, // 362: pbds.Data.ListTmplsOfTmplSet:output_type -> pbds.ListTmplsOfTmplSetResp - 102, // 363: pbds.Data.ListTemplateByTuple:output_type -> pbds.ListTemplateByTupleReqResp - 104, // 364: pbds.Data.BatchUpsertTemplates:output_type -> pbds.BatchUpsertTemplatesReqResp - 13, // 365: pbds.Data.CreateTemplateRevision:output_type -> pbds.CreateResp - 107, // 366: pbds.Data.ListTemplateRevisions:output_type -> pbds.ListTemplateRevisionsResp - 305, // 367: pbds.Data.DeleteTemplateRevision:output_type -> pbbase.EmptyResp - 110, // 368: pbds.Data.ListTemplateRevisionsByIDs:output_type -> pbds.ListTemplateRevisionsByIDsResp - 112, // 369: pbds.Data.ListTmplRevisionNamesByTmplIDs:output_type -> pbds.ListTmplRevisionNamesByTmplIDsResp - 13, // 370: pbds.Data.CreateTemplateSet:output_type -> pbds.CreateResp - 115, // 371: pbds.Data.ListTemplateSets:output_type -> pbds.ListTemplateSetsResp - 305, // 372: pbds.Data.UpdateTemplateSet:output_type -> pbbase.EmptyResp - 305, // 373: pbds.Data.DeleteTemplateSet:output_type -> pbbase.EmptyResp - 119, // 374: pbds.Data.ListAppTemplateSets:output_type -> pbds.ListAppTemplateSetsResp - 121, // 375: pbds.Data.ListTemplateSetsByIDs:output_type -> pbds.ListTemplateSetsByIDsResp - 123, // 376: pbds.Data.ListTemplateSetBriefInfoByIDs:output_type -> pbds.ListTemplateSetBriefInfoByIDsResp - 125, // 377: pbds.Data.ListTmplSetsOfBiz:output_type -> pbds.ListTmplSetsOfBizResp - 13, // 378: pbds.Data.CreateAppTemplateBinding:output_type -> pbds.CreateResp - 128, // 379: pbds.Data.ListAppTemplateBindings:output_type -> pbds.ListAppTemplateBindingsResp - 305, // 380: pbds.Data.UpdateAppTemplateBinding:output_type -> pbbase.EmptyResp - 305, // 381: pbds.Data.DeleteAppTemplateBinding:output_type -> pbbase.EmptyResp - 132, // 382: pbds.Data.ListAppBoundTmplRevisions:output_type -> pbds.ListAppBoundTmplRevisionsResp - 134, // 383: pbds.Data.ListReleasedAppBoundTmplRevisions:output_type -> pbds.ListReleasedAppBoundTmplRevisionsResp - 136, // 384: pbds.Data.GetReleasedAppBoundTmplRevision:output_type -> pbds.GetReleasedAppBoundTmplRevisionResp - 138, // 385: pbds.Data.CheckAppTemplateBinding:output_type -> pbds.CheckAppTemplateBindingResp - 140, // 386: pbds.Data.ExtractAppTmplVariables:output_type -> pbds.ExtractAppTmplVariablesResp - 142, // 387: pbds.Data.GetAppTmplVariableRefs:output_type -> pbds.GetAppTmplVariableRefsResp - 144, // 388: pbds.Data.GetReleasedAppTmplVariableRefs:output_type -> pbds.GetReleasedAppTmplVariableRefsResp - 305, // 389: pbds.Data.UpdateAppTmplVariables:output_type -> pbbase.EmptyResp - 147, // 390: pbds.Data.ListAppTmplVariables:output_type -> pbds.ListAppTmplVariablesResp - 149, // 391: pbds.Data.ListReleasedAppTmplVariables:output_type -> pbds.ListReleasedAppTmplVariablesResp - 151, // 392: pbds.Data.ListTmplBoundCounts:output_type -> pbds.ListTmplBoundCountsResp - 153, // 393: pbds.Data.ListTmplRevisionBoundCounts:output_type -> pbds.ListTmplRevisionBoundCountsResp - 155, // 394: pbds.Data.ListTmplSetBoundCounts:output_type -> pbds.ListTmplSetBoundCountsResp - 157, // 395: pbds.Data.ListTmplBoundUnnamedApps:output_type -> pbds.ListTmplBoundUnnamedAppsResp - 159, // 396: pbds.Data.ListTmplBoundNamedApps:output_type -> pbds.ListTmplBoundNamedAppsResp - 161, // 397: pbds.Data.ListTmplBoundTmplSets:output_type -> pbds.ListTmplBoundTmplSetsResp - 163, // 398: pbds.Data.ListMultiTmplBoundTmplSets:output_type -> pbds.ListMultiTmplBoundTmplSetsResp - 165, // 399: pbds.Data.ListTmplRevisionBoundUnnamedApps:output_type -> pbds.ListTmplRevisionBoundUnnamedAppsResp - 167, // 400: pbds.Data.ListTmplRevisionBoundNamedApps:output_type -> pbds.ListTmplRevisionBoundNamedAppsResp - 169, // 401: pbds.Data.ListTmplSetBoundUnnamedApps:output_type -> pbds.ListTmplSetBoundUnnamedAppsResp - 171, // 402: pbds.Data.ListMultiTmplSetBoundUnnamedApps:output_type -> pbds.ListMultiTmplSetBoundUnnamedAppsResp - 173, // 403: pbds.Data.ListTmplSetBoundNamedApps:output_type -> pbds.ListTmplSetBoundNamedAppsResp - 175, // 404: pbds.Data.ListLatestTmplBoundUnnamedApps:output_type -> pbds.ListLatestTmplBoundUnnamedAppsResp - 13, // 405: pbds.Data.CreateTemplateVariable:output_type -> pbds.CreateResp - 180, // 406: pbds.Data.ListTemplateVariables:output_type -> pbds.ListTemplateVariablesResp - 305, // 407: pbds.Data.UpdateTemplateVariable:output_type -> pbbase.EmptyResp - 305, // 408: pbds.Data.DeleteTemplateVariable:output_type -> pbbase.EmptyResp - 178, // 409: pbds.Data.ImportTemplateVariables:output_type -> pbds.ImportTemplateVariablesResp - 13, // 410: pbds.Data.CreateGroup:output_type -> pbds.CreateResp - 185, // 411: pbds.Data.ListAllGroups:output_type -> pbds.ListAllGroupsResp - 187, // 412: pbds.Data.ListAppGroups:output_type -> pbds.ListAppGroupsResp - 296, // 413: pbds.Data.GetGroupByName:output_type -> pbgroup.Group - 305, // 414: pbds.Data.UpdateGroup:output_type -> pbbase.EmptyResp - 305, // 415: pbds.Data.DeleteGroup:output_type -> pbbase.EmptyResp - 192, // 416: pbds.Data.CountGroupsReleasedApps:output_type -> pbds.CountGroupsReleasedAppsResp - 194, // 417: pbds.Data.ListGroupReleasedApps:output_type -> pbds.ListGroupReleasedAppsResp - 197, // 418: pbds.Data.Publish:output_type -> pbds.PublishResp - 197, // 419: pbds.Data.GenerateReleaseAndPublish:output_type -> pbds.PublishResp - 13, // 420: pbds.Data.CreateCredential:output_type -> pbds.CreateResp - 9, // 421: pbds.Data.ListCredentials:output_type -> pbds.ListCredentialResp - 305, // 422: pbds.Data.DeleteCredential:output_type -> pbbase.EmptyResp - 305, // 423: pbds.Data.UpdateCredential:output_type -> pbbase.EmptyResp - 5, // 424: pbds.Data.ListCredentialScopes:output_type -> pbds.ListCredentialScopesResp - 1, // 425: pbds.Data.UpdateCredentialScopes:output_type -> pbds.UpdateCredentialScopesResp - 13, // 426: pbds.Data.CreateKv:output_type -> pbds.CreateResp - 305, // 427: pbds.Data.UpdateKv:output_type -> pbbase.EmptyResp - 208, // 428: pbds.Data.ListKvs:output_type -> pbds.ListKvsResp - 305, // 429: pbds.Data.DeleteKv:output_type -> pbbase.EmptyResp - 305, // 430: pbds.Data.BatchUpsertKvs:output_type -> pbbase.EmptyResp - 305, // 431: pbds.Data.UnDeleteKv:output_type -> pbbase.EmptyResp - 199, // 432: pbds.Data.ListInstances:output_type -> pbds.ListInstancesResp - 202, // 433: pbds.Data.FetchInstanceInfo:output_type -> pbds.FetchInstanceInfoResp - 204, // 434: pbds.Data.Ping:output_type -> pbds.PingMsg - 300, // [300:435] is the sub-list for method output_type - 165, // [165:300] is the sub-list for method input_type - 165, // [165:165] is the sub-list for extension type_name - 165, // [165:165] is the sub-list for extension extendee - 0, // [0:165] is the sub-list for field type_name + 301, // 142: pbds.CreateKvReq.attachment:type_name -> pbkv.KvAttachment + 302, // 143: pbds.CreateKvReq.spec:type_name -> pbkv.KvSpec + 301, // 144: pbds.UpdateKvReq.attachment:type_name -> pbkv.KvAttachment + 302, // 145: pbds.UpdateKvReq.spec:type_name -> pbkv.KvSpec + 303, // 146: pbds.ListKvsResp.details:type_name -> pbkv.Kv + 302, // 147: pbds.DeleteKvReq.spec:type_name -> pbkv.KvSpec + 301, // 148: pbds.DeleteKvReq.attachment:type_name -> pbkv.KvAttachment + 228, // 149: pbds.BatchUpsertKvsReq.kvs:type_name -> pbds.BatchUpsertKvsReq.Kv + 302, // 150: pbds.UnDeleteKvReq.spec:type_name -> pbkv.KvSpec + 301, // 151: pbds.UnDeleteKvReq.attachment:type_name -> pbkv.KvAttachment + 304, // 152: pbds.BatchUpsertClientMetricsReq.client_items:type_name -> pbclient.Client + 305, // 153: pbds.BatchUpsertClientMetricsReq.client_event_items:type_name -> pbce.ClientEvent + 238, // 154: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_attachment:type_name -> pbci.ConfigItemAttachment + 239, // 155: pbds.BatchUpsertConfigItemsReq.ConfigItem.config_item_spec:type_name -> pbci.ConfigItemSpec + 240, // 156: pbds.BatchUpsertConfigItemsReq.ConfigItem.content_spec:type_name -> pbcontent.ContentSpec + 306, // 157: pbds.ListHooksResp.Detail.hook:type_name -> pbhook.Hook + 307, // 158: pbds.ListHookRevisionsResp.ListHookRevisionsData.hook_revision:type_name -> pbhr.HookRevision + 263, // 159: pbds.ListTemplateByTupleReqResp.Item.template:type_name -> pbtemplate.Template + 265, // 160: pbds.ListTemplateByTupleReqResp.Item.template_revision:type_name -> pbtr.TemplateRevision + 263, // 161: pbds.BatchUpsertTemplatesReq.Item.template:type_name -> pbtemplate.Template + 265, // 162: pbds.BatchUpsertTemplatesReq.Item.template_revision:type_name -> pbtr.TemplateRevision + 299, // 163: pbds.ListAppGroupsResp.ListAppGroupsData.old_selector:type_name -> google.protobuf.Struct + 299, // 164: pbds.ListAppGroupsResp.ListAppGroupsData.new_selector:type_name -> google.protobuf.Struct + 301, // 165: pbds.BatchUpsertKvsReq.Kv.kv_attachment:type_name -> pbkv.KvAttachment + 302, // 166: pbds.BatchUpsertKvsReq.Kv.kv_spec:type_name -> pbkv.KvSpec + 16, // 167: pbds.Data.CreateApp:input_type -> pbds.CreateAppReq + 17, // 168: pbds.Data.UpdateApp:input_type -> pbds.UpdateAppReq + 18, // 169: pbds.Data.DeleteApp:input_type -> pbds.DeleteAppReq + 19, // 170: pbds.Data.GetApp:input_type -> pbds.GetAppReq + 20, // 171: pbds.Data.GetAppByID:input_type -> pbds.GetAppByIDReq + 21, // 172: pbds.Data.GetAppByName:input_type -> pbds.GetAppByNameReq + 22, // 173: pbds.Data.ListAppsRest:input_type -> pbds.ListAppsRestReq + 24, // 174: pbds.Data.ListAppsByIDs:input_type -> pbds.ListAppsByIDsReq + 26, // 175: pbds.Data.CreateConfigItem:input_type -> pbds.CreateConfigItemReq + 27, // 176: pbds.Data.BatchUpsertConfigItems:input_type -> pbds.BatchUpsertConfigItemsReq + 29, // 177: pbds.Data.UpdateConfigItem:input_type -> pbds.UpdateConfigItemReq + 30, // 178: pbds.Data.DeleteConfigItem:input_type -> pbds.DeleteConfigItemReq + 31, // 179: pbds.Data.GetConfigItem:input_type -> pbds.GetConfigItemReq + 32, // 180: pbds.Data.ListConfigItems:input_type -> pbds.ListConfigItemsReq + 34, // 181: pbds.Data.ListReleasedConfigItems:input_type -> pbds.ListReleasedConfigItemsReq + 36, // 182: pbds.Data.ListConfigItemCount:input_type -> pbds.ListConfigItemCountReq + 38, // 183: pbds.Data.ListConfigItemByTuple:input_type -> pbds.ListConfigItemByTupleReq + 14, // 184: pbds.Data.UpdateConfigHook:input_type -> pbds.UpdateConfigHookReq + 40, // 185: pbds.Data.CreateContent:input_type -> pbds.CreateContentReq + 41, // 186: pbds.Data.GetContent:input_type -> pbds.GetContentReq + 42, // 187: pbds.Data.CreateCommit:input_type -> pbds.CreateCommitReq + 43, // 188: pbds.Data.GetLatestCommit:input_type -> pbds.GetLatestCommitReq + 44, // 189: pbds.Data.CreateRelease:input_type -> pbds.CreateReleaseReq + 45, // 190: pbds.Data.ListReleases:input_type -> pbds.ListReleasesReq + 47, // 191: pbds.Data.GetReleaseByName:input_type -> pbds.GetReleaseByNameReq + 48, // 192: pbds.Data.DeprecateRelease:input_type -> pbds.DeprecateReleaseReq + 49, // 193: pbds.Data.UnDeprecateRelease:input_type -> pbds.UnDeprecateReleaseReq + 50, // 194: pbds.Data.DeleteRelease:input_type -> pbds.DeleteReleaseReq + 51, // 195: pbds.Data.GetReleasedConfigItem:input_type -> pbds.GetReleasedCIReq + 52, // 196: pbds.Data.GetReleasedKv:input_type -> pbds.GetReleasedKvReq + 53, // 197: pbds.Data.ListReleasedKvs:input_type -> pbds.ListReleasedKvReq + 55, // 198: pbds.Data.CreateHook:input_type -> pbds.CreateHookReq + 60, // 199: pbds.Data.ListHooks:input_type -> pbds.ListHooksReq + 65, // 200: pbds.Data.DeleteHook:input_type -> pbds.DeleteHookReq + 56, // 201: pbds.Data.ListHookTags:input_type -> pbds.ListHookTagReq + 63, // 202: pbds.Data.ListHookReferences:input_type -> pbds.ListHookReferencesReq + 57, // 203: pbds.Data.GetHook:input_type -> pbds.GetHookReq + 66, // 204: pbds.Data.CreateHookRevision:input_type -> pbds.CreateHookRevisionReq + 67, // 205: pbds.Data.ListHookRevisions:input_type -> pbds.ListHookRevisionsReq + 69, // 206: pbds.Data.GetHookRevisionByID:input_type -> pbds.GetHookRevisionByIdReq + 70, // 207: pbds.Data.DeleteHookRevision:input_type -> pbds.DeleteHookRevisionReq + 71, // 208: pbds.Data.PublishHookRevision:input_type -> pbds.PublishHookRevisionReq + 72, // 209: pbds.Data.GetHookRevisionByPubState:input_type -> pbds.GetByPubStateReq + 73, // 210: pbds.Data.UpdateHookRevision:input_type -> pbds.UpdateHookRevisionReq + 74, // 211: pbds.Data.ListHookRevisionReferences:input_type -> pbds.ListHookRevisionReferencesReq + 76, // 212: pbds.Data.GetReleaseHook:input_type -> pbds.GetReleaseHookReq + 78, // 213: pbds.Data.CreateTemplateSpace:input_type -> pbds.CreateTemplateSpaceReq + 79, // 214: pbds.Data.ListTemplateSpaces:input_type -> pbds.ListTemplateSpacesReq + 81, // 215: pbds.Data.UpdateTemplateSpace:input_type -> pbds.UpdateTemplateSpaceReq + 82, // 216: pbds.Data.DeleteTemplateSpace:input_type -> pbds.DeleteTemplateSpaceReq + 308, // 217: pbds.Data.GetAllBizsOfTmplSpaces:input_type -> pbbase.EmptyReq + 84, // 218: pbds.Data.CreateDefaultTmplSpace:input_type -> pbds.CreateDefaultTmplSpaceReq + 85, // 219: pbds.Data.ListTmplSpacesByIDs:input_type -> pbds.ListTmplSpacesByIDsReq + 87, // 220: pbds.Data.CreateTemplate:input_type -> pbds.CreateTemplateReq + 88, // 221: pbds.Data.ListTemplates:input_type -> pbds.ListTemplatesReq + 90, // 222: pbds.Data.UpdateTemplate:input_type -> pbds.UpdateTemplateReq + 91, // 223: pbds.Data.DeleteTemplate:input_type -> pbds.DeleteTemplateReq + 92, // 224: pbds.Data.BatchDeleteTemplate:input_type -> pbds.BatchDeleteTemplateReq + 93, // 225: pbds.Data.AddTmplsToTmplSets:input_type -> pbds.AddTmplsToTmplSetsReq + 94, // 226: pbds.Data.DeleteTmplsFromTmplSets:input_type -> pbds.DeleteTmplsFromTmplSetsReq + 95, // 227: pbds.Data.ListTemplatesByIDs:input_type -> pbds.ListTemplatesByIDsReq + 97, // 228: pbds.Data.ListTemplatesNotBound:input_type -> pbds.ListTemplatesNotBoundReq + 99, // 229: pbds.Data.ListTmplsOfTmplSet:input_type -> pbds.ListTmplsOfTmplSetReq + 101, // 230: pbds.Data.ListTemplateByTuple:input_type -> pbds.ListTemplateByTupleReq + 103, // 231: pbds.Data.BatchUpsertTemplates:input_type -> pbds.BatchUpsertTemplatesReq + 105, // 232: pbds.Data.CreateTemplateRevision:input_type -> pbds.CreateTemplateRevisionReq + 106, // 233: pbds.Data.ListTemplateRevisions:input_type -> pbds.ListTemplateRevisionsReq + 108, // 234: pbds.Data.DeleteTemplateRevision:input_type -> pbds.DeleteTemplateRevisionReq + 109, // 235: pbds.Data.ListTemplateRevisionsByIDs:input_type -> pbds.ListTemplateRevisionsByIDsReq + 111, // 236: pbds.Data.ListTmplRevisionNamesByTmplIDs:input_type -> pbds.ListTmplRevisionNamesByTmplIDsReq + 113, // 237: pbds.Data.CreateTemplateSet:input_type -> pbds.CreateTemplateSetReq + 114, // 238: pbds.Data.ListTemplateSets:input_type -> pbds.ListTemplateSetsReq + 116, // 239: pbds.Data.UpdateTemplateSet:input_type -> pbds.UpdateTemplateSetReq + 117, // 240: pbds.Data.DeleteTemplateSet:input_type -> pbds.DeleteTemplateSetReq + 118, // 241: pbds.Data.ListAppTemplateSets:input_type -> pbds.ListAppTemplateSetsReq + 120, // 242: pbds.Data.ListTemplateSetsByIDs:input_type -> pbds.ListTemplateSetsByIDsReq + 122, // 243: pbds.Data.ListTemplateSetBriefInfoByIDs:input_type -> pbds.ListTemplateSetBriefInfoByIDsReq + 124, // 244: pbds.Data.ListTmplSetsOfBiz:input_type -> pbds.ListTmplSetsOfBizReq + 126, // 245: pbds.Data.CreateAppTemplateBinding:input_type -> pbds.CreateAppTemplateBindingReq + 127, // 246: pbds.Data.ListAppTemplateBindings:input_type -> pbds.ListAppTemplateBindingsReq + 129, // 247: pbds.Data.UpdateAppTemplateBinding:input_type -> pbds.UpdateAppTemplateBindingReq + 130, // 248: pbds.Data.DeleteAppTemplateBinding:input_type -> pbds.DeleteAppTemplateBindingReq + 131, // 249: pbds.Data.ListAppBoundTmplRevisions:input_type -> pbds.ListAppBoundTmplRevisionsReq + 133, // 250: pbds.Data.ListReleasedAppBoundTmplRevisions:input_type -> pbds.ListReleasedAppBoundTmplRevisionsReq + 135, // 251: pbds.Data.GetReleasedAppBoundTmplRevision:input_type -> pbds.GetReleasedAppBoundTmplRevisionReq + 137, // 252: pbds.Data.CheckAppTemplateBinding:input_type -> pbds.CheckAppTemplateBindingReq + 139, // 253: pbds.Data.ExtractAppTmplVariables:input_type -> pbds.ExtractAppTmplVariablesReq + 141, // 254: pbds.Data.GetAppTmplVariableRefs:input_type -> pbds.GetAppTmplVariableRefsReq + 143, // 255: pbds.Data.GetReleasedAppTmplVariableRefs:input_type -> pbds.GetReleasedAppTmplVariableRefsReq + 145, // 256: pbds.Data.UpdateAppTmplVariables:input_type -> pbds.UpdateAppTmplVariablesReq + 146, // 257: pbds.Data.ListAppTmplVariables:input_type -> pbds.ListAppTmplVariablesReq + 148, // 258: pbds.Data.ListReleasedAppTmplVariables:input_type -> pbds.ListReleasedAppTmplVariablesReq + 150, // 259: pbds.Data.ListTmplBoundCounts:input_type -> pbds.ListTmplBoundCountsReq + 152, // 260: pbds.Data.ListTmplRevisionBoundCounts:input_type -> pbds.ListTmplRevisionBoundCountsReq + 154, // 261: pbds.Data.ListTmplSetBoundCounts:input_type -> pbds.ListTmplSetBoundCountsReq + 156, // 262: pbds.Data.ListTmplBoundUnnamedApps:input_type -> pbds.ListTmplBoundUnnamedAppsReq + 158, // 263: pbds.Data.ListTmplBoundNamedApps:input_type -> pbds.ListTmplBoundNamedAppsReq + 160, // 264: pbds.Data.ListTmplBoundTmplSets:input_type -> pbds.ListTmplBoundTmplSetsReq + 162, // 265: pbds.Data.ListMultiTmplBoundTmplSets:input_type -> pbds.ListMultiTmplBoundTmplSetsReq + 164, // 266: pbds.Data.ListTmplRevisionBoundUnnamedApps:input_type -> pbds.ListTmplRevisionBoundUnnamedAppsReq + 166, // 267: pbds.Data.ListTmplRevisionBoundNamedApps:input_type -> pbds.ListTmplRevisionBoundNamedAppsReq + 168, // 268: pbds.Data.ListTmplSetBoundUnnamedApps:input_type -> pbds.ListTmplSetBoundUnnamedAppsReq + 170, // 269: pbds.Data.ListMultiTmplSetBoundUnnamedApps:input_type -> pbds.ListMultiTmplSetBoundUnnamedAppsReq + 172, // 270: pbds.Data.ListTmplSetBoundNamedApps:input_type -> pbds.ListTmplSetBoundNamedAppsReq + 174, // 271: pbds.Data.ListLatestTmplBoundUnnamedApps:input_type -> pbds.ListLatestTmplBoundUnnamedAppsReq + 176, // 272: pbds.Data.CreateTemplateVariable:input_type -> pbds.CreateTemplateVariableReq + 179, // 273: pbds.Data.ListTemplateVariables:input_type -> pbds.ListTemplateVariablesReq + 181, // 274: pbds.Data.UpdateTemplateVariable:input_type -> pbds.UpdateTemplateVariableReq + 182, // 275: pbds.Data.DeleteTemplateVariable:input_type -> pbds.DeleteTemplateVariableReq + 177, // 276: pbds.Data.ImportTemplateVariables:input_type -> pbds.ImportTemplateVariablesReq + 183, // 277: pbds.Data.CreateGroup:input_type -> pbds.CreateGroupReq + 184, // 278: pbds.Data.ListAllGroups:input_type -> pbds.ListAllGroupsReq + 186, // 279: pbds.Data.ListAppGroups:input_type -> pbds.ListAppGroupsReq + 188, // 280: pbds.Data.GetGroupByName:input_type -> pbds.GetGroupByNameReq + 189, // 281: pbds.Data.UpdateGroup:input_type -> pbds.UpdateGroupReq + 190, // 282: pbds.Data.DeleteGroup:input_type -> pbds.DeleteGroupReq + 191, // 283: pbds.Data.CountGroupsReleasedApps:input_type -> pbds.CountGroupsReleasedAppsReq + 193, // 284: pbds.Data.ListGroupReleasedApps:input_type -> pbds.ListGroupReleasedAppsReq + 195, // 285: pbds.Data.Publish:input_type -> pbds.PublishReq + 196, // 286: pbds.Data.GenerateReleaseAndPublish:input_type -> pbds.GenerateReleaseAndPublishReq + 7, // 287: pbds.Data.CreateCredential:input_type -> pbds.CreateCredentialReq + 8, // 288: pbds.Data.ListCredentials:input_type -> pbds.ListCredentialReq + 11, // 289: pbds.Data.DeleteCredential:input_type -> pbds.DeleteCredentialReq + 10, // 290: pbds.Data.UpdateCredential:input_type -> pbds.UpdateCredentialReq + 4, // 291: pbds.Data.ListCredentialScopes:input_type -> pbds.ListCredentialScopesReq + 0, // 292: pbds.Data.UpdateCredentialScopes:input_type -> pbds.UpdateCredentialScopesReq + 205, // 293: pbds.Data.CreateKv:input_type -> pbds.CreateKvReq + 206, // 294: pbds.Data.UpdateKv:input_type -> pbds.UpdateKvReq + 207, // 295: pbds.Data.ListKvs:input_type -> pbds.ListKvsReq + 209, // 296: pbds.Data.DeleteKv:input_type -> pbds.DeleteKvReq + 210, // 297: pbds.Data.BatchUpsertKvs:input_type -> pbds.BatchUpsertKvsReq + 211, // 298: pbds.Data.UnDeleteKv:input_type -> pbds.UnDeleteKvReq + 198, // 299: pbds.Data.ListInstances:input_type -> pbds.ListInstancesReq + 201, // 300: pbds.Data.FetchInstanceInfo:input_type -> pbds.FetchInstanceInfoReq + 204, // 301: pbds.Data.Ping:input_type -> pbds.PingMsg + 212, // 302: pbds.Data.BatchUpsertClientMetrics:input_type -> pbds.BatchUpsertClientMetricsReq + 13, // 303: pbds.Data.CreateApp:output_type -> pbds.CreateResp + 237, // 304: pbds.Data.UpdateApp:output_type -> pbapp.App + 309, // 305: pbds.Data.DeleteApp:output_type -> pbbase.EmptyResp + 237, // 306: pbds.Data.GetApp:output_type -> pbapp.App + 237, // 307: pbds.Data.GetAppByID:output_type -> pbapp.App + 237, // 308: pbds.Data.GetAppByName:output_type -> pbapp.App + 23, // 309: pbds.Data.ListAppsRest:output_type -> pbds.ListAppsResp + 25, // 310: pbds.Data.ListAppsByIDs:output_type -> pbds.ListAppsByIDsResp + 13, // 311: pbds.Data.CreateConfigItem:output_type -> pbds.CreateResp + 28, // 312: pbds.Data.BatchUpsertConfigItems:output_type -> pbds.BatchUpsertConfigItemsResp + 309, // 313: pbds.Data.UpdateConfigItem:output_type -> pbbase.EmptyResp + 309, // 314: pbds.Data.DeleteConfigItem:output_type -> pbbase.EmptyResp + 241, // 315: pbds.Data.GetConfigItem:output_type -> pbci.ConfigItem + 33, // 316: pbds.Data.ListConfigItems:output_type -> pbds.ListConfigItemsResp + 35, // 317: pbds.Data.ListReleasedConfigItems:output_type -> pbds.ListReleasedConfigItemsResp + 37, // 318: pbds.Data.ListConfigItemCount:output_type -> pbds.ListConfigItemCountResp + 39, // 319: pbds.Data.ListConfigItemByTuple:output_type -> pbds.ListConfigItemByTupleResp + 309, // 320: pbds.Data.UpdateConfigHook:output_type -> pbbase.EmptyResp + 13, // 321: pbds.Data.CreateContent:output_type -> pbds.CreateResp + 310, // 322: pbds.Data.GetContent:output_type -> pbcontent.Content + 13, // 323: pbds.Data.CreateCommit:output_type -> pbds.CreateResp + 311, // 324: pbds.Data.GetLatestCommit:output_type -> pbcommit.Commit + 13, // 325: pbds.Data.CreateRelease:output_type -> pbds.CreateResp + 46, // 326: pbds.Data.ListReleases:output_type -> pbds.ListReleasesResp + 249, // 327: pbds.Data.GetReleaseByName:output_type -> pbrelease.Release + 309, // 328: pbds.Data.DeprecateRelease:output_type -> pbbase.EmptyResp + 309, // 329: pbds.Data.UnDeprecateRelease:output_type -> pbbase.EmptyResp + 309, // 330: pbds.Data.DeleteRelease:output_type -> pbbase.EmptyResp + 242, // 331: pbds.Data.GetReleasedConfigItem:output_type -> pbrci.ReleasedConfigItem + 250, // 332: pbds.Data.GetReleasedKv:output_type -> pbrkv.ReleasedKv + 54, // 333: pbds.Data.ListReleasedKvs:output_type -> pbds.ListReleasedKvResp + 13, // 334: pbds.Data.CreateHook:output_type -> pbds.CreateResp + 61, // 335: pbds.Data.ListHooks:output_type -> pbds.ListHooksResp + 309, // 336: pbds.Data.DeleteHook:output_type -> pbbase.EmptyResp + 62, // 337: pbds.Data.ListHookTags:output_type -> pbds.ListHookTagResp + 64, // 338: pbds.Data.ListHookReferences:output_type -> pbds.ListHookReferencesResp + 58, // 339: pbds.Data.GetHook:output_type -> pbds.GetHookResp + 13, // 340: pbds.Data.CreateHookRevision:output_type -> pbds.CreateResp + 68, // 341: pbds.Data.ListHookRevisions:output_type -> pbds.ListHookRevisionsResp + 307, // 342: pbds.Data.GetHookRevisionByID:output_type -> pbhr.HookRevision + 309, // 343: pbds.Data.DeleteHookRevision:output_type -> pbbase.EmptyResp + 309, // 344: pbds.Data.PublishHookRevision:output_type -> pbbase.EmptyResp + 307, // 345: pbds.Data.GetHookRevisionByPubState:output_type -> pbhr.HookRevision + 309, // 346: pbds.Data.UpdateHookRevision:output_type -> pbbase.EmptyResp + 75, // 347: pbds.Data.ListHookRevisionReferences:output_type -> pbds.ListHookRevisionReferencesResp + 77, // 348: pbds.Data.GetReleaseHook:output_type -> pbds.GetReleaseHookResp + 13, // 349: pbds.Data.CreateTemplateSpace:output_type -> pbds.CreateResp + 80, // 350: pbds.Data.ListTemplateSpaces:output_type -> pbds.ListTemplateSpacesResp + 309, // 351: pbds.Data.UpdateTemplateSpace:output_type -> pbbase.EmptyResp + 309, // 352: pbds.Data.DeleteTemplateSpace:output_type -> pbbase.EmptyResp + 83, // 353: pbds.Data.GetAllBizsOfTmplSpaces:output_type -> pbds.GetAllBizsOfTmplSpacesResp + 13, // 354: pbds.Data.CreateDefaultTmplSpace:output_type -> pbds.CreateResp + 86, // 355: pbds.Data.ListTmplSpacesByIDs:output_type -> pbds.ListTmplSpacesByIDsResp + 13, // 356: pbds.Data.CreateTemplate:output_type -> pbds.CreateResp + 89, // 357: pbds.Data.ListTemplates:output_type -> pbds.ListTemplatesResp + 309, // 358: pbds.Data.UpdateTemplate:output_type -> pbbase.EmptyResp + 309, // 359: pbds.Data.DeleteTemplate:output_type -> pbbase.EmptyResp + 309, // 360: pbds.Data.BatchDeleteTemplate:output_type -> pbbase.EmptyResp + 309, // 361: pbds.Data.AddTmplsToTmplSets:output_type -> pbbase.EmptyResp + 309, // 362: pbds.Data.DeleteTmplsFromTmplSets:output_type -> pbbase.EmptyResp + 96, // 363: pbds.Data.ListTemplatesByIDs:output_type -> pbds.ListTemplatesByIDsResp + 98, // 364: pbds.Data.ListTemplatesNotBound:output_type -> pbds.ListTemplatesNotBoundResp + 100, // 365: pbds.Data.ListTmplsOfTmplSet:output_type -> pbds.ListTmplsOfTmplSetResp + 102, // 366: pbds.Data.ListTemplateByTuple:output_type -> pbds.ListTemplateByTupleReqResp + 104, // 367: pbds.Data.BatchUpsertTemplates:output_type -> pbds.BatchUpsertTemplatesReqResp + 13, // 368: pbds.Data.CreateTemplateRevision:output_type -> pbds.CreateResp + 107, // 369: pbds.Data.ListTemplateRevisions:output_type -> pbds.ListTemplateRevisionsResp + 309, // 370: pbds.Data.DeleteTemplateRevision:output_type -> pbbase.EmptyResp + 110, // 371: pbds.Data.ListTemplateRevisionsByIDs:output_type -> pbds.ListTemplateRevisionsByIDsResp + 112, // 372: pbds.Data.ListTmplRevisionNamesByTmplIDs:output_type -> pbds.ListTmplRevisionNamesByTmplIDsResp + 13, // 373: pbds.Data.CreateTemplateSet:output_type -> pbds.CreateResp + 115, // 374: pbds.Data.ListTemplateSets:output_type -> pbds.ListTemplateSetsResp + 309, // 375: pbds.Data.UpdateTemplateSet:output_type -> pbbase.EmptyResp + 309, // 376: pbds.Data.DeleteTemplateSet:output_type -> pbbase.EmptyResp + 119, // 377: pbds.Data.ListAppTemplateSets:output_type -> pbds.ListAppTemplateSetsResp + 121, // 378: pbds.Data.ListTemplateSetsByIDs:output_type -> pbds.ListTemplateSetsByIDsResp + 123, // 379: pbds.Data.ListTemplateSetBriefInfoByIDs:output_type -> pbds.ListTemplateSetBriefInfoByIDsResp + 125, // 380: pbds.Data.ListTmplSetsOfBiz:output_type -> pbds.ListTmplSetsOfBizResp + 13, // 381: pbds.Data.CreateAppTemplateBinding:output_type -> pbds.CreateResp + 128, // 382: pbds.Data.ListAppTemplateBindings:output_type -> pbds.ListAppTemplateBindingsResp + 309, // 383: pbds.Data.UpdateAppTemplateBinding:output_type -> pbbase.EmptyResp + 309, // 384: pbds.Data.DeleteAppTemplateBinding:output_type -> pbbase.EmptyResp + 132, // 385: pbds.Data.ListAppBoundTmplRevisions:output_type -> pbds.ListAppBoundTmplRevisionsResp + 134, // 386: pbds.Data.ListReleasedAppBoundTmplRevisions:output_type -> pbds.ListReleasedAppBoundTmplRevisionsResp + 136, // 387: pbds.Data.GetReleasedAppBoundTmplRevision:output_type -> pbds.GetReleasedAppBoundTmplRevisionResp + 138, // 388: pbds.Data.CheckAppTemplateBinding:output_type -> pbds.CheckAppTemplateBindingResp + 140, // 389: pbds.Data.ExtractAppTmplVariables:output_type -> pbds.ExtractAppTmplVariablesResp + 142, // 390: pbds.Data.GetAppTmplVariableRefs:output_type -> pbds.GetAppTmplVariableRefsResp + 144, // 391: pbds.Data.GetReleasedAppTmplVariableRefs:output_type -> pbds.GetReleasedAppTmplVariableRefsResp + 309, // 392: pbds.Data.UpdateAppTmplVariables:output_type -> pbbase.EmptyResp + 147, // 393: pbds.Data.ListAppTmplVariables:output_type -> pbds.ListAppTmplVariablesResp + 149, // 394: pbds.Data.ListReleasedAppTmplVariables:output_type -> pbds.ListReleasedAppTmplVariablesResp + 151, // 395: pbds.Data.ListTmplBoundCounts:output_type -> pbds.ListTmplBoundCountsResp + 153, // 396: pbds.Data.ListTmplRevisionBoundCounts:output_type -> pbds.ListTmplRevisionBoundCountsResp + 155, // 397: pbds.Data.ListTmplSetBoundCounts:output_type -> pbds.ListTmplSetBoundCountsResp + 157, // 398: pbds.Data.ListTmplBoundUnnamedApps:output_type -> pbds.ListTmplBoundUnnamedAppsResp + 159, // 399: pbds.Data.ListTmplBoundNamedApps:output_type -> pbds.ListTmplBoundNamedAppsResp + 161, // 400: pbds.Data.ListTmplBoundTmplSets:output_type -> pbds.ListTmplBoundTmplSetsResp + 163, // 401: pbds.Data.ListMultiTmplBoundTmplSets:output_type -> pbds.ListMultiTmplBoundTmplSetsResp + 165, // 402: pbds.Data.ListTmplRevisionBoundUnnamedApps:output_type -> pbds.ListTmplRevisionBoundUnnamedAppsResp + 167, // 403: pbds.Data.ListTmplRevisionBoundNamedApps:output_type -> pbds.ListTmplRevisionBoundNamedAppsResp + 169, // 404: pbds.Data.ListTmplSetBoundUnnamedApps:output_type -> pbds.ListTmplSetBoundUnnamedAppsResp + 171, // 405: pbds.Data.ListMultiTmplSetBoundUnnamedApps:output_type -> pbds.ListMultiTmplSetBoundUnnamedAppsResp + 173, // 406: pbds.Data.ListTmplSetBoundNamedApps:output_type -> pbds.ListTmplSetBoundNamedAppsResp + 175, // 407: pbds.Data.ListLatestTmplBoundUnnamedApps:output_type -> pbds.ListLatestTmplBoundUnnamedAppsResp + 13, // 408: pbds.Data.CreateTemplateVariable:output_type -> pbds.CreateResp + 180, // 409: pbds.Data.ListTemplateVariables:output_type -> pbds.ListTemplateVariablesResp + 309, // 410: pbds.Data.UpdateTemplateVariable:output_type -> pbbase.EmptyResp + 309, // 411: pbds.Data.DeleteTemplateVariable:output_type -> pbbase.EmptyResp + 178, // 412: pbds.Data.ImportTemplateVariables:output_type -> pbds.ImportTemplateVariablesResp + 13, // 413: pbds.Data.CreateGroup:output_type -> pbds.CreateResp + 185, // 414: pbds.Data.ListAllGroups:output_type -> pbds.ListAllGroupsResp + 187, // 415: pbds.Data.ListAppGroups:output_type -> pbds.ListAppGroupsResp + 298, // 416: pbds.Data.GetGroupByName:output_type -> pbgroup.Group + 309, // 417: pbds.Data.UpdateGroup:output_type -> pbbase.EmptyResp + 309, // 418: pbds.Data.DeleteGroup:output_type -> pbbase.EmptyResp + 192, // 419: pbds.Data.CountGroupsReleasedApps:output_type -> pbds.CountGroupsReleasedAppsResp + 194, // 420: pbds.Data.ListGroupReleasedApps:output_type -> pbds.ListGroupReleasedAppsResp + 197, // 421: pbds.Data.Publish:output_type -> pbds.PublishResp + 197, // 422: pbds.Data.GenerateReleaseAndPublish:output_type -> pbds.PublishResp + 13, // 423: pbds.Data.CreateCredential:output_type -> pbds.CreateResp + 9, // 424: pbds.Data.ListCredentials:output_type -> pbds.ListCredentialResp + 309, // 425: pbds.Data.DeleteCredential:output_type -> pbbase.EmptyResp + 309, // 426: pbds.Data.UpdateCredential:output_type -> pbbase.EmptyResp + 5, // 427: pbds.Data.ListCredentialScopes:output_type -> pbds.ListCredentialScopesResp + 1, // 428: pbds.Data.UpdateCredentialScopes:output_type -> pbds.UpdateCredentialScopesResp + 13, // 429: pbds.Data.CreateKv:output_type -> pbds.CreateResp + 309, // 430: pbds.Data.UpdateKv:output_type -> pbbase.EmptyResp + 208, // 431: pbds.Data.ListKvs:output_type -> pbds.ListKvsResp + 309, // 432: pbds.Data.DeleteKv:output_type -> pbbase.EmptyResp + 309, // 433: pbds.Data.BatchUpsertKvs:output_type -> pbbase.EmptyResp + 309, // 434: pbds.Data.UnDeleteKv:output_type -> pbbase.EmptyResp + 199, // 435: pbds.Data.ListInstances:output_type -> pbds.ListInstancesResp + 202, // 436: pbds.Data.FetchInstanceInfo:output_type -> pbds.FetchInstanceInfoResp + 204, // 437: pbds.Data.Ping:output_type -> pbds.PingMsg + 213, // 438: pbds.Data.BatchUpsertClientMetrics:output_type -> pbds.BatchUpsertClientMetricsResp + 303, // [303:439] is the sub-list for method output_type + 167, // [167:303] is the sub-list for method input_type + 167, // [167:167] is the sub-list for extension type_name + 167, // [167:167] is the sub-list for extension extendee + 0, // [0:167] is the sub-list for field type_name } func init() { file_data_service_proto_init() } @@ -20280,7 +20406,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[212].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertConfigItemsReq_ConfigItem); i { + switch v := v.(*BatchUpsertClientMetricsReq); i { case 0: return &v.state case 1: @@ -20292,7 +20418,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[213].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListConfigItemByTupleReq_Item); i { + switch v := v.(*BatchUpsertClientMetricsResp); i { case 0: return &v.state case 1: @@ -20304,7 +20430,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[214].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHookInfoSpec_Releases); i { + switch v := v.(*BatchUpsertConfigItemsReq_ConfigItem); i { case 0: return &v.state case 1: @@ -20316,7 +20442,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[215].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHooksResp_Detail); i { + switch v := v.(*ListConfigItemByTupleReq_Item); i { case 0: return &v.state case 1: @@ -20328,7 +20454,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[216].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookReferencesResp_Detail); i { + switch v := v.(*GetHookInfoSpec_Releases); i { case 0: return &v.state case 1: @@ -20340,7 +20466,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[217].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookRevisionsResp_ListHookRevisionsData); i { + switch v := v.(*ListHooksResp_Detail); i { case 0: return &v.state case 1: @@ -20352,7 +20478,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[218].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHookRevisionReferencesResp_Detail); i { + switch v := v.(*ListHookReferencesResp_Detail); i { case 0: return &v.state case 1: @@ -20364,7 +20490,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[219].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReleaseHookResp_Hook); i { + switch v := v.(*ListHookRevisionsResp_ListHookRevisionsData); i { case 0: return &v.state case 1: @@ -20376,7 +20502,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[220].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateByTupleReq_Item); i { + switch v := v.(*ListHookRevisionReferencesResp_Detail); i { case 0: return &v.state case 1: @@ -20388,7 +20514,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[221].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplateByTupleReqResp_Item); i { + switch v := v.(*GetReleaseHookResp_Hook); i { case 0: return &v.state case 1: @@ -20400,7 +20526,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[222].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchUpsertTemplatesReq_Item); i { + switch v := v.(*ListTemplateByTupleReq_Item); i { case 0: return &v.state case 1: @@ -20412,7 +20538,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[223].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAppGroupsResp_ListAppGroupsData); i { + switch v := v.(*ListTemplateByTupleReqResp_Item); i { case 0: return &v.state case 1: @@ -20424,7 +20550,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[224].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData); i { + switch v := v.(*BatchUpsertTemplatesReq_Item); i { case 0: return &v.state case 1: @@ -20436,7 +20562,7 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[225].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListGroupReleasedAppsResp_ListGroupReleasedAppsData); i { + switch v := v.(*ListAppGroupsResp_ListAppGroupsData); i { case 0: return &v.state case 1: @@ -20448,6 +20574,30 @@ func file_data_service_proto_init() { } } file_data_service_proto_msgTypes[226].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CountGroupsReleasedAppsResp_CountGroupsReleasedAppsData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_service_proto_msgTypes[227].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListGroupReleasedAppsResp_ListGroupReleasedAppsData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_service_proto_msgTypes[228].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BatchUpsertKvsReq_Kv); i { case 0: return &v.state @@ -20466,7 +20616,7 @@ func file_data_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_data_service_proto_rawDesc, NumEnums: 0, - NumMessages: 227, + NumMessages: 229, NumExtensions: 0, NumServices: 1, }, diff --git a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto index bbd9eb8600..5122674877 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto +++ b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service.proto @@ -4,6 +4,8 @@ import "pkg/protocol/core/app/app.proto"; import "pkg/protocol/core/app-template-binding/app_template_binding.proto"; import "pkg/protocol/core/base/base.proto"; import "pkg/protocol/core/config-item/config_item.proto"; +import "pkg/protocol/core/client/client.proto"; +import "pkg/protocol/core/client-event/client_event.proto"; import "pkg/protocol/core/commit/commit.proto"; import "pkg/protocol/core/content/content.proto"; import "pkg/protocol/core/credential/credential.proto"; @@ -226,6 +228,9 @@ service Data { body: "*" }; } + + // client metric related interface + rpc BatchUpsertClientMetrics(BatchUpsertClientMetricsReq) returns (BatchUpsertClientMetricsResp) {} } message UpdateCredentialScopesReq { uint32 biz_id = 1; @@ -1580,3 +1585,10 @@ message UnDeleteKvReq { pbkv.KvSpec spec = 2; pbkv.KvAttachment attachment = 3; } + +message BatchUpsertClientMetricsReq { + repeated pbclient.Client client_items = 1; + repeated pbce.ClientEvent client_event_items = 2; +} + +message BatchUpsertClientMetricsResp {} \ No newline at end of file diff --git a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service_grpc.pb.go b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service_grpc.pb.go index 4bc85b148e..8f4d945325 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service_grpc.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/data-service/data_service_grpc.pb.go @@ -164,6 +164,7 @@ const ( Data_ListInstances_FullMethodName = "/pbds.Data/ListInstances" Data_FetchInstanceInfo_FullMethodName = "/pbds.Data/FetchInstanceInfo" Data_Ping_FullMethodName = "/pbds.Data/Ping" + Data_BatchUpsertClientMetrics_FullMethodName = "/pbds.Data/BatchUpsertClientMetrics" ) // DataClient is the client API for Data service. @@ -331,6 +332,8 @@ type DataClient interface { FetchInstanceInfo(ctx context.Context, in *FetchInstanceInfoReq, opts ...grpc.CallOption) (*FetchInstanceInfoResp, error) // Ping verifies if the grpc connection is still alive. Ping(ctx context.Context, in *PingMsg, opts ...grpc.CallOption) (*PingMsg, error) + // client metric related interface + BatchUpsertClientMetrics(ctx context.Context, in *BatchUpsertClientMetricsReq, opts ...grpc.CallOption) (*BatchUpsertClientMetricsResp, error) } type dataClient struct { @@ -1556,6 +1559,15 @@ func (c *dataClient) Ping(ctx context.Context, in *PingMsg, opts ...grpc.CallOpt return out, nil } +func (c *dataClient) BatchUpsertClientMetrics(ctx context.Context, in *BatchUpsertClientMetricsReq, opts ...grpc.CallOption) (*BatchUpsertClientMetricsResp, error) { + out := new(BatchUpsertClientMetricsResp) + err := c.cc.Invoke(ctx, Data_BatchUpsertClientMetrics_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // DataServer is the server API for Data service. // All implementations should embed UnimplementedDataServer // for forward compatibility @@ -1721,6 +1733,8 @@ type DataServer interface { FetchInstanceInfo(context.Context, *FetchInstanceInfoReq) (*FetchInstanceInfoResp, error) // Ping verifies if the grpc connection is still alive. Ping(context.Context, *PingMsg) (*PingMsg, error) + // client metric related interface + BatchUpsertClientMetrics(context.Context, *BatchUpsertClientMetricsReq) (*BatchUpsertClientMetricsResp, error) } // UnimplementedDataServer should be embedded to have forward compatible implementations. @@ -2132,6 +2146,9 @@ func (UnimplementedDataServer) FetchInstanceInfo(context.Context, *FetchInstance func (UnimplementedDataServer) Ping(context.Context, *PingMsg) (*PingMsg, error) { return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") } +func (UnimplementedDataServer) BatchUpsertClientMetrics(context.Context, *BatchUpsertClientMetricsReq) (*BatchUpsertClientMetricsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method BatchUpsertClientMetrics not implemented") +} // UnsafeDataServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to DataServer will @@ -4574,6 +4591,24 @@ func _Data_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface return interceptor(ctx, in, info, handler) } +func _Data_BatchUpsertClientMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchUpsertClientMetricsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataServer).BatchUpsertClientMetrics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Data_BatchUpsertClientMetrics_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataServer).BatchUpsertClientMetrics(ctx, req.(*BatchUpsertClientMetricsReq)) + } + return interceptor(ctx, in, info, handler) +} + // Data_ServiceDesc is the grpc.ServiceDesc for Data service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -5121,6 +5156,10 @@ var Data_ServiceDesc = grpc.ServiceDesc{ MethodName: "Ping", Handler: _Data_Ping_Handler, }, + { + MethodName: "BatchUpsertClientMetrics", + Handler: _Data_BatchUpsertClientMetrics_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "data_service.proto", diff --git a/bcs-services/bcs-bscp/pkg/protocol/feed-server/feed_server.pb.go b/bcs-services/bcs-bscp/pkg/protocol/feed-server/feed_server.pb.go index 7397e5e035..159bf9750c 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/feed-server/feed_server.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/feed-server/feed_server.pb.go @@ -1723,7 +1723,7 @@ var file_feed_server_proto_rawDesc = []byte{ 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x66, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, + 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x66, 0x65, 0x65, 0x64, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3b, 0x70, 0x62, 0x66, 0x73, diff --git a/bcs-services/bcs-bscp/pkg/sf-share/convert.go b/bcs-services/bcs-bscp/pkg/sf-share/convert.go new file mode 100644 index 0000000000..34cf3d08f4 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/sf-share/convert.go @@ -0,0 +1,294 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sfs + +import ( + "errors" + + "google.golang.org/protobuf/types/known/timestamppb" + + pbclient "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client" + pbce "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/client-event" +) + +// PbClientMetric Version Change Payload convert to client metric proto +func (v *VersionChangePayload) PbClientMetric() (*pbclient.Client, error) { + if v == nil { + return nil, errors.New("VersionChangePayload is nil, can not be convert to proto") + } + var currentReleaseId uint32 + // 版本更新时如果成功了CurrentReleaseId和TargetReleaseId是一致的 + if v.BasicData.ClientMode == Pull && v.Application.ReleaseChangeStatus == Success { + currentReleaseId = v.Application.TargetReleaseID + } else { + currentReleaseId = v.Application.CurrentReleaseID + } + + var failedReason string + // 上报提示 skip 更新client上报状态是成功的 + if v.FailedReason == SkipFailed { + v.Application.ReleaseChangeStatus = Success + failedReason = "" + } else { + failedReason = v.FailedReason.String() + } + data := &pbclient.Client{ + Spec: &pbclient.ClientSpec{ + ClientVersion: v.BasicData.ClientVersion, + Ip: v.BasicData.IP, + Labels: v.BasicData.Labels.String(), + Annotations: "{}", + FirstConnectTime: timestamppb.New(v.BasicData.HeartbeatTime), + LastHeartbeatTime: timestamppb.New(v.BasicData.HeartbeatTime), + OnlineStatus: v.BasicData.OnlineStatus.String(), + Resource: &pbclient.ClientResource{ + CpuUsage: v.ResourceUsage.CpuUsage, + CpuMaxUsage: v.ResourceUsage.CpuMaxUsage, + MemoryUsage: v.ResourceUsage.MemoryUsage, + MemoryMaxUsage: v.ResourceUsage.MemoryMaxUsage, + }, + ReleaseChangeStatus: v.Application.ReleaseChangeStatus.String(), + ReleaseChangeFailedReason: failedReason, + FailedDetailReason: v.FailedDetailReason, + CurrentReleaseId: currentReleaseId, + TargetReleaseId: v.Application.TargetReleaseID, + }, + Attachment: &pbclient.ClientAttachment{ + Uid: v.BasicData.FingerPrint, + BizId: v.BasicData.BizID, + AppId: v.Application.AppID, + }, + MessageType: VersionChangeMessage.String(), + } + + // 成功时把client目标版本和当前版本互换 + if v.Application.ReleaseChangeStatus == Success { + data.Spec.CurrentReleaseId = v.Application.TargetReleaseID + data.Spec.TargetReleaseId = currentReleaseId + } + return data, nil +} + +// PbClientEventMetric Version Change Payload convert to client event metric proto +func (v *VersionChangePayload) PbClientEventMetric() (*pbce.ClientEvent, error) { + if v == nil { + return nil, errors.New("VersionChangePayload is nil, can not be convert to proto") + } + var currentReleaseId uint32 + // 版本更新时如果成功了CurrentReleaseId和TargetReleaseId是一致的 + if v.BasicData.ClientMode == Pull && v.Application.ReleaseChangeStatus == Success { + currentReleaseId = v.Application.TargetReleaseID + } else { + currentReleaseId = v.Application.CurrentReleaseID + } + data := &pbce.ClientEvent{ + Spec: &pbce.ClientEventSpec{ + OriginalReleaseId: currentReleaseId, + TargetReleaseId: v.Application.TargetReleaseID, + StartTime: timestamppb.New(v.StartTime), + EndTime: timestamppb.New(v.EndTime), + TotalSeconds: v.TotalSeconds, + ReleaseChangeStatus: v.Application.ReleaseChangeStatus.String(), + ReleaseChangeFailedReason: v.FailedReason.String(), + DownloadFileSize: float64(v.Application.DownloadFileSize), + DownloadFileNum: uint32(v.Application.DownloadFileNum), + FailedDetailReason: v.FailedDetailReason, + }, + Attachment: &pbce.ClientEventAttachment{ + Uid: v.BasicData.FingerPrint, + ClientMode: v.BasicData.ClientMode.String(), + BizId: v.BasicData.BizID, + AppId: v.Application.AppID, + CursorId: v.Application.CursorID, + }, + MessageType: VersionChangeMessage.String(), + } + return data, nil +} + +// PbClientMetric client info Payload convert to client metric proto +func (c *ClientInfoItem) PbClientMetric() (*pbclient.Client, error) { + if c == nil { + return nil, errors.New("ClientInfoItem is nil, can not be convert to proto") + } + data := &pbclient.Client{ + Spec: &pbclient.ClientSpec{ + ClientVersion: c.BasicData.ClientVersion, + Ip: c.BasicData.IP, + Labels: c.BasicData.Labels.String(), + Annotations: "{}", + FirstConnectTime: timestamppb.New(c.BasicData.HeartbeatTime), + LastHeartbeatTime: timestamppb.New(c.BasicData.HeartbeatTime), + OnlineStatus: c.BasicData.OnlineStatus.String(), + CurrentReleaseId: c.Application.CurrentReleaseID, + TargetReleaseId: c.Application.TargetReleaseID, + }, + Attachment: &pbclient.ClientAttachment{ + Uid: c.BasicData.FingerPrint, + BizId: c.BasicData.BizID, + AppId: c.Application.AppID, + }, + MessageType: ClientInfo.String(), + } + return data, nil +} + +// PbClientMetric pull status Payload convert to client metric proto +func (p *PullStatusPayload) PbClientMetric() (*pbclient.Client, error) { + if p == nil { + return nil, errors.New("PullStatusPayload is nil, can not be convert to proto") + } + var currentReleaseId uint32 + // 版本更新时如果成功了CurrentReleaseId和TargetReleaseId是一致的 + if p.BasicData.ClientMode == Pull && p.Application.ReleaseChangeStatus == Success { + currentReleaseId = p.Application.TargetReleaseID + } else { + currentReleaseId = p.Application.CurrentReleaseID + } + var failedReason string + // 上报提示 skip 更新client上报状态是成功的 + if p.Application.ReleaseChangeStatus == Skip { + p.Application.ReleaseChangeStatus = Success + failedReason = "" + } else { + failedReason = p.FailedDetailReason + } + data := &pbclient.Client{ + Spec: &pbclient.ClientSpec{ + ClientVersion: p.BasicData.ClientVersion, + Ip: p.BasicData.IP, + Labels: p.BasicData.Labels.String(), + Annotations: "{}", + FirstConnectTime: timestamppb.New(p.BasicData.HeartbeatTime), + LastHeartbeatTime: timestamppb.New(p.BasicData.HeartbeatTime), + OnlineStatus: p.BasicData.OnlineStatus.String(), + ReleaseChangeStatus: p.Application.ReleaseChangeStatus.String(), + FailedDetailReason: failedReason, + ReleaseChangeFailedReason: p.FailedReason.String(), + CurrentReleaseId: currentReleaseId, + TargetReleaseId: p.Application.TargetReleaseID, + }, + Attachment: &pbclient.ClientAttachment{ + Uid: p.BasicData.FingerPrint, + BizId: p.BasicData.BizID, + AppId: p.Application.AppID, + }, + MessageType: PullStatus.String(), + } + // 成功时把client目标版本和当前版本互换 + if p.Application.ReleaseChangeStatus == Success { + data.Spec.CurrentReleaseId = p.Application.TargetReleaseID + data.Spec.TargetReleaseId = currentReleaseId + } + return data, nil +} + +// PbClientEventMetric pull status Payload convert to client event metric proto +// 拉取事件上报 拉取状态和拉取文件总大小和总文件数 +func (p *PullStatusPayload) PbClientEventMetric() (*pbce.ClientEvent, error) { + if p == nil { + return nil, errors.New("PullStatusPayload is nil, can not be convert to proto") + } + data := &pbce.ClientEvent{ + Spec: &pbce.ClientEventSpec{ + OriginalReleaseId: p.Application.CurrentReleaseID, + TargetReleaseId: p.Application.TargetReleaseID, + ReleaseChangeStatus: p.Application.ReleaseChangeStatus.String(), + FailedDetailReason: p.FailedDetailReason, + TotalFileSize: float64(p.Application.TotalFileSize), + TotalFileNum: uint32(p.Application.TotalFileNum), + StartTime: timestamppb.New(p.StartTime), + }, + Attachment: &pbce.ClientEventAttachment{ + Uid: p.BasicData.FingerPrint, + ClientMode: p.BasicData.ClientMode.String(), + BizId: p.BasicData.BizID, + AppId: p.Application.AppID, + CursorId: p.Application.CursorID, + }, + HeartbeatTime: timestamppb.New(p.BasicData.HeartbeatTime), + MessageType: PullStatus.String(), + } + + return data, nil +} + +// PbClientMetric heart beat Payload convert to client metric proto +func (h *HeartbeatItem) PbClientMetric() (*pbclient.Client, error) { + if h == nil { + return nil, errors.New("HeartbeatItem is nil, can not be convert to proto") + } + // 过滤没有目标版本号的数据,无意义 + if h.Application.CursorID == "" { + return nil, nil + } + data := &pbclient.Client{ + Spec: &pbclient.ClientSpec{ + Labels: h.BasicData.Labels.String(), + Annotations: "{}", + FirstConnectTime: timestamppb.New(h.BasicData.HeartbeatTime), + LastHeartbeatTime: timestamppb.New(h.BasicData.HeartbeatTime), + OnlineStatus: h.BasicData.OnlineStatus.String(), + Resource: &pbclient.ClientResource{ + CpuUsage: h.ResourceUsage.CpuUsage, + CpuMaxUsage: h.ResourceUsage.CpuMaxUsage, + MemoryUsage: h.ResourceUsage.MemoryUsage, + MemoryMaxUsage: h.ResourceUsage.MemoryMaxUsage, + }, + ReleaseChangeStatus: h.Application.ReleaseChangeStatus.String(), + CurrentReleaseId: h.Application.CurrentReleaseID, + TargetReleaseId: h.Application.TargetReleaseID, + }, + Attachment: &pbclient.ClientAttachment{ + Uid: h.BasicData.FingerPrint, + BizId: h.BasicData.BizID, + AppId: h.Application.AppID, + }, + MessageType: Heartbeat.String(), + } + + return data, nil +} + +// PbClientEventMetric heart beat Payload convert to client event metric proto +// 心跳事件 ClientEvent表 只需更新 ReleaseChangeStatus 、SuccessDownloads、SuccessFileSize +func (h *HeartbeatItem) PbClientEventMetric() (*pbce.ClientEvent, error) { + if h == nil { + return nil, errors.New("HeartbeatItem is nil, can not be convert to proto") + } + + // 客户端启动时可能有客户端连接和心跳数据, + // 但没有发生拉取和变更事件, 所以CursorID会存在空 + // 过滤CursorID为空的数据,该数据没有任何意义 + if h.Application.CursorID == "" { + return nil, nil + } + data := &pbce.ClientEvent{ + Spec: &pbce.ClientEventSpec{ + ReleaseChangeStatus: h.Application.ReleaseChangeStatus.String(), + DownloadFileSize: float64(h.Application.DownloadFileSize), + DownloadFileNum: uint32(h.Application.DownloadFileNum), + }, + Attachment: &pbce.ClientEventAttachment{ + Uid: h.BasicData.FingerPrint, + ClientMode: h.BasicData.ClientMode.String(), + BizId: h.BasicData.BizID, + AppId: h.Application.AppID, + CursorId: h.Application.CursorID, + }, + HeartbeatTime: timestamppb.New(h.BasicData.HeartbeatTime), + MessageType: Heartbeat.String(), + } + + return data, nil +} diff --git a/bcs-services/bcs-bscp/pkg/sf-share/types.go b/bcs-services/bcs-bscp/pkg/sf-share/types.go index f2d82813e0..bb2874ea40 100644 --- a/bcs-services/bcs-bscp/pkg/sf-share/types.go +++ b/bcs-services/bcs-bscp/pkg/sf-share/types.go @@ -18,6 +18,7 @@ import ( "fmt" "os" "strings" + "time" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/cc" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/validator" @@ -66,6 +67,12 @@ const ( SidecarOffline MessagingType = 1 // Heartbeat means the sidecar is online, to tell feed server this sidecar is live. Heartbeat MessagingType = 2 + // VersionChangeMessage the version change event was reported. Procedure + VersionChangeMessage MessagingType = 3 + // PullStatus the current pull status is reported + PullStatus MessagingType = 4 + // ClientInfo report basic information about the client when the client first connects to the client + ClientInfo MessagingType = 5 ) // Validate the messaging type is valid or not. @@ -73,6 +80,9 @@ func (sm MessagingType) Validate() error { switch sm { case SidecarOffline: case Heartbeat: + case VersionChangeMessage: + case PullStatus: + case ClientInfo: default: return fmt.Errorf("unknown %d sidecar message type", sm) } @@ -87,6 +97,12 @@ func (sm MessagingType) String() string { return "SidecarOffline" case Heartbeat: return "Heartbeat" + case VersionChangeMessage: + return "VersionChange" + case PullStatus: + return "PullStatus" + case ClientInfo: + return "ClientInfo" default: return "Unknown" } @@ -132,6 +148,20 @@ type SideAppMeta struct { CurrentReleaseID uint32 `json:"currentReleaseID"` // sidecar's current cursor id CurrentCursorID uint32 `json:"currentCursorID"` + // TargetReleaseID is sidecar's target release id + TargetReleaseID uint32 `json:"targetReleaseID"` + // ReleaseChangeStatus 变更状态 + ReleaseChangeStatus Status `json:"releaseChangeStatus"` + // TotalFileSize 总文件大小 + TotalFileSize uint64 `json:"totalFileSize"` + // SuccessFileSize 下载文件大小 + DownloadFileSize uint64 `json:"successFileSize"` + // TotalFileNum 总文件数量 + TotalFileNum int `json:"totalFileNum"` + // DownloadFileNum 下载文件数量 + DownloadFileNum int32 `json:"successDownloads"` + // CursorID 事件ID + CursorID string `json:"cursorID"` } // Validate the sidecar's app meta is valid or not. @@ -454,10 +484,11 @@ func (o *OfflinePayload) Encode() ([]byte, error) { // HeartbeatPayload defines sdk heartbeat to send payload to feed server. type HeartbeatPayload struct { - // FingerPrint sdk instance fingerprint, reference: pkg/dal/sf-share/fingerprint.go - FingerPrint string `json:"fingerprint"` + BasicData BasicData `json:"basicData"` // Applications sdk instance bind app meta info,include app,namespace,uid,labels and app current release id. Applications []SideAppMeta `json:"applications"` + // ResourceUsage 资源相关信息:例如 cpu、内存等 + ResourceUsage } // MessagingType return the payload related sidecar message type. @@ -474,6 +505,19 @@ func (h *HeartbeatPayload) Encode() ([]byte, error) { return jsoni.Marshal(h) } +// Decode the HeartbeatPayload to bytes. +func (h *HeartbeatPayload) Decode(data []byte) error { + if len(data) == 0 { + return errors.New("HeartbeatPayload is nil, can not be decoded") + } + + err := jsoni.Unmarshal(data, h) + if err != nil { + return err + } + return nil +} + // KvMetaV1 defines the released kv metadata. type KvMetaV1 struct { // ID is released configuration item identity id. @@ -483,3 +527,363 @@ type KvMetaV1 struct { Revision *pbbase.Revision `json:"revision"` KvAttachment *pbkv.KvAttachment `json:"kv_attachment"` } + +// Labels xxx +type Labels map[string]string + +// Labels map[string]string to string +func (l Labels) String() string { + marshal, err := jsoni.Marshal(l) + if err != nil { + return "{}" + } + if len(marshal) == 0 { + return "{}" + } + return string(marshal) +} + +// BasicData 上报时基础数据 +type BasicData struct { + FingerPrint string `json:"fingerprint"` + // BizID xxx + BizID uint32 `json:"bizID"` + // Labels xxx + Labels Labels `json:"labels"` + // ClientMode 客户端模式 pull、watch + ClientMode ClientMode `json:"clientMode"` + // HeartbeatTime 心跳时间 + HeartbeatTime time.Time `json:"heartbeatTime"` + // OnlineStatus 在线状态,枚举类型:online, offline + OnlineStatus OnlineStatus `json:"onlineStatus"` + // 客户端版本 + ClientVersion string `json:"clientVersion"` + // IP client ip + IP string `json:"ip"` + // Annotations Additional info (Platform information such as cluster ID, agent ID, host ID, etc.) + Annotations any `json:"annotations"` +} + +// Validate the instance spec is valid or not +func (bd BasicData) Validate() error { + if bd.BizID <= 0 { + return errors.New("invalid biz id") + } + + if len(bd.FingerPrint) == 0 { + return errors.New("invalid fingerPrint") + } + + return nil +} + +// ResourceUsage Resource utilization rate +type ResourceUsage struct { + CpuMaxUsage float64 `json:"cpuMaxUsage"` + CpuUsage float64 `json:"cpuUsage"` + MemoryUsage uint64 `json:"memoryUsage"` + MemoryMaxUsage uint64 `json:"memoryMaxUsage"` +} + +// VersionChangePayload defines sdk version change to send payload to feed server. +type VersionChangePayload struct { + // BasicData 基础信息:例如客户端唯一标识、bizID、客户端模式 + BasicData BasicData `json:"basicData"` + // Application app相关信息:例如 appName、appID、currentReleaseID等 + Application SideAppMeta `json:"application"` + // ResourceUsage 资源相关信息:例如 cpu、内存等 + ResourceUsage ResourceUsage `json:"resourceUsage"` + // TotalSeconds total time required for version changes + TotalSeconds float64 `json:"totalSeconds"` + // TotalFileNum total file data + TotalFileNum int `json:"totalFileNum"` + // TotalFileSize pull the total size of the config file + TotalFileSize uint64 `json:"totalFileSize"` + // StartTime 变更开始时间 + StartTime time.Time `json:"startTime"` + // EndTime 变更结束时间 + EndTime time.Time `json:"endTime"` + // FailedReason 失败原因 + FailedReason FailedReason `json:"failedReason"` + // FailedDetailReason 失败详细信息 + FailedDetailReason string `json:"failedDetailReason"` +} + +// MessagingType return the payload related sidecar message type. +func (v *VersionChangePayload) MessagingType() MessagingType { + return VersionChangeMessage +} + +// Encode the VersionChangePayload to bytes. +func (v *VersionChangePayload) Encode() ([]byte, error) { + if v == nil { + return nil, errors.New("VersionChangePayload is nil, can not be encoded") + } + + return jsoni.Marshal(v) +} + +// Decode the VersionChangePayload to bytes. +func (v *VersionChangePayload) Decode(data []byte) error { + if len(data) == 0 { + return errors.New("VersionChangePayload is nil, can not be decoded") + } + err := jsoni.Unmarshal(data, v) + if err != nil { + return err + } + return nil +} + +// PullStatusPayload defines sdk pull status to send payload to feed server. +type PullStatusPayload struct { + // BasicData 例如:bizID 、 fingerprint等 + BasicData BasicData `json:"basicData"` + // Application sdk instance bind app meta info,include app,namespace,uid,labels and app current release id. + Application SideAppMeta `json:"application"` + // FailedDetailReason 失败详细信息 + FailedDetailReason string `json:"failedDetailReason"` + // FailedReason 失败原因 + FailedReason FailedReason `json:"failedReason"` + // StartTime 变更开始时间 + StartTime time.Time `json:"startTime"` +} + +// MessagingType return the payload related sidecar message type. +func (p *PullStatusPayload) MessagingType() MessagingType { + return PullStatus +} + +// Encode the PullStatusPayload to bytes. +func (p *PullStatusPayload) Encode() ([]byte, error) { + if p == nil { + return nil, errors.New("PullStatusPayload is nil, can not be encoded") + } + + return jsoni.Marshal(p) +} + +// Decode the PullStatusPayload to bytes. +func (p *PullStatusPayload) Decode(data []byte) error { + if p == nil { + return errors.New("PullStatusPayload is nil, can not be decoded") + } + err := jsoni.Unmarshal(data, p) + if err != nil { + return err + } + return nil +} + +// ClientInfoPayload defines sdk client info to send payload to feed server. +type ClientInfoPayload struct { + // BasicData 基础信息:例如客户端唯一标识、bizID、客户端模式 + BasicData + // Applications app相关信息:例如 appName、appID、currentReleaseID等 + Applications []SideAppMeta `json:"applications"` +} + +// MessagingType return the payload related sidecar message type. +func (c *ClientInfoPayload) MessagingType() MessagingType { + return ClientInfo +} + +// Encode the ClientInfoPayload to bytes. +func (c *ClientInfoPayload) Encode() ([]byte, error) { + if c == nil { + return nil, errors.New("ClientInfoPayload is nil, can not be encoded") + } + + return jsoni.Marshal(c) +} + +// Decode the ClientInfoPayload to bytes. +func (c *ClientInfoPayload) Decode(data []byte) error { + if len(data) == 0 { + return errors.New("ClientInfoPayload is nil, can not be decoded") + } + err := jsoni.Unmarshal(data, c) + if err != nil { + return err + } + return nil +} + +// OnlineStatus define the online status structure +type OnlineStatus uint32 + +const ( + // Online 在线 + Online OnlineStatus = 1 + // Offline 离线 + Offline OnlineStatus = 2 +) + +// Validate the online status is valid or not. +func (cm OnlineStatus) Validate() error { + switch cm { + case Online: + case Offline: + default: + return fmt.Errorf("unknown %d sidecar online status", cm) + } + + return nil +} + +// String return the corresponding string type +func (cm OnlineStatus) String() string { + switch cm { + case Online: + return "online" + case Offline: + return "offline" + default: + return "" + } +} + +// Status define the status structure +type Status uint32 + +const ( + // Success xxx + Success Status = 1 + // Failed xxx + Failed Status = 2 + // Processing xxx + Processing Status = 3 + // Skip xxx + Skip Status = 4 +) + +// Validate the status is valid or not. +func (rs Status) Validate() error { + switch rs { + case Success: + case Failed: + case Processing: + case Skip: + default: + return fmt.Errorf("unknown %d sidecar version change status", rs) + } + return nil +} + +// String return the corresponding string type +func (rs Status) String() string { + switch rs { + case Success: + return "Success" + case Failed: + return "Failed" + case Processing: + return "Processing" + case Skip: + return "Skip" + default: + return "" + } +} + +// FailedReason define the failure cause structure +type FailedReason uint32 + +const ( + // PreHookFailed pre hook failed + PreHookFailed FailedReason = 1 + // PostHookFailed post hook failed + PostHookFailed FailedReason = 2 + // DownloadFailed download failed + DownloadFailed FailedReason = 3 + // SkipFailed skip failed + SkipFailed FailedReason = 4 +) + +// Validate the failed reason is valid or not. +func (fr FailedReason) Validate() error { + switch fr { + case PreHookFailed: + case PostHookFailed: + case DownloadFailed: + case SkipFailed: + default: + return fmt.Errorf("unknown %d sidecar failed reason", fr) + } + + return nil +} + +// String return the corresponding string type +func (fr FailedReason) String() string { + switch fr { + case PreHookFailed: + return "PreHookFailed" + case PostHookFailed: + return "PostHookFailed" + case DownloadFailed: + return "DownloadFailed" + case SkipFailed: + return "SkipFailed" + default: + return "" + } +} + +// ClientMode define the client mode structure +type ClientMode uint32 + +const ( + // Pull xxx + Pull ClientMode = 1 + // Watch xxx + Watch ClientMode = 2 +) + +// Validate the client mode is valid or not. +func (cm ClientMode) Validate() error { + switch cm { + case Pull: + case Watch: + default: + return fmt.Errorf("unknown %d sidecar client mode", cm) + } + + return nil +} + +// String return the corresponding string type +func (cm ClientMode) String() string { + switch cm { + case Pull: + return "Pull" + case Watch: + return "Watch" + default: + return "" + } +} + +// ClientMetricData feed-server 和 cache-service 通信的结构体 +type ClientMetricData struct { + AppID uint32 + MessagingType uint32 + Payload []byte +} + +// ClientInfoItem 单个客户端连接信息 +type ClientInfoItem struct { + // BasicData 基础信息:例如客户端唯一标识、bizID、客户端模式 + BasicData BasicData `json:"basic_data"` + // Applications app相关信息:例如 appName、appID、currentReleaseID等 + Application SideAppMeta `json:"application"` +} + +// HeartbeatItem 单个服务心跳数据 +type HeartbeatItem struct { + BasicData BasicData `json:"basicData"` + // Applications sdk instance bind app meta info,include app,namespace,uid,labels and app current release id. + Application SideAppMeta `json:"application"` + // ResourceUsage 资源相关信息:例如 cpu、内存等 + ResourceUsage ResourceUsage `json:"resourceUsage"` +} diff --git a/bcs-services/bcs-bscp/pkg/thirdparty/protobuf/google/api/timestamp.proto b/bcs-services/bcs-bscp/pkg/thirdparty/protobuf/google/api/timestamp.proto new file mode 100644 index 0000000000..fd0bc07dc3 --- /dev/null +++ b/bcs-services/bcs-bscp/pkg/thirdparty/protobuf/google/api/timestamp.proto @@ -0,0 +1,144 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/timestamppb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TimestampProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; + +// A Timestamp represents a point in time independent of any time zone or local +// calendar, encoded as a count of seconds and fractions of seconds at +// nanosecond resolution. The count is relative to an epoch at UTC midnight on +// January 1, 1970, in the proleptic Gregorian calendar which extends the +// Gregorian calendar backwards to year one. +// +// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap +// second table is needed for interpretation, using a [24-hour linear +// smear](https://developers.google.com/time/smear). +// +// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By +// restricting to that range, we ensure that we can convert to and from [RFC +// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. +// +// # Examples +// +// Example 1: Compute Timestamp from POSIX `time()`. +// +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); +// +// Example 2: Compute Timestamp from POSIX `gettimeofday()`. +// +// struct timeval tv; +// gettimeofday(&tv, NULL); +// +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); +// +// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. +// +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// +// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. +// +// long millis = System.currentTimeMillis(); +// +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// +// Example 5: Compute Timestamp from Java `Instant.now()`. +// +// Instant now = Instant.now(); +// +// Timestamp timestamp = +// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) +// .setNanos(now.getNano()).build(); +// +// Example 6: Compute Timestamp from current time in Python. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard +// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using +// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with +// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use +// the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() +// ) to obtain a formatter capable of generating timestamps in this format. +// +message Timestamp { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + int32 nanos = 2; +} diff --git a/bcs-services/bcs-bscp/scripts/gen/main.go b/bcs-services/bcs-bscp/scripts/gen/main.go index 3f75e350c4..53b704761b 100644 --- a/bcs-services/bcs-bscp/scripts/gen/main.go +++ b/bcs-services/bcs-bscp/scripts/gen/main.go @@ -60,6 +60,8 @@ func main() { table.ReleasedAppTemplateVariable{}, table.Kv{}, table.ReleasedKv{}, + table.Client{}, + table.ClientEvent{}, ) g.Execute()