Эх сурвалжийг харах

feat:阶段信息返回值代码调整

fuwencai 1 жил өмнө
parent
commit
e683badfdc

+ 2 - 1
.gitignore

@@ -6,4 +6,5 @@
 /jyBXBase/rpc/jylog/
 /jyBXBase/api/jylog/
 /jyBXCore/rpc/jylog/
-*.log
+*.log
+.idea

+ 6 - 4
jyBXCore/rpc/bxcore.proto

@@ -499,9 +499,11 @@ message ProjectStatisticsDataRes{
   repeated ProjectStatisticsData data = 3;
 }
 message StageValue{
-  string Value =1 ;
-  string Date =2;
+  string Name =1 ;
+  string Value =2 ;
+  string Date =3;
 }
+
 message ProjectDetailData {
   string  projectName =1 ;// 项目名称
   string  source = 2 ; // 标讯/项目来源 '来源;1:个人订阅 2:企业自动分发 3:企业手动分发
@@ -509,7 +511,7 @@ message ProjectDetailData {
   string  disDate =4 ; // 分发时间
   string  viewDate = 5 ;//最早浏览时间
   string  id =7 ;// 项目id
-  map<string, StageValue> stage =6 ;// 阶段相关信息  <阶段名称,勾选时间>
+  repeated StageValue stage =6 ;// 阶段相关信息  <阶段名称,勾选时间>
 }
 message DetailData{
   repeated ProjectDetailData list = 1;
@@ -534,7 +536,7 @@ message ProjectStatisticsData{
   int64   endNumb = 10; //终止数量
   string  entUserId = 11;
   int64   participateProjectNumb = 12;// 参标数量
-  map<string,int64> stage = 14;
+  repeated StageValue stage = 14;
 }
 message  PolymerizeSearchReq{
   int64  entId = 1; //企业id

+ 52 - 31
jyBXCore/rpc/service/participateStatistics.go

@@ -51,17 +51,12 @@ func (in *ParticipateStatistics) ProjectStatistics(entUserIdArr []string, startT
 	// 调整为时间倒序  处理投标阶段的时候  只取最新的一条的数据
 	dataList := IC.BaseMysql.SelectBySql(fmt.Sprintf("select  * from  participate_project_statistics where %s order  by ymd desc ", strings.Join(query, "and ")))
 	if users != nil && len(*users) > 0 {
-		result = ProjectHandle(dataList, users, isAdmin)
+		result = ProjectHandle(dataList, users, isAdmin, bidWay)
 	}
 	return
 }
 
 var (
-	SelectItemMap = map[int]string{
-		1: "个人订阅",
-		2: "企业自动分发",
-		3: "企业手动分发",
-	}
 	SourceMap = map[string]string{
 		"1": "个人订阅",
 		"2": "企业自动分发",
@@ -72,7 +67,7 @@ var (
 // GetSourceItem 获取标讯项目来源筛选项
 func (in *ParticipateStatistics) GetSourceItem(entId, positionId int) (result []*bxcore.SourceItem) {
 	redisKey := "sourceItem%s_%s"
-	query := "select distinct `source` from participate_push_statistics where "
+	query := "select distinct substring_index(source,',',-1)  as `source` from participate_push_statistics where "
 	// 个人用户
 	if entId == 0 {
 		// 查职位id
@@ -91,7 +86,6 @@ func (in *ParticipateStatistics) GetSourceItem(entId, positionId int) (result []
 			log.Println("序列化失败", redisKey, err)
 		}
 	}
-	//
 	rs := IC.BaseMysql.SelectBySql(query)
 	if rs == nil || len(*rs) == 0 {
 		return
@@ -101,20 +95,18 @@ func (in *ParticipateStatistics) GetSourceItem(entId, positionId int) (result []
 		if value == "" {
 			continue
 		}
-		splitSource := strings.Split(value, ",")
-		for j := 0; j < len(splitSource); j++ {
-			sourceValue, err := strconv.Atoi(splitSource[j])
-			if err != nil {
-				log.Println("类型转换错误:", err, splitSource[j])
-				continue
-			}
-			if name, ok := SelectItemMap[sourceValue]; ok {
+		if name, ok := SourceMap[value]; ok {
+			value_, err := strconv.Atoi(value)
+			if err == nil {
 				result = append(result, &bxcore.SourceItem{
 					Name:  name,
-					Value: int64(sourceValue),
+					Value: int64(value_),
 				})
+			} else {
+				log.Println("转换失败:", err, value)
 			}
 		}
+
 	}
 	if len(result) > 0 {
 		//  存缓存
@@ -255,7 +247,13 @@ func PushHandle(data *[]map[string]interface{}, users *[]map[string]interface{},
 	}
 	return pushStatisticsList
 }
-func ProjectHandle(data *[]map[string]interface{}, users *[]map[string]interface{}, isAdmin bool) []*bxcore.ProjectStatisticsData {
+
+var stageNameArr = map[int64][]string{
+	1: []string{"已报名", "投标决策", "编织投标文件", "递交投标文件", "中标公示", "签合同", "已结束"},
+	2: []string{"已报名", "中标公示", "签合同", "已结束"},
+}
+
+func ProjectHandle(data *[]map[string]interface{}, users *[]map[string]interface{}, isAdmin bool, bidWay int64) []*bxcore.ProjectStatisticsData {
 	result := &map[int64]*ProjectData{}
 	for k, v := range *users {
 		(*result)[common.Int64All(v["id"])] = &ProjectData{
@@ -333,6 +331,10 @@ func ProjectHandle(data *[]map[string]interface{}, users *[]map[string]interface
 						delete((*result)[userId].DirectWinNumb, project_id)
 					}
 				}
+				if bidWay == 0 {
+					// 投标类型为全部时不需要统计勾选的数量
+					continue
+				}
 				// 阶段勾选数量统计 只统计第一条
 				stage := common.ObjToString(v["bid_stage"])
 				if stage != "" {
@@ -349,13 +351,30 @@ func ProjectHandle(data *[]map[string]interface{}, users *[]map[string]interface
 		}
 	}
 	projectStatisticsList := make([]*bxcore.ProjectStatisticsData, len(*result))
+
+	stageName := []string{}
+	if bidWay != 0 {
+		stageName = stageNameArr[bidWay]
+	}
 	for _, v := range *result {
 		personName := strings.Split(v.PersonName, "_")[0]
 		k := common.Int64All(strings.Split(v.PersonName, "_")[1])
-		tmpStage := map[string]int64{}
-		for stageK, stageV := range v.Stage {
-			stage_ := fmt.Sprintf("%s(阶段)", stageK)
-			tmpStage[stage_] = int64(len(stageV))
+		tmpStage := []*bxcore.StageValue{}
+		if bidWay != 0 && len(stageName) > 0 {
+			for i := 0; i < len(stageName); i++ {
+				name_ := fmt.Sprintf("%s(阶段)", stageName[i])
+				if stageV, ok := v.Stage[stageName[i]]; ok {
+					tmpStage = append(tmpStage, &bxcore.StageValue{
+						Name:  name_,
+						Value: fmt.Sprintf("%d", len(stageV)),
+					})
+				} else {
+					tmpStage = append(tmpStage, &bxcore.StageValue{
+						Name:  name_,
+						Value: "-",
+					})
+				}
+			}
 		}
 		projectStatisticsList[k] = &bxcore.ProjectStatisticsData{
 			PersonName:             personName,
@@ -867,13 +886,14 @@ func ProjectDetailHandle(dataList []map[string]interface{}, entId int64, positio
 			tmp.DisDate = pushInfo_.DisDate
 		} //
 		// 处理阶段勾选信息和参标、终止参标信息
+
 		if dataList[i]["stage"] != nil {
-			if stage_, err := json.Marshal(*common.ObjToMap(dataList[i]["stage"])); err == nil {
-				err := json.Unmarshal(stage_, &tmp.Stage)
-				if err != nil {
-					log.Println("stage 反序列失败", err)
-				}
+			s := common.ObjToString(dataList[i]["stage"])
+			err := json.Unmarshal([]byte(strings.Replace(s, "'", "\"", -1)), &tmp.Stage)
+			if err != nil {
+				log.Println("stage 反序列失败", err)
 			}
+
 		}
 		tmp.Id = encrypt.EncodeArticleId2ByCheck(projectId)
 		results = append(results, &tmp)
@@ -891,7 +911,7 @@ func getNewPushInfo(projectIds []string, entId int, positionId int, positionType
 	}
 	sql := `
 SELECT 
-    A.project_id, A.source, A.visit_date, A.dis_date, A.is_distribute,A.id,A.ymd,B.ymd
+    A.project_id, A.source,DATE_FORMAT(A.visit_date,'%%Y-%%m-%%d') as visit_date, DATE_FORMAT(A.dis_date,'%%Y-%%m-%%d') as dis_date, A.is_distribute,A.id,A.ymd,B.ymd
 FROM  participate_push_statistics A inner join (SELECT 
             project_id,MAX(ymd) as ymd
         FROM
@@ -899,21 +919,22 @@ FROM  participate_push_statistics A inner join (SELECT
         WHERE
             %s
             AND project_id IN ( "` + strings.Join(projectIds, "\",\"") + `" )
-        GROUP BY project_id) B  on (A.project_id=B.project_id and A.ymd=b.ymd) where A.%s
+        GROUP BY project_id) B  on (A.project_id=B.project_id and A.ymd=b.ymd) and  A.%s
 `
 	query := fmt.Sprintf(sql, s, s)
 	return IC.BaseMysql.SelectBySql(query)
 }
 
-// GetQueryType 查询类型  0空搜索 全连接 1查左边 连右表查stage 2只查右表 3内连接
+// GetQueryType 查询类型  0空搜索  1查左边 连右表查stage 2只查右表 3内连接
 // IsParticipate 接收参数时 0 全部 1 未参标 2已参标  数据库中 未参标是0
 func GetQueryType(in *bxcore.ProjectDetailsReq) int {
-	// TODO 调整
+	//
 	if in.BidUpdateStartTime == 0 && in.BidUpdateEndTime == 0 && in.StartTime == 0 && in.EndTime == 0 && in.IsParticipate == 0 && in.BidWay == 0 && len(in.Source) == 0 {
 		return 0
 	}
 	if in.IsParticipate == 1 {
 		// 未参标只筛选推送表 右表条件无效
+
 		return 1
 	}
 	if (in.StartTime != 0 || in.EndTime != 0 || len(in.Source) > 0) && (in.BidUpdateStartTime == 0 && in.BidUpdateEndTime == 0 && in.IsParticipate != 2) {

+ 281 - 286
jyBXCore/rpc/type/bxcore/bxcore.pb.go

@@ -4655,8 +4655,9 @@ type StageValue struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Value string `protobuf:"bytes,1,opt,name=Value,proto3" json:"Value,omitempty"`
-	Date  string `protobuf:"bytes,2,opt,name=Date,proto3" json:"Date,omitempty"`
+	Name  string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=Value,proto3" json:"Value,omitempty"`
+	Date  string `protobuf:"bytes,3,opt,name=Date,proto3" json:"Date,omitempty"`
 }
 
 func (x *StageValue) Reset() {
@@ -4691,6 +4692,13 @@ func (*StageValue) Descriptor() ([]byte, []int) {
 	return file_bxcore_proto_rawDescGZIP(), []int{43}
 }
 
+func (x *StageValue) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
 func (x *StageValue) GetValue() string {
 	if x != nil {
 		return x.Value
@@ -4710,13 +4718,13 @@ type ProjectDetailData struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	ProjectName  string                 `protobuf:"bytes,1,opt,name=projectName,proto3" json:"projectName,omitempty"`                                                                             // 项目名称
-	Source       string                 `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"`                                                                                       // 标讯/项目来源 '来源;1:个人订阅 2:企业自动分发 3:企业手动分发
-	IsDistribute string                 `protobuf:"bytes,3,opt,name=isDistribute,proto3" json:"isDistribute,omitempty"`                                                                           // 手动分发状态  1已分发
-	DisDate      string                 `protobuf:"bytes,4,opt,name=disDate,proto3" json:"disDate,omitempty"`                                                                                     // 分发时间
-	ViewDate     string                 `protobuf:"bytes,5,opt,name=viewDate,proto3" json:"viewDate,omitempty"`                                                                                   //最早浏览时间
-	Id           string                 `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"`                                                                                               // 项目id
-	Stage        map[string]*StageValue `protobuf:"bytes,6,rep,name=stage,proto3" json:"stage,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // 阶段相关信息  <阶段名称,勾选时间>
+	ProjectName  string        `protobuf:"bytes,1,opt,name=projectName,proto3" json:"projectName,omitempty"`   // 项目名称
+	Source       string        `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"`             // 标讯/项目来源 '来源;1:个人订阅 2:企业自动分发 3:企业手动分发
+	IsDistribute string        `protobuf:"bytes,3,opt,name=isDistribute,proto3" json:"isDistribute,omitempty"` // 手动分发状态  1已分发
+	DisDate      string        `protobuf:"bytes,4,opt,name=disDate,proto3" json:"disDate,omitempty"`           // 分发时间
+	ViewDate     string        `protobuf:"bytes,5,opt,name=viewDate,proto3" json:"viewDate,omitempty"`         //最早浏览时间
+	Id           string        `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"`                     // 项目id
+	Stage        []*StageValue `protobuf:"bytes,6,rep,name=stage,proto3" json:"stage,omitempty"`               // 阶段相关信息  <阶段名称,勾选时间>
 }
 
 func (x *ProjectDetailData) Reset() {
@@ -4793,7 +4801,7 @@ func (x *ProjectDetailData) GetId() string {
 	return ""
 }
 
-func (x *ProjectDetailData) GetStage() map[string]*StageValue {
+func (x *ProjectDetailData) GetStage() []*StageValue {
 	if x != nil {
 		return x.Stage
 	}
@@ -4923,19 +4931,19 @@ type ProjectStatisticsData struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	PersonName             string           `protobuf:"bytes,1,opt,name=personName,proto3" json:"personName,omitempty"`
-	DepartmentName         string           `protobuf:"bytes,2,opt,name=departmentName,proto3" json:"departmentName,omitempty"`
-	BidNumb                int64            `protobuf:"varint,3,opt,name=bidNumb,proto3" json:"bidNumb,omitempty"`               //投标数量
-	DirectBidNumb          int64            `protobuf:"varint,4,opt,name=directBidNumb,proto3" json:"directBidNumb,omitempty"`   //直接投标数
-	ChannelBidNumb         int64            `protobuf:"varint,5,opt,name=channelBidNumb,proto3" json:"channelBidNumb,omitempty"` //渠道投标数
-	WinNumb                int64            `protobuf:"varint,6,opt,name=winNumb,proto3" json:"winNumb,omitempty"`               //中标数量
-	DirectWinNumb          int64            `protobuf:"varint,7,opt,name=directWinNumb,proto3" json:"directWinNumb,omitempty"`   //直接中标数
-	ChannelWinNumb         int64            `protobuf:"varint,8,opt,name=channelWinNumb,proto3" json:"channelWinNumb,omitempty"` //渠道中标数
-	NotBidNumber           int64            `protobuf:"varint,9,opt,name=notBidNumber,proto3" json:"notBidNumber,omitempty"`     //未中标数量
-	EndNumb                int64            `protobuf:"varint,10,opt,name=endNumb,proto3" json:"endNumb,omitempty"`              //终止数量
-	EntUserId              string           `protobuf:"bytes,11,opt,name=entUserId,proto3" json:"entUserId,omitempty"`
-	ParticipateProjectNumb int64            `protobuf:"varint,12,opt,name=participateProjectNumb,proto3" json:"participateProjectNumb,omitempty"` // 参标数量
-	Stage                  map[string]int64 `protobuf:"bytes,14,rep,name=stage,proto3" json:"stage,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+	PersonName             string        `protobuf:"bytes,1,opt,name=personName,proto3" json:"personName,omitempty"`
+	DepartmentName         string        `protobuf:"bytes,2,opt,name=departmentName,proto3" json:"departmentName,omitempty"`
+	BidNumb                int64         `protobuf:"varint,3,opt,name=bidNumb,proto3" json:"bidNumb,omitempty"`               //投标数量
+	DirectBidNumb          int64         `protobuf:"varint,4,opt,name=directBidNumb,proto3" json:"directBidNumb,omitempty"`   //直接投标数
+	ChannelBidNumb         int64         `protobuf:"varint,5,opt,name=channelBidNumb,proto3" json:"channelBidNumb,omitempty"` //渠道投标数
+	WinNumb                int64         `protobuf:"varint,6,opt,name=winNumb,proto3" json:"winNumb,omitempty"`               //中标数量
+	DirectWinNumb          int64         `protobuf:"varint,7,opt,name=directWinNumb,proto3" json:"directWinNumb,omitempty"`   //直接中标数
+	ChannelWinNumb         int64         `protobuf:"varint,8,opt,name=channelWinNumb,proto3" json:"channelWinNumb,omitempty"` //渠道中标数
+	NotBidNumber           int64         `protobuf:"varint,9,opt,name=notBidNumber,proto3" json:"notBidNumber,omitempty"`     //未中标数量
+	EndNumb                int64         `protobuf:"varint,10,opt,name=endNumb,proto3" json:"endNumb,omitempty"`              //终止数量
+	EntUserId              string        `protobuf:"bytes,11,opt,name=entUserId,proto3" json:"entUserId,omitempty"`
+	ParticipateProjectNumb int64         `protobuf:"varint,12,opt,name=participateProjectNumb,proto3" json:"participateProjectNumb,omitempty"` // 参标数量
+	Stage                  []*StageValue `protobuf:"bytes,14,rep,name=stage,proto3" json:"stage,omitempty"`
 }
 
 func (x *ProjectStatisticsData) Reset() {
@@ -5054,7 +5062,7 @@ func (x *ProjectStatisticsData) GetParticipateProjectNumb() int64 {
 	return 0
 }
 
-func (x *ProjectStatisticsData) GetStage() map[string]int64 {
+func (x *ProjectStatisticsData) GetStage() []*StageValue {
 	if x != nil {
 		return x.Stage
 	}
@@ -6390,232 +6398,222 @@ var file_bxcore_proto_rawDesc = []byte{
 	0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74,
 	0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65,
 	0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69,
-	0x63, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x36, 0x0a, 0x0a,
-	0x53, 0x74, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65,
-	0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x44, 0x61, 0x74, 0x65, 0x22, 0xc1, 0x02, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72,
-	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
-	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f,
-	0x75, 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69,
-	0x62, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x73, 0x44, 0x69,
-	0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x44,
-	0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x69, 0x73, 0x44, 0x61,
-	0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x65, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e,
-	0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a,
-	0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e,
-	0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65,
-	0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x1a, 0x4c, 0x0a, 0x0a, 0x53, 0x74,
-	0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f,
-	0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76,
-	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x51, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x61,
-	0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72,
-	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52,
-	0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x6b, 0x0a, 0x0d, 0x44,
-	0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08,
-	0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
-	0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d,
-	0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67,
-	0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
-	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61,
-	0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbd, 0x04, 0x0a, 0x15, 0x50, 0x72, 0x6f,
-	0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x44, 0x61,
-	0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x4e, 0x61,
-	0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74,
-	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x61,
-	0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69,
-	0x64, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x62, 0x69, 0x64,
-	0x4e, 0x75, 0x6d, 0x62, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x42, 0x69,
-	0x64, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x64, 0x69, 0x72,
-	0x65, 0x63, 0x74, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68,
-	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x69, 0x64, 0x4e, 0x75,
-	0x6d, 0x62, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x06, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x07, 0x77, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x24, 0x0a, 0x0d,
-	0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x07, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x69, 0x6e, 0x4e, 0x75,
-	0x6d, 0x62, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x6e,
-	0x4e, 0x75, 0x6d, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e,
-	0x6e, 0x65, 0x6c, 0x57, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x6f,
-	0x74, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18,
-	0x0a, 0x07, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x07, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x55,
-	0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63,
-	0x69, 0x70, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62,
-	0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
-	0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x3e,
-	0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e,
-	0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74,
-	0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61,
-	0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x1a, 0x38,
-	0x0a, 0x0a, 0x53, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
-	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
-	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76,
-	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbb, 0x02, 0x0a, 0x13, 0x50, 0x6f, 0x6c,
-	0x79, 0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71,
-	0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
-	0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72,
-	0x63, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
-	0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69,
-	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
-	0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f,
-	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70,
-	0x70, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64,
-	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55,
-	0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
-	0x74, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x14, 0x50, 0x6f, 0x6c, 0x79, 0x6d, 0x65,
-	0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19,
-	0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72,
-	0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d,
-	0x73, 0x67, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x14, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
-	0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd7, 0x01, 0x0a,
-	0x0c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x2b, 0x0a,
-	0x07, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
-	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x61,
-	0x70, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72,
-	0x6f, 0x63, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d,
-	0x61, 0x70, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12,
-	0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x10, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6e, 0x75, 0x4c,
-	0x69, 0x73, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a,
-	0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65,
-	0x61, 0x72, 0x63, 0x68, 0x4d, 0x61, 0x70, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
-	0x62, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x45, 0x0a, 0x09, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
-	0x4d, 0x61, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x0e, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63,
-	0x68, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4c, 0x0a,
-	0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x10, 0x0a,
-	0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12,
-	0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x08,
-	0x4d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04,
-	0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e,
-	0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
-	0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70,
-	0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65,
-	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65,
-	0x12, 0x29, 0x0a, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x0f, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x69, 0x70, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x6d,
-	0x61, 0x74, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63,
-	0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0xd5, 0x01, 0x0a, 0x07, 0x54, 0x69, 0x70, 0x49, 0x6e, 0x66,
-	0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x55, 0x72, 0x6c, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x55, 0x72,
-	0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x65, 0x78, 0x74,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54,
-	0x65, 0x78, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x6e,
-	0x63, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x68, 0x6f,
-	0x77, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79,
-	0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70,
-	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x32, 0x84, 0x09,
-	0x0a, 0x06, 0x42, 0x78, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x36, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53,
-	0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f,
-	0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x62,
-	0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x3e, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12,
-	0x16, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c,
-	0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65,
-	0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x49, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53,
-	0x68, 0x6f, 0x77, 0x12, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72,
-	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x1a,
-	0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
-	0x70, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x50,
-	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a,
+	0x63, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x0a,
+	0x53, 0x74, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14,
+	0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x22, 0xe1, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20,
+	0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x44, 0x69,
+	0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
+	0x69, 0x73, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07,
+	0x64, 0x69, 0x73, 0x44, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64,
+	0x69, 0x73, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61,
+	0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61,
+	0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x69, 0x64, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x0a,
+	0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x04, 0x6c, 0x69,
+	0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72,
+	0x65, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44,
+	0x61, 0x74, 0x61, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74,
+	0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22,
+	0x6b, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73,
+	0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65,
+	0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72,
+	0x72, 0x4d, 0x73, 0x67, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xed, 0x03, 0x0a,
+	0x15, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69,
+	0x63, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73,
+	0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74,
+	0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
+	0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18,
+	0x0a, 0x07, 0x62, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x07, 0x62, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x72, 0x65,
+	0x63, 0x74, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x26,
+	0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42,
+	0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x69, 0x6e, 0x4e, 0x75, 0x6d,
+	0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x77, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62,
+	0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x69, 0x6e, 0x4e, 0x75, 0x6d,
+	0x62, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57,
+	0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
+	0x6c, 0x57, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e,
+	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x22,
+	0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x09,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x42, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62,
+	0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x12, 0x1c, 0x0a, 0x09,
+	0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x70, 0x61,
+	0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
+	0x4e, 0x75, 0x6d, 0x62, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x72, 0x74,
+	0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75,
+	0x6d, 0x62, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x22, 0xbb, 0x02, 0x0a,
+	0x13, 0x50, 0x6f, 0x6c, 0x79, 0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63,
+	0x68, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65,
+	0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,
+	0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14,
+	0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61,
+	0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09,
+	0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x74,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x6e,
+	0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x14, 0x50, 0x6f,
+	0x6c, 0x79, 0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a,
+	0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65,
+	0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x22, 0xd7, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x74, 0x75, 0x72,
+	0x6e, 0x12, 0x2b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72,
+	0x63, 0x68, 0x4d, 0x61, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33,
+	0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x4d, 0x61, 0x70, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x75, 0x72, 0x65, 0x4c,
+	0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4d,
+	0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73,
+	0x74, 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72,
+	0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x61, 0x70, 0x52, 0x0d, 0x73, 0x75, 0x62,
+	0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x45, 0x0a, 0x09, 0x53, 0x65,
+	0x61, 0x72, 0x63, 0x68, 0x4d, 0x61, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53,
+	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x22, 0x4c, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74,
+	0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c,
+	0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x75, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x69, 0x6d, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x69, 0x6d, 0x65, 0x22,
+	0xf7, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x69, 0x63, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x0e,
+	0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18,
+	0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e,
+	0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x54,
+	0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12,
+	0x14, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0xd5, 0x01, 0x0a, 0x07, 0x54, 0x69,
+	0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+	0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+	0x72, 0x6d, 0x55, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+	0x54, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66,
+	0x69, 0x72, 0x6d, 0x54, 0x65, 0x78, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x53, 0x68, 0x6f,
+	0x77, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69,
+	0x73, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61,
+	0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70,
+	0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70,
+	0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70,
+	0x65, 0x32, 0x84, 0x09, 0x0a, 0x06, 0x42, 0x78, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x36, 0x0a, 0x0d,
+	0x47, 0x65, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x11, 0x2e,
+	0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71,
+	0x1a, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x3e, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69,
+	0x6d, 0x69, 0x74, 0x12, 0x16, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78,
+	0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
+	0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65,
+	0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77,
+	0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72,
+	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x12,
+	0x49, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74,
+	0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1a,
 	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
-	0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x62, 0x78, 0x63,
-	0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x42, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f,
+	0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x42, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e,
+	0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x69, 0x64,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f,
 	0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x55,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
-	0x73, 0x12, 0x52, 0x0a, 0x12, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65,
-	0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65,
-	0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74,
-	0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e,
-	0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x52, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x12, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
-	0x70, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x62, 0x78,
+	0x75, 0x73, 0x52, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x12, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
+	0x70, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x78,
 	0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65,
-	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x62, 0x78, 0x63,
-	0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x52,
-	0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x12, 0x50, 0x61, 0x72,
-	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x12,
+	0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x62, 0x78, 0x63,
+	0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x12, 0x50, 0x61, 0x72,
+	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12,
 	0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
-	0x70, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d,
+	0x70, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d,
 	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
-	0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x12, 0x58, 0x0a,
-	0x14, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x55,
-	0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50,
-	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x55, 0x70, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e,
-	0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x55, 0x70,
-	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x11, 0x50, 0x61, 0x72, 0x74, 0x69,
-	0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x62,
-	0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74,
-	0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x62, 0x78, 0x63,
-	0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x41,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74,
-	0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x2e, 0x62, 0x78,
+	0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x12, 0x52, 0x0a,
+	0x12, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73,
+	0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72,
+	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52,
+	0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74,
+	0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65,
+	0x73, 0x12, 0x58, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65,
+	0x53, 0x65, 0x74, 0x55, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x62, 0x78, 0x63, 0x6f,
+	0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53, 0x65,
+	0x74, 0x55, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x62, 0x78, 0x63,
+	0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x53,
+	0x65, 0x74, 0x55, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x11, 0x50,
+	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x1c, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63,
+	0x69, 0x70, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c,
+	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
+	0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0f,
+	0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
+	0x70, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x62, 0x78,
 	0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65,
-	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65,
-	0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74,
-	0x52, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x69,
-	0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53,
-	0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71,
-	0x1a, 0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74,
-	0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x12,
-	0x50, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73,
-	0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74,
-	0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a,
-	0x20, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65,
-	0x73, 0x12, 0x4d, 0x0a, 0x10, 0x50, 0x6f, 0x6c, 0x79, 0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53,
-	0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50,
-	0x6f, 0x6c, 0x79, 0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52,
-	0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6c, 0x79,
-	0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x42, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69,
-	0x6c, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x6a,
-	0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e,
-	0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74,
-	0x61, 0x52, 0x65, 0x73, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0e, 0x50, 0x75, 0x73, 0x68, 0x53,
+	0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f,
+	0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x4c, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x75,
+	0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x44, 0x61, 0x74, 0x61,
+	0x52, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74,
+	0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72,
+	0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x44, 0x61,
+	0x74, 0x61, 0x52, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x50, 0x6f, 0x6c, 0x79, 0x6d, 0x65, 0x72,
+	0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x62, 0x78, 0x63, 0x6f,
+	0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6c, 0x79, 0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e,
+	0x50, 0x6f, 0x6c, 0x79, 0x6d, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44,
+	0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e,
+	0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65,
+	0x71, 0x1a, 0x15, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x62, 0x78,
+	0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -6630,7 +6628,7 @@ func file_bxcore_proto_rawDescGZIP() []byte {
 	return file_bxcore_proto_rawDescData
 }
 
-var file_bxcore_proto_msgTypes = make([]protoimpl.MessageInfo, 57)
+var file_bxcore_proto_msgTypes = make([]protoimpl.MessageInfo, 55)
 var file_bxcore_proto_goTypes = []interface{}{
 	(*SearchReq)(nil),                // 0: bxcore.SearchReq
 	(*SearchResp)(nil),               // 1: bxcore.SearchResp
@@ -6687,8 +6685,6 @@ var file_bxcore_proto_goTypes = []interface{}{
 	(*Search)(nil),                   // 52: bxcore.Search
 	(*MenuList)(nil),                 // 53: bxcore.MenuList
 	(*TipInfo)(nil),                  // 54: bxcore.TipInfo
-	nil,                              // 55: bxcore.ProjectDetailData.StageEntry
-	nil,                              // 56: bxcore.ProjectStatisticsData.StageEntry
 }
 var file_bxcore_proto_depIdxs = []int32{
 	2,  // 0: bxcore.SearchResp.data:type_name -> bxcore.SearchData
@@ -6712,10 +6708,10 @@ var file_bxcore_proto_depIdxs = []int32{
 	41, // 18: bxcore.PushStatisticsDataRes.data:type_name -> bxcore.PushStatisticsData
 	39, // 19: bxcore.PushStatisticsDataRes.sourceItem:type_name -> bxcore.sourceItem
 	47, // 20: bxcore.ProjectStatisticsDataRes.data:type_name -> bxcore.ProjectStatisticsData
-	55, // 21: bxcore.ProjectDetailData.stage:type_name -> bxcore.ProjectDetailData.StageEntry
+	43, // 21: bxcore.ProjectDetailData.stage:type_name -> bxcore.StageValue
 	44, // 22: bxcore.DetailData.list:type_name -> bxcore.ProjectDetailData
 	45, // 23: bxcore.DetailDataRes.data:type_name -> bxcore.DetailData
-	56, // 24: bxcore.ProjectStatisticsData.stage:type_name -> bxcore.ProjectStatisticsData.StageEntry
+	43, // 24: bxcore.ProjectStatisticsData.stage:type_name -> bxcore.StageValue
 	50, // 25: bxcore.PolymerizeSearchResp.data:type_name -> bxcore.SearchReturn
 	51, // 26: bxcore.SearchReturn.entList:type_name -> bxcore.SearchMap
 	51, // 27: bxcore.SearchReturn.procureList:type_name -> bxcore.SearchMap
@@ -6723,42 +6719,41 @@ var file_bxcore_proto_depIdxs = []int32{
 	51, // 29: bxcore.SearchReturn.subscribeList:type_name -> bxcore.SearchMap
 	52, // 30: bxcore.SearchMap.data:type_name -> bxcore.Search
 	54, // 31: bxcore.MenuList.tipInfo:type_name -> bxcore.TipInfo
-	43, // 32: bxcore.ProjectDetailData.StageEntry.value:type_name -> bxcore.StageValue
-	0,  // 33: bxcore.BxCore.GetSearchList:input_type -> bxcore.SearchReq
-	6,  // 34: bxcore.BxCore.SearchLimit:input_type -> bxcore.SearchLimitReq
-	8,  // 35: bxcore.BxCore.ParticipateShow:input_type -> bxcore.ParticipateShowReq
-	11, // 36: bxcore.BxCore.ParticipateInfo:input_type -> bxcore.ParticipateInfoReq
-	14, // 37: bxcore.BxCore.UpdateBidStatus:input_type -> bxcore.UpdateBidStatusReq
-	16, // 38: bxcore.BxCore.ParticipateContent:input_type -> bxcore.ParticipateContentReq
-	19, // 39: bxcore.BxCore.ParticipateRecords:input_type -> bxcore.ParticipateRecordsReq
-	23, // 40: bxcore.BxCore.ParticipatePersons:input_type -> bxcore.ParticipatePersonsReq
-	26, // 41: bxcore.BxCore.ParticipateSetUpInfo:input_type -> bxcore.ParticipateSetUpInfoReq
-	31, // 42: bxcore.BxCore.ParticipateAction:input_type -> bxcore.ParticipateActionReq
-	33, // 43: bxcore.BxCore.ParticipateList:input_type -> bxcore.ParticipateListReq
-	37, // 44: bxcore.BxCore.PushStatistics:input_type -> bxcore.StatisticsListReq
-	37, // 45: bxcore.BxCore.ProjectStatistics:input_type -> bxcore.StatisticsListReq
-	48, // 46: bxcore.BxCore.PolymerizeSearch:input_type -> bxcore.PolymerizeSearchReq
-	38, // 47: bxcore.BxCore.ProjectDetails:input_type -> bxcore.ProjectDetailsReq
-	1,  // 48: bxcore.BxCore.GetSearchList:output_type -> bxcore.SearchResp
-	7,  // 49: bxcore.BxCore.SearchLimit:output_type -> bxcore.SearchLimitResp
-	10, // 50: bxcore.BxCore.ParticipateShow:output_type -> bxcore.ParticipateShowRes
-	13, // 51: bxcore.BxCore.ParticipateInfo:output_type -> bxcore.ParticipateInfoRes
-	15, // 52: bxcore.BxCore.UpdateBidStatus:output_type -> bxcore.UpdateBidStatusRes
-	18, // 53: bxcore.BxCore.ParticipateContent:output_type -> bxcore.ParticipateContentRes
-	22, // 54: bxcore.BxCore.ParticipateRecords:output_type -> bxcore.ParticipateRecordsRes
-	25, // 55: bxcore.BxCore.ParticipatePersons:output_type -> bxcore.ParticipatePersonsRes
-	30, // 56: bxcore.BxCore.ParticipateSetUpInfo:output_type -> bxcore.ParticipateSetUpInfoRes
-	32, // 57: bxcore.BxCore.ParticipateAction:output_type -> bxcore.ParticipateActionRes
-	36, // 58: bxcore.BxCore.ParticipateList:output_type -> bxcore.ParticipateListRes
-	40, // 59: bxcore.BxCore.PushStatistics:output_type -> bxcore.PushStatisticsDataRes
-	42, // 60: bxcore.BxCore.ProjectStatistics:output_type -> bxcore.ProjectStatisticsDataRes
-	49, // 61: bxcore.BxCore.PolymerizeSearch:output_type -> bxcore.PolymerizeSearchResp
-	46, // 62: bxcore.BxCore.ProjectDetails:output_type -> bxcore.DetailDataRes
-	48, // [48:63] is the sub-list for method output_type
-	33, // [33:48] is the sub-list for method input_type
-	33, // [33:33] is the sub-list for extension type_name
-	33, // [33:33] is the sub-list for extension extendee
-	0,  // [0:33] is the sub-list for field type_name
+	0,  // 32: bxcore.BxCore.GetSearchList:input_type -> bxcore.SearchReq
+	6,  // 33: bxcore.BxCore.SearchLimit:input_type -> bxcore.SearchLimitReq
+	8,  // 34: bxcore.BxCore.ParticipateShow:input_type -> bxcore.ParticipateShowReq
+	11, // 35: bxcore.BxCore.ParticipateInfo:input_type -> bxcore.ParticipateInfoReq
+	14, // 36: bxcore.BxCore.UpdateBidStatus:input_type -> bxcore.UpdateBidStatusReq
+	16, // 37: bxcore.BxCore.ParticipateContent:input_type -> bxcore.ParticipateContentReq
+	19, // 38: bxcore.BxCore.ParticipateRecords:input_type -> bxcore.ParticipateRecordsReq
+	23, // 39: bxcore.BxCore.ParticipatePersons:input_type -> bxcore.ParticipatePersonsReq
+	26, // 40: bxcore.BxCore.ParticipateSetUpInfo:input_type -> bxcore.ParticipateSetUpInfoReq
+	31, // 41: bxcore.BxCore.ParticipateAction:input_type -> bxcore.ParticipateActionReq
+	33, // 42: bxcore.BxCore.ParticipateList:input_type -> bxcore.ParticipateListReq
+	37, // 43: bxcore.BxCore.PushStatistics:input_type -> bxcore.StatisticsListReq
+	37, // 44: bxcore.BxCore.ProjectStatistics:input_type -> bxcore.StatisticsListReq
+	48, // 45: bxcore.BxCore.PolymerizeSearch:input_type -> bxcore.PolymerizeSearchReq
+	38, // 46: bxcore.BxCore.ProjectDetails:input_type -> bxcore.ProjectDetailsReq
+	1,  // 47: bxcore.BxCore.GetSearchList:output_type -> bxcore.SearchResp
+	7,  // 48: bxcore.BxCore.SearchLimit:output_type -> bxcore.SearchLimitResp
+	10, // 49: bxcore.BxCore.ParticipateShow:output_type -> bxcore.ParticipateShowRes
+	13, // 50: bxcore.BxCore.ParticipateInfo:output_type -> bxcore.ParticipateInfoRes
+	15, // 51: bxcore.BxCore.UpdateBidStatus:output_type -> bxcore.UpdateBidStatusRes
+	18, // 52: bxcore.BxCore.ParticipateContent:output_type -> bxcore.ParticipateContentRes
+	22, // 53: bxcore.BxCore.ParticipateRecords:output_type -> bxcore.ParticipateRecordsRes
+	25, // 54: bxcore.BxCore.ParticipatePersons:output_type -> bxcore.ParticipatePersonsRes
+	30, // 55: bxcore.BxCore.ParticipateSetUpInfo:output_type -> bxcore.ParticipateSetUpInfoRes
+	32, // 56: bxcore.BxCore.ParticipateAction:output_type -> bxcore.ParticipateActionRes
+	36, // 57: bxcore.BxCore.ParticipateList:output_type -> bxcore.ParticipateListRes
+	40, // 58: bxcore.BxCore.PushStatistics:output_type -> bxcore.PushStatisticsDataRes
+	42, // 59: bxcore.BxCore.ProjectStatistics:output_type -> bxcore.ProjectStatisticsDataRes
+	49, // 60: bxcore.BxCore.PolymerizeSearch:output_type -> bxcore.PolymerizeSearchResp
+	46, // 61: bxcore.BxCore.ProjectDetails:output_type -> bxcore.DetailDataRes
+	47, // [47:62] is the sub-list for method output_type
+	32, // [32:47] is the sub-list for method input_type
+	32, // [32:32] is the sub-list for extension type_name
+	32, // [32:32] is the sub-list for extension extendee
+	0,  // [0:32] is the sub-list for field type_name
 }
 
 func init() { file_bxcore_proto_init() }
@@ -7434,7 +7429,7 @@ func file_bxcore_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_bxcore_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   57,
+			NumMessages:   55,
 			NumExtensions: 0,
 			NumServices:   1,
 		},