瀏覽代碼

Merge branch 'feature/v1.1.12' of http://192.168.3.207:8080/BaseService/jyMicroservices into feature/v1.1.12

wangshan 2 年之前
父節點
當前提交
a1dbdf39bd
共有 28 個文件被更改,包括 1611 次插入540 次删除
  1. 39 18
      jyBXBase/api/bxbase.api
  2. 10 0
      jyBXBase/api/internal/handler/routes.go
  3. 28 0
      jyBXBase/api/internal/handler/saveListModeHandler.go
  4. 28 0
      jyBXBase/api/internal/handler/showListModeHandler.go
  5. 22 18
      jyBXBase/api/internal/logic/addSearchScreenLogic.go
  6. 21 17
      jyBXBase/api/internal/logic/checkSearchScreenLogic.go
  7. 46 0
      jyBXBase/api/internal/logic/saveListModeLogic.go
  8. 45 0
      jyBXBase/api/internal/logic/showListModeLogic.go
  9. 33 18
      jyBXBase/api/internal/types/types.go
  10. 91 0
      jyBXBase/api/test/apitest.http
  11. 4 0
      jyBXBase/entity/db.go
  12. 35 4
      jyBXBase/rpc/bxbase.proto
  13. 19 0
      jyBXBase/rpc/bxbase/bxbase.go
  14. 5 1
      jyBXBase/rpc/internal/logic/addsearchlogic.go
  15. 4 1
      jyBXBase/rpc/internal/logic/checksearchlogic.go
  16. 47 0
      jyBXBase/rpc/internal/logic/savelistmodelogic.go
  17. 47 0
      jyBXBase/rpc/internal/logic/showlistmodelogic.go
  18. 5 1
      jyBXBase/rpc/internal/logic/showsearchlogic.go
  19. 12 0
      jyBXBase/rpc/internal/server/bxbaseserver.go
  20. 599 268
      jyBXBase/rpc/type/bxbase/bxbase.pb.go
  21. 77 1
      jyBXBase/rpc/type/bxbase/bxbase_grpc.pb.go
  22. 24 0
      jyBXSubscribe/api/test/apitest.http
  23. 11 1
      jyBXSubscribe/rpc/bxsubscribe.proto
  24. 8 0
      jyBXSubscribe/rpc/internal/logic/getsublistlogic.go
  25. 26 9
      jyBXSubscribe/rpc/model/push.go
  26. 271 182
      jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe.pb.go
  27. 1 1
      jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe_grpc.pb.go
  28. 53 0
      jyBXSubscribe/rpc/util/util.go

+ 39 - 18
jyBXBase/api/bxbase.api

@@ -69,24 +69,28 @@ type (
 
 	//保存筛选条件
 	AddSearchScreen {
-		UserId       string `header:"userId"`
-		AppId        string `header:"appId"` //appId
-		Type         string `header:"type,optional"`
-		Keywords     string `json:"searchvalue"`         //搜索词
-		Publishtime  string `json:"publishtime"`         //发布时间
-		City         string `json:"city,optional"`       //城市
-		Area         string `json:"area,optional"`       //地区
-		Subtype      string `json:"subtype,optional"`    //信息类型
-		Minprice     string `json:"minprice,optional"`   //最低价格
-		Maxprice     string `json:"maxprice,optional"`   //最高价格
-		Industry     string `json:"industry,optional"`   //选中的行业
-		SelectType   string `json:"selectType"`          //标题 or 全文
-		Buyerclass   string `json:"buyerclass,optional"` //采购单位行业
-		Hasbuyertel  string `json:"buyertel,optional"`   //是否有采购电话
-		Haswinnertel string `json:"winnertel,optional"`  //是否有中标电话
-		FileExists   string `json:"fileExists,optional"` //附件
-		Notkey       string `json:"notkey,optional"`     //排除词
-		InKey        string `json:"inkey,optional"`
+		UserId          string `header:"userId"`
+		AppId           string `header:"appId"` //appId
+		Type            string `header:"type,optional"`
+		Keywords        string `json:"searchvalue"`         //搜索词
+		Publishtime     string `json:"publishtime"`         //发布时间
+		City            string `json:"city,optional"`       //城市
+		Area            string `json:"area,optional"`       //地区
+		Subtype         string `json:"subtype,optional"`    //信息类型
+		Minprice        string `json:"minprice,optional"`   //最低价格
+		Maxprice        string `json:"maxprice,optional"`   //最高价格
+		Industry        string `json:"industry,optional"`   //选中的行业
+		SelectType      string `json:"selectType"`          //标题 or 全文
+		Buyerclass      string `json:"buyerclass,optional"` //采购单位行业
+		Hasbuyertel     string `json:"buyertel,optional"`   //是否有采购电话
+		Haswinnertel    string `json:"winnertel,optional"`  //是否有中标电话
+		FileExists      string `json:"fileExists,optional"` //附件
+		Notkey          string `json:"notkey,optional"`     //排除词 关键词:排除词(副:五组,每组最多15个字符)
+		InKey           string `json:"inkey,optional"`
+		SearchGroup     int    `json:"searchGroup,optional"`     // 搜索分组:默认0:全部;1:招标采购公告;2:超前项目
+		SearchMode      int    `json:"searchMode,optional"`      // 搜索模式:0:精准搜索;1:模糊搜索
+		WordsMode       int    `json:"wordsMode,optional"`       // 搜索关键词模式;默认0:包含所有,1:包含任意
+		AdditionalWords string `json:"additionalWords,optional"` // 关键词:附加关键词(副:五组,每组最多15个字符)
 	}
 	//首页最新招标信息
 	NewestReq {
@@ -109,6 +113,17 @@ type (
 	IncludedReq {
 		AppId string `header:"appId,default=10000"`
 	}
+	// 保存搜索/订阅 列表模式入参
+	SaveListModeReq {
+		UserId string `header:"userId"`
+		Type   string `path:"type,options=search|subscribe"` // search 搜索列表  subscribe 订阅列表
+		Mode   int    `json:"mode"`                          // 0-精简列表 1-详细列表
+	}
+	// 获取获取搜索/订阅
+	ShowListModeReq {
+		UserId string `header:"userId"`
+		Type   string `path:"type,options=search|subscribe"` // search 搜索列表  subscribe 订阅列表
+	}
 )
 
 service bxbase-api {
@@ -151,4 +166,10 @@ service bxbase-api {
 	@doc "收录情况"
 	@handler Included
 	post /jybx/base/included (IncludedReq) returns(CommonRes)
+	// 列表模式选择接口
+	@handler SaveListMode
+	post /jybx/base/:type/saveListMode (SaveListModeReq) returns(CommonRes)
+	// 获取列表模式接口
+	@handler ShowListMode
+	post /jybx/base/:type/showListMode (ShowListModeReq) returns(CommonRes)
 }

+ 10 - 0
jyBXBase/api/internal/handler/routes.go

@@ -72,6 +72,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/jybx/base/included",
 				Handler: IncludedHandler(serverCtx),
 			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jybx/base/:type/saveListMode",
+				Handler: SaveListModeHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jybx/base/:type/showListMode",
+				Handler: ShowListModeHandler(serverCtx),
+			},
 		},
 	)
 }

