From 77336398416839380ede5cccdb1210cdea971dfa Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Tue, 17 Feb 2026 17:53:57 +0000 Subject: [PATCH 1/9] Add DeviceInfo to SystemInfo API for host reporting --- host/VERSION | 2 +- host/docs/api/hostmgr.md | 45 + host/go.mod | 2 +- host/go.sum | 2 + .../hostmgr/proto/hostmgr_southbound.pb.go | 1295 ++++++++++------- .../proto/hostmgr_southbound.pb.validate.go | 429 ++++++ .../hostmgr/proto/hostmgr_southbound.proto | 38 + host/pkg/hostmgr/grpc_server.go | 4 + host/pkg/hostmgr/grpc_server_device_test.go | 253 ++++ host/pkg/hostmgr/hostmgr_utils_test.go | 27 + host/pkg/hostmgr/southbound_handler.go | 82 ++ host/pkg/invclient/common.go | 6 + host/pkg/invclient/invclient.go | 79 + host/pkg/invclient/invclient_test.go | 104 ++ host/pkg/utils/utils.go | 37 + 15 files changed, 1891 insertions(+), 514 deletions(-) create mode 100644 host/pkg/hostmgr/grpc_server_device_test.go diff --git a/host/VERSION b/host/VERSION index 512dc71f..61b813d5 100644 --- a/host/VERSION +++ b/host/VERSION @@ -1 +1 @@ -1.25.2-dev +1.25.2 diff --git a/host/docs/api/hostmgr.md b/host/docs/api/hostmgr.md index 4781a42e..1b3d3834 100644 --- a/host/docs/api/hostmgr.md +++ b/host/docs/api/hostmgr.md @@ -10,6 +10,7 @@ - [CPUTopology](#hostmgr_southbound_proto-CPUTopology) - [Config](#hostmgr_southbound_proto-Config) - [CoreGroup](#hostmgr_southbound_proto-CoreGroup) + - [DeviceInfo](#hostmgr_southbound_proto-DeviceInfo) - [HWInfo](#hostmgr_southbound_proto-HWInfo) - [HostStatus](#hostmgr_southbound_proto-HostStatus) - [HostStatusResp](#hostmgr_southbound_proto-HostStatusResp) @@ -19,6 +20,7 @@ - [OsInfo](#hostmgr_southbound_proto-OsInfo) - [OsKernel](#hostmgr_southbound_proto-OsKernel) - [OsRelease](#hostmgr_southbound_proto-OsRelease) + - [RASInfo](#hostmgr_southbound_proto-RASInfo) - [Socket](#hostmgr_southbound_proto-Socket) - [Storage](#hostmgr_southbound_proto-Storage) - [SystemCPU](#hostmgr_southbound_proto-SystemCPU) @@ -153,6 +155,30 @@ SPDX-License-Identifier: Apache-2.0 + + +### DeviceInfo + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| version | [string](#string) | | | +| hostname | [string](#string) | | | +| operational_state | [string](#string) | | | +| build_number | [string](#string) | | | +| sku | [string](#string) | | | +| features | [string](#string) | | | +| device_guid | [string](#string) | | | +| control_mode | [string](#string) | | | +| dns_suffix | [string](#string) | | | +| ras_info | [RASInfo](#hostmgr_southbound_proto-RASInfo) | | | + + + + + + ### HWInfo @@ -307,6 +333,24 @@ SPDX-License-Identifier: Apache-2.0 + + +### RASInfo + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| network_status | [string](#string) | | | +| remote_status | [string](#string) | | | +| remote_trigger | [string](#string) | | | +| mps_hostname | [string](#string) | | | + + + + + + ### Socket @@ -413,6 +457,7 @@ SPDX-License-Identifier: Apache-2.0 | os_info | [OsInfo](#hostmgr_southbound_proto-OsInfo) | | | | bm_ctl_info | [BmInfo](#hostmgr_southbound_proto-BmInfo) | | | | bios_info | [BiosInfo](#hostmgr_southbound_proto-BiosInfo) | | | +| device_info | [DeviceInfo](#hostmgr_southbound_proto-DeviceInfo) | | | diff --git a/host/go.mod b/host/go.mod index f6d1e566..6d7e1a21 100644 --- a/host/go.mod +++ b/host/go.mod @@ -8,7 +8,7 @@ go 1.25.5 require ( github.com/cenkalti/backoff/v4 v4.3.0 github.com/envoyproxy/protoc-gen-validate v1.3.0 - github.com/open-edge-platform/infra-core/inventory/v2 v2.34.2 + github.com/open-edge-platform/infra-core/inventory/v2 v2.34.4-0.20260217115344-fc676bfa6f60 github.com/open-edge-platform/infra-managers/maintenance v1.25.0 github.com/open-edge-platform/infra-onboarding/onboarding-manager v1.39.5 github.com/prometheus/client_golang v1.23.2 diff --git a/host/go.sum b/host/go.sum index 454f612a..ac65d160 100644 --- a/host/go.sum +++ b/host/go.sum @@ -226,6 +226,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/open-edge-platform/infra-core/inventory/v2 v2.34.2 h1:7wPJ7RhM4K484HNxhz6Mjn/LuvHciDiey0cAR/Zmh6g= github.com/open-edge-platform/infra-core/inventory/v2 v2.34.2/go.mod h1:NzKTZ1cCdSvixIvsA4Ig3zzsryIHQJHnF/bGQ1+JBbc= +github.com/open-edge-platform/infra-core/inventory/v2 v2.34.4-0.20260217115344-fc676bfa6f60 h1:oDKurDk2hbfuUR1e/m0FPX8fIEdZXIttBWXWnfqg6Ms= +github.com/open-edge-platform/infra-core/inventory/v2 v2.34.4-0.20260217115344-fc676bfa6f60/go.mod h1:waKF//Y3B9YFiXsssrs7caKrxqwMcZqkmfYkSHjhVU0= github.com/open-edge-platform/infra-managers/maintenance v1.25.0 h1:qDJqiCUed/FodDcPEzFCJkqViXUTRHDf/l59xnnIGlE= github.com/open-edge-platform/infra-managers/maintenance v1.25.0/go.mod h1:M+WXqEfHnEc4DVrl/qUcthTgtQnRvPz2jRUMTIfChys= github.com/open-edge-platform/infra-onboarding/onboarding-manager v1.39.5 h1:qPNmyJq8z/kxuimw6RcFERnbmThh4XWeTTNfuB6aUx4= diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go index f9bbfc4b..6982abba 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go @@ -396,7 +396,7 @@ func (x BmInfo_BmType) Number() protoreflect.EnumNumber { // Deprecated: Use BmInfo_BmType.Descriptor instead. func (BmInfo_BmType) EnumDescriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{23, 0} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{25, 0} } type HostStatus struct { @@ -577,10 +577,11 @@ type SystemInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HwInfo *HWInfo `protobuf:"bytes,1,opt,name=hw_info,json=hwInfo,proto3" json:"hw_info,omitempty"` - OsInfo *OsInfo `protobuf:"bytes,2,opt,name=os_info,json=osInfo,proto3" json:"os_info,omitempty"` - BmCtlInfo *BmInfo `protobuf:"bytes,3,opt,name=bm_ctl_info,json=bmCtlInfo,proto3" json:"bm_ctl_info,omitempty"` - BiosInfo *BiosInfo `protobuf:"bytes,4,opt,name=bios_info,json=biosInfo,proto3" json:"bios_info,omitempty"` + HwInfo *HWInfo `protobuf:"bytes,1,opt,name=hw_info,json=hwInfo,proto3" json:"hw_info,omitempty"` + OsInfo *OsInfo `protobuf:"bytes,2,opt,name=os_info,json=osInfo,proto3" json:"os_info,omitempty"` + BmCtlInfo *BmInfo `protobuf:"bytes,3,opt,name=bm_ctl_info,json=bmCtlInfo,proto3" json:"bm_ctl_info,omitempty"` + BiosInfo *BiosInfo `protobuf:"bytes,4,opt,name=bios_info,json=biosInfo,proto3" json:"bios_info,omitempty"` + DeviceInfo *DeviceInfo `protobuf:"bytes,5,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"` } func (x *SystemInfo) Reset() { @@ -643,6 +644,13 @@ func (x *SystemInfo) GetBiosInfo() *BiosInfo { return nil } +func (x *SystemInfo) GetDeviceInfo() *DeviceInfo { + if x != nil { + return x.DeviceInfo + } + return nil +} + type BiosInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -934,6 +942,196 @@ func (x *OsRelease) GetMetadata() []*Metadata { return nil } +type DeviceInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"` + OperationalState string `protobuf:"bytes,3,opt,name=operational_state,json=operationalState,proto3" json:"operational_state,omitempty"` + BuildNumber string `protobuf:"bytes,4,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` + Sku string `protobuf:"bytes,5,opt,name=sku,proto3" json:"sku,omitempty"` + Features string `protobuf:"bytes,6,opt,name=features,proto3" json:"features,omitempty"` + DeviceGuid string `protobuf:"bytes,7,opt,name=device_guid,json=deviceGuid,proto3" json:"device_guid,omitempty"` + ControlMode string `protobuf:"bytes,8,opt,name=control_mode,json=controlMode,proto3" json:"control_mode,omitempty"` + DnsSuffix string `protobuf:"bytes,9,opt,name=dns_suffix,json=dnsSuffix,proto3" json:"dns_suffix,omitempty"` + RasInfo *RASInfo `protobuf:"bytes,10,opt,name=ras_info,json=rasInfo,proto3" json:"ras_info,omitempty"` +} + +func (x *DeviceInfo) Reset() { + *x = DeviceInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeviceInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceInfo) ProtoMessage() {} + +func (x *DeviceInfo) ProtoReflect() protoreflect.Message { + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9] + 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 DeviceInfo.ProtoReflect.Descriptor instead. +func (*DeviceInfo) Descriptor() ([]byte, []int) { + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{9} +} + +func (x *DeviceInfo) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *DeviceInfo) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +func (x *DeviceInfo) GetOperationalState() string { + if x != nil { + return x.OperationalState + } + return "" +} + +func (x *DeviceInfo) GetBuildNumber() string { + if x != nil { + return x.BuildNumber + } + return "" +} + +func (x *DeviceInfo) GetSku() string { + if x != nil { + return x.Sku + } + return "" +} + +func (x *DeviceInfo) GetFeatures() string { + if x != nil { + return x.Features + } + return "" +} + +func (x *DeviceInfo) GetDeviceGuid() string { + if x != nil { + return x.DeviceGuid + } + return "" +} + +func (x *DeviceInfo) GetControlMode() string { + if x != nil { + return x.ControlMode + } + return "" +} + +func (x *DeviceInfo) GetDnsSuffix() string { + if x != nil { + return x.DnsSuffix + } + return "" +} + +func (x *DeviceInfo) GetRasInfo() *RASInfo { + if x != nil { + return x.RasInfo + } + return nil +} + +type RASInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NetworkStatus string `protobuf:"bytes,1,opt,name=network_status,json=networkStatus,proto3" json:"network_status,omitempty"` + RemoteStatus string `protobuf:"bytes,2,opt,name=remote_status,json=remoteStatus,proto3" json:"remote_status,omitempty"` + RemoteTrigger string `protobuf:"bytes,3,opt,name=remote_trigger,json=remoteTrigger,proto3" json:"remote_trigger,omitempty"` + MpsHostname string `protobuf:"bytes,4,opt,name=mps_hostname,json=mpsHostname,proto3" json:"mps_hostname,omitempty"` +} + +func (x *RASInfo) Reset() { + *x = RASInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RASInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RASInfo) ProtoMessage() {} + +func (x *RASInfo) ProtoReflect() protoreflect.Message { + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[10] + 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 RASInfo.ProtoReflect.Descriptor instead. +func (*RASInfo) Descriptor() ([]byte, []int) { + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{10} +} + +func (x *RASInfo) GetNetworkStatus() string { + if x != nil { + return x.NetworkStatus + } + return "" +} + +func (x *RASInfo) GetRemoteStatus() string { + if x != nil { + return x.RemoteStatus + } + return "" +} + +func (x *RASInfo) GetRemoteTrigger() string { + if x != nil { + return x.RemoteTrigger + } + return "" +} + +func (x *RASInfo) GetMpsHostname() string { + if x != nil { + return x.MpsHostname + } + return "" +} + type Storage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -946,7 +1144,7 @@ type Storage struct { func (x *Storage) Reset() { *x = Storage{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -959,7 +1157,7 @@ func (x *Storage) String() string { func (*Storage) ProtoMessage() {} func (x *Storage) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -972,7 +1170,7 @@ func (x *Storage) ProtoReflect() protoreflect.Message { // Deprecated: Use Storage.ProtoReflect.Descriptor instead. func (*Storage) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{9} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{11} } func (x *Storage) GetDisk() []*SystemDisk { @@ -1010,7 +1208,7 @@ type HWInfo struct { func (x *HWInfo) Reset() { *x = HWInfo{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[10] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1023,7 +1221,7 @@ func (x *HWInfo) String() string { func (*HWInfo) ProtoMessage() {} func (x *HWInfo) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[10] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1036,7 +1234,7 @@ func (x *HWInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use HWInfo.ProtoReflect.Descriptor instead. func (*HWInfo) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{10} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{12} } func (x *HWInfo) GetSerialNum() string { @@ -1128,7 +1326,7 @@ type SystemCPU struct { func (x *SystemCPU) Reset() { *x = SystemCPU{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[11] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1141,7 +1339,7 @@ func (x *SystemCPU) String() string { func (*SystemCPU) ProtoMessage() {} func (x *SystemCPU) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[11] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1154,7 +1352,7 @@ func (x *SystemCPU) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemCPU.ProtoReflect.Descriptor instead. func (*SystemCPU) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{11} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{13} } func (x *SystemCPU) GetArch() string { @@ -1224,7 +1422,7 @@ type SystemMemory struct { func (x *SystemMemory) Reset() { *x = SystemMemory{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[12] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1237,7 +1435,7 @@ func (x *SystemMemory) String() string { func (*SystemMemory) ProtoMessage() {} func (x *SystemMemory) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[12] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1250,7 +1448,7 @@ func (x *SystemMemory) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemMemory.ProtoReflect.Descriptor instead. func (*SystemMemory) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{12} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{14} } func (x *SystemMemory) GetSize() uint64 { @@ -1276,7 +1474,7 @@ type SystemDisk struct { func (x *SystemDisk) Reset() { *x = SystemDisk{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[13] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1289,7 +1487,7 @@ func (x *SystemDisk) String() string { func (*SystemDisk) ProtoMessage() {} func (x *SystemDisk) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[13] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1302,7 +1500,7 @@ func (x *SystemDisk) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemDisk.ProtoReflect.Descriptor instead. func (*SystemDisk) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{13} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{15} } func (x *SystemDisk) GetSerialNumber() string { @@ -1363,7 +1561,7 @@ type SystemGPU struct { func (x *SystemGPU) Reset() { *x = SystemGPU{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[14] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1376,7 +1574,7 @@ func (x *SystemGPU) String() string { func (*SystemGPU) ProtoMessage() {} func (x *SystemGPU) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[14] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1389,7 +1587,7 @@ func (x *SystemGPU) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemGPU.ProtoReflect.Descriptor instead. func (*SystemGPU) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{14} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{16} } func (x *SystemGPU) GetPciId() string { @@ -1464,7 +1662,7 @@ type SystemNetwork struct { func (x *SystemNetwork) Reset() { *x = SystemNetwork{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[15] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1477,7 +1675,7 @@ func (x *SystemNetwork) String() string { func (*SystemNetwork) ProtoMessage() {} func (x *SystemNetwork) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[15] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1490,7 +1688,7 @@ func (x *SystemNetwork) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemNetwork.ProtoReflect.Descriptor instead. func (*SystemNetwork) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{15} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{17} } func (x *SystemNetwork) GetName() string { @@ -1644,7 +1842,7 @@ type CPUTopology struct { func (x *CPUTopology) Reset() { *x = CPUTopology{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[16] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1657,7 +1855,7 @@ func (x *CPUTopology) String() string { func (*CPUTopology) ProtoMessage() {} func (x *CPUTopology) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[16] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1670,7 +1868,7 @@ func (x *CPUTopology) ProtoReflect() protoreflect.Message { // Deprecated: Use CPUTopology.ProtoReflect.Descriptor instead. func (*CPUTopology) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{16} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{18} } func (x *CPUTopology) GetSockets() []*Socket { @@ -1692,7 +1890,7 @@ type Socket struct { func (x *Socket) Reset() { *x = Socket{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[17] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1705,7 +1903,7 @@ func (x *Socket) String() string { func (*Socket) ProtoMessage() {} func (x *Socket) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[17] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1718,7 +1916,7 @@ func (x *Socket) ProtoReflect() protoreflect.Message { // Deprecated: Use Socket.ProtoReflect.Descriptor instead. func (*Socket) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{17} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{19} } func (x *Socket) GetSocketId() uint32 { @@ -1747,7 +1945,7 @@ type CoreGroup struct { func (x *CoreGroup) Reset() { *x = CoreGroup{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[18] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1760,7 +1958,7 @@ func (x *CoreGroup) String() string { func (*CoreGroup) ProtoMessage() {} func (x *CoreGroup) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[18] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1773,7 +1971,7 @@ func (x *CoreGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use CoreGroup.ProtoReflect.Descriptor instead. func (*CoreGroup) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{18} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{20} } func (x *CoreGroup) GetCoreType() string { @@ -1803,7 +2001,7 @@ type IPAddress struct { func (x *IPAddress) Reset() { *x = IPAddress{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[19] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1816,7 +2014,7 @@ func (x *IPAddress) String() string { func (*IPAddress) ProtoMessage() {} func (x *IPAddress) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[19] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1829,7 +2027,7 @@ func (x *IPAddress) ProtoReflect() protoreflect.Message { // Deprecated: Use IPAddress.ProtoReflect.Descriptor instead. func (*IPAddress) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{19} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{21} } func (x *IPAddress) GetIpAddress() string { @@ -1864,7 +2062,7 @@ type SystemPCI struct { func (x *SystemPCI) Reset() { *x = SystemPCI{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[20] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1877,7 +2075,7 @@ func (x *SystemPCI) String() string { func (*SystemPCI) ProtoMessage() {} func (x *SystemPCI) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[20] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1890,7 +2088,7 @@ func (x *SystemPCI) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemPCI.ProtoReflect.Descriptor instead. func (*SystemPCI) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{20} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{22} } func (x *SystemPCI) GetDevClass() string { @@ -1911,7 +2109,7 @@ type Interfaces struct { func (x *Interfaces) Reset() { *x = Interfaces{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[21] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1924,7 +2122,7 @@ func (x *Interfaces) String() string { func (*Interfaces) ProtoMessage() {} func (x *Interfaces) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[21] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1937,7 +2135,7 @@ func (x *Interfaces) ProtoReflect() protoreflect.Message { // Deprecated: Use Interfaces.ProtoReflect.Descriptor instead. func (*Interfaces) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{21} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{23} } func (x *Interfaces) GetClass() string { @@ -1965,7 +2163,7 @@ type SystemUSB struct { func (x *SystemUSB) Reset() { *x = SystemUSB{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[22] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1978,7 +2176,7 @@ func (x *SystemUSB) String() string { func (*SystemUSB) ProtoMessage() {} func (x *SystemUSB) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[22] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1991,7 +2189,7 @@ func (x *SystemUSB) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemUSB.ProtoReflect.Descriptor instead. func (*SystemUSB) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{22} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{24} } func (x *SystemUSB) GetClass() string { @@ -2062,7 +2260,7 @@ type BmInfo struct { func (x *BmInfo) Reset() { *x = BmInfo{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[23] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2075,7 +2273,7 @@ func (x *BmInfo) String() string { func (*BmInfo) ProtoMessage() {} func (x *BmInfo) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[23] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2088,7 +2286,7 @@ func (x *BmInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BmInfo.ProtoReflect.Descriptor instead. func (*BmInfo) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{23} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{25} } func (x *BmInfo) GetBmType() BmInfo_BmType { @@ -2118,7 +2316,7 @@ type BmcInfo struct { func (x *BmcInfo) Reset() { *x = BmcInfo{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[24] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2131,7 +2329,7 @@ func (x *BmcInfo) String() string { func (*BmcInfo) ProtoMessage() {} func (x *BmcInfo) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[24] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2144,7 +2342,7 @@ func (x *BmcInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BmcInfo.ProtoReflect.Descriptor instead. func (*BmcInfo) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{24} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{26} } func (x *BmcInfo) GetBmIp() string { @@ -2181,7 +2379,7 @@ type UpdateHostStatusByHostGuidRequest struct { func (x *UpdateHostStatusByHostGuidRequest) Reset() { *x = UpdateHostStatusByHostGuidRequest{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[25] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2194,7 +2392,7 @@ func (x *UpdateHostStatusByHostGuidRequest) String() string { func (*UpdateHostStatusByHostGuidRequest) ProtoMessage() {} func (x *UpdateHostStatusByHostGuidRequest) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[25] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2207,7 +2405,7 @@ func (x *UpdateHostStatusByHostGuidRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateHostStatusByHostGuidRequest.ProtoReflect.Descriptor instead. func (*UpdateHostStatusByHostGuidRequest) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{25} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{27} } func (x *UpdateHostStatusByHostGuidRequest) GetHostGuid() string { @@ -2236,7 +2434,7 @@ type UpdateHostSystemInfoByGUIDRequest struct { func (x *UpdateHostSystemInfoByGUIDRequest) Reset() { *x = UpdateHostSystemInfoByGUIDRequest{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[26] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2249,7 +2447,7 @@ func (x *UpdateHostSystemInfoByGUIDRequest) String() string { func (*UpdateHostSystemInfoByGUIDRequest) ProtoMessage() {} func (x *UpdateHostSystemInfoByGUIDRequest) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[26] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2262,7 +2460,7 @@ func (x *UpdateHostSystemInfoByGUIDRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateHostSystemInfoByGUIDRequest.ProtoReflect.Descriptor instead. func (*UpdateHostSystemInfoByGUIDRequest) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{26} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{28} } func (x *UpdateHostSystemInfoByGUIDRequest) GetHostGuid() string { @@ -2288,7 +2486,7 @@ type UpdateHostSystemInfoByGUIDResponse struct { func (x *UpdateHostSystemInfoByGUIDResponse) Reset() { *x = UpdateHostSystemInfoByGUIDResponse{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[27] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2301,7 +2499,7 @@ func (x *UpdateHostSystemInfoByGUIDResponse) String() string { func (*UpdateHostSystemInfoByGUIDResponse) ProtoMessage() {} func (x *UpdateHostSystemInfoByGUIDResponse) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[27] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2314,7 +2512,7 @@ func (x *UpdateHostSystemInfoByGUIDResponse) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateHostSystemInfoByGUIDResponse.ProtoReflect.Descriptor instead. func (*UpdateHostSystemInfoByGUIDResponse) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{27} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{29} } type UpdateInstanceStateStatusByHostGUIDRequest struct { @@ -2331,7 +2529,7 @@ type UpdateInstanceStateStatusByHostGUIDRequest struct { func (x *UpdateInstanceStateStatusByHostGUIDRequest) Reset() { *x = UpdateInstanceStateStatusByHostGUIDRequest{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[28] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2344,7 +2542,7 @@ func (x *UpdateInstanceStateStatusByHostGUIDRequest) String() string { func (*UpdateInstanceStateStatusByHostGUIDRequest) ProtoMessage() {} func (x *UpdateInstanceStateStatusByHostGUIDRequest) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[28] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2357,7 +2555,7 @@ func (x *UpdateInstanceStateStatusByHostGUIDRequest) ProtoReflect() protoreflect // Deprecated: Use UpdateInstanceStateStatusByHostGUIDRequest.ProtoReflect.Descriptor instead. func (*UpdateInstanceStateStatusByHostGUIDRequest) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{28} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{30} } func (x *UpdateInstanceStateStatusByHostGUIDRequest) GetHostGuid() string { @@ -2397,7 +2595,7 @@ type UpdateInstanceStateStatusByHostGUIDResponse struct { func (x *UpdateInstanceStateStatusByHostGUIDResponse) Reset() { *x = UpdateInstanceStateStatusByHostGUIDResponse{} if protoimpl.UnsafeEnabled { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[29] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2410,7 +2608,7 @@ func (x *UpdateInstanceStateStatusByHostGUIDResponse) String() string { func (*UpdateInstanceStateStatusByHostGUIDResponse) ProtoMessage() {} func (x *UpdateInstanceStateStatusByHostGUIDResponse) ProtoReflect() protoreflect.Message { - mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[29] + mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2423,7 +2621,7 @@ func (x *UpdateInstanceStateStatusByHostGUIDResponse) ProtoReflect() protoreflec // Deprecated: Use UpdateInstanceStateStatusByHostGUIDResponse.ProtoReflect.Descriptor instead. func (*UpdateInstanceStateStatusByHostGUIDResponse) Descriptor() ([]byte, []int) { - return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{29} + return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{31} } var File_hostmgr_proto_hostmgr_southbound_proto protoreflect.FileDescriptor @@ -2474,7 +2672,7 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x85, 0x02, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x65, 0x22, 0xcc, 0x02, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x07, 0x68, 0x77, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x57, 0x49, @@ -2490,381 +2688,426 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x08, 0x62, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc1, 0x01, 0x0a, 0x08, 0x42, 0x69, - 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x18, 0x80, - 0x01, 0xd0, 0x01, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6a, 0x0a, - 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x47, 0xfa, 0x42, 0x44, 0x72, 0x42, 0x18, 0x80, 0x01, 0x32, 0x3a, 0x5e, - 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x31, 0x32, 0x5d, 0x29, 0x5b, - 0x2f, 0x5d, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, 0x5d, 0x5b, 0x30, - 0x2d, 0x39, 0x5d, 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, 0x29, 0x5b, 0x2f, 0x5d, 0x28, 0x31, 0x39, - 0x7c, 0x32, 0x30, 0x29, 0x5c, 0x64, 0x5c, 0x64, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x76, 0x65, 0x6e, - 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, - 0x18, 0x28, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x22, 0x83, 0x01, - 0x0a, 0x06, 0x4f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, - 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, - 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x73, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x06, 0x6b, 0x65, - 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x4f, 0x73, 0x4b, 0x65, 0x72, 0x6e, 0x65, - 0x6c, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, - 0x89, 0x01, 0x0a, 0x09, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5f, 0x0a, 0x07, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, - 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, - 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xca, 0x04, 0x0a, - 0x06, 0x48, 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, - 0x12, 0x2b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, - 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, - 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x52, - 0x03, 0x63, 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, + 0x08, 0x62, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x45, 0x0a, 0x0b, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x22, 0xc1, 0x01, 0x0a, 0x08, 0x42, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, + 0xfa, 0x42, 0x08, 0x72, 0x06, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6a, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x47, 0xfa, 0x42, 0x44, 0x72, + 0x42, 0x18, 0x80, 0x01, 0x32, 0x3a, 0x5e, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x31, + 0x5b, 0x30, 0x31, 0x32, 0x5d, 0x29, 0x5b, 0x2f, 0x5d, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, + 0x7c, 0x5b, 0x31, 0x32, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, + 0x29, 0x5b, 0x2f, 0x5d, 0x28, 0x31, 0x39, 0x7c, 0x32, 0x30, 0x29, 0x5c, 0x64, 0x5c, 0x64, 0x24, + 0xd0, 0x01, 0x01, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x22, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x18, 0x28, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x22, 0x83, 0x01, 0x0a, 0x06, 0x4f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x3a, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x73, 0x4b, 0x65, 0x72, + 0x6e, 0x65, 0x6c, 0x52, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x3d, 0x0a, 0x07, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, + 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x06, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, + 0x4f, 0x73, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, - 0x55, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x89, 0x01, 0x0a, 0x09, 0x4f, 0x73, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x12, 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, - 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x35, 0x0a, 0x03, 0x75, - 0x73, 0x62, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0xbf, 0x03, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x11, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x1a, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x24, 0x0a, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x2d, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x67, 0x75, 0x69, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, + 0x24, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x75, 0x69, 0x64, + 0x12, 0x2b, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, + 0x0a, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x64, 0x6e, 0x73, + 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x61, 0x73, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x52, 0x03, 0x75, - 0x73, 0x62, 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x61, 0x73, + 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc7, 0x01, 0x0a, 0x07, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x2f, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x2d, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x2f, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x12, 0x2b, 0x0a, 0x0c, 0x6d, 0x70, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x0b, 0x6d, 0x70, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, + 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, + 0x6b, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, + 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x04, 0x64, + 0x69, 0x73, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, + 0xca, 0x04, 0x0a, 0x06, 0x48, 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, 0x73, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x4e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x35, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, + 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, 0x5f, 0x64, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x47, 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, 0x02, 0x0a, 0x09, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, - 0x00, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x05, 0x63, 0x6f, - 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, - 0x20, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x07, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, - 0x02, 0x20, 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x5f, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, - 0xcf, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x2d, - 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, - 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x77, 0x77, 0x69, - 0x64, 0x22, 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x12, - 0x24, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x05, - 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, - 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, - 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, - 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x03, 0x6d, 0x61, 0x63, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0e, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x64, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x72, - 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x20, - 0x0a, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, - 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, 0x66, 0x73, 0x5f, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x72, 0x69, 0x6f, 0x76, - 0x56, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x33, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x63, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x4d, - 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0c, - 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, - 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x50, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6d, 0x63, 0x5f, 0x6e, 0x65, - 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, 0x63, 0x4e, 0x65, 0x74, 0x22, - 0x53, 0x0a, 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x44, - 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x73, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0b, 0x63, - 0x6f, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x72, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x51, 0x0a, 0x09, 0x43, - 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x72, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, - 0x08, 0x01, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xb6, - 0x01, 0x0a, 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x0a, 0x0a, - 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, 0x28, 0x01, 0x52, 0x11, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x42, 0x69, 0x74, 0x73, - 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, + 0x6d, 0x47, 0x50, 0x55, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, + 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, + 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, + 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x50, 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x5f, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, 0x0a, 0x0a, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x09, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, - 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x26, 0x0a, - 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x69, 0x64, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x22, - 0xd1, 0x01, 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x07, 0x62, 0x6d, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x6d, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, - 0x08, 0x62, 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x63, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, 0x0a, 0x07, 0x42, - 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, 0x49, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, 0x10, 0x01, 0x12, 0x07, 0x0a, - 0x03, 0x50, 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x50, 0x52, 0x4f, 0x10, 0x03, - 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, - 0x0a, 0x05, 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, 0x49, 0x70, 0x12, 0x29, 0x0a, - 0x0b, 0x62, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, - 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, - 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, 0x73, - 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, - 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, - 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, - 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, - 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, - 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, + 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, + 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x35, + 0x0a, 0x03, 0x75, 0x73, 0x62, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xae, 0x02, - 0x0a, 0x2a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x09, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, + 0x52, 0x03, 0x75, 0x73, 0x62, 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, 0x02, 0x0a, + 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x72, + 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, + 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x07, + 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, + 0x70, 0x75, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, + 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x50, 0x55, + 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, + 0x6b, 0x12, 0x2d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, + 0x77, 0x77, 0x69, 0x64, 0x22, 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, + 0x50, 0x55, 0x12, 0x24, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, + 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x06, + 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x21, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, + 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, + 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x03, + 0x6d, 0x61, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, + 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0e, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x2e, 0x0a, + 0x13, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, + 0x15, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x6e, + 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x64, + 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, + 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, + 0x76, 0x66, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, 0x66, 0x73, + 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x72, + 0x69, 0x6f, 0x76, 0x56, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x09, 0x70, + 0x65, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x6d, 0x61, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, 0x0a, 0x0c, + 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x70, 0x65, + 0x65, 0x72, 0x4d, 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, + 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, + 0x46, 0x0a, 0x0c, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, + 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, + 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6d, 0x63, + 0x5f, 0x6e, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, 0x63, 0x4e, + 0x65, 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, + 0x79, 0x12, 0x44, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, + 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, + 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, + 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x51, + 0x0a, 0x09, 0x43, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, 0x42, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x01, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x26, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, 0x69, 0x70, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, 0x28, 0x01, + 0x52, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x42, + 0x69, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, + 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x5f, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, + 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, 0x02, 0x0a, + 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x69, 0x64, + 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x12, 0x26, 0x0a, 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x69, + 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, + 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2a, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0a, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, + 0x07, 0x62, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, + 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x3c, 0x0a, 0x08, 0x62, 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, + 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, + 0x0a, 0x07, 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, + 0x49, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, 0x10, 0x01, + 0x12, 0x07, 0x0a, 0x03, 0x50, 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x50, 0x52, + 0x4f, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, + 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1d, 0x0a, 0x05, 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, 0x49, 0x70, + 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, + 0x0a, 0x62, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x62, + 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, + 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, + 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, + 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, + 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x6f, + 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, + 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, + 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x2d, - 0x0a, 0x2b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5a, 0x0a, - 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, - 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, 0x46, - 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x01, - 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, - 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, 0x01, 0x0a, 0x0d, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, - 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x49, - 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, - 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, - 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x2a, 0xf3, 0x02, - 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1f, - 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x10, - 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x45, 0x44, - 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, - 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x07, - 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x21, - 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, - 0x47, 0x10, 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x12, - 0x85, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x3b, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0xae, 0x02, 0x0a, 0x2a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, + 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x27, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, + 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, + 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x22, 0x2d, 0x0a, 0x2b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, + 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2a, 0x5a, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, + 0x0a, 0x17, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, + 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x43, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, + 0x44, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, 0x01, 0x0a, + 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, + 0x0a, 0x1a, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, + 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, + 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, + 0x2a, 0xf3, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, + 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, + 0x4e, 0x45, 0x44, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x49, + 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, + 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x09, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, + 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, 0x74, 0x6d, + 0x67, 0x72, 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, + 0x64, 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, + 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, + 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, - 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x12, - 0x44, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, - 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, - 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x12, 0x3b, 0x2e, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, 0x23, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, + 0x49, 0x44, 0x12, 0x44, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, + 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, + 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, + 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x99, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, + 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, - 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x6f, 0x73, - 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x16, 0x5a, 0x14, 0x2e, 0x3b, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x16, 0x5a, + 0x14, 0x2e, 0x3b, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2880,7 +3123,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP() []byte { } var file_hostmgr_proto_hostmgr_southbound_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_hostmgr_proto_hostmgr_southbound_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_hostmgr_proto_hostmgr_southbound_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_hostmgr_proto_hostmgr_southbound_proto_goTypes = []interface{}{ (ConfigMode)(0), // 0: hostmgr_southbound_proto.ConfigMode (InstanceState)(0), // 1: hostmgr_southbound_proto.InstanceState @@ -2897,71 +3140,75 @@ var file_hostmgr_proto_hostmgr_southbound_proto_goTypes = []interface{}{ (*Config)(nil), // 12: hostmgr_southbound_proto.Config (*OsKernel)(nil), // 13: hostmgr_southbound_proto.OsKernel (*OsRelease)(nil), // 14: hostmgr_southbound_proto.OsRelease - (*Storage)(nil), // 15: hostmgr_southbound_proto.Storage - (*HWInfo)(nil), // 16: hostmgr_southbound_proto.HWInfo - (*SystemCPU)(nil), // 17: hostmgr_southbound_proto.SystemCPU - (*SystemMemory)(nil), // 18: hostmgr_southbound_proto.SystemMemory - (*SystemDisk)(nil), // 19: hostmgr_southbound_proto.SystemDisk - (*SystemGPU)(nil), // 20: hostmgr_southbound_proto.SystemGPU - (*SystemNetwork)(nil), // 21: hostmgr_southbound_proto.SystemNetwork - (*CPUTopology)(nil), // 22: hostmgr_southbound_proto.CPUTopology - (*Socket)(nil), // 23: hostmgr_southbound_proto.Socket - (*CoreGroup)(nil), // 24: hostmgr_southbound_proto.CoreGroup - (*IPAddress)(nil), // 25: hostmgr_southbound_proto.IPAddress - (*SystemPCI)(nil), // 26: hostmgr_southbound_proto.SystemPCI - (*Interfaces)(nil), // 27: hostmgr_southbound_proto.Interfaces - (*SystemUSB)(nil), // 28: hostmgr_southbound_proto.SystemUSB - (*BmInfo)(nil), // 29: hostmgr_southbound_proto.BmInfo - (*BmcInfo)(nil), // 30: hostmgr_southbound_proto.BmcInfo - (*UpdateHostStatusByHostGuidRequest)(nil), // 31: hostmgr_southbound_proto.UpdateHostStatusByHostGuidRequest - (*UpdateHostSystemInfoByGUIDRequest)(nil), // 32: hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDRequest - (*UpdateHostSystemInfoByGUIDResponse)(nil), // 33: hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDResponse - (*UpdateInstanceStateStatusByHostGUIDRequest)(nil), // 34: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest - (*UpdateInstanceStateStatusByHostGUIDResponse)(nil), // 35: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDResponse + (*DeviceInfo)(nil), // 15: hostmgr_southbound_proto.DeviceInfo + (*RASInfo)(nil), // 16: hostmgr_southbound_proto.RASInfo + (*Storage)(nil), // 17: hostmgr_southbound_proto.Storage + (*HWInfo)(nil), // 18: hostmgr_southbound_proto.HWInfo + (*SystemCPU)(nil), // 19: hostmgr_southbound_proto.SystemCPU + (*SystemMemory)(nil), // 20: hostmgr_southbound_proto.SystemMemory + (*SystemDisk)(nil), // 21: hostmgr_southbound_proto.SystemDisk + (*SystemGPU)(nil), // 22: hostmgr_southbound_proto.SystemGPU + (*SystemNetwork)(nil), // 23: hostmgr_southbound_proto.SystemNetwork + (*CPUTopology)(nil), // 24: hostmgr_southbound_proto.CPUTopology + (*Socket)(nil), // 25: hostmgr_southbound_proto.Socket + (*CoreGroup)(nil), // 26: hostmgr_southbound_proto.CoreGroup + (*IPAddress)(nil), // 27: hostmgr_southbound_proto.IPAddress + (*SystemPCI)(nil), // 28: hostmgr_southbound_proto.SystemPCI + (*Interfaces)(nil), // 29: hostmgr_southbound_proto.Interfaces + (*SystemUSB)(nil), // 30: hostmgr_southbound_proto.SystemUSB + (*BmInfo)(nil), // 31: hostmgr_southbound_proto.BmInfo + (*BmcInfo)(nil), // 32: hostmgr_southbound_proto.BmcInfo + (*UpdateHostStatusByHostGuidRequest)(nil), // 33: hostmgr_southbound_proto.UpdateHostStatusByHostGuidRequest + (*UpdateHostSystemInfoByGUIDRequest)(nil), // 34: hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDRequest + (*UpdateHostSystemInfoByGUIDResponse)(nil), // 35: hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDResponse + (*UpdateInstanceStateStatusByHostGUIDRequest)(nil), // 36: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest + (*UpdateInstanceStateStatusByHostGUIDResponse)(nil), // 37: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDResponse } var file_hostmgr_proto_hostmgr_southbound_proto_depIdxs = []int32{ 3, // 0: hostmgr_southbound_proto.HostStatus.host_status:type_name -> hostmgr_southbound_proto.HostStatus.Host_status 4, // 1: hostmgr_southbound_proto.HostStatusResp.host_action:type_name -> hostmgr_southbound_proto.HostStatusResp.Host_action - 16, // 2: hostmgr_southbound_proto.SystemInfo.hw_info:type_name -> hostmgr_southbound_proto.HWInfo + 18, // 2: hostmgr_southbound_proto.SystemInfo.hw_info:type_name -> hostmgr_southbound_proto.HWInfo 11, // 3: hostmgr_southbound_proto.SystemInfo.os_info:type_name -> hostmgr_southbound_proto.OsInfo - 29, // 4: hostmgr_southbound_proto.SystemInfo.bm_ctl_info:type_name -> hostmgr_southbound_proto.BmInfo + 31, // 4: hostmgr_southbound_proto.SystemInfo.bm_ctl_info:type_name -> hostmgr_southbound_proto.BmInfo 10, // 5: hostmgr_southbound_proto.SystemInfo.bios_info:type_name -> hostmgr_southbound_proto.BiosInfo - 13, // 6: hostmgr_southbound_proto.OsInfo.kernel:type_name -> hostmgr_southbound_proto.OsKernel - 14, // 7: hostmgr_southbound_proto.OsInfo.release:type_name -> hostmgr_southbound_proto.OsRelease - 12, // 8: hostmgr_southbound_proto.OsKernel.config:type_name -> hostmgr_southbound_proto.Config - 8, // 9: hostmgr_southbound_proto.OsRelease.metadata:type_name -> hostmgr_southbound_proto.Metadata - 19, // 10: hostmgr_southbound_proto.Storage.disk:type_name -> hostmgr_southbound_proto.SystemDisk - 17, // 11: hostmgr_southbound_proto.HWInfo.cpu:type_name -> hostmgr_southbound_proto.SystemCPU - 20, // 12: hostmgr_southbound_proto.HWInfo.gpu_deprecated:type_name -> hostmgr_southbound_proto.SystemGPU - 18, // 13: hostmgr_southbound_proto.HWInfo.memory:type_name -> hostmgr_southbound_proto.SystemMemory - 15, // 14: hostmgr_southbound_proto.HWInfo.storage:type_name -> hostmgr_southbound_proto.Storage - 21, // 15: hostmgr_southbound_proto.HWInfo.network:type_name -> hostmgr_southbound_proto.SystemNetwork - 26, // 16: hostmgr_southbound_proto.HWInfo.pci:type_name -> hostmgr_southbound_proto.SystemPCI - 28, // 17: hostmgr_southbound_proto.HWInfo.usb:type_name -> hostmgr_southbound_proto.SystemUSB - 20, // 18: hostmgr_southbound_proto.HWInfo.gpu:type_name -> hostmgr_southbound_proto.SystemGPU - 22, // 19: hostmgr_southbound_proto.SystemCPU.cpu_topology:type_name -> hostmgr_southbound_proto.CPUTopology - 25, // 20: hostmgr_southbound_proto.SystemNetwork.ip_addresses:type_name -> hostmgr_southbound_proto.IPAddress - 23, // 21: hostmgr_southbound_proto.CPUTopology.sockets:type_name -> hostmgr_southbound_proto.Socket - 24, // 22: hostmgr_southbound_proto.Socket.core_groups:type_name -> hostmgr_southbound_proto.CoreGroup - 0, // 23: hostmgr_southbound_proto.IPAddress.config_mode:type_name -> hostmgr_southbound_proto.ConfigMode - 27, // 24: hostmgr_southbound_proto.SystemUSB.interfaces:type_name -> hostmgr_southbound_proto.Interfaces - 5, // 25: hostmgr_southbound_proto.BmInfo.bm_type:type_name -> hostmgr_southbound_proto.BmInfo.Bm_type - 30, // 26: hostmgr_southbound_proto.BmInfo.bmc_info:type_name -> hostmgr_southbound_proto.BmcInfo - 6, // 27: hostmgr_southbound_proto.UpdateHostStatusByHostGuidRequest.host_status:type_name -> hostmgr_southbound_proto.HostStatus - 9, // 28: hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDRequest.system_info:type_name -> hostmgr_southbound_proto.SystemInfo - 2, // 29: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest.instance_status:type_name -> hostmgr_southbound_proto.InstanceStatus - 1, // 30: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest.instance_state:type_name -> hostmgr_southbound_proto.InstanceState - 31, // 31: hostmgr_southbound_proto.Hostmgr.UpdateHostStatusByHostGuid:input_type -> hostmgr_southbound_proto.UpdateHostStatusByHostGuidRequest - 34, // 32: hostmgr_southbound_proto.Hostmgr.UpdateInstanceStateStatusByHostGUID:input_type -> hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest - 32, // 33: hostmgr_southbound_proto.Hostmgr.UpdateHostSystemInfoByGUID:input_type -> hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDRequest - 7, // 34: hostmgr_southbound_proto.Hostmgr.UpdateHostStatusByHostGuid:output_type -> hostmgr_southbound_proto.HostStatusResp - 35, // 35: hostmgr_southbound_proto.Hostmgr.UpdateInstanceStateStatusByHostGUID:output_type -> hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDResponse - 33, // 36: hostmgr_southbound_proto.Hostmgr.UpdateHostSystemInfoByGUID:output_type -> hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDResponse - 34, // [34:37] is the sub-list for method output_type - 31, // [31:34] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 15, // 6: hostmgr_southbound_proto.SystemInfo.device_info:type_name -> hostmgr_southbound_proto.DeviceInfo + 13, // 7: hostmgr_southbound_proto.OsInfo.kernel:type_name -> hostmgr_southbound_proto.OsKernel + 14, // 8: hostmgr_southbound_proto.OsInfo.release:type_name -> hostmgr_southbound_proto.OsRelease + 12, // 9: hostmgr_southbound_proto.OsKernel.config:type_name -> hostmgr_southbound_proto.Config + 8, // 10: hostmgr_southbound_proto.OsRelease.metadata:type_name -> hostmgr_southbound_proto.Metadata + 16, // 11: hostmgr_southbound_proto.DeviceInfo.ras_info:type_name -> hostmgr_southbound_proto.RASInfo + 21, // 12: hostmgr_southbound_proto.Storage.disk:type_name -> hostmgr_southbound_proto.SystemDisk + 19, // 13: hostmgr_southbound_proto.HWInfo.cpu:type_name -> hostmgr_southbound_proto.SystemCPU + 22, // 14: hostmgr_southbound_proto.HWInfo.gpu_deprecated:type_name -> hostmgr_southbound_proto.SystemGPU + 20, // 15: hostmgr_southbound_proto.HWInfo.memory:type_name -> hostmgr_southbound_proto.SystemMemory + 17, // 16: hostmgr_southbound_proto.HWInfo.storage:type_name -> hostmgr_southbound_proto.Storage + 23, // 17: hostmgr_southbound_proto.HWInfo.network:type_name -> hostmgr_southbound_proto.SystemNetwork + 28, // 18: hostmgr_southbound_proto.HWInfo.pci:type_name -> hostmgr_southbound_proto.SystemPCI + 30, // 19: hostmgr_southbound_proto.HWInfo.usb:type_name -> hostmgr_southbound_proto.SystemUSB + 22, // 20: hostmgr_southbound_proto.HWInfo.gpu:type_name -> hostmgr_southbound_proto.SystemGPU + 24, // 21: hostmgr_southbound_proto.SystemCPU.cpu_topology:type_name -> hostmgr_southbound_proto.CPUTopology + 27, // 22: hostmgr_southbound_proto.SystemNetwork.ip_addresses:type_name -> hostmgr_southbound_proto.IPAddress + 25, // 23: hostmgr_southbound_proto.CPUTopology.sockets:type_name -> hostmgr_southbound_proto.Socket + 26, // 24: hostmgr_southbound_proto.Socket.core_groups:type_name -> hostmgr_southbound_proto.CoreGroup + 0, // 25: hostmgr_southbound_proto.IPAddress.config_mode:type_name -> hostmgr_southbound_proto.ConfigMode + 29, // 26: hostmgr_southbound_proto.SystemUSB.interfaces:type_name -> hostmgr_southbound_proto.Interfaces + 5, // 27: hostmgr_southbound_proto.BmInfo.bm_type:type_name -> hostmgr_southbound_proto.BmInfo.Bm_type + 32, // 28: hostmgr_southbound_proto.BmInfo.bmc_info:type_name -> hostmgr_southbound_proto.BmcInfo + 6, // 29: hostmgr_southbound_proto.UpdateHostStatusByHostGuidRequest.host_status:type_name -> hostmgr_southbound_proto.HostStatus + 9, // 30: hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDRequest.system_info:type_name -> hostmgr_southbound_proto.SystemInfo + 2, // 31: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest.instance_status:type_name -> hostmgr_southbound_proto.InstanceStatus + 1, // 32: hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest.instance_state:type_name -> hostmgr_southbound_proto.InstanceState + 33, // 33: hostmgr_southbound_proto.Hostmgr.UpdateHostStatusByHostGuid:input_type -> hostmgr_southbound_proto.UpdateHostStatusByHostGuidRequest + 36, // 34: hostmgr_southbound_proto.Hostmgr.UpdateInstanceStateStatusByHostGUID:input_type -> hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDRequest + 34, // 35: hostmgr_southbound_proto.Hostmgr.UpdateHostSystemInfoByGUID:input_type -> hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDRequest + 7, // 36: hostmgr_southbound_proto.Hostmgr.UpdateHostStatusByHostGuid:output_type -> hostmgr_southbound_proto.HostStatusResp + 37, // 37: hostmgr_southbound_proto.Hostmgr.UpdateInstanceStateStatusByHostGUID:output_type -> hostmgr_southbound_proto.UpdateInstanceStateStatusByHostGUIDResponse + 35, // 38: hostmgr_southbound_proto.Hostmgr.UpdateHostSystemInfoByGUID:output_type -> hostmgr_southbound_proto.UpdateHostSystemInfoByGUIDResponse + 36, // [36:39] is the sub-list for method output_type + 33, // [33:36] 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_hostmgr_proto_hostmgr_southbound_proto_init() } @@ -3079,7 +3326,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Storage); i { + switch v := v.(*DeviceInfo); i { case 0: return &v.state case 1: @@ -3091,7 +3338,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HWInfo); i { + switch v := v.(*RASInfo); i { case 0: return &v.state case 1: @@ -3103,7 +3350,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemCPU); i { + switch v := v.(*Storage); i { case 0: return &v.state case 1: @@ -3115,7 +3362,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemMemory); i { + switch v := v.(*HWInfo); i { case 0: return &v.state case 1: @@ -3127,7 +3374,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemDisk); i { + switch v := v.(*SystemCPU); i { case 0: return &v.state case 1: @@ -3139,7 +3386,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemGPU); i { + switch v := v.(*SystemMemory); i { case 0: return &v.state case 1: @@ -3151,7 +3398,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemNetwork); i { + switch v := v.(*SystemDisk); i { case 0: return &v.state case 1: @@ -3163,7 +3410,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CPUTopology); i { + switch v := v.(*SystemGPU); i { case 0: return &v.state case 1: @@ -3175,7 +3422,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Socket); i { + switch v := v.(*SystemNetwork); i { case 0: return &v.state case 1: @@ -3187,7 +3434,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CoreGroup); i { + switch v := v.(*CPUTopology); i { case 0: return &v.state case 1: @@ -3199,7 +3446,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IPAddress); i { + switch v := v.(*Socket); i { case 0: return &v.state case 1: @@ -3211,7 +3458,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemPCI); i { + switch v := v.(*CoreGroup); i { case 0: return &v.state case 1: @@ -3223,7 +3470,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces); i { + switch v := v.(*IPAddress); i { case 0: return &v.state case 1: @@ -3235,7 +3482,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemUSB); i { + switch v := v.(*SystemPCI); i { case 0: return &v.state case 1: @@ -3247,7 +3494,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BmInfo); i { + switch v := v.(*Interfaces); i { case 0: return &v.state case 1: @@ -3259,7 +3506,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BmcInfo); i { + switch v := v.(*SystemUSB); i { case 0: return &v.state case 1: @@ -3271,7 +3518,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateHostStatusByHostGuidRequest); i { + switch v := v.(*BmInfo); i { case 0: return &v.state case 1: @@ -3283,7 +3530,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateHostSystemInfoByGUIDRequest); i { + switch v := v.(*BmcInfo); i { case 0: return &v.state case 1: @@ -3295,7 +3542,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateHostSystemInfoByGUIDResponse); i { + switch v := v.(*UpdateHostStatusByHostGuidRequest); i { case 0: return &v.state case 1: @@ -3307,7 +3554,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateInstanceStateStatusByHostGUIDRequest); i { + switch v := v.(*UpdateHostSystemInfoByGUIDRequest); i { case 0: return &v.state case 1: @@ -3319,6 +3566,30 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateHostSystemInfoByGUIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateInstanceStateStatusByHostGUIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateInstanceStateStatusByHostGUIDResponse); i { case 0: return &v.state @@ -3337,7 +3608,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_hostmgr_proto_hostmgr_southbound_proto_rawDesc, NumEnums: 6, - NumMessages: 30, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go index 2f82ab06..26ee0823 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go @@ -488,6 +488,35 @@ func (m *SystemInfo) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetDeviceInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SystemInfoValidationError{ + field: "DeviceInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SystemInfoValidationError{ + field: "DeviceInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeviceInfo()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SystemInfoValidationError{ + field: "DeviceInfo", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return SystemInfoMultiError(errors) } @@ -1279,6 +1308,406 @@ var _ interface { ErrorName() string } = OsReleaseValidationError{} +// Validate checks the field values on DeviceInfo with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *DeviceInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeviceInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in DeviceInfoMultiError, or +// nil if none found. +func (m *DeviceInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *DeviceInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetVersion()) > 128 { + err := DeviceInfoValidationError{ + field: "Version", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetHostname()) > 128 { + err := DeviceInfoValidationError{ + field: "Hostname", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetOperationalState()) > 128 { + err := DeviceInfoValidationError{ + field: "OperationalState", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetBuildNumber()) > 128 { + err := DeviceInfoValidationError{ + field: "BuildNumber", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetSku()) > 128 { + err := DeviceInfoValidationError{ + field: "Sku", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetFeatures()) > 128 { + err := DeviceInfoValidationError{ + field: "Features", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetDeviceGuid()) < 1 { + err := DeviceInfoValidationError{ + field: "DeviceGuid", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(m.GetDeviceGuid()) > 36 { + err := DeviceInfoValidationError{ + field: "DeviceGuid", + reason: "value length must be at most 36 bytes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if err := m._validateUuid(m.GetDeviceGuid()); err != nil { + err = DeviceInfoValidationError{ + field: "DeviceGuid", + reason: "value must be a valid UUID", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetControlMode()) > 128 { + err := DeviceInfoValidationError{ + field: "ControlMode", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetDnsSuffix()) > 128 { + err := DeviceInfoValidationError{ + field: "DnsSuffix", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetRasInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeviceInfoValidationError{ + field: "RasInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeviceInfoValidationError{ + field: "RasInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRasInfo()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeviceInfoValidationError{ + field: "RasInfo", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return DeviceInfoMultiError(errors) + } + + return nil +} + +func (m *DeviceInfo) _validateUuid(uuid string) error { + if matched := _hostmgr_southbound_uuidPattern.MatchString(uuid); !matched { + return errors.New("invalid uuid format") + } + + return nil +} + +// DeviceInfoMultiError is an error wrapping multiple validation errors +// returned by DeviceInfo.ValidateAll() if the designated constraints aren't met. +type DeviceInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeviceInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeviceInfoMultiError) AllErrors() []error { return m } + +// DeviceInfoValidationError is the validation error returned by +// DeviceInfo.Validate if the designated constraints aren't met. +type DeviceInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeviceInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeviceInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeviceInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeviceInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeviceInfoValidationError) ErrorName() string { return "DeviceInfoValidationError" } + +// Error satisfies the builtin error interface +func (e DeviceInfoValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeviceInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeviceInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeviceInfoValidationError{} + +// Validate checks the field values on RASInfo with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *RASInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RASInfo with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in RASInfoMultiError, or nil if none found. +func (m *RASInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *RASInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetNetworkStatus()) > 128 { + err := RASInfoValidationError{ + field: "NetworkStatus", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetRemoteStatus()) > 128 { + err := RASInfoValidationError{ + field: "RemoteStatus", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetRemoteTrigger()) > 128 { + err := RASInfoValidationError{ + field: "RemoteTrigger", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetMpsHostname()) > 128 { + err := RASInfoValidationError{ + field: "MpsHostname", + reason: "value length must be at most 128 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RASInfoMultiError(errors) + } + + return nil +} + +// RASInfoMultiError is an error wrapping multiple validation errors returned +// by RASInfo.ValidateAll() if the designated constraints aren't met. +type RASInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RASInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RASInfoMultiError) AllErrors() []error { return m } + +// RASInfoValidationError is the validation error returned by RASInfo.Validate +// if the designated constraints aren't met. +type RASInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RASInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RASInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RASInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RASInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RASInfoValidationError) ErrorName() string { return "RASInfoValidationError" } + +// Error satisfies the builtin error interface +func (e RASInfoValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRASInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RASInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RASInfoValidationError{} + // Validate checks the field values on Storage with the rules defined in the // proto definition for this message. If any rules are violated, the first // error encountered is returned, or nil if there are no violations. diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto index c9d89df5..f749896a 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto @@ -92,6 +92,8 @@ message SystemInfo { BmInfo bm_ctl_info = 3; BiosInfo bios_info = 4; + + DeviceInfo device_info = 5; } message BiosInfo { @@ -140,6 +142,42 @@ message OsRelease { repeated Metadata metadata = 3; } +message DeviceInfo { + string version = 1 [(validate.rules).string = {max_len: 128}]; + + string hostname = 2 [(validate.rules).string = {max_len: 128}]; + + string operational_state = 3 [(validate.rules).string = {max_len: 128}]; + + string build_number = 4 [(validate.rules).string = {max_len: 128}]; + + string sku = 5 [(validate.rules).string = {max_len: 128}]; + + string features = 6 [(validate.rules).string = {max_len: 128}]; + + string device_guid = 7 [(validate.rules).string ={ + min_len: 1 + uuid: true + max_bytes: 36 + }]; + + string control_mode = 8 [(validate.rules).string = {max_len: 128}]; + + string dns_suffix = 9 [(validate.rules).string = {max_len: 128}]; + + RASInfo ras_info = 10; +} + +message RASInfo { + string network_status = 1 [(validate.rules).string = {max_len: 128}]; + + string remote_status = 2 [(validate.rules).string = {max_len: 128}]; + + string remote_trigger = 3 [(validate.rules).string = {max_len: 128}]; + + string mps_hostname = 4 [(validate.rules).string = {max_len: 128}]; +} + message Storage { repeated SystemDisk disk = 1; diff --git a/host/pkg/hostmgr/grpc_server.go b/host/pkg/hostmgr/grpc_server.go index 41d2151b..dc1cb8cb 100644 --- a/host/pkg/hostmgr/grpc_server.go +++ b/host/pkg/hostmgr/grpc_server.go @@ -143,6 +143,10 @@ func (s *server) UpdateHostSystemInfoByGUID(ctx context.Context, return nil, inv_errors.ErrorToSanitizedGrpcError(err) } + if err := updateHostdevice(ctx, tenantID, hostres, systemInfo.DeviceInfo); err != nil { + return nil, inv_errors.ErrorToSanitizedGrpcError(err) + } + return &pb.UpdateHostSystemInfoByGUIDResponse{}, nil } diff --git a/host/pkg/hostmgr/grpc_server_device_test.go b/host/pkg/hostmgr/grpc_server_device_test.go new file mode 100644 index 00000000..0bb53dff --- /dev/null +++ b/host/pkg/hostmgr/grpc_server_device_test.go @@ -0,0 +1,253 @@ +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation +// +// SPDX-License-Identifier: Apache-2.0 + +package hostmgr_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + computev1 "github.com/open-edge-platform/infra-core/inventory/v2/pkg/api/compute/v1" + inv_testing "github.com/open-edge-platform/infra-core/inventory/v2/pkg/testing" + pb "github.com/open-edge-platform/infra-managers/host/pkg/api/hostmgr/proto" + om_status "github.com/open-edge-platform/infra-onboarding/onboarding-manager/pkg/status" +) + +// Verify Add/Remove of DeviceInfo resources. +func TestHostManagerClient_AddRemoveDevice(t *testing.T) { + dao := inv_testing.NewInvResourceDAOOrFail(t) + hostInv := dao.CreateHost(t, tenant1) + os := dao.CreateOs(t, tenant1) + dao.CreateInstanceWithOpts(t, tenant1, hostInv, os, true, func(inst *computev1.InstanceResource) { + inst.ProvisioningStatus = om_status.ProvisioningStatusDone.Status + inst.ProvisioningStatusIndicator = om_status.ProvisioningStatusDone.StatusIndicator + }) + + testcases := map[string]struct { + in *pb.DeviceInfo + valid bool + }{ + "GoodDevice1": { + in: &pb.DeviceInfo{ + Version: "1.2.34", + Hostname: "testhost", + OperationalState: "enabled", + BuildNumber: "1234", + Sku: "5467", + Features: "features string for test", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + ControlMode: "client", + DnsSuffix: "testhost.com", + RasInfo: &pb.RASInfo{ + NetworkStatus: "direct", + RemoteStatus: "not connected", + RemoteTrigger: "user initiated", + MpsHostname: "", + }, + }, + valid: true, + }, + "GoodDevice2": { + in: &pb.DeviceInfo{ + RasInfo: &pb.RASInfo{}, + }, + valid: true, + }, + } + for tcname, tc := range testcases { + t.Run(tcname, func(t *testing.T) { + ctx, cancel := inv_testing.CreateContextWithENJWT(t, tenant1) + defer cancel() + + // Modify the device resources + systemInfo1.HostGuid = hostInv.GetUuid() + systemInfo1.SystemInfo.DeviceInfo = tc.in + _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) + if err != nil { + if tc.valid { + t.Errorf("UpdateHostSystemInfoByGUID() failed: %s", err) + t.FailNow() + } + } else { + if !tc.valid { + t.Errorf("UpdateHostSystemInfoByGUID() succeeded but should have failed") + t.FailNow() + } + } + + // only get/delete if valid test and hasn't failed otherwise may segfault + if !t.Failed() && tc.valid { + // validate with get + host := GetHostbyUUID(t, hostInv.GetUuid()) + require.NotNil(t, host) + invDevice := host.HostDevice + hostDevice := ConvertDeviceInfoIntoHostDevice(t, tc.in, host) + assertSameHostDevice(t, hostDevice, invDevice) + + systemInfo1.SystemInfo.DeviceInfo = &pb.DeviceInfo{} + _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) + require.NoError(t, err, "UpdateHostSystemInfoByGUID() failed") + + // validate again with get + host = GetHostbyUUID(t, hostInv.GetUuid()) + require.NotNil(t, host) + require.Empty(t, host.HostDevice) + } + }) + } +} + +// Verify update of the DeviceInfo resources. +func TestHostManagerClient_UpdateDevice(t *testing.T) { + dao := inv_testing.NewInvResourceDAOOrFail(t) + hostInv := dao.CreateHost(t, tenant1) + os := dao.CreateOs(t, tenant1) + dao.CreateInstanceWithOpts(t, tenant1, hostInv, os, true, func(inst *computev1.InstanceResource) { + inst.ProvisioningStatus = om_status.ProvisioningStatusDone.Status + inst.ProvisioningStatusIndicator = om_status.ProvisioningStatusDone.StatusIndicator + }) + t.Cleanup(func() { HardDeleteHoststoragesWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) + + testcases := map[string]struct { + in *pb.DeviceInfo + valid bool + }{ + "FirstDevice": { + in: &pb.DeviceInfo{ + Version: "1.2.34", + Hostname: "testhost", + OperationalState: "enabled", + BuildNumber: "1234", + Sku: "5467", + Features: "features string for test", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + ControlMode: "client", + DnsSuffix: "testhost.com", + RasInfo: &pb.RASInfo{ + NetworkStatus: "direct", + RemoteStatus: "not connected", + RemoteTrigger: "user initiated", + MpsHostname: "", + }, + }, + valid: true, + }, + "UpdatedDevice": { + in: &pb.DeviceInfo{ + Version: "1.2.56", + Hostname: "testhost", + OperationalState: "enabled", + BuildNumber: "7890", + Sku: "5467", + Features: "features string for test", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + ControlMode: "client", + DnsSuffix: "testhost.com", + RasInfo: &pb.RASInfo{ + NetworkStatus: "direct", + RemoteStatus: "not connected", + RemoteTrigger: "user initiated", + MpsHostname: "", + }, + }, + valid: true, + }, + } + for tcname, tc := range testcases { + t.Run(tcname, func(t *testing.T) { + ctx, cancel := inv_testing.CreateContextWithENJWT(t, tenant1) + defer cancel() + + // Modify the storage resources + systemInfo1.HostGuid = hostInv.GetUuid() + systemInfo1.SystemInfo.DeviceInfo = tc.in + _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) + if err != nil { + if tc.valid { + t.Errorf("UpdateHostSystemInfoByGUID() failed: %s", err) + t.FailNow() + } + } else { + if !tc.valid { + t.Errorf("UpdateHostSystemInfoByGUID() succeeded but should have failed") + t.FailNow() + } + } + + // only get if valid test and hasn't failed otherwise may segfault + if !t.Failed() && tc.valid { + // validate with get + host := GetHostbyUUID(t, hostInv.GetUuid()) + require.NotNil(t, host) + invDevice := host.HostDevice + hostDevice := ConvertDeviceInfoIntoHostDevice(t, tc.in, host) + assertSameHostDevice(t, hostDevice, invDevice) + } + }) + } +} + +// Verify no changes are applied. +func TestHostManagerClient_UpdateDeviceNoChanges(t *testing.T) { + dao := inv_testing.NewInvResourceDAOOrFail(t) + hostInv := dao.CreateHost(t, tenant1) + os := dao.CreateOs(t, tenant1) + dao.CreateInstanceWithOpts(t, tenant1, hostInv, os, true, func(inst *computev1.InstanceResource) { + inst.ProvisioningStatus = om_status.ProvisioningStatusDone.Status + inst.ProvisioningStatusIndicator = om_status.ProvisioningStatusDone.StatusIndicator + }) + t.Cleanup(func() { HardDeleteHostdeviceWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) + + ctx, cancel := inv_testing.CreateContextWithENJWT(t, tenant1) + defer cancel() + + device := &pb.DeviceInfo{ + Version: "1.2.34", + Hostname: "testhost", + OperationalState: "enabled", + BuildNumber: "1234", + Sku: "5467", + Features: "features string for test", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + ControlMode: "client", + DnsSuffix: "testhost.com", + RasInfo: &pb.RASInfo{ + NetworkStatus: "direct", + RemoteStatus: "not connected", + RemoteTrigger: "user initiated", + MpsHostname: "", + }, + } + + systemInfo1.HostGuid = hostInv.GetUuid() + systemInfo1.SystemInfo.DeviceInfo = device + _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) + require.NoError(t, err) + _, err = HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) + require.NoError(t, err) + + host := GetHostbyUUID(t, hostInv.GetUuid()) + require.NotNil(t, host) + invDevice := host.HostDevice + hostDevice := ConvertDeviceInfoIntoHostDevice(t, device, host) + assertSameHostDevice(t, hostDevice, invDevice) +} + +func assertSameHostDevice(t *testing.T, expectedDevice, actualDevice *computev1.HostdeviceResource) { + t.Helper() + + // make the devices comparable + expectedDevice.ResourceId = "" + expectedDevice.Host = nil + expectedDevice.CreatedAt = "" + expectedDevice.UpdatedAt = "" + actualDevice.ResourceId = "" + actualDevice.Host = nil + actualDevice.CreatedAt = "" + actualDevice.UpdatedAt = "" + if eq, diff := inv_testing.ProtoEqualOrDiff(expectedDevice, actualDevice); !eq { + t.Errorf("HostDevice data not equal: %v", diff) + } +} diff --git a/host/pkg/hostmgr/hostmgr_utils_test.go b/host/pkg/hostmgr/hostmgr_utils_test.go index a1dc6940..060c8a2a 100644 --- a/host/pkg/hostmgr/hostmgr_utils_test.go +++ b/host/pkg/hostmgr/hostmgr_utils_test.go @@ -306,6 +306,17 @@ func ConvertSystemDiskIntoHostStorages(tb testing.TB, storage *pb.Storage, return hostStorages } +// ConvertDeviceInfoIntoHostDevice is a helper function to convert deviceInfo into hostdevice resource. +func ConvertDeviceInfoIntoHostDevice(tb testing.TB, device *pb.DeviceInfo, + host *computev1.HostResource, +) *computev1.HostdeviceResource { + tb.Helper() + + hostDevice, err := hutils.PopulateHostdeviceWithDeviceInfo(device, host) + require.NoError(tb, err, "Unable to convert hoistDevice") + return hostDevice +} + // HardDeleteHoststoragesWithUpdateHostSystemInfo deletes the storage by removing all SystemDisk objects // from the HwInfo of the SystemInfo. The SB does not support incremental updates - original systemInfo // is requested to avoid side effects. @@ -322,6 +333,22 @@ func HardDeleteHoststoragesWithUpdateHostSystemInfo( require.NoError(tb, err, "UpdateHostSystemInfoByGuid() failed") } +// HardDeleteHostdeviceWithUpdateHostSystemInfo deletes the device info by removing the DeviceInfo +// objects from the SystemInfo. The SB does not support incremental update - original systemInfo +// is requested to avoid side effects. +func HardDeleteHostdeviceWithUpdateHostSystemInfo( + tb testing.TB, tenantID string, systemInfo *pb.UpdateHostSystemInfoByGUIDRequest, +) { + tb.Helper() + + ctx, cancel := inv_testing.CreateContextWithENJWT(tb, tenantID) + defer cancel() + + systemInfo.SystemInfo.DeviceInfo = &pb.DeviceInfo{} + _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo) + require.NoError(tb, err, "UpdateHostSystemInfoByGuid() failed") +} + type hasBus interface { GetBus() uint32 } diff --git a/host/pkg/hostmgr/southbound_handler.go b/host/pkg/hostmgr/southbound_handler.go index 62624830..ec2954bc 100644 --- a/host/pkg/hostmgr/southbound_handler.go +++ b/host/pkg/hostmgr/southbound_handler.go @@ -132,6 +132,88 @@ func updateHoststorage(ctx context.Context, tenantID string, hostRes *computev1. return nil } +// Helper function to reduce cyclomatic complexity. +// +//nolint:dupl // Protobuf oneOf-driven separation +func hostDeviceToAddOrUpdate(ctx context.Context, tenantID string, update bool, + hostDevice, invDevice *computev1.HostdeviceResource, +) error { + zlog.Debug().Msgf("AddOrUpdate (update=%v) host device: tenantID=%s, hostDevice=%v", update, tenantID, hostDevice) + if update { + hostDevice.ResourceId = invDevice.GetResourceId() + // Nop or update the device + if !hmgr_util.ProtoEqualSubset(hostDevice, invDevice, inv_mgr_cli.UpdateHostdeviceFieldMask...) { + if err := inv_mgr_cli.UpdateHostdevice(ctx, invClientInstance, tenantID, hostDevice); err != nil { + return err + } + } else { + // this is here to verify that ut are covering this branch + zlog.Debug().Msgf("Skip hostDevice update: tenantID=%s, hostDevice=%v", tenantID, hostDevice) + } + } else { + // Add the device + id, err := inv_mgr_cli.CreateHostdevice(ctx, invClientInstance, tenantID, hostDevice) + if err != nil { + return err + } + hostDevice.ResourceId = id + } + return nil +} + +// Helper function to reduce cyclomatic complexity. +func hostDeviceToRemove(ctx context.Context, tenantID string, invDevice *computev1.HostdeviceResource, +) error { + zlog.Debug().Msgf("Delete host device: tenantID=%s, hostDevice=%v", tenantID, invDevice) + if err := inv_mgr_cli.DeleteHostdevice(ctx, invClientInstance, tenantID, invDevice.GetResourceId()); err != nil { + return err + } + return nil +} + +// This function updates Host device resources in Inventory if needed. +func updateHostdevice(ctx context.Context, tenantID string, hostRes *computev1.HostResource, deviceInfo *pb.DeviceInfo) error { + // Devices are always eager loaded. No need to query Inventory again + invDevice := hostRes.GetHostDevice() + + zlog.Debug().Msgf("Update host device info. tenantID=%s, Inventory Device Info=%v, reported device info=%v", + tenantID, invDevice, deviceInfo) + + // Populate device info + hostDevice, err := hmgr_util.PopulateHostdeviceWithDeviceInfo(deviceInfo, hostRes) + if err != nil { + return err + } + // Check if device info matches with info in invDevice, compare version + zlog.Debug().Msgf("device name. inventory=%s, deviceInfo=%s, hostDevice=%s", + invDevice.GetDeviceName(), deviceInfo.GetHostname(), hostDevice.GetDeviceName()) + exists := invDevice.GetVersion() == hostDevice.GetVersion() + if exists { + // Perform an update of the info in inventory + err = hostDeviceToAddOrUpdate(ctx, tenantID, exists, hostDevice, invDevice) + if err != nil { + return err + } + } else { + // Check if received device info is empty + devicenameReceived := hostDevice.GetDeviceName() == "" + if !devicenameReceived { + // New device info to be added to the inventory + err = hostDeviceToAddOrUpdate(ctx, tenantID, devicenameReceived, hostDevice, invDevice) + if err != nil { + return err + } + } else { + // Empty device info received, delete old info from inventory + err = hostDeviceToRemove(ctx, tenantID, invDevice) + if err != nil { + return err + } + } + } + return nil +} + // Logic is the following - use the interface name (as reported by bare metal agent) as unique identifier. func findNicInList(nicToFind *computev1.HostnicResource, listOfNics []*computev1.HostnicResource) ( *computev1.HostnicResource, bool, diff --git a/host/pkg/invclient/common.go b/host/pkg/invclient/common.go index 540ca813..c358265b 100644 --- a/host/pkg/invclient/common.go +++ b/host/pkg/invclient/common.go @@ -15,6 +15,7 @@ import ( inv_errors "github.com/open-edge-platform/infra-core/inventory/v2/pkg/errors" ) +//nolint:cyclop // high cyclomatic complexity due to number of resource types func getInventoryResourceAndID(resource proto.Message) (*inv_v1.Resource, string, error) { invResource := &inv_v1.Resource{} var invResourceID string @@ -51,6 +52,11 @@ func getInventoryResourceAndID(resource proto.Message) (*inv_v1.Resource, string Hostgpu: res, } invResourceID = res.GetResourceId() + case *computev1.HostdeviceResource: + invResource.Resource = &inv_v1.Resource_HostDevice{ + HostDevice: res, + } + invResourceID = res.GetResourceId() case *network_v1.IPAddressResource: invResource.Resource = &inv_v1.Resource_Ipaddress{ Ipaddress: res, diff --git a/host/pkg/invclient/invclient.go b/host/pkg/invclient/invclient.go index 2465e539..8dacba76 100644 --- a/host/pkg/invclient/invclient.go +++ b/host/pkg/invclient/invclient.go @@ -111,6 +111,21 @@ var ( computev1.HostgpuResourceFieldDeviceName, computev1.HostgpuResourceFieldFeatures, } + UpdateHostdeviceFieldMask = []string{ + computev1.HostdeviceResourceFieldVersion, + computev1.HostdeviceResourceFieldDeviceName, + computev1.HostdeviceResourceFieldOperationalState, + computev1.HostdeviceResourceFieldBuildNumber, + computev1.HostdeviceResourceFieldSku, + computev1.HostdeviceResourceFieldFeatures, + computev1.HostdeviceResourceFieldDeviceGuid, + computev1.HostdeviceResourceFieldControlMode, + computev1.HostdeviceResourceFieldDnsSuffix, + computev1.HostdeviceResourceFieldNetworkStatus, + computev1.HostdeviceResourceFieldRemoteStatus, + computev1.HostdeviceResourceFieldRemoteTrigger, + computev1.HostdeviceResourceFieldMpsHostname, + } ) // List resources by the provided filter. Filter is done only on fields that are set (not default values of the @@ -575,6 +590,70 @@ func DeleteIPAddress(ctx context.Context, c inv_client.TenantAwareInventoryClien return err } +// CreateHostdevice creates a new Hostdevice resource in Inventory. +// +//nolint:dupl // Protobuf oneOf-driven separation +func CreateHostdevice( + ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID string, hostDevice *computev1.HostdeviceResource, +) (string, error) { + details := fmt.Sprintf("tenantID=%s, hostDevice=%v", tenantID, hostDevice) + zlog.Debug().Msgf("Create Hostdevice: %s", details) + + ctx, cancel := context.WithTimeout(ctx, *InventoryTimeout) + defer cancel() + resource := &inv_v1.Resource{ + Resource: &inv_v1.Resource_HostDevice{ + HostDevice: hostDevice, + }, + } + resp, err := c.Create(ctx, tenantID, resource) + if err != nil { + zlog.InfraSec().InfraErr(err).Msgf("Failed create Hostdevice resource: %s", details) + return "", err + } + return inv_util.GetResourceIDFromResource(resp) +} + +// UpdateHostdevice updates an existing Hostdevice resource info in Inventory, +// except state and other fields are not allowed from RM. +func UpdateHostdevice(ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID string, + hostDevice *computev1.HostdeviceResource, +) error { + details := fmt.Sprintf("tenantID=%s, hostDevice=%v", tenantID, hostDevice) + zlog.Debug().Msgf("Update Hostdevice: %s", hostDevice) + + err := UpdateInvResourceFields(ctx, c, tenantID, hostDevice, UpdateHostdeviceFieldMask) + if err != nil { + zlog.InfraSec().InfraErr(err).Msgf("Failed update Hostdevice resource: %s", details) + return err + } + return nil +} + +// DeleteHostdevice deletes an existing hostdevice resource in Inventory. If it gets a not found error while deleting the +// resource, it doesn't return an error. +// +//nolint:dupl // Protobuf oneOf-driven separation +func DeleteHostdevice(ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID, resourceID string) error { + details := fmt.Sprintf("tenantID=%s, resourceID=%s", tenantID, resourceID) + zlog.Debug().Msgf("Delete Hostdevice: %s", details) + + ctx, cancel := context.WithTimeout(ctx, *InventoryTimeout) + defer cancel() + + _, err := c.Delete(ctx, tenantID, resourceID) + if inv_errors.IsNotFound(err) { + zlog.Debug().Msgf("Not found while Hostdevice delete, dropping err: %s", details) + return nil + } + if err != nil { + zlog.InfraSec().InfraErr(err).Msgf("Failed delete Hostdevice resource: %s", details) + return err + } + + return err +} + // SetHostAsConnectionLost marks a host as having lost connection. func SetHostAsConnectionLost( ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID, hostResourceID string, timeStamp uint64, diff --git a/host/pkg/invclient/invclient_test.go b/host/pkg/invclient/invclient_test.go index 93a9bce6..ae23a9ad 100644 --- a/host/pkg/invclient/invclient_test.go +++ b/host/pkg/invclient/invclient_test.go @@ -383,6 +383,110 @@ func TestInvClient_SetHostAsConnectionLost(t *testing.T) { assertHostStatus(host.GetResourceId(), hrm_status.HostStatusNoConnection) } +func TestInvClient_CreateHostdevice(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + client := inv_testing.TestClients[inv_testing.RMClient].GetTenantAwareInventoryClient() + dao := inv_testing.NewInvResourceDAOOrFail(t) + + id, err := invclient.CreateHostdevice(ctx, client, tenant1, &computev1.HostdeviceResource{}) + require.Error(t, err) + assert.Equal(t, codes.InvalidArgument, grpc_status.Code(err)) + assert.Empty(t, id) + + host := dao.CreateHost(t, tenant1) + + // Create with resourceId is not allowed + device := &computev1.HostdeviceResource{ + TenantId: tenant1, + Version: "1.2.34", + DeviceName: "testhost", + BuildNumber: "1234", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + Host: host, + ResourceId: "hostdevice-12345678", + } + id, err = invclient.CreateHostdevice(ctx, client, tenant1, device) + require.Error(t, err) + require.Equal(t, "", id) + + // OK + device = &computev1.HostdeviceResource{ + TenantId: tenant1, + Version: "1.2.34", + DeviceName: "testhost", + BuildNumber: "1234", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + Host: host, + OperationalState: "enabled", + } + id, err = invclient.CreateHostdevice(ctx, client, tenant1, device) + require.NoError(t, err) + require.NotEqual(t, "", id) + t.Cleanup(func() { dao.DeleteResource(t, tenant1, id) }) +} + +func TestInvClient_UpdateHostdevice(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + client := inv_testing.TestClients[inv_testing.RMClient].GetTenantAwareInventoryClient() + dao := inv_testing.NewInvResourceDAOOrFail(t) + + // Error + err := invclient.UpdateHostdevice(ctx, client, tenant1, &computev1.HostdeviceResource{}) + require.Error(t, err) + + // OK + host := dao.CreateHost(t, tenant1) + device := &computev1.HostdeviceResource{ + TenantId: tenant1, + Version: "1.2.34", + DeviceName: "testhost", + BuildNumber: "1234", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + Host: host, + OperationalState: "enabled", + } + id, err := invclient.CreateHostdevice(ctx, client, tenant1, device) + require.NoError(t, err) + require.NotEqual(t, "", id) + t.Cleanup(func() { dao.DeleteResource(t, tenant1, id) }) + + device.Version = "1.3.45" + device.OperationalState = "disabled" + device.ResourceId = id + err = invclient.UpdateHostdevice(ctx, client, tenant1, device) + require.NoError(t, err) +} + +func TestInvClient_DeleteHostdevice(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + client := inv_testing.TestClients[inv_testing.RMClient].GetTenantAwareInventoryClient() + dao := inv_testing.NewInvResourceDAOOrFail(t) + + // Not found, does not return an error + err := invclient.DeleteHostdevice(ctx, client, tenant1, "hostdevice-12345678") + require.NoError(t, err) + + // OK + host := dao.CreateHost(t, tenant1) + device := &computev1.HostdeviceResource{ + TenantId: tenant1, + Version: "1.2.34", + DeviceName: "testhost", + BuildNumber: "1234", + DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", + Host: host, + OperationalState: "enabled", + } + id, err := invclient.CreateHostdevice(ctx, client, tenant1, device) + require.NoError(t, err) + require.NotEqual(t, "", id) + err = invclient.DeleteHostdevice(ctx, client, tenant1, id) + require.NoError(t, err) +} + func TestInvClient_SetHostStatus(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() diff --git a/host/pkg/utils/utils.go b/host/pkg/utils/utils.go index ffcb2b10..e444f3b3 100644 --- a/host/pkg/utils/utils.go +++ b/host/pkg/utils/utils.go @@ -286,6 +286,43 @@ func PopulateHoststorageWithDiskInfo(disk *pb.SystemDisk, hostres *computev1.Hos return storageres, nil } +// PopulateHostdeviceWithDeviceInfo translates a DeviceInfo into a host device resource. +func PopulateHostdeviceWithDeviceInfo(device *pb.DeviceInfo, hostres *computev1.HostResource) ( + *computev1.HostdeviceResource, error, +) { + if device == nil { + zlog.InfraSec().InfraError("DeviceInfo cannot be nil").Msgf("") + return nil, errors.Errorfc(codes.InvalidArgument, "DeviceInfo cannot be nil") + } + if hostres == nil { + zlog.InfraSec().InfraError("HostResource cannot be nil").Msgf("") + return nil, errors.Errorfc(codes.InvalidArgument, "HostResource cannot be nil") + } + rasInfo := device.GetRasInfo() + if rasInfo == nil { + zlog.InfraSec().InfraError("RASInfo cannot be nil").Msgf("") + return nil, errors.Errorfc(codes.InvalidArgument, "RASInfo cannot be nil") + } + deviceres := &computev1.HostdeviceResource{ + TenantId: hostres.GetTenantId(), + Version: device.GetVersion(), + DeviceName: device.GetHostname(), + OperationalState: device.GetOperationalState(), + BuildNumber: device.GetHostname(), + Sku: device.GetSku(), + Features: device.GetFeatures(), + DeviceGuid: device.GetDeviceGuid(), + ControlMode: device.GetControlMode(), + DnsSuffix: device.GetDnsSuffix(), + NetworkStatus: rasInfo.GetNetworkStatus(), + RemoteStatus: rasInfo.GetRemoteStatus(), + RemoteTrigger: rasInfo.GetRemoteTrigger(), + MpsHostname: rasInfo.GetMpsHostname(), + Host: hostres, + } + return deviceres, nil +} + func linkStateToNetworkInterfaceLinkState(linkState bool) computev1.NetworkInterfaceLinkState { if linkState { return computev1.NetworkInterfaceLinkState_NETWORK_INTERFACE_LINK_STATE_UP From 1c8c50d1379aec71c432992e357c61f78dda50f7 Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Wed, 18 Feb 2026 10:46:03 +0000 Subject: [PATCH 2/9] Linter fix --- host/pkg/api/hostmgr/proto/hostmgr_southbound.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto index f749896a..4fb069b1 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto @@ -155,7 +155,7 @@ message DeviceInfo { string features = 6 [(validate.rules).string = {max_len: 128}]; - string device_guid = 7 [(validate.rules).string ={ + string device_guid = 7 [(validate.rules).string = { min_len: 1 uuid: true max_bytes: 36 From bad2edf1b34819d5eb01b3babc39c8f397bc6b84 Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Thu, 19 Feb 2026 17:40:35 +0000 Subject: [PATCH 3/9] Fix southbound handler for host device updates --- .../hostmgr/proto/hostmgr_southbound.pb.go | 698 +++++++++--------- .../proto/hostmgr_southbound.pb.validate.go | 11 - .../hostmgr/proto/hostmgr_southbound.proto | 1 - host/pkg/hostmgr/southbound_handler.go | 83 +-- 4 files changed, 387 insertions(+), 406 deletions(-) diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go index 6982abba..b58b156b 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go @@ -2732,7 +2732,7 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xbf, 0x03, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x74, 0x61, 0x22, 0xbd, 0x03, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, @@ -2748,366 +2748,366 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x24, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x2d, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x67, 0x75, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, - 0x24, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x75, 0x69, 0x64, - 0x12, 0x2b, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, - 0x0a, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x64, 0x6e, 0x73, - 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x61, 0x73, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, - 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x61, 0x73, - 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc7, 0x01, 0x0a, 0x07, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x2f, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2d, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x2f, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x12, 0x2b, 0x0a, 0x0c, 0x6d, 0x70, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x0b, 0x6d, 0x70, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, - 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, - 0x6b, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, - 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x04, 0x64, - 0x69, 0x73, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, - 0xca, 0x04, 0x0a, 0x06, 0x48, 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, 0x73, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x4e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x35, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, - 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, 0x5f, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x47, 0x50, 0x55, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, 0x65, 0x70, - 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, - 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, - 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, - 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, + 0x73, 0x12, 0x2b, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x67, 0x75, 0x69, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, + 0x01, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x75, 0x69, 0x64, 0x12, 0x2b, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0a, 0x64, + 0x6e, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x64, 0x6e, 0x73, 0x53, 0x75, + 0x66, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, + 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x61, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x22, 0xc7, 0x01, 0x0a, 0x07, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, + 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x2d, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, + 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, + 0x2b, 0x0a, 0x0c, 0x6d, 0x70, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, + 0x0b, 0x6d, 0x70, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x07, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, - 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x35, - 0x0a, 0x03, 0x75, 0x73, 0x62, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, + 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x04, 0x64, 0x69, 0x73, + 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xca, 0x04, + 0x0a, 0x06, 0x48, 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, + 0x6d, 0x12, 0x2b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, + 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, - 0x52, 0x03, 0x75, 0x73, 0x62, 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, 0x20, 0x03, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, + 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, + 0x50, 0x55, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, + 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, + 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, 0x02, 0x0a, - 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x72, - 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, - 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x07, - 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, - 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, - 0x70, 0x75, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x50, 0x55, - 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, - 0x6b, 0x12, 0x2d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, - 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, - 0x77, 0x77, 0x69, 0x64, 0x22, 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, - 0x50, 0x55, 0x12, 0x24, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, - 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x06, - 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x21, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, - 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, - 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, - 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x03, - 0x6d, 0x61, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, - 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0e, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x2e, 0x0a, - 0x13, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, - 0x15, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x6e, - 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, - 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, - 0x76, 0x66, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, 0x66, 0x73, - 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x72, - 0x69, 0x6f, 0x76, 0x56, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x09, 0x70, - 0x65, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, - 0x6d, 0x61, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, 0x0a, 0x0c, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x70, 0x65, - 0x65, 0x72, 0x4d, 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, - 0x46, 0x0a, 0x0c, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, - 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6d, 0x63, - 0x5f, 0x6e, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, 0x63, 0x4e, - 0x65, 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x12, 0x44, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, - 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, - 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, - 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, + 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x35, 0x0a, 0x03, + 0x75, 0x73, 0x62, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, + 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x52, 0x03, + 0x75, 0x73, 0x62, 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x47, 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, 0x02, 0x0a, 0x09, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, + 0x20, 0x00, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x05, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, + 0x02, 0x20, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x07, 0x74, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x70, 0x75, + 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x50, 0x55, 0x54, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x70, 0x6f, 0x6c, + 0x6f, 0x67, 0x79, 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x22, 0xcf, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x12, + 0x2d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x77, 0x77, + 0x69, 0x64, 0x22, 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, + 0x12, 0x24, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, + 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, + 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, 0x63, 0x69, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x03, 0x6d, 0x61, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x61, + 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x64, 0x76, 0x65, + 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, + 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, + 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, 0x66, 0x73, 0x5f, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x72, 0x69, 0x6f, + 0x76, 0x56, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x33, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x61, + 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x65, + 0x65, 0x72, 0x5f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, + 0x4d, 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x46, 0x0a, + 0x0c, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, - 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, - 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, - 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x51, - 0x0a, 0x09, 0x43, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, - 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, - 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, 0x42, 0x07, - 0x92, 0x01, 0x04, 0x08, 0x01, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x26, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, 0x69, 0x70, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, 0x28, 0x01, - 0x52, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x42, - 0x69, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, - 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, - 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, 0x02, 0x0a, - 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, + 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6d, 0x63, 0x5f, 0x6e, + 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, 0x63, 0x4e, 0x65, 0x74, + 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, + 0x44, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x63, 0x6b, + 0x65, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x73, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0b, + 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, + 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x72, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x51, 0x0a, 0x09, + 0x43, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, + 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, + 0x04, 0x08, 0x01, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0xb6, 0x01, 0x0a, 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x0a, + 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, 0x28, 0x01, 0x52, 0x11, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x42, 0x69, 0x74, + 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, + 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x50, 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x5f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, 0x0a, 0x0a, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x69, 0x64, - 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, - 0x12, 0x26, 0x0a, 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x69, - 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, - 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2a, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0a, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, - 0x07, 0x62, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, + 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x09, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x69, 0x64, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x26, + 0x0a, 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x69, 0x64, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, - 0x2e, 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x3c, 0x0a, 0x08, 0x62, 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, - 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, - 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, - 0x0a, 0x07, 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, - 0x49, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, 0x10, 0x01, - 0x12, 0x07, 0x0a, 0x03, 0x50, 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x50, 0x52, - 0x4f, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1d, 0x0a, 0x05, 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, 0x49, 0x70, - 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x0a, 0x62, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x62, - 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x22, 0xd1, 0x01, 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x07, 0x62, + 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x68, + 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x42, + 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, + 0x0a, 0x08, 0x62, 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x63, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, 0x0a, 0x07, + 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, 0x49, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, 0x10, 0x01, 0x12, 0x07, + 0x0a, 0x03, 0x50, 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x50, 0x52, 0x4f, 0x10, + 0x03, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, + 0x4e, 0x45, 0x10, 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x1d, 0x0a, 0x05, 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, 0x49, 0x70, 0x12, 0x29, + 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, + 0x6d, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, + 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, + 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, + 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, + 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, + 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, + 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, - 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, + 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x6f, - 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, - 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, - 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xae, 0x02, 0x0a, 0x2a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, - 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x27, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, - 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xae, + 0x02, 0x0a, 0x2a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, + 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, + 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, + 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, - 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x22, 0x2d, 0x0a, 0x2b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, - 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2a, 0x5a, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, - 0x0a, 0x17, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, - 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, - 0x43, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, 0x01, 0x0a, - 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, - 0x0a, 0x1a, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, - 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, - 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, - 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, - 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, - 0x2a, 0xf3, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, - 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, - 0x4e, 0x45, 0x44, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x49, - 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, - 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x53, 0x54, - 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x09, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, - 0x45, 0x44, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, - 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, 0x74, 0x6d, - 0x67, 0x72, 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, - 0x64, 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, - 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, 0x23, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, - 0x49, 0x44, 0x12, 0x44, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, - 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, - 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, - 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, - 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x99, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, - 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, + 0x2d, 0x0a, 0x2b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, + 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5a, + 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, + 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, + 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, 0x01, 0x0a, 0x0d, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, + 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, + 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, + 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x2a, 0xf3, + 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, + 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, + 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x45, + 0x44, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, + 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, + 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, + 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, + 0x4e, 0x47, 0x10, 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, + 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, + 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, + 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, + 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, + 0x12, 0x44, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, - 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, - 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x16, 0x5a, - 0x14, 0x2e, 0x3b, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, + 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, + 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x99, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x12, 0x3b, + 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, + 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x6f, + 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, + 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, + 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x16, 0x5a, 0x14, 0x2e, + 0x3b, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go index 26ee0823..7bfb8ca0 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go @@ -1396,17 +1396,6 @@ func (m *DeviceInfo) validate(all bool) error { errors = append(errors, err) } - if utf8.RuneCountInString(m.GetDeviceGuid()) < 1 { - err := DeviceInfoValidationError{ - field: "DeviceGuid", - reason: "value length must be at least 1 runes", - } - if !all { - return err - } - errors = append(errors, err) - } - if len(m.GetDeviceGuid()) > 36 { err := DeviceInfoValidationError{ field: "DeviceGuid", diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto index 4fb069b1..e4069e8e 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto @@ -156,7 +156,6 @@ message DeviceInfo { string features = 6 [(validate.rules).string = {max_len: 128}]; string device_guid = 7 [(validate.rules).string = { - min_len: 1 uuid: true max_bytes: 36 }]; diff --git a/host/pkg/hostmgr/southbound_handler.go b/host/pkg/hostmgr/southbound_handler.go index ec2954bc..6079511b 100644 --- a/host/pkg/hostmgr/southbound_handler.go +++ b/host/pkg/hostmgr/southbound_handler.go @@ -132,85 +132,78 @@ func updateHoststorage(ctx context.Context, tenantID string, hostRes *computev1. return nil } -// Helper function to reduce cyclomatic complexity. -// -//nolint:dupl // Protobuf oneOf-driven separation -func hostDeviceToAddOrUpdate(ctx context.Context, tenantID string, update bool, - hostDevice, invDevice *computev1.HostdeviceResource, +func hostDeviceToAdd(ctx context.Context, tenantID string, hostDevice *computev1.HostdeviceResource) error { + zlog.Debug().Msgf("Add host device: tenantID=%s, hostDevice=%v", tenantID, hostDevice) + id, err := inv_mgr_cli.CreateHostdevice(ctx, invClientInstance, tenantID, hostDevice) + if err != nil { + return err + } + hostDevice.ResourceId = id + return nil +} + +func hostDeviceToUpdate(ctx context.Context, tenantID string, hostDevice, invDevice *computev1.HostdeviceResource, ) error { - zlog.Debug().Msgf("AddOrUpdate (update=%v) host device: tenantID=%s, hostDevice=%v", update, tenantID, hostDevice) - if update { - hostDevice.ResourceId = invDevice.GetResourceId() - // Nop or update the device - if !hmgr_util.ProtoEqualSubset(hostDevice, invDevice, inv_mgr_cli.UpdateHostdeviceFieldMask...) { - if err := inv_mgr_cli.UpdateHostdevice(ctx, invClientInstance, tenantID, hostDevice); err != nil { - return err - } - } else { - // this is here to verify that ut are covering this branch - zlog.Debug().Msgf("Skip hostDevice update: tenantID=%s, hostDevice=%v", tenantID, hostDevice) - } - } else { - // Add the device - id, err := inv_mgr_cli.CreateHostdevice(ctx, invClientInstance, tenantID, hostDevice) - if err != nil { + hostDevice.ResourceId = invDevice.GetResourceId() + if !hmgr_util.ProtoEqualSubset(hostDevice, invDevice, inv_mgr_cli.UpdateHostdeviceFieldMask...) { + zlog.Debug().Msgf("Update host device: tenantID=%s, hostDevice=%v", tenantID, hostDevice) + if err := inv_mgr_cli.UpdateHostdevice(ctx, invClientInstance, tenantID, hostDevice); err != nil { return err } - hostDevice.ResourceId = id + } else { + zlog.Debug().Msgf("Skip hostDevice update: tenantID=%s, hostDevice=%v", tenantID, hostDevice) } return nil } -// Helper function to reduce cyclomatic complexity. -func hostDeviceToRemove(ctx context.Context, tenantID string, invDevice *computev1.HostdeviceResource, -) error { +func hostDeviceToDelete(ctx context.Context, tenantID string, invDevice *computev1.HostdeviceResource) error { zlog.Debug().Msgf("Delete host device: tenantID=%s, hostDevice=%v", tenantID, invDevice) - if err := inv_mgr_cli.DeleteHostdevice(ctx, invClientInstance, tenantID, invDevice.GetResourceId()); err != nil { + err := inv_mgr_cli.DeleteHostdevice(ctx, invClientInstance, tenantID, invDevice.GetResourceId()) + if err != nil { return err } return nil } // This function updates Host device resources in Inventory if needed. -func updateHostdevice(ctx context.Context, tenantID string, hostRes *computev1.HostResource, deviceInfo *pb.DeviceInfo) error { +func updateHostdevice(ctx context.Context, tenantID string, hostRes *computev1.HostResource, deviceInfo *pb.DeviceInfo, +) error { // Devices are always eager loaded. No need to query Inventory again invDevice := hostRes.GetHostDevice() - zlog.Debug().Msgf("Update host device info. tenantID=%s, Inventory Device Info=%v, reported device info=%v", + zlog.Debug().Msgf("Update host device: tenantID=%s, Inventory Device Info=%v, reported device info=%v", tenantID, invDevice, deviceInfo) - // Populate device info hostDevice, err := hmgr_util.PopulateHostdeviceWithDeviceInfo(deviceInfo, hostRes) if err != nil { return err } - // Check if device info matches with info in invDevice, compare version - zlog.Debug().Msgf("device name. inventory=%s, deviceInfo=%s, hostDevice=%s", - invDevice.GetDeviceName(), deviceInfo.GetHostname(), hostDevice.GetDeviceName()) - exists := invDevice.GetVersion() == hostDevice.GetVersion() - if exists { - // Perform an update of the info in inventory - err = hostDeviceToAddOrUpdate(ctx, tenantID, exists, hostDevice, invDevice) - if err != nil { - return err + + isInvDeviceEmpty := invDevice == nil + isHostDeviceEmpty := hostDevice == &computev1.HostdeviceResource{} + if isInvDeviceEmpty { + if !isHostDeviceEmpty { + err = hostDeviceToAdd(ctx, tenantID, hostDevice) + if err != nil { + return err + } + } else { + zlog.Debug().Msgf("Skip hostDevice update: tenantID=%s, hostDevice=%v", tenantID, hostDevice) } } else { - // Check if received device info is empty - devicenameReceived := hostDevice.GetDeviceName() == "" - if !devicenameReceived { - // New device info to be added to the inventory - err = hostDeviceToAddOrUpdate(ctx, tenantID, devicenameReceived, hostDevice, invDevice) + if !isHostDeviceEmpty { + err = hostDeviceToUpdate(ctx, tenantID, hostDevice, invDevice) if err != nil { return err } } else { - // Empty device info received, delete old info from inventory - err = hostDeviceToRemove(ctx, tenantID, invDevice) + err = hostDeviceToDelete(ctx, tenantID, invDevice) if err != nil { return err } } } + return nil } From f3ea36152521608e27a55e42de3e2741e0217767 Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Fri, 20 Feb 2026 10:33:49 +0000 Subject: [PATCH 4/9] Update Golang version for dependency check --- host/go.mod | 2 +- version.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/host/go.mod b/host/go.mod index 6d7e1a21..2de9ac56 100644 --- a/host/go.mod +++ b/host/go.mod @@ -3,7 +3,7 @@ module github.com/open-edge-platform/infra-managers/host -go 1.25.5 +go 1.25.7 require ( github.com/cenkalti/backoff/v4 v4.3.0 diff --git a/version.mk b/version.mk index 5b8ef399..f3cec9ee 100644 --- a/version.mk +++ b/version.mk @@ -7,7 +7,7 @@ GOLINTVERSION_HAVE := $(shell golangci-lint version | sed 's/.*versi GOLINTVERSION_REQ := 2.8.0 GOJUNITREPORTVERSION_HAVE := $(shell go-junit-report -version | sed s/.*" v"// | sed 's/ .*//') GOJUNITREPORTVERSION_REQ := 2.1.0 -GOVERSION_REQ := 1.25.5 +GOVERSION_REQ := 1.25.7 GOVERSION_HAVE := $(shell go version | sed 's/.*version go//' | sed 's/ .*//') := 1.6.0 PROTOCGENDOCVERSION_HAVE := $(shell protoc-gen-doc --version | sed s/.*"version "// | sed 's/ .*//') PROTOCGENDOCVERSION_REQ := 1.5.1 From a8dd7623e7104b91196e04d1f4b0a396298174c8 Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Tue, 24 Feb 2026 11:25:38 +0000 Subject: [PATCH 5/9] Fix unit tests --- .../hostmgr/proto/hostmgr_southbound.pb.go | 698 +++++++++--------- .../proto/hostmgr_southbound.pb.validate.go | 20 - .../hostmgr/proto/hostmgr_southbound.proto | 5 +- host/pkg/hostmgr/grpc_server_device_test.go | 2 +- host/pkg/hostmgr/grpc_server_test.go | 3 + host/pkg/hostmgr/southbound_handler.go | 18 +- host/pkg/utils/utils.go | 8 - 7 files changed, 362 insertions(+), 392 deletions(-) diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go index b58b156b..eddc64c5 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go @@ -2732,7 +2732,7 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xbd, 0x03, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x74, 0x61, 0x22, 0xba, 0x03, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, @@ -2748,366 +2748,366 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x24, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x2b, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x67, 0x75, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, - 0x01, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x75, 0x69, 0x64, 0x12, 0x2b, - 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, + 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x67, 0x75, 0x69, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x28, 0x24, 0x52, + 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x75, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x0c, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0a, 0x64, 0x6e, 0x73, 0x5f, + 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x64, 0x6e, 0x73, 0x53, 0x75, 0x66, 0x66, 0x69, + 0x78, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, + 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x61, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0xc7, 0x01, 0x0a, 0x07, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x0e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x0d, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0c, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x0e, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x0c, + 0x6d, 0x70, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x6d, 0x70, + 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x07, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x1a, + 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xca, 0x04, 0x0a, 0x06, 0x48, + 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, + 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x2b, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0a, 0x64, - 0x6e, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x64, 0x6e, 0x73, 0x53, 0x75, - 0x66, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, - 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x61, 0x73, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0xc7, 0x01, 0x0a, 0x07, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, - 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2d, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, - 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, - 0x2b, 0x0a, 0x0c, 0x6d, 0x70, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x0b, 0x6d, 0x70, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x07, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x04, 0x64, 0x69, 0x73, - 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xca, 0x04, - 0x0a, 0x06, 0x48, 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, - 0x6d, 0x12, 0x2b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, - 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, - 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x70, - 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, - 0x50, 0x55, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, 0x65, 0x70, 0x72, 0x65, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, - 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, - 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x03, 0x63, + 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, + 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x52, 0x03, 0x63, + 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, + 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x42, + 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x35, 0x0a, 0x03, - 0x75, 0x73, 0x62, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, - 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x52, 0x03, - 0x75, 0x73, 0x62, 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, + 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x47, 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, 0x02, 0x0a, 0x09, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, - 0x20, 0x00, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x05, 0x63, - 0x6f, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, - 0x02, 0x20, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x07, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x70, 0x75, - 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x50, 0x55, 0x54, 0x6f, - 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x70, 0x6f, 0x6c, - 0x6f, 0x67, 0x79, 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x22, 0xcf, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x12, - 0x2d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, - 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, - 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x77, 0x77, - 0x69, 0x64, 0x22, 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, - 0x12, 0x24, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, - 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, - 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, - 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, 0x63, 0x69, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x03, 0x6d, 0x61, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x61, - 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x64, 0x76, 0x65, - 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, - 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, - 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, 0x66, 0x73, 0x5f, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x72, 0x69, 0x6f, - 0x76, 0x56, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x33, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x18, 0x80, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x61, - 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x65, - 0x65, 0x72, 0x5f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, - 0x4d, 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x46, 0x0a, - 0x0c, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x11, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, - 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, - 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6d, 0x63, 0x5f, 0x6e, - 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, 0x63, 0x4e, 0x65, 0x74, - 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, - 0x44, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x73, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0b, - 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x72, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, - 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x51, 0x0a, 0x09, - 0x43, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, - 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, - 0x04, 0x08, 0x01, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0xb6, 0x01, 0x0a, 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x0a, - 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, 0x28, 0x01, 0x52, 0x11, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x42, 0x69, 0x74, - 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, + 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x35, 0x0a, 0x03, 0x75, 0x73, 0x62, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x50, 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x5f, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, 0x0a, 0x0a, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x09, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x69, 0x64, 0x76, 0x65, - 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x26, - 0x0a, 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x69, 0x64, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x52, 0x03, 0x75, 0x73, 0x62, + 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, + 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, 0x02, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x61, + 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, + 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, + 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, + 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, + 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, + 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, + 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, + 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0xcf, 0x01, + 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x0d, + 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0c, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x06, 0x76, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, + 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x77, 0x77, 0x69, 0x64, 0x22, + 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x12, 0x24, 0x0a, + 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, + 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x05, 0x70, 0x63, + 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, + 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x03, + 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x64, 0x76, 0x65, + 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x72, 0x69, 0x6f, + 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, + 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, 0x12, 0x26, + 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, 0x66, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x56, 0x66, + 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, + 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, + 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x67, 0x6d, + 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x72, 0x74, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0c, 0x69, 0x70, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x50, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6d, 0x63, 0x5f, 0x6e, 0x65, 0x74, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, 0x63, 0x4e, 0x65, 0x74, 0x22, 0x53, 0x0a, + 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x44, 0x0a, 0x07, + 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0b, 0x63, 0x6f, 0x72, + 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x22, 0xd1, 0x01, 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x07, 0x62, - 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x68, - 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x42, - 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, - 0x0a, 0x08, 0x62, 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x63, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, 0x0a, 0x07, - 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, 0x49, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, 0x10, 0x01, 0x12, 0x07, - 0x0a, 0x03, 0x50, 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x50, 0x52, 0x4f, 0x10, - 0x03, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, - 0x4e, 0x45, 0x10, 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x1d, 0x0a, 0x05, 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, 0x49, 0x70, 0x12, 0x29, - 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, - 0x6d, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, - 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, - 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, - 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, - 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, - 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, - 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, + 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x51, 0x0a, 0x09, 0x43, 0x6f, 0x72, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, + 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xb6, 0x01, 0x0a, + 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x0a, 0x0a, 0x69, 0x70, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, 0x28, 0x01, 0x52, 0x11, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x42, 0x69, 0x74, 0x73, 0x12, 0x45, + 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, + 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, + 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, 0x0a, 0x0a, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x09, 0x69, + 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, + 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, + 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x22, 0xd1, 0x01, + 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x07, 0x62, 0x6d, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, + 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x6d, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x62, + 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, 0x0a, 0x07, 0x42, 0x6d, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, 0x49, 0x10, 0x00, 0x12, 0x0b, + 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, + 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x50, 0x52, 0x4f, 0x10, 0x03, 0x12, 0x07, + 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, + 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x05, + 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, 0x49, 0x70, 0x12, 0x29, 0x0a, 0x0b, 0x62, + 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x55, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, + 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, + 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, + 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, + 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, + 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, + 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, 0x73, + 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, + 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, + 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, + 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, + 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, + 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xae, 0x02, 0x0a, 0x2a, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, + 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x09, 0x68, 0x6f, + 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, + 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x47, + 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, - 0x66, 0x6f, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, - 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xae, - 0x02, 0x0a, 0x2a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, - 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, - 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, - 0x2d, 0x0a, 0x2b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, - 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5a, - 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, - 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, 0x01, 0x0a, 0x0d, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, - 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, - 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, - 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, - 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, - 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, - 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x2a, 0xf3, - 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, + 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x2d, 0x0a, 0x2b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, + 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5a, 0x0a, 0x0a, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, + 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x01, 0x12, 0x17, + 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x59, + 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, 0x01, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x53, + 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, + 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, + 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, + 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x2a, 0xf3, 0x02, 0x0a, 0x0e, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, + 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x20, 0x0a, + 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, - 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, - 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, - 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, - 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, - 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, - 0x4e, 0x47, 0x10, 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, - 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, - 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, + 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x04, + 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, + 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, + 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x1c, + 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x21, 0x0a, 0x1d, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0a, 0x12, + 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, + 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x12, 0x85, 0x01, + 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, - 0x12, 0x44, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, - 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x99, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x12, 0x3b, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, - 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x6f, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, + 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, + 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, + 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x12, 0x44, 0x2e, + 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, + 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, + 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, - 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x16, 0x5a, 0x14, 0x2e, - 0x3b, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, + 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x16, 0x5a, 0x14, 0x2e, 0x3b, 0x68, 0x6f, + 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go index 7bfb8ca0..23d3ef90 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go @@ -1407,18 +1407,6 @@ func (m *DeviceInfo) validate(all bool) error { errors = append(errors, err) } - if err := m._validateUuid(m.GetDeviceGuid()); err != nil { - err = DeviceInfoValidationError{ - field: "DeviceGuid", - reason: "value must be a valid UUID", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } - if utf8.RuneCountInString(m.GetControlMode()) > 128 { err := DeviceInfoValidationError{ field: "ControlMode", @@ -1477,14 +1465,6 @@ func (m *DeviceInfo) validate(all bool) error { return nil } -func (m *DeviceInfo) _validateUuid(uuid string) error { - if matched := _hostmgr_southbound_uuidPattern.MatchString(uuid); !matched { - return errors.New("invalid uuid format") - } - - return nil -} - // DeviceInfoMultiError is an error wrapping multiple validation errors // returned by DeviceInfo.ValidateAll() if the designated constraints aren't met. type DeviceInfoMultiError []error diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto index e4069e8e..11b2859e 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto @@ -155,10 +155,7 @@ message DeviceInfo { string features = 6 [(validate.rules).string = {max_len: 128}]; - string device_guid = 7 [(validate.rules).string = { - uuid: true - max_bytes: 36 - }]; + string device_guid = 7 [(validate.rules).string = {max_bytes: 36}]; string control_mode = 8 [(validate.rules).string = {max_len: 128}]; diff --git a/host/pkg/hostmgr/grpc_server_device_test.go b/host/pkg/hostmgr/grpc_server_device_test.go index 0bb53dff..b282b069 100644 --- a/host/pkg/hostmgr/grpc_server_device_test.go +++ b/host/pkg/hostmgr/grpc_server_device_test.go @@ -108,7 +108,7 @@ func TestHostManagerClient_UpdateDevice(t *testing.T) { inst.ProvisioningStatus = om_status.ProvisioningStatusDone.Status inst.ProvisioningStatusIndicator = om_status.ProvisioningStatusDone.StatusIndicator }) - t.Cleanup(func() { HardDeleteHoststoragesWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) + t.Cleanup(func() { HardDeleteHostdeviceWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) testcases := map[string]struct { in *pb.DeviceInfo diff --git a/host/pkg/hostmgr/grpc_server_test.go b/host/pkg/hostmgr/grpc_server_test.go index e0ede901..25a67178 100644 --- a/host/pkg/hostmgr/grpc_server_test.go +++ b/host/pkg/hostmgr/grpc_server_test.go @@ -83,6 +83,9 @@ var systemInfo1 = &pb.UpdateHostSystemInfoByGUIDRequest{ ReleaseDate: "09/30/2022", Vendor: "Dell Inc.", }, + DeviceInfo: &pb.DeviceInfo{ + RasInfo: &pb.RASInfo{}, + }, }, } diff --git a/host/pkg/hostmgr/southbound_handler.go b/host/pkg/hostmgr/southbound_handler.go index 6079511b..92a474b8 100644 --- a/host/pkg/hostmgr/southbound_handler.go +++ b/host/pkg/hostmgr/southbound_handler.go @@ -179,22 +179,20 @@ func updateHostdevice(ctx context.Context, tenantID string, hostRes *computev1.H return err } - isInvDeviceEmpty := invDevice == nil - isHostDeviceEmpty := hostDevice == &computev1.HostdeviceResource{} - if isInvDeviceEmpty { - if !isHostDeviceEmpty { + if invDevice.GetResourceId() == "" { + if deviceInfo.GetRasInfo() != nil { err = hostDeviceToAdd(ctx, tenantID, hostDevice) if err != nil { return err } - } else { - zlog.Debug().Msgf("Skip hostDevice update: tenantID=%s, hostDevice=%v", tenantID, hostDevice) } } else { - if !isHostDeviceEmpty { - err = hostDeviceToUpdate(ctx, tenantID, hostDevice, invDevice) - if err != nil { - return err + if deviceInfo.GetRasInfo() != nil { + if invDevice.GetVersion() != hostDevice.GetVersion() { + err = hostDeviceToUpdate(ctx, tenantID, hostDevice, invDevice) + if err != nil { + return err + } } } else { err = hostDeviceToDelete(ctx, tenantID, invDevice) diff --git a/host/pkg/utils/utils.go b/host/pkg/utils/utils.go index e444f3b3..714f94b3 100644 --- a/host/pkg/utils/utils.go +++ b/host/pkg/utils/utils.go @@ -290,19 +290,11 @@ func PopulateHoststorageWithDiskInfo(disk *pb.SystemDisk, hostres *computev1.Hos func PopulateHostdeviceWithDeviceInfo(device *pb.DeviceInfo, hostres *computev1.HostResource) ( *computev1.HostdeviceResource, error, ) { - if device == nil { - zlog.InfraSec().InfraError("DeviceInfo cannot be nil").Msgf("") - return nil, errors.Errorfc(codes.InvalidArgument, "DeviceInfo cannot be nil") - } if hostres == nil { zlog.InfraSec().InfraError("HostResource cannot be nil").Msgf("") return nil, errors.Errorfc(codes.InvalidArgument, "HostResource cannot be nil") } rasInfo := device.GetRasInfo() - if rasInfo == nil { - zlog.InfraSec().InfraError("RASInfo cannot be nil").Msgf("") - return nil, errors.Errorfc(codes.InvalidArgument, "RASInfo cannot be nil") - } deviceres := &computev1.HostdeviceResource{ TenantId: hostres.GetTenantId(), Version: device.GetVersion(), From b4f7d0179173da4c8fab216bc1bb13efbcd94b07 Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Tue, 24 Feb 2026 15:37:05 +0000 Subject: [PATCH 6/9] Update host manager version --- host/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/host/VERSION b/host/VERSION index 61b813d5..5bb76b57 100644 --- a/host/VERSION +++ b/host/VERSION @@ -1 +1 @@ -1.25.2 +1.25.3 From 441992a7dc4b6dbade50d7934cca5161ec3817dc Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Tue, 24 Feb 2026 15:38:06 +0000 Subject: [PATCH 7/9] Fix merge --- host/go.mod | 4 ---- 1 file changed, 4 deletions(-) diff --git a/host/go.mod b/host/go.mod index a01db783..2de9ac56 100644 --- a/host/go.mod +++ b/host/go.mod @@ -8,11 +8,7 @@ go 1.25.7 require ( github.com/cenkalti/backoff/v4 v4.3.0 github.com/envoyproxy/protoc-gen-validate v1.3.0 -<<<<<<< host-manager-api-updates github.com/open-edge-platform/infra-core/inventory/v2 v2.34.4-0.20260217115344-fc676bfa6f60 -======= - github.com/open-edge-platform/infra-core/inventory/v2 v2.34.3 ->>>>>>> main github.com/open-edge-platform/infra-managers/maintenance v1.25.0 github.com/open-edge-platform/infra-onboarding/onboarding-manager v1.39.5 github.com/prometheus/client_golang v1.23.2 From 050586f73673d7380e09fdcebcef7e07d7e9f501 Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Fri, 27 Mar 2026 10:38:05 +0000 Subject: [PATCH 8/9] Fix merge issue --- host/go.mod | 8 -------- 1 file changed, 8 deletions(-) diff --git a/host/go.mod b/host/go.mod index 76b8a647..0d9a0a9b 100644 --- a/host/go.mod +++ b/host/go.mod @@ -8,11 +8,7 @@ go 1.25.7 require ( github.com/cenkalti/backoff/v4 v4.3.0 github.com/envoyproxy/protoc-gen-validate v1.3.3 -<<<<<<< host-manager-api-updates github.com/open-edge-platform/infra-core/inventory/v2 v2.34.6-0.20260318154125-dc998e29d3fe -======= - github.com/open-edge-platform/infra-core/inventory/v2 v2.34.5 ->>>>>>> main github.com/open-edge-platform/infra-managers/maintenance v1.25.2 github.com/open-edge-platform/infra-onboarding/onboarding-manager v1.39.10 github.com/prometheus/client_golang v1.23.2 @@ -137,10 +133,6 @@ require ( golang.org/x/tools v0.42.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect -<<<<<<< host-manager-api-updates - gopkg.in/ini.v1 v1.67.1 // indirect -======= ->>>>>>> main gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/yaml v1.6.0 // indirect ) From 6e311d484d46313ad6ffcad6b38ff93088612ea2 Mon Sep 17 00:00:00 2001 From: Christopher Nolan Date: Fri, 27 Mar 2026 13:04:40 +0000 Subject: [PATCH 9/9] Replace DeviceInfo structure name with AmtConfigInfo --- host/docs/api/hostmgr.md | 54 +- host/go.mod | 4 +- host/go.sum | 6 +- .../hostmgr/proto/hostmgr_southbound.pb.go | 898 +++++++++--------- .../proto/hostmgr_southbound.pb.validate.go | 91 +- .../hostmgr/proto/hostmgr_southbound.proto | 8 +- host/pkg/hostmgr/grpc_server.go | 4 +- ...device_test.go => grpc_server_amt_test.go} | 98 +- host/pkg/hostmgr/grpc_server_test.go | 4 +- host/pkg/hostmgr/hostmgr_utils_test.go | 20 +- host/pkg/hostmgr/southbound_handler.go | 56 +- host/pkg/invclient/common.go | 8 +- host/pkg/invclient/invclient.go | 70 +- host/pkg/invclient/invclient_test.go | 42 +- host/pkg/utils/utils.go | 32 +- 15 files changed, 697 insertions(+), 698 deletions(-) rename host/pkg/hostmgr/{grpc_server_device_test.go => grpc_server_amt_test.go} (73%) diff --git a/host/docs/api/hostmgr.md b/host/docs/api/hostmgr.md index 1b3d3834..56b7d1ab 100644 --- a/host/docs/api/hostmgr.md +++ b/host/docs/api/hostmgr.md @@ -4,13 +4,13 @@ ## Table of Contents - [hostmgr/proto/hostmgr_southbound.proto](#hostmgr_proto_hostmgr_southbound-proto) + - [AmtConfigInfo](#hostmgr_southbound_proto-AmtConfigInfo) - [BiosInfo](#hostmgr_southbound_proto-BiosInfo) - [BmInfo](#hostmgr_southbound_proto-BmInfo) - [BmcInfo](#hostmgr_southbound_proto-BmcInfo) - [CPUTopology](#hostmgr_southbound_proto-CPUTopology) - [Config](#hostmgr_southbound_proto-Config) - [CoreGroup](#hostmgr_southbound_proto-CoreGroup) - - [DeviceInfo](#hostmgr_southbound_proto-DeviceInfo) - [HWInfo](#hostmgr_southbound_proto-HWInfo) - [HostStatus](#hostmgr_southbound_proto-HostStatus) - [HostStatusResp](#hostmgr_southbound_proto-HostStatusResp) @@ -54,10 +54,34 @@

Top

## hostmgr/proto/hostmgr_southbound.proto -SPDX-FileCopyrightText: (C) 2025 Intel Corporation +SPDX-FileCopyrightText: (C) 2026 Intel Corporation SPDX-License-Identifier: Apache-2.0 + + +### AmtConfigInfo + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| version | [string](#string) | | | +| device_name | [string](#string) | | | +| operational_state | [string](#string) | | | +| build_number | [string](#string) | | | +| sku | [string](#string) | | | +| features | [string](#string) | | | +| device_guid | [string](#string) | | | +| control_mode | [string](#string) | | | +| dns_suffix | [string](#string) | | | +| ras_info | [RASInfo](#hostmgr_southbound_proto-RASInfo) | | | + + + + + + ### BiosInfo @@ -155,30 +179,6 @@ SPDX-License-Identifier: Apache-2.0 - - -### DeviceInfo - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| version | [string](#string) | | | -| hostname | [string](#string) | | | -| operational_state | [string](#string) | | | -| build_number | [string](#string) | | | -| sku | [string](#string) | | | -| features | [string](#string) | | | -| device_guid | [string](#string) | | | -| control_mode | [string](#string) | | | -| dns_suffix | [string](#string) | | | -| ras_info | [RASInfo](#hostmgr_southbound_proto-RASInfo) | | | - - - - - - ### HWInfo @@ -457,7 +457,7 @@ SPDX-License-Identifier: Apache-2.0 | os_info | [OsInfo](#hostmgr_southbound_proto-OsInfo) | | | | bm_ctl_info | [BmInfo](#hostmgr_southbound_proto-BmInfo) | | | | bios_info | [BiosInfo](#hostmgr_southbound_proto-BiosInfo) | | | -| device_info | [DeviceInfo](#hostmgr_southbound_proto-DeviceInfo) | | | +| amt_info | [AmtConfigInfo](#hostmgr_southbound_proto-AmtConfigInfo) | | | diff --git a/host/go.mod b/host/go.mod index 0d9a0a9b..873ccc30 100644 --- a/host/go.mod +++ b/host/go.mod @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // SPDX-License-Identifier: Apache-2.0 module github.com/open-edge-platform/infra-managers/host @@ -8,7 +8,7 @@ go 1.25.7 require ( github.com/cenkalti/backoff/v4 v4.3.0 github.com/envoyproxy/protoc-gen-validate v1.3.3 - github.com/open-edge-platform/infra-core/inventory/v2 v2.34.6-0.20260318154125-dc998e29d3fe + github.com/open-edge-platform/infra-core/inventory/v2 v2.34.6-0.20260327101448-2dead732f49d github.com/open-edge-platform/infra-managers/maintenance v1.25.2 github.com/open-edge-platform/infra-onboarding/onboarding-manager v1.39.10 github.com/prometheus/client_golang v1.23.2 diff --git a/host/go.sum b/host/go.sum index d26a5d19..acc5eb0e 100644 --- a/host/go.sum +++ b/host/go.sum @@ -220,10 +220,8 @@ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/open-edge-platform/infra-core/inventory/v2 v2.34.4 h1:mgQ7gtO2W0t2eodLCtC1n3phD7Js7GqZWoq4AD4fH0s= -github.com/open-edge-platform/infra-core/inventory/v2 v2.34.4/go.mod h1:f7wYe6ohljTw4NfP5+4P2WGIc+nogUK9d8gE44hToQ8= -github.com/open-edge-platform/infra-core/inventory/v2 v2.34.6-0.20260318154125-dc998e29d3fe h1:AR5awTmatVhnT7Uy6TTqO86OS0aaGKncx5Pajar+Dak= -github.com/open-edge-platform/infra-core/inventory/v2 v2.34.6-0.20260318154125-dc998e29d3fe/go.mod h1:U5EHGK/kUtXOVSmriHArXFKumwpTLfJRAR64XmsmaFs= +github.com/open-edge-platform/infra-core/inventory/v2 v2.34.6-0.20260327101448-2dead732f49d h1:zz1yy6u0QnX5iwrhcxMdL9HZxZ0qa2sUPv+8/mwZPXU= +github.com/open-edge-platform/infra-core/inventory/v2 v2.34.6-0.20260327101448-2dead732f49d/go.mod h1:FxGALJhG8pPFzlvJNgZQQA8LMPG4u0TSbPpfwVuUVc8= github.com/open-edge-platform/infra-managers/maintenance v1.25.2 h1:AhUYSDXFELkj2v6XxIfj+GhP9u73a/QSiKErcpc3gNc= github.com/open-edge-platform/infra-managers/maintenance v1.25.2/go.mod h1:Vdsq4hD3a8+uLsoFD2VDW+XWDJOe/uHUXBw8WxCTfio= github.com/open-edge-platform/infra-onboarding/onboarding-manager v1.39.10 h1:DD0eYDZO3/h4nhPdMlU51fh2fb3HOs5WF4IDj/5cH30= diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go index f0c1af49..f41dfb3d 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // SPDX-License-Identifier: Apache-2.0 // Code generated by protoc-gen-go. DO NOT EDIT. @@ -577,11 +577,11 @@ type SystemInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HwInfo *HWInfo `protobuf:"bytes,1,opt,name=hw_info,json=hwInfo,proto3" json:"hw_info,omitempty"` - OsInfo *OsInfo `protobuf:"bytes,2,opt,name=os_info,json=osInfo,proto3" json:"os_info,omitempty"` - BmCtlInfo *BmInfo `protobuf:"bytes,3,opt,name=bm_ctl_info,json=bmCtlInfo,proto3" json:"bm_ctl_info,omitempty"` - BiosInfo *BiosInfo `protobuf:"bytes,4,opt,name=bios_info,json=biosInfo,proto3" json:"bios_info,omitempty"` - DeviceInfo *DeviceInfo `protobuf:"bytes,5,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"` + HwInfo *HWInfo `protobuf:"bytes,1,opt,name=hw_info,json=hwInfo,proto3" json:"hw_info,omitempty"` + OsInfo *OsInfo `protobuf:"bytes,2,opt,name=os_info,json=osInfo,proto3" json:"os_info,omitempty"` + BmCtlInfo *BmInfo `protobuf:"bytes,3,opt,name=bm_ctl_info,json=bmCtlInfo,proto3" json:"bm_ctl_info,omitempty"` + BiosInfo *BiosInfo `protobuf:"bytes,4,opt,name=bios_info,json=biosInfo,proto3" json:"bios_info,omitempty"` + AmtInfo *AmtConfigInfo `protobuf:"bytes,5,opt,name=amt_info,json=amtInfo,proto3" json:"amt_info,omitempty"` } func (x *SystemInfo) Reset() { @@ -644,9 +644,9 @@ func (x *SystemInfo) GetBiosInfo() *BiosInfo { return nil } -func (x *SystemInfo) GetDeviceInfo() *DeviceInfo { +func (x *SystemInfo) GetAmtInfo() *AmtConfigInfo { if x != nil { - return x.DeviceInfo + return x.AmtInfo } return nil } @@ -942,13 +942,13 @@ func (x *OsRelease) GetMetadata() []*Metadata { return nil } -type DeviceInfo struct { +type AmtConfigInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"` + DeviceName string `protobuf:"bytes,2,opt,name=device_name,json=deviceName,proto3" json:"device_name,omitempty"` OperationalState string `protobuf:"bytes,3,opt,name=operational_state,json=operationalState,proto3" json:"operational_state,omitempty"` BuildNumber string `protobuf:"bytes,4,opt,name=build_number,json=buildNumber,proto3" json:"build_number,omitempty"` Sku string `protobuf:"bytes,5,opt,name=sku,proto3" json:"sku,omitempty"` @@ -959,8 +959,8 @@ type DeviceInfo struct { RasInfo *RASInfo `protobuf:"bytes,10,opt,name=ras_info,json=rasInfo,proto3" json:"ras_info,omitempty"` } -func (x *DeviceInfo) Reset() { - *x = DeviceInfo{} +func (x *AmtConfigInfo) Reset() { + *x = AmtConfigInfo{} if protoimpl.UnsafeEnabled { mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -968,13 +968,13 @@ func (x *DeviceInfo) Reset() { } } -func (x *DeviceInfo) String() string { +func (x *AmtConfigInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeviceInfo) ProtoMessage() {} +func (*AmtConfigInfo) ProtoMessage() {} -func (x *DeviceInfo) ProtoReflect() protoreflect.Message { +func (x *AmtConfigInfo) ProtoReflect() protoreflect.Message { mi := &file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -986,75 +986,75 @@ func (x *DeviceInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeviceInfo.ProtoReflect.Descriptor instead. -func (*DeviceInfo) Descriptor() ([]byte, []int) { +// Deprecated: Use AmtConfigInfo.ProtoReflect.Descriptor instead. +func (*AmtConfigInfo) Descriptor() ([]byte, []int) { return file_hostmgr_proto_hostmgr_southbound_proto_rawDescGZIP(), []int{9} } -func (x *DeviceInfo) GetVersion() string { +func (x *AmtConfigInfo) GetVersion() string { if x != nil { return x.Version } return "" } -func (x *DeviceInfo) GetHostname() string { +func (x *AmtConfigInfo) GetDeviceName() string { if x != nil { - return x.Hostname + return x.DeviceName } return "" } -func (x *DeviceInfo) GetOperationalState() string { +func (x *AmtConfigInfo) GetOperationalState() string { if x != nil { return x.OperationalState } return "" } -func (x *DeviceInfo) GetBuildNumber() string { +func (x *AmtConfigInfo) GetBuildNumber() string { if x != nil { return x.BuildNumber } return "" } -func (x *DeviceInfo) GetSku() string { +func (x *AmtConfigInfo) GetSku() string { if x != nil { return x.Sku } return "" } -func (x *DeviceInfo) GetFeatures() string { +func (x *AmtConfigInfo) GetFeatures() string { if x != nil { return x.Features } return "" } -func (x *DeviceInfo) GetDeviceGuid() string { +func (x *AmtConfigInfo) GetDeviceGuid() string { if x != nil { return x.DeviceGuid } return "" } -func (x *DeviceInfo) GetControlMode() string { +func (x *AmtConfigInfo) GetControlMode() string { if x != nil { return x.ControlMode } return "" } -func (x *DeviceInfo) GetDnsSuffix() string { +func (x *AmtConfigInfo) GetDnsSuffix() string { if x != nil { return x.DnsSuffix } return "" } -func (x *DeviceInfo) GetRasInfo() *RASInfo { +func (x *AmtConfigInfo) GetRasInfo() *RASInfo { if x != nil { return x.RasInfo } @@ -2672,7 +2672,7 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xcc, 0x02, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x65, 0x22, 0xc9, 0x02, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x07, 0x68, 0x77, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x57, 0x49, @@ -2688,434 +2688,434 @@ var file_hostmgr_proto_hostmgr_southbound_proto_rawDesc = []byte{ 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x08, 0x62, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x45, 0x0a, 0x0b, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x22, 0xc3, 0x02, 0x0a, 0x08, 0x42, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, - 0xfa, 0x42, 0x08, 0x72, 0x06, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xeb, 0x01, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xc7, 0x01, 0xfa, 0x42, - 0xc3, 0x01, 0x72, 0xc0, 0x01, 0x18, 0x80, 0x01, 0x32, 0xb7, 0x01, 0x5e, 0x28, 0x28, 0x5c, 0x64, - 0x7b, 0x34, 0x7d, 0x29, 0x2f, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, - 0x2d, 0x32, 0x5d, 0x29, 0x2f, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, - 0x5d, 0x5c, 0x64, 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, 0x29, 0x7c, 0x28, 0x30, 0x5b, 0x31, 0x2d, - 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x32, 0x5d, 0x29, 0x2f, 0x28, 0x30, 0x5b, 0x31, 0x2d, - 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, 0x5d, 0x5c, 0x64, 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, 0x29, - 0x2f, 0x5c, 0x64, 0x7b, 0x34, 0x7d, 0x7c, 0x28, 0x5c, 0x64, 0x7b, 0x34, 0x7d, 0x29, 0x2d, 0x28, - 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x32, 0x5d, 0x29, 0x2d, 0x28, - 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, 0x5d, 0x5c, 0x64, 0x7c, 0x33, 0x5b, - 0x30, 0x31, 0x5d, 0x29, 0x7c, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, - 0x2d, 0x32, 0x5d, 0x29, 0x2d, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, - 0x5d, 0x5c, 0x64, 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, 0x29, 0x2d, 0x5c, 0x64, 0x7b, 0x34, 0x7d, - 0x29, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x18, 0x28, 0xd0, 0x01, 0x01, 0x52, 0x06, - 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x22, 0x83, 0x01, 0x0a, 0x06, 0x4f, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x3a, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x73, 0x4b, - 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x3d, 0x0a, - 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x06, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, - 0x0a, 0x08, 0x4f, 0x73, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x08, 0x62, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x08, 0x61, 0x6d, 0x74, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, + 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x6d, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x61, 0x6d, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc3, 0x02, + 0x0a, 0x08, 0x42, 0x69, 0x6f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, + 0x72, 0x06, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0xeb, 0x01, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xc7, 0x01, 0xfa, 0x42, 0xc3, 0x01, 0x72, + 0xc0, 0x01, 0x18, 0x80, 0x01, 0x32, 0xb7, 0x01, 0x5e, 0x28, 0x28, 0x5c, 0x64, 0x7b, 0x34, 0x7d, + 0x29, 0x2f, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x32, 0x5d, + 0x29, 0x2f, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, 0x5d, 0x5c, 0x64, + 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, 0x29, 0x7c, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, + 0x31, 0x5b, 0x30, 0x2d, 0x32, 0x5d, 0x29, 0x2f, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, + 0x5b, 0x31, 0x32, 0x5d, 0x5c, 0x64, 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, 0x29, 0x2f, 0x5c, 0x64, + 0x7b, 0x34, 0x7d, 0x7c, 0x28, 0x5c, 0x64, 0x7b, 0x34, 0x7d, 0x29, 0x2d, 0x28, 0x30, 0x5b, 0x31, + 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x32, 0x5d, 0x29, 0x2d, 0x28, 0x30, 0x5b, 0x31, + 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, 0x5d, 0x5c, 0x64, 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, + 0x29, 0x7c, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x32, 0x5d, + 0x29, 0x2d, 0x28, 0x30, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x32, 0x5d, 0x5c, 0x64, + 0x7c, 0x33, 0x5b, 0x30, 0x31, 0x5d, 0x29, 0x2d, 0x5c, 0x64, 0x7b, 0x34, 0x7d, 0x29, 0x24, 0xd0, + 0x01, 0x01, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x22, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x18, 0x28, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x22, 0x83, 0x01, 0x0a, 0x06, 0x4f, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, + 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x89, 0x01, 0x0a, 0x09, 0x4f, 0x73, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, - 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xba, 0x03, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x73, 0x4b, 0x65, 0x72, 0x6e, + 0x65, 0x6c, 0x52, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, + 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x06, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x4f, + 0x73, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, + 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x89, 0x01, 0x0a, 0x09, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xc2, 0x03, 0x0a, 0x0d, 0x41, 0x6d, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, - 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x1a, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x24, 0x0a, - 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x67, 0x75, - 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x28, - 0x24, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x75, 0x69, 0x64, 0x12, 0x2b, 0x0a, - 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0a, 0x64, 0x6e, - 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x64, 0x6e, 0x73, 0x53, 0x75, 0x66, - 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x61, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x22, 0xc7, 0x01, 0x0a, 0x07, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, - 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, - 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, - 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2b, - 0x0a, 0x0c, 0x6d, 0x70, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, - 0x6d, 0x70, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x07, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, - 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, - 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xca, 0x04, 0x0a, - 0x06, 0x48, 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, - 0x12, 0x2b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, - 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x0c, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x03, 0x73, + 0x6b, 0x75, 0x12, 0x24, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x28, 0x24, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x75, + 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x27, 0x0a, 0x0a, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x64, + 0x6e, 0x73, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x61, 0x73, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x52, - 0x03, 0x63, 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, - 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, - 0x55, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, - 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x12, 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, - 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x35, 0x0a, 0x03, 0x75, - 0x73, 0x62, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, - 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x52, 0x03, 0x75, - 0x73, 0x62, 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x41, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, + 0x61, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc7, 0x01, 0x0a, 0x07, 0x52, 0x41, 0x53, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x0c, 0x6d, 0x70, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0x18, 0x80, 0x01, 0x52, 0x0b, 0x6d, 0x70, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x5f, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x64, + 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, + 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x52, + 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x22, 0xca, 0x04, 0x0a, 0x06, 0x48, 0x57, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0a, + 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x47, 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, 0x02, 0x0a, 0x09, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, - 0x00, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x05, 0x63, 0x6f, - 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, - 0x20, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x07, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, - 0x02, 0x20, 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x5f, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, - 0xcf, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x2d, - 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, - 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x77, 0x77, 0x69, - 0x64, 0x22, 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x12, - 0x24, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x05, - 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, - 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, - 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, - 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x03, 0x6d, 0x61, 0x63, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0e, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0d, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x64, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x72, - 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x20, - 0x0a, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, 0x66, 0x73, - 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, 0x66, 0x73, 0x5f, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x72, 0x69, 0x6f, 0x76, - 0x56, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x33, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x63, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x4d, - 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0c, - 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, - 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x50, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6d, 0x63, 0x5f, 0x6e, 0x65, - 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, 0x63, 0x4e, 0x65, 0x74, 0x22, - 0x53, 0x0a, 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x44, - 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x73, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0b, 0x63, - 0x6f, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x72, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x51, 0x0a, 0x09, 0x43, - 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x72, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, - 0x08, 0x01, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xb6, - 0x01, 0x0a, 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x0a, 0x0a, - 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, 0x28, 0x01, 0x52, 0x11, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x42, 0x69, 0x74, 0x73, - 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x50, 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x5f, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, 0x0a, 0x0a, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, - 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x09, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, - 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, - 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0x80, 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x26, 0x0a, - 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x09, 0x69, 0x64, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, - 0x01, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x6d, 0x43, 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x4e, 0x0a, 0x0e, 0x67, 0x70, 0x75, + 0x5f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, + 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x67, 0x70, 0x75, 0x44, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6f, 0x73, 0x74, + 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, + 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, + 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x03, 0x70, 0x63, 0x69, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, + 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x52, 0x03, 0x70, 0x63, 0x69, + 0x12, 0x35, 0x0a, 0x03, 0x75, 0x73, 0x62, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x22, - 0xd1, 0x01, 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x07, 0x62, 0x6d, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x6d, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, - 0x08, 0x62, 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x63, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x46, 0x0a, 0x07, 0x42, - 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, 0x49, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, 0x10, 0x01, 0x12, 0x07, 0x0a, - 0x03, 0x50, 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x50, 0x52, 0x4f, 0x10, 0x03, - 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, - 0x0a, 0x05, 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, 0x49, 0x70, 0x12, 0x29, 0x0a, - 0x0b, 0x62, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, + 0x53, 0x42, 0x52, 0x03, 0x75, 0x73, 0x62, 0x12, 0x35, 0x0a, 0x03, 0x67, 0x70, 0x75, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, + 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x50, 0x55, 0x52, 0x03, 0x67, 0x70, 0x75, 0x22, 0xb6, + 0x02, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x50, 0x55, 0x12, 0x1c, 0x0a, 0x04, + 0x61, 0x72, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, + 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, + 0x1d, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x21, + 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, + 0x0c, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, + 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x54, + 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x2b, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x20, 0x00, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, + 0x69, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0x80, 0x01, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x77, 0x77, 0x69, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x04, 0x77, 0x77, 0x69, 0x64, 0x22, 0xe2, 0x01, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x47, 0x50, 0x55, 0x12, 0x24, 0x0a, 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, + 0xd0, 0x01, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, + 0x0a, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x12, 0x21, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, + 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x10, 0x01, 0x18, 0x80, 0x01, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, + 0x80, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x96, 0x06, 0x0a, 0x0d, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, + 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, + 0x06, 0x70, 0x63, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x70, 0x63, 0x69, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, + 0x6e, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x6c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2f, + 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x65, 0x78, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, + 0x52, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, + 0x2e, 0x0a, 0x13, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, + 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x32, 0x0a, 0x15, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, + 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, + 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, + 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x22, 0x0a, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, 0x75, 0x6d, 0x76, + 0x66, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x6e, + 0x75, 0x6d, 0x76, 0x66, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x72, 0x69, 0x6f, 0x76, 0x5f, 0x76, + 0x66, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, + 0x73, 0x72, 0x69, 0x6f, 0x76, 0x56, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, + 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x65, 0x65, + 0x72, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x2a, + 0x0a, 0x0c, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, + 0x70, 0x65, 0x65, 0x72, 0x4d, 0x67, 0x6d, 0x74, 0x49, 0x70, 0x12, 0x25, 0x0a, 0x09, 0x70, 0x65, + 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x50, 0x6f, 0x72, + 0x74, 0x12, 0x46, 0x0a, 0x0c, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, + 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x69, 0x70, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x17, 0x0a, 0x07, 0x62, + 0x6d, 0x63, 0x5f, 0x6e, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6d, + 0x63, 0x4e, 0x65, 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x50, 0x55, 0x54, 0x6f, 0x70, 0x6f, 0x6c, + 0x6f, 0x67, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, + 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x07, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x6f, 0x63, + 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, + 0x12, 0x4e, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, + 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, + 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x22, 0x51, 0x0a, 0x09, 0x43, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x0a, + 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6f, + 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0a, 0xfa, + 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x09, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x26, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x09, + 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3a, 0x0a, 0x13, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x10, 0x80, 0x01, + 0x28, 0x01, 0x52, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x42, 0x69, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, + 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, + 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x09, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x43, 0x49, 0x12, 0x25, 0x0a, 0x09, 0x64, 0x65, 0x76, + 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x64, 0x65, 0x76, 0x43, 0x6c, 0x61, 0x73, 0x73, + 0x22, 0x2c, 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1e, + 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xb3, + 0x02, 0x0a, 0x09, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x53, 0x42, 0x12, 0x1e, 0x0a, 0x05, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x08, + 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x08, 0x69, 0x64, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, + 0x09, 0x69, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, + 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, + 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, + 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x06, 0x42, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x41, 0x0a, 0x07, 0x62, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x2e, 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x06, 0x62, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x62, 0x6d, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, + 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x42, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x62, 0x6d, 0x63, 0x49, 0x6e, 0x66, 0x6f, + 0x22, 0x46, 0x0a, 0x07, 0x42, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, + 0x50, 0x4d, 0x49, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x44, 0x46, 0x49, 0x53, 0x48, + 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x44, 0x55, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x56, + 0x50, 0x52, 0x4f, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x08, + 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x05, 0x22, 0x7e, 0x0a, 0x07, 0x42, 0x6d, 0x63, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x05, 0x62, 0x6d, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x04, 0x62, 0x6d, + 0x49, 0x70, 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, + 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, + 0x0b, 0x62, 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, - 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x6d, 0x5f, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0a, 0x62, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, - 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, 0x73, - 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, - 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, - 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, - 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x68, 0x6f, 0x73, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, - 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x09, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, - 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xae, 0x02, - 0x0a, 0x2a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x09, - 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x2d, - 0x0a, 0x2b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5a, 0x0a, - 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, - 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, 0x46, - 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x01, - 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, - 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, 0x01, 0x0a, 0x0d, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, - 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x49, - 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, - 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, - 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x2a, 0xf3, 0x02, - 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1f, - 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x10, - 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x45, 0x44, - 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, - 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x07, - 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x21, - 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, - 0x47, 0x10, 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x12, - 0x85, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x3b, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, + 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, + 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, 0x01, 0x52, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x68, 0x6f, 0x73, + 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, - 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x12, - 0x44, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, + 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, + 0x68, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x21, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, + 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x29, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x72, 0x07, 0x10, 0x01, 0x28, 0x24, 0xb0, 0x01, + 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x0a, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x24, 0x0a, 0x22, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xae, 0x02, 0x0a, 0x2a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x27, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x28, 0x24, 0xb0, 0x01, 0x01, + 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, + 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, + 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, + 0x16, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x22, 0x2d, 0x0a, 0x2b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2a, 0x5a, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x6f, 0x64, 0x65, + 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, + 0x12, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x43, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, + 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x2a, 0xa1, + 0x01, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, + 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, + 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, + 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, + 0x10, 0x05, 0x2a, 0xf3, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, + 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, + 0x49, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, + 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1b, 0x0a, + 0x17, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, + 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x09, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, + 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, + 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x0b, 0x32, 0xe4, 0x03, 0x0a, 0x07, 0x48, 0x6f, 0x73, + 0x74, 0x6d, 0x67, 0x72, 0x12, 0x85, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, + 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, + 0x75, 0x69, 0x64, 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, + 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x75, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x6f, 0x73, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0xb4, 0x01, 0x0a, + 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, - 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, - 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x12, 0x3b, 0x2e, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, - 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x68, 0x6f, 0x73, + 0x47, 0x55, 0x49, 0x44, 0x12, 0x44, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, + 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, + 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x16, 0x5a, 0x14, 0x2e, 0x3b, - 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, + 0x79, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, + 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, + 0x49, 0x44, 0x12, 0x3b, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x42, 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3c, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x79, 0x47, 0x55, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, + 0x16, 0x5a, 0x14, 0x2e, 0x3b, 0x68, 0x6f, 0x73, 0x74, 0x6d, 0x67, 0x72, 0x5f, 0x73, 0x6f, 0x75, + 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3148,7 +3148,7 @@ var file_hostmgr_proto_hostmgr_southbound_proto_goTypes = []interface{}{ (*Config)(nil), // 12: hostmgr_southbound_proto.Config (*OsKernel)(nil), // 13: hostmgr_southbound_proto.OsKernel (*OsRelease)(nil), // 14: hostmgr_southbound_proto.OsRelease - (*DeviceInfo)(nil), // 15: hostmgr_southbound_proto.DeviceInfo + (*AmtConfigInfo)(nil), // 15: hostmgr_southbound_proto.AmtConfigInfo (*RASInfo)(nil), // 16: hostmgr_southbound_proto.RASInfo (*Storage)(nil), // 17: hostmgr_southbound_proto.Storage (*HWInfo)(nil), // 18: hostmgr_southbound_proto.HWInfo @@ -3179,12 +3179,12 @@ var file_hostmgr_proto_hostmgr_southbound_proto_depIdxs = []int32{ 11, // 3: hostmgr_southbound_proto.SystemInfo.os_info:type_name -> hostmgr_southbound_proto.OsInfo 31, // 4: hostmgr_southbound_proto.SystemInfo.bm_ctl_info:type_name -> hostmgr_southbound_proto.BmInfo 10, // 5: hostmgr_southbound_proto.SystemInfo.bios_info:type_name -> hostmgr_southbound_proto.BiosInfo - 15, // 6: hostmgr_southbound_proto.SystemInfo.device_info:type_name -> hostmgr_southbound_proto.DeviceInfo + 15, // 6: hostmgr_southbound_proto.SystemInfo.amt_info:type_name -> hostmgr_southbound_proto.AmtConfigInfo 13, // 7: hostmgr_southbound_proto.OsInfo.kernel:type_name -> hostmgr_southbound_proto.OsKernel 14, // 8: hostmgr_southbound_proto.OsInfo.release:type_name -> hostmgr_southbound_proto.OsRelease 12, // 9: hostmgr_southbound_proto.OsKernel.config:type_name -> hostmgr_southbound_proto.Config 8, // 10: hostmgr_southbound_proto.OsRelease.metadata:type_name -> hostmgr_southbound_proto.Metadata - 16, // 11: hostmgr_southbound_proto.DeviceInfo.ras_info:type_name -> hostmgr_southbound_proto.RASInfo + 16, // 11: hostmgr_southbound_proto.AmtConfigInfo.ras_info:type_name -> hostmgr_southbound_proto.RASInfo 21, // 12: hostmgr_southbound_proto.Storage.disk:type_name -> hostmgr_southbound_proto.SystemDisk 19, // 13: hostmgr_southbound_proto.HWInfo.cpu:type_name -> hostmgr_southbound_proto.SystemCPU 22, // 14: hostmgr_southbound_proto.HWInfo.gpu_deprecated:type_name -> hostmgr_southbound_proto.SystemGPU @@ -3334,7 +3334,7 @@ func file_hostmgr_proto_hostmgr_southbound_proto_init() { } } file_hostmgr_proto_hostmgr_southbound_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeviceInfo); i { + switch v := v.(*AmtConfigInfo); i { case 0: return &v.state case 1: diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go index 15333458..28f9a0a8 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.pb.validate.go @@ -489,11 +489,11 @@ func (m *SystemInfo) validate(all bool) error { } if all { - switch v := interface{}(m.GetDeviceInfo()).(type) { + switch v := interface{}(m.GetAmtInfo()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { errors = append(errors, SystemInfoValidationError{ - field: "DeviceInfo", + field: "AmtInfo", reason: "embedded message failed validation", cause: err, }) @@ -501,16 +501,16 @@ func (m *SystemInfo) validate(all bool) error { case interface{ Validate() error }: if err := v.Validate(); err != nil { errors = append(errors, SystemInfoValidationError{ - field: "DeviceInfo", + field: "AmtInfo", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetDeviceInfo()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetAmtInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SystemInfoValidationError{ - field: "DeviceInfo", + field: "AmtInfo", reason: "embedded message failed validation", cause: err, } @@ -1308,22 +1308,22 @@ var _ interface { ErrorName() string } = OsReleaseValidationError{} -// Validate checks the field values on DeviceInfo with the rules defined in the -// proto definition for this message. If any rules are violated, the first +// Validate checks the field values on AmtConfigInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the first // error encountered is returned, or nil if there are no violations. -func (m *DeviceInfo) Validate() error { +func (m *AmtConfigInfo) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on DeviceInfo with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in DeviceInfoMultiError, or +// ValidateAll checks the field values on AmtConfigInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in AmtConfigInfoMultiError, or // nil if none found. -func (m *DeviceInfo) ValidateAll() error { +func (m *AmtConfigInfo) ValidateAll() error { return m.validate(true) } -func (m *DeviceInfo) validate(all bool) error { +func (m *AmtConfigInfo) validate(all bool) error { if m == nil { return nil } @@ -1331,7 +1331,7 @@ func (m *DeviceInfo) validate(all bool) error { var errors []error if utf8.RuneCountInString(m.GetVersion()) > 128 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "Version", reason: "value length must be at most 128 runes", } @@ -1341,9 +1341,9 @@ func (m *DeviceInfo) validate(all bool) error { errors = append(errors, err) } - if utf8.RuneCountInString(m.GetHostname()) > 128 { - err := DeviceInfoValidationError{ - field: "Hostname", + if utf8.RuneCountInString(m.GetDeviceName()) > 128 { + err := AmtConfigInfoValidationError{ + field: "DeviceName", reason: "value length must be at most 128 runes", } if !all { @@ -1353,7 +1353,7 @@ func (m *DeviceInfo) validate(all bool) error { } if utf8.RuneCountInString(m.GetOperationalState()) > 128 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "OperationalState", reason: "value length must be at most 128 runes", } @@ -1364,7 +1364,7 @@ func (m *DeviceInfo) validate(all bool) error { } if utf8.RuneCountInString(m.GetBuildNumber()) > 128 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "BuildNumber", reason: "value length must be at most 128 runes", } @@ -1375,7 +1375,7 @@ func (m *DeviceInfo) validate(all bool) error { } if utf8.RuneCountInString(m.GetSku()) > 128 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "Sku", reason: "value length must be at most 128 runes", } @@ -1386,7 +1386,7 @@ func (m *DeviceInfo) validate(all bool) error { } if utf8.RuneCountInString(m.GetFeatures()) > 128 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "Features", reason: "value length must be at most 128 runes", } @@ -1397,7 +1397,7 @@ func (m *DeviceInfo) validate(all bool) error { } if len(m.GetDeviceGuid()) > 36 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "DeviceGuid", reason: "value length must be at most 36 bytes", } @@ -1408,7 +1408,7 @@ func (m *DeviceInfo) validate(all bool) error { } if utf8.RuneCountInString(m.GetControlMode()) > 128 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "ControlMode", reason: "value length must be at most 128 runes", } @@ -1419,7 +1419,7 @@ func (m *DeviceInfo) validate(all bool) error { } if utf8.RuneCountInString(m.GetDnsSuffix()) > 128 { - err := DeviceInfoValidationError{ + err := AmtConfigInfoValidationError{ field: "DnsSuffix", reason: "value length must be at most 128 runes", } @@ -1433,7 +1433,7 @@ func (m *DeviceInfo) validate(all bool) error { switch v := interface{}(m.GetRasInfo()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, DeviceInfoValidationError{ + errors = append(errors, AmtConfigInfoValidationError{ field: "RasInfo", reason: "embedded message failed validation", cause: err, @@ -1441,7 +1441,7 @@ func (m *DeviceInfo) validate(all bool) error { } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, DeviceInfoValidationError{ + errors = append(errors, AmtConfigInfoValidationError{ field: "RasInfo", reason: "embedded message failed validation", cause: err, @@ -1450,7 +1450,7 @@ func (m *DeviceInfo) validate(all bool) error { } } else if v, ok := interface{}(m.GetRasInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return DeviceInfoValidationError{ + return AmtConfigInfoValidationError{ field: "RasInfo", reason: "embedded message failed validation", cause: err, @@ -1459,18 +1459,19 @@ func (m *DeviceInfo) validate(all bool) error { } if len(errors) > 0 { - return DeviceInfoMultiError(errors) + return AmtConfigInfoMultiError(errors) } return nil } -// DeviceInfoMultiError is an error wrapping multiple validation errors -// returned by DeviceInfo.ValidateAll() if the designated constraints aren't met. -type DeviceInfoMultiError []error +// AmtConfigInfoMultiError is an error wrapping multiple validation errors +// returned by AmtConfigInfo.ValidateAll() if the designated constraints +// aren't met. +type AmtConfigInfoMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m DeviceInfoMultiError) Error() string { +func (m AmtConfigInfoMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -1479,11 +1480,11 @@ func (m DeviceInfoMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m DeviceInfoMultiError) AllErrors() []error { return m } +func (m AmtConfigInfoMultiError) AllErrors() []error { return m } -// DeviceInfoValidationError is the validation error returned by -// DeviceInfo.Validate if the designated constraints aren't met. -type DeviceInfoValidationError struct { +// AmtConfigInfoValidationError is the validation error returned by +// AmtConfigInfo.Validate if the designated constraints aren't met. +type AmtConfigInfoValidationError struct { field string reason string cause error @@ -1491,22 +1492,22 @@ type DeviceInfoValidationError struct { } // Field function returns field value. -func (e DeviceInfoValidationError) Field() string { return e.field } +func (e AmtConfigInfoValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e DeviceInfoValidationError) Reason() string { return e.reason } +func (e AmtConfigInfoValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e DeviceInfoValidationError) Cause() error { return e.cause } +func (e AmtConfigInfoValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e DeviceInfoValidationError) Key() bool { return e.key } +func (e AmtConfigInfoValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e DeviceInfoValidationError) ErrorName() string { return "DeviceInfoValidationError" } +func (e AmtConfigInfoValidationError) ErrorName() string { return "AmtConfigInfoValidationError" } // Error satisfies the builtin error interface -func (e DeviceInfoValidationError) Error() string { +func (e AmtConfigInfoValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -1518,14 +1519,14 @@ func (e DeviceInfoValidationError) Error() string { } return fmt.Sprintf( - "invalid %sDeviceInfo.%s: %s%s", + "invalid %sAmtConfigInfo.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = DeviceInfoValidationError{} +var _ error = AmtConfigInfoValidationError{} var _ interface { Field() string @@ -1533,7 +1534,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = DeviceInfoValidationError{} +} = AmtConfigInfoValidationError{} // Validate checks the field values on RASInfo with the rules defined in the // proto definition for this message. If any rules are violated, the first diff --git a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto index 743213f2..8f8eb63f 100644 --- a/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto +++ b/host/pkg/api/hostmgr/proto/hostmgr_southbound.proto @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // SPDX-License-Identifier: Apache-2.0 syntax = "proto3"; @@ -93,7 +93,7 @@ message SystemInfo { BiosInfo bios_info = 4; - DeviceInfo device_info = 5; + AmtConfigInfo amt_info = 5; } message BiosInfo { @@ -142,10 +142,10 @@ message OsRelease { repeated Metadata metadata = 3; } -message DeviceInfo { +message AmtConfigInfo { string version = 1 [(validate.rules).string = {max_len: 128}]; - string hostname = 2 [(validate.rules).string = {max_len: 128}]; + string device_name = 2 [(validate.rules).string = {max_len: 128}]; string operational_state = 3 [(validate.rules).string = {max_len: 128}]; diff --git a/host/pkg/hostmgr/grpc_server.go b/host/pkg/hostmgr/grpc_server.go index dc1cb8cb..7bb00e77 100644 --- a/host/pkg/hostmgr/grpc_server.go +++ b/host/pkg/hostmgr/grpc_server.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 @@ -143,7 +143,7 @@ func (s *server) UpdateHostSystemInfoByGUID(ctx context.Context, return nil, inv_errors.ErrorToSanitizedGrpcError(err) } - if err := updateHostdevice(ctx, tenantID, hostres, systemInfo.DeviceInfo); err != nil { + if err := updateHostamtconfig(ctx, tenantID, hostres, systemInfo.AmtInfo); err != nil { return nil, inv_errors.ErrorToSanitizedGrpcError(err) } diff --git a/host/pkg/hostmgr/grpc_server_device_test.go b/host/pkg/hostmgr/grpc_server_amt_test.go similarity index 73% rename from host/pkg/hostmgr/grpc_server_device_test.go rename to host/pkg/hostmgr/grpc_server_amt_test.go index b282b069..618128f4 100644 --- a/host/pkg/hostmgr/grpc_server_device_test.go +++ b/host/pkg/hostmgr/grpc_server_amt_test.go @@ -15,8 +15,8 @@ import ( om_status "github.com/open-edge-platform/infra-onboarding/onboarding-manager/pkg/status" ) -// Verify Add/Remove of DeviceInfo resources. -func TestHostManagerClient_AddRemoveDevice(t *testing.T) { +// Verify Add/Remove of AmtConfigInfo resources. +func TestHostManagerClient_AddRemoveAmt(t *testing.T) { dao := inv_testing.NewInvResourceDAOOrFail(t) hostInv := dao.CreateHost(t, tenant1) os := dao.CreateOs(t, tenant1) @@ -26,13 +26,13 @@ func TestHostManagerClient_AddRemoveDevice(t *testing.T) { }) testcases := map[string]struct { - in *pb.DeviceInfo + in *pb.AmtConfigInfo valid bool }{ - "GoodDevice1": { - in: &pb.DeviceInfo{ + "GoodAmt1": { + in: &pb.AmtConfigInfo{ Version: "1.2.34", - Hostname: "testhost", + DeviceName: "testhost", OperationalState: "enabled", BuildNumber: "1234", Sku: "5467", @@ -49,8 +49,8 @@ func TestHostManagerClient_AddRemoveDevice(t *testing.T) { }, valid: true, }, - "GoodDevice2": { - in: &pb.DeviceInfo{ + "GoodAmt2": { + in: &pb.AmtConfigInfo{ RasInfo: &pb.RASInfo{}, }, valid: true, @@ -61,9 +61,9 @@ func TestHostManagerClient_AddRemoveDevice(t *testing.T) { ctx, cancel := inv_testing.CreateContextWithENJWT(t, tenant1) defer cancel() - // Modify the device resources + // Modify the Amtconfig resources systemInfo1.HostGuid = hostInv.GetUuid() - systemInfo1.SystemInfo.DeviceInfo = tc.in + systemInfo1.SystemInfo.AmtInfo = tc.in _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) if err != nil { if tc.valid { @@ -82,25 +82,25 @@ func TestHostManagerClient_AddRemoveDevice(t *testing.T) { // validate with get host := GetHostbyUUID(t, hostInv.GetUuid()) require.NotNil(t, host) - invDevice := host.HostDevice - hostDevice := ConvertDeviceInfoIntoHostDevice(t, tc.in, host) - assertSameHostDevice(t, hostDevice, invDevice) + invAmtconfig := host.HostAmtconfig + hostAmtconfig := ConvertAmtConfigInfoIntoHostAmtconfig(t, tc.in, host) + assertSameHostAmtconfig(t, hostAmtconfig, invAmtconfig) - systemInfo1.SystemInfo.DeviceInfo = &pb.DeviceInfo{} + systemInfo1.SystemInfo.AmtInfo = &pb.AmtConfigInfo{} _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) require.NoError(t, err, "UpdateHostSystemInfoByGUID() failed") // validate again with get host = GetHostbyUUID(t, hostInv.GetUuid()) require.NotNil(t, host) - require.Empty(t, host.HostDevice) + require.Empty(t, host.HostAmtconfig) } }) } } -// Verify update of the DeviceInfo resources. -func TestHostManagerClient_UpdateDevice(t *testing.T) { +// Verify update of the AmtConfigInfo resources. +func TestHostManagerClient_UpdateAmt(t *testing.T) { dao := inv_testing.NewInvResourceDAOOrFail(t) hostInv := dao.CreateHost(t, tenant1) os := dao.CreateOs(t, tenant1) @@ -108,16 +108,16 @@ func TestHostManagerClient_UpdateDevice(t *testing.T) { inst.ProvisioningStatus = om_status.ProvisioningStatusDone.Status inst.ProvisioningStatusIndicator = om_status.ProvisioningStatusDone.StatusIndicator }) - t.Cleanup(func() { HardDeleteHostdeviceWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) + t.Cleanup(func() { HardDeleteHostamtconfigWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) testcases := map[string]struct { - in *pb.DeviceInfo + in *pb.AmtConfigInfo valid bool }{ - "FirstDevice": { - in: &pb.DeviceInfo{ + "FirstAmt": { + in: &pb.AmtConfigInfo{ Version: "1.2.34", - Hostname: "testhost", + DeviceName: "testhost", OperationalState: "enabled", BuildNumber: "1234", Sku: "5467", @@ -134,10 +134,10 @@ func TestHostManagerClient_UpdateDevice(t *testing.T) { }, valid: true, }, - "UpdatedDevice": { - in: &pb.DeviceInfo{ + "UpdatedAmt": { + in: &pb.AmtConfigInfo{ Version: "1.2.56", - Hostname: "testhost", + DeviceName: "testhost", OperationalState: "enabled", BuildNumber: "7890", Sku: "5467", @@ -162,7 +162,7 @@ func TestHostManagerClient_UpdateDevice(t *testing.T) { // Modify the storage resources systemInfo1.HostGuid = hostInv.GetUuid() - systemInfo1.SystemInfo.DeviceInfo = tc.in + systemInfo1.SystemInfo.AmtInfo = tc.in _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) if err != nil { if tc.valid { @@ -181,16 +181,16 @@ func TestHostManagerClient_UpdateDevice(t *testing.T) { // validate with get host := GetHostbyUUID(t, hostInv.GetUuid()) require.NotNil(t, host) - invDevice := host.HostDevice - hostDevice := ConvertDeviceInfoIntoHostDevice(t, tc.in, host) - assertSameHostDevice(t, hostDevice, invDevice) + invAmtconfig := host.HostAmtconfig + hostAmtconfig := ConvertAmtConfigInfoIntoHostAmtconfig(t, tc.in, host) + assertSameHostAmtconfig(t, hostAmtconfig, invAmtconfig) } }) } } // Verify no changes are applied. -func TestHostManagerClient_UpdateDeviceNoChanges(t *testing.T) { +func TestHostManagerClient_UpdateAmtNoChanges(t *testing.T) { dao := inv_testing.NewInvResourceDAOOrFail(t) hostInv := dao.CreateHost(t, tenant1) os := dao.CreateOs(t, tenant1) @@ -198,14 +198,14 @@ func TestHostManagerClient_UpdateDeviceNoChanges(t *testing.T) { inst.ProvisioningStatus = om_status.ProvisioningStatusDone.Status inst.ProvisioningStatusIndicator = om_status.ProvisioningStatusDone.StatusIndicator }) - t.Cleanup(func() { HardDeleteHostdeviceWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) + t.Cleanup(func() { HardDeleteHostamtconfigWithUpdateHostSystemInfo(t, tenant1, systemInfo1) }) ctx, cancel := inv_testing.CreateContextWithENJWT(t, tenant1) defer cancel() - device := &pb.DeviceInfo{ + amtconfig := &pb.AmtConfigInfo{ Version: "1.2.34", - Hostname: "testhost", + DeviceName: "testhost", OperationalState: "enabled", BuildNumber: "1234", Sku: "5467", @@ -222,7 +222,7 @@ func TestHostManagerClient_UpdateDeviceNoChanges(t *testing.T) { } systemInfo1.HostGuid = hostInv.GetUuid() - systemInfo1.SystemInfo.DeviceInfo = device + systemInfo1.SystemInfo.AmtInfo = amtconfig _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) require.NoError(t, err) _, err = HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo1) @@ -230,24 +230,24 @@ func TestHostManagerClient_UpdateDeviceNoChanges(t *testing.T) { host := GetHostbyUUID(t, hostInv.GetUuid()) require.NotNil(t, host) - invDevice := host.HostDevice - hostDevice := ConvertDeviceInfoIntoHostDevice(t, device, host) - assertSameHostDevice(t, hostDevice, invDevice) + invAmtconfig := host.HostAmtconfig + hostAmtconfig := ConvertAmtConfigInfoIntoHostAmtconfig(t, amtconfig, host) + assertSameHostAmtconfig(t, hostAmtconfig, invAmtconfig) } -func assertSameHostDevice(t *testing.T, expectedDevice, actualDevice *computev1.HostdeviceResource) { +func assertSameHostAmtconfig(t *testing.T, expectedAmtconfig, actualAmtconfig *computev1.HostamtconfigResource) { t.Helper() - // make the devices comparable - expectedDevice.ResourceId = "" - expectedDevice.Host = nil - expectedDevice.CreatedAt = "" - expectedDevice.UpdatedAt = "" - actualDevice.ResourceId = "" - actualDevice.Host = nil - actualDevice.CreatedAt = "" - actualDevice.UpdatedAt = "" - if eq, diff := inv_testing.ProtoEqualOrDiff(expectedDevice, actualDevice); !eq { - t.Errorf("HostDevice data not equal: %v", diff) + // make the amtconfigs comparable + expectedAmtconfig.ResourceId = "" + expectedAmtconfig.Host = nil + expectedAmtconfig.CreatedAt = "" + expectedAmtconfig.UpdatedAt = "" + actualAmtconfig.ResourceId = "" + actualAmtconfig.Host = nil + actualAmtconfig.CreatedAt = "" + actualAmtconfig.UpdatedAt = "" + if eq, diff := inv_testing.ProtoEqualOrDiff(expectedAmtconfig, actualAmtconfig); !eq { + t.Errorf("HostAmtconfig data not equal: %v", diff) } } diff --git a/host/pkg/hostmgr/grpc_server_test.go b/host/pkg/hostmgr/grpc_server_test.go index 25a67178..969dbc41 100644 --- a/host/pkg/hostmgr/grpc_server_test.go +++ b/host/pkg/hostmgr/grpc_server_test.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 @@ -83,7 +83,7 @@ var systemInfo1 = &pb.UpdateHostSystemInfoByGUIDRequest{ ReleaseDate: "09/30/2022", Vendor: "Dell Inc.", }, - DeviceInfo: &pb.DeviceInfo{ + AmtInfo: &pb.AmtConfigInfo{ RasInfo: &pb.RASInfo{}, }, }, diff --git a/host/pkg/hostmgr/hostmgr_utils_test.go b/host/pkg/hostmgr/hostmgr_utils_test.go index 060c8a2a..a62ca8c4 100644 --- a/host/pkg/hostmgr/hostmgr_utils_test.go +++ b/host/pkg/hostmgr/hostmgr_utils_test.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 @@ -306,14 +306,14 @@ func ConvertSystemDiskIntoHostStorages(tb testing.TB, storage *pb.Storage, return hostStorages } -// ConvertDeviceInfoIntoHostDevice is a helper function to convert deviceInfo into hostdevice resource. -func ConvertDeviceInfoIntoHostDevice(tb testing.TB, device *pb.DeviceInfo, +// ConvertAmtConfigInfoIntoHostAmtconfig is a helper function to convert amtconfigInfo into hostamtconfig resource. +func ConvertAmtConfigInfoIntoHostAmtconfig(tb testing.TB, amtconfig *pb.AmtConfigInfo, host *computev1.HostResource, -) *computev1.HostdeviceResource { +) *computev1.HostamtconfigResource { tb.Helper() - hostDevice, err := hutils.PopulateHostdeviceWithDeviceInfo(device, host) - require.NoError(tb, err, "Unable to convert hoistDevice") + hostDevice, err := hutils.PopulateHostamtconfigWithAmtConfigInfo(amtconfig, host) + require.NoError(tb, err, "Unable to convert hostAmtconfig") return hostDevice } @@ -333,10 +333,10 @@ func HardDeleteHoststoragesWithUpdateHostSystemInfo( require.NoError(tb, err, "UpdateHostSystemInfoByGuid() failed") } -// HardDeleteHostdeviceWithUpdateHostSystemInfo deletes the device info by removing the DeviceInfo -// objects from the SystemInfo. The SB does not support incremental update - original systemInfo +// HardDeleteHostamtconfigWithUpdateHostSystemInfo deletes the amtconfig info by removing the AmtConfigInfo +// from the HwInfo of the SystemInfo. The SB does not support incremental updates - original systemInfo // is requested to avoid side effects. -func HardDeleteHostdeviceWithUpdateHostSystemInfo( +func HardDeleteHostamtconfigWithUpdateHostSystemInfo( tb testing.TB, tenantID string, systemInfo *pb.UpdateHostSystemInfoByGUIDRequest, ) { tb.Helper() @@ -344,7 +344,7 @@ func HardDeleteHostdeviceWithUpdateHostSystemInfo( ctx, cancel := inv_testing.CreateContextWithENJWT(tb, tenantID) defer cancel() - systemInfo.SystemInfo.DeviceInfo = &pb.DeviceInfo{} + systemInfo.SystemInfo.AmtInfo = &pb.AmtConfigInfo{} _, err := HostManagerTestClient.UpdateHostSystemInfoByGUID(ctx, systemInfo) require.NoError(tb, err, "UpdateHostSystemInfoByGuid() failed") } diff --git a/host/pkg/hostmgr/southbound_handler.go b/host/pkg/hostmgr/southbound_handler.go index 92a474b8..44484638 100644 --- a/host/pkg/hostmgr/southbound_handler.go +++ b/host/pkg/hostmgr/southbound_handler.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 @@ -132,70 +132,70 @@ func updateHoststorage(ctx context.Context, tenantID string, hostRes *computev1. return nil } -func hostDeviceToAdd(ctx context.Context, tenantID string, hostDevice *computev1.HostdeviceResource) error { - zlog.Debug().Msgf("Add host device: tenantID=%s, hostDevice=%v", tenantID, hostDevice) - id, err := inv_mgr_cli.CreateHostdevice(ctx, invClientInstance, tenantID, hostDevice) +func hostAmtconfigToAdd(ctx context.Context, tenantID string, hostAmtconfig *computev1.HostamtconfigResource) error { + zlog.Debug().Msgf("Add host amtconfig: tenantID=%s, hostAmtconfig=%v", tenantID, hostAmtconfig) + id, err := inv_mgr_cli.CreateHostamtconfig(ctx, invClientInstance, tenantID, hostAmtconfig) if err != nil { return err } - hostDevice.ResourceId = id + hostAmtconfig.ResourceId = id return nil } -func hostDeviceToUpdate(ctx context.Context, tenantID string, hostDevice, invDevice *computev1.HostdeviceResource, +func hostAmtconfigToUpdate(ctx context.Context, tenantID string, hostAmtconfig, invDevice *computev1.HostamtconfigResource, ) error { - hostDevice.ResourceId = invDevice.GetResourceId() - if !hmgr_util.ProtoEqualSubset(hostDevice, invDevice, inv_mgr_cli.UpdateHostdeviceFieldMask...) { - zlog.Debug().Msgf("Update host device: tenantID=%s, hostDevice=%v", tenantID, hostDevice) - if err := inv_mgr_cli.UpdateHostdevice(ctx, invClientInstance, tenantID, hostDevice); err != nil { + hostAmtconfig.ResourceId = invDevice.GetResourceId() + if !hmgr_util.ProtoEqualSubset(hostAmtconfig, invDevice, inv_mgr_cli.UpdateHostamtconfigFieldMask...) { + zlog.Debug().Msgf("Update host amtconfig: tenantID=%s, hostAmtconfig=%v", tenantID, hostAmtconfig) + if err := inv_mgr_cli.UpdateHostamtconfig(ctx, invClientInstance, tenantID, hostAmtconfig); err != nil { return err } } else { - zlog.Debug().Msgf("Skip hostDevice update: tenantID=%s, hostDevice=%v", tenantID, hostDevice) + zlog.Debug().Msgf("Skip hostAmtconfig update: tenantID=%s, hostAmtconfig=%v", tenantID, hostAmtconfig) } return nil } -func hostDeviceToDelete(ctx context.Context, tenantID string, invDevice *computev1.HostdeviceResource) error { - zlog.Debug().Msgf("Delete host device: tenantID=%s, hostDevice=%v", tenantID, invDevice) - err := inv_mgr_cli.DeleteHostdevice(ctx, invClientInstance, tenantID, invDevice.GetResourceId()) +func hostAmtconfigToDelete(ctx context.Context, tenantID string, invDevice *computev1.HostamtconfigResource) error { + zlog.Debug().Msgf("Delete host amtconfig: tenantID=%s, hostAmtconfig=%v", tenantID, invDevice) + err := inv_mgr_cli.DeleteHostamtconfig(ctx, invClientInstance, tenantID, invDevice.GetResourceId()) if err != nil { return err } return nil } -// This function updates Host device resources in Inventory if needed. -func updateHostdevice(ctx context.Context, tenantID string, hostRes *computev1.HostResource, deviceInfo *pb.DeviceInfo, +// This function updates Host amtconfig resources in Inventory if needed. +func updateHostamtconfig(ctx context.Context, tenantID string, hostRes *computev1.HostResource, amtconfigInfo *pb.AmtConfigInfo, ) error { - // Devices are always eager loaded. No need to query Inventory again - invDevice := hostRes.GetHostDevice() + // Amconfigs are always eager loaded. No need to query Inventory again + invAmtconfig := hostRes.GetHostAmtconfig() - zlog.Debug().Msgf("Update host device: tenantID=%s, Inventory Device Info=%v, reported device info=%v", - tenantID, invDevice, deviceInfo) + zlog.Debug().Msgf("Update host amtconfig: tenantID=%s, Inventory Amtconfig Info=%v, reported amtconfig info=%v", + tenantID, invAmtconfig, amtconfigInfo) - hostDevice, err := hmgr_util.PopulateHostdeviceWithDeviceInfo(deviceInfo, hostRes) + hostAmtconfig, err := hmgr_util.PopulateHostamtconfigWithAmtConfigInfo(amtconfigInfo, hostRes) if err != nil { return err } - if invDevice.GetResourceId() == "" { - if deviceInfo.GetRasInfo() != nil { - err = hostDeviceToAdd(ctx, tenantID, hostDevice) + if invAmtconfig.GetResourceId() == "" { + if amtconfigInfo.GetRasInfo() != nil { + err = hostAmtconfigToAdd(ctx, tenantID, hostAmtconfig) if err != nil { return err } } } else { - if deviceInfo.GetRasInfo() != nil { - if invDevice.GetVersion() != hostDevice.GetVersion() { - err = hostDeviceToUpdate(ctx, tenantID, hostDevice, invDevice) + if amtconfigInfo.GetRasInfo() != nil { + if invAmtconfig.GetVersion() != hostAmtconfig.GetVersion() { + err = hostAmtconfigToUpdate(ctx, tenantID, hostAmtconfig, invAmtconfig) if err != nil { return err } } } else { - err = hostDeviceToDelete(ctx, tenantID, invDevice) + err = hostAmtconfigToDelete(ctx, tenantID, invAmtconfig) if err != nil { return err } diff --git a/host/pkg/invclient/common.go b/host/pkg/invclient/common.go index c358265b..47100eb1 100644 --- a/host/pkg/invclient/common.go +++ b/host/pkg/invclient/common.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 @@ -52,9 +52,9 @@ func getInventoryResourceAndID(resource proto.Message) (*inv_v1.Resource, string Hostgpu: res, } invResourceID = res.GetResourceId() - case *computev1.HostdeviceResource: - invResource.Resource = &inv_v1.Resource_HostDevice{ - HostDevice: res, + case *computev1.HostamtconfigResource: + invResource.Resource = &inv_v1.Resource_HostAmtconfig{ + HostAmtconfig: res, } invResourceID = res.GetResourceId() case *network_v1.IPAddressResource: diff --git a/host/pkg/invclient/invclient.go b/host/pkg/invclient/invclient.go index 8dacba76..c6c320bb 100644 --- a/host/pkg/invclient/invclient.go +++ b/host/pkg/invclient/invclient.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 @@ -111,20 +111,20 @@ var ( computev1.HostgpuResourceFieldDeviceName, computev1.HostgpuResourceFieldFeatures, } - UpdateHostdeviceFieldMask = []string{ - computev1.HostdeviceResourceFieldVersion, - computev1.HostdeviceResourceFieldDeviceName, - computev1.HostdeviceResourceFieldOperationalState, - computev1.HostdeviceResourceFieldBuildNumber, - computev1.HostdeviceResourceFieldSku, - computev1.HostdeviceResourceFieldFeatures, - computev1.HostdeviceResourceFieldDeviceGuid, - computev1.HostdeviceResourceFieldControlMode, - computev1.HostdeviceResourceFieldDnsSuffix, - computev1.HostdeviceResourceFieldNetworkStatus, - computev1.HostdeviceResourceFieldRemoteStatus, - computev1.HostdeviceResourceFieldRemoteTrigger, - computev1.HostdeviceResourceFieldMpsHostname, + UpdateHostamtconfigFieldMask = []string{ + computev1.HostamtconfigResourceFieldVersion, + computev1.HostamtconfigResourceFieldDeviceName, + computev1.HostamtconfigResourceFieldOperationalState, + computev1.HostamtconfigResourceFieldBuildNumber, + computev1.HostamtconfigResourceFieldSku, + computev1.HostamtconfigResourceFieldFeatures, + computev1.HostamtconfigResourceFieldDeviceGuid, + computev1.HostamtconfigResourceFieldControlMode, + computev1.HostamtconfigResourceFieldDnsSuffix, + computev1.HostamtconfigResourceFieldNetworkStatus, + computev1.HostamtconfigResourceFieldRemoteStatus, + computev1.HostamtconfigResourceFieldRemoteTrigger, + computev1.HostamtconfigResourceFieldMpsHostname, } ) @@ -590,64 +590,64 @@ func DeleteIPAddress(ctx context.Context, c inv_client.TenantAwareInventoryClien return err } -// CreateHostdevice creates a new Hostdevice resource in Inventory. +// CreateHostamtconfig creates a new Hostamtconfig resource in Inventory. // //nolint:dupl // Protobuf oneOf-driven separation -func CreateHostdevice( - ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID string, hostDevice *computev1.HostdeviceResource, +func CreateHostamtconfig( + ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID string, hostAmtconfig *computev1.HostamtconfigResource, ) (string, error) { - details := fmt.Sprintf("tenantID=%s, hostDevice=%v", tenantID, hostDevice) - zlog.Debug().Msgf("Create Hostdevice: %s", details) + details := fmt.Sprintf("tenantID=%s, hostAmtconfig=%v", tenantID, hostAmtconfig) + zlog.Debug().Msgf("Create Hostamtconfig: %s", details) ctx, cancel := context.WithTimeout(ctx, *InventoryTimeout) defer cancel() resource := &inv_v1.Resource{ - Resource: &inv_v1.Resource_HostDevice{ - HostDevice: hostDevice, + Resource: &inv_v1.Resource_HostAmtconfig{ + HostAmtconfig: hostAmtconfig, }, } resp, err := c.Create(ctx, tenantID, resource) if err != nil { - zlog.InfraSec().InfraErr(err).Msgf("Failed create Hostdevice resource: %s", details) + zlog.InfraSec().InfraErr(err).Msgf("Failed create Hostamtconfig resource: %s", details) return "", err } return inv_util.GetResourceIDFromResource(resp) } -// UpdateHostdevice updates an existing Hostdevice resource info in Inventory, +// UpdateHostamtconfig updates an existing Hostamtconfig resource info in Inventory, // except state and other fields are not allowed from RM. -func UpdateHostdevice(ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID string, - hostDevice *computev1.HostdeviceResource, +func UpdateHostamtconfig(ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID string, + hostAmtconfig *computev1.HostamtconfigResource, ) error { - details := fmt.Sprintf("tenantID=%s, hostDevice=%v", tenantID, hostDevice) - zlog.Debug().Msgf("Update Hostdevice: %s", hostDevice) + details := fmt.Sprintf("tenantID=%s, hostAmtconfig=%v", tenantID, hostAmtconfig) + zlog.Debug().Msgf("Update Hostamtconfig: %s", hostAmtconfig) - err := UpdateInvResourceFields(ctx, c, tenantID, hostDevice, UpdateHostdeviceFieldMask) + err := UpdateInvResourceFields(ctx, c, tenantID, hostAmtconfig, UpdateHostamtconfigFieldMask) if err != nil { - zlog.InfraSec().InfraErr(err).Msgf("Failed update Hostdevice resource: %s", details) + zlog.InfraSec().InfraErr(err).Msgf("Failed update Hostamtconfig resource: %s", details) return err } return nil } -// DeleteHostdevice deletes an existing hostdevice resource in Inventory. If it gets a not found error while deleting the +// DeleteHostamtconfig deletes an existing hostamtconfig resource in Inventory. If it gets a not found error while deleting the // resource, it doesn't return an error. // //nolint:dupl // Protobuf oneOf-driven separation -func DeleteHostdevice(ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID, resourceID string) error { +func DeleteHostamtconfig(ctx context.Context, c inv_client.TenantAwareInventoryClient, tenantID, resourceID string) error { details := fmt.Sprintf("tenantID=%s, resourceID=%s", tenantID, resourceID) - zlog.Debug().Msgf("Delete Hostdevice: %s", details) + zlog.Debug().Msgf("Delete Hostamtconfig: %s", details) ctx, cancel := context.WithTimeout(ctx, *InventoryTimeout) defer cancel() _, err := c.Delete(ctx, tenantID, resourceID) if inv_errors.IsNotFound(err) { - zlog.Debug().Msgf("Not found while Hostdevice delete, dropping err: %s", details) + zlog.Debug().Msgf("Not found while Hostamtconfig delete, dropping err: %s", details) return nil } if err != nil { - zlog.InfraSec().InfraErr(err).Msgf("Failed delete Hostdevice resource: %s", details) + zlog.InfraSec().InfraErr(err).Msgf("Failed delete Hostamtconfig resource: %s", details) return err } diff --git a/host/pkg/invclient/invclient_test.go b/host/pkg/invclient/invclient_test.go index ae23a9ad..8440a429 100644 --- a/host/pkg/invclient/invclient_test.go +++ b/host/pkg/invclient/invclient_test.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // SPDX-License-Identifier: Apache-2.0 package invclient_test @@ -383,13 +383,13 @@ func TestInvClient_SetHostAsConnectionLost(t *testing.T) { assertHostStatus(host.GetResourceId(), hrm_status.HostStatusNoConnection) } -func TestInvClient_CreateHostdevice(t *testing.T) { +func TestInvClient_CreateHostamtconfig(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() client := inv_testing.TestClients[inv_testing.RMClient].GetTenantAwareInventoryClient() dao := inv_testing.NewInvResourceDAOOrFail(t) - id, err := invclient.CreateHostdevice(ctx, client, tenant1, &computev1.HostdeviceResource{}) + id, err := invclient.CreateHostamtconfig(ctx, client, tenant1, &computev1.HostamtconfigResource{}) require.Error(t, err) assert.Equal(t, codes.InvalidArgument, grpc_status.Code(err)) assert.Empty(t, id) @@ -397,21 +397,21 @@ func TestInvClient_CreateHostdevice(t *testing.T) { host := dao.CreateHost(t, tenant1) // Create with resourceId is not allowed - device := &computev1.HostdeviceResource{ + amtconfig := &computev1.HostamtconfigResource{ TenantId: tenant1, Version: "1.2.34", DeviceName: "testhost", BuildNumber: "1234", DeviceGuid: "1234abcd-ef56-7890-12ab-34567890cdef", Host: host, - ResourceId: "hostdevice-12345678", + ResourceId: "hostamtconfig-12345678", } - id, err = invclient.CreateHostdevice(ctx, client, tenant1, device) + id, err = invclient.CreateHostamtconfig(ctx, client, tenant1, amtconfig) require.Error(t, err) require.Equal(t, "", id) // OK - device = &computev1.HostdeviceResource{ + amtconfig = &computev1.HostamtconfigResource{ TenantId: tenant1, Version: "1.2.34", DeviceName: "testhost", @@ -420,25 +420,25 @@ func TestInvClient_CreateHostdevice(t *testing.T) { Host: host, OperationalState: "enabled", } - id, err = invclient.CreateHostdevice(ctx, client, tenant1, device) + id, err = invclient.CreateHostamtconfig(ctx, client, tenant1, amtconfig) require.NoError(t, err) require.NotEqual(t, "", id) t.Cleanup(func() { dao.DeleteResource(t, tenant1, id) }) } -func TestInvClient_UpdateHostdevice(t *testing.T) { +func TestInvClient_UpdateHostamtconfig(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() client := inv_testing.TestClients[inv_testing.RMClient].GetTenantAwareInventoryClient() dao := inv_testing.NewInvResourceDAOOrFail(t) // Error - err := invclient.UpdateHostdevice(ctx, client, tenant1, &computev1.HostdeviceResource{}) + err := invclient.UpdateHostamtconfig(ctx, client, tenant1, &computev1.HostamtconfigResource{}) require.Error(t, err) // OK host := dao.CreateHost(t, tenant1) - device := &computev1.HostdeviceResource{ + amtconfig := &computev1.HostamtconfigResource{ TenantId: tenant1, Version: "1.2.34", DeviceName: "testhost", @@ -447,31 +447,31 @@ func TestInvClient_UpdateHostdevice(t *testing.T) { Host: host, OperationalState: "enabled", } - id, err := invclient.CreateHostdevice(ctx, client, tenant1, device) + id, err := invclient.CreateHostamtconfig(ctx, client, tenant1, amtconfig) require.NoError(t, err) require.NotEqual(t, "", id) t.Cleanup(func() { dao.DeleteResource(t, tenant1, id) }) - device.Version = "1.3.45" - device.OperationalState = "disabled" - device.ResourceId = id - err = invclient.UpdateHostdevice(ctx, client, tenant1, device) + amtconfig.Version = "1.3.45" + amtconfig.OperationalState = "disabled" + amtconfig.ResourceId = id + err = invclient.UpdateHostamtconfig(ctx, client, tenant1, amtconfig) require.NoError(t, err) } -func TestInvClient_DeleteHostdevice(t *testing.T) { +func TestInvClient_DeleteHostamtconfig(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() client := inv_testing.TestClients[inv_testing.RMClient].GetTenantAwareInventoryClient() dao := inv_testing.NewInvResourceDAOOrFail(t) // Not found, does not return an error - err := invclient.DeleteHostdevice(ctx, client, tenant1, "hostdevice-12345678") + err := invclient.DeleteHostamtconfig(ctx, client, tenant1, "hostamtconfig-12345678") require.NoError(t, err) // OK host := dao.CreateHost(t, tenant1) - device := &computev1.HostdeviceResource{ + amtconfig := &computev1.HostamtconfigResource{ TenantId: tenant1, Version: "1.2.34", DeviceName: "testhost", @@ -480,10 +480,10 @@ func TestInvClient_DeleteHostdevice(t *testing.T) { Host: host, OperationalState: "enabled", } - id, err := invclient.CreateHostdevice(ctx, client, tenant1, device) + id, err := invclient.CreateHostamtconfig(ctx, client, tenant1, amtconfig) require.NoError(t, err) require.NotEqual(t, "", id) - err = invclient.DeleteHostdevice(ctx, client, tenant1, id) + err = invclient.DeleteHostamtconfig(ctx, client, tenant1, id) require.NoError(t, err) } diff --git a/host/pkg/utils/utils.go b/host/pkg/utils/utils.go index 714f94b3..a77e7967 100644 --- a/host/pkg/utils/utils.go +++ b/host/pkg/utils/utils.go @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: (C) 2025 Intel Corporation +// SPDX-FileCopyrightText: (C) 2026 Intel Corporation // SPDX-License-Identifier: Apache-2.0 // Package util provides utility functions for host management. @@ -286,33 +286,33 @@ func PopulateHoststorageWithDiskInfo(disk *pb.SystemDisk, hostres *computev1.Hos return storageres, nil } -// PopulateHostdeviceWithDeviceInfo translates a DeviceInfo into a host device resource. -func PopulateHostdeviceWithDeviceInfo(device *pb.DeviceInfo, hostres *computev1.HostResource) ( - *computev1.HostdeviceResource, error, +// PopulateHostamtconfigWithAmtConfigInfo translates a AmtConfigInfo into a host deamtconfigvice resource. +func PopulateHostamtconfigWithAmtConfigInfo(amtconfig *pb.AmtConfigInfo, hostres *computev1.HostResource) ( + *computev1.HostamtconfigResource, error, ) { if hostres == nil { zlog.InfraSec().InfraError("HostResource cannot be nil").Msgf("") return nil, errors.Errorfc(codes.InvalidArgument, "HostResource cannot be nil") } - rasInfo := device.GetRasInfo() - deviceres := &computev1.HostdeviceResource{ + rasInfo := amtconfig.GetRasInfo() + amtconfigres := &computev1.HostamtconfigResource{ TenantId: hostres.GetTenantId(), - Version: device.GetVersion(), - DeviceName: device.GetHostname(), - OperationalState: device.GetOperationalState(), - BuildNumber: device.GetHostname(), - Sku: device.GetSku(), - Features: device.GetFeatures(), - DeviceGuid: device.GetDeviceGuid(), - ControlMode: device.GetControlMode(), - DnsSuffix: device.GetDnsSuffix(), + Version: amtconfig.GetVersion(), + DeviceName: amtconfig.GetDeviceName(), + OperationalState: amtconfig.GetOperationalState(), + BuildNumber: amtconfig.GetBuildNumber(), + Sku: amtconfig.GetSku(), + Features: amtconfig.GetFeatures(), + DeviceGuid: amtconfig.GetDeviceGuid(), + ControlMode: amtconfig.GetControlMode(), + DnsSuffix: amtconfig.GetDnsSuffix(), NetworkStatus: rasInfo.GetNetworkStatus(), RemoteStatus: rasInfo.GetRemoteStatus(), RemoteTrigger: rasInfo.GetRemoteTrigger(), MpsHostname: rasInfo.GetMpsHostname(), Host: hostres, } - return deviceres, nil + return amtconfigres, nil } func linkStateToNetworkInterfaceLinkState(linkState bool) computev1.NetworkInterfaceLinkState {