From 550049efa65a093aa2cfa56d186d141d55c3c8a3 Mon Sep 17 00:00:00 2001 From: tiger_zhou Date: Thu, 18 Jan 2024 10:48:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E5=8A=9B=E5=AD=A6=E5=88=97=E8=BD=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/trainManage.go | 2 +- docs/docs.go | 130 +++---- docs/swagger.json | 130 +++---- docs/swagger.yaml | 77 ++-- dto/simulation.go | 12 +- dto/state_proto/device_state.pb.go | 366 ++++++++++-------- dto/trainManage.go | 53 ++- go.work.sum | 8 + message_server/sfp_ms.go | 3 + service/trainManage.go | 11 +- .../wayside/memory/wayside_memory_train.go | 2 +- 11 files changed, 385 insertions(+), 409 deletions(-) diff --git a/api/trainManage.go b/api/trainManage.go index db4783b..e44a745 100644 --- a/api/trainManage.go +++ b/api/trainManage.go @@ -83,7 +83,7 @@ func queryTrainInfoList(c *gin.Context) { // @Tags 列车管理Api // @Accept json // @Produce json -// @Param trainInfoDto query dto.TrainInfoDto true "创建的列车信息" +// @Param trainInfoDto body dto.TrainInfoDto true "创建的列车信息" // @Success 200 {object} nil // @Failure 401 {object} dto.ErrorDto // @Failure 404 {object} dto.ErrorDto diff --git a/docs/docs.go b/docs/docs.go index af5dc2e..c949f1d 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -4361,49 +4361,13 @@ const docTemplate = `{ "summary": "创建列车", "parameters": [ { - "type": "integer", - "name": "carriage_length", - "in": "query" - }, - { - "type": "string", - "name": "description", - "in": "query" - }, - { - "type": "integer", - "name": "id", - "in": "query" - }, - { - "type": "integer", - "name": "max_diameter", - "in": "query" - }, - { - "type": "integer", - "name": "min_diameter", - "in": "query" - }, - { - "type": "string", - "name": "name", - "in": "query" - }, - { - "type": "integer", - "name": "total_length", - "in": "query" - }, - { - "type": "integer", - "name": "train_model", - "in": "query" - }, - { - "type": "string", - "name": "train_sets", - "in": "query" + "description": "创建的列车信息", + "name": "trainInfoDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TrainInfoDto" + } } ], "responses": { @@ -5006,7 +4970,7 @@ const docTemplate = `{ "dto.AddTrainReqDtoNew": { "type": "object", "properties": { - "ConfigTrain": { + "configTrain": { "description": "列车数据配置", "allOf": [ { @@ -5014,22 +4978,6 @@ const docTemplate = `{ } ] }, - "TrainEndsA": { - "description": "车辆A端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, - "TrainEndsB": { - "description": "车辆B端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, "devicePort": { "description": "道岔端口", "type": "string" @@ -5058,6 +5006,22 @@ const docTemplate = `{ "description": "仿真id", "type": "string" }, + "trainEndsA": { + "description": "车辆A端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, + "trainEndsB": { + "description": "车辆B端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, "trainLength": { "description": "列车长度", "type": "integer" @@ -5316,26 +5280,6 @@ const docTemplate = `{ "dto.ConfigTrainReqDto": { "type": "object", "properties": { - "TrainEndsA": { - "description": "车辆A端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, - "TrainEndsB": { - "description": "车辆B端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, - "TrainId": { - "description": "列车Id", - "type": "integer" - }, "configData": { "$ref": "#/definitions/dto.ConfigTrainData" }, @@ -5346,6 +5290,26 @@ const docTemplate = `{ "simulationId": { "type": "string" }, + "trainEndsA": { + "description": "车辆A端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, + "trainEndsB": { + "description": "车辆B端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, + "trainId": { + "description": "列车Id", + "type": "integer" + }, "wheelDiameter": { "description": "轮径(mm)", "type": "integer" @@ -5834,9 +5798,6 @@ const docTemplate = `{ "dto.TrainInfoDto": { "type": "object", "properties": { - "TrainConfigData": { - "$ref": "#/definitions/dto.ConfigTrainData" - }, "carriage_length": { "type": "integer" }, @@ -5858,6 +5819,9 @@ const docTemplate = `{ "total_length": { "type": "integer" }, + "trainConfigData": { + "$ref": "#/definitions/dto.ConfigTrainData" + }, "train_model": { "type": "integer" }, diff --git a/docs/swagger.json b/docs/swagger.json index 4985acc..ceb0c01 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -4355,49 +4355,13 @@ "summary": "创建列车", "parameters": [ { - "type": "integer", - "name": "carriage_length", - "in": "query" - }, - { - "type": "string", - "name": "description", - "in": "query" - }, - { - "type": "integer", - "name": "id", - "in": "query" - }, - { - "type": "integer", - "name": "max_diameter", - "in": "query" - }, - { - "type": "integer", - "name": "min_diameter", - "in": "query" - }, - { - "type": "string", - "name": "name", - "in": "query" - }, - { - "type": "integer", - "name": "total_length", - "in": "query" - }, - { - "type": "integer", - "name": "train_model", - "in": "query" - }, - { - "type": "string", - "name": "train_sets", - "in": "query" + "description": "创建的列车信息", + "name": "trainInfoDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TrainInfoDto" + } } ], "responses": { @@ -5000,7 +4964,7 @@ "dto.AddTrainReqDtoNew": { "type": "object", "properties": { - "ConfigTrain": { + "configTrain": { "description": "列车数据配置", "allOf": [ { @@ -5008,22 +4972,6 @@ } ] }, - "TrainEndsA": { - "description": "车辆A端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, - "TrainEndsB": { - "description": "车辆B端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, "devicePort": { "description": "道岔端口", "type": "string" @@ -5052,6 +5000,22 @@ "description": "仿真id", "type": "string" }, + "trainEndsA": { + "description": "车辆A端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, + "trainEndsB": { + "description": "车辆B端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, "trainLength": { "description": "列车长度", "type": "integer" @@ -5310,26 +5274,6 @@ "dto.ConfigTrainReqDto": { "type": "object", "properties": { - "TrainEndsA": { - "description": "车辆A端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, - "TrainEndsB": { - "description": "车辆B端", - "allOf": [ - { - "$ref": "#/definitions/dto.ConfigTrainEnds" - } - ] - }, - "TrainId": { - "description": "列车Id", - "type": "integer" - }, "configData": { "$ref": "#/definitions/dto.ConfigTrainData" }, @@ -5340,6 +5284,26 @@ "simulationId": { "type": "string" }, + "trainEndsA": { + "description": "车辆A端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, + "trainEndsB": { + "description": "车辆B端", + "allOf": [ + { + "$ref": "#/definitions/dto.ConfigTrainEnds" + } + ] + }, + "trainId": { + "description": "列车Id", + "type": "integer" + }, "wheelDiameter": { "description": "轮径(mm)", "type": "integer" @@ -5828,9 +5792,6 @@ "dto.TrainInfoDto": { "type": "object", "properties": { - "TrainConfigData": { - "$ref": "#/definitions/dto.ConfigTrainData" - }, "carriage_length": { "type": "integer" }, @@ -5852,6 +5813,9 @@ "total_length": { "type": "integer" }, + "trainConfigData": { + "$ref": "#/definitions/dto.ConfigTrainData" + }, "train_model": { "type": "integer" }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 48860fc..99309de 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -37,18 +37,10 @@ definitions: - PictureType_TrainData dto.AddTrainReqDtoNew: properties: - ConfigTrain: + configTrain: allOf: - $ref: '#/definitions/dto.ConfigTrainData' description: 列车数据配置 - TrainEndsA: - allOf: - - $ref: '#/definitions/dto.ConfigTrainEnds' - description: 车辆A端 - TrainEndsB: - allOf: - - $ref: '#/definitions/dto.ConfigTrainEnds' - description: 车辆B端 devicePort: description: 道岔端口 type: string @@ -70,6 +62,14 @@ definitions: simulationId: description: 仿真id type: string + trainEndsA: + allOf: + - $ref: '#/definitions/dto.ConfigTrainEnds' + description: 车辆A端 + trainEndsB: + allOf: + - $ref: '#/definitions/dto.ConfigTrainEnds' + description: 车辆B端 trainLength: description: 列车长度 type: integer @@ -249,17 +249,6 @@ definitions: type: object dto.ConfigTrainReqDto: properties: - TrainEndsA: - allOf: - - $ref: '#/definitions/dto.ConfigTrainEnds' - description: 车辆A端 - TrainEndsB: - allOf: - - $ref: '#/definitions/dto.ConfigTrainEnds' - description: 车辆B端 - TrainId: - description: 列车Id - type: integer configData: $ref: '#/definitions/dto.ConfigTrainData' length: @@ -267,6 +256,17 @@ definitions: type: integer simulationId: type: string + trainEndsA: + allOf: + - $ref: '#/definitions/dto.ConfigTrainEnds' + description: 车辆A端 + trainEndsB: + allOf: + - $ref: '#/definitions/dto.ConfigTrainEnds' + description: 车辆B端 + trainId: + description: 列车Id + type: integer wheelDiameter: description: 轮径(mm) type: integer @@ -597,8 +597,6 @@ definitions: type: object dto.TrainInfoDto: properties: - TrainConfigData: - $ref: '#/definitions/dto.ConfigTrainData' carriage_length: type: integer description: @@ -617,6 +615,8 @@ definitions: type: integer train_sets: type: string + trainConfigData: + $ref: '#/definitions/dto.ConfigTrainData' type: object dto.UpdateTrainReqDto: properties: @@ -3741,33 +3741,12 @@ paths: - application/json description: 创建列车数据 parameters: - - in: query - name: carriage_length - type: integer - - in: query - name: description - type: string - - in: query - name: id - type: integer - - in: query - name: max_diameter - type: integer - - in: query - name: min_diameter - type: integer - - in: query - name: name - type: string - - in: query - name: total_length - type: integer - - in: query - name: train_model - type: integer - - in: query - name: train_sets - type: string + - description: 创建的列车信息 + in: body + name: trainInfoDto + required: true + schema: + $ref: '#/definitions/dto.TrainInfoDto' produces: - application/json responses: diff --git a/dto/simulation.go b/dto/simulation.go index 823cba0..12f0d6d 100644 --- a/dto/simulation.go +++ b/dto/simulation.go @@ -75,20 +75,20 @@ type AddTrainReqDtoNew struct { MapId int32 `json:"mapId" from:"mapId"` WheelDiameter int32 `json:"wheelDiameter" from:"wheelDiameter"` // 列车数据配置 - ConfigTrain ConfigTrainData `json:"ConfigTrain" from:"mapId"` - TrainEndsA ConfigTrainEnds `json:"TrainEndsA"` // 车辆A端 - TrainEndsB ConfigTrainEnds `json:"TrainEndsB"` // 车辆B端 + ConfigTrain ConfigTrainData `json:"configTrain" from:"mapId"` + TrainEndsA ConfigTrainEnds `json:"trainEndsA"` // 车辆A端 + TrainEndsB ConfigTrainEnds `json:"trainEndsB"` // 车辆B端 } // 为反正列车修改对应的测试配置 type ConfigTrainReqDto struct { SimulationId string `json:"simulationId" form:"simulationId"` // 列车Id - TrainId int `json:"TrainId" form:"TrainId"` + TrainId int `json:"trainId" form:"trainId"` Length int64 `json:"length"` // 列车的长度(cm) ConfigData ConfigTrainData - TrainEndsA ConfigTrainEnds `json:"TrainEndsA"` // 车辆A端 - TrainEndsB ConfigTrainEnds `json:"TrainEndsB"` // 车辆B端 + TrainEndsA ConfigTrainEnds `json:"trainEndsA"` // 车辆A端 + TrainEndsB ConfigTrainEnds `json:"trainEndsB"` // 车辆B端 WheelDiameter int32 `json:"wheelDiameter"` // 轮径(mm) } type ConfigTrainEnds struct { diff --git a/dto/state_proto/device_state.pb.go b/dto/state_proto/device_state.pb.go index 15c1f2e..4260c1a 100644 --- a/dto/state_proto/device_state.pb.go +++ b/dto/state_proto/device_state.pb.go @@ -1599,6 +1599,12 @@ type TrainMapState struct { AllDoorClose bool `protobuf:"varint,60,opt,name=allDoorClose,proto3" json:"allDoorClose,omitempty"` // 通讯中断 VobcInterruption bool `protobuf:"varint,61,opt,name=vobcInterruption,proto3" json:"vobcInterruption,omitempty"` + // 列车动力学配置 + TrainDynamicConfig *common_proto.TrainDynamicConfig `protobuf:"bytes,62,opt,name=trainDynamicConfig,proto3" json:"trainDynamicConfig,omitempty"` + // 列车A端 + TrainEndsA *common_proto.TrainEndsState `protobuf:"bytes,63,opt,name=trainEndsA,proto3" json:"trainEndsA,omitempty"` + // 列车B端 + TrainEndsB *common_proto.TrainEndsState `protobuf:"bytes,64,opt,name=trainEndsB,proto3" json:"trainEndsB,omitempty"` } func (x *TrainMapState) Reset() { @@ -2060,6 +2066,27 @@ func (x *TrainMapState) GetVobcInterruption() bool { return false } +func (x *TrainMapState) GetTrainDynamicConfig() *common_proto.TrainDynamicConfig { + if x != nil { + return x.TrainDynamicConfig + } + return nil +} + +func (x *TrainMapState) GetTrainEndsA() *common_proto.TrainEndsState { + if x != nil { + return x.TrainEndsA + } + return nil +} + +func (x *TrainMapState) GetTrainEndsB() *common_proto.TrainEndsState { + if x != nil { + return x.TrainEndsB + } + return nil +} + // 继电器状态 type ReplyState struct { state protoimpl.MessageState @@ -3203,7 +3230,7 @@ var file_device_state_proto_rawDesc = []byte{ 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xf9, 0x11, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xb5, 0x13, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, @@ -3347,141 +3374,153 @@ var file_device_state_proto_rawDesc = []byte{ 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x6f, 0x62, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x76, 0x6f, 0x62, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x40, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x0e, 0x0a, 0x02, 0x78, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x78, 0x68, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, + 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x12, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, + 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x41, 0x18, 0x3f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x41, 0x12, 0x36, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, + 0x6e, 0x64, 0x73, 0x42, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x42, 0x22, 0x40, + 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x78, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x78, 0x68, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x22, 0x49, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, + 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x41, + 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x5b, 0x0a, 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, - 0x34, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x5b, 0x0a, 0x08, 0x50, - 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x41, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x61, 0x73, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x22, 0x58, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x6d, 0x64, 0x77, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x12, 0x12, 0x0a, 0x04, - 0x67, 0x6d, 0x64, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x67, 0x6d, 0x64, 0x77, - 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, - 0x67, 0x6a, 0x22, 0x2e, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, - 0x61, 0x72, 0x22, 0x52, 0x0a, 0x09, 0x4d, 0x6b, 0x78, 0x4a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, - 0x02, 0x6b, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x22, - 0xa1, 0x02, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, - 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x26, 0x0a, - 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, - 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, - 0x3b, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0c, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x88, 0x05, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, - 0x0a, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, - 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, - 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x31, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x73, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x2b, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x0d, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x61, 0x6c, 0x69, - 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x94, - 0x01, 0x0a, 0x13, 0x50, 0x75, 0x73, 0x68, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, - 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x69, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x3f, 0x0a, 0x0f, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x41, 0x55, 0x53, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x10, 0x03, - 0x2a, 0x37, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x07, 0x0a, 0x03, 0x41, 0x6e, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x78, 0x6c, 0x65, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x10, 0x02, 0x12, 0x0a, 0x0a, - 0x06, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x10, 0x03, 0x42, 0x67, 0x0a, 0x25, 0x63, 0x6c, 0x75, - 0x62, 0x2e, 0x6a, 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, - 0x2e, 0x61, 0x74, 0x73, 0x2e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x73, 0x42, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x2c, 0x6a, 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x63, 0x6c, - 0x75, 0x62, 0x2f, 0x62, 0x6a, 0x2d, 0x72, 0x74, 0x73, 0x74, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2f, 0x64, 0x74, 0x6f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, + 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x61, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x6d, 0x67, 0x6a, 0x22, 0x58, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x6d, 0x64, 0x77, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x67, 0x6a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x22, 0x2e, + 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x65, + 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, 0x61, 0x72, 0x22, 0x52, + 0x0a, 0x09, 0x4d, 0x6b, 0x78, 0x4a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x2c, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x02, 0x6b, 0x6d, 0x12, + 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x22, 0xa1, 0x02, 0x0a, 0x0f, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x38, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, + 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, + 0x64, 0x12, 0x38, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x3b, 0x0a, 0x0e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x88, 0x05, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x37, 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, + 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, 0x75, 0x74, + 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, + 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x4c, + 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, + 0x0a, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x4b, + 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, + 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, + 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x50, + 0x75, 0x73, 0x68, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x61, 0x6c, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, + 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3f, 0x0a, 0x0f, 0x53, + 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x09, + 0x0a, 0x05, 0x50, 0x41, 0x55, 0x53, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, + 0x52, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, + 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x10, 0x03, 0x2a, 0x37, 0x0a, 0x0b, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, + 0x6e, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x78, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x09, + 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x68, 0x79, + 0x73, 0x69, 0x63, 0x10, 0x03, 0x42, 0x67, 0x0a, 0x25, 0x63, 0x6c, 0x75, 0x62, 0x2e, 0x6a, 0x6f, + 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, 0x2e, 0x61, 0x74, 0x73, + 0x2e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x42, 0x10, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x5a, 0x2c, 0x6a, 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x63, 0x6c, 0x75, 0x62, 0x2f, 0x62, + 0x6a, 0x2d, 0x72, 0x74, 0x73, 0x74, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x64, + 0x74, 0x6f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3539,33 +3578,36 @@ var file_device_state_proto_depIdxs = []int32{ 27, // 5: state.TrainState.trainDynamicConfig:type_name -> common.TrainDynamicConfig 28, // 6: state.TrainState.trainEndsA:type_name -> common.TrainEndsState 28, // 7: state.TrainState.trainEndsB:type_name -> common.TrainEndsState - 19, // 8: state.PsdState.asdStates:type_name -> state.AsdState - 14, // 9: state.MkxJState.replyState:type_name -> state.ReplyState - 29, // 10: state.BaliseState.km:type_name -> graphicData.KilometerSystem - 13, // 11: state.VariationStatus.updatedTrain:type_name -> state.TrainMapState - 5, // 12: state.VariationStatus.updatedSwitch:type_name -> state.SwitchState - 4, // 13: state.VariationStatus.updatedSection:type_name -> state.SectionState - 14, // 14: state.VariationStatus.updatedReply:type_name -> state.ReplyState - 13, // 15: state.AllDevicesStatus.trainState:type_name -> state.TrainMapState - 5, // 16: state.AllDevicesStatus.switchState:type_name -> state.SwitchState - 4, // 17: state.AllDevicesStatus.sectionState:type_name -> state.SectionState - 14, // 18: state.AllDevicesStatus.replyState:type_name -> state.ReplyState - 6, // 19: state.AllDevicesStatus.signalState:type_name -> state.SignalState - 15, // 20: state.AllDevicesStatus.buttonState:type_name -> state.ButtonState - 16, // 21: state.AllDevicesStatus.AlarmState:type_name -> state.AlarmState - 17, // 22: state.AllDevicesStatus.LightState:type_name -> state.LightState - 18, // 23: state.AllDevicesStatus.psdState:type_name -> state.PsdState - 20, // 24: state.AllDevicesStatus.KeyState:type_name -> state.KeyState - 8, // 25: state.AllDevicesStatus.platformState:type_name -> state.PlatformState - 22, // 26: state.AllDevicesStatus.baliseState:type_name -> state.BaliseState - 23, // 27: state.PushedDevicesStatus.varStatus:type_name -> state.VariationStatus - 24, // 28: state.PushedDevicesStatus.allStatus:type_name -> state.AllDevicesStatus - 2, // 29: state.SimulationStatus.state:type_name -> state.SimulationStatus.SimulationState - 30, // [30:30] is the sub-list for method output_type - 30, // [30:30] is the sub-list for method input_type - 30, // [30:30] is the sub-list for extension type_name - 30, // [30:30] is the sub-list for extension extendee - 0, // [0:30] is the sub-list for field type_name + 27, // 8: state.TrainMapState.trainDynamicConfig:type_name -> common.TrainDynamicConfig + 28, // 9: state.TrainMapState.trainEndsA:type_name -> common.TrainEndsState + 28, // 10: state.TrainMapState.trainEndsB:type_name -> common.TrainEndsState + 19, // 11: state.PsdState.asdStates:type_name -> state.AsdState + 14, // 12: state.MkxJState.replyState:type_name -> state.ReplyState + 29, // 13: state.BaliseState.km:type_name -> graphicData.KilometerSystem + 13, // 14: state.VariationStatus.updatedTrain:type_name -> state.TrainMapState + 5, // 15: state.VariationStatus.updatedSwitch:type_name -> state.SwitchState + 4, // 16: state.VariationStatus.updatedSection:type_name -> state.SectionState + 14, // 17: state.VariationStatus.updatedReply:type_name -> state.ReplyState + 13, // 18: state.AllDevicesStatus.trainState:type_name -> state.TrainMapState + 5, // 19: state.AllDevicesStatus.switchState:type_name -> state.SwitchState + 4, // 20: state.AllDevicesStatus.sectionState:type_name -> state.SectionState + 14, // 21: state.AllDevicesStatus.replyState:type_name -> state.ReplyState + 6, // 22: state.AllDevicesStatus.signalState:type_name -> state.SignalState + 15, // 23: state.AllDevicesStatus.buttonState:type_name -> state.ButtonState + 16, // 24: state.AllDevicesStatus.AlarmState:type_name -> state.AlarmState + 17, // 25: state.AllDevicesStatus.LightState:type_name -> state.LightState + 18, // 26: state.AllDevicesStatus.psdState:type_name -> state.PsdState + 20, // 27: state.AllDevicesStatus.KeyState:type_name -> state.KeyState + 8, // 28: state.AllDevicesStatus.platformState:type_name -> state.PlatformState + 22, // 29: state.AllDevicesStatus.baliseState:type_name -> state.BaliseState + 23, // 30: state.PushedDevicesStatus.varStatus:type_name -> state.VariationStatus + 24, // 31: state.PushedDevicesStatus.allStatus:type_name -> state.AllDevicesStatus + 2, // 32: state.SimulationStatus.state:type_name -> state.SimulationStatus.SimulationState + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_device_state_proto_init() } diff --git a/dto/trainManage.go b/dto/trainManage.go index 6a20b9d..75f23c9 100644 --- a/dto/trainManage.go +++ b/dto/trainManage.go @@ -2,6 +2,7 @@ package dto import ( "google.golang.org/protobuf/proto" + "joylink.club/bj-rtsts-server/dto/common_proto" "joylink.club/bj-rtsts-server/dto/data_proto" ) @@ -16,16 +17,16 @@ type TrainInfoReqDto struct { } type TrainInfoDto struct { - Id int32 `json:"id" form:"id"` - Name string `json:"name" form:"name"` - TrainModel int32 `json:"train_model" form:"train_model"` - CarriageLength int32 `json:"carriage_length" form:"carriage_length"` - TotalLength int32 `json:"total_length" form:"total_length"` - MinDiameter int32 `json:"min_diameter" form:"min_diameter"` - MaxDiameter int32 `json:"max_diameter" form:"max_diameter"` - TrainSets string `json:"train_sets" form:"train_sets"` - Description string `json:"description" form:"description"` - TrainConfigData ConfigTrainData `json:"TrainConfigData" form:"TrainConfigData"` + Id int32 `json:"id" form:"id"` + Name string `json:"name" form:"name"` + TrainModel int32 `json:"train_model" form:"train_model"` + CarriageLength int32 `json:"carriage_length" form:"carriage_length"` + TotalLength int32 `json:"total_length" form:"total_length"` + MinDiameter int32 `json:"min_diameter" form:"min_diameter"` + MaxDiameter int32 `json:"max_diameter" form:"max_diameter"` + TrainSets string `json:"train_sets" form:"train_sets"` + Description string `json:"description" form:"description"` + TrainConfigData *ConfigTrainData `json:"trainConfigData" form:"trainConfigData"` } func ConvertToTrainDto(trailInfos []*PublishedDto) []*TrainInfoDto { @@ -35,19 +36,31 @@ func ConvertToTrainDto(trailInfos []*PublishedDto) []*TrainInfoDto { } return result } - +func TrainConfigToDtoConvert(dc *common_proto.TrainDynamicConfig) *ConfigTrainData { + if dc != nil { + return &ConfigTrainData{ + BaseResistanceParamA: dc.BaseResistanceParamA, BaseResistanceParamB: dc.BaseResistanceParamB, BaseResistanceParamC: dc.BaseResistanceParamC, + CurveResistanceParamR1: dc.CurveResistanceParamR1, CurveResistanceParamR2: dc.CurveResistanceParamR2, CurveResistanceParamR3: dc.CurveResistanceParamR3, + CurveResistanceParamR4: dc.CurveResistanceParamR4, RevolvingMassParam: dc.RevolvingMassParam, + Jump: dc.Jump, Slip: dc.Slip, Slide: dc.Slide, + StopSign: dc.StopSign, + } + } + return nil +} func ConvertDtoFromTrain(t *PublishedDto) *TrainInfoDto { message := &data_proto.Train{} proto.Unmarshal(t.Proto, message) return &TrainInfoDto{ - Id: t.ID, - Name: t.Name, - Description: t.Note, - TrainModel: int32(message.TrainModel), - CarriageLength: message.CarriageLength, - TotalLength: message.TotalLength, - MinDiameter: message.MinDiameter, - MaxDiameter: message.MaxDiameter, - TrainSets: message.TrainSets, + Id: t.ID, + Name: t.Name, + Description: t.Note, + TrainModel: int32(message.TrainModel), + CarriageLength: message.CarriageLength, + TotalLength: message.TotalLength, + MinDiameter: message.MinDiameter, + MaxDiameter: message.MaxDiameter, + TrainSets: message.TrainSets, + TrainConfigData: TrainConfigToDtoConvert(message.DynamicConfig), } } diff --git a/go.work.sum b/go.work.sum index e615b38..b31b5a7 100644 --- a/go.work.sum +++ b/go.work.sum @@ -146,6 +146,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/ebitengine/purego v0.1.0/go.mod h1:Eh8I3yvknDYZeCuXH9kRNaPuHEwvXDCk378o9xszmHg= github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= +github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw= +github.com/go-faster/errors v0.6.1/go.mod h1:5MGV2/2T9yvlrbhe9pD9LO5Z/2zCSq2T8j+Jpi2LAyY= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220806181222-55e207c401ad/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -161,6 +163,7 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/jezek/xgb v1.0.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= @@ -171,10 +174,14 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/nats-io/nats.go v1.31.0/go.mod h1:di3Bm5MLsoB4Bx61CBTsxuarI36WbhAwOm8QrW39+i8= github.com/nats-io/nkeys v0.4.6/go.mod h1:4DxZNzenSVd1cYQoAa8948QY3QDjrHfcfVADymtkpts= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/paulmach/orb v0.7.1/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A= +github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/crypt v0.17.0/go.mod h1:SMtHTvdmsZMuY/bpZoqokSoChIrcJ/epOxZN58PbZDg= +github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= @@ -198,4 +205,5 @@ google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +gorm.io/driver/clickhouse v0.5.0/go.mod h1:cIKAlFw+IVK75g0bDcm0M9qRA4EAgsn23Si+zCXQ1Lc= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/message_server/sfp_ms.go b/message_server/sfp_ms.go index 9f7e78a..890a38f 100644 --- a/message_server/sfp_ms.go +++ b/message_server/sfp_ms.go @@ -317,6 +317,9 @@ func convertTrainState(v *state_proto.TrainState) *state_proto.TrainMapState { RightDoorCloseCommand: v.VobcState.RightDoorCloseCommand, AllDoorClose: v.VobcState.AllDoorClose, VobcInterruption: v.VobcState.UdpInterruption, + TrainDynamicConfig: v.TrainDynamicConfig, + TrainEndsA: v.TrainEndsA, + TrainEndsB: v.TrainEndsB, } return t } diff --git a/service/trainManage.go b/service/trainManage.go index e6a089c..49e9741 100644 --- a/service/trainManage.go +++ b/service/trainManage.go @@ -57,14 +57,17 @@ func ListTrainByProject(query *dto.TrainInfoReqDto) []*dto.TrainInfoDto { func CreateTrain(td *dto.TrainInfoDto, user *model.User) bool { publishData(&dto.PublishedDto{ Name: td.Name, - Proto: convertTrainProto(td), + Proto: convertTrainDtoToProto(td), Type: trainDataType, UserID: user.ID, Note: td.Description, }, true) return true } -func TrainConfigToProtoConvert(t dto.ConfigTrainData) *common_proto.TrainDynamicConfig { +func TrainConfigToProtoConvert(t *dto.ConfigTrainData) *common_proto.TrainDynamicConfig { + if t == nil { + return nil + } return &common_proto.TrainDynamicConfig{ BaseResistanceParamA: t.BaseResistanceParamA, BaseResistanceParamB: t.BaseResistanceParamB, @@ -81,7 +84,7 @@ func TrainConfigToProtoConvert(t dto.ConfigTrainData) *common_proto.TrainDynamic } // 转成列车proto -func convertTrainProto(t *dto.TrainInfoDto) []byte { +func convertTrainDtoToProto(t *dto.TrainInfoDto) []byte { message := &data_proto.Train{ TrainModel: data_proto.Train_TrainModel(t.TrainModel), CarriageLength: t.CarriageLength, @@ -124,7 +127,7 @@ func UpdateTrain(id int32, td *dto.TrainInfoDto, user *model.User) bool { panic(sys_error.New("更新列车信息错误", err)) } pvdn := &model.PublishedVersion{ - Proto: convertTrainProto(td), + Proto: convertTrainDtoToProto(td), UserID: user.ID, PublishAt: time.Now(), Note: td.Description, diff --git a/ts/simulation/wayside/memory/wayside_memory_train.go b/ts/simulation/wayside/memory/wayside_memory_train.go index 581ee43..b8430d1 100644 --- a/ts/simulation/wayside/memory/wayside_memory_train.go +++ b/ts/simulation/wayside/memory/wayside_memory_train.go @@ -193,7 +193,7 @@ func AddTrainStateNew(vs *VerifySimulation, status *state_proto.TrainState, conf func createOrUpdateStateDynamicConfig(trainState *state_proto.TrainState, configTrainData dto.ConfigTrainData, trainEndsA dto.ConfigTrainEnds, trainEndsB dto.ConfigTrainEnds) { - trainState.TrainDynamicConfig = service.TrainConfigToProtoConvert(configTrainData) + trainState.TrainDynamicConfig = service.TrainConfigToProtoConvert(&configTrainData) /*if trainState.TrainDynamicConfig == nil { trainState.TrainDynamicConfig = &common_proto.TrainDynamicConfig{}