+ 28 - 0
jyBXBase/api/internal/handler/saveListModeHandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyBXBase/api/internal/logic"
+	"jyBXBase/api/internal/svc"
+	"jyBXBase/api/internal/types"
+)
+
+func SaveListModeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.SaveListModeReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewSaveListModeLogic(r.Context(), svcCtx)
+		resp, err := l.SaveListMode(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
jyBXBase/api/internal/handler/showListModeHandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyBXBase/api/internal/logic"
+	"jyBXBase/api/internal/svc"
+	"jyBXBase/api/internal/types"
+)
+
+func ShowListModeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.ShowListModeReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewShowListModeLogic(r.Context(), svcCtx)
+		resp, err := l.ShowListMode(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 22 - 18
jyBXBase/api/internal/logic/addSearchScreenLogic.go

@@ -30,24 +30,28 @@ func NewAddSearchScreenLogic(ctx context.Context, svcCtx *svc.ServiceContext, r
 
 func (l *AddSearchScreenLogic) AddSearchScreen(req *types.AddSearchScreen) (resp *types.CommonRes, err error) {
 	res, err0 := l.svcCtx.Bxbase.AddSearch(l.ctx, &bxbase.AddSearchReq{
-		UserId:       req.UserId,
-		Type:         req.Type,
-		Keywords:     req.Keywords,
-		PublishTime:  req.Publishtime,
-		City:         req.City,
-		Area:         req.Area,
-		Subtype:      req.Subtype,
-		MinPrice:     req.Minprice,
-		MaxPrice:     req.Maxprice,
-		Industry:     req.Industry,
-		SelectType:   req.SelectType,
-		BuyerClass:   req.Buyerclass,
-		HasBuyerTel:  req.Hasbuyertel,
-		HasWinnerTel: req.Haswinnertel,
-		FileExists:   req.FileExists,
-		NotKey:       req.Notkey,
-		InKey:        req.InKey,
-		AppId:        req.AppId,
+		UserId:          req.UserId,
+		Type:            req.Type,
+		Keywords:        req.Keywords,
+		PublishTime:     req.Publishtime,
+		City:            req.City,
+		Area:            req.Area,
+		Subtype:         req.Subtype,
+		MinPrice:        req.Minprice,
+		MaxPrice:        req.Maxprice,
+		Industry:        req.Industry,
+		SelectType:      req.SelectType,
+		BuyerClass:      req.Buyerclass,
+		HasBuyerTel:     req.Hasbuyertel,
+		HasWinnerTel:    req.Haswinnertel,
+		FileExists:      req.FileExists,
+		NotKey:          req.Notkey,
+		InKey:           req.InKey,
+		AppId:           req.AppId,
+		SearchGroup:     int64(req.SearchGroup),
+		SearchMode:      int64(req.SearchMode),
+		WordsMode:       int64(req.WordsMode),
+		AdditionalWords: req.AdditionalWords,
 	})
 	if err0 != nil {
 		return &types.CommonRes{

+ 21 - 17
jyBXBase/api/internal/logic/checkSearchScreenLogic.go

@@ -30,23 +30,27 @@ func NewCheckSearchScreenLogic(ctx context.Context, svcCtx *svc.ServiceContext,
 
 func (l *CheckSearchScreenLogic) CheckSearchScreen(req *types.AddSearchScreen) (resp *types.CommonRes, err error) {
 	res, err0 := l.svcCtx.Bxbase.CheckSearch(l.ctx, &bxbase.AddSearchReq{
-		UserId:       req.UserId,
-		Type:         req.Type,
-		Keywords:     req.Keywords,
-		PublishTime:  req.Publishtime,
-		Area:         req.Area,
-		City:         req.City,
-		Subtype:      req.Subtype,
-		MinPrice:     req.Minprice,
-		MaxPrice:     req.Maxprice,
-		Industry:     req.Industry,
-		SelectType:   req.SelectType,
-		BuyerClass:   req.Buyerclass,
-		HasBuyerTel:  req.Hasbuyertel,
-		HasWinnerTel: req.Haswinnertel,
-		FileExists:   req.FileExists,
-		NotKey:       req.Notkey,
-		AppId:        req.AppId,
+		UserId:          req.UserId,
+		Type:            req.Type,
+		Keywords:        req.Keywords,
+		PublishTime:     req.Publishtime,
+		Area:            req.Area,
+		City:            req.City,
+		Subtype:         req.Subtype,
+		MinPrice:        req.Minprice,
+		MaxPrice:        req.Maxprice,
+		Industry:        req.Industry,
+		SelectType:      req.SelectType,
+		BuyerClass:      req.Buyerclass,
+		HasBuyerTel:     req.Hasbuyertel,
+		HasWinnerTel:    req.Haswinnertel,
+		FileExists:      req.FileExists,
+		NotKey:          req.Notkey,
+		AppId:           req.AppId,
+		SearchGroup:     int64(req.SearchGroup),
+		SearchMode:      int64(req.SearchMode),
+		WordsMode:       int64(req.WordsMode),
+		AdditionalWords: req.AdditionalWords,
 	})
 	if err0 != nil {
 		return &types.CommonRes{

+ 46 - 0
jyBXBase/api/internal/logic/saveListModeLogic.go

@@ -0,0 +1,46 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"context"
+	"jyBXBase/rpc/type/bxbase"
+
+	"jyBXBase/api/internal/svc"
+	"jyBXBase/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SaveListModeLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewSaveListModeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveListModeLogic {
+	return &SaveListModeLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *SaveListModeLogic) SaveListMode(req *types.SaveListModeReq) (resp *types.CommonRes, err error) {
+	res, err0 := l.svcCtx.Bxbase.SaveListMode(l.ctx, &bxbase.SaveListModeReq{
+		UserId: req.UserId,
+		Type:   req.Type,
+		Mode:   int64(req.Mode),
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(res.ErrCode),
+		Err_msg:  res.ErrMsg,
+		Data:     nil,
+	}, nil
+}

+ 45 - 0
jyBXBase/api/internal/logic/showListModeLogic.go

@@ -0,0 +1,45 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"context"
+	"jyBXBase/rpc/bxbase"
+
+	"jyBXBase/api/internal/svc"
+	"jyBXBase/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type ShowListModeLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewShowListModeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ShowListModeLogic {
+	return &ShowListModeLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *ShowListModeLogic) ShowListMode(req *types.ShowListModeReq) (resp *types.CommonRes, err error) {
+	res, err0 := l.svcCtx.Bxbase.ShowListMode(l.ctx, &bxbase.ShowListModeReq{
+		UserId: req.UserId,
+		Type:   req.Type,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  err0.Error(),
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(res.ErrCode),
+		Err_msg:  res.ErrMsg,
+		Data:     common.IntAll(res.Data),
+	}, nil
+}

+ 33 - 18
jyBXBase/api/internal/types/types.go

@@ -60,24 +60,28 @@ type DelSearchScreen struct {
 }
 
 type AddSearchScreen struct {
-	UserId       string `header:"userId"`
-	AppId        string `header:"appId"` //appId
-	Type         string `header:"type,optional"`
-	Keywords     string `json:"searchvalue"`         //搜索词
-	Publishtime  string `json:"publishtime"`         //发布时间
-	City         string `json:"city,optional"`       //城市
-	Area         string `json:"area,optional"`       //地区
-	Subtype      string `json:"subtype,optional"`    //信息类型
-	Minprice     string `json:"minprice,optional"`   //最低价格
-	Maxprice     string `json:"maxprice,optional"`   //最高价格
-	Industry     string `json:"industry,optional"`   //选中的行业
-	SelectType   string `json:"selectType"`          //标题 or 全文
-	Buyerclass   string `json:"buyerclass,optional"` //采购单位行业
-	Hasbuyertel  string `json:"buyertel,optional"`   //是否有采购电话
-	Haswinnertel string `json:"winnertel,optional"`  //是否有中标电话
-	FileExists   string `json:"fileExists,optional"` //附件
-	Notkey       string `json:"notkey,optional"`     //排除词
-	InKey        string `json:"inkey,optional"`
+	UserId          string `header:"userId"`
+	AppId           string `header:"appId"` //appId
+	Type            string `header:"type,optional"`
+	Keywords        string `json:"searchvalue"`         //搜索词
+	Publishtime     string `json:"publishtime"`         //发布时间
+	City            string `json:"city,optional"`       //城市
+	Area            string `json:"area,optional"`       //地区
+	Subtype         string `json:"subtype,optional"`    //信息类型
+	Minprice        string `json:"minprice,optional"`   //最低价格
+	Maxprice        string `json:"maxprice,optional"`   //最高价格
+	Industry        string `json:"industry,optional"`   //选中的行业
+	SelectType      string `json:"selectType"`          //标题 or 全文
+	Buyerclass      string `json:"buyerclass,optional"` //采购单位行业
+	Hasbuyertel     string `json:"buyertel,optional"`   //是否有采购电话
+	Haswinnertel    string `json:"winnertel,optional"`  //是否有中标电话
+	FileExists      string `json:"fileExists,optional"` //附件
+	Notkey          string `json:"notkey,optional"`     //排除词 关键词:排除词(副:五组,每组最多15个字符)
+	InKey           string `json:"inkey,optional"`
+	SearchGroup     int    `json:"searchGroup,optional"`     // 搜索分组:默认0:全部;1:招标采购公告;2:超前项目
+	SearchMode      int    `json:"searchMode,optional"`      // 搜索模式:0:精准搜索;1:模糊搜索
+	WordsMode       int    `json:"wordsMode,optional"`       // 搜索关键词模式;默认0:包含所有,1:包含任意
+	AdditionalWords string `json:"additionalWords,optional"` // 关键词:附加关键词(副:五组,每组最多15个字符)
 }
 
 type NewestReq struct {
@@ -99,3 +103,14 @@ type CommonRes struct {
 type IncludedReq struct {
 	AppId string `header:"appId,default=10000"`
 }
+
+type SaveListModeReq struct {
+	UserId string `header:"userId"`
+	Type   string `path:"type,options=search|subscribe"` // search 搜索列表  subscribe 订阅列表
+	Mode   int    `json:"mode"`                          // 0-精简列表 1-详细列表
+}
+
+type ShowListModeReq struct {
+	UserId string `header:"userId"`
+	Type   string `path:"type,options=search|subscribe"` // search 搜索列表  subscribe 订阅列表
+}

+ 91 - 0
jyBXBase/api/test/apitest.http

@@ -0,0 +1,91 @@
+// 接口测试用例
+
+### 搜索/订阅 列表模式保存
+POST http://localhost:8006/jybx/base/subscribe/saveListMode
+Content-Type: application/json
+UserId:test20130110
+
+{
+  "mode": 0
+}
+
+### 搜索/订阅 列表模式获取
+POST http://localhost:8006/jybx/base/subscribe/showListMode
+Content-Type: application/json
+UserId:test201301102
+
+
+
+### 校验筛选条件是否重复保存
+POST http://localhost:8006/jybx/base/checkSearchScreen
+Content-Type: application/json
+UserId:test20130110
+appId:10000
+
+{
+  "searchvalue": "景山公园 天坛 地坛 陶然亭 颐和园",
+  "selectType": "content,title,buyer",
+  "industry": "建筑工程_材料设备,建筑工程_工程施工,建筑工程_勘察设计,建筑工程_监理咨询,建筑工程_机电安装",
+  "minprice": "",
+  "maxprice": "",
+  "publishtime": "fiveyear",
+  "subtype": "",
+  "buyerclass": "交通",
+  "buyertel": "y",
+  "winnertel": "y",
+  "notkey": "医院",
+  "fileExists": "0",
+  "area": "北京",
+  "city": "",
+  "searchGroup": 0,
+  "searchMode": 1,
+  "wordsMode": 1,
+  "additionalWords": "九龙山 医院 "
+}
+### 筛选条件保存
+POST http://localhost:8006/jybx/base/addSearchScreen
+Content-Type: application/json
+UserId:test20130110
+appId:10000
+
+{
+  "searchvalue": "景山公园 天坛 地坛 陶然亭 颐和园",
+  "selectType": "content,title,buyer",
+  "industry": "建筑工程_材料设备,建筑工程_工程施工,建筑工程_勘察设计,建筑工程_监理咨询,建筑工程_机电安装",
+  "minprice": "",
+  "maxprice": "",
+  "publishtime": "fiveyear",
+  "subtype": "",
+  "buyerclass": "交通",
+  "buyertel": "y",
+  "winnertel": "y",
+  "notkey": "医院",
+  "fileExists": "0",
+  "area": "北京",
+  "city": "",
+  "inkey": "742c4bce4303dffdaa8ce3c0b99ee814",
+  "searchGroup": 0,
+  "searchMode": 1,
+  "wordsMode": 1,
+  "additionalWords": "九龙山 医院"
+}
+
+
+
+### 查看已保存的筛选条件
+POST http://localhost:8006/jybx/base/showSearchScreen
+Content-Type: application/json
+UserId:test20130110
+appId:10000
+
+
+### 删除已保存的筛选条件
+POST http://localhost:8006/jybx/base/delSearchScreen
+Content-Type: application/json
+UserId:test20130110
+appId:10000
+
+{
+"id": "63bcfd44d2d550dfc36773dd"
+}
+

+ 4 - 0
jyBXBase/entity/db.go

@@ -48,3 +48,7 @@ type EsStruct struct {
 	Addr string `json:"addr"`
 	Size int    `json:"size"`
 }
+
+const (
+	ListModeCollection = "list_mode" // 搜索/订阅 列表模式 集合
+)

+ 35 - 4
jyBXBase/rpc/bxbase.proto

@@ -136,12 +136,16 @@ message ListSearchRes{
   string id = 17;
   bool isPay = 18;
   string tabularflag = 19;
+  int64  searchGroup = 20;//搜索分组:默认0:全部;1:招标采购公告;2:超前项目
+  int64  searchMode = 21;//搜索模式:0:精准搜索;1:模糊搜索
+  int64  wordsMode = 22;// 搜索关键词模式;默认0:包含所有,1:包含任意
+  string additionalWords = 23;//关键词:附加关键词(副:五组,每组最多15个字符)
 }
 
 message AddSearchReq{
   string userId = 1;
   string type = 2;
-  string keywords = 3;     //搜索词
+  string keywords = 3;     //搜索词 关键词:多个空格隔开(主)
   string publishTime = 4;   //发布时间
   string area = 5;       //地区
   string subtype = 6;    //信息类型
@@ -153,10 +157,14 @@ message AddSearchReq{
   string hasBuyerTel = 12;//是否有采购电话
   string hasWinnerTel = 13;//是否有中标电话
   string fileExists = 14;//附件
-  string notKey = 15;//排除词
-  string  city = 16;
+  string notKey = 15;//关键词:排除词(副:五组,每组最多15个字符)
+  string city = 16;
   string inKey = 17;
-  string  appId = 18;
+  string appId = 18;
+  int64  searchGroup = 19;//搜索分组:默认0:全部;1:招标采购公告;2:超前项目
+  int64  searchMode = 20;//搜索模式:0:精准搜索;1:模糊搜索
+  int64  wordsMode = 21;// 搜索关键词模式;默认0:包含所有,1:包含任意
+  string additionalWords = 22;//关键词:附加关键词(副:五组,每组最多15个字符)
 }
 
 message DelSearchReq{
@@ -262,6 +270,23 @@ message IncludedResp{
 	int64 error_code = 29;
 }
 
+// 搜索订阅列表模式保存
+message SaveListModeReq{
+  string UserId = 1; // 用户id
+  string Type = 2 ; // 类型 search-搜索列表 subscribe-订阅列表
+  int64  Mode = 3;  // 列表模式 0-精简模式 1-详细模式
+}
+// 搜索订阅列表模式获取
+message ShowListModeReq{
+  string UserId = 1; // 用户id
+  string Type = 2 ; // 类型 search-搜索列表 subscribe-订阅列表
+}
+// 搜索订阅列表模式获取结果
+message ShowListModeRes{
+  int64 err_code = 1;
+  string err_msg = 2;
+  int64 data = 3;
+}
 //servie
 service bxbase {
   //新增标签
@@ -291,4 +316,10 @@ service bxbase {
 
   //剑鱼网站收录情况
   rpc Included (AppIdReq) returns(IncludedResp);
+  // 搜索/订阅 列表模式保存
+  rpc saveListMode(SaveListModeReq) returns(CommonRes);
+  // 搜索/订阅 列表模式获取
+  rpc showListMode(ShowListModeReq) returns(ShowListModeRes);
+
+
 }

+ 19 - 0
jyBXBase/rpc/bxbase/bxbase.go

@@ -40,6 +40,9 @@ type (
 	NewestList        = bxbase.NewestList
 	NewsetBidding     = bxbase.NewsetBidding
 	NewsetBiddingResp = bxbase.NewsetBiddingResp
+	SaveListModeReq   = bxbase.SaveListModeReq
+	ShowListModeReq   = bxbase.ShowListModeReq
+	ShowListModeRes   = bxbase.ShowListModeRes
 	ShowSearchReq     = bxbase.ShowSearchReq
 	ShowSearchRes     = bxbase.ShowSearchRes
 
@@ -68,6 +71,10 @@ type (
 		NewestBidding(ctx context.Context, in *NewestBiddingReq, opts ...grpc.CallOption) (*NewsetBiddingResp, error)
 		// 剑鱼网站收录情况
 		Included(ctx context.Context, in *AppIdReq, opts ...grpc.CallOption) (*IncludedResp, error)
+		//  搜索/订阅 列表模式保存
+		SaveListMode(ctx context.Context, in *SaveListModeReq, opts ...grpc.CallOption) (*CommonRes, error)
+		//  搜索/订阅 列表模式获取
+		ShowListMode(ctx context.Context, in *ShowListModeReq, opts ...grpc.CallOption) (*ShowListModeRes, error)
 	}
 
 	defaultBxbase struct {
@@ -152,3 +159,15 @@ func (m *defaultBxbase) Included(ctx context.Context, in *AppIdReq, opts ...grpc
 	client := bxbase.NewBxbaseClient(m.cli.Conn())
 	return client.Included(ctx, in, opts...)
 }
+
+//  搜索/订阅 列表模式保存
+func (m *defaultBxbase) SaveListMode(ctx context.Context, in *SaveListModeReq, opts ...grpc.CallOption) (*CommonRes, error) {
+	client := bxbase.NewBxbaseClient(m.cli.Conn())
+	return client.SaveListMode(ctx, in, opts...)
+}
+
+//  搜索/订阅 列表模式获取
+func (m *defaultBxbase) ShowListMode(ctx context.Context, in *ShowListModeReq, opts ...grpc.CallOption) (*ShowListModeRes, error) {
+	client := bxbase.NewBxbaseClient(m.cli.Conn())
+	return client.ShowListMode(ctx, in, opts...)
+}

+ 5 - 1
jyBXBase/rpc/internal/logic/addsearchlogic.go

@@ -29,7 +29,6 @@ func NewAddSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddSear
 
 // 添加搜索列表
 func (l *AddSearchLogic) AddSearch(in *bxbase.AddSearchReq) (res *bxbase.CommonRes, err error) {
-	// todo: add your logic here and delete this line
 	res = new(bxbase.CommonRes)
 	newData := make(map[string]interface{})
 	if in.UserId == "" {
@@ -45,6 +44,7 @@ func (l *AddSearchLogic) AddSearch(in *bxbase.AddSearchReq) (res *bxbase.CommonR
 	log.Println("添加搜索列表:", in)
 	in.NotKey = strings.Replace(in.NotKey, " ", ",", -1)
 	in.Keywords = strings.Replace(in.Keywords, " ", ",", -1)
+	in.AdditionalWords = strings.Replace(in.AdditionalWords, " ", ",", -1)
 	newData["keywords"] = in.Keywords
 	newData["type"] = in.Type
 	newData["publish_time"] = in.PublishTime
@@ -63,6 +63,10 @@ func (l *AddSearchLogic) AddSearch(in *bxbase.AddSearchReq) (res *bxbase.CommonR
 	newData["creation_time"] = time.Now().Unix()
 	newData["user_id"] = in.UserId
 	newData["in_key"] = in.InKey
+	newData["searchGroup"] = int(in.SearchGroup)
+	newData["searchMode"] = int(in.SearchMode)
+	newData["wordsMode"] = int(in.WordsMode)
+	newData["additionalWords"] = in.AdditionalWords
 	IC.Mgo.Save("search_condition", newData)
 	return
 }

+ 4 - 1
jyBXBase/rpc/internal/logic/checksearchlogic.go

@@ -34,7 +34,6 @@ func NewCheckSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Check
 
 // 校验搜索列表
 func (l *CheckSearchLogic) CheckSearch(in *bxbase.AddSearchReq) (res *bxbase.CheckRes, err error) {
-	// todo: add your logic here and delete this line
 	res = new(bxbase.CheckRes)
 	if in.UserId == "" {
 		res.ErrCode = 1
@@ -49,6 +48,7 @@ func (l *CheckSearchLogic) CheckSearch(in *bxbase.AddSearchReq) (res *bxbase.Che
 	log.Println("校验搜索列表:", in)
 	in.NotKey = strings.Replace(in.NotKey, " ", ",", -1)
 	in.Keywords = strings.Replace(in.Keywords, " ", ",", -1)
+	in.AdditionalWords = strings.Replace(in.AdditionalWords, " ", ",", -1)
 	query := map[string]interface{}{
 		"user_id": in.UserId,
 	}
@@ -65,8 +65,11 @@ func (l *CheckSearchLogic) CheckSearch(in *bxbase.AddSearchReq) (res *bxbase.Che
 	in.SelectType = ValueSort(in.SelectType)
 	in.BuyerClass = ValueSort(in.BuyerClass)
 	in.NotKey = ValueSort(in.NotKey)
+	in.AdditionalWords = ValueSort(in.AdditionalWords)
+
 	inMap := common.StructToMapMore(in)
 	inKey := GetKeysByParam(inMap)
+
 	query["in_key"] = inKey
 	res.Data = inKey
 	if IC.Mgo.Count("search_condition", query) > 0 {

+ 47 - 0
jyBXBase/rpc/internal/logic/savelistmodelogic.go

@@ -0,0 +1,47 @@
+package logic
+
+import (
+	"context"
+	"errors"
+	"jyBXBase/entity"
+	IC "jyBXBase/rpc/init"
+
+	"jyBXBase/rpc/internal/svc"
+	"jyBXBase/rpc/type/bxbase"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SaveListModeLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewSaveListModeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveListModeLogic {
+	return &SaveListModeLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// SaveListMode 搜索/订阅 列表模式保存
+func (l *SaveListModeLogic) SaveListMode(in *bxbase.SaveListModeReq) (res *bxbase.CommonRes, err error) {
+	res = new(bxbase.CommonRes)
+	query := map[string]interface{}{
+		"user_id": in.UserId,
+		"type":    in.Type, // 类型 search-标讯搜索列表 subscribe-订阅列表
+	}
+	updateInfo := map[string]interface{}{
+		"$set": map[string]interface{}{
+			"mode": int(in.Mode)}, // 列表模式 0-精简列表 1-详细列表
+	}
+	// 存在则更新 不存在则保存一条新数据
+	b := IC.Mgo.Update(entity.ListModeCollection, query, updateInfo, true, false)
+	if !b {
+		res.ErrCode = 1
+		err = errors.New("保存失败")
+	}
+	return res, err
+}

+ 47 - 0
jyBXBase/rpc/internal/logic/showlistmodelogic.go

@@ -0,0 +1,47 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"context"
+	"errors"
+	"jyBXBase/entity"
+	IC "jyBXBase/rpc/init"
+
+	"jyBXBase/rpc/internal/svc"
+	"jyBXBase/rpc/type/bxbase"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type ShowListModeLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewShowListModeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ShowListModeLogic {
+	return &ShowListModeLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// ShowListMode 搜索/订阅 列表模式获取
+func (l *ShowListModeLogic) ShowListMode(in *bxbase.ShowListModeReq) (res *bxbase.ShowListModeRes, err error) {
+	res = new(bxbase.ShowListModeRes)
+	query := map[string]interface{}{
+		"user_id": in.UserId,
+		"type":    in.Type, // 类型 search-标讯搜索列表 subscribe-订阅列表
+	}
+	rs, b := IC.Mgo.FindOne(entity.ListModeCollection, query)
+	if !b {
+		res.ErrCode = 1
+		err = errors.New("获取失败")
+	} else {
+		if rs != nil {
+			res.Data = common.Int64All((*rs)["mode"])
+		}
+	}
+	return res, err
+}

+ 5 - 1
jyBXBase/rpc/internal/logic/showsearchlogic.go

@@ -27,7 +27,7 @@ func NewShowSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ShowSe
 
 // 获取收藏列表
 func (l *ShowSearchLogic) ShowSearch(in *bxbase.ShowSearchReq) (res *bxbase.ShowSearchRes, err error) {
-	// todo: add your logic here and delete this line
+	// todo 待测试
 	var (
 		data  []*bxbase.ListSearchRes
 		isOld bool
@@ -77,6 +77,10 @@ func (l *ShowSearchLogic) ShowSearch(in *bxbase.ShowSearchReq) (res *bxbase.Show
 			listSearch.FileExists = common.InterfaceToStr(vlu["file_exists"])
 			listSearch.Notkey = common.InterfaceToStr(vlu["not_key"])
 			listSearch.Tabularflag = common.InterfaceToStr(vlu["tabular_flag"])
+			listSearch.SearchGroup = common.Int64All(vlu["searchGroup"])
+			listSearch.SearchMode = common.Int64All(vlu["searchMode"])
+			listSearch.WordsMode = common.Int64All(vlu["wordsMode"])
+			listSearch.AdditionalWords = common.InterfaceToStr(vlu["additionalWords"])
 			//ppa,buyer,winner,agency
 			if SelectCheck(listSearch.SelectType, isOld) || listSearch.City != "" || listSearch.Notkey != "" ||
 				(listSearch.Publishtime != "lately-7" && listSearch.Publishtime != "lately-30" && listSearch.Publishtime != "thisyear") ||

+ 12 - 0
jyBXBase/rpc/internal/server/bxbaseserver.go

@@ -93,3 +93,15 @@ func (s *BxbaseServer) Included(ctx context.Context, in *bxbase.AppIdReq) (*bxba
 	l := logic.NewIncludedLogic(ctx, s.svcCtx)
 	return l.Included(in)
 }
+
+//  搜索/订阅 列表模式保存
+func (s *BxbaseServer) SaveListMode(ctx context.Context, in *bxbase.SaveListModeReq) (*bxbase.CommonRes, error) {
+	l := logic.NewSaveListModeLogic(ctx, s.svcCtx)
+	return l.SaveListMode(in)
+}
+
+//  搜索/订阅 列表模式获取
+func (s *BxbaseServer) ShowListMode(ctx context.Context, in *bxbase.ShowListModeReq) (*bxbase.ShowListModeRes, error) {
+	l := logic.NewShowListModeLogic(ctx, s.svcCtx)
+	return l.ShowListMode(in)
+}

+ 599 - 268
jyBXBase/rpc/type/bxbase/bxbase.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.28.0
-// 	protoc        v3.15.1
+// 	protoc        v3.19.4
 // source: bxbase.proto
 
 package bxbase
@@ -1319,25 +1319,29 @@ type ListSearchRes struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	UserId      string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
-	Type        string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
-	Searchvalue string `protobuf:"bytes,3,opt,name=searchvalue,proto3" json:"searchvalue,omitempty"` //搜索词
-	Publishtime string `protobuf:"bytes,4,opt,name=publishtime,proto3" json:"publishtime,omitempty"` //发布时间
-	Area        string `protobuf:"bytes,5,opt,name=area,proto3" json:"area,omitempty"`               //地区
-	Subtype     string `protobuf:"bytes,6,opt,name=subtype,proto3" json:"subtype,omitempty"`         //信息类型
-	Minprice    string `protobuf:"bytes,7,opt,name=minprice,proto3" json:"minprice,omitempty"`       //最低价格
-	Maxprice    string `protobuf:"bytes,8,opt,name=maxprice,proto3" json:"maxprice,omitempty"`       //最高价格
-	Industry    string `protobuf:"bytes,9,opt,name=industry,proto3" json:"industry,omitempty"`       //选中的行业
-	SelectType  string `protobuf:"bytes,10,opt,name=selectType,proto3" json:"selectType,omitempty"`  //标题 or 全文
-	Buyerclass  string `protobuf:"bytes,11,opt,name=buyerclass,proto3" json:"buyerclass,omitempty"`  //采购单位行业
-	Buyertel    string `protobuf:"bytes,12,opt,name=buyertel,proto3" json:"buyertel,omitempty"`      //是否有采购电话
-	Winnertel   string `protobuf:"bytes,13,opt,name=winnertel,proto3" json:"winnertel,omitempty"`    //是否有中标电话
-	FileExists  string `protobuf:"bytes,14,opt,name=fileExists,proto3" json:"fileExists,omitempty"`  //附件
-	Notkey      string `protobuf:"bytes,15,opt,name=notkey,proto3" json:"notkey,omitempty"`          //排除词
-	City        string `protobuf:"bytes,16,opt,name=city,proto3" json:"city,omitempty"`
-	Id          string `protobuf:"bytes,17,opt,name=id,proto3" json:"id,omitempty"`
-	IsPay       bool   `protobuf:"varint,18,opt,name=isPay,proto3" json:"isPay,omitempty"`
-	Tabularflag string `protobuf:"bytes,19,opt,name=tabularflag,proto3" json:"tabularflag,omitempty"`
+	UserId          string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
+	Type            string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+	Searchvalue     string `protobuf:"bytes,3,opt,name=searchvalue,proto3" json:"searchvalue,omitempty"` //搜索词
+	Publishtime     string `protobuf:"bytes,4,opt,name=publishtime,proto3" json:"publishtime,omitempty"` //发布时间
+	Area            string `protobuf:"bytes,5,opt,name=area,proto3" json:"area,omitempty"`               //地区
+	Subtype         string `protobuf:"bytes,6,opt,name=subtype,proto3" json:"subtype,omitempty"`         //信息类型
+	Minprice        string `protobuf:"bytes,7,opt,name=minprice,proto3" json:"minprice,omitempty"`       //最低价格
+	Maxprice        string `protobuf:"bytes,8,opt,name=maxprice,proto3" json:"maxprice,omitempty"`       //最高价格
+	Industry        string `protobuf:"bytes,9,opt,name=industry,proto3" json:"industry,omitempty"`       //选中的行业
+	SelectType      string `protobuf:"bytes,10,opt,name=selectType,proto3" json:"selectType,omitempty"`  //标题 or 全文
+	Buyerclass      string `protobuf:"bytes,11,opt,name=buyerclass,proto3" json:"buyerclass,omitempty"`  //采购单位行业
+	Buyertel        string `protobuf:"bytes,12,opt,name=buyertel,proto3" json:"buyertel,omitempty"`      //是否有采购电话
+	Winnertel       string `protobuf:"bytes,13,opt,name=winnertel,proto3" json:"winnertel,omitempty"`    //是否有中标电话
+	FileExists      string `protobuf:"bytes,14,opt,name=fileExists,proto3" json:"fileExists,omitempty"`  //附件
+	Notkey          string `protobuf:"bytes,15,opt,name=notkey,proto3" json:"notkey,omitempty"`          //排除词
+	City            string `protobuf:"bytes,16,opt,name=city,proto3" json:"city,omitempty"`
+	Id              string `protobuf:"bytes,17,opt,name=id,proto3" json:"id,omitempty"`
+	IsPay           bool   `protobuf:"varint,18,opt,name=isPay,proto3" json:"isPay,omitempty"`
+	Tabularflag     string `protobuf:"bytes,19,opt,name=tabularflag,proto3" json:"tabularflag,omitempty"`
+	SearchGroup     int64  `protobuf:"varint,20,opt,name=searchGroup,proto3" json:"searchGroup,omitempty"`        //搜索分组:默认0:全部;1:招标采购公告;2:超前项目
+	SearchMode      int64  `protobuf:"varint,21,opt,name=searchMode,proto3" json:"searchMode,omitempty"`          //搜索模式:0:精准搜索;1:模糊搜索
+	WordsMode       int64  `protobuf:"varint,22,opt,name=wordsMode,proto3" json:"wordsMode,omitempty"`            // 搜索关键词模式;默认0:包含所有,1:包含任意
+	AdditionalWords string `protobuf:"bytes,23,opt,name=additionalWords,proto3" json:"additionalWords,omitempty"` //关键词:附加关键词(副:五组,每组最多15个字符)
 }
 
 func (x *ListSearchRes) Reset() {
@@ -1505,29 +1509,61 @@ func (x *ListSearchRes) GetTabularflag() string {
 	return ""
 }
 
+func (x *ListSearchRes) GetSearchGroup() int64 {
+	if x != nil {
+		return x.SearchGroup
+	}
+	return 0
+}
+
+func (x *ListSearchRes) GetSearchMode() int64 {
+	if x != nil {
+		return x.SearchMode
+	}
+	return 0
+}
+
+func (x *ListSearchRes) GetWordsMode() int64 {
+	if x != nil {
+		return x.WordsMode
+	}
+	return 0
+}
+
+func (x *ListSearchRes) GetAdditionalWords() string {
+	if x != nil {
+		return x.AdditionalWords
+	}
+	return ""
+}
+
 type AddSearchReq struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	UserId       string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
-	Type         string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
-	Keywords     string `protobuf:"bytes,3,opt,name=keywords,proto3" json:"keywords,omitempty"`          //搜索词
-	PublishTime  string `protobuf:"bytes,4,opt,name=publishTime,proto3" json:"publishTime,omitempty"`    //发布时间
-	Area         string `protobuf:"bytes,5,opt,name=area,proto3" json:"area,omitempty"`                  //地区
-	Subtype      string `protobuf:"bytes,6,opt,name=subtype,proto3" json:"subtype,omitempty"`            //信息类型
-	MinPrice     string `protobuf:"bytes,7,opt,name=minPrice,proto3" json:"minPrice,omitempty"`          //最低价格
-	MaxPrice     string `protobuf:"bytes,8,opt,name=maxPrice,proto3" json:"maxPrice,omitempty"`          //最高价格
-	Industry     string `protobuf:"bytes,9,opt,name=industry,proto3" json:"industry,omitempty"`          //选中的行业
-	SelectType   string `protobuf:"bytes,10,opt,name=selectType,proto3" json:"selectType,omitempty"`     //标题 or 全文
-	BuyerClass   string `protobuf:"bytes,11,opt,name=buyerClass,proto3" json:"buyerClass,omitempty"`     //采购单位行业
-	HasBuyerTel  string `protobuf:"bytes,12,opt,name=hasBuyerTel,proto3" json:"hasBuyerTel,omitempty"`   //是否有采购电话
-	HasWinnerTel string `protobuf:"bytes,13,opt,name=hasWinnerTel,proto3" json:"hasWinnerTel,omitempty"` //是否有中标电话
-	FileExists   string `protobuf:"bytes,14,opt,name=fileExists,proto3" json:"fileExists,omitempty"`     //附件
-	NotKey       string `protobuf:"bytes,15,opt,name=notKey,proto3" json:"notKey,omitempty"`             //排除词
-	City         string `protobuf:"bytes,16,opt,name=city,proto3" json:"city,omitempty"`
-	InKey        string `protobuf:"bytes,17,opt,name=inKey,proto3" json:"inKey,omitempty"`
-	AppId        string `protobuf:"bytes,18,opt,name=appId,proto3" json:"appId,omitempty"`
+	UserId          string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
+	Type            string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+	Keywords        string `protobuf:"bytes,3,opt,name=keywords,proto3" json:"keywords,omitempty"`          //搜索词 关键词:多个空格隔开(主)
+	PublishTime     string `protobuf:"bytes,4,opt,name=publishTime,proto3" json:"publishTime,omitempty"`    //发布时间
+	Area            string `protobuf:"bytes,5,opt,name=area,proto3" json:"area,omitempty"`                  //地区
+	Subtype         string `protobuf:"bytes,6,opt,name=subtype,proto3" json:"subtype,omitempty"`            //信息类型
+	MinPrice        string `protobuf:"bytes,7,opt,name=minPrice,proto3" json:"minPrice,omitempty"`          //最低价格
+	MaxPrice        string `protobuf:"bytes,8,opt,name=maxPrice,proto3" json:"maxPrice,omitempty"`          //最高价格
+	Industry        string `protobuf:"bytes,9,opt,name=industry,proto3" json:"industry,omitempty"`          //选中的行业
+	SelectType      string `protobuf:"bytes,10,opt,name=selectType,proto3" json:"selectType,omitempty"`     //标题 or 全文
+	BuyerClass      string `protobuf:"bytes,11,opt,name=buyerClass,proto3" json:"buyerClass,omitempty"`     //采购单位行业
+	HasBuyerTel     string `protobuf:"bytes,12,opt,name=hasBuyerTel,proto3" json:"hasBuyerTel,omitempty"`   //是否有采购电话
+	HasWinnerTel    string `protobuf:"bytes,13,opt,name=hasWinnerTel,proto3" json:"hasWinnerTel,omitempty"` //是否有中标电话
+	FileExists      string `protobuf:"bytes,14,opt,name=fileExists,proto3" json:"fileExists,omitempty"`     //附件
+	NotKey          string `protobuf:"bytes,15,opt,name=notKey,proto3" json:"notKey,omitempty"`             //关键词:排除词(副:五组,每组最多15个字符)
+	City            string `protobuf:"bytes,16,opt,name=city,proto3" json:"city,omitempty"`
+	InKey           string `protobuf:"bytes,17,opt,name=inKey,proto3" json:"inKey,omitempty"`
+	AppId           string `protobuf:"bytes,18,opt,name=appId,proto3" json:"appId,omitempty"`
+	SearchGroup     int64  `protobuf:"varint,19,opt,name=searchGroup,proto3" json:"searchGroup,omitempty"`        //搜索分组:默认0:全部;1:招标采购公告;2:超前项目
+	SearchMode      int64  `protobuf:"varint,20,opt,name=searchMode,proto3" json:"searchMode,omitempty"`          //搜索模式:0:精准搜索;1:模糊搜索
+	WordsMode       int64  `protobuf:"varint,21,opt,name=wordsMode,proto3" json:"wordsMode,omitempty"`            // 搜索关键词模式;默认0:包含所有,1:包含任意
+	AdditionalWords string `protobuf:"bytes,22,opt,name=additionalWords,proto3" json:"additionalWords,omitempty"` //关键词:附加关键词(副:五组,每组最多15个字符)
 }
 
 func (x *AddSearchReq) Reset() {
@@ -1688,6 +1724,34 @@ func (x *AddSearchReq) GetAppId() string {
 	return ""
 }
 
+func (x *AddSearchReq) GetSearchGroup() int64 {
+	if x != nil {
+		return x.SearchGroup
+	}
+	return 0
+}
+
+func (x *AddSearchReq) GetSearchMode() int64 {
+	if x != nil {
+		return x.SearchMode
+	}
+	return 0
+}
+
+func (x *AddSearchReq) GetWordsMode() int64 {
+	if x != nil {
+		return x.WordsMode
+	}
+	return 0
+}
+
+func (x *AddSearchReq) GetAdditionalWords() string {
+	if x != nil {
+		return x.AdditionalWords
+	}
+	return ""
+}
+
 type DelSearchReq struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2612,6 +2676,190 @@ func (x *IncludedResp) GetErrorCode() int64 {
 	return 0
 }
 
+// 搜索订阅列表模式保存
+type SaveListModeReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId string `protobuf:"bytes,1,opt,name=UserId,proto3" json:"UserId,omitempty"` // 用户id
+	Type   string `protobuf:"bytes,2,opt,name=Type,proto3" json:"Type,omitempty"`     // 类型 search-搜索列表 subscribe-订阅列表
+	Mode   int64  `protobuf:"varint,3,opt,name=Mode,proto3" json:"Mode,omitempty"`    // 列表模式 0-精简模式 1-详细模式
+}
+
+func (x *SaveListModeReq) Reset() {
+	*x = SaveListModeReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_bxbase_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SaveListModeReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveListModeReq) ProtoMessage() {}
+
+func (x *SaveListModeReq) ProtoReflect() protoreflect.Message {
+	mi := &file_bxbase_proto_msgTypes[29]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SaveListModeReq.ProtoReflect.Descriptor instead.
+func (*SaveListModeReq) Descriptor() ([]byte, []int) {
+	return file_bxbase_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *SaveListModeReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *SaveListModeReq) GetType() string {
+	if x != nil {
+		return x.Type
+	}
+	return ""
+}
+
+func (x *SaveListModeReq) GetMode() int64 {
+	if x != nil {
+		return x.Mode
+	}
+	return 0
+}
+
+// 搜索订阅列表模式获取
+type ShowListModeReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId string `protobuf:"bytes,1,opt,name=UserId,proto3" json:"UserId,omitempty"` // 用户id
+	Type   string `protobuf:"bytes,2,opt,name=Type,proto3" json:"Type,omitempty"`     // 类型 search-搜索列表 subscribe-订阅列表
+}
+
+func (x *ShowListModeReq) Reset() {
+	*x = ShowListModeReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_bxbase_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ShowListModeReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ShowListModeReq) ProtoMessage() {}
+
+func (x *ShowListModeReq) ProtoReflect() protoreflect.Message {
+	mi := &file_bxbase_proto_msgTypes[30]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ShowListModeReq.ProtoReflect.Descriptor instead.
+func (*ShowListModeReq) Descriptor() ([]byte, []int) {
+	return file_bxbase_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *ShowListModeReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *ShowListModeReq) GetType() string {
+	if x != nil {
+		return x.Type
+	}
+	return ""
+}
+
+// 搜索订阅列表模式获取结果
+type ShowListModeRes struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64  `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    int64  `protobuf:"varint,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *ShowListModeRes) Reset() {
+	*x = ShowListModeRes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_bxbase_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ShowListModeRes) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ShowListModeRes) ProtoMessage() {}
+
+func (x *ShowListModeRes) ProtoReflect() protoreflect.Message {
+	mi := &file_bxbase_proto_msgTypes[31]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ShowListModeRes.ProtoReflect.Descriptor instead.
+func (*ShowListModeRes) Descriptor() ([]byte, []int) {
+	return file_bxbase_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *ShowListModeRes) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *ShowListModeRes) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *ShowListModeRes) GetData() int64 {
+	if x != nil {
+		return x.Data
+	}
+	return 0
+}
+
 var File_bxbase_proto protoreflect.FileDescriptor
 
 var file_bxbase_proto_rawDesc = []byte{
@@ -2753,7 +3001,7 @@ var file_bxbase_proto_rawDesc = []byte{
 	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x28, 0x0a,
 	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x78,
 	0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
-	0x73, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x8f, 0x04, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74,
+	0x73, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x99, 0x05, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74,
 	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
 	0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
 	0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
@@ -2786,220 +3034,260 @@ var file_bxbase_proto_rawDesc = []byte{
 	0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x50, 0x61, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08,
 	0x52, 0x05, 0x69, 0x73, 0x50, 0x61, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x75, 0x6c,
 	0x61, 0x72, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61,
-	0x62, 0x75, 0x6c, 0x61, 0x72, 0x66, 0x6c, 0x61, 0x67, 0x22, 0xf8, 0x03, 0x0a, 0x0c, 0x41, 0x64,
-	0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72,
-	0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
-	0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
-	0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
-	0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x74,
-	0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79,
-	0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a,
-	0x0a, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e,
-	0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e,
-	0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
-	0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6c, 0x65,
-	0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x43,
-	0x6c, 0x61, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65,
-	0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x42, 0x75, 0x79,
-	0x65, 0x72, 0x54, 0x65, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x61, 0x73,
-	0x42, 0x75, 0x79, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x57,
-	0x69, 0x6e, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
-	0x68, 0x61, 0x73, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a,
-	0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06,
-	0x6e, 0x6f, 0x74, 0x4b, 0x65, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f,
-	0x74, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x4b, 0x65,
-	0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x14,
-	0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61,
-	0x70, 0x70, 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63,
-	0x68, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05,
-	0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70,
-	0x49, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x4e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x42, 0x69, 0x64,
-	0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x69,
-	0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69,
-	0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12,
-	0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65,
-	0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x73, 0x65,
-	0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 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, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x73, 0x65, 0x74, 0x42, 0x69, 0x64,
-	0x64, 0x69, 0x6e, 0x67, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd4, 0x01, 0x0a, 0x0d, 0x4e,
-	0x65, 0x77, 0x73, 0x65, 0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05,
-	0x69, 0x73, 0x56, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x56,
-	0x69, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x73,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x53, 0x75, 0x62, 0x4b, 0x65,
-	0x79, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x48, 0x53, 0x4b, 0x65, 0x79, 0x73, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x48, 0x53, 0x4b, 0x65, 0x79, 0x73,
-	0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x6e, 0x65, 0x77,
-	0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a,
-	0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
-	0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x46, 0x6c,
-	0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x46, 0x6c, 0x61,
-	0x67, 0x22, 0xa6, 0x03, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74,
-	0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x61, 0x72, 0x65, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x64, 0x61,
-	0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x69, 0x64,
-	0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x12, 0x1e,
-	0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x1c,
-	0x0a, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x20, 0x0a, 0x0b,
-	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a,
-	0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
-	0x74, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
-	0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70,
-	0x70, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64,
-	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
-	0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x0d,
-	0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73,
-	0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x43, 0x6f, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x05, 0x69, 0x73, 0x43, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x18, 0x0f,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x70,
-	0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
-	0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x09, 0x43, 0x6f,
-	0x6d, 0x6d, 0x6f, 0x6e, 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, 0x22, 0x52, 0x0a, 0x08, 0x43,
-	0x68, 0x65, 0x63, 0x6b, 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, 0x12, 0x0a, 0x04, 0x64,
-	0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22,
-	0x20, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x41,
-	0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49,
-	0x64, 0x22, 0xd0, 0x07, 0x0a, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03,
-	0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x64, 0x61, 0x79, 0x12, 0x10,
-	0x0a, 0x03, 0x62, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x62, 0x69, 0x64,
-	0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x62, 0x69, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x69,
-	0x64, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0d, 0x62, 0x69, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64,
-	0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x02, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72,
-	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x11,
-	0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e,
-	0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e,
-	0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07,
-	0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65,
-	0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69,
-	0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65,
-	0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05,
-	0x62, 0x75, 0x79, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x62, 0x75, 0x79,
-	0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x75, 0x79, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x18,
-	0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x79, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74,
-	0x12, 0x28, 0x0a, 0x0f, 0x62, 0x75, 0x79, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70,
-	0x65, 0x6e, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x79, 0x65, 0x72,
-	0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x69,
-	0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x02,
-	0x52, 0x0c, 0x62, 0x69, 0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a,
-	0x0a, 0x10, 0x62, 0x69, 0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x6e,
-	0x69, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x64, 0x44, 0x61, 0x79,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x36, 0x0a, 0x16, 0x62, 0x69,
-	0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70,
-	0x70, 0x65, 0x6e, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x62, 0x69, 0x64, 0x44,
-	0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65,
-	0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x13,
-	0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x22,
-	0x0a, 0x0c, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x14,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x55, 0x6e,
-	0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x55, 0x6e,
-	0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12,
-	0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65,
-	0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x75, 0x72,
-	0x61, 0x63, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64,
-	0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x65, 0x6c,
-	0x64, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x17, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61,
-	0x63, 0x79, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41,
-	0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e,
-	0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x63,
-	0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64,
-	0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04,
-	0x70, 0x75, 0x73, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74,
-	0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74,
-	0x12, 0x26, 0x0a, 0x0e, 0x70, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65,
-	0x6e, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x75, 0x73, 0x68, 0x55, 0x6e,
-	0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f,
-	0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72,
-	0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63,
-	0x6f, 0x64, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72,
-	0x43, 0x6f, 0x64, 0x65, 0x32, 0xab, 0x05, 0x0a, 0x06, 0x62, 0x78, 0x62, 0x61, 0x73, 0x65, 0x12,
-	0x32, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x2e, 0x62, 0x78,
-	0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x1a,
-	0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c,
-	0x52, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65,
-	0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a,
-	0x18, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c,
-	0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x61, 0x62,
-	0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c,
-	0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a,
-	0x15, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x42, 0x43, 0x41, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x12, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x42, 0x43, 0x41, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4c,
-	0x61, 0x62, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3e, 0x0a,
-	0x0c, 0x49, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e,
-	0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x41, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x73,
-	0x43, 0x6f, 0x6c, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x26, 0x0a,
-	0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x69,
-	0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x69,
-	0x73, 0x74, 0x52, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x65, 0x61,
-	0x72, 0x63, 0x68, 0x12, 0x14, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77,
-	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x62, 0x78, 0x63, 0x6f,
-	0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x12,
-	0x32, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x13, 0x2e, 0x62,
-	0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
-	0x71, 0x1a, 0x10, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
-	0x52, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x61, 0x72,
-	0x63, 0x68, 0x12, 0x13, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65,
-	0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e,
-	0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x53,
-	0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x13, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x44, 0x65,
-	0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x62, 0x78, 0x63,
-	0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0d,
-	0x4e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x17, 0x2e,
-	0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x42, 0x69, 0x64, 0x64,
-	0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4e,
+	0x62, 0x75, 0x6c, 0x61, 0x72, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
+	0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x73,
+	0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x77,
+	0x6f, 0x72, 0x64, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
+	0x77, 0x6f, 0x72, 0x64, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x64, 0x64,
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x17, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x57, 0x6f,
+	0x72, 0x64, 0x73, 0x22, 0x82, 0x05, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63,
+	0x68, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
+	0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b,
+	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72,
+	0x65, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+	0x6d, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x6d, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x50,
+	0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50,
+	0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79,
+	0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65,
+	0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73,
+	0x12, 0x20, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x42, 0x75, 0x79, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x18,
+	0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x42, 0x75, 0x79, 0x65, 0x72, 0x54,
+	0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x54,
+	0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x57, 0x69, 0x6e,
+	0x6e, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78,
+	0x69, 0x73, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65,
+	0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x4b, 0x65, 0x79,
+	0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x12,
+	0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69,
+	0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49,
+	0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x20,
+	0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x13, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70,
+	0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x14,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x15, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x28,
+	0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x64,
+	0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x53,
+	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
+	0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x4e, 0x65, 0x77, 0x65, 0x73,
+	0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x63,
+	0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12,
+	0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x08, 0x69, 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x75,
+	0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e,
+	0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73,
+	0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x11, 0x4e,
 	0x65, 0x77, 0x73, 0x65, 0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x30, 0x0a, 0x08, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x12, 0x0f, 0x2e, 0x62,
-	0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e,
-	0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x52, 0x65,
-	0x73, 0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x62, 0x78, 0x62, 0x61, 0x73, 0x65, 0x62, 0x06,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	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, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x73, 0x65,
+	0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd4,
+	0x01, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x73, 0x65, 0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67,
+	0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x56, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x05, 0x69, 0x73, 0x56, 0x69, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x53, 0x75, 0x62,
+	0x4b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x53,
+	0x75, 0x62, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x48, 0x53, 0x4b,
+	0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x48, 0x53,
+	0x4b, 0x65, 0x79, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x04, 0x6c, 0x69,
+	0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c,
+	0x2e, 0x6e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73,
+	0x74, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73,
+	0x75, 0x62, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75,
+	0x62, 0x46, 0x6c, 0x61, 0x67, 0x22, 0xa6, 0x03, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x65, 0x73, 0x74,
+	0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x09,
+	0x62, 0x69, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x09, 0x62, 0x69, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75,
+	0x64, 0x67, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x62, 0x75, 0x64, 0x67,
+	0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61,
+	0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6b, 0x65, 0x79, 0x73, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6b, 0x65, 0x79, 0x73,
+	0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x14,
+	0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,
+	0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14,
+	0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61,
+	0x70, 0x70, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73,
+	0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78,
+	0x69, 0x73, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x43, 0x6f, 0x6c, 0x18, 0x0e, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x43, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69,
+	0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1e,
+	0x0a, 0x0a, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x3f,
+	0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 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, 0x22,
+	0x52, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 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,
+	0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64,
+	0x61, 0x74, 0x61, 0x22, 0x20, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12,
+	0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xd0, 0x07, 0x0a, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+	0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f,
+	0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
+	0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x64,
+	0x61, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x03, 0x62, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x69, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x24,
+	0x0a, 0x0d, 0x62, 0x69, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x69, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70,
+	0x70, 0x65, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20,
+	0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x74,
+	0x12, 0x2c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x41,
+	0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x10,
+	0x0a, 0x03, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x65, 0x6e, 0x74,
+	0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6e,
+	0x74, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64,
+	0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x79, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x05, 0x62, 0x75, 0x79, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x75, 0x79, 0x65, 0x72, 0x55,
+	0x6e, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x79, 0x65, 0x72,
+	0x55, 0x6e, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x75, 0x79, 0x65, 0x72, 0x55, 0x6e, 0x69,
+	0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62,
+	0x75, 0x79, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x22,
+	0x0a, 0x0c, 0x62, 0x69, 0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x10,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x62, 0x69, 0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x69, 0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69,
+	0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x36,
+	0x0a, 0x16, 0x62, 0x69, 0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x6e,
+	0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16,
+	0x62, 0x69, 0x64, 0x44, 0x61, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x69, 0x74,
+	0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65,
+	0x6c, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65,
+	0x6c, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x55, 0x6e,
+	0x69, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65,
+	0x6c, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65,
+	0x6c, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x12, 0x62, 0x69, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x55, 0x6e, 0x69, 0x74,
+	0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41,
+	0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x66,
+	0x69, 0x65, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x12, 0x2c, 0x0a, 0x11,
+	0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x69,
+	0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x63,
+	0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x66, 0x69,
+	0x65, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x69, 0x74, 0x41,
+	0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x66, 0x69, 0x65,
+	0x6c, 0x64, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70,
+	0x70, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x19, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x75, 0x73, 0x68,
+	0x55, 0x6e, 0x69, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x73, 0x68,
+	0x55, 0x6e, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74,
+	0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x75,
+	0x73, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09,
+	0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65,
+	0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x51, 0x0a, 0x0f, 0x53, 0x61, 0x76, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x3d, 0x0a, 0x0f, 0x53,
+	0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16,
+	0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x22, 0x59, 0x0a, 0x0f, 0x53, 0x68,
+	0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 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, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0xa5, 0x06, 0x0a, 0x06, 0x62, 0x78, 0x62, 0x61, 0x73, 0x65,
+	0x12, 0x32, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x2e, 0x62,
+	0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x65, 0x71,
+	0x1a, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x6c, 0x61, 0x62, 0x65,
+	0x6c, 0x52, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+	0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x47,
+	0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+	0x1a, 0x18, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65,
+	0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x61,
+	0x62, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x62, 0x78, 0x63, 0x6f,
+	0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+	0x1a, 0x15, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x42, 0x43, 0x41, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x12, 0x12, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x42, 0x43, 0x41, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e,
+	0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3e,
+	0x0a, 0x0c, 0x49, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
+	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x41, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x49,
+	0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x26,
+	0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x65,
+	0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f,
+	0x77, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x62, 0x78, 0x63,
+	0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73,
+	0x12, 0x32, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x13, 0x2e,
+	0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52,
+	0x65, 0x71, 0x1a, 0x10, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x52, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x12, 0x13, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x53,
+	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c,
+	0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x44, 0x65, 0x6c,
+	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x13, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x44,
+	0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x62, 0x78,
+	0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x42, 0x0a,
+	0x0d, 0x4e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x17,
+	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x42, 0x69, 0x64,
+	0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e,
+	0x4e, 0x65, 0x77, 0x73, 0x65, 0x74, 0x42, 0x69, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x30, 0x0a, 0x08, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x12, 0x0f, 0x2e,
+	0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x13,
+	0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x0c, 0x73, 0x61, 0x76, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d,
+	0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x61, 0x76, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x62, 0x78,
+	0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3e, 0x0a,
+	0x0c, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e,
+	0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x6f,
+	0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x62, 0x78, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x68,
+	0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x42, 0x0a, 0x5a,
+	0x08, 0x2e, 0x2f, 0x62, 0x78, 0x62, 0x61, 0x73, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
 }
 
 var (
@@ -3014,7 +3302,7 @@ func file_bxbase_proto_rawDescGZIP() []byte {
 	return file_bxbase_proto_rawDescData
 }
 
-var file_bxbase_proto_msgTypes = make([]protoimpl.MessageInfo, 29)
+var file_bxbase_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
 var file_bxbase_proto_goTypes = []interface{}{
 	(*AddlabelReq)(nil),       // 0: bxcol.AddlabelReq
 	(*AddlabelRes)(nil),       // 1: bxcol.AddlabelRes
@@ -3045,6 +3333,9 @@ var file_bxbase_proto_goTypes = []interface{}{
 	(*CheckRes)(nil),          // 26: bxcol.CheckRes
 	(*AppIdReq)(nil),          // 27: bxcol.AppIdReq
 	(*IncludedResp)(nil),      // 28: bxcol.IncludedResp
+	(*SaveListModeReq)(nil),   // 29: bxcol.SaveListModeReq
+	(*ShowListModeReq)(nil),   // 30: bxcol.ShowListModeReq
+	(*ShowListModeRes)(nil),   // 31: bxcol.ShowListModeRes
 }
 var file_bxbase_proto_depIdxs = []int32{
 	4,  // 0: bxcol.GetLabelActionRes.labels:type_name -> bxcol.LabelByUser
@@ -3067,20 +3358,24 @@ var file_bxbase_proto_depIdxs = []int32{
 	20, // 17: bxcol.bxbase.DelSearch:input_type -> bxcol.DelSearchReq
 	21, // 18: bxcol.bxbase.NewestBidding:input_type -> bxcol.NewestBiddingReq
 	27, // 19: bxcol.bxbase.Included:input_type -> bxcol.AppIdReq
-	1,  // 20: bxcol.bxbase.Addlabel:output_type -> bxcol.AddlabelRes
-	3,  // 21: bxcol.bxbase.GetLabelAction:output_type -> bxcol.GetLabelActionRes
-	6,  // 22: bxcol.bxbase.LabelAction:output_type -> bxcol.LabelActionRes
-	6,  // 23: bxcol.bxbase.BCAction:output_type -> bxcol.LabelActionRes
-	9,  // 24: bxcol.bxbase.IsCollAction:output_type -> bxcol.IsCollActionRes
-	13, // 25: bxcol.bxbase.List:output_type -> bxcol.ListRes
-	17, // 26: bxcol.bxbase.ShowSearch:output_type -> bxcol.ShowSearchRes
-	25, // 27: bxcol.bxbase.AddSearch:output_type -> bxcol.CommonRes
-	26, // 28: bxcol.bxbase.CheckSearch:output_type -> bxcol.CheckRes
-	25, // 29: bxcol.bxbase.DelSearch:output_type -> bxcol.CommonRes
-	22, // 30: bxcol.bxbase.NewestBidding:output_type -> bxcol.NewsetBiddingResp
-	28, // 31: bxcol.bxbase.Included:output_type -> bxcol.IncludedResp
-	20, // [20:32] is the sub-list for method output_type
-	8,  // [8:20] is the sub-list for method input_type
+	29, // 20: bxcol.bxbase.saveListMode:input_type -> bxcol.SaveListModeReq
+	30, // 21: bxcol.bxbase.showListMode:input_type -> bxcol.ShowListModeReq
+	1,  // 22: bxcol.bxbase.Addlabel:output_type -> bxcol.AddlabelRes
+	3,  // 23: bxcol.bxbase.GetLabelAction:output_type -> bxcol.GetLabelActionRes
+	6,  // 24: bxcol.bxbase.LabelAction:output_type -> bxcol.LabelActionRes
+	6,  // 25: bxcol.bxbase.BCAction:output_type -> bxcol.LabelActionRes
+	9,  // 26: bxcol.bxbase.IsCollAction:output_type -> bxcol.IsCollActionRes
+	13, // 27: bxcol.bxbase.List:output_type -> bxcol.ListRes
+	17, // 28: bxcol.bxbase.ShowSearch:output_type -> bxcol.ShowSearchRes
+	25, // 29: bxcol.bxbase.AddSearch:output_type -> bxcol.CommonRes
+	26, // 30: bxcol.bxbase.CheckSearch:output_type -> bxcol.CheckRes
+	25, // 31: bxcol.bxbase.DelSearch:output_type -> bxcol.CommonRes
+	22, // 32: bxcol.bxbase.NewestBidding:output_type -> bxcol.NewsetBiddingResp
+	28, // 33: bxcol.bxbase.Included:output_type -> bxcol.IncludedResp
+	25, // 34: bxcol.bxbase.saveListMode:output_type -> bxcol.CommonRes
+	31, // 35: bxcol.bxbase.showListMode:output_type -> bxcol.ShowListModeRes
+	22, // [22:36] is the sub-list for method output_type
+	8,  // [8:22] is the sub-list for method input_type
 	8,  // [8:8] is the sub-list for extension type_name
 	8,  // [8:8] is the sub-list for extension extendee
 	0,  // [0:8] is the sub-list for field type_name
@@ -3440,6 +3735,42 @@ func file_bxbase_proto_init() {
 				return nil
 			}
 		}
+		file_bxbase_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SaveListModeReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_bxbase_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ShowListModeReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_bxbase_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ShowListModeRes); 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{
@@ -3447,7 +3778,7 @@ func file_bxbase_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_bxbase_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   29,
+			NumMessages:   32,
 			NumExtensions: 0,
 			NumServices:   1,
 		},

+ 77 - 1
jyBXBase/rpc/type/bxbase/bxbase_grpc.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-grpc v1.2.0
-// - protoc             v3.15.1
+// - protoc             v3.19.4
 // source: bxbase.proto
 
 package bxbase
@@ -46,6 +46,10 @@ type BxbaseClient interface {
 	NewestBidding(ctx context.Context, in *NewestBiddingReq, opts ...grpc.CallOption) (*NewsetBiddingResp, error)
 	//剑鱼网站收录情况
 	Included(ctx context.Context, in *AppIdReq, opts ...grpc.CallOption) (*IncludedResp, error)
+	// 搜索/订阅 列表模式保存
+	SaveListMode(ctx context.Context, in *SaveListModeReq, opts ...grpc.CallOption) (*CommonRes, error)
+	// 搜索/订阅 列表模式获取
+	ShowListMode(ctx context.Context, in *ShowListModeReq, opts ...grpc.CallOption) (*ShowListModeRes, error)
 }
 
 type bxbaseClient struct {
@@ -164,6 +168,24 @@ func (c *bxbaseClient) Included(ctx context.Context, in *AppIdReq, opts ...grpc.
 	return out, nil
 }
 
+func (c *bxbaseClient) SaveListMode(ctx context.Context, in *SaveListModeReq, opts ...grpc.CallOption) (*CommonRes, error) {
+	out := new(CommonRes)
+	err := c.cc.Invoke(ctx, "/bxcol.bxbase/saveListMode", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *bxbaseClient) ShowListMode(ctx context.Context, in *ShowListModeReq, opts ...grpc.CallOption) (*ShowListModeRes, error) {
+	out := new(ShowListModeRes)
+	err := c.cc.Invoke(ctx, "/bxcol.bxbase/showListMode", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // BxbaseServer is the server API for Bxbase service.
 // All implementations must embed UnimplementedBxbaseServer
 // for forward compatibility
@@ -192,6 +214,10 @@ type BxbaseServer interface {
 	NewestBidding(context.Context, *NewestBiddingReq) (*NewsetBiddingResp, error)
 	//剑鱼网站收录情况
 	Included(context.Context, *AppIdReq) (*IncludedResp, error)
+	// 搜索/订阅 列表模式保存
+	SaveListMode(context.Context, *SaveListModeReq) (*CommonRes, error)
+	// 搜索/订阅 列表模式获取
+	ShowListMode(context.Context, *ShowListModeReq) (*ShowListModeRes, error)
 	mustEmbedUnimplementedBxbaseServer()
 }
 
@@ -235,6 +261,12 @@ func (UnimplementedBxbaseServer) NewestBidding(context.Context, *NewestBiddingRe
 func (UnimplementedBxbaseServer) Included(context.Context, *AppIdReq) (*IncludedResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Included not implemented")
 }
+func (UnimplementedBxbaseServer) SaveListMode(context.Context, *SaveListModeReq) (*CommonRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SaveListMode not implemented")
+}
+func (UnimplementedBxbaseServer) ShowListMode(context.Context, *ShowListModeReq) (*ShowListModeRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ShowListMode not implemented")
+}
 func (UnimplementedBxbaseServer) mustEmbedUnimplementedBxbaseServer() {}
 
 // UnsafeBxbaseServer may be embedded to opt out of forward compatibility for this service.
@@ -464,6 +496,42 @@ func _Bxbase_Included_Handler(srv interface{}, ctx context.Context, dec func(int
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Bxbase_SaveListMode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SaveListModeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BxbaseServer).SaveListMode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bxcol.bxbase/saveListMode",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BxbaseServer).SaveListMode(ctx, req.(*SaveListModeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bxbase_ShowListMode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ShowListModeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BxbaseServer).ShowListMode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bxcol.bxbase/showListMode",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BxbaseServer).ShowListMode(ctx, req.(*ShowListModeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Bxbase_ServiceDesc is the grpc.ServiceDesc for Bxbase service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -519,6 +587,14 @@ var Bxbase_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "Included",
 			Handler:    _Bxbase_Included_Handler,
 		},
+		{
+			MethodName: "saveListMode",
+			Handler:    _Bxbase_SaveListMode_Handler,
+		},
+		{
+			MethodName: "showListMode",
+			Handler:    _Bxbase_ShowListMode_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "bxbase.proto",

+ 24 - 0
jyBXSubscribe/api/test/apitest.http

@@ -0,0 +1,24 @@
+// 接口测试
+### 订阅列表
+POST http://localhost:8002/jybx/subscribe/mType/list
+Content-Type: application/json
+UserId:63aea0bd901a4b3d4e661efb
+appId:10000
+newUserId:366045
+
+{
+  "pageNum": 1,
+  "pageSize": 50,
+  "format": "table",
+  "area": "",
+  "selectTime": "all",
+  "city": "",
+  "buyerClass": "",
+  "subtype": "",
+  "industry": "",
+  "keyWords": "",
+  "fileExists": "",
+  "price": "",
+  "exportNum": "",
+  "vt": "m"
+}

+ 11 - 1
jyBXSubscribe/rpc/bxsubscribe.proto

@@ -51,7 +51,7 @@ message subscribeInfo {
   int64 ca_isvisit = 10;
   int64  ca_type = 11;
   repeated string  matchKeys = 12;
-  double budget = 13;
+  double budget = 13;// 预算
   double bidAmount = 14;
   int64 collection = 15;
   string  buyer = 16;
@@ -62,6 +62,16 @@ message subscribeInfo {
   bool   ca_fileExists = 21;
   int64  source = 22;//来源;1:个人订阅 2:企业自动分发 3:企业手动分发
   string  site = 23;
+  string buyerTel = 24; // 采购单位联系方式
+  string buyerPerson = 25; // 采购单位联系人
+  string agency =26;//代理机构
+  string agencyPerson=27;//代理机构联系人
+  string agencyTel=28;//代理机构联系电话
+  string winnerPerson=29;//中标企业联系人
+  string winnerTel=30;//中标企业联系电话
+  string signendTime=31 ;// 报名截止日期
+  string bidendtime=32;// 投标截止日期
+
 }
 //
 message SomeInfoReq{

+ 8 - 0
jyBXSubscribe/rpc/internal/logic/getsublistlogic.go

@@ -6,6 +6,7 @@ import (
 	"jyBXSubscribe/rpc/internal/svc"
 	"jyBXSubscribe/rpc/model"
 	"jyBXSubscribe/rpc/type/bxsubscribe"
+	"jyBXSubscribe/rpc/util"
 	"time"
 
 	"app.yhyue.com/moapp/jybase/common"
@@ -39,6 +40,12 @@ func (l *GetSubListLogic) GetSubList(in *bxsubscribe.SubscribeInfosReq) (*bxsubs
 	if in.PageNum == 1 {
 		go model.UpdateUserPushUnread(in.UserId, in.UserType)
 	}
+	isPayUser := false
+	userInfo := util.GetVipState(IC.MainMysql, IC.Mgo, in.UserId)
+	//付费用户
+	if in.UserType != "fType" && userInfo.IsPayedUser() {
+		isPayUser = true
+	}
 	spqp := &model.SubPushQueryParam{
 		Mgo_bidding:      IC.MgoBidding,                      //mongo
 		Bidding:          IC.DB.Mongo.Bidding.Collection,     //招标信息 表
@@ -63,6 +70,7 @@ func (l *GetSubListLogic) GetSubList(in *bxsubscribe.SubscribeInfosReq) (*bxsubs
 		IsEnt:            in.IsEnt,
 		BuySubject:       0,
 		UserType:         in.UserType,
+		IsPayUser:        isPayUser,
 	}
 	//主体处理(fType:普通用户;vType:超级订阅用户;mType:大会员用户;eType:商机管理用户)
 	infoCount := int64(0)

+ 26 - 9
jyBXSubscribe/rpc/model/push.go

@@ -28,8 +28,8 @@ import (
 const (
 	pageSize            = 100
 	AllSubPushCacheSize = 200
-	query               = `{"query":{"terms":{"_id":["%s"]}},"_source":["_id","area", "publishtime", "s_subscopeclass", "subtype", "title", "toptype", "type", "buyerclass","bidamount","budget","projectname","buyer","bidopentime","s_winner","filetext"],"from":0,"size":%d}`
-	mongodb_fields      = `{"_id":1,"area":1,"publishtime":1,"s_subscopeclass":1,"subtype":1,"title":1,"toptype":1,"type":1, "buyerclass":1,"budget":1,"bidamount":1,"s_winner":1,"bidopentime":1,"buyer":1,"projectname":1}`
+	query               = `{"query":{"terms":{"_id":["%s"]}},"_source":["_id","area", "publishtime", "s_subscopeclass", "subtype", "title", "toptype", "type", "buyerclass","bidamount","budget","projectname","buyer","bidopentime","s_winner","filetext","buyertel","buyerperson","agency","agencyperson","agencytel","winnerperson","winnertel","signendTime","bidendtime"],"from":0,"size":%d}`
+	mongodb_fields      = `{"_id":1,"area":1,"publishtime":1,"s_subscopeclass":1,"subtype":1,"title":1,"toptype":1,"type":1, "buyerclass":1,"budget":1,"bidamount":1,"s_winner":1,"bidopentime":1,"buyer":1,"projectname":1,"filetext":1,"buyertel":1,"buyerperson":1,"agency":1,"agencyperson":1,"agencytel":1,"winnerperson":1,"winnertel":1,"signendTime":1,"bidendtime":1}`
 
 	SubFreeFlag  = "fType"
 	SubVipFlag   = "vType"
@@ -104,6 +104,7 @@ type SubPushQueryParam struct {
 	SelectInfoIds    []string
 	BuySubject       int64
 	UserType         string
+	IsPayUser        bool // 是否是付费用户
 }
 
 // 关键词参数
@@ -179,7 +180,7 @@ func (s *subscribePush) allKey(userId, userType string) string {
 }
 
 // 历史推送记录中单条信息格式化
-func (s *subscribePush) InfoFormat(p *PushCa, info *map[string]interface{}) *bxsubscribe.SubscribeInfo {
+func (s *subscribePush) InfoFormat(p *PushCa, info *map[string]interface{}, isPay bool) *bxsubscribe.SubscribeInfo {
 	area := common.ObjToString((*info)["area"])
 	if area == "A" {
 		area = "全国"
@@ -203,7 +204,7 @@ func (s *subscribePush) InfoFormat(p *PushCa, info *map[string]interface{}) *bxs
 	if _id == "" {
 		_id = common.ObjToString((*info)["_id"])
 	}
-	return &bxsubscribe.SubscribeInfo{
+	formatInfo := &bxsubscribe.SubscribeInfo{
 		XId:          encrypt.EncodeArticleId2ByCheck(_id),
 		Title:        common.InterfaceToStr((*info)["title"]),
 		Area:         area,
@@ -227,6 +228,22 @@ func (s *subscribePush) InfoFormat(p *PushCa, info *map[string]interface{}) *bxs
 		Source:       p.Source,
 		Site:         common.InterfaceToStr((*info)["site"]),
 	}
+	// 免费用户返回精简列表字段
+	if !isPay {
+		return formatInfo
+	}
+	// 付费用户返回详细列表字段
+	formatInfo.BuyerTel = common.ObjToString((*info)["buyertel"])
+	formatInfo.BuyerPerson = common.ObjToString((*info)["buyerperson"])
+	formatInfo.Agency = common.ObjToString((*info)["agency"])
+	formatInfo.AgencyPerson = common.ObjToString((*info)["agencyperson"])
+	formatInfo.AgencyTel = common.ObjToString((*info)["agencytel"])
+	formatInfo.WinnerPerson = common.ObjToString((*info)["winnerperson"])
+	formatInfo.WinnerTel = common.ObjToString((*info)["winnertel"])
+	formatInfo.SignendTime = common.ObjToString((*info)["signendTime"])
+	formatInfo.Bidendtime = common.ObjToString((*info)["bidendtime"])
+	return formatInfo
+
 }
 
 func (s *subscribePush) Datas(spqp *SubPushQueryParam) (hasNextPage bool, total int64, result []*bxsubscribe.SubscribeInfo) {
@@ -555,7 +572,7 @@ func (s *subscribePush) getDatasFromMysql(spqp *SubPushQueryParam, starttime, en
 	if list != nil && len(*list) > 0 {
 		pushCas := s.GetJyPushs(*list)
 		if !spqp.Export {
-			result = s.GetInfoByIds(spqp.Mgo_bidding, spqp.Bidding, spqp.Bidding_back, pushCas)
+			result = s.GetInfoByIds(spqp.Mgo_bidding, spqp.Bidding, spqp.Bidding_back, pushCas, spqp.IsPayUser)
 		} else {
 			result = s.GetOnlyExportInfo(pushCas)
 		}
@@ -575,7 +592,7 @@ func (s *subscribePush) GetOnlyExportInfo(pushCas []*PushCa) []*bxsubscribe.Subs
 }
 
 // 根据id取内容
-func (s *subscribePush) GetInfoByIds(Mgo_bidding mongodb.MongodbSim, bidding, bidding_back string, pushCas []*PushCa) []*bxsubscribe.SubscribeInfo {
+func (s *subscribePush) GetInfoByIds(Mgo_bidding mongodb.MongodbSim, bidding, bidding_back string, pushCas []*PushCa, isPay bool) []*bxsubscribe.SubscribeInfo {
 	array := make([]*bxsubscribe.SubscribeInfo, len(pushCas))
 	if len(pushCas) == 0 {
 		return array
@@ -668,7 +685,7 @@ func (s *subscribePush) GetInfoByIds(Mgo_bidding mongodb.MongodbSim, bidding, bi
 		if info == nil {
 			info = map[string]interface{}{}
 		}
-		array[k] = s.InfoFormat(v, &info)
+		array[k] = s.InfoFormat(v, &info, isPay)
 	}
 	return array
 }
@@ -916,7 +933,7 @@ func GetKeySet(t string, u *map[string]interface{}, data []string) (bool, []stri
 const (
 	INDEX      = "bidding"
 	TYPE       = "bidding"
-	bidField   = `"_id","title","publishtime","toptype","subtype","type","area","city","s_subscopeclass","buyerclass","budget","bidamount","filetext","spidercode","site"`
+	bidField   = `"_id","title","publishtime","toptype","subtype","type","area","city","s_subscopeclass","buyerclass","budget","bidamount","filetext","spidercode","site","buyer","bidopentime","buyertel","buyerperson","agency","agencyperson","agencytel","s_winner",winnerperson","winnertel","signendTime","bidendtime"`
 	bidTime    = `{"range":{"publishtime":{"gt":%d}}}`
 	bidSort    = `{"publishtime":"desc"}`
 	findfields = `"title"`
@@ -992,7 +1009,7 @@ func (s *subscribePush) listManager(spqp *SubPushQueryParam, list []map[string]i
 			Date:       time.Now().Unix(),
 			Keys:       matchkeys,
 			FileExists: v["filetext"] != nil,
-		}, &v)
+		}, &v, spqp.IsPayUser)
 	}
 	id := int64(0)
 	switch s.ModuleFlag {

+ 271 - 182
jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.27.1
-// 	protoc        v3.20.0--rc2
+// 	protoc-gen-go v1.28.0
+// 	protoc        v3.19.4
 // source: bxsubscribe.proto
 
 package bxsubscribe
@@ -362,7 +362,7 @@ type SubscribeInfo struct {
 	CaIsvisit    int64    `protobuf:"varint,10,opt,name=ca_isvisit,json=caIsvisit,proto3" json:"ca_isvisit,omitempty"`
 	CaType       int64    `protobuf:"varint,11,opt,name=ca_type,json=caType,proto3" json:"ca_type,omitempty"`
 	MatchKeys    []string `protobuf:"bytes,12,rep,name=matchKeys,proto3" json:"matchKeys,omitempty"`
-	Budget       float64  `protobuf:"fixed64,13,opt,name=budget,proto3" json:"budget,omitempty"`
+	Budget       float64  `protobuf:"fixed64,13,opt,name=budget,proto3" json:"budget,omitempty"` // 预算
 	BidAmount    float64  `protobuf:"fixed64,14,opt,name=bidAmount,proto3" json:"bidAmount,omitempty"`
 	Collection   int64    `protobuf:"varint,15,opt,name=collection,proto3" json:"collection,omitempty"`
 	Buyer        string   `protobuf:"bytes,16,opt,name=buyer,proto3" json:"buyer,omitempty"`
@@ -373,6 +373,15 @@ type SubscribeInfo struct {
 	CaFileExists bool     `protobuf:"varint,21,opt,name=ca_fileExists,json=caFileExists,proto3" json:"ca_fileExists,omitempty"`
 	Source       int64    `protobuf:"varint,22,opt,name=source,proto3" json:"source,omitempty"` //来源;1:个人订阅 2:企业自动分发 3:企业手动分发
 	Site         string   `protobuf:"bytes,23,opt,name=site,proto3" json:"site,omitempty"`
+	BuyerTel     string   `protobuf:"bytes,24,opt,name=buyerTel,proto3" json:"buyerTel,omitempty"`         // 采购单位联系方式
+	BuyerPerson  string   `protobuf:"bytes,25,opt,name=buyerPerson,proto3" json:"buyerPerson,omitempty"`   // 采购单位联系人
+	Agency       string   `protobuf:"bytes,26,opt,name=agency,proto3" json:"agency,omitempty"`             //代理机构
+	AgencyPerson string   `protobuf:"bytes,27,opt,name=agencyPerson,proto3" json:"agencyPerson,omitempty"` //代理机构联系人
+	AgencyTel    string   `protobuf:"bytes,28,opt,name=agencyTel,proto3" json:"agencyTel,omitempty"`       //代理机构联系电话
+	WinnerPerson string   `protobuf:"bytes,29,opt,name=winnerPerson,proto3" json:"winnerPerson,omitempty"` //中标企业联系人
+	WinnerTel    string   `protobuf:"bytes,30,opt,name=winnerTel,proto3" json:"winnerTel,omitempty"`       //中标企业联系电话
+	SignendTime  string   `protobuf:"bytes,31,opt,name=signendTime,proto3" json:"signendTime,omitempty"`   // 报名截止日期
+	Bidendtime   string   `protobuf:"bytes,32,opt,name=bidendtime,proto3" json:"bidendtime,omitempty"`     // 投标截止日期
 }
 
 func (x *SubscribeInfo) Reset() {
@@ -568,6 +577,69 @@ func (x *SubscribeInfo) GetSite() string {
 	return ""
 }
 
+func (x *SubscribeInfo) GetBuyerTel() string {
+	if x != nil {
+		return x.BuyerTel
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetBuyerPerson() string {
+	if x != nil {
+		return x.BuyerPerson
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetAgency() string {
+	if x != nil {
+		return x.Agency
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetAgencyPerson() string {
+	if x != nil {
+		return x.AgencyPerson
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetAgencyTel() string {
+	if x != nil {
+		return x.AgencyTel
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetWinnerPerson() string {
+	if x != nil {
+		return x.WinnerPerson
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetWinnerTel() string {
+	if x != nil {
+		return x.WinnerTel
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetSignendTime() string {
+	if x != nil {
+		return x.SignendTime
+	}
+	return ""
+}
+
+func (x *SubscribeInfo) GetBidendtime() string {
+	if x != nil {
+		return x.Bidendtime
+	}
+	return ""
+}
+
 //
 type SomeInfoReq struct {
 	state         protoimpl.MessageState
@@ -1774,7 +1846,7 @@ var file_bxsubscribe_proto_rawDesc = []byte{
 	0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18,
 	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
 	0x69, 0x62, 0x65, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x80, 0x05, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73,
+	0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x9c, 0x07, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73,
 	0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0f, 0x0a, 0x03, 0x5f, 0x69, 0x64,
 	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
 	0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
@@ -1814,188 +1886,205 @@ var file_bxsubscribe_proto_rawDesc = []byte{
 	0x52, 0x0c, 0x63, 0x61, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x16,
 	0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
 	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x18, 0x17,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x0b, 0x53,
-	0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70,
-	0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64,
-	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72,
-	0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x0c, 0x53, 0x6f, 0x6d, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 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, 0x29, 0x0a, 0x04,
-	0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x78, 0x73,
-	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x88, 0x02, 0x0a, 0x08, 0x53, 0x6f, 0x6d, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b,
-	0x69, 0x73, 0x49, 0x6e, 0x54, 0x53, 0x67, 0x75, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x0b, 0x69, 0x73, 0x49, 0x6e, 0x54, 0x53, 0x67, 0x75, 0x69, 0x64, 0x65, 0x12, 0x1a,
-	0x0a, 0x08, 0x69, 0x73, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x08, 0x69, 0x73, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73,
-	0x4f, 0x6e, 0x54, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73,
-	0x4f, 0x6e, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x61, 0x73, 0x73,
-	0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50,
-	0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x74, 0x68, 0x65,
-	0x72, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x74, 0x68,
-	0x65, 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64,
-	0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x1a,
-	0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09,
-	0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72,
-	0x49, 0x64, 0x22, 0x60, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x0a,
-	0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06,
-	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74,
-	0x61, 0x74, 0x75, 0x73, 0x22, 0x63, 0x0a, 0x11, 0x42, 0x79, 0x50, 0x75, 0x73, 0x68, 0x48, 0x69,
-	0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72,
-	0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72,
-	0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f,
-	0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f,
-	0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf9, 0x03, 0x0a, 0x16, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x65, 0x71, 0x12, 0x41, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x01, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x2e, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72,
-	0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79,
-	0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73,
-	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63,
-	0x72, 0x69, 0x62, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d,
-	0x73, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x66, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20,
-	0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x66, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a,
-	0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f,
-	0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a,
-	0x08, 0x72, 0x61, 0x74, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x72, 0x61, 0x74, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70,
-	0x70, 0x75, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x70,
-	0x75, 0x73, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x70, 0x75, 0x73, 0x68, 0x18,
-	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x70, 0x75, 0x73, 0x68, 0x12,
-	0x12, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d,
-	0x61, 0x69, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62, 0x75, 0x79, 0x65,
-	0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x74,
-	0x68, 0x65, 0x72, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x16, 0x0a,
-	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75,
-	0x73, 0x65, 0x72, 0x49, 0x64, 0x1a, 0x4e, 0x0a, 0x09, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
-	0x65, 0x2e, 0x43, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
-	0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1e, 0x0a, 0x08, 0x43, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73,
-	0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x04, 0x63, 0x69, 0x74, 0x79, 0x22, 0x66, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x15,
-	0x0a, 0x06, 0x73, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54,
-	0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
-	0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x04, 0x61, 0x4b, 0x65, 0x79, 0x22, 0x8a, 0x01,
-	0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x6b,
-	0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x6b, 0x65, 0x79,
-	0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x1c, 0x0a, 0x09,
-	0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x09, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x22, 0x68, 0x0a, 0x08, 0x4b, 0x65,
-	0x79, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x69, 0x74, 0x65, 0x6d,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x0a,
-	0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a,
-	0x05, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62,
-	0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x04,
-	0x61, 0x4b, 0x65, 0x79, 0x22, 0x89, 0x01, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03,
-	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16,
-	0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06,
-	0x6e, 0x6f, 0x74, 0x6b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77,
-	0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77,
-	0x61, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x6b, 0x65, 0x79, 0x18,
-	0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x6b, 0x65, 0x79,
-	0x22, 0xd2, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75,
+	0x79, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75,
+	0x79, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x75, 0x79, 0x65, 0x72, 0x50,
+	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x75, 0x79,
+	0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e,
+	0x63, 0x79, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79,
+	0x12, 0x22, 0x0a, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+	0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x65,
+	0x72, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x54, 0x65,
+	0x6c, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x54,
+	0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73,
+	0x6f, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72,
+	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72,
+	0x54, 0x65, 0x6c, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x69, 0x6e, 0x6e, 0x65,
+	0x72, 0x54, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x6e, 0x64, 0x54,
+	0x69, 0x6d, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65,
+	0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x69, 0x64, 0x65, 0x6e, 0x64,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x69, 0x64, 0x65,
+	0x6e, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x6d, 0x65, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06,
+	0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73,
+	0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14,
+	0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
+	0x6e, 0x74, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x0c, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	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, 0x29, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63,
+	0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64,
+	0x61, 0x74, 0x61, 0x22, 0x88, 0x02, 0x0a, 0x08, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x06, 0x68, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x49, 0x6e,
+	0x54, 0x53, 0x67, 0x75, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69,
+	0x73, 0x49, 0x6e, 0x54, 0x53, 0x67, 0x75, 0x69, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73,
+	0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73,
+	0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4f, 0x6e, 0x54, 0x61,
+	0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73, 0x4f, 0x6e, 0x54, 0x61,
+	0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e,
+	0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x61, 0x73, 0x73, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x46, 0x6c, 0x61,
+	0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x46, 0x6c,
+	0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e,
+	0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e,
+	0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x60,
+	0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09,
+	0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65,
+	0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x22, 0x63, 0x0a, 0x11, 0x42, 0x79, 0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+	0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d,
+	0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d,
+	0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64,
+	0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf9, 0x03, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
+	0x12, 0x41, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d,
+	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x52, 0x65, 0x71, 0x2e, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x61,
+	0x72, 0x65, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73,
+	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c,
+	0x61, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+	0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1a, 0x0a,
+	0x08, 0x69, 0x6e, 0x66, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x08, 0x69, 0x6e, 0x66, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x74,
+	0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x61, 0x74,
+	0x65, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x61, 0x74,
+	0x65, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x70, 0x75, 0x73, 0x68,
+	0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x70, 0x75, 0x73, 0x68, 0x12,
+	0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x70, 0x75, 0x73, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x70, 0x75, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d,
+	0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12,
+	0x28, 0x0a, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61,
+	0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62,
+	0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
+	0x64, 0x1a, 0x4e, 0x0a, 0x09, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
+	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
+	0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x15, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x43, 0x69,
+	0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x22, 0x1e, 0x0a, 0x08, 0x43, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a,
+	0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74,
+	0x79, 0x22, 0x66, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f,
+	0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x49, 0x74, 0x65,
+	0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d,
+	0x65, 0x12, 0x26, 0x0a, 0x05, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x11, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b,
+	0x65, 0x79, 0x73, 0x52, 0x04, 0x61, 0x4b, 0x65, 0x79, 0x22, 0x8a, 0x01, 0x0a, 0x04, 0x4b, 0x65,
+	0x79, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x6b, 0x65, 0x79, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x6b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a,
+	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
+	0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65,
+	0x6e, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70,
+	0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x22, 0x68, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x49, 0x74, 0x65,
+	0x6d, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x61, 0x5f, 0x6b,
+	0x65, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62,
+	0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x61, 0x4b, 0x65, 0x79,
+	0x22, 0x89, 0x01, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f,
+	0x74, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x6b,
+	0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x1c,
+	0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x6b, 0x65, 0x79, 0x22, 0xd2, 0x01, 0x0a,
+	0x0a, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x61,
+	0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49,
+	0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65,
+	0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65,
+	0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x76, 0x73, 0x69, 0x64, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x04, 0x76, 0x73, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x6e, 0x74,
+	0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x6e, 0x74, 0x49, 0x64, 0x12,
+	0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a,
+	0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69,
+	0x73, 0x45, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x45, 0x6e,
+	0x74, 0x22, 0xd3, 0x02, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x12,
 	0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
 	0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18,
 	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a,
 	0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x76, 0x73, 0x69,
-	0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x76, 0x73, 0x69, 0x64, 0x12, 0x14, 0x0a,
-	0x05, 0x45, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x6e,
-	0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12,
-	0x14, 0x0a, 0x05, 0x69, 0x73, 0x45, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05,
-	0x69, 0x73, 0x45, 0x6e, 0x74, 0x22, 0xd3, 0x02, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79,
-	0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
-	0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a,
-	0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e,
-	0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12,
-	0x14, 0x0a, 0x05, 0x69, 0x73, 0x45, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05,
-	0x69, 0x73, 0x45, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x69, 0x70, 0x50, 0x6f, 0x77, 0x65,
-	0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x69, 0x70, 0x50, 0x6f, 0x77, 0x65,
-	0x72, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72,
-	0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x6f,
-	0x77, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53,
-	0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x77,
-	0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x50, 0x6f,
-	0x77, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x74, 0x49, 0x64, 0x18, 0x0d, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x70, 0x74, 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x07, 0x4b,
-	0x65, 0x79, 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, 0x2b, 0x0a, 0x05, 0x69, 0x74,
-	0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x78, 0x73, 0x75,
-	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x73,
-	0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x32, 0xbe, 0x03, 0x0a, 0x0b, 0x42, 0x78, 0x73, 0x75,
-	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x75,
-	0x62, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
-	0x69, 0x62, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66,
-	0x6f, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
-	0x69, 0x62, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66,
-	0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62,
-	0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62,
-	0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
-	0x65, 0x71, 0x1a, 0x19, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x53, 0x0a,
-	0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
-	0x62, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69,
-	0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x73, 0x75,
-	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x4f, 0x0a, 0x0d, 0x42, 0x79, 0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74,
-	0x6f, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
-	0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73,
-	0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
-	0x65, 0x2e, 0x42, 0x79, 0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52,
-	0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x12, 0x17,
-	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x65, 0x74,
-	0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73,
-	0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x36, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x2e, 0x62, 0x78, 0x73,
-	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52,
-	0x65, 0x71, 0x1a, 0x14, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0f, 0x5a, 0x0d, 0x2e, 0x2f, 0x62, 0x78,
-	0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x33,
+	0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74,
+	0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12,
+	0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a,
+	0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69,
+	0x73, 0x45, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x45, 0x6e,
+	0x74, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x69, 0x70, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x69, 0x70, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x20, 0x0a,
+	0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12,
+	0x20, 0x0a, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63,
+	0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12,
+	0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x74, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x64, 0x65, 0x70, 0x74, 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x07, 0x4b, 0x65, 0x79, 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, 0x2b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
+	0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x32, 0xbe, 0x03, 0x0a, 0x0b, 0x42, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
+	0x69, 0x62, 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x4c, 0x69, 0x73,
+	0x74, 0x12, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e,
+	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65,
+	0x71, 0x1a, 0x1f, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e,
+	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x45, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x53, 0x6f, 0x6d, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
+	0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x19,
+	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d,
+	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x53, 0x0a, 0x13, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x23, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e,
+	0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
+	0x69, 0x62, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f,
+	0x0a, 0x0d, 0x42, 0x79, 0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12,
+	0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x75,
+	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x1a,
+	0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x42, 0x79,
+	0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x3b, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x62, 0x78, 0x73,
+	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64,
+	0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
+	0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x06,
+	0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63,
+	0x72, 0x69, 0x62, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x14,
+	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79,
+	0x52, 0x65, 0x73, 0x70, 0x42, 0x0f, 0x5a, 0x0d, 0x2e, 0x2f, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73,
+	0x63, 0x72, 0x69, 0x62, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (

+ 1 - 1
jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe_grpc.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-grpc v1.2.0
-// - protoc             v3.20.0--rc2
+// - protoc             v3.19.4
 // source: bxsubscribe.proto
 
 package bxsubscribe

+ 53 - 0
jyBXSubscribe/rpc/util/util.go

@@ -1,7 +1,10 @@
 package util
 
 import (
+	MC "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
+	"app.yhyue.com/moapp/jybase/mongodb"
+	"app.yhyue.com/moapp/jybase/mysql"
 )
 
 // 加密
@@ -19,3 +22,53 @@ func DecodeId(eid string) string {
 	}
 	return encrypt.DecodeArticleId2ByCheck(eid)[0]
 }
+
+//是否是付费用户
+type VipState struct {
+	VipState     int64 //超级订阅状态(1普通 2升级版)
+	BigMember    int64 //大会员状态
+	EntMember    int64 //商机管理用户状态
+	registerData int64 //注册时间
+}
+
+func GetVipState(mysql *mysql.Mysql, mg mongodb.MongodbSim, userId string) (vs *VipState) {
+	vs = &VipState{}
+	if userId == "" {
+		return
+	}
+	phone := ""
+	data, ok := mg.FindById("user", userId, `"i_member_status":1,"i_vip_status":1,"s_m_phone":1,"s_phone":1,"o_vipjy":1,"l_registedate":1`)
+	if data != nil && len(*data) > 0 && ok {
+		i_vip_status := MC.Int64All((*data)["i_vip_status"])
+		if i_vip_status > 1 {
+			vs.VipState = 1
+			ovipjy, _ := (*data)["o_vipjy"].(map[string]interface{})
+			if ovipjy["o_buyset"] != nil {
+				o_buyset := ovipjy["o_buyset"].(map[string]interface{})
+				if o_buyset["upgrade"] != nil {
+					vs.VipState = 2
+				}
+			}
+		}
+		if i_member_status := MC.Int64All((*data)["i_member_status"]); i_member_status > 0 {
+			vs.BigMember = i_member_status
+		}
+		if s_phone, _ := (*data)["s_phone"].(string); s_phone != "" {
+			phone = s_phone
+		} else if s_m_phone, _ := (*data)["s_m_phone"].(string); s_m_phone != "" {
+			phone = s_m_phone
+		}
+		if phone != "" {
+			if mysql.CountBySql(`select count(1) from entniche_user where phone = ? and power =1`, phone) > 0 {
+				vs.EntMember = 1
+			}
+		}
+		vs.registerData, _ = ((*data)["l_registedate"]).(int64)
+	}
+	return
+}
+
+//是否是付费账户
+func (vs *VipState) IsPayedUser() bool {
+	return vs.VipState > 0 || vs.BigMember > 0 || vs.EntMember > 0
+}