From 10143b0f2bcb80fb14a537643e2a75299c29b7fa Mon Sep 17 00:00:00 2001 From: Naiming Shen Date: Thu, 26 Oct 2023 15:48:04 -0700 Subject: [PATCH 1/2] edgeview app commands needs latest pillar underlay name change Signed-off-by: Naiming Shen --- pkg/edgeview/go.mod | 4 ++-- pkg/edgeview/go.sum | 6 ++++++ pkg/edgeview/src/basics.go | 3 +++ pkg/edgeview/src/network.go | 4 ++-- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pkg/edgeview/go.mod b/pkg/edgeview/go.mod index 154d13a811..bd60eceee8 100644 --- a/pkg/edgeview/go.mod +++ b/pkg/edgeview/go.mod @@ -5,8 +5,8 @@ go 1.20 require ( github.com/gorilla/websocket v1.4.2 github.com/grandcat/zeroconf v1.0.0 - github.com/lf-edge/eve-api/go v0.0.0-20230727134029-123abaf9479d - github.com/lf-edge/eve/pkg/pillar v0.0.0-20230727061425-295cf5137a5c + github.com/lf-edge/eve-api/go v0.0.0-20231011200019-cb3cb1275e0d + github.com/lf-edge/eve/pkg/pillar v0.0.0-20231025120317-b25d016a16bb github.com/satori/go.uuid v1.2.1-0.20180404165556-75cca531ea76 github.com/shirou/gopsutil v3.21.11+incompatible github.com/sirupsen/logrus v1.9.0 diff --git a/pkg/edgeview/go.sum b/pkg/edgeview/go.sum index 26c8040528..592cbd43ac 100644 --- a/pkg/edgeview/go.sum +++ b/pkg/edgeview/go.sum @@ -524,8 +524,14 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lf-edge/eve-api/go v0.0.0-20230727134029-123abaf9479d h1:faYpmFF68poaWd6x7jeus1fR0RSeT1FbecIaZlv6rvQ= github.com/lf-edge/eve-api/go v0.0.0-20230727134029-123abaf9479d/go.mod h1:6XqpOM8p1HsluNIGw2ihYPYsaAisQ5CuJpbIKHXQo5w= +github.com/lf-edge/eve-api/go v0.0.0-20231011200019-cb3cb1275e0d h1:PVKqYtPsH5BAIYfOaKej/+lc7+GKcFZBGnzbS6JWbrE= +github.com/lf-edge/eve-api/go v0.0.0-20231011200019-cb3cb1275e0d/go.mod h1:6XqpOM8p1HsluNIGw2ihYPYsaAisQ5CuJpbIKHXQo5w= github.com/lf-edge/eve/pkg/pillar v0.0.0-20230727061425-295cf5137a5c h1:zTBHaGVLcIUNV0dh9NzEtkYOMzYtZaumvMptFZRrxiU= github.com/lf-edge/eve/pkg/pillar v0.0.0-20230727061425-295cf5137a5c/go.mod h1:+FNnWXal1oxTF8xkhjyVIcSzvpXNCe2+7LXwMrNQP2E= +github.com/lf-edge/eve/pkg/pillar v0.0.0-20231016212340-616d6ea705a2 h1:oc1TSQe1Ke5st2HUZHWs4p8sS18g11yQlNSvxFPRgWA= +github.com/lf-edge/eve/pkg/pillar v0.0.0-20231016212340-616d6ea705a2/go.mod h1:YuUrK7yQdrSGH3D7auTDYNRgcBGBKGzbcVL5mY4IzrY= +github.com/lf-edge/eve/pkg/pillar v0.0.0-20231025120317-b25d016a16bb h1:pbvujlQLA66epNvCGgf4eRSdUTKvYPwU7fzOAltP/9o= +github.com/lf-edge/eve/pkg/pillar v0.0.0-20231025120317-b25d016a16bb/go.mod h1:YuUrK7yQdrSGH3D7auTDYNRgcBGBKGzbcVL5mY4IzrY= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= diff --git a/pkg/edgeview/src/basics.go b/pkg/edgeview/src/basics.go index c19c5e1bcc..1f6706d5fb 100644 --- a/pkg/edgeview/src/basics.go +++ b/pkg/edgeview/src/basics.go @@ -232,6 +232,9 @@ func getAddrFromJWT(token string, isServer bool, instID int) (string, string, er if runOnServer { return addrport, path, fmt.Errorf("Edgeview is not in multi-instance mode, no need to specify inst-ID") } else { + if instID > 1 { + return addrport, path, fmt.Errorf("Maximum instance is 1, can not use inst %d", instID) + } fmt.Printf("%s\n", getColorStr("Edgeview is not in multi-instance mode, instance ignored here", colorCYAN)) edgeviewInstID = 0 } diff --git a/pkg/edgeview/src/network.go b/pkg/edgeview/src/network.go index 2302e31658..e014f3c2f4 100644 --- a/pkg/edgeview/src/network.go +++ b/pkg/edgeview/src/network.go @@ -166,7 +166,7 @@ func doAppNet(status, appstr string, isSummary bool) string { _ = json.Unmarshal(retbytes, &deviceNetStatus) } - for _, item := range appStatus.UnderlayNetworkList { + for _, item := range appStatus.AppNetAdapterList { niUUID := item.Network.String() // Try to obtain network instance status data. var niStatus types.NetworkInstanceStatus @@ -526,7 +526,7 @@ func getAppIPs(status string) ([]string, uuid.UUID) { _ = json.Unmarshal([]byte(status), &appStatus) var appIPs []string appUUID := appStatus.UUIDandVersion.UUID - for _, item := range appStatus.UnderlayNetworkList { + for _, item := range appStatus.AppNetAdapterList { if item.AllocatedIPv4Addr != nil { appIPs = append(appIPs, item.AllocatedIPv4Addr.String()) } From a0c645b74c7a6e78bd41ceee9610b706897891bb Mon Sep 17 00:00:00 2001 From: Naiming Shen Date: Thu, 26 Oct 2023 15:48:38 -0700 Subject: [PATCH 2/2] generated files for edgeview app commands needs latest pillar underlay name change Signed-off-by: Naiming Shen --- .../lf-edge/eve-api/go/auth/auth.pb.go | 111 +- .../lf-edge/eve-api/go/certs/certs.pb.go | 2 +- .../lf-edge/eve-api/go/config/appconfig.pb.go | 294 +- .../eve-api/go/config/baseosconfig.pb.go | 2 +- .../go/config/compound_devconfig.pb.go | 303 + .../lf-edge/eve-api/go/config/devcommon.pb.go | 2 +- .../lf-edge/eve-api/go/config/devconfig.pb.go | 406 +- .../lf-edge/eve-api/go/config/devmodel.pb.go | 2 +- .../lf-edge/eve-api/go/config/edgeview.pb.go | 2 +- .../lf-edge/eve-api/go/config/fw.pb.go | 2 +- .../lf-edge/eve-api/go/config/netcmn.pb.go | 2 +- .../lf-edge/eve-api/go/config/netconfig.pb.go | 309 +- .../lf-edge/eve-api/go/config/netinst.pb.go | 2 +- .../eve-api/go/config/patch_envelope.pb.go | 542 +- .../lf-edge/eve-api/go/config/storage.pb.go | 457 +- .../lf-edge/eve-api/go/config/vm.pb.go | 2 +- .../{config => evecommon}/acipherinfo.pb.go | 267 +- .../eve-api/go/evecommon/devmodelcommon.pb.go | 2 +- .../eve-api/go/evecommon/evecommon.pb.go | 2 +- .../lf-edge/eve-api/go/info/info.pb.go | 1955 ++--- .../eve-api/go/info/patch_envelope.pb.go | 409 +- .../lf-edge/eve-api/go/logs/log.pb.go | 2 +- .../lf-edge/eve-api/go/metrics/metrics.pb.go | 6285 +++++++++++++++++ .../eve-api/go/profile/local_profile.pb.go | 1256 ++++ .../eve/pkg/pillar/base/execwrapper.go | 102 +- .../eve/pkg/pillar/base/logobjecttypes.go | 4 + .../eve/pkg/pillar/pubsub/pubsubintf.go | 5 + .../pkg/pillar/pubsub/socketdriver/driver.go | 18 +- .../lf-edge/eve/pkg/pillar/pubsub/util.go | 9 + .../eve/pkg/pillar/types/attesttypes.go | 42 + .../eve/pkg/pillar/types/cachedresolvedip.go | 79 + .../eve/pkg/pillar/types/cipherinfotypes.go | 17 +- .../lf-edge/eve/pkg/pillar/types/conntest.go | 115 + .../lf-edge/eve/pkg/pillar/types/dns.go | 807 +++ .../lf-edge/eve/pkg/pillar/types/dpc.go | 1023 +++ .../lf-edge/eve/pkg/pillar/types/eidtypes.go | 80 - .../lf-edge/eve/pkg/pillar/types/errors.go | 28 + .../lf-edge/eve/pkg/pillar/types/global.go | 12 +- .../eve/pkg/pillar/types/globalconfigold.go | 13 - .../eve/pkg/pillar/types/locationconsts.go | 14 +- .../eve/pkg/pillar/types/onboardingtypes.go | 54 +- .../pkg/pillar/types/patchenvelopestypes.go | 150 + .../eve/pkg/pillar/types/volumetypes.go | 15 +- .../lf-edge/eve/pkg/pillar/types/wwan.go | 674 ++ .../eve/pkg/pillar/types/zedagenttypes.go | 55 +- .../eve/pkg/pillar/types/zedmanagertypes.go | 63 +- .../eve/pkg/pillar/types/zedroutertypes.go | 2770 +------- .../eve/pkg/pillar/utils/generics/generics.go | 171 + .../eve/pkg/pillar/utils/netutils/ip.go | 81 + pkg/edgeview/vendor/modules.txt | 8 +- 50 files changed, 13878 insertions(+), 5149 deletions(-) create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/compound_devconfig.pb.go rename pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/{config => evecommon}/acipherinfo.pb.go (51%) create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/profile/local_profile.pb.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cachedresolvedip.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/conntest.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dns.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dpc.go delete mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/eidtypes.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/errors.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/patchenvelopestypes.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/wwan.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/generics/generics.go create mode 100644 pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/netutils/ip.go diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/auth/auth.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/auth/auth.pb.go index 5b9ce770e0..b34bb0b758 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/auth/auth.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/auth/auth.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: auth/auth.proto @@ -71,6 +71,12 @@ func (x *AuthBody) GetPayload() []byte { return nil } +// Envolope which can be signed OR signed and encrypted. If `cipherContext` and +// `cipherData` are defined and valid, then auth body has to be decrypted first +// by using the encrypted payload defined in the `cipherData.cipherData` member. +// Once the `cipherBlock` is decrypted, the actual result of the decryption is +// fed into the authentication as if it had been in `protectedPayload` (AuthBody +// type). type AuthContainer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -79,11 +85,13 @@ type AuthContainer struct { ProtectedPayload *AuthBody `protobuf:"bytes,1,opt,name=protectedPayload,proto3" json:"protectedPayload,omitempty"` // envelope body, a marshalled protobuf data or it can be null // if the length of senderCertHash received is not N bytes, as described in hashAlgorithm, then the protobuf // message either is not AuthContainer type, or is corrupted. Otherwise, the - // receiver may not have the sender's signing certificate - Algo evecommon.HashAlgorithm `protobuf:"varint,2,opt,name=algo,proto3,enum=org.lfedge.eve.common.HashAlgorithm" json:"algo,omitempty"` // hash algorithm used by sender Cert - SenderCertHash []byte `protobuf:"bytes,3,opt,name=senderCertHash,proto3" json:"senderCertHash,omitempty"` // N bytes in length, 1st N bytes of sender siging cert sha256 hash - SignatureHash []byte `protobuf:"bytes,4,opt,name=signatureHash,proto3" json:"signatureHash,omitempty"` // signature of the sha256 hash of the payload - SenderCert []byte `protobuf:"bytes,5,opt,name=senderCert,proto3" json:"senderCert,omitempty"` // full senderCert needed for some payloads + // receiver may not have the sender's signing certificate. + Algo evecommon.HashAlgorithm `protobuf:"varint,2,opt,name=algo,proto3,enum=org.lfedge.eve.common.HashAlgorithm" json:"algo,omitempty"` // hash algorithm used by sender Cert + SenderCertHash []byte `protobuf:"bytes,3,opt,name=senderCertHash,proto3" json:"senderCertHash,omitempty"` // N bytes in length, 1st N bytes of sender siging cert sha256 hash + SignatureHash []byte `protobuf:"bytes,4,opt,name=signatureHash,proto3" json:"signatureHash,omitempty"` // signature of the sha256 hash of the payload + SenderCert []byte `protobuf:"bytes,5,opt,name=senderCert,proto3" json:"senderCert,omitempty"` // full senderCert needed for some payloads + CipherContext *evecommon.CipherContext `protobuf:"bytes,6,opt,name=cipherContext,proto3" json:"cipherContext,omitempty"` // context for decrypting payload if defined + CipherData *evecommon.CipherBlock `protobuf:"bytes,7,opt,name=cipherData,proto3" json:"cipherData,omitempty"` // encrypted payload if defined } func (x *AuthContainer) Reset() { @@ -153,6 +161,20 @@ func (x *AuthContainer) GetSenderCert() []byte { return nil } +func (x *AuthContainer) GetCipherContext() *evecommon.CipherContext { + if x != nil { + return x.CipherContext + } + return nil +} + +func (x *AuthContainer) GetCipherData() *evecommon.CipherBlock { + if x != nil { + return x.CipherData + } + return nil +} + var File_auth_auth_proto protoreflect.FileDescriptor var file_auth_auth_proto_rawDesc = []byte{ @@ -160,29 +182,40 @@ var file_auth_auth_proto_rawDesc = []byte{ 0x6f, 0x12, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x1a, 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x24, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x82, 0x02, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x49, 0x0a, 0x10, 0x70, 0x72, 0x6f, - 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x42, 0x6f, - 0x64, 0x79, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x38, 0x0a, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x41, - 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x12, 0x26, - 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x65, - 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x42, 0x39, 0x0a, 0x13, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, - 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x1a, 0x1b, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x63, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, + 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x92, 0x03, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x49, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x52, + 0x10, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x38, 0x0a, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x41, 0x6c, 0x67, 0x6f, + 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x12, 0x26, 0x0a, 0x0e, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x12, 0x4a, 0x0a, 0x0d, 0x63, 0x69, 0x70, + 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0d, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, + 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x42, 0x39, 0x0a, 0x13, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, + 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -199,18 +232,22 @@ func file_auth_auth_proto_rawDescGZIP() []byte { var file_auth_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_auth_auth_proto_goTypes = []interface{}{ - (*AuthBody)(nil), // 0: org.lfedge.eve.auth.AuthBody - (*AuthContainer)(nil), // 1: org.lfedge.eve.auth.AuthContainer - (evecommon.HashAlgorithm)(0), // 2: org.lfedge.eve.common.HashAlgorithm + (*AuthBody)(nil), // 0: org.lfedge.eve.auth.AuthBody + (*AuthContainer)(nil), // 1: org.lfedge.eve.auth.AuthContainer + (evecommon.HashAlgorithm)(0), // 2: org.lfedge.eve.common.HashAlgorithm + (*evecommon.CipherContext)(nil), // 3: org.lfedge.eve.common.CipherContext + (*evecommon.CipherBlock)(nil), // 4: org.lfedge.eve.common.CipherBlock } var file_auth_auth_proto_depIdxs = []int32{ 0, // 0: org.lfedge.eve.auth.AuthContainer.protectedPayload:type_name -> org.lfedge.eve.auth.AuthBody 2, // 1: org.lfedge.eve.auth.AuthContainer.algo:type_name -> org.lfedge.eve.common.HashAlgorithm - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 3, // 2: org.lfedge.eve.auth.AuthContainer.cipherContext:type_name -> org.lfedge.eve.common.CipherContext + 4, // 3: org.lfedge.eve.auth.AuthContainer.cipherData:type_name -> org.lfedge.eve.common.CipherBlock + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_auth_auth_proto_init() } diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/certs/certs.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/certs/certs.pb.go index c37352124b..a446919aef 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/certs/certs.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/certs/certs.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: certs/certs.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/appconfig.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/appconfig.pb.go index 53c9e99cc9..0ccb9f4a61 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/appconfig.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/appconfig.pb.go @@ -3,13 +3,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/appconfig.proto package config import ( + evecommon "github.com/lf-edge/eve-api/go/evecommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -408,7 +409,7 @@ type AppInstanceConfig struct { // through a remote console session established by the device. RemoteConsole bool `protobuf:"varint,12,opt,name=remoteConsole,proto3" json:"remoteConsole,omitempty"` // contains the encrypted userdata - CipherData *CipherBlock `protobuf:"bytes,13,opt,name=cipherData,proto3" json:"cipherData,omitempty"` + CipherData *evecommon.CipherBlock `protobuf:"bytes,13,opt,name=cipherData,proto3" json:"cipherData,omitempty"` // The static IP address assigned on the NetworkAdapter which App Container // stats collection uses. If the 'collectStatsIPAddr' is not empty and valid, // it enables the container stats collection for this App. @@ -561,7 +562,7 @@ func (x *AppInstanceConfig) GetRemoteConsole() bool { return false } -func (x *AppInstanceConfig) GetCipherData() *CipherBlock { +func (x *AppInstanceConfig) GetCipherData() *evecommon.CipherBlock { if x != nil { return x.CipherData } @@ -762,137 +763,137 @@ var file_config_appconfig_proto_rawDesc = []byte{ 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x70, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x64, 0x65, 0x76, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x76, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x44, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, - 0x6d, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x6f, 0x70, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, - 0x70, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x44, 0x65, 0x73, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0xeb, 0x01, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x48, 0x0a, 0x0c, 0x72, - 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x43, 0x6d, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, - 0x78, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x09, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x65, - 0x73, 0x63, 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x22, 0x8f, 0x09, - 0x0a, 0x11, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a, 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x64, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, + 0x1b, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x63, 0x69, 0x70, 0x68, + 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x76, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x76, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x44, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4f, + 0x70, 0x73, 0x43, 0x6d, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6f, 0x70, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x0c, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x65, 0x73, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x48, + 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6d, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x0b, 0x72, 0x6f, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x43, 0x6d, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x41, 0x0a, + 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x44, 0x65, 0x73, 0x63, 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, + 0x22, 0x8f, 0x09, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a, 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, + 0x64, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x61, 0x6e, 0x64, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x64, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x0e, 0x66, 0x69, 0x78, 0x65, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x12, 0x34, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x06, + 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x61, 0x64, 0x61, + 0x70, 0x74, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x61, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x64, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x66, 0x69, 0x78, 0x65, 0x64, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, + 0x66, 0x69, 0x67, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x08, 0x61, 0x64, 0x61, + 0x70, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x07, 0x72, + 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x3b, 0x0a, 0x05, 0x70, 0x75, 0x72, 0x67, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x05, 0x70, 0x75, + 0x72, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, + 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x12, 0x46, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, + 0x65, 0x66, 0x52, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6d, 0x65, + 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x12, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, + 0x16, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x5f, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x49, + 0x6e, 0x69, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x08, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, - 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x06, 0x64, 0x72, 0x69, - 0x76, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, - 0x45, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, - 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x43, 0x0a, + 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x66, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, + 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x66, 0x52, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x66, 0x22, 0x36, 0x0a, 0x10, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x65, 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x66, 0x0a, 0x09, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, + 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x44, + 0x69, 0x72, 0x2a, 0x66, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x44, 0x72, + 0x69, 0x76, 0x65, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, + 0x61, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x44, + 0x61, 0x74, 0x61, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0x02, 0x12, 0x1a, + 0x0a, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x44, 0x72, 0x69, 0x76, 0x65, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x10, 0x03, 0x2a, 0x4b, 0x0a, 0x0c, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x4e, + 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4e, 0x41, + 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x08, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x07, 0x72, 0x65, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x3b, 0x0a, 0x05, 0x70, 0x75, 0x72, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x05, 0x70, 0x75, 0x72, 0x67, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0d, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, - 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x12, 0x46, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x52, - 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x47, - 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x44, - 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x12, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x69, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x66, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x52, 0x65, 0x66, 0x52, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x66, 0x22, - 0x36, 0x0a, 0x10, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x66, 0x0a, 0x09, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x72, 0x2a, - 0x66, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x11, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x44, 0x72, 0x69, 0x76, 0x65, - 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x4e, 0x6f, - 0x6e, 0x65, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, - 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4d, - 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x44, 0x72, 0x69, 0x76, 0x65, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x61, 0x72, 0x74, 0x10, 0x03, 0x2a, 0x4b, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x4e, 0x41, 0x50, 0x53, - 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, - 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x10, 0x01, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, - 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, + 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -910,20 +911,20 @@ func file_config_appconfig_proto_rawDescGZIP() []byte { var file_config_appconfig_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_config_appconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_config_appconfig_proto_goTypes = []interface{}{ - (MetaDataType)(0), // 0: org.lfedge.eve.config.MetaDataType - (SnapshotType)(0), // 1: org.lfedge.eve.config.SnapshotType - (*InstanceOpsCmd)(nil), // 2: org.lfedge.eve.config.InstanceOpsCmd - (*SnapshotDesc)(nil), // 3: org.lfedge.eve.config.SnapshotDesc - (*SnapshotConfig)(nil), // 4: org.lfedge.eve.config.SnapshotConfig - (*AppInstanceConfig)(nil), // 5: org.lfedge.eve.config.AppInstanceConfig - (*PatchEnvelopeRef)(nil), // 6: org.lfedge.eve.config.PatchEnvelopeRef - (*VolumeRef)(nil), // 7: org.lfedge.eve.config.VolumeRef - (*UUIDandVersion)(nil), // 8: org.lfedge.eve.config.UUIDandVersion - (*VmConfig)(nil), // 9: org.lfedge.eve.config.VmConfig - (*Drive)(nil), // 10: org.lfedge.eve.config.Drive - (*NetworkAdapter)(nil), // 11: org.lfedge.eve.config.NetworkAdapter - (*Adapter)(nil), // 12: org.lfedge.eve.config.Adapter - (*CipherBlock)(nil), // 13: org.lfedge.eve.config.CipherBlock + (MetaDataType)(0), // 0: org.lfedge.eve.config.MetaDataType + (SnapshotType)(0), // 1: org.lfedge.eve.config.SnapshotType + (*InstanceOpsCmd)(nil), // 2: org.lfedge.eve.config.InstanceOpsCmd + (*SnapshotDesc)(nil), // 3: org.lfedge.eve.config.SnapshotDesc + (*SnapshotConfig)(nil), // 4: org.lfedge.eve.config.SnapshotConfig + (*AppInstanceConfig)(nil), // 5: org.lfedge.eve.config.AppInstanceConfig + (*PatchEnvelopeRef)(nil), // 6: org.lfedge.eve.config.PatchEnvelopeRef + (*VolumeRef)(nil), // 7: org.lfedge.eve.config.VolumeRef + (*UUIDandVersion)(nil), // 8: org.lfedge.eve.config.UUIDandVersion + (*VmConfig)(nil), // 9: org.lfedge.eve.config.VmConfig + (*Drive)(nil), // 10: org.lfedge.eve.config.Drive + (*NetworkAdapter)(nil), // 11: org.lfedge.eve.config.NetworkAdapter + (*Adapter)(nil), // 12: org.lfedge.eve.config.Adapter + (*evecommon.CipherBlock)(nil), // 13: org.lfedge.eve.common.CipherBlock } var file_config_appconfig_proto_depIdxs = []int32{ 1, // 0: org.lfedge.eve.config.SnapshotDesc.type:type_name -> org.lfedge.eve.config.SnapshotType @@ -936,7 +937,7 @@ var file_config_appconfig_proto_depIdxs = []int32{ 12, // 7: org.lfedge.eve.config.AppInstanceConfig.adapters:type_name -> org.lfedge.eve.config.Adapter 2, // 8: org.lfedge.eve.config.AppInstanceConfig.restart:type_name -> org.lfedge.eve.config.InstanceOpsCmd 2, // 9: org.lfedge.eve.config.AppInstanceConfig.purge:type_name -> org.lfedge.eve.config.InstanceOpsCmd - 13, // 10: org.lfedge.eve.config.AppInstanceConfig.cipherData:type_name -> org.lfedge.eve.config.CipherBlock + 13, // 10: org.lfedge.eve.config.AppInstanceConfig.cipherData:type_name -> org.lfedge.eve.common.CipherBlock 7, // 11: org.lfedge.eve.config.AppInstanceConfig.volumeRefList:type_name -> org.lfedge.eve.config.VolumeRef 0, // 12: org.lfedge.eve.config.AppInstanceConfig.metaDataType:type_name -> org.lfedge.eve.config.MetaDataType 4, // 13: org.lfedge.eve.config.AppInstanceConfig.snapshot:type_name -> org.lfedge.eve.config.SnapshotConfig @@ -953,7 +954,6 @@ func file_config_appconfig_proto_init() { if File_config_appconfig_proto != nil { return } - file_config_acipherinfo_proto_init() file_config_devcommon_proto_init() file_config_storage_proto_init() file_config_vm_proto_init() diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/baseosconfig.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/baseosconfig.pb.go index 03896067a0..f7650f8517 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/baseosconfig.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/baseosconfig.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/baseosconfig.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/compound_devconfig.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/compound_devconfig.pb.go new file mode 100644 index 0000000000..f63b6835ac --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/compound_devconfig.pb.go @@ -0,0 +1,303 @@ +// Copyright(c) 2023 Zededa, Inc. +// All rights reserved. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.23.4 +// source: config/compound_devconfig.proto + +package config + +import ( + auth "github.com/lf-edge/eve-api/go/auth" + profile "github.com/lf-edge/eve-api/go/profile" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CompoundEdgeDevConfigRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // See the details about the field in the corresponding messages + // `LocalDevInfo` and `LocalAppInfo` defined in `local_profile.proto`. + LastCmdTimestamp uint64 `protobuf:"varint,1,opt,name=last_cmd_timestamp,json=lastCmdTimestamp,proto3" json:"last_cmd_timestamp,omitempty"` + CfgReq *ConfigRequest `protobuf:"bytes,2,opt,name=cfg_req,json=cfgReq,proto3" json:"cfg_req,omitempty"` +} + +func (x *CompoundEdgeDevConfigRequest) Reset() { + *x = CompoundEdgeDevConfigRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_config_compound_devconfig_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompoundEdgeDevConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompoundEdgeDevConfigRequest) ProtoMessage() {} + +func (x *CompoundEdgeDevConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_config_compound_devconfig_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompoundEdgeDevConfigRequest.ProtoReflect.Descriptor instead. +func (*CompoundEdgeDevConfigRequest) Descriptor() ([]byte, []int) { + return file_config_compound_devconfig_proto_rawDescGZIP(), []int{0} +} + +func (x *CompoundEdgeDevConfigRequest) GetLastCmdTimestamp() uint64 { + if x != nil { + return x.LastCmdTimestamp + } + return 0 +} + +func (x *CompoundEdgeDevConfigRequest) GetCfgReq() *ConfigRequest { + if x != nil { + return x.CfgReq + } + return nil +} + +// CompoundEdgeDevConfig message combines regular edge config, packed in auth +// envelope, node/applications commands and radio config. This message is +// needed for the LOC case, when a single "/compound-config" endpoint can be +// used. +type CompoundEdgeDevConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // See the details about the field in the corresponding messages + // `LocalDevCommand` and `AppCommand` defined in `local_profile.proto`. + Timestamp uint64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + ProtectedConfig *auth.AuthContainer `protobuf:"bytes,2,opt,name=protected_config,json=protectedConfig,proto3" json:"protected_config,omitempty"` + DevCmd *profile.LocalDevCmd `protobuf:"bytes,3,opt,name=dev_cmd,json=devCmd,proto3" json:"dev_cmd,omitempty"` + AppCmdList *profile.LocalAppCmdList `protobuf:"bytes,4,opt,name=app_cmd_list,json=appCmdList,proto3" json:"app_cmd_list,omitempty"` + RadioConfig *profile.RadioConfig `protobuf:"bytes,5,opt,name=radio_config,json=radioConfig,proto3" json:"radio_config,omitempty"` +} + +func (x *CompoundEdgeDevConfig) Reset() { + *x = CompoundEdgeDevConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_config_compound_devconfig_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompoundEdgeDevConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompoundEdgeDevConfig) ProtoMessage() {} + +func (x *CompoundEdgeDevConfig) ProtoReflect() protoreflect.Message { + mi := &file_config_compound_devconfig_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompoundEdgeDevConfig.ProtoReflect.Descriptor instead. +func (*CompoundEdgeDevConfig) Descriptor() ([]byte, []int) { + return file_config_compound_devconfig_proto_rawDescGZIP(), []int{1} +} + +func (x *CompoundEdgeDevConfig) GetTimestamp() uint64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *CompoundEdgeDevConfig) GetProtectedConfig() *auth.AuthContainer { + if x != nil { + return x.ProtectedConfig + } + return nil +} + +func (x *CompoundEdgeDevConfig) GetDevCmd() *profile.LocalDevCmd { + if x != nil { + return x.DevCmd + } + return nil +} + +func (x *CompoundEdgeDevConfig) GetAppCmdList() *profile.LocalAppCmdList { + if x != nil { + return x.AppCmdList + } + return nil +} + +func (x *CompoundEdgeDevConfig) GetRadioConfig() *profile.RadioConfig { + if x != nil { + return x.RadioConfig + } + return nil +} + +var File_config_compound_devconfig_proto protoreflect.FileDescriptor + +var file_config_compound_devconfig_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x64, 0x65, 0x76, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x0f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, + 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x64, 0x65, 0x76, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, + 0x01, 0x0a, 0x1c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x64, 0x67, 0x65, 0x44, + 0x65, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x2c, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6c, 0x61, 0x73, + 0x74, 0x43, 0x6d, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3d, 0x0a, + 0x07, 0x63, 0x66, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x06, 0x63, 0x66, 0x67, 0x52, 0x65, 0x71, 0x22, 0xd5, 0x02, 0x0a, + 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x64, 0x67, 0x65, 0x44, 0x65, 0x76, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4d, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x63, 0x6d, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x43, 0x6d, 0x64, 0x52, 0x06, 0x64, 0x65, 0x76, 0x43, 0x6d, + 0x64, 0x12, 0x49, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x43, 0x6d, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x0a, 0x61, 0x70, 0x70, 0x43, 0x6d, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0c, + 0x72, 0x61, 0x64, 0x69, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x64, 0x69, + 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, + 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_config_compound_devconfig_proto_rawDescOnce sync.Once + file_config_compound_devconfig_proto_rawDescData = file_config_compound_devconfig_proto_rawDesc +) + +func file_config_compound_devconfig_proto_rawDescGZIP() []byte { + file_config_compound_devconfig_proto_rawDescOnce.Do(func() { + file_config_compound_devconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_config_compound_devconfig_proto_rawDescData) + }) + return file_config_compound_devconfig_proto_rawDescData +} + +var file_config_compound_devconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_config_compound_devconfig_proto_goTypes = []interface{}{ + (*CompoundEdgeDevConfigRequest)(nil), // 0: org.lfedge.eve.config.CompoundEdgeDevConfigRequest + (*CompoundEdgeDevConfig)(nil), // 1: org.lfedge.eve.config.CompoundEdgeDevConfig + (*ConfigRequest)(nil), // 2: org.lfedge.eve.config.ConfigRequest + (*auth.AuthContainer)(nil), // 3: org.lfedge.eve.auth.AuthContainer + (*profile.LocalDevCmd)(nil), // 4: org.lfedge.eve.profile.LocalDevCmd + (*profile.LocalAppCmdList)(nil), // 5: org.lfedge.eve.profile.LocalAppCmdList + (*profile.RadioConfig)(nil), // 6: org.lfedge.eve.profile.RadioConfig +} +var file_config_compound_devconfig_proto_depIdxs = []int32{ + 2, // 0: org.lfedge.eve.config.CompoundEdgeDevConfigRequest.cfg_req:type_name -> org.lfedge.eve.config.ConfigRequest + 3, // 1: org.lfedge.eve.config.CompoundEdgeDevConfig.protected_config:type_name -> org.lfedge.eve.auth.AuthContainer + 4, // 2: org.lfedge.eve.config.CompoundEdgeDevConfig.dev_cmd:type_name -> org.lfedge.eve.profile.LocalDevCmd + 5, // 3: org.lfedge.eve.config.CompoundEdgeDevConfig.app_cmd_list:type_name -> org.lfedge.eve.profile.LocalAppCmdList + 6, // 4: org.lfedge.eve.config.CompoundEdgeDevConfig.radio_config:type_name -> org.lfedge.eve.profile.RadioConfig + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_config_compound_devconfig_proto_init() } +func file_config_compound_devconfig_proto_init() { + if File_config_compound_devconfig_proto != nil { + return + } + file_config_devconfig_proto_init() + if !protoimpl.UnsafeEnabled { + file_config_compound_devconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompoundEdgeDevConfigRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_config_compound_devconfig_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompoundEdgeDevConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_config_compound_devconfig_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_config_compound_devconfig_proto_goTypes, + DependencyIndexes: file_config_compound_devconfig_proto_depIdxs, + MessageInfos: file_config_compound_devconfig_proto_msgTypes, + }.Build() + File_config_compound_devconfig_proto = out.File + file_config_compound_devconfig_proto_rawDesc = nil + file_config_compound_devconfig_proto_goTypes = nil + file_config_compound_devconfig_proto_depIdxs = nil +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go index e22f466ae2..00f4471e77 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devcommon.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/devcommon.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devconfig.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devconfig.pb.go index 5c0db66e10..a63ff15b33 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devconfig.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devconfig.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/devconfig.proto @@ -12,6 +12,7 @@ package config import ( auth "github.com/lf-edge/eve-api/go/auth" certs "github.com/lf-edge/eve-api/go/certs" + evecommon "github.com/lf-edge/eve-api/go/evecommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" timestamppb "google.golang.org/protobuf/types/known/timestamppb" @@ -114,7 +115,7 @@ type EdgeDevConfig struct { // controller supplies a list of cipher contexts, // containing certificate and other details, to be // used for sensitive data decryption - CipherContexts []*CipherContext `protobuf:"bytes,19,rep,name=cipherContexts,proto3" json:"cipherContexts,omitempty"` + CipherContexts []*evecommon.CipherContext `protobuf:"bytes,19,rep,name=cipherContexts,proto3" json:"cipherContexts,omitempty"` // These images aka ContentTrees and Volumes should be created by EVE // independently of any application usage. // Application instances will refer to the volumes. @@ -319,7 +320,7 @@ func (x *EdgeDevConfig) GetNetworkInstances() []*NetworkInstanceConfig { return nil } -func (x *EdgeDevConfig) GetCipherContexts() []*CipherContext { +func (x *EdgeDevConfig) GetCipherContexts() []*evecommon.CipherContext { if x != nil { return x.CipherContexts } @@ -667,184 +668,184 @@ var file_config_devconfig_proto_rawDesc = []byte{ 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x61, 0x70, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x6f, - 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x76, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, - 0x76, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x65, 0x74, - 0x69, 0x6e, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x70, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x63, 0x65, 0x72, 0x74, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x0a, 0x09, 0x4c, 0x4f, 0x43, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x55, 0x72, 0x6c, 0x22, 0x9f, - 0x10, 0x0a, 0x0d, 0x45, 0x64, 0x67, 0x65, 0x44, 0x65, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x35, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x61, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x04, 0x61, 0x70, 0x70, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x70, - 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x04, 0x61, 0x70, 0x70, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, + 0x1a, 0x1b, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x63, 0x69, 0x70, + 0x68, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x70, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x61, + 0x73, 0x65, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x76, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x64, 0x65, 0x76, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x6e, 0x65, 0x74, 0x69, 0x6e, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x64, 0x67, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x63, + 0x65, 0x72, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x61, 0x75, 0x74, 0x68, + 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x0a, 0x09, 0x4c, + 0x4f, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x5f, + 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x55, 0x72, + 0x6c, 0x22, 0x9f, 0x10, 0x0a, 0x0d, 0x45, 0x64, 0x67, 0x65, 0x44, 0x65, 0x76, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x61, 0x6e, 0x64, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x04, 0x61, 0x70, + 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x04, 0x61, 0x70, 0x70, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x53, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x72, + 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, - 0x37, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x66, 0x69, 0x67, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, + 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x3b, 0x0a, 0x06, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x06, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x43, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x11, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x11, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x45, + 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x0d, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x68, 0x79, + 0x73, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x4f, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x61, 0x6e, + 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x58, 0x0a, 0x10, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x53, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, - 0x6f, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x52, 0x0e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x06, 0x72, - 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x3b, 0x0a, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x06, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x12, 0x43, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x11, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x11, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x0c, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x0d, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, - 0x61, 0x6c, 0x49, 0x4f, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6f, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x58, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0b, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x0a, 0x07, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x52, 0x0e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, - 0x12, 0x44, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, - 0x3b, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x63, 0x65, 0x72, - 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x63, 0x65, - 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x12, 0x29, 0x0a, 0x10, - 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x35, 0x0a, 0x06, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x73, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4f, - 0x53, 0x52, 0x06, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x1e, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6c, 0x61, 0x6e, - 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x6c, 0x61, 0x6e, 0x73, 0x12, 0x38, - 0x0a, 0x05, 0x62, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, + 0x63, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x63, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x12, + 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6d, 0x61, 0x69, 0x6e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x19, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, + 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x06, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x73, 0x18, + 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x61, + 0x73, 0x65, 0x4f, 0x53, 0x52, 0x06, 0x62, 0x61, 0x73, 0x65, 0x6f, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x1b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x6c, 0x61, 0x6e, 0x73, + 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, + 0x6c, 0x61, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x05, 0x76, 0x6c, 0x61, 0x6e, + 0x73, 0x12, 0x38, 0x0a, 0x05, 0x62, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x41, 0x64, 0x61, + 0x70, 0x74, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x41, 0x0a, 0x08, 0x65, + 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x65, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x38, + 0x0a, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, - 0x72, 0x52, 0x05, 0x62, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x64, 0x67, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x68, 0x75, 0x74, + 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x08, 0x65, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x38, 0x0a, 0x05, 0x64, - 0x69, 0x73, 0x6b, 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, + 0x69, 0x67, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, + 0x08, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x25, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x26, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, + 0x69, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x28, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x3f, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x4f, + 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x4f, 0x0a, 0x0e, 0x70, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x65, 0x73, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, - 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, - 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x73, 0x43, 0x6d, 0x64, 0x52, 0x08, 0x73, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x26, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x72, 0x69, 0x73, 0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x28, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, - 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x29, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x4f, 0x43, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x4f, 0x0a, 0x0e, 0x70, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x73, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x45, 0x76, 0x65, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x52, 0x0e, 0x70, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x73, - 0x22, 0x58, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x69, 0x74, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x6e, 0x0a, 0x0e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x44, 0x65, 0x76, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, 0x68, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x42, - 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, - 0x0a, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x41, 0x75, 0x74, 0x68, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x46, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2e, 0x5a, 0x43, 0x65, 0x72, 0x74, 0x52, 0x0f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x73, 0x42, - 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, - 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x67, 0x2e, 0x45, 0x76, 0x65, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x65, 0x52, 0x0e, 0x70, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x6e, 0x0a, + 0x0e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x44, 0x65, 0x76, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x0a, + 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, 0x68, 0x22, 0xa2, 0x01, + 0x0a, 0x0f, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x47, 0x0a, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x41, + 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0c, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x46, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2e, 0x5a, 0x43, 0x65, 0x72, + 0x74, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x65, 0x72, + 0x74, 0x73, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, + 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -861,33 +862,33 @@ func file_config_devconfig_proto_rawDescGZIP() []byte { var file_config_devconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_config_devconfig_proto_goTypes = []interface{}{ - (*LOCConfig)(nil), // 0: org.lfedge.eve.config.LOCConfig - (*EdgeDevConfig)(nil), // 1: org.lfedge.eve.config.EdgeDevConfig - (*ConfigRequest)(nil), // 2: org.lfedge.eve.config.ConfigRequest - (*ConfigResponse)(nil), // 3: org.lfedge.eve.config.ConfigResponse - (*BootstrapConfig)(nil), // 4: org.lfedge.eve.config.BootstrapConfig - (*UUIDandVersion)(nil), // 5: org.lfedge.eve.config.UUIDandVersion - (*AppInstanceConfig)(nil), // 6: org.lfedge.eve.config.AppInstanceConfig - (*NetworkConfig)(nil), // 7: org.lfedge.eve.config.NetworkConfig - (*DatastoreConfig)(nil), // 8: org.lfedge.eve.config.DatastoreConfig - (*BaseOSConfig)(nil), // 9: org.lfedge.eve.config.BaseOSConfig - (*DeviceOpsCmd)(nil), // 10: org.lfedge.eve.config.DeviceOpsCmd - (*ConfigItem)(nil), // 11: org.lfedge.eve.config.ConfigItem - (*SystemAdapter)(nil), // 12: org.lfedge.eve.config.SystemAdapter - (*PhysicalIO)(nil), // 13: org.lfedge.eve.config.PhysicalIO - (*NetworkInstanceConfig)(nil), // 14: org.lfedge.eve.config.NetworkInstanceConfig - (*CipherContext)(nil), // 15: org.lfedge.eve.config.CipherContext - (*ContentTree)(nil), // 16: org.lfedge.eve.config.ContentTree - (*Volume)(nil), // 17: org.lfedge.eve.config.Volume - (*BaseOS)(nil), // 18: org.lfedge.eve.config.BaseOS - (*VlanAdapter)(nil), // 19: org.lfedge.eve.config.VlanAdapter - (*BondAdapter)(nil), // 20: org.lfedge.eve.config.BondAdapter - (*EdgeViewConfig)(nil), // 21: org.lfedge.eve.config.EdgeViewConfig - (*DisksConfig)(nil), // 22: org.lfedge.eve.config.DisksConfig - (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp - (*EvePatchEnvelope)(nil), // 24: org.lfedge.eve.config.EvePatchEnvelope - (*auth.AuthContainer)(nil), // 25: org.lfedge.eve.auth.AuthContainer - (*certs.ZCert)(nil), // 26: org.lfedge.eve.certs.ZCert + (*LOCConfig)(nil), // 0: org.lfedge.eve.config.LOCConfig + (*EdgeDevConfig)(nil), // 1: org.lfedge.eve.config.EdgeDevConfig + (*ConfigRequest)(nil), // 2: org.lfedge.eve.config.ConfigRequest + (*ConfigResponse)(nil), // 3: org.lfedge.eve.config.ConfigResponse + (*BootstrapConfig)(nil), // 4: org.lfedge.eve.config.BootstrapConfig + (*UUIDandVersion)(nil), // 5: org.lfedge.eve.config.UUIDandVersion + (*AppInstanceConfig)(nil), // 6: org.lfedge.eve.config.AppInstanceConfig + (*NetworkConfig)(nil), // 7: org.lfedge.eve.config.NetworkConfig + (*DatastoreConfig)(nil), // 8: org.lfedge.eve.config.DatastoreConfig + (*BaseOSConfig)(nil), // 9: org.lfedge.eve.config.BaseOSConfig + (*DeviceOpsCmd)(nil), // 10: org.lfedge.eve.config.DeviceOpsCmd + (*ConfigItem)(nil), // 11: org.lfedge.eve.config.ConfigItem + (*SystemAdapter)(nil), // 12: org.lfedge.eve.config.SystemAdapter + (*PhysicalIO)(nil), // 13: org.lfedge.eve.config.PhysicalIO + (*NetworkInstanceConfig)(nil), // 14: org.lfedge.eve.config.NetworkInstanceConfig + (*evecommon.CipherContext)(nil), // 15: org.lfedge.eve.common.CipherContext + (*ContentTree)(nil), // 16: org.lfedge.eve.config.ContentTree + (*Volume)(nil), // 17: org.lfedge.eve.config.Volume + (*BaseOS)(nil), // 18: org.lfedge.eve.config.BaseOS + (*VlanAdapter)(nil), // 19: org.lfedge.eve.config.VlanAdapter + (*BondAdapter)(nil), // 20: org.lfedge.eve.config.BondAdapter + (*EdgeViewConfig)(nil), // 21: org.lfedge.eve.config.EdgeViewConfig + (*DisksConfig)(nil), // 22: org.lfedge.eve.config.DisksConfig + (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp + (*EvePatchEnvelope)(nil), // 24: org.lfedge.eve.config.EvePatchEnvelope + (*auth.AuthContainer)(nil), // 25: org.lfedge.eve.auth.AuthContainer + (*certs.ZCert)(nil), // 26: org.lfedge.eve.certs.ZCert } var file_config_devconfig_proto_depIdxs = []int32{ 5, // 0: org.lfedge.eve.config.EdgeDevConfig.id:type_name -> org.lfedge.eve.config.UUIDandVersion @@ -901,7 +902,7 @@ var file_config_devconfig_proto_depIdxs = []int32{ 12, // 8: org.lfedge.eve.config.EdgeDevConfig.systemAdapterList:type_name -> org.lfedge.eve.config.SystemAdapter 13, // 9: org.lfedge.eve.config.EdgeDevConfig.deviceIoList:type_name -> org.lfedge.eve.config.PhysicalIO 14, // 10: org.lfedge.eve.config.EdgeDevConfig.networkInstances:type_name -> org.lfedge.eve.config.NetworkInstanceConfig - 15, // 11: org.lfedge.eve.config.EdgeDevConfig.cipherContexts:type_name -> org.lfedge.eve.config.CipherContext + 15, // 11: org.lfedge.eve.config.EdgeDevConfig.cipherContexts:type_name -> org.lfedge.eve.common.CipherContext 16, // 12: org.lfedge.eve.config.EdgeDevConfig.contentInfo:type_name -> org.lfedge.eve.config.ContentTree 17, // 13: org.lfedge.eve.config.EdgeDevConfig.volumes:type_name -> org.lfedge.eve.config.Volume 18, // 14: org.lfedge.eve.config.EdgeDevConfig.baseos:type_name -> org.lfedge.eve.config.BaseOS @@ -928,7 +929,6 @@ func file_config_devconfig_proto_init() { if File_config_devconfig_proto != nil { return } - file_config_acipherinfo_proto_init() file_config_appconfig_proto_init() file_config_baseosconfig_proto_init() file_config_devcommon_proto_init() diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devmodel.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devmodel.pb.go index c1a9692976..bdfafc7d1d 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devmodel.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/devmodel.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/devmodel.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/edgeview.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/edgeview.pb.go index 4e938452f3..d314a2ec96 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/edgeview.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/edgeview.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/edgeview.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/fw.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/fw.pb.go index 25a0f1d41e..66128783d6 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/fw.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/fw.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/fw.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netcmn.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netcmn.pb.go index 008bb54bac..12c6606216 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netcmn.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netcmn.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/netcmn.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go index 72f550210c..2d89c74b1f 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netconfig.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/netconfig.proto @@ -555,7 +555,7 @@ type CellularAccessPoint struct { AuthProtocol CellularAuthProtocol `protobuf:"varint,3,opt,name=auth_protocol,json=authProtocol,proto3,enum=org.lfedge.eve.config.CellularAuthProtocol" json:"auth_protocol,omitempty"` // Cipher data may contain encrypted user credentials // (inside cellNetUsername and cellNetPassword fields). - CipherData *CipherBlock `protobuf:"bytes,4,opt,name=cipher_data,json=cipherData,proto3" json:"cipher_data,omitempty"` + CipherData *evecommon.CipherBlock `protobuf:"bytes,4,opt,name=cipher_data,json=cipherData,proto3" json:"cipher_data,omitempty"` // The set of cellular network operators that modem should preferably try to register // and connect into. // Network operator should be referenced by PLMN (Public Land Mobile Network) code, @@ -626,7 +626,7 @@ func (x *CellularAccessPoint) GetAuthProtocol() CellularAuthProtocol { return CellularAuthProtocol_CELLULAR_AUTH_PROTOCOL_NONE } -func (x *CellularAccessPoint) GetCipherData() *CipherBlock { +func (x *CellularAccessPoint) GetCipherData() *evecommon.CipherBlock { if x != nil { return x.CipherData } @@ -667,7 +667,7 @@ type WifiConfig struct { Password string `protobuf:"bytes,10,opt,name=password,proto3" json:"password,omitempty"` // a string of hashed psk or password Crypto *WifiConfigCryptoblock `protobuf:"bytes,20,opt,name=crypto,proto3" json:"crypto,omitempty"` // encrypted block Priority int32 `protobuf:"varint,25,opt,name=priority,proto3" json:"priority,omitempty"` // priority of connection, default is 0 - CipherData *CipherBlock `protobuf:"bytes,30,opt,name=cipherData,proto3" json:"cipherData,omitempty"` // contains encrypted credential information + CipherData *evecommon.CipherBlock `protobuf:"bytes,30,opt,name=cipherData,proto3" json:"cipherData,omitempty"` // contains encrypted credential information } func (x *WifiConfig) Reset() { @@ -744,7 +744,7 @@ func (x *WifiConfig) GetPriority() int32 { return 0 } -func (x *WifiConfig) GetCipherData() *CipherBlock { +func (x *WifiConfig) GetCipherData() *evecommon.CipherBlock { if x != nil { return x.CipherData } @@ -812,156 +812,156 @@ var file_config_netconfig_proto_rawDesc = []byte{ 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x66, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6d, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, 0x65, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, 0x02, 0x0a, 0x0d, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x69, 0x70, 0x73, 0x70, 0x65, 0x63, 0x52, - 0x02, 0x69, 0x70, 0x12, 0x3b, 0x0a, 0x03, 0x64, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x5a, 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x63, 0x44, 0x4e, 0x53, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x64, 0x6e, 0x73, - 0x12, 0x3e, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x12, 0x41, 0x0a, 0x08, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x6c, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x77, 0x69, 0x72, 0x65, 0x6c, - 0x65, 0x73, 0x73, 0x22, 0xec, 0x02, 0x0a, 0x0e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x41, - 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1a, 0x0a, 0x08, - 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x45, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x45, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x70, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, - 0x69, 0x73, 0x70, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x70, 0x65, 0x6d, 0x63, 0x65, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, - 0x65, 0x6d, 0x63, 0x65, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x65, 0x6d, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x70, - 0x65, 0x6d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x6b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a, - 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2e, 0x0a, 0x04, - 0x61, 0x63, 0x6c, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x41, 0x43, 0x45, 0x52, 0x04, 0x61, 0x63, 0x6c, 0x73, 0x12, 0x24, 0x0a, 0x0e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x29, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x56, 0x6c, 0x61, 0x6e, - 0x49, 0x64, 0x22, 0xcf, 0x01, 0x0a, 0x0e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x72, 0x65, - 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, - 0x0a, 0x0b, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, 0x67, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, 0x6c, 0x6c, - 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x65, 0x6c, 0x6c, - 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x69, 0x66, 0x69, 0x43, - 0x66, 0x67, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x77, 0x69, 0x66, - 0x69, 0x43, 0x66, 0x67, 0x22, 0x96, 0x02, 0x0a, 0x0e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, - 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x50, 0x4e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x50, 0x4e, 0x12, 0x46, 0x0a, 0x05, 0x70, 0x72, 0x6f, - 0x62, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x62, - 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x12, 0x4f, - 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, - 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, - 0x2c, 0x0a, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6d, - 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0x5a, 0x0a, - 0x19, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, - 0x62, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xfe, 0x02, 0x0a, 0x13, 0x43, 0x65, - 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x70, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x6e, 0x12, 0x50, - 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, - 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x12, 0x43, 0x0a, 0x0b, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x5f, 0x70, 0x6c, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6c, 0x6d, 0x6e, 0x73, 0x12, 0x25, - 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x5f, 0x72, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x52, 0x6f, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, + 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x66, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6d, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x61, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, 0x02, + 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x69, 0x70, 0x73, 0x70, + 0x65, 0x63, 0x52, 0x02, 0x69, 0x70, 0x12, 0x3b, 0x0a, 0x03, 0x64, 0x6e, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x5a, 0x6e, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x44, 0x4e, 0x53, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, + 0x64, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, + 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x50, 0x72, + 0x6f, 0x78, 0x79, 0x12, 0x41, 0x0a, 0x08, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, + 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x77, 0x69, + 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x22, 0xec, 0x02, 0x0a, 0x0e, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, + 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, + 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x45, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x45, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x69, 0x73, + 0x70, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x6c, 0x69, 0x73, 0x70, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x65, 0x6d, 0x63, 0x65, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x70, 0x65, 0x6d, 0x63, 0x65, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x65, 0x6d, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0d, 0x70, 0x65, 0x6d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x6b, 0x65, 0x79, 0x12, + 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x2e, 0x0a, 0x04, 0x61, 0x63, 0x6c, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0d, 0x70, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x52, 0x61, 0x74, 0x73, 0x22, 0x92, 0x03, 0x0a, 0x0a, 0x57, - 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x69, 0x66, - 0x69, 0x53, 0x53, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x69, 0x66, - 0x69, 0x53, 0x53, 0x49, 0x44, 0x12, 0x42, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x43, 0x45, 0x52, 0x04, 0x61, 0x63, 0x6c, 0x73, 0x12, + 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x6c, 0x61, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x56, + 0x6c, 0x61, 0x6e, 0x49, 0x64, 0x22, 0xcf, 0x01, 0x0a, 0x0e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, + 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, + 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, 0x67, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, + 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, + 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x66, 0x67, 0x12, 0x3b, 0x0a, 0x07, 0x77, 0x69, + 0x66, 0x69, 0x43, 0x66, 0x67, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, + 0x77, 0x69, 0x66, 0x69, 0x43, 0x66, 0x67, 0x22, 0x96, 0x02, 0x0a, 0x0e, 0x43, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x50, + 0x4e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x50, 0x4e, 0x12, 0x46, 0x0a, 0x05, + 0x70, 0x72, 0x6f, 0x62, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x05, 0x70, + 0x72, 0x6f, 0x62, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, + 0x67, 0x12, 0x4f, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x57, 0x69, 0x46, 0x69, 0x4b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x09, - 0x6b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x06, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x69, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, + 0x22, 0x5a, 0x0a, 0x19, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x62, 0x65, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x70, 0x72, 0x6f, 0x62, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xfe, 0x02, 0x0a, + 0x13, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x69, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x70, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, + 0x6e, 0x12, 0x50, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x45, 0x0a, 0x0b, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2a, - 0xa1, 0x01, 0x0a, 0x14, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x75, 0x74, 0x68, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x45, 0x4c, 0x4c, - 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, - 0x4f, 0x4c, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x45, 0x4c, - 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x50, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x45, 0x4c, - 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x50, 0x10, 0x02, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x45, - 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x50, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x48, 0x41, - 0x50, 0x10, 0x03, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, - 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x6c, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6c, 0x6d, 0x6e, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x5f, 0x72, 0x6f, 0x61, 0x6d, + 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x62, 0x69, + 0x64, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0d, + 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x52, 0x61, 0x74, 0x73, 0x22, 0x92, 0x03, + 0x0a, 0x0a, 0x57, 0x69, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x77, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x77, 0x69, 0x66, 0x69, 0x53, 0x53, 0x49, 0x44, 0x12, 0x42, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x46, 0x69, 0x4b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x69, 0x66, + 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x45, 0x0a, 0x0b, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x2a, 0xa1, 0x01, 0x0a, 0x14, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x41, + 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x43, + 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, + 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x50, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, + 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x50, 0x10, 0x02, 0x12, 0x27, 0x0a, + 0x23, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x50, 0x5f, 0x41, 0x4e, 0x44, 0x5f, + 0x43, 0x48, 0x41, 0x50, 0x10, 0x03, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, + 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, + 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -994,7 +994,7 @@ var file_config_netconfig_proto_goTypes = []interface{}{ (*ProxyConfig)(nil), // 12: org.lfedge.eve.config.ProxyConfig (*ACE)(nil), // 13: org.lfedge.eve.config.ACE (WirelessType)(0), // 14: org.lfedge.eve.config.WirelessType - (*CipherBlock)(nil), // 15: org.lfedge.eve.config.CipherBlock + (*evecommon.CipherBlock)(nil), // 15: org.lfedge.eve.common.CipherBlock (evecommon.RadioAccessTechnology)(0), // 16: org.lfedge.eve.common.RadioAccessTechnology (WiFiKeyScheme)(0), // 17: org.lfedge.eve.config.WiFiKeyScheme } @@ -1011,11 +1011,11 @@ var file_config_netconfig_proto_depIdxs = []int32{ 5, // 9: org.lfedge.eve.config.CellularConfig.probe:type_name -> org.lfedge.eve.config.CellularConnectivityProbe 6, // 10: org.lfedge.eve.config.CellularConfig.access_points:type_name -> org.lfedge.eve.config.CellularAccessPoint 0, // 11: org.lfedge.eve.config.CellularAccessPoint.auth_protocol:type_name -> org.lfedge.eve.config.CellularAuthProtocol - 15, // 12: org.lfedge.eve.config.CellularAccessPoint.cipher_data:type_name -> org.lfedge.eve.config.CipherBlock + 15, // 12: org.lfedge.eve.config.CellularAccessPoint.cipher_data:type_name -> org.lfedge.eve.common.CipherBlock 16, // 13: org.lfedge.eve.config.CellularAccessPoint.preferred_rats:type_name -> org.lfedge.eve.common.RadioAccessTechnology 17, // 14: org.lfedge.eve.config.WifiConfig.keyScheme:type_name -> org.lfedge.eve.config.WiFiKeyScheme 8, // 15: org.lfedge.eve.config.WifiConfig.crypto:type_name -> org.lfedge.eve.config.WifiConfig.cryptoblock - 15, // 16: org.lfedge.eve.config.WifiConfig.cipherData:type_name -> org.lfedge.eve.config.CipherBlock + 15, // 16: org.lfedge.eve.config.WifiConfig.cipherData:type_name -> org.lfedge.eve.common.CipherBlock 17, // [17:17] is the sub-list for method output_type 17, // [17:17] is the sub-list for method input_type 17, // [17:17] is the sub-list for extension type_name @@ -1028,7 +1028,6 @@ func file_config_netconfig_proto_init() { if File_config_netconfig_proto != nil { return } - file_config_acipherinfo_proto_init() file_config_fw_proto_init() file_config_netcmn_proto_init() if !protoimpl.UnsafeEnabled { diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netinst.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netinst.pb.go index e4ec9132b1..bdf52104d5 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netinst.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/netinst.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/netinst.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/patch_envelope.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/patch_envelope.pb.go index 57a6c7d63b..c22cfc6867 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/patch_envelope.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/patch_envelope.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/patch_envelope.proto @@ -24,124 +24,120 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type EveOpaqueObjectCategory int32 +type EVE_OPAQUE_OBJECT_CATEGORY int32 const ( - EveOpaqueObjectCategory_EVE_OPAQUE_OBJECT_CATEGORY_UNKOWN EveOpaqueObjectCategory = 0 - EveOpaqueObjectCategory_EVE_OPAQUE_OBJECT_CATEGORY_BASE64 EveOpaqueObjectCategory = 1 - EveOpaqueObjectCategory_EVE_OPAQUE_OBJECT_CATEGORY_BINARYBLOB EveOpaqueObjectCategory = 2 - EveOpaqueObjectCategory_EVE_OPAQUE_OBJECT_CATEGORY_SECRET EveOpaqueObjectCategory = 3 + EVE_OPAQUE_OBJECT_CATEGORY_UNKOWN EVE_OPAQUE_OBJECT_CATEGORY = 0 + EVE_OPAQUE_OBJECT_CATEGORY_BASE64 EVE_OPAQUE_OBJECT_CATEGORY = 1 + EVE_OPAQUE_OBJECT_CATEGORY_BINARYBLOB EVE_OPAQUE_OBJECT_CATEGORY = 2 + EVE_OPAQUE_OBJECT_CATEGORY_SECRET EVE_OPAQUE_OBJECT_CATEGORY = 3 ) -// Enum value maps for EveOpaqueObjectCategory. +// Enum value maps for EVE_OPAQUE_OBJECT_CATEGORY. var ( - EveOpaqueObjectCategory_name = map[int32]string{ - 0: "EVE_OPAQUE_OBJECT_CATEGORY_UNKOWN", - 1: "EVE_OPAQUE_OBJECT_CATEGORY_BASE64", - 2: "EVE_OPAQUE_OBJECT_CATEGORY_BINARYBLOB", - 3: "EVE_OPAQUE_OBJECT_CATEGORY_SECRET", - } - EveOpaqueObjectCategory_value = map[string]int32{ - "EVE_OPAQUE_OBJECT_CATEGORY_UNKOWN": 0, - "EVE_OPAQUE_OBJECT_CATEGORY_BASE64": 1, - "EVE_OPAQUE_OBJECT_CATEGORY_BINARYBLOB": 2, - "EVE_OPAQUE_OBJECT_CATEGORY_SECRET": 3, + EVE_OPAQUE_OBJECT_CATEGORY_name = map[int32]string{ + 0: "UNKOWN", + 1: "BASE64", + 2: "BINARYBLOB", + 3: "SECRET", + } + EVE_OPAQUE_OBJECT_CATEGORY_value = map[string]int32{ + "UNKOWN": 0, + "BASE64": 1, + "BINARYBLOB": 2, + "SECRET": 3, } ) -func (x EveOpaqueObjectCategory) Enum() *EveOpaqueObjectCategory { - p := new(EveOpaqueObjectCategory) +func (x EVE_OPAQUE_OBJECT_CATEGORY) Enum() *EVE_OPAQUE_OBJECT_CATEGORY { + p := new(EVE_OPAQUE_OBJECT_CATEGORY) *p = x return p } -func (x EveOpaqueObjectCategory) String() string { +func (x EVE_OPAQUE_OBJECT_CATEGORY) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (EveOpaqueObjectCategory) Descriptor() protoreflect.EnumDescriptor { +func (EVE_OPAQUE_OBJECT_CATEGORY) Descriptor() protoreflect.EnumDescriptor { return file_config_patch_envelope_proto_enumTypes[0].Descriptor() } -func (EveOpaqueObjectCategory) Type() protoreflect.EnumType { +func (EVE_OPAQUE_OBJECT_CATEGORY) Type() protoreflect.EnumType { return &file_config_patch_envelope_proto_enumTypes[0] } -func (x EveOpaqueObjectCategory) Number() protoreflect.EnumNumber { +func (x EVE_OPAQUE_OBJECT_CATEGORY) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use EveOpaqueObjectCategory.Descriptor instead. -func (EveOpaqueObjectCategory) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use EVE_OPAQUE_OBJECT_CATEGORY.Descriptor instead. +func (EVE_OPAQUE_OBJECT_CATEGORY) EnumDescriptor() ([]byte, []int) { return file_config_patch_envelope_proto_rawDescGZIP(), []int{0} } -type EvePatchEnvelopeAction int32 +type EVE_PATCH_ENVELOPE_ACTION int32 const ( - EvePatchEnvelopeAction_EVE_PATCH_ENVELOPE_ACTION_STORE EvePatchEnvelopeAction = 0 - EvePatchEnvelopeAction_EVE_PATCH_ENVELOPE_ACTION_ACTIVATE EvePatchEnvelopeAction = 1 + EVE_PATCH_ENVELOPE_ACTION_STORE EVE_PATCH_ENVELOPE_ACTION = 0 + EVE_PATCH_ENVELOPE_ACTION_ACTIVATE EVE_PATCH_ENVELOPE_ACTION = 1 ) -// Enum value maps for EvePatchEnvelopeAction. +// Enum value maps for EVE_PATCH_ENVELOPE_ACTION. var ( - EvePatchEnvelopeAction_name = map[int32]string{ - 0: "EVE_PATCH_ENVELOPE_ACTION_STORE", - 1: "EVE_PATCH_ENVELOPE_ACTION_ACTIVATE", + EVE_PATCH_ENVELOPE_ACTION_name = map[int32]string{ + 0: "STORE", + 1: "ACTIVATE", } - EvePatchEnvelopeAction_value = map[string]int32{ - "EVE_PATCH_ENVELOPE_ACTION_STORE": 0, - "EVE_PATCH_ENVELOPE_ACTION_ACTIVATE": 1, + EVE_PATCH_ENVELOPE_ACTION_value = map[string]int32{ + "STORE": 0, + "ACTIVATE": 1, } ) -func (x EvePatchEnvelopeAction) Enum() *EvePatchEnvelopeAction { - p := new(EvePatchEnvelopeAction) +func (x EVE_PATCH_ENVELOPE_ACTION) Enum() *EVE_PATCH_ENVELOPE_ACTION { + p := new(EVE_PATCH_ENVELOPE_ACTION) *p = x return p } -func (x EvePatchEnvelopeAction) String() string { +func (x EVE_PATCH_ENVELOPE_ACTION) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (EvePatchEnvelopeAction) Descriptor() protoreflect.EnumDescriptor { +func (EVE_PATCH_ENVELOPE_ACTION) Descriptor() protoreflect.EnumDescriptor { return file_config_patch_envelope_proto_enumTypes[1].Descriptor() } -func (EvePatchEnvelopeAction) Type() protoreflect.EnumType { +func (EVE_PATCH_ENVELOPE_ACTION) Type() protoreflect.EnumType { return &file_config_patch_envelope_proto_enumTypes[1] } -func (x EvePatchEnvelopeAction) Number() protoreflect.EnumNumber { +func (x EVE_PATCH_ENVELOPE_ACTION) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use EvePatchEnvelopeAction.Descriptor instead. -func (EvePatchEnvelopeAction) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use EVE_PATCH_ENVELOPE_ACTION.Descriptor instead. +func (EVE_PATCH_ENVELOPE_ACTION) EnumDescriptor() ([]byte, []int) { return file_config_patch_envelope_proto_rawDescGZIP(), []int{1} } -type EveOpaqueBase64Data struct { +type InlineOpaqueBase64Data struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Encrypted bool `protobuf:"varint,1,opt,name=encrypted,proto3" json:"encrypted,omitempty"` - // Types that are assignable to TextData: - // - // *EveOpaqueBase64Data_Base64ClearTextData - // *EveOpaqueBase64Data_Base64CipherTextData - TextData isEveOpaqueBase64Data_TextData `protobuf_oneof:"textData"` - // Types that are assignable to Base64MetaData: - // - // *EveOpaqueBase64Data_Base64ClearTextMetaData - // *EveOpaqueBase64Data_Base64CipherTextMetaData - Base64MetaData isEveOpaqueBase64Data_Base64MetaData `protobuf_oneof:"base64MetaData"` + // base64 encoded data + Base64Data string `protobuf:"bytes,1,opt,name=base64Data,proto3" json:"base64Data,omitempty"` + // file name to be used for storing this data + // same file name shall be advertised to application agent + FileNameToUse string `protobuf:"bytes,2,opt,name=fileNameToUse,proto3" json:"fileNameToUse,omitempty"` + // any arbitraty metadata encoded to base64 string + Base64MetaData *string `protobuf:"bytes,3,opt,name=base64MetaData,proto3,oneof" json:"base64MetaData,omitempty"` } -func (x *EveOpaqueBase64Data) Reset() { - *x = EveOpaqueBase64Data{} +func (x *InlineOpaqueBase64Data) Reset() { + *x = InlineOpaqueBase64Data{} if protoimpl.UnsafeEnabled { mi := &file_config_patch_envelope_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -149,13 +145,13 @@ func (x *EveOpaqueBase64Data) Reset() { } } -func (x *EveOpaqueBase64Data) String() string { +func (x *InlineOpaqueBase64Data) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EveOpaqueBase64Data) ProtoMessage() {} +func (*InlineOpaqueBase64Data) ProtoMessage() {} -func (x *EveOpaqueBase64Data) ProtoReflect() protoreflect.Message { +func (x *InlineOpaqueBase64Data) ProtoReflect() protoreflect.Message { mi := &file_config_patch_envelope_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -167,104 +163,52 @@ func (x *EveOpaqueBase64Data) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EveOpaqueBase64Data.ProtoReflect.Descriptor instead. -func (*EveOpaqueBase64Data) Descriptor() ([]byte, []int) { +// Deprecated: Use InlineOpaqueBase64Data.ProtoReflect.Descriptor instead. +func (*InlineOpaqueBase64Data) Descriptor() ([]byte, []int) { return file_config_patch_envelope_proto_rawDescGZIP(), []int{0} } -func (x *EveOpaqueBase64Data) GetEncrypted() bool { +func (x *InlineOpaqueBase64Data) GetBase64Data() string { if x != nil { - return x.Encrypted - } - return false -} - -func (m *EveOpaqueBase64Data) GetTextData() isEveOpaqueBase64Data_TextData { - if m != nil { - return m.TextData - } - return nil -} - -func (x *EveOpaqueBase64Data) GetBase64ClearTextData() string { - if x, ok := x.GetTextData().(*EveOpaqueBase64Data_Base64ClearTextData); ok { - return x.Base64ClearTextData + return x.Base64Data } return "" } -func (x *EveOpaqueBase64Data) GetBase64CipherTextData() *CipherBlock { - if x, ok := x.GetTextData().(*EveOpaqueBase64Data_Base64CipherTextData); ok { - return x.Base64CipherTextData - } - return nil -} - -func (m *EveOpaqueBase64Data) GetBase64MetaData() isEveOpaqueBase64Data_Base64MetaData { - if m != nil { - return m.Base64MetaData - } - return nil -} - -func (x *EveOpaqueBase64Data) GetBase64ClearTextMetaData() string { - if x, ok := x.GetBase64MetaData().(*EveOpaqueBase64Data_Base64ClearTextMetaData); ok { - return x.Base64ClearTextMetaData +func (x *InlineOpaqueBase64Data) GetFileNameToUse() string { + if x != nil { + return x.FileNameToUse } return "" } -func (x *EveOpaqueBase64Data) GetBase64CipherTextMetaData() *CipherBlock { - if x, ok := x.GetBase64MetaData().(*EveOpaqueBase64Data_Base64CipherTextMetaData); ok { - return x.Base64CipherTextMetaData +func (x *InlineOpaqueBase64Data) GetBase64MetaData() string { + if x != nil && x.Base64MetaData != nil { + return *x.Base64MetaData } - return nil -} - -type isEveOpaqueBase64Data_TextData interface { - isEveOpaqueBase64Data_TextData() -} - -type EveOpaqueBase64Data_Base64ClearTextData struct { - Base64ClearTextData string `protobuf:"bytes,2,opt,name=base64ClearTextData,proto3,oneof"` -} - -type EveOpaqueBase64Data_Base64CipherTextData struct { - // base 64 encoded and then encrypted - Base64CipherTextData *CipherBlock `protobuf:"bytes,3,opt,name=base64CipherTextData,proto3,oneof"` -} - -func (*EveOpaqueBase64Data_Base64ClearTextData) isEveOpaqueBase64Data_TextData() {} - -func (*EveOpaqueBase64Data_Base64CipherTextData) isEveOpaqueBase64Data_TextData() {} - -type isEveOpaqueBase64Data_Base64MetaData interface { - isEveOpaqueBase64Data_Base64MetaData() -} - -type EveOpaqueBase64Data_Base64ClearTextMetaData struct { - Base64ClearTextMetaData string `protobuf:"bytes,4,opt,name=base64ClearTextMetaData,proto3,oneof"` -} - -type EveOpaqueBase64Data_Base64CipherTextMetaData struct { - Base64CipherTextMetaData *CipherBlock `protobuf:"bytes,5,opt,name=base64CipherTextMetaData,proto3,oneof"` + return "" } -func (*EveOpaqueBase64Data_Base64ClearTextMetaData) isEveOpaqueBase64Data_Base64MetaData() {} - -func (*EveOpaqueBase64Data_Base64CipherTextMetaData) isEveOpaqueBase64Data_Base64MetaData() {} - -type EveOpaqueBinaryBlob struct { +type ExternalOpaqueBinaryBlob struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Name of the image uploaded into data store + ImageName string `protobuf:"bytes,1,opt,name=imageName,proto3" json:"imageName,omitempty"` + // file name to be used for storing this data in EVE + // the same file name shall be advertised to application agent + // if it's empty EVE will use image name + FileNameToUse *string `protobuf:"bytes,2,opt,name=fileNameToUse,proto3,oneof" json:"fileNameToUse,omitempty"` + // can be image type or size encoded into a single string + BlobMetaData *string `protobuf:"bytes,3,opt,name=blobMetaData,proto3,oneof" json:"blobMetaData,omitempty"` // Target field of Volume set to AppCustom - OpaqueVolume *Volume `protobuf:"bytes,1,opt,name=opaqueVolume,proto3" json:"opaqueVolume,omitempty"` + // refers to UUID of a volume + ImageId string `protobuf:"bytes,4,opt,name=imageId,proto3" json:"imageId,omitempty"` } -func (x *EveOpaqueBinaryBlob) Reset() { - *x = EveOpaqueBinaryBlob{} +func (x *ExternalOpaqueBinaryBlob) Reset() { + *x = ExternalOpaqueBinaryBlob{} if protoimpl.UnsafeEnabled { mi := &file_config_patch_envelope_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -272,13 +216,13 @@ func (x *EveOpaqueBinaryBlob) Reset() { } } -func (x *EveOpaqueBinaryBlob) String() string { +func (x *ExternalOpaqueBinaryBlob) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EveOpaqueBinaryBlob) ProtoMessage() {} +func (*ExternalOpaqueBinaryBlob) ProtoMessage() {} -func (x *EveOpaqueBinaryBlob) ProtoReflect() protoreflect.Message { +func (x *ExternalOpaqueBinaryBlob) ProtoReflect() protoreflect.Message { mi := &file_config_patch_envelope_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -290,16 +234,37 @@ func (x *EveOpaqueBinaryBlob) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EveOpaqueBinaryBlob.ProtoReflect.Descriptor instead. -func (*EveOpaqueBinaryBlob) Descriptor() ([]byte, []int) { +// Deprecated: Use ExternalOpaqueBinaryBlob.ProtoReflect.Descriptor instead. +func (*ExternalOpaqueBinaryBlob) Descriptor() ([]byte, []int) { return file_config_patch_envelope_proto_rawDescGZIP(), []int{1} } -func (x *EveOpaqueBinaryBlob) GetOpaqueVolume() *Volume { +func (x *ExternalOpaqueBinaryBlob) GetImageName() string { if x != nil { - return x.OpaqueVolume + return x.ImageName } - return nil + return "" +} + +func (x *ExternalOpaqueBinaryBlob) GetFileNameToUse() string { + if x != nil && x.FileNameToUse != nil { + return *x.FileNameToUse + } + return "" +} + +func (x *ExternalOpaqueBinaryBlob) GetBlobMetaData() string { + if x != nil && x.BlobMetaData != nil { + return *x.BlobMetaData + } + return "" +} + +func (x *ExternalOpaqueBinaryBlob) GetImageId() string { + if x != nil { + return x.ImageId + } + return "" } type EveBinaryArtifact struct { @@ -308,13 +273,13 @@ type EveBinaryArtifact struct { unknownFields protoimpl.UnknownFields // base64 or binary blob only - secret type is invalid - Format EveOpaqueObjectCategory `protobuf:"varint,1,opt,name=format,proto3,enum=org.lfedge.eve.config.EveOpaqueObjectCategory" json:"format,omitempty"` - // Types that are assignable to Script: + Format EVE_OPAQUE_OBJECT_CATEGORY `protobuf:"varint,1,opt,name=format,proto3,enum=org.lfedge.eve.config.EVE_OPAQUE_OBJECT_CATEGORY" json:"format,omitempty"` + // Types that are assignable to BinaryBlob: // - // *EveBinaryArtifact_Base64Artifact - // *EveBinaryArtifact_BinaryArtifact - Script isEveBinaryArtifact_Script `protobuf_oneof:"script"` - ArtifactMetaData *string `protobuf:"bytes,4,opt,name=artifactMetaData,proto3,oneof" json:"artifactMetaData,omitempty"` + // *EveBinaryArtifact_Inline + // *EveBinaryArtifact_VolumeRef + BinaryBlob isEveBinaryArtifact_BinaryBlob `protobuf_oneof:"binaryBlob"` + ArtifactMetaData *string `protobuf:"bytes,4,opt,name=artifactMetaData,proto3,oneof" json:"artifactMetaData,omitempty"` } func (x *EveBinaryArtifact) Reset() { @@ -349,30 +314,30 @@ func (*EveBinaryArtifact) Descriptor() ([]byte, []int) { return file_config_patch_envelope_proto_rawDescGZIP(), []int{2} } -func (x *EveBinaryArtifact) GetFormat() EveOpaqueObjectCategory { +func (x *EveBinaryArtifact) GetFormat() EVE_OPAQUE_OBJECT_CATEGORY { if x != nil { return x.Format } - return EveOpaqueObjectCategory_EVE_OPAQUE_OBJECT_CATEGORY_UNKOWN + return EVE_OPAQUE_OBJECT_CATEGORY_UNKOWN } -func (m *EveBinaryArtifact) GetScript() isEveBinaryArtifact_Script { +func (m *EveBinaryArtifact) GetBinaryBlob() isEveBinaryArtifact_BinaryBlob { if m != nil { - return m.Script + return m.BinaryBlob } return nil } -func (x *EveBinaryArtifact) GetBase64Artifact() *EveOpaqueBase64Data { - if x, ok := x.GetScript().(*EveBinaryArtifact_Base64Artifact); ok { - return x.Base64Artifact +func (x *EveBinaryArtifact) GetInline() *InlineOpaqueBase64Data { + if x, ok := x.GetBinaryBlob().(*EveBinaryArtifact_Inline); ok { + return x.Inline } return nil } -func (x *EveBinaryArtifact) GetBinaryArtifact() *EveOpaqueBinaryBlob { - if x, ok := x.GetScript().(*EveBinaryArtifact_BinaryArtifact); ok { - return x.BinaryArtifact +func (x *EveBinaryArtifact) GetVolumeRef() *ExternalOpaqueBinaryBlob { + if x, ok := x.GetBinaryBlob().(*EveBinaryArtifact_VolumeRef); ok { + return x.VolumeRef } return nil } @@ -384,21 +349,21 @@ func (x *EveBinaryArtifact) GetArtifactMetaData() string { return "" } -type isEveBinaryArtifact_Script interface { - isEveBinaryArtifact_Script() +type isEveBinaryArtifact_BinaryBlob interface { + isEveBinaryArtifact_BinaryBlob() } -type EveBinaryArtifact_Base64Artifact struct { - Base64Artifact *EveOpaqueBase64Data `protobuf:"bytes,2,opt,name=base64Artifact,proto3,oneof"` +type EveBinaryArtifact_Inline struct { + Inline *InlineOpaqueBase64Data `protobuf:"bytes,2,opt,name=inline,proto3,oneof"` } -type EveBinaryArtifact_BinaryArtifact struct { - BinaryArtifact *EveOpaqueBinaryBlob `protobuf:"bytes,3,opt,name=binaryArtifact,proto3,oneof"` +type EveBinaryArtifact_VolumeRef struct { + VolumeRef *ExternalOpaqueBinaryBlob `protobuf:"bytes,3,opt,name=volumeRef,proto3,oneof"` } -func (*EveBinaryArtifact_Base64Artifact) isEveBinaryArtifact_Script() {} +func (*EveBinaryArtifact_Inline) isEveBinaryArtifact_BinaryBlob() {} -func (*EveBinaryArtifact_BinaryArtifact) isEveBinaryArtifact_Script() {} +func (*EveBinaryArtifact_VolumeRef) isEveBinaryArtifact_BinaryBlob() {} type EvePatchEnvelope struct { state protoimpl.MessageState @@ -409,11 +374,11 @@ type EvePatchEnvelope struct { DisplayName string `protobuf:"bytes,1,opt,name=displayName,proto3" json:"displayName,omitempty"` // Unique Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` - // artibtraty versoin from user + // arbitrary version from user Version *string `protobuf:"bytes,3,opt,name=version,proto3,oneof" json:"version,omitempty"` // way this object should be treated - Action EvePatchEnvelopeAction `protobuf:"varint,4,opt,name=action,proto3,enum=org.lfedge.eve.config.EvePatchEnvelopeAction" json:"action,omitempty"` - Artifacts []*EveBinaryArtifact `protobuf:"bytes,5,rep,name=artifacts,proto3" json:"artifacts,omitempty"` + Action EVE_PATCH_ENVELOPE_ACTION `protobuf:"varint,4,opt,name=action,proto3,enum=org.lfedge.eve.config.EVE_PATCH_ENVELOPE_ACTION" json:"action,omitempty"` + Artifacts []*EveBinaryArtifact `protobuf:"bytes,5,rep,name=artifacts,proto3" json:"artifacts,omitempty"` // List of application instance ids that should // be allowed to access this patch envelope AppInstIdsAllowed []string `protobuf:"bytes,6,rep,name=appInstIdsAllowed,proto3" json:"appInstIdsAllowed,omitempty"` @@ -474,11 +439,11 @@ func (x *EvePatchEnvelope) GetVersion() string { return "" } -func (x *EvePatchEnvelope) GetAction() EvePatchEnvelopeAction { +func (x *EvePatchEnvelope) GetAction() EVE_PATCH_ENVELOPE_ACTION { if x != nil { return x.Action } - return EvePatchEnvelopeAction_EVE_PATCH_ENVELOPE_ACTION_STORE + return EVE_PATCH_ENVELOPE_ACTION_STORE } func (x *EvePatchEnvelope) GetArtifacts() []*EveBinaryArtifact { @@ -510,102 +475,82 @@ var file_config_patch_envelope_proto_rawDesc = []byte{ 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x63, - 0x69, 0x70, 0x68, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x02, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x4f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, - 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x13, 0x62, - 0x61, 0x73, 0x65, 0x36, 0x34, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x13, 0x62, 0x61, 0x73, 0x65, - 0x36, 0x34, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x58, 0x0a, 0x14, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x54, - 0x65, 0x78, 0x74, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x00, 0x52, 0x14, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x43, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x54, 0x65, 0x78, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x17, 0x62, 0x61, 0x73, - 0x65, 0x36, 0x34, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x17, 0x62, 0x61, - 0x73, 0x65, 0x36, 0x34, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x60, 0x0a, 0x18, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x43, - 0x69, 0x70, 0x68, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x01, 0x52, 0x18, 0x62, - 0x61, 0x73, 0x65, 0x36, 0x34, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x42, 0x0a, 0x0a, 0x08, 0x74, 0x65, 0x78, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x42, 0x10, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x4d, 0x65, 0x74, - 0x61, 0x44, 0x61, 0x74, 0x61, 0x22, 0x58, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x4f, 0x70, 0x61, 0x71, - 0x75, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x41, 0x0a, 0x0c, - 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, - 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x52, 0x0c, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22, - 0xd7, 0x02, 0x0a, 0x11, 0x45, 0x76, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x46, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x76, - 0x65, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x54, 0x0a, - 0x0e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x76, - 0x65, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x44, 0x61, 0x74, - 0x61, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x12, 0x54, 0x0a, 0x0e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x01, 0x0a, 0x16, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x54, 0x6f, 0x55, 0x73, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, + 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, + 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x4d, 0x65, + 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x22, 0xc9, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x42, + 0x6c, 0x6f, 0x62, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x29, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x54, 0x6f, 0x55, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, + 0x62, 0x6c, 0x6f, 0x62, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x62, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, + 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, + 0x10, 0x0a, 0x0e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x54, 0x6f, 0x55, 0x73, + 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, + 0x74, 0x61, 0x22, 0xcc, 0x02, 0x0a, 0x11, 0x45, 0x76, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x49, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x45, 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x52, 0x06, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6e, 0x6c, 0x69, + 0x6e, 0x65, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x06, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x4f, 0x0a, 0x09, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x42, 0x6c, 0x6f, 0x62, + 0x48, 0x00, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x12, 0x2f, 0x0a, + 0x10, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x10, 0x61, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0c, + 0x0a, 0x0a, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x42, 0x6c, 0x6f, 0x62, 0x42, 0x13, 0x0a, 0x11, + 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, + 0x61, 0x22, 0xef, 0x02, 0x0a, 0x10, 0x45, 0x76, 0x65, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, + 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x45, 0x76, 0x65, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x42, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x2f, 0x0a, 0x10, 0x61, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x10, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x22, 0xec, 0x02, 0x0a, 0x10, 0x45, 0x76, - 0x65, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x76, 0x65, 0x50, - 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x09, 0x61, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x76, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x73, - 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, - 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x0a, 0x0a, 0x08, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0xb9, 0x01, 0x0a, 0x17, 0x45, 0x76, 0x65, - 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, - 0x55, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, - 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, - 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x36, 0x34, - 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x45, 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, - 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x5f, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x02, 0x12, 0x25, 0x0a, - 0x21, 0x45, 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x43, 0x52, - 0x45, 0x54, 0x10, 0x03, 0x2a, 0x65, 0x0a, 0x16, 0x45, 0x76, 0x65, 0x50, 0x61, 0x74, 0x63, 0x68, - 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, - 0x0a, 0x1f, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, - 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x4f, 0x52, - 0x45, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, - 0x5f, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x42, 0x3d, 0x0a, 0x15, 0x6f, + 0x66, 0x69, 0x67, 0x2e, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x4e, + 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x52, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x45, 0x76, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2c, 0x0a, + 0x11, 0x61, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, + 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x70, 0x70, 0x49, 0x6e, 0x73, + 0x74, 0x49, 0x64, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x2a, 0x50, 0x0a, 0x1a, 0x45, 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, + 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, + 0x59, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x4e, 0x4b, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x42, 0x41, 0x53, 0x45, 0x36, 0x34, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x49, 0x4e, + 0x41, 0x52, 0x59, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x43, + 0x52, 0x45, 0x54, 0x10, 0x03, 0x2a, 0x34, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, + 0x43, 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, + 0x08, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, @@ -628,31 +573,26 @@ func file_config_patch_envelope_proto_rawDescGZIP() []byte { var file_config_patch_envelope_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_config_patch_envelope_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_config_patch_envelope_proto_goTypes = []interface{}{ - (EveOpaqueObjectCategory)(0), // 0: org.lfedge.eve.config.EveOpaqueObjectCategory - (EvePatchEnvelopeAction)(0), // 1: org.lfedge.eve.config.EvePatchEnvelopeAction - (*EveOpaqueBase64Data)(nil), // 2: org.lfedge.eve.config.EveOpaqueBase64Data - (*EveOpaqueBinaryBlob)(nil), // 3: org.lfedge.eve.config.EveOpaqueBinaryBlob - (*EveBinaryArtifact)(nil), // 4: org.lfedge.eve.config.EveBinaryArtifact - (*EvePatchEnvelope)(nil), // 5: org.lfedge.eve.config.EvePatchEnvelope - (*CipherBlock)(nil), // 6: org.lfedge.eve.config.CipherBlock - (*Volume)(nil), // 7: org.lfedge.eve.config.Volume - (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp + (EVE_OPAQUE_OBJECT_CATEGORY)(0), // 0: org.lfedge.eve.config.EVE_OPAQUE_OBJECT_CATEGORY + (EVE_PATCH_ENVELOPE_ACTION)(0), // 1: org.lfedge.eve.config.EVE_PATCH_ENVELOPE_ACTION + (*InlineOpaqueBase64Data)(nil), // 2: org.lfedge.eve.config.InlineOpaqueBase64Data + (*ExternalOpaqueBinaryBlob)(nil), // 3: org.lfedge.eve.config.ExternalOpaqueBinaryBlob + (*EveBinaryArtifact)(nil), // 4: org.lfedge.eve.config.EveBinaryArtifact + (*EvePatchEnvelope)(nil), // 5: org.lfedge.eve.config.EvePatchEnvelope + (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp } var file_config_patch_envelope_proto_depIdxs = []int32{ - 6, // 0: org.lfedge.eve.config.EveOpaqueBase64Data.base64CipherTextData:type_name -> org.lfedge.eve.config.CipherBlock - 6, // 1: org.lfedge.eve.config.EveOpaqueBase64Data.base64CipherTextMetaData:type_name -> org.lfedge.eve.config.CipherBlock - 7, // 2: org.lfedge.eve.config.EveOpaqueBinaryBlob.opaqueVolume:type_name -> org.lfedge.eve.config.Volume - 0, // 3: org.lfedge.eve.config.EveBinaryArtifact.format:type_name -> org.lfedge.eve.config.EveOpaqueObjectCategory - 2, // 4: org.lfedge.eve.config.EveBinaryArtifact.base64Artifact:type_name -> org.lfedge.eve.config.EveOpaqueBase64Data - 3, // 5: org.lfedge.eve.config.EveBinaryArtifact.binaryArtifact:type_name -> org.lfedge.eve.config.EveOpaqueBinaryBlob - 1, // 6: org.lfedge.eve.config.EvePatchEnvelope.action:type_name -> org.lfedge.eve.config.EvePatchEnvelopeAction - 4, // 7: org.lfedge.eve.config.EvePatchEnvelope.artifacts:type_name -> org.lfedge.eve.config.EveBinaryArtifact - 8, // 8: org.lfedge.eve.config.EvePatchEnvelope.createTime:type_name -> google.protobuf.Timestamp - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 0, // 0: org.lfedge.eve.config.EveBinaryArtifact.format:type_name -> org.lfedge.eve.config.EVE_OPAQUE_OBJECT_CATEGORY + 2, // 1: org.lfedge.eve.config.EveBinaryArtifact.inline:type_name -> org.lfedge.eve.config.InlineOpaqueBase64Data + 3, // 2: org.lfedge.eve.config.EveBinaryArtifact.volumeRef:type_name -> org.lfedge.eve.config.ExternalOpaqueBinaryBlob + 1, // 3: org.lfedge.eve.config.EvePatchEnvelope.action:type_name -> org.lfedge.eve.config.EVE_PATCH_ENVELOPE_ACTION + 4, // 4: org.lfedge.eve.config.EvePatchEnvelope.artifacts:type_name -> org.lfedge.eve.config.EveBinaryArtifact + 6, // 5: org.lfedge.eve.config.EvePatchEnvelope.createTime:type_name -> google.protobuf.Timestamp + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_config_patch_envelope_proto_init() } @@ -660,11 +600,9 @@ func file_config_patch_envelope_proto_init() { if File_config_patch_envelope_proto != nil { return } - file_config_acipherinfo_proto_init() - file_config_storage_proto_init() if !protoimpl.UnsafeEnabled { file_config_patch_envelope_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EveOpaqueBase64Data); i { + switch v := v.(*InlineOpaqueBase64Data); i { case 0: return &v.state case 1: @@ -676,7 +614,7 @@ func file_config_patch_envelope_proto_init() { } } file_config_patch_envelope_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EveOpaqueBinaryBlob); i { + switch v := v.(*ExternalOpaqueBinaryBlob); i { case 0: return &v.state case 1: @@ -712,15 +650,11 @@ func file_config_patch_envelope_proto_init() { } } } - file_config_patch_envelope_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*EveOpaqueBase64Data_Base64ClearTextData)(nil), - (*EveOpaqueBase64Data_Base64CipherTextData)(nil), - (*EveOpaqueBase64Data_Base64ClearTextMetaData)(nil), - (*EveOpaqueBase64Data_Base64CipherTextMetaData)(nil), - } + file_config_patch_envelope_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_config_patch_envelope_proto_msgTypes[1].OneofWrappers = []interface{}{} file_config_patch_envelope_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*EveBinaryArtifact_Base64Artifact)(nil), - (*EveBinaryArtifact_BinaryArtifact)(nil), + (*EveBinaryArtifact_Inline)(nil), + (*EveBinaryArtifact_VolumeRef)(nil), } file_config_patch_envelope_proto_msgTypes[3].OneofWrappers = []interface{}{} type x struct{} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/storage.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/storage.pb.go index 8ae0c3eb56..a04b8d3b94 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/storage.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/storage.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/storage.proto @@ -101,21 +101,23 @@ const ( Format_VHDX Format = 7 Format_CONTAINER Format = 8 Format_ISO Format = 9 + Format_PVC Format = 10 ) // Enum value maps for Format. var ( Format_name = map[int32]string{ - 0: "FmtUnknown", - 1: "RAW", - 2: "QCOW", - 3: "QCOW2", - 4: "VHD", - 5: "VMDK", - 6: "OVA", - 7: "VHDX", - 8: "CONTAINER", - 9: "ISO", + 0: "FmtUnknown", + 1: "RAW", + 2: "QCOW", + 3: "QCOW2", + 4: "VHD", + 5: "VMDK", + 6: "OVA", + 7: "VHDX", + 8: "CONTAINER", + 9: "ISO", + 10: "PVC", } Format_value = map[string]int32{ "FmtUnknown": 0, @@ -128,6 +130,7 @@ var ( "VHDX": 7, "CONTAINER": 8, "ISO": 9, + "PVC": 10, } ) @@ -571,7 +574,7 @@ type DatastoreConfig struct { // Applies for some datastore types Region string `protobuf:"bytes,6,opt,name=region,proto3" json:"region,omitempty"` // contains the encrypted credentials - CipherData *CipherBlock `protobuf:"bytes,7,opt,name=cipherData,proto3" json:"cipherData,omitempty"` + CipherData *evecommon.CipherBlock `protobuf:"bytes,7,opt,name=cipherData,proto3" json:"cipherData,omitempty"` // Uploaded datastore certificate or certificate chain DsCertPEM [][]byte `protobuf:"bytes,8,rep,name=dsCertPEM,proto3" json:"dsCertPEM,omitempty"` } @@ -657,7 +660,7 @@ func (x *DatastoreConfig) GetRegion() string { return "" } -func (x *DatastoreConfig) GetCipherData() *CipherBlock { +func (x *DatastoreConfig) GetCipherData() *evecommon.CipherBlock { if x != nil { return x.CipherData } @@ -1337,222 +1340,223 @@ var file_config_storage_proto_rawDesc = []byte{ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x76, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x63, - 0x69, 0x70, 0x68, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, 0x65, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x79, 0x0a, 0x0d, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x72, 0x74, 0x73, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x72, 0x74, 0x73, 0x75, 0x72, - 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x63, 0x65, 0x72, 0x74, 0x75, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, - 0x63, 0x65, 0x72, 0x74, 0x75, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xae, 0x02, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x05, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x61, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x79, 0x0a, + 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, + 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x72, 0x74, 0x73, 0x75, 0x72, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x72, 0x74, + 0x73, 0x75, 0x72, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x63, 0x65, + 0x72, 0x74, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x63, 0x65, 0x72, 0x74, 0x75, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xae, 0x02, 0x0a, 0x0f, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x05, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x44, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x64, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x66, 0x71, 0x64, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x64, + 0x73, 0x43, 0x65, 0x72, 0x74, 0x50, 0x45, 0x4d, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, + 0x64, 0x73, 0x43, 0x65, 0x72, 0x74, 0x50, 0x45, 0x4d, 0x22, 0xad, 0x02, 0x0a, 0x05, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x12, 0x4d, 0x0a, 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x64, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x61, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x64, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x12, 0x37, + 0x0a, 0x07, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x07, + 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x44, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, - 0x64, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0a, 0x63, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x73, 0x43, 0x65, - 0x72, 0x74, 0x50, 0x45, 0x4d, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, 0x64, 0x73, 0x43, - 0x65, 0x72, 0x74, 0x50, 0x45, 0x4d, 0x22, 0xad, 0x02, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x12, 0x4d, 0x0a, 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x64, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x55, 0x55, 0x49, 0x44, 0x61, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x0e, 0x75, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x64, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x12, 0x37, 0x0a, 0x07, 0x69, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x07, 0x69, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, 0x69, 0x67, - 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x64, 0x73, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x7a, 0x65, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, - 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x8a, 0x02, 0x0a, 0x05, 0x44, 0x72, 0x69, 0x76, 0x65, - 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x3a, 0x0a, 0x07, - 0x64, 0x72, 0x76, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, + 0x73, 0x69, 0x67, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, 0x49, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x73, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, + 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x8a, 0x02, 0x0a, 0x05, 0x44, 0x72, + 0x69, 0x76, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, + 0x3a, 0x0a, 0x07, 0x64, 0x72, 0x76, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x07, 0x64, 0x72, 0x76, 0x74, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, + 0x65, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x93, 0x03, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x73, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x55, 0x52, 0x4c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x4c, + 0x12, 0x37, 0x0a, 0x07, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x52, 0x07, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, + 0x32, 0x35, 0x36, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, + 0x36, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, 0x69, + 0x67, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0b, + 0x64, 0x73, 0x5f, 0x69, 0x64, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x73, 0x49, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x8f, 0x01, 0x0a, + 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x64, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x49, 0x44, 0x22, 0x8e, + 0x03, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x42, 0x0a, + 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x07, 0x64, 0x72, 0x76, 0x74, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x73, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x28, 0x0a, + 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x73, 0x69, + 0x7a, 0x65, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, + 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, + 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x65, + 0x61, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, + 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x22, 0x93, 0x03, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, - 0x72, 0x65, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x73, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, - 0x52, 0x4c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x4c, 0x12, 0x37, 0x0a, - 0x07, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, - 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x07, 0x69, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x12, 0x22, - 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, 0x69, 0x67, 0x69, 0x6e, - 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x28, 0x0a, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0b, 0x64, 0x73, 0x5f, - 0x69, 0x64, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x64, 0x73, 0x49, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x13, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, - 0x6e, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x49, 0x44, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x49, 0x44, 0x22, 0x8e, 0x03, 0x0a, 0x06, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x06, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x4a, - 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x73, - 0x69, 0x7a, 0x65, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, - 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, - 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, - 0x74, 0x65, 0x78, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6c, 0x65, 0x61, - 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xd3, 0x01, 0x0a, - 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x04, 0x64, - 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x41, 0x0a, 0x08, 0x6f, 0x6c, 0x64, 0x5f, 0x64, - 0x69, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x69, - 0x73, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0xcc, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x37, 0x0a, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x44, 0x0a, 0x0a, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x41, 0x72, 0x72, - 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, - 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, - 0x6e, 0x2a, 0x85, 0x01, 0x0a, 0x06, 0x44, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, - 0x44, 0x73, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, - 0x73, 0x48, 0x74, 0x74, 0x70, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x73, 0x48, 0x74, 0x74, - 0x70, 0x73, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x73, 0x53, 0x33, 0x10, 0x03, 0x12, 0x0a, - 0x0a, 0x06, 0x44, 0x73, 0x53, 0x46, 0x54, 0x50, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x73, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x42, 0x6c, - 0x6f, 0x62, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x73, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x10, 0x07, 0x2a, 0x74, 0x0a, 0x06, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x6d, 0x74, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, - 0x51, 0x43, 0x4f, 0x57, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x51, 0x43, 0x4f, 0x57, 0x32, 0x10, - 0x03, 0x12, 0x07, 0x0a, 0x03, 0x56, 0x48, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x4d, - 0x44, 0x4b, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x56, 0x41, 0x10, 0x06, 0x12, 0x08, 0x0a, - 0x04, 0x56, 0x48, 0x44, 0x58, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x54, 0x41, - 0x49, 0x4e, 0x45, 0x52, 0x10, 0x08, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x53, 0x4f, 0x10, 0x09, 0x2a, - 0x56, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x67, 0x74, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x69, 0x73, - 0x6b, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x10, 0x02, 0x12, - 0x0a, 0x0a, 0x06, 0x49, 0x6e, 0x69, 0x74, 0x72, 0x64, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, - 0x61, 0x6d, 0x44, 0x69, 0x73, 0x6b, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x10, 0x05, 0x2a, 0x49, 0x0a, 0x09, 0x44, 0x72, 0x69, 0x76, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x44, 0x52, 0x4f, 0x4d, 0x10, - 0x01, 0x12, 0x07, 0x0a, 0x03, 0x48, 0x44, 0x44, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, - 0x54, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x44, 0x44, 0x5f, 0x45, 0x4d, 0x50, 0x54, 0x59, - 0x10, 0x04, 0x2a, 0x31, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x0c, 0x0a, 0x08, 0x56, - 0x41, 0x50, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x41, 0x50, - 0x5f, 0x39, 0x50, 0x10, 0x01, 0x2a, 0x4e, 0x0a, 0x17, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x43, 0x4f, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x43, 0x4f, 0x54, 0x5f, 0x42, 0x4c, 0x41, 0x4e, 0x4b, - 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x56, 0x43, 0x4f, 0x54, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, - 0x4f, 0x41, 0x44, 0x10, 0x02, 0x2a, 0xec, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x4b, - 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, - 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, - 0x56, 0x45, 0x4f, 0x53, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, - 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, - 0x53, 0x54, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x5a, 0x46, 0x53, 0x5f, 0x4f, 0x4e, 0x4c, - 0x49, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x5a, 0x46, 0x53, 0x5f, 0x4f, 0x46, - 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x49, 0x53, 0x4b, 0x5f, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x44, - 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x4b, 0x5f, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x55, 0x53, - 0x45, 0x44, 0x10, 0x06, 0x2a, 0xa2, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x41, 0x72, - 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x4b, 0x53, - 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, - 0x4b, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, - 0x49, 0x44, 0x30, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x41, - 0x52, 0x52, 0x41, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x31, 0x10, - 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x35, 0x10, 0x03, 0x12, 0x1a, 0x0a, + 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, + 0xd3, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, + 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x41, 0x0a, 0x08, 0x6f, 0x6c, + 0x64, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x46, 0x0a, + 0x0b, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xcc, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, + 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x44, + 0x0a, 0x0a, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x61, 0x72, 0x72, 0x61, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, + 0x69, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x72, 0x65, 0x6e, 0x2a, 0x85, 0x01, 0x0a, 0x06, 0x44, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0d, 0x0a, 0x09, 0x44, 0x73, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x73, 0x48, 0x74, 0x74, 0x70, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x73, + 0x48, 0x74, 0x74, 0x70, 0x73, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x73, 0x53, 0x33, 0x10, + 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x73, 0x53, 0x46, 0x54, 0x50, 0x10, 0x04, 0x12, 0x17, 0x0a, + 0x13, 0x44, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x73, 0x41, 0x7a, 0x75, 0x72, + 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x73, 0x47, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x10, 0x07, 0x2a, 0x7d, 0x0a, 0x06, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x6d, 0x74, 0x55, 0x6e, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0x01, 0x12, + 0x08, 0x0a, 0x04, 0x51, 0x43, 0x4f, 0x57, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x51, 0x43, 0x4f, + 0x57, 0x32, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x56, 0x48, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, + 0x04, 0x56, 0x4d, 0x44, 0x4b, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x56, 0x41, 0x10, 0x06, + 0x12, 0x08, 0x0a, 0x04, 0x56, 0x48, 0x44, 0x58, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, + 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x08, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x53, 0x4f, + 0x10, 0x09, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x56, 0x43, 0x10, 0x0a, 0x2a, 0x56, 0x0a, 0x06, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x67, 0x74, 0x55, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x69, 0x73, 0x6b, 0x10, 0x01, 0x12, + 0x0a, 0x0a, 0x06, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x49, + 0x6e, 0x69, 0x74, 0x72, 0x64, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x61, 0x6d, 0x44, 0x69, + 0x73, 0x6b, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x10, 0x05, 0x2a, 0x49, 0x0a, 0x09, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x44, 0x52, 0x4f, 0x4d, 0x10, 0x01, 0x12, 0x07, 0x0a, + 0x03, 0x48, 0x44, 0x44, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, 0x54, 0x10, 0x03, 0x12, + 0x0d, 0x0a, 0x09, 0x48, 0x44, 0x44, 0x5f, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x04, 0x2a, 0x31, + 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x41, 0x50, 0x5f, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x41, 0x50, 0x5f, 0x39, 0x50, 0x10, + 0x01, 0x2a, 0x4e, 0x0a, 0x17, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, + 0x56, 0x43, 0x4f, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, + 0x0a, 0x0a, 0x56, 0x43, 0x4f, 0x54, 0x5f, 0x42, 0x4c, 0x41, 0x4e, 0x4b, 0x10, 0x01, 0x12, 0x11, + 0x0a, 0x0d, 0x56, 0x43, 0x4f, 0x54, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x10, + 0x02, 0x2a, 0xec, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, + 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4f, 0x53, + 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, + 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x10, 0x02, + 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x5a, 0x46, 0x53, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, + 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x5a, 0x46, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, + 0x45, 0x10, 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x44, 0x49, 0x52, 0x45, 0x43, + 0x54, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x55, 0x53, 0x45, 0x44, 0x10, 0x06, + 0x2a, 0xa2, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x41, 0x52, 0x52, + 0x41, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x41, + 0x52, 0x52, 0x41, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x30, 0x10, + 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x31, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x36, 0x10, 0x04, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, - 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, - 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x35, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, + 0x4b, 0x53, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, + 0x49, 0x44, 0x36, 0x10, 0x04, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, + 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1587,13 +1591,13 @@ var file_config_storage_proto_goTypes = []interface{}{ (*Volume)(nil), // 14: org.lfedge.eve.config.Volume (*DiskConfig)(nil), // 15: org.lfedge.eve.config.DiskConfig (*DisksConfig)(nil), // 16: org.lfedge.eve.config.DisksConfig - (*CipherBlock)(nil), // 17: org.lfedge.eve.config.CipherBlock + (*evecommon.CipherBlock)(nil), // 17: org.lfedge.eve.common.CipherBlock (*UUIDandVersion)(nil), // 18: org.lfedge.eve.config.UUIDandVersion (*evecommon.DiskDescription)(nil), // 19: org.lfedge.eve.common.DiskDescription } var file_config_storage_proto_depIdxs = []int32{ 0, // 0: org.lfedge.eve.config.DatastoreConfig.dType:type_name -> org.lfedge.eve.config.DsType - 17, // 1: org.lfedge.eve.config.DatastoreConfig.cipherData:type_name -> org.lfedge.eve.config.CipherBlock + 17, // 1: org.lfedge.eve.config.DatastoreConfig.cipherData:type_name -> org.lfedge.eve.common.CipherBlock 18, // 2: org.lfedge.eve.config.Image.uuidandversion:type_name -> org.lfedge.eve.config.UUIDandVersion 1, // 3: org.lfedge.eve.config.Image.iformat:type_name -> org.lfedge.eve.config.Format 8, // 4: org.lfedge.eve.config.Image.siginfo:type_name -> org.lfedge.eve.config.SignatureInfo @@ -1625,7 +1629,6 @@ func file_config_storage_proto_init() { return } file_config_devcommon_proto_init() - file_config_acipherinfo_proto_init() if !protoimpl.UnsafeEnabled { file_config_storage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignatureInfo); i { diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go index b0bb55c631..0b85ad203f 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/vm.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: config/vm.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/acipherinfo.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/acipherinfo.pb.go similarity index 51% rename from pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/acipherinfo.pb.go rename to pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/acipherinfo.pb.go index f26266da89..723cebf4fb 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/config/acipherinfo.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/acipherinfo.pb.go @@ -3,14 +3,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 -// source: config/acipherinfo.proto +// source: evecommon/acipherinfo.proto -package config +package evecommon import ( - evecommon "github.com/lf-edge/eve-api/go/evecommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -55,11 +54,11 @@ func (x KeyExchangeScheme) String() string { } func (KeyExchangeScheme) Descriptor() protoreflect.EnumDescriptor { - return file_config_acipherinfo_proto_enumTypes[0].Descriptor() + return file_evecommon_acipherinfo_proto_enumTypes[0].Descriptor() } func (KeyExchangeScheme) Type() protoreflect.EnumType { - return &file_config_acipherinfo_proto_enumTypes[0] + return &file_evecommon_acipherinfo_proto_enumTypes[0] } func (x KeyExchangeScheme) Number() protoreflect.EnumNumber { @@ -68,7 +67,7 @@ func (x KeyExchangeScheme) Number() protoreflect.EnumNumber { // Deprecated: Use KeyExchangeScheme.Descriptor instead. func (KeyExchangeScheme) EnumDescriptor() ([]byte, []int) { - return file_config_acipherinfo_proto_rawDescGZIP(), []int{0} + return file_evecommon_acipherinfo_proto_rawDescGZIP(), []int{0} } // Encryption Scheme for Cipher Payload @@ -102,11 +101,11 @@ func (x EncryptionScheme) String() string { } func (EncryptionScheme) Descriptor() protoreflect.EnumDescriptor { - return file_config_acipherinfo_proto_enumTypes[1].Descriptor() + return file_evecommon_acipherinfo_proto_enumTypes[1].Descriptor() } func (EncryptionScheme) Type() protoreflect.EnumType { - return &file_config_acipherinfo_proto_enumTypes[1] + return &file_evecommon_acipherinfo_proto_enumTypes[1] } func (x EncryptionScheme) Number() protoreflect.EnumNumber { @@ -115,7 +114,7 @@ func (x EncryptionScheme) Number() protoreflect.EnumNumber { // Deprecated: Use EncryptionScheme.Descriptor instead. func (EncryptionScheme) EnumDescriptor() ([]byte, []int) { - return file_config_acipherinfo_proto_rawDescGZIP(), []int{1} + return file_evecommon_acipherinfo_proto_rawDescGZIP(), []int{1} } // Cipher information to decrypt Sensitive Data @@ -127,11 +126,11 @@ type CipherContext struct { // cipher context id, key to this structure ContextId string `protobuf:"bytes,1,opt,name=contextId,proto3" json:"contextId,omitempty"` // algorithm used to compute hash for certificates - HashScheme evecommon.HashAlgorithm `protobuf:"varint,2,opt,name=hashScheme,proto3,enum=org.lfedge.eve.common.HashAlgorithm" json:"hashScheme,omitempty"` + HashScheme HashAlgorithm `protobuf:"varint,2,opt,name=hashScheme,proto3,enum=org.lfedge.eve.common.HashAlgorithm" json:"hashScheme,omitempty"` // for key exchange scheme, like ECDH etc. - KeyExchangeScheme KeyExchangeScheme `protobuf:"varint,3,opt,name=keyExchangeScheme,proto3,enum=org.lfedge.eve.config.KeyExchangeScheme" json:"keyExchangeScheme,omitempty"` + KeyExchangeScheme KeyExchangeScheme `protobuf:"varint,3,opt,name=keyExchangeScheme,proto3,enum=org.lfedge.eve.common.KeyExchangeScheme" json:"keyExchangeScheme,omitempty"` // for encrypting sensitive data, like AES256 etc. - EncryptionScheme EncryptionScheme `protobuf:"varint,4,opt,name=encryptionScheme,proto3,enum=org.lfedge.eve.config.EncryptionScheme" json:"encryptionScheme,omitempty"` + EncryptionScheme EncryptionScheme `protobuf:"varint,4,opt,name=encryptionScheme,proto3,enum=org.lfedge.eve.common.EncryptionScheme" json:"encryptionScheme,omitempty"` // device public certificate hash DeviceCertHash []byte `protobuf:"bytes,5,opt,name=deviceCertHash,proto3" json:"deviceCertHash,omitempty"` // controller certificate hash @@ -141,7 +140,7 @@ type CipherContext struct { func (x *CipherContext) Reset() { *x = CipherContext{} if protoimpl.UnsafeEnabled { - mi := &file_config_acipherinfo_proto_msgTypes[0] + mi := &file_evecommon_acipherinfo_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -154,7 +153,7 @@ func (x *CipherContext) String() string { func (*CipherContext) ProtoMessage() {} func (x *CipherContext) ProtoReflect() protoreflect.Message { - mi := &file_config_acipherinfo_proto_msgTypes[0] + mi := &file_evecommon_acipherinfo_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -167,7 +166,7 @@ func (x *CipherContext) ProtoReflect() protoreflect.Message { // Deprecated: Use CipherContext.ProtoReflect.Descriptor instead. func (*CipherContext) Descriptor() ([]byte, []int) { - return file_config_acipherinfo_proto_rawDescGZIP(), []int{0} + return file_evecommon_acipherinfo_proto_rawDescGZIP(), []int{0} } func (x *CipherContext) GetContextId() string { @@ -177,11 +176,11 @@ func (x *CipherContext) GetContextId() string { return "" } -func (x *CipherContext) GetHashScheme() evecommon.HashAlgorithm { +func (x *CipherContext) GetHashScheme() HashAlgorithm { if x != nil { return x.HashScheme } - return evecommon.HashAlgorithm(0) + return HashAlgorithm_HASH_ALGORITHM_INVALID } func (x *CipherContext) GetKeyExchangeScheme() KeyExchangeScheme { @@ -231,7 +230,7 @@ type CipherBlock struct { func (x *CipherBlock) Reset() { *x = CipherBlock{} if protoimpl.UnsafeEnabled { - mi := &file_config_acipherinfo_proto_msgTypes[1] + mi := &file_evecommon_acipherinfo_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -244,7 +243,7 @@ func (x *CipherBlock) String() string { func (*CipherBlock) ProtoMessage() {} func (x *CipherBlock) ProtoReflect() protoreflect.Message { - mi := &file_config_acipherinfo_proto_msgTypes[1] + mi := &file_evecommon_acipherinfo_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -257,7 +256,7 @@ func (x *CipherBlock) ProtoReflect() protoreflect.Message { // Deprecated: Use CipherBlock.ProtoReflect.Descriptor instead. func (*CipherBlock) Descriptor() ([]byte, []int) { - return file_config_acipherinfo_proto_rawDescGZIP(), []int{1} + return file_evecommon_acipherinfo_proto_rawDescGZIP(), []int{1} } func (x *CipherBlock) GetCipherContextId() string { @@ -311,7 +310,7 @@ type EncryptionBlock struct { func (x *EncryptionBlock) Reset() { *x = EncryptionBlock{} if protoimpl.UnsafeEnabled { - mi := &file_config_acipherinfo_proto_msgTypes[2] + mi := &file_evecommon_acipherinfo_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -324,7 +323,7 @@ func (x *EncryptionBlock) String() string { func (*EncryptionBlock) ProtoMessage() {} func (x *EncryptionBlock) ProtoReflect() protoreflect.Message { - mi := &file_config_acipherinfo_proto_msgTypes[2] + mi := &file_evecommon_acipherinfo_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -337,7 +336,7 @@ func (x *EncryptionBlock) ProtoReflect() protoreflect.Message { // Deprecated: Use EncryptionBlock.ProtoReflect.Descriptor instead. func (*EncryptionBlock) Descriptor() ([]byte, []int) { - return file_config_acipherinfo_proto_rawDescGZIP(), []int{2} + return file_evecommon_acipherinfo_proto_rawDescGZIP(), []int{2} } func (x *EncryptionBlock) GetDsAPIKey() string { @@ -389,106 +388,107 @@ func (x *EncryptionBlock) GetCellularNetPassword() string { return "" } -var File_config_acipherinfo_proto protoreflect.FileDescriptor - -var file_config_acipherinfo_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x61, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x1a, 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf8, 0x02, 0x0a, - 0x0d, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x0a, - 0x68, 0x61, 0x73, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x41, 0x6c, 0x67, - 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x68, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x53, 0x0a, 0x10, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x10, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, - 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, - 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, - 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, 0xa5, 0x01, 0x0a, 0x0b, 0x43, 0x69, 0x70, 0x68, - 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, - 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, - 0x78, 0x74, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, - 0xab, 0x02, 0x0a, 0x0f, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x73, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x73, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x22, 0x0a, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x55, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, - 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4e, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x65, 0x6c, - 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, - 0x61, 0x72, 0x4e, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2a, 0x2f, 0x0a, - 0x11, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x45, 0x41, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, - 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x45, 0x41, 0x5f, 0x45, 0x43, 0x44, 0x48, 0x10, 0x01, 0x2a, 0x33, - 0x0a, 0x10, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x41, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, - 0x12, 0x0a, 0x0e, 0x53, 0x41, 0x5f, 0x41, 0x45, 0x53, 0x5f, 0x32, 0x35, 0x36, 0x5f, 0x43, 0x46, - 0x42, 0x10, 0x01, 0x42, 0x3d, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x24, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, - 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +var File_evecommon_acipherinfo_proto protoreflect.FileDescriptor + +var file_evecommon_acipherinfo_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x63, 0x69, 0x70, + 0x68, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xf8, 0x02, 0x0a, 0x0d, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, + 0x44, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x48, 0x61, 0x73, 0x68, + 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x68, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x53, 0x0a, + 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, 0xa5, 0x01, 0x0a, 0x0b, 0x43, + 0x69, 0x70, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6c, 0x65, 0x61, + 0x72, 0x54, 0x65, 0x78, 0x74, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x53, 0x68, 0x61, 0x32, + 0x35, 0x36, 0x22, 0xab, 0x02, 0x0a, 0x0f, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x73, 0x41, 0x50, 0x49, 0x4b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x73, 0x41, 0x50, 0x49, 0x4b, + 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x55, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x69, 0x66, 0x69, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x69, + 0x66, 0x69, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x72, + 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, + 0x72, 0x4e, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x15, + 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x65, 0x6c, + 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4e, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x2a, 0x2f, 0x0a, 0x11, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x45, 0x41, 0x5f, 0x4e, 0x4f, 0x4e, + 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x45, 0x41, 0x5f, 0x45, 0x43, 0x44, 0x48, 0x10, + 0x01, 0x2a, 0x33, 0x0a, 0x10, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x41, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, + 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x41, 0x5f, 0x41, 0x45, 0x53, 0x5f, 0x32, 0x35, 0x36, + 0x5f, 0x43, 0x46, 0x42, 0x10, 0x01, 0x42, 0x4f, 0x0a, 0x15, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, + 0x0b, 0x41, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x01, 0x5a, 0x27, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, + 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x76, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_config_acipherinfo_proto_rawDescOnce sync.Once - file_config_acipherinfo_proto_rawDescData = file_config_acipherinfo_proto_rawDesc + file_evecommon_acipherinfo_proto_rawDescOnce sync.Once + file_evecommon_acipherinfo_proto_rawDescData = file_evecommon_acipherinfo_proto_rawDesc ) -func file_config_acipherinfo_proto_rawDescGZIP() []byte { - file_config_acipherinfo_proto_rawDescOnce.Do(func() { - file_config_acipherinfo_proto_rawDescData = protoimpl.X.CompressGZIP(file_config_acipherinfo_proto_rawDescData) +func file_evecommon_acipherinfo_proto_rawDescGZIP() []byte { + file_evecommon_acipherinfo_proto_rawDescOnce.Do(func() { + file_evecommon_acipherinfo_proto_rawDescData = protoimpl.X.CompressGZIP(file_evecommon_acipherinfo_proto_rawDescData) }) - return file_config_acipherinfo_proto_rawDescData -} - -var file_config_acipherinfo_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_config_acipherinfo_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_config_acipherinfo_proto_goTypes = []interface{}{ - (KeyExchangeScheme)(0), // 0: org.lfedge.eve.config.KeyExchangeScheme - (EncryptionScheme)(0), // 1: org.lfedge.eve.config.EncryptionScheme - (*CipherContext)(nil), // 2: org.lfedge.eve.config.CipherContext - (*CipherBlock)(nil), // 3: org.lfedge.eve.config.CipherBlock - (*EncryptionBlock)(nil), // 4: org.lfedge.eve.config.EncryptionBlock - (evecommon.HashAlgorithm)(0), // 5: org.lfedge.eve.common.HashAlgorithm -} -var file_config_acipherinfo_proto_depIdxs = []int32{ - 5, // 0: org.lfedge.eve.config.CipherContext.hashScheme:type_name -> org.lfedge.eve.common.HashAlgorithm - 0, // 1: org.lfedge.eve.config.CipherContext.keyExchangeScheme:type_name -> org.lfedge.eve.config.KeyExchangeScheme - 1, // 2: org.lfedge.eve.config.CipherContext.encryptionScheme:type_name -> org.lfedge.eve.config.EncryptionScheme + return file_evecommon_acipherinfo_proto_rawDescData +} + +var file_evecommon_acipherinfo_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_evecommon_acipherinfo_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_evecommon_acipherinfo_proto_goTypes = []interface{}{ + (KeyExchangeScheme)(0), // 0: org.lfedge.eve.common.KeyExchangeScheme + (EncryptionScheme)(0), // 1: org.lfedge.eve.common.EncryptionScheme + (*CipherContext)(nil), // 2: org.lfedge.eve.common.CipherContext + (*CipherBlock)(nil), // 3: org.lfedge.eve.common.CipherBlock + (*EncryptionBlock)(nil), // 4: org.lfedge.eve.common.EncryptionBlock + (HashAlgorithm)(0), // 5: org.lfedge.eve.common.HashAlgorithm +} +var file_evecommon_acipherinfo_proto_depIdxs = []int32{ + 5, // 0: org.lfedge.eve.common.CipherContext.hashScheme:type_name -> org.lfedge.eve.common.HashAlgorithm + 0, // 1: org.lfedge.eve.common.CipherContext.keyExchangeScheme:type_name -> org.lfedge.eve.common.KeyExchangeScheme + 1, // 2: org.lfedge.eve.common.CipherContext.encryptionScheme:type_name -> org.lfedge.eve.common.EncryptionScheme 3, // [3:3] is the sub-list for method output_type 3, // [3:3] is the sub-list for method input_type 3, // [3:3] is the sub-list for extension type_name @@ -496,13 +496,14 @@ var file_config_acipherinfo_proto_depIdxs = []int32{ 0, // [0:3] is the sub-list for field type_name } -func init() { file_config_acipherinfo_proto_init() } -func file_config_acipherinfo_proto_init() { - if File_config_acipherinfo_proto != nil { +func init() { file_evecommon_acipherinfo_proto_init() } +func file_evecommon_acipherinfo_proto_init() { + if File_evecommon_acipherinfo_proto != nil { return } + file_evecommon_evecommon_proto_init() if !protoimpl.UnsafeEnabled { - file_config_acipherinfo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_evecommon_acipherinfo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CipherContext); i { case 0: return &v.state @@ -514,7 +515,7 @@ func file_config_acipherinfo_proto_init() { return nil } } - file_config_acipherinfo_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_evecommon_acipherinfo_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CipherBlock); i { case 0: return &v.state @@ -526,7 +527,7 @@ func file_config_acipherinfo_proto_init() { return nil } } - file_config_acipherinfo_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_evecommon_acipherinfo_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EncryptionBlock); i { case 0: return &v.state @@ -543,19 +544,19 @@ func file_config_acipherinfo_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_config_acipherinfo_proto_rawDesc, + RawDescriptor: file_evecommon_acipherinfo_proto_rawDesc, NumEnums: 2, NumMessages: 3, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_config_acipherinfo_proto_goTypes, - DependencyIndexes: file_config_acipherinfo_proto_depIdxs, - EnumInfos: file_config_acipherinfo_proto_enumTypes, - MessageInfos: file_config_acipherinfo_proto_msgTypes, + GoTypes: file_evecommon_acipherinfo_proto_goTypes, + DependencyIndexes: file_evecommon_acipherinfo_proto_depIdxs, + EnumInfos: file_evecommon_acipherinfo_proto_enumTypes, + MessageInfos: file_evecommon_acipherinfo_proto_msgTypes, }.Build() - File_config_acipherinfo_proto = out.File - file_config_acipherinfo_proto_rawDesc = nil - file_config_acipherinfo_proto_goTypes = nil - file_config_acipherinfo_proto_depIdxs = nil + File_evecommon_acipherinfo_proto = out.File + file_evecommon_acipherinfo_proto_rawDesc = nil + file_evecommon_acipherinfo_proto_goTypes = nil + file_evecommon_acipherinfo_proto_depIdxs = nil } diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/devmodelcommon.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/devmodelcommon.pb.go index a5fa083a16..0883fd8afb 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/devmodelcommon.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/devmodelcommon.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: evecommon/devmodelcommon.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/evecommon.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/evecommon.pb.go index 0acd75af0b..c046935781 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/evecommon.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/evecommon/evecommon.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: evecommon/evecommon.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go index 1d6c641cb1..cc7efc3441 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/info.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: info/info.proto @@ -91,14 +91,16 @@ const ( ZInfoTypes_ZiApp ZInfoTypes = 3 // deprecated = 4; // deprecated = 5; - ZInfoTypes_ZiNetworkInstance ZInfoTypes = 6 - ZInfoTypes_ZiVolume ZInfoTypes = 7 - ZInfoTypes_ZiContentTree ZInfoTypes = 8 - ZInfoTypes_ZiBlobList ZInfoTypes = 9 - ZInfoTypes_ZiAppInstMetaData ZInfoTypes = 10 - ZInfoTypes_ZiHardware ZInfoTypes = 11 - ZInfoTypes_ZiEdgeview ZInfoTypes = 12 - ZInfoTypes_ZiLocation ZInfoTypes = 13 + ZInfoTypes_ZiNetworkInstance ZInfoTypes = 6 + ZInfoTypes_ZiVolume ZInfoTypes = 7 + ZInfoTypes_ZiContentTree ZInfoTypes = 8 + ZInfoTypes_ZiBlobList ZInfoTypes = 9 + ZInfoTypes_ZiAppInstMetaData ZInfoTypes = 10 + ZInfoTypes_ZiHardware ZInfoTypes = 11 + ZInfoTypes_ZiEdgeview ZInfoTypes = 12 + ZInfoTypes_ZiLocation ZInfoTypes = 13 + ZInfoTypes_ZiPatchEnvelope ZInfoTypes = 14 + ZInfoTypes_ZiOpaqueAppInstanceStatus ZInfoTypes = 15 ) // Enum value maps for ZInfoTypes. @@ -115,19 +117,23 @@ var ( 11: "ZiHardware", 12: "ZiEdgeview", 13: "ZiLocation", + 14: "ZiPatchEnvelope", + 15: "ZiOpaqueAppInstanceStatus", } ZInfoTypes_value = map[string]int32{ - "ZiNop": 0, - "ZiDevice": 1, - "ZiApp": 3, - "ZiNetworkInstance": 6, - "ZiVolume": 7, - "ZiContentTree": 8, - "ZiBlobList": 9, - "ZiAppInstMetaData": 10, - "ZiHardware": 11, - "ZiEdgeview": 12, - "ZiLocation": 13, + "ZiNop": 0, + "ZiDevice": 1, + "ZiApp": 3, + "ZiNetworkInstance": 6, + "ZiVolume": 7, + "ZiContentTree": 8, + "ZiBlobList": 9, + "ZiAppInstMetaData": 10, + "ZiHardware": 11, + "ZiEdgeview": 12, + "ZiLocation": 13, + "ZiPatchEnvelope": 14, + "ZiOpaqueAppInstanceStatus": 15, } ) @@ -4205,7 +4211,7 @@ type ZInfoDevice struct { // The global_profile from the controller is not echoed in this field. LocalProfile string `protobuf:"bytes,45,opt,name=local_profile,json=localProfile,proto3" json:"local_profile,omitempty"` MaintenanceModeReasons []MaintenanceModeReason `protobuf:"varint,46,rep,packed,name=maintenance_mode_reasons,json=maintenanceModeReasons,proto3,enum=org.lfedge.eve.info.MaintenanceModeReason" json:"maintenance_mode_reasons,omitempty"` - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in info/info.proto. DormantTime string `protobuf:"bytes,47,opt,name=dormant_time,json=dormantTime,proto3" json:"dormant_time,omitempty"` StorageInfo []*StorageInfo `protobuf:"bytes,48,rep,name=storage_info,json=storageInfo,proto3" json:"storage_info,omitempty"` // shutdown command counter from EdgeDevConfig last processed by eve @@ -4214,6 +4220,8 @@ type ZInfoDevice struct { AttestationInfo *AttestationInfo `protobuf:"bytes,50,opt,name=attestation_info,json=attestationInfo,proto3" json:"attestation_info,omitempty"` // Capability indicating which new EdgeDevConfig fields which are supported ApiCapability APICapability `protobuf:"varint,51,opt,name=api_capability,json=apiCapability,proto3,enum=org.lfedge.eve.info.APICapability" json:"api_capability,omitempty"` + // Reports the remote access status + RemoteAccessDisabled bool `protobuf:"varint,52,opt,name=remote_access_disabled,json=remoteAccessDisabled,proto3" json:"remote_access_disabled,omitempty"` } func (x *ZInfoDevice) Reset() { @@ -4535,7 +4543,7 @@ func (x *ZInfoDevice) GetMaintenanceModeReasons() []MaintenanceModeReason { return nil } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in info/info.proto. func (x *ZInfoDevice) GetDormantTime() string { if x != nil { return x.DormantTime @@ -4571,6 +4579,13 @@ func (x *ZInfoDevice) GetApiCapability() APICapability { return APICapability_API_CAPABILITY_UNSPECIFIED } +func (x *ZInfoDevice) GetRemoteAccessDisabled() bool { + if x != nil { + return x.RemoteAccessDisabled + } + return false +} + // Information about attestation process type AttestationInfo struct { state protoimpl.MessageState @@ -5681,6 +5696,8 @@ type ZInfoApp struct { Network []*ZInfoNetwork `protobuf:"bytes,16,rep,name=network,proto3" json:"network,omitempty"` // up/down; allocated IP VolumeRefs []string `protobuf:"bytes,17,rep,name=volumeRefs,proto3" json:"volumeRefs,omitempty"` // volume UUIDs Snapshots []*ZInfoSnapshot `protobuf:"bytes,18,rep,name=snapshots,proto3" json:"snapshots,omitempty"` // optional field, used to send list of snapshots on device + // optional; information about usage of every patchEnvelope assigned to app + PatchEnvelope []*ZInfoPatchEnvelopeUsage `protobuf:"bytes,19,rep,name=patchEnvelope,proto3" json:"patchEnvelope,omitempty"` } func (x *ZInfoApp) Reset() { @@ -5799,6 +5816,13 @@ func (x *ZInfoApp) GetSnapshots() []*ZInfoSnapshot { return nil } +func (x *ZInfoApp) GetPatchEnvelope() []*ZInfoPatchEnvelopeUsage { + if x != nil { + return x.PatchEnvelope + } + return nil +} + // tunnel link details type ZInfoVpnLinkInfo struct { state protoimpl.MessageState @@ -8018,7 +8042,7 @@ var file_info_info_proto_rawDesc = []byte{ 0x69, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x22, 0xcf, 0x14, 0x0a, 0x0b, 0x5a, 0x49, 0x6e, 0x66, + 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x22, 0x85, 0x15, 0x0a, 0x0b, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x41, 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x41, 0x72, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x70, 0x75, @@ -8183,906 +8207,917 @@ var file_info_info_proto_rawDesc = []byte{ 0x18, 0x33, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x50, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x43, - 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x84, 0x01, 0x0a, 0x0f, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, + 0x84, 0x01, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x34, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x76, 0x0a, 0x11, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd1, + 0x02, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x3e, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, + 0x3a, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0d, 0x6c, + 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, + 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x35, 0x0a, + 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, - 0x66, 0x6f, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x76, 0x0a, 0x11, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x0c, 0x74, 0x69, 0x6d, - 0x65, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x74, 0x69, 0x6d, - 0x65, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x6c, 0x61, 0x73, - 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, - 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xef, 0x06, 0x0a, - 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, - 0x66, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x66, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x67, 0x6d, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x67, 0x6d, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, - 0x72, 0x65, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x68, 0x63, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x68, 0x63, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x74, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x74, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, - 0x22, 0x0a, 0x0c, 0x64, 0x68, 0x63, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x6f, 0x77, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x68, 0x63, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x4c, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x68, 0x63, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x48, 0x69, 0x67, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x68, 0x63, 0x70, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x69, 0x67, 0x68, 0x12, 0x36, 0x0a, 0x05, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x50, - 0x72, 0x6f, 0x78, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x49, - 0x50, 0x41, 0x64, 0x64, 0x72, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x49, 0x50, - 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, - 0x03, 0x64, 0x6e, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, + 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0xef, 0x06, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x66, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x69, 0x66, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x69, 0x73, 0x4d, 0x67, 0x6d, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, + 0x73, 0x4d, 0x67, 0x6d, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x72, 0x65, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x68, 0x63, + 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x68, 0x63, + 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x74, 0x70, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x74, 0x70, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6e, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x68, 0x63, 0x70, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x4c, 0x6f, 0x77, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x68, 0x63, + 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x68, 0x63, + 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x69, 0x67, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x64, 0x68, 0x63, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x69, 0x67, 0x68, 0x12, + 0x36, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x05, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x41, 0x64, + 0x64, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x73, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x18, 0x18, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x03, 0x64, 0x6e, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x4e, 0x53, 0x52, + 0x03, 0x64, 0x6e, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x02, 0x75, 0x70, 0x12, 0x37, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x6f, + 0x4c, 0x6f, 0x63, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, + 0x03, 0x65, 0x72, 0x72, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x4e, 0x53, 0x52, 0x03, 0x64, 0x6e, 0x73, 0x12, 0x0e, - 0x0a, 0x02, 0x75, 0x70, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x37, - 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x6f, 0x4c, 0x6f, 0x63, 0x52, 0x08, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x1d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x3d, 0x0a, 0x05, 0x75, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x50, 0x68, 0x79, 0x49, 0x6f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x55, 0x55, 0x49, 0x44, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, 0x55, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x73, 0x74, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x4c, - 0x0a, 0x0f, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x57, 0x69, - 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x77, 0x69, - 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x6d, 0x74, 0x75, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0xf6, - 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, - 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, - 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x55, 0x52, 0x4c, 0x12, 0x18, 0x0a, - 0x07, 0x77, 0x70, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x77, 0x70, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x22, 0x4c, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, - 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, - 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x57, 0x69, 0x72, - 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x40, 0x0a, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, - 0x72, 0x22, 0xf1, 0x02, 0x0a, 0x0f, 0x5a, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, - 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x73, 0x69, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x73, 0x69, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x44, 0x0a, 0x09, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, + 0x3d, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x12, 0x4f, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x52, 0x61, 0x64, 0x69, 0x6f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x65, 0x63, 0x68, 0x6e, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x61, - 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x62, 0x65, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xdc, 0x04, 0x0a, 0x0a, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x44, - 0x65, 0x76, 0x53, 0x57, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, - 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x72, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, - 0x6e, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x05, 0x73, 0x77, 0x45, - 0x72, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x73, 0x77, 0x45, 0x72, 0x72, 0x12, - 0x2a, 0x0a, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x75, - 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, - 0x74, 0x72, 0x12, 0x42, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x61, 0x73, 0x65, - 0x4f, 0x73, 0x53, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x73, 0x75, 0x62, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x11, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x02, 0x0a, 0x0d, - 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x68, 0x79, 0x49, 0x6f, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, 0x55, 0x49, 0x44, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, 0x55, 0x49, 0x44, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, + 0x63, 0x6f, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, + 0x6e, 0x66, 0x6f, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x0e, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x6d, 0x74, 0x75, 0x22, 0xf6, 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x12, + 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x61, 0x63, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, + 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x55, 0x52, 0x4c, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x70, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x70, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x22, 0x4c, 0x0a, + 0x0a, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0e, + 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, - 0x66, 0x6f, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x5f, 0x65, 0x72, - 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, 0x6e, 0x61, 0x70, 0x45, 0x72, 0x72, - 0x22, 0xca, 0x04, 0x0a, 0x08, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x70, 0x70, 0x12, 0x14, 0x0a, - 0x05, 0x41, 0x70, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, - 0x70, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x41, 0x70, 0x70, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x41, 0x70, - 0x70, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x41, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x57, 0x52, - 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, - 0x08, 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x62, 0x6f, 0x6f, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x10, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x69, 0x6f, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, - 0x10, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x36, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x45, 0x72, 0x72, 0x18, 0x0e, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x06, 0x61, 0x70, 0x70, 0x45, 0x72, 0x72, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, - 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, - 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x66, 0x6f, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x43, + 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x63, + 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x22, 0xf1, 0x02, 0x0a, 0x0f, 0x5a, 0x43, 0x65, 0x6c, + 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, + 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x69, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x69, 0x6d, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x44, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x43, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x0b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, + 0x6f, 0x62, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xdc, 0x04, 0x0a, 0x0a, + 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x76, 0x53, 0x57, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, + 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x34, 0x0a, 0x05, 0x73, 0x77, 0x45, 0x72, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x22, 0x5e, 0x0a, - 0x10, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x69, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x70, 0x69, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x65, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x02, - 0x0a, 0x0c, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x71, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x72, 0x65, 0x71, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x73, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x73, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, + 0x73, 0x77, 0x45, 0x72, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x61, 0x73, 0x65, + 0x4f, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x53, 0x74, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x12, 0x42, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, + 0x6f, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, 0x53, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x09, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x11, + 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x73, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x5a, + 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x92, 0x02, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, + 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x73, + 0x6e, 0x61, 0x70, 0x5f, 0x65, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, + 0x6e, 0x61, 0x70, 0x45, 0x72, 0x72, 0x22, 0x9e, 0x05, 0x0a, 0x08, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x41, 0x70, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x41, 0x70, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x41, 0x70, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x70, 0x70, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, - 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x05, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x6e, 0x66, 0x6f, 0x53, 0x57, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x08, 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x08, 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x10, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x69, 0x6f, 0x42, + 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x10, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x45, 0x72, + 0x72, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x61, 0x70, 0x70, 0x45, 0x72, 0x72, 0x12, + 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, + 0x6f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, 0x73, 0x18, + 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x66, + 0x73, 0x12, 0x40, 0x0a, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, - 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0x4e, 0x0a, 0x10, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x45, 0x6e, - 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x22, 0xe7, 0x02, 0x0a, 0x0c, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x43, - 0x6f, 0x6e, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, - 0x6b, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6b, 0x65, 0x73, 0x12, - 0x38, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0d, 0x70, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, + 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, + 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x63, 0x68, 0x45, + 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x70, 0x69, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x69, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x02, 0x0a, 0x0c, 0x5a, 0x49, 0x6e, 0x66, + 0x6f, 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x72, 0x65, 0x71, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x71, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x65, 0x73, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x65, 0x73, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, + 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, + 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x3b, 0x0a, 0x05, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x6c, 0x49, 0x6e, - 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, + 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x4e, 0x0a, 0x10, + 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0xe7, 0x02, 0x0a, + 0x0c, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, + 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x73, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6b, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6b, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, - 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x05, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x05, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, - 0x6f, 0x56, 0x70, 0x6e, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x05, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, - 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0xa7, 0x01, 0x0a, - 0x08, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x73, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, - 0x73, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, - 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, - 0x35, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, - 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x6e, 0x22, 0xb4, 0x07, 0x0a, 0x14, 0x5a, 0x49, 0x6e, 0x66, 0x6f, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x26, 0x0a, - 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0b, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x40, 0x0a, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, - 0x6f, 0x53, 0x57, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, - 0x6e, 0x6b, 0x49, 0x6e, 0x74, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x74, 0x66, 0x12, - 0x2e, 0x0a, 0x12, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, - 0x0a, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x50, 0x41, 0x64, 0x64, - 0x72, 0x12, 0x50, 0x0a, 0x0d, 0x69, 0x70, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x6e, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x05, 0x6c, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x3b, 0x0a, 0x05, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x45, 0x6e, + 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x05, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x0a, + 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, + 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, + 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x08, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x56, 0x70, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x73, 0x65, 0x64, 0x12, 0x2a, 0x0a, + 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, + 0x6e, 0x67, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x04, 0x63, 0x6f, 0x6e, + 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, + 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x6e, + 0x22, 0xb4, 0x07, 0x0a, 0x14, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x75, + 0x70, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x75, 0x70, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x6f, 0x66, + 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x57, 0x52, 0x0c, 0x73, + 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x74, 0x66, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, + 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x74, 0x66, 0x12, 0x2e, 0x0a, 0x12, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, + 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x72, 0x69, + 0x64, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x72, + 0x69, 0x64, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x69, + 0x64, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x12, 0x50, 0x0a, 0x0d, 0x69, + 0x70, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x6d, 0x65, 0x74, 0x49, 0x50, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, + 0x69, 0x70, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x0a, + 0x04, 0x76, 0x69, 0x66, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, + 0x6f, 0x2e, 0x5a, 0x6d, 0x65, 0x74, 0x56, 0x69, 0x66, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x76, + 0x69, 0x66, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x70, 0x76, 0x34, 0x45, 0x69, 0x64, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x70, 0x76, 0x34, 0x45, 0x69, 0x64, 0x12, 0x4a, 0x0a, + 0x10, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x69, + 0x6f, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x10, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, - 0x6d, 0x65, 0x74, 0x49, 0x50, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x69, 0x70, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x04, 0x76, 0x69, 0x66, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x6d, 0x65, 0x74, 0x56, 0x69, 0x66, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x76, 0x69, 0x66, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x70, 0x76, - 0x34, 0x45, 0x69, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x70, 0x76, 0x34, - 0x45, 0x69, 0x64, 0x12, 0x4a, 0x0a, 0x10, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, - 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x69, 0x6f, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x10, 0x61, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x35, 0x0a, 0x05, 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x48, 0x00, 0x52, - 0x05, 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x45, 0x72, 0x72, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x72, 0x72, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x29, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x18, 0x10, 0x19, 0x22, 0xb7, 0x01, - 0x0a, 0x09, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x76, 0x69, 0x6e, 0x66, 0x6f, + 0x12, 0x3e, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x72, 0x72, 0x18, 0x28, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x72, 0x72, + 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x4a, 0x04, 0x08, 0x18, 0x10, 0x19, 0x22, 0xb7, 0x01, 0x0a, 0x09, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x59, 0x0a, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, - 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, + 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x52, + 0x65, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x59, 0x0a, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x53, + 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x53, + 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x63, 0x75, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x8b, 0x03, 0x0a, + 0x0b, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, + 0x6f, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, + 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, + 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x12, + 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x36, 0x0a, 0x10, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x22, + 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x22, 0x8b, 0x03, 0x0a, 0x0b, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x42, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, - 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x45, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x45, 0x72, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x36, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x53, - 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xc9, 0x03, 0x0a, 0x10, 0x5a, 0x49, 0x6e, - 0x66, 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x12, 0x43, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x65, 0x73, 0x22, 0xc9, 0x03, 0x0a, 0x10, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x68, 0x61, 0x32, 0x35, 0x36, 0x12, 0x43, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, + 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x75, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb5, + 0x02, 0x0a, 0x09, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, + 0x61, 0x32, 0x35, 0x36, 0x12, 0x43, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x75, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x12, 0x34, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, - 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x65, - 0x72, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x2a, 0x0a, - 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x4c, 0x69, 0x73, - 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x53, 0x68, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb5, 0x02, 0x0a, 0x09, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x6c, - 0x6f, 0x62, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x12, 0x43, 0x0a, 0x09, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, - 0x34, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x03, 0x65, 0x72, 0x72, 0x22, 0x43, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x6c, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, + 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x22, 0xc2, 0x07, 0x0a, 0x08, + 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x73, 0x67, 0x12, 0x35, 0x0a, 0x05, 0x7a, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, + 0x6e, 0x66, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, 0x7a, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x64, 0x65, 0x76, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x64, 0x65, 0x76, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x05, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, + 0x35, 0x0a, 0x05, 0x61, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, - 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, - 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x72, - 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, - 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x65, 0x72, 0x72, 0x22, 0x43, 0x0a, 0x0d, - 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, - 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x04, 0x62, 0x6c, 0x6f, - 0x62, 0x22, 0xc2, 0x07, 0x0a, 0x08, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x73, 0x67, 0x12, 0x35, - 0x0a, 0x05, 0x7a, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, - 0x7a, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x76, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x76, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x05, 0x64, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x70, 0x70, 0x48, 0x00, 0x52, + 0x05, 0x61, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x43, 0x0a, 0x06, 0x6e, 0x69, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, + 0x66, 0x6f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x69, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x05, 0x76, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, - 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x0a, 0x05, 0x61, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x05, + 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x05, 0x63, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, - 0x41, 0x70, 0x70, 0x48, 0x00, 0x52, 0x05, 0x61, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x43, 0x0a, 0x06, - 0x6e, 0x69, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, - 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x69, 0x69, 0x6e, 0x66, - 0x6f, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x48, 0x00, 0x52, 0x05, 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x05, 0x63, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, - 0x65, 0x48, 0x00, 0x52, 0x05, 0x63, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x05, 0x62, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, - 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, - 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x05, 0x62, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x45, 0x0a, 0x07, 0x61, 0x6d, 0x64, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x48, 0x00, 0x52, 0x05, 0x63, + 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x05, 0x62, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x6c, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x62, 0x69, 0x6e, 0x66, 0x6f, + 0x12, 0x45, 0x0a, 0x07, 0x61, 0x6d, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x70, 0x70, + 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x07, + 0x61, 0x6d, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, - 0x6e, 0x66, 0x6f, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x07, 0x61, 0x6d, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, - 0x06, 0x65, 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x06, 0x68, - 0x77, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, - 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x48, - 0x00, 0x52, 0x06, 0x68, 0x77, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x07, 0x6c, 0x6f, 0x63, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x09, 0x70, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, - 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, - 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x65, 0x0a, 0x13, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x41, 0x70, 0x70, 0x49, - 0x6e, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, - 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x48, 0x00, 0x52, 0x13, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x41, 0x70, 0x70, 0x49, - 0x6e, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x0b, 0x61, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x76, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x48, 0x57, 0x41, 0x73, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x64, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x48, 0x57, 0x41, 0x73, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x64, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x49, 0x4f, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x49, 0x4f, - 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7c, - 0x0a, 0x14, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, - 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, - 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe2, 0x01, 0x0a, - 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x3b, - 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x76, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x61, 0x70, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x41, 0x70, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x78, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x78, - 0x74, 0x22, 0xe8, 0x03, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x74, 0x63, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x74, - 0x63, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x5a, 0x0a, 0x16, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x2e, 0x4c, 0x6f, 0x63, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, - 0x15, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x6c, 0x69, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x56, 0x0a, 0x14, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x06, + 0x6e, 0x66, 0x6f, 0x45, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x65, + 0x76, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x06, 0x68, 0x77, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, + 0x6f, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x06, 0x68, 0x77, 0x69, + 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x69, + 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x09, 0x70, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x49, 0x6e, + 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x48, + 0x00, 0x52, 0x09, 0x70, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x65, 0x0a, 0x13, + 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, + 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x13, + 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x0b, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, + 0x70, 0x42, 0x0d, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x22, 0x76, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x3a, 0x0a, 0x18, 0x48, 0x57, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x18, 0x48, 0x57, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x10, + 0x49, 0x4f, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x49, 0x4f, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7c, 0x0a, 0x14, 0x5a, 0x49, 0x6e, 0x66, + 0x6f, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe2, 0x01, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x45, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x3b, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, + 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, + 0x76, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x22, 0xe8, 0x03, 0x0a, 0x0d, + 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, + 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x6f, + 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, + 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, + 0x75, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x74, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x74, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x5a, 0x0a, 0x16, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, + 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x52, 0x65, - 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x13, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x35, - 0x0a, 0x16, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x63, - 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x65, 0x72, 0x74, - 0x61, 0x69, 0x6e, 0x74, 0x79, 0x12, 0x31, 0x0a, 0x14, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x5f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x13, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x6e, 0x63, - 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x6f, 0x67, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2a, 0x75, 0x0a, 0x11, - 0x44, 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, - 0x65, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x70, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x47, 0x61, 0x75, 0x67, 0x65, 0x10, - 0x01, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, - 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x44, - 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x10, 0x03, 0x2a, 0xbf, 0x01, 0x0a, 0x0a, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x5a, 0x69, 0x4e, 0x6f, 0x70, 0x10, 0x00, 0x12, 0x0c, 0x0a, - 0x08, 0x5a, 0x69, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x5a, - 0x69, 0x41, 0x70, 0x70, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x5a, 0x69, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x10, 0x06, 0x12, 0x0c, 0x0a, - 0x08, 0x5a, 0x69, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x5a, - 0x69, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x10, 0x08, 0x12, 0x0e, - 0x0a, 0x0a, 0x5a, 0x69, 0x42, 0x6c, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x15, - 0x0a, 0x11, 0x5a, 0x69, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, - 0x61, 0x74, 0x61, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x5a, 0x69, 0x48, 0x61, 0x72, 0x64, 0x77, - 0x61, 0x72, 0x65, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x5a, 0x69, 0x45, 0x64, 0x67, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x10, 0x0c, 0x12, 0x0e, 0x0a, 0x0a, 0x5a, 0x69, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x10, 0x0d, 0x2a, 0xf4, 0x02, 0x0a, 0x08, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, - 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, - 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x45, 0x44, - 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x05, - 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x0b, 0x0a, - 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x41, - 0x4c, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x41, 0x4c, 0x54, 0x45, - 0x44, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x55, 0x52, 0x47, 0x49, 0x4e, 0x47, 0x10, 0x0b, - 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x49, 0x4e, 0x47, 0x5f, 0x54, 0x41, - 0x47, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x44, 0x5f, - 0x54, 0x41, 0x47, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, - 0x47, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0e, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0f, 0x12, 0x0d, - 0x0a, 0x09, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x49, 0x4e, 0x47, 0x10, 0x10, 0x12, 0x0c, 0x0a, - 0x08, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x11, 0x12, 0x0b, 0x0a, 0x07, 0x4c, - 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x12, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f, 0x41, 0x44, - 0x45, 0x44, 0x10, 0x13, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x57, 0x41, 0x49, 0x54, 0x4e, 0x45, 0x54, - 0x57, 0x4f, 0x52, 0x4b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x14, 0x12, 0x09, - 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x15, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x10, 0x16, 0x2a, 0x99, 0x02, 0x0a, - 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x4e, 0x54, 0x49, 0x54, - 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x12, 0x0a, 0x0e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4f, - 0x53, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x59, - 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x41, 0x44, 0x41, 0x50, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x10, - 0x0a, 0x0c, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x03, - 0x12, 0x16, 0x0a, 0x12, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4e, 0x54, 0x49, - 0x54, 0x59, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, - 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x4f, 0x52, 0x54, - 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x45, 0x54, - 0x57, 0x4f, 0x52, 0x4b, 0x10, 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, - 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, - 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x45, 0x45, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, - 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x42, - 0x4c, 0x4f, 0x42, 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, - 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0b, 0x2a, 0x63, 0x0a, 0x08, 0x53, 0x65, 0x76, 0x65, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, - 0x0a, 0x0f, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x43, - 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, - 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x45, 0x56, - 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x2a, 0x4e, 0x0a, - 0x16, 0x48, 0x77, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x54, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x88, 0x01, - 0x0a, 0x13, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x41, 0x74, 0x52, 0x65, 0x73, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, - 0x5f, 0x41, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, 0x5f, 0x41, 0x54, - 0x5f, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, 0x5f, 0x41, 0x54, 0x5f, 0x52, - 0x45, 0x53, 0x54, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, 0x0a, - 0x15, 0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, 0x5f, 0x41, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x54, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x2a, 0x3f, 0x0a, 0x09, 0x50, 0x43, 0x52, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x43, 0x52, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x43, 0x52, 0x5f, 0x45, 0x4e, - 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x43, 0x52, 0x5f, 0x44, - 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0xa0, 0x02, 0x0a, 0x17, 0x5a, 0x43, - 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x26, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, - 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x26, 0x0a, 0x22, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, - 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x5a, 0x5f, 0x43, - 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, - 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x5f, 0x4f, 0x46, - 0x46, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, + 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x15, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x12, 0x56, 0x0a, 0x14, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x6c, + 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x13, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x6c, + 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x16, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, + 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, + 0x6e, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x12, + 0x31, 0x0a, 0x14, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x63, 0x65, + 0x72, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x76, + 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x55, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, + 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, + 0x6c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2a, 0x75, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x44, + 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x4f, 0x74, 0x68, 0x65, + 0x72, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x49, 0x74, 0x65, 0x6d, 0x47, 0x61, 0x75, 0x67, 0x65, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x44, + 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0x03, 0x2a, 0xf3, 0x01, + 0x0a, 0x0a, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x09, 0x0a, 0x05, + 0x5a, 0x69, 0x4e, 0x6f, 0x70, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x5a, 0x69, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x5a, 0x69, 0x41, 0x70, 0x70, 0x10, 0x03, + 0x12, 0x15, 0x0a, 0x11, 0x5a, 0x69, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x5a, 0x69, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x69, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x54, 0x72, 0x65, 0x65, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x5a, 0x69, 0x42, 0x6c, + 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x15, 0x0a, 0x11, 0x5a, 0x69, 0x41, 0x70, + 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x10, 0x0a, 0x12, + 0x0e, 0x0a, 0x0a, 0x5a, 0x69, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x10, 0x0b, 0x12, + 0x0e, 0x0a, 0x0a, 0x5a, 0x69, 0x45, 0x64, 0x67, 0x65, 0x76, 0x69, 0x65, 0x77, 0x10, 0x0c, 0x12, + 0x0e, 0x0a, 0x0a, 0x5a, 0x69, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x0d, 0x12, + 0x13, 0x0a, 0x0f, 0x5a, 0x69, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x65, 0x10, 0x0e, 0x12, 0x1d, 0x0a, 0x19, 0x5a, 0x69, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, + 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x10, 0x0f, 0x2a, 0xf4, 0x02, 0x0a, 0x08, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x4f, + 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0b, + 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x52, + 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x41, 0x4c, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x41, 0x4c, 0x54, 0x45, 0x44, 0x10, + 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x55, 0x52, 0x47, 0x49, 0x4e, 0x47, 0x10, 0x0b, 0x12, 0x11, + 0x0a, 0x0d, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x49, 0x4e, 0x47, 0x5f, 0x54, 0x41, 0x47, 0x10, + 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x41, + 0x47, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, + 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0e, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x45, 0x44, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0f, 0x12, 0x0d, 0x0a, 0x09, + 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x49, 0x4e, 0x47, 0x10, 0x10, 0x12, 0x0c, 0x0a, 0x08, 0x56, + 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x11, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x4f, 0x41, + 0x44, 0x49, 0x4e, 0x47, 0x10, 0x12, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f, 0x41, 0x44, 0x45, 0x44, + 0x10, 0x13, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x57, 0x41, 0x49, 0x54, 0x4e, 0x45, 0x54, 0x57, 0x4f, + 0x52, 0x4b, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x14, 0x12, 0x09, 0x0a, 0x05, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x15, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x10, 0x16, 0x2a, 0x99, 0x02, 0x0a, 0x06, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, + 0x0e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4f, 0x53, 0x10, + 0x01, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x59, 0x53, 0x54, + 0x45, 0x4d, 0x5f, 0x41, 0x44, 0x41, 0x50, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, + 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x03, 0x12, 0x16, + 0x0a, 0x12, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, + 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x05, 0x12, + 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x06, + 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, + 0x52, 0x4b, 0x10, 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x4e, + 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, + 0x08, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, + 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x45, 0x45, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4e, + 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, + 0x42, 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x4f, + 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x0b, 0x2a, 0x63, 0x0a, 0x08, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, + 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, + 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x57, 0x41, + 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x45, 0x56, 0x45, 0x52, + 0x49, 0x54, 0x59, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x2a, 0x4e, 0x0a, 0x16, 0x48, + 0x77, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x54, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, + 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0b, + 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x88, 0x01, 0x0a, 0x13, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x41, 0x74, 0x52, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, 0x5f, 0x41, + 0x54, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, 0x5f, 0x41, 0x54, 0x5f, 0x52, + 0x45, 0x53, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1b, + 0x0a, 0x17, 0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, 0x5f, 0x41, 0x54, 0x5f, 0x52, 0x45, 0x53, + 0x54, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x44, + 0x41, 0x54, 0x41, 0x53, 0x45, 0x43, 0x5f, 0x41, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x2a, 0x3f, 0x0a, 0x09, 0x50, 0x43, 0x52, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x43, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x43, 0x52, 0x5f, 0x45, 0x4e, 0x41, 0x42, + 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x43, 0x52, 0x5f, 0x44, 0x49, 0x53, + 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0xa0, 0x02, 0x0a, 0x17, 0x5a, 0x43, 0x65, 0x6c, + 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x26, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x33, 0x0a, 0x2f, 0x5a, 0x5f, - 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, - 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, - 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x2b, 0x0a, 0x27, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, - 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x52, 0x45, 0x43, 0x4f, 0x47, 0x4e, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x92, 0x01, 0x0a, - 0x18, 0x5a, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x2b, 0x0a, 0x27, 0x5a, 0x5f, 0x43, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x26, 0x0a, 0x22, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, + 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x46, + 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x5a, 0x5f, 0x43, 0x45, 0x4c, + 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x5f, 0x4f, 0x46, 0x46, 0x10, + 0x02, 0x12, 0x25, 0x0a, 0x21, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, + 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x33, 0x0a, 0x2f, 0x5a, 0x5f, 0x43, 0x45, + 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4e, 0x47, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x41, 0x4e, + 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x2b, 0x0a, + 0x27, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, + 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x52, 0x45, + 0x43, 0x4f, 0x47, 0x4e, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x92, 0x01, 0x0a, 0x18, 0x5a, + 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x2b, 0x0a, 0x27, 0x5a, 0x5f, 0x43, 0x45, 0x4c, + 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, + 0x41, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x51, 0x4d, 0x49, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, - 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x5a, 0x5f, 0x43, 0x45, 0x4c, 0x4c, - 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x51, 0x4d, 0x49, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x5a, - 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, - 0x4c, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4d, 0x42, 0x49, 0x4d, 0x10, - 0x02, 0x2a, 0xb1, 0x02, 0x0a, 0x0c, 0x5a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x18, 0x0a, 0x14, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x5a, - 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, - 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x5a, 0x44, 0x45, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, - 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, - 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x41, - 0x53, 0x45, 0x4f, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, - 0x19, 0x0a, 0x15, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x24, 0x0a, 0x20, 0x5a, 0x44, - 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, - 0x41, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, 0x46, 0x10, 0x06, - 0x12, 0x1e, 0x0a, 0x1a, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x07, - 0x12, 0x23, 0x0a, 0x1f, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, - 0x4f, 0x46, 0x46, 0x10, 0x08, 0x2a, 0xf5, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x4f, 0x52, 0x41, - 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x4f, 0x52, 0x41, - 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, - 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x53, - 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x46, - 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, - 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, - 0x4c, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x06, 0x12, - 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x53, 0x55, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x07, 0x2a, 0xe3, 0x01, - 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x61, 0x69, 0x64, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, - 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, - 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x30, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, - 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x31, 0x10, 0x02, 0x12, 0x1b, - 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x35, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x53, - 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x52, 0x41, 0x49, 0x44, 0x36, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, - 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, - 0x49, 0x44, 0x37, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, - 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x52, 0x41, 0x49, - 0x44, 0x10, 0x06, 0x2a, 0x6b, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, - 0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x45, - 0x58, 0x54, 0x34, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x5a, 0x46, 0x53, 0x10, 0x02, - 0x2a, 0xbd, 0x01, 0x0a, 0x0d, 0x41, 0x50, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, - 0x45, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, - 0x12, 0x29, 0x0a, 0x25, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, - 0x54, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x49, - 0x4e, 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x53, 0x10, 0x03, 0x12, 0x23, 0x0a, 0x1f, 0x41, - 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x4f, - 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x53, 0x10, 0x05, - 0x2a, 0xb9, 0x03, 0x0a, 0x0a, 0x42, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x1b, 0x0a, 0x17, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, - 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x49, 0x52, 0x53, - 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, - 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x43, 0x4d, 0x44, 0x10, 0x02, 0x12, - 0x16, 0x0a, 0x12, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, - 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x42, 0x4f, 0x4f, 0x54, 0x5f, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, - 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, - 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x05, 0x12, 0x15, 0x0a, - 0x11, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x54, - 0x41, 0x4c, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, - 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x4f, 0x4d, 0x10, 0x07, 0x12, 0x1d, 0x0a, 0x19, 0x42, 0x4f, 0x4f, - 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, - 0x47, 0x5f, 0x48, 0x55, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, - 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, - 0x5f, 0x50, 0x49, 0x44, 0x10, 0x09, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, - 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4b, 0x45, 0x52, 0x4e, 0x45, 0x4c, 0x10, 0x0a, 0x12, 0x1a, - 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x4f, - 0x57, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x0b, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4f, - 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x0c, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, - 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x0d, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, - 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, 0x46, 0x5f, 0x43, 0x4d, 0x44, 0x10, 0x0e, 0x12, - 0x1b, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, - 0x41, 0x52, 0x53, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0xff, 0x01, 0x2a, 0xbe, 0x01, 0x0a, - 0x15, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x1c, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, - 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, - 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, - 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, - 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x2b, 0x0a, 0x27, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, - 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, - 0x56, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x55, 0x50, 0x10, - 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4c, 0x4f, 0x57, - 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x03, 0x2a, 0xb5, 0x02, - 0x0a, 0x10, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x43, 0x45, - 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x41, 0x54, 0x54, 0x45, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x50, 0x4d, - 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x02, 0x12, 0x25, 0x0a, - 0x21, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x54, 0x50, 0x4d, 0x5f, 0x45, 0x53, 0x43, 0x52, 0x4f, 0x57, 0x5f, 0x57, 0x41, - 0x49, 0x54, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, - 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x04, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x45, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x54, 0x54, - 0x45, 0x53, 0x54, 0x5f, 0x45, 0x53, 0x43, 0x52, 0x4f, 0x57, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, - 0x05, 0x12, 0x22, 0x0a, 0x1e, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x57, - 0x41, 0x49, 0x54, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x54, 0x45, 0x10, 0x07, 0x2a, 0x8b, 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, - 0x1c, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, - 0x27, 0x0a, 0x23, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x41, 0x50, 0x50, 0x5f, - 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x10, 0x02, 0x2a, 0x61, 0x0a, 0x0c, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4d, 0x42, 0x49, 0x4d, 0x10, 0x02, 0x2a, + 0xb1, 0x02, 0x0a, 0x0c, 0x5a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1d, 0x0a, 0x19, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x18, 0x0a, 0x14, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x5a, 0x44, 0x45, + 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, + 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x5a, 0x44, + 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, + 0x4f, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x19, 0x0a, + 0x15, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x42, + 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x24, 0x0a, 0x20, 0x5a, 0x44, 0x45, 0x56, + 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, + 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, 0x46, 0x10, 0x06, 0x12, 0x1e, + 0x0a, 0x1a, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x50, 0x4f, 0x57, 0x45, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x07, 0x12, 0x23, + 0x0a, 0x1f, 0x5a, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, + 0x46, 0x10, 0x08, 0x2a, 0xf5, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, + 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, + 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, + 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x4c, + 0x49, 0x4e, 0x45, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x10, + 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x06, 0x12, 0x1c, 0x0a, + 0x18, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x53, 0x55, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x07, 0x2a, 0xe3, 0x01, 0x0a, 0x0f, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x61, 0x69, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x21, 0x0a, 0x1d, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x57, 0x49, - 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x45, 0x4c, 0x4c, - 0x55, 0x4c, 0x41, 0x52, 0x10, 0x02, 0x2a, 0x71, 0x0a, 0x0c, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, - 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x44, 0x4f, - 0x4e, 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x0c, 0x0a, 0x08, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x05, 0x12, 0x0a, 0x0a, - 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x2a, 0xcb, 0x01, 0x0a, 0x0f, 0x42, 0x61, - 0x73, 0x65, 0x4f, 0x73, 0x53, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, - 0x0e, 0x4e, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, - 0x00, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x49, 0x4e, - 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, - 0x52, 0x49, 0x46, 0x59, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, - 0x02, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, - 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, - 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, - 0x45, 0x45, 0x44, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, - 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x46, - 0x45, 0x52, 0x52, 0x45, 0x44, 0x10, 0x07, 0x2a, 0x4b, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x4e, 0x41, 0x50, 0x53, - 0x48, 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, - 0x4f, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x10, 0x01, 0x2a, 0x8f, 0x01, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x49, - 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x50, 0x4e, 0x5f, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, - 0x56, 0x50, 0x4e, 0x5f, 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, - 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x56, 0x50, 0x4e, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x52, 0x45, 0x4b, 0x45, - 0x59, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x2a, 0x85, 0x01, 0x0a, 0x15, 0x5a, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x1e, 0x0a, 0x1a, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x17, 0x0a, 0x13, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x5a, 0x4e, 0x45, - 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, - 0x4e, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x2a, 0x9e, - 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x12, 0x1f, 0x0a, 0x1b, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x01, - 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, - 0x49, 0x54, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x4f, 0x43, - 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, - 0x49, 0x55, 0x4d, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, - 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x04, 0x42, - 0x39, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, + 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x30, 0x10, 0x01, 0x12, + 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x31, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, + 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x35, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, + 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, + 0x41, 0x49, 0x44, 0x36, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, + 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x41, 0x49, 0x44, + 0x37, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, + 0x41, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x52, 0x41, 0x49, 0x44, 0x10, + 0x06, 0x2a, 0x6b, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, + 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x45, 0x58, 0x54, + 0x34, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x5a, 0x46, 0x53, 0x10, 0x02, 0x2a, 0xbd, + 0x01, 0x0a, 0x0d, 0x41, 0x50, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, + 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, + 0x54, 0x59, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, + 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, + 0x49, 0x54, 0x59, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x29, + 0x0a, 0x25, 0x41, 0x50, 0x49, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, + 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x49, 0x4e, 0x5f, + 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x53, 0x10, 0x03, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x50, 0x49, + 0x5f, 0x43, 0x41, 0x50, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x53, 0x10, 0x05, 0x2a, 0xb9, + 0x03, 0x0a, 0x0a, 0x42, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, + 0x17, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x4f, + 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, + 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, + 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x43, 0x4d, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, + 0x12, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, + 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x04, 0x12, + 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x44, + 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x42, + 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, + 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, + 0x4e, 0x5f, 0x4f, 0x4f, 0x4d, 0x10, 0x07, 0x12, 0x1d, 0x0a, 0x19, 0x42, 0x4f, 0x4f, 0x54, 0x5f, + 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, 0x5f, + 0x48, 0x55, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, + 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, 0x5f, 0x50, + 0x49, 0x44, 0x10, 0x09, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x5f, 0x4b, 0x45, 0x52, 0x4e, 0x45, 0x4c, 0x10, 0x0a, 0x12, 0x1a, 0x0a, 0x16, + 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x4f, 0x57, 0x45, + 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x0b, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4f, 0x4f, 0x54, + 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x0c, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, + 0x5f, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0d, 0x12, + 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, + 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, 0x46, 0x5f, 0x43, 0x4d, 0x44, 0x10, 0x0e, 0x12, 0x1b, 0x0a, + 0x16, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, + 0x53, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0xff, 0x01, 0x2a, 0xbe, 0x01, 0x0a, 0x15, 0x4d, + 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x1c, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, + 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, + 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, + 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, + 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x2b, 0x0a, 0x27, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, + 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, + 0x55, 0x4c, 0x54, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x12, + 0x2a, 0x0a, 0x26, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4d, + 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4c, 0x4f, 0x57, 0x5f, 0x44, + 0x49, 0x53, 0x4b, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x03, 0x2a, 0xb5, 0x02, 0x0a, 0x10, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x57, + 0x41, 0x49, 0x54, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x50, 0x4d, 0x5f, 0x51, + 0x55, 0x4f, 0x54, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x41, + 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x54, 0x50, 0x4d, 0x5f, 0x45, 0x53, 0x43, 0x52, 0x4f, 0x57, 0x5f, 0x57, 0x41, 0x49, 0x54, + 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x57, + 0x41, 0x49, 0x54, 0x10, 0x04, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, + 0x54, 0x5f, 0x45, 0x53, 0x43, 0x52, 0x4f, 0x57, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x05, 0x12, + 0x22, 0x0a, 0x1e, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x57, 0x41, 0x49, + 0x54, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, + 0x45, 0x10, 0x07, 0x2a, 0x8b, 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x41, + 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x27, 0x0a, + 0x23, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x5f, 0x43, 0x4f, + 0x4e, 0x46, 0x49, 0x47, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x41, 0x50, 0x50, 0x5f, 0x49, 0x4e, + 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, + 0x02, 0x2a, 0x61, 0x0a, 0x0c, 0x57, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x16, 0x0a, 0x12, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x57, 0x49, 0x52, 0x45, + 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x45, 0x4c, 0x4c, 0x55, 0x4c, + 0x41, 0x52, 0x10, 0x02, 0x2a, 0x71, 0x0a, 0x0c, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, + 0x0a, 0x0b, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, + 0x11, 0x0a, 0x0d, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x44, 0x4f, 0x4e, 0x45, + 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, + 0x08, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x2a, 0xcb, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x73, 0x65, + 0x4f, 0x73, 0x53, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x4e, + 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, + 0x17, 0x0a, 0x13, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x49, 0x4e, 0x50, 0x52, + 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, 0x52, 0x49, + 0x46, 0x59, 0x5f, 0x49, 0x4e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, + 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, + 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x12, + 0x0a, 0x0e, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x45, + 0x44, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x06, + 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x45, 0x52, + 0x52, 0x45, 0x44, 0x10, 0x07, 0x2a, 0x4b, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, + 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, + 0x10, 0x01, 0x2a, 0x8f, 0x01, 0x0a, 0x0d, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x70, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, + 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x49, 0x4e, 0x49, + 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x50, 0x4e, 0x5f, 0x43, 0x4f, + 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x50, + 0x4e, 0x5f, 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x03, 0x12, + 0x11, 0x0a, 0x0d, 0x56, 0x50, 0x4e, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x52, 0x45, 0x4b, 0x45, 0x59, 0x45, + 0x44, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x56, 0x50, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, + 0x45, 0x44, 0x10, 0x0a, 0x2a, 0x85, 0x01, 0x0a, 0x15, 0x5a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, + 0x0a, 0x1a, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, + 0x0a, 0x13, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x5a, 0x4e, 0x45, 0x54, 0x49, + 0x4e, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, + 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x5a, 0x4e, 0x45, 0x54, 0x49, 0x4e, 0x53, 0x54, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x2a, 0x9e, 0x01, 0x0a, + 0x0e, 0x4c, 0x6f, 0x63, 0x52, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, + 0x1f, 0x0a, 0x1b, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, + 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, + 0x49, 0x54, 0x59, 0x5f, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x17, + 0x0a, 0x13, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, + 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x4f, 0x43, 0x5f, 0x52, + 0x45, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, + 0x4d, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x4f, 0x43, 0x5f, 0x52, 0x45, 0x4c, 0x49, 0x41, + 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x04, 0x42, 0x39, 0x0a, + 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x69, 0x6e, 0x66, 0x6f, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9194,8 +9229,9 @@ var file_info_info_proto_goTypes = []interface{}{ (*timestamppb.Timestamp)(nil), // 91: google.protobuf.Timestamp (*evecommon.DiskDescription)(nil), // 92: org.lfedge.eve.common.DiskDescription (evecommon.RadioAccessTechnology)(0), // 93: org.lfedge.eve.common.RadioAccessTechnology - (*ZInfoPatchEnvelope)(nil), // 94: org.lfedge.eve.info.ZInfoPatchEnvelope - (*ZInfoOpaqueAppInstanceStatus)(nil), // 95: org.lfedge.eve.info.ZInfoOpaqueAppInstanceStatus + (*ZInfoPatchEnvelopeUsage)(nil), // 94: org.lfedge.eve.info.ZInfoPatchEnvelopeUsage + (*ZInfoPatchEnvelope)(nil), // 95: org.lfedge.eve.info.ZInfoPatchEnvelope + (*ZInfoOpaqueAppInstanceStatus)(nil), // 96: org.lfedge.eve.info.ZInfoOpaqueAppInstanceStatus } var file_info_info_proto_depIdxs = []int32{ 0, // 0: org.lfedge.eve.info.deprecatedMetricItem.type:type_name -> org.lfedge.eve.info.DepMetricItemType @@ -9299,64 +9335,65 @@ var file_info_info_proto_depIdxs = []int32{ 2, // 98: org.lfedge.eve.info.ZInfoApp.state:type_name -> org.lfedge.eve.info.ZSwState 33, // 99: org.lfedge.eve.info.ZInfoApp.network:type_name -> org.lfedge.eve.info.ZInfoNetwork 67, // 100: org.lfedge.eve.info.ZInfoApp.snapshots:type_name -> org.lfedge.eve.info.ZInfoSnapshot - 23, // 101: org.lfedge.eve.info.ZInfoVpnLink.state:type_name -> org.lfedge.eve.info.ZInfoVpnState - 69, // 102: org.lfedge.eve.info.ZInfoVpnLink.lInfo:type_name -> org.lfedge.eve.info.ZInfoVpnLinkInfo - 69, // 103: org.lfedge.eve.info.ZInfoVpnLink.rInfo:type_name -> org.lfedge.eve.info.ZInfoVpnLinkInfo - 23, // 104: org.lfedge.eve.info.ZInfoVpnConn.state:type_name -> org.lfedge.eve.info.ZInfoVpnState - 71, // 105: org.lfedge.eve.info.ZInfoVpnConn.lInfo:type_name -> org.lfedge.eve.info.ZInfoVpnEndPoint - 71, // 106: org.lfedge.eve.info.ZInfoVpnConn.rInfo:type_name -> org.lfedge.eve.info.ZInfoVpnEndPoint - 70, // 107: org.lfedge.eve.info.ZInfoVpnConn.links:type_name -> org.lfedge.eve.info.ZInfoVpnLink - 72, // 108: org.lfedge.eve.info.ZInfoVpn.conn:type_name -> org.lfedge.eve.info.ZInfoVpnConn - 91, // 109: org.lfedge.eve.info.ZInfoNetworkInstance.upTimeStamp:type_name -> google.protobuf.Timestamp - 36, // 110: org.lfedge.eve.info.ZInfoNetworkInstance.softwareList:type_name -> org.lfedge.eve.info.ZInfoSW - 27, // 111: org.lfedge.eve.info.ZInfoNetworkInstance.ipAssignments:type_name -> org.lfedge.eve.info.ZmetIPAssignmentEntry - 28, // 112: org.lfedge.eve.info.ZInfoNetworkInstance.vifs:type_name -> org.lfedge.eve.info.ZmetVifInfo - 29, // 113: org.lfedge.eve.info.ZInfoNetworkInstance.assignedAdapters:type_name -> org.lfedge.eve.info.ZioBundle - 73, // 114: org.lfedge.eve.info.ZInfoNetworkInstance.vinfo:type_name -> org.lfedge.eve.info.ZInfoVpn - 37, // 115: org.lfedge.eve.info.ZInfoNetworkInstance.networkErr:type_name -> org.lfedge.eve.info.ErrorInfo - 24, // 116: org.lfedge.eve.info.ZInfoNetworkInstance.state:type_name -> org.lfedge.eve.info.ZNetworkInstanceState - 91, // 117: org.lfedge.eve.info.UsageInfo.createTime:type_name -> google.protobuf.Timestamp - 91, // 118: org.lfedge.eve.info.UsageInfo.lastRefcountChangeTime:type_name -> google.protobuf.Timestamp - 75, // 119: org.lfedge.eve.info.ZInfoVolume.usage:type_name -> org.lfedge.eve.info.UsageInfo - 76, // 120: org.lfedge.eve.info.ZInfoVolume.resources:type_name -> org.lfedge.eve.info.VolumeResources - 2, // 121: org.lfedge.eve.info.ZInfoVolume.state:type_name -> org.lfedge.eve.info.ZSwState - 37, // 122: org.lfedge.eve.info.ZInfoVolume.volumeErr:type_name -> org.lfedge.eve.info.ErrorInfo - 78, // 123: org.lfedge.eve.info.ZInfoContentTree.resources:type_name -> org.lfedge.eve.info.ContentResources - 75, // 124: org.lfedge.eve.info.ZInfoContentTree.usage:type_name -> org.lfedge.eve.info.UsageInfo - 2, // 125: org.lfedge.eve.info.ZInfoContentTree.state:type_name -> org.lfedge.eve.info.ZSwState - 37, // 126: org.lfedge.eve.info.ZInfoContentTree.err:type_name -> org.lfedge.eve.info.ErrorInfo - 78, // 127: org.lfedge.eve.info.ZInfoBlob.resources:type_name -> org.lfedge.eve.info.ContentResources - 75, // 128: org.lfedge.eve.info.ZInfoBlob.usage:type_name -> org.lfedge.eve.info.UsageInfo - 2, // 129: org.lfedge.eve.info.ZInfoBlob.state:type_name -> org.lfedge.eve.info.ZSwState - 37, // 130: org.lfedge.eve.info.ZInfoBlob.err:type_name -> org.lfedge.eve.info.ErrorInfo - 80, // 131: org.lfedge.eve.info.ZInfoBlobList.blob:type_name -> org.lfedge.eve.info.ZInfoBlob - 1, // 132: org.lfedge.eve.info.ZInfoMsg.ztype:type_name -> org.lfedge.eve.info.ZInfoTypes - 56, // 133: org.lfedge.eve.info.ZInfoMsg.dinfo:type_name -> org.lfedge.eve.info.ZInfoDevice - 68, // 134: org.lfedge.eve.info.ZInfoMsg.ainfo:type_name -> org.lfedge.eve.info.ZInfoApp - 74, // 135: org.lfedge.eve.info.ZInfoMsg.niinfo:type_name -> org.lfedge.eve.info.ZInfoNetworkInstance - 77, // 136: org.lfedge.eve.info.ZInfoMsg.vinfo:type_name -> org.lfedge.eve.info.ZInfoVolume - 79, // 137: org.lfedge.eve.info.ZInfoMsg.cinfo:type_name -> org.lfedge.eve.info.ZInfoContentTree - 81, // 138: org.lfedge.eve.info.ZInfoMsg.binfo:type_name -> org.lfedge.eve.info.ZInfoBlobList - 84, // 139: org.lfedge.eve.info.ZInfoMsg.amdinfo:type_name -> org.lfedge.eve.info.ZInfoAppInstMetaData - 85, // 140: org.lfedge.eve.info.ZInfoMsg.evinfo:type_name -> org.lfedge.eve.info.ZInfoEdgeview - 55, // 141: org.lfedge.eve.info.ZInfoMsg.hwinfo:type_name -> org.lfedge.eve.info.ZInfoHardware - 86, // 142: org.lfedge.eve.info.ZInfoMsg.locinfo:type_name -> org.lfedge.eve.info.ZInfoLocation - 94, // 143: org.lfedge.eve.info.ZInfoMsg.patchInfo:type_name -> org.lfedge.eve.info.ZInfoPatchEnvelope - 95, // 144: org.lfedge.eve.info.ZInfoMsg.opaqueAppInstStatus:type_name -> org.lfedge.eve.info.ZInfoOpaqueAppInstanceStatus - 91, // 145: org.lfedge.eve.info.ZInfoMsg.atTimeStamp:type_name -> google.protobuf.Timestamp - 18, // 146: org.lfedge.eve.info.ZInfoAppInstMetaData.type:type_name -> org.lfedge.eve.info.AppInstMetaDataType - 91, // 147: org.lfedge.eve.info.ZInfoEdgeview.expire_time:type_name -> google.protobuf.Timestamp - 91, // 148: org.lfedge.eve.info.ZInfoEdgeview.started_time:type_name -> google.protobuf.Timestamp - 91, // 149: org.lfedge.eve.info.ZInfoLocation.utc_timestamp:type_name -> google.protobuf.Timestamp - 25, // 150: org.lfedge.eve.info.ZInfoLocation.horizontal_reliability:type_name -> org.lfedge.eve.info.LocReliability - 25, // 151: org.lfedge.eve.info.ZInfoLocation.vertical_reliability:type_name -> org.lfedge.eve.info.LocReliability - 42, // 152: org.lfedge.eve.info.ZInfoConfigItemStatus.ConfigItemsEntry.value:type_name -> org.lfedge.eve.info.ZInfoConfigItem - 42, // 153: org.lfedge.eve.info.ZInfoConfigItemStatus.UnknownConfigItemsEntry.value:type_name -> org.lfedge.eve.info.ZInfoConfigItem - 154, // [154:154] is the sub-list for method output_type - 154, // [154:154] is the sub-list for method input_type - 154, // [154:154] is the sub-list for extension type_name - 154, // [154:154] is the sub-list for extension extendee - 0, // [0:154] is the sub-list for field type_name + 94, // 101: org.lfedge.eve.info.ZInfoApp.patchEnvelope:type_name -> org.lfedge.eve.info.ZInfoPatchEnvelopeUsage + 23, // 102: org.lfedge.eve.info.ZInfoVpnLink.state:type_name -> org.lfedge.eve.info.ZInfoVpnState + 69, // 103: org.lfedge.eve.info.ZInfoVpnLink.lInfo:type_name -> org.lfedge.eve.info.ZInfoVpnLinkInfo + 69, // 104: org.lfedge.eve.info.ZInfoVpnLink.rInfo:type_name -> org.lfedge.eve.info.ZInfoVpnLinkInfo + 23, // 105: org.lfedge.eve.info.ZInfoVpnConn.state:type_name -> org.lfedge.eve.info.ZInfoVpnState + 71, // 106: org.lfedge.eve.info.ZInfoVpnConn.lInfo:type_name -> org.lfedge.eve.info.ZInfoVpnEndPoint + 71, // 107: org.lfedge.eve.info.ZInfoVpnConn.rInfo:type_name -> org.lfedge.eve.info.ZInfoVpnEndPoint + 70, // 108: org.lfedge.eve.info.ZInfoVpnConn.links:type_name -> org.lfedge.eve.info.ZInfoVpnLink + 72, // 109: org.lfedge.eve.info.ZInfoVpn.conn:type_name -> org.lfedge.eve.info.ZInfoVpnConn + 91, // 110: org.lfedge.eve.info.ZInfoNetworkInstance.upTimeStamp:type_name -> google.protobuf.Timestamp + 36, // 111: org.lfedge.eve.info.ZInfoNetworkInstance.softwareList:type_name -> org.lfedge.eve.info.ZInfoSW + 27, // 112: org.lfedge.eve.info.ZInfoNetworkInstance.ipAssignments:type_name -> org.lfedge.eve.info.ZmetIPAssignmentEntry + 28, // 113: org.lfedge.eve.info.ZInfoNetworkInstance.vifs:type_name -> org.lfedge.eve.info.ZmetVifInfo + 29, // 114: org.lfedge.eve.info.ZInfoNetworkInstance.assignedAdapters:type_name -> org.lfedge.eve.info.ZioBundle + 73, // 115: org.lfedge.eve.info.ZInfoNetworkInstance.vinfo:type_name -> org.lfedge.eve.info.ZInfoVpn + 37, // 116: org.lfedge.eve.info.ZInfoNetworkInstance.networkErr:type_name -> org.lfedge.eve.info.ErrorInfo + 24, // 117: org.lfedge.eve.info.ZInfoNetworkInstance.state:type_name -> org.lfedge.eve.info.ZNetworkInstanceState + 91, // 118: org.lfedge.eve.info.UsageInfo.createTime:type_name -> google.protobuf.Timestamp + 91, // 119: org.lfedge.eve.info.UsageInfo.lastRefcountChangeTime:type_name -> google.protobuf.Timestamp + 75, // 120: org.lfedge.eve.info.ZInfoVolume.usage:type_name -> org.lfedge.eve.info.UsageInfo + 76, // 121: org.lfedge.eve.info.ZInfoVolume.resources:type_name -> org.lfedge.eve.info.VolumeResources + 2, // 122: org.lfedge.eve.info.ZInfoVolume.state:type_name -> org.lfedge.eve.info.ZSwState + 37, // 123: org.lfedge.eve.info.ZInfoVolume.volumeErr:type_name -> org.lfedge.eve.info.ErrorInfo + 78, // 124: org.lfedge.eve.info.ZInfoContentTree.resources:type_name -> org.lfedge.eve.info.ContentResources + 75, // 125: org.lfedge.eve.info.ZInfoContentTree.usage:type_name -> org.lfedge.eve.info.UsageInfo + 2, // 126: org.lfedge.eve.info.ZInfoContentTree.state:type_name -> org.lfedge.eve.info.ZSwState + 37, // 127: org.lfedge.eve.info.ZInfoContentTree.err:type_name -> org.lfedge.eve.info.ErrorInfo + 78, // 128: org.lfedge.eve.info.ZInfoBlob.resources:type_name -> org.lfedge.eve.info.ContentResources + 75, // 129: org.lfedge.eve.info.ZInfoBlob.usage:type_name -> org.lfedge.eve.info.UsageInfo + 2, // 130: org.lfedge.eve.info.ZInfoBlob.state:type_name -> org.lfedge.eve.info.ZSwState + 37, // 131: org.lfedge.eve.info.ZInfoBlob.err:type_name -> org.lfedge.eve.info.ErrorInfo + 80, // 132: org.lfedge.eve.info.ZInfoBlobList.blob:type_name -> org.lfedge.eve.info.ZInfoBlob + 1, // 133: org.lfedge.eve.info.ZInfoMsg.ztype:type_name -> org.lfedge.eve.info.ZInfoTypes + 56, // 134: org.lfedge.eve.info.ZInfoMsg.dinfo:type_name -> org.lfedge.eve.info.ZInfoDevice + 68, // 135: org.lfedge.eve.info.ZInfoMsg.ainfo:type_name -> org.lfedge.eve.info.ZInfoApp + 74, // 136: org.lfedge.eve.info.ZInfoMsg.niinfo:type_name -> org.lfedge.eve.info.ZInfoNetworkInstance + 77, // 137: org.lfedge.eve.info.ZInfoMsg.vinfo:type_name -> org.lfedge.eve.info.ZInfoVolume + 79, // 138: org.lfedge.eve.info.ZInfoMsg.cinfo:type_name -> org.lfedge.eve.info.ZInfoContentTree + 81, // 139: org.lfedge.eve.info.ZInfoMsg.binfo:type_name -> org.lfedge.eve.info.ZInfoBlobList + 84, // 140: org.lfedge.eve.info.ZInfoMsg.amdinfo:type_name -> org.lfedge.eve.info.ZInfoAppInstMetaData + 85, // 141: org.lfedge.eve.info.ZInfoMsg.evinfo:type_name -> org.lfedge.eve.info.ZInfoEdgeview + 55, // 142: org.lfedge.eve.info.ZInfoMsg.hwinfo:type_name -> org.lfedge.eve.info.ZInfoHardware + 86, // 143: org.lfedge.eve.info.ZInfoMsg.locinfo:type_name -> org.lfedge.eve.info.ZInfoLocation + 95, // 144: org.lfedge.eve.info.ZInfoMsg.patchInfo:type_name -> org.lfedge.eve.info.ZInfoPatchEnvelope + 96, // 145: org.lfedge.eve.info.ZInfoMsg.opaqueAppInstStatus:type_name -> org.lfedge.eve.info.ZInfoOpaqueAppInstanceStatus + 91, // 146: org.lfedge.eve.info.ZInfoMsg.atTimeStamp:type_name -> google.protobuf.Timestamp + 18, // 147: org.lfedge.eve.info.ZInfoAppInstMetaData.type:type_name -> org.lfedge.eve.info.AppInstMetaDataType + 91, // 148: org.lfedge.eve.info.ZInfoEdgeview.expire_time:type_name -> google.protobuf.Timestamp + 91, // 149: org.lfedge.eve.info.ZInfoEdgeview.started_time:type_name -> google.protobuf.Timestamp + 91, // 150: org.lfedge.eve.info.ZInfoLocation.utc_timestamp:type_name -> google.protobuf.Timestamp + 25, // 151: org.lfedge.eve.info.ZInfoLocation.horizontal_reliability:type_name -> org.lfedge.eve.info.LocReliability + 25, // 152: org.lfedge.eve.info.ZInfoLocation.vertical_reliability:type_name -> org.lfedge.eve.info.LocReliability + 42, // 153: org.lfedge.eve.info.ZInfoConfigItemStatus.ConfigItemsEntry.value:type_name -> org.lfedge.eve.info.ZInfoConfigItem + 42, // 154: org.lfedge.eve.info.ZInfoConfigItemStatus.UnknownConfigItemsEntry.value:type_name -> org.lfedge.eve.info.ZInfoConfigItem + 155, // [155:155] is the sub-list for method output_type + 155, // [155:155] is the sub-list for method input_type + 155, // [155:155] is the sub-list for extension type_name + 155, // [155:155] is the sub-list for extension extendee + 0, // [0:155] is the sub-list for field type_name } func init() { file_info_info_proto_init() } diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/patch_envelope.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/patch_envelope.pb.go index 61af2f6e10..75babf9d45 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/patch_envelope.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/info/patch_envelope.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: info/patch_envelope.proto @@ -23,127 +23,127 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type EvePatchEnvelopeState int32 +type EVE_PATCH_ENVELOPE_STATE int32 const ( - EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_UNKOWN EvePatchEnvelopeState = 0 + EVE_PATCH_ENVELOPE_STATE_PATCH_UNKOWN EVE_PATCH_ENVELOPE_STATE = 0 // There is an error with config or during download // // or verification failed - EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_ERROR EvePatchEnvelopeState = 1 + EVE_PATCH_ENVELOPE_STATE_PATCH_ERROR EVE_PATCH_ENVELOPE_STATE = 1 // Configuration received but no downloads started - EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_RECIEVED EvePatchEnvelopeState = 2 + EVE_PATCH_ENVELOPE_STATE_PATCH_RECEIVED EVE_PATCH_ENVELOPE_STATE = 2 // Artifact/Volume download started // One or more of the artifacts are being downloaded - EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_DOWNLOADING EvePatchEnvelopeState = 3 + EVE_PATCH_ENVELOPE_STATE_PATCH_DOWNLOADING EVE_PATCH_ENVELOPE_STATE = 3 // All downloads finished, verified and added to // content tree - EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_DOWNLOADED EvePatchEnvelopeState = 4 + EVE_PATCH_ENVELOPE_STATE_PATCH_DOWNLOADED EVE_PATCH_ENVELOPE_STATE = 4 // Patch envelope ready for application instances // application instances will still not be // allowed to fetch the patch envelope contents - EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_READY EvePatchEnvelopeState = 5 + EVE_PATCH_ENVELOPE_STATE_PATCH_READY EVE_PATCH_ENVELOPE_STATE = 5 // Application instances are now allowed to fetch // contents - EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_ACTIVE EvePatchEnvelopeState = 6 + EVE_PATCH_ENVELOPE_STATE_PATCH_ACTIVE EVE_PATCH_ENVELOPE_STATE = 6 ) -// Enum value maps for EvePatchEnvelopeState. +// Enum value maps for EVE_PATCH_ENVELOPE_STATE. var ( - EvePatchEnvelopeState_name = map[int32]string{ - 0: "EVE_PATCH_ENVELOPE_STATE_UNKOWN", - 1: "EVE_PATCH_ENVELOPE_STATE_ERROR", - 2: "EVE_PATCH_ENVELOPE_STATE_RECIEVED", - 3: "EVE_PATCH_ENVELOPE_STATE_DOWNLOADING", - 4: "EVE_PATCH_ENVELOPE_STATE_DOWNLOADED", - 5: "EVE_PATCH_ENVELOPE_STATE_READY", - 6: "EVE_PATCH_ENVELOPE_STATE_ACTIVE", + EVE_PATCH_ENVELOPE_STATE_name = map[int32]string{ + 0: "PATCH_UNKOWN", + 1: "PATCH_ERROR", + 2: "PATCH_RECEIVED", + 3: "PATCH_DOWNLOADING", + 4: "PATCH_DOWNLOADED", + 5: "PATCH_READY", + 6: "PATCH_ACTIVE", } - EvePatchEnvelopeState_value = map[string]int32{ - "EVE_PATCH_ENVELOPE_STATE_UNKOWN": 0, - "EVE_PATCH_ENVELOPE_STATE_ERROR": 1, - "EVE_PATCH_ENVELOPE_STATE_RECIEVED": 2, - "EVE_PATCH_ENVELOPE_STATE_DOWNLOADING": 3, - "EVE_PATCH_ENVELOPE_STATE_DOWNLOADED": 4, - "EVE_PATCH_ENVELOPE_STATE_READY": 5, - "EVE_PATCH_ENVELOPE_STATE_ACTIVE": 6, + EVE_PATCH_ENVELOPE_STATE_value = map[string]int32{ + "PATCH_UNKOWN": 0, + "PATCH_ERROR": 1, + "PATCH_RECEIVED": 2, + "PATCH_DOWNLOADING": 3, + "PATCH_DOWNLOADED": 4, + "PATCH_READY": 5, + "PATCH_ACTIVE": 6, } ) -func (x EvePatchEnvelopeState) Enum() *EvePatchEnvelopeState { - p := new(EvePatchEnvelopeState) +func (x EVE_PATCH_ENVELOPE_STATE) Enum() *EVE_PATCH_ENVELOPE_STATE { + p := new(EVE_PATCH_ENVELOPE_STATE) *p = x return p } -func (x EvePatchEnvelopeState) String() string { +func (x EVE_PATCH_ENVELOPE_STATE) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (EvePatchEnvelopeState) Descriptor() protoreflect.EnumDescriptor { +func (EVE_PATCH_ENVELOPE_STATE) Descriptor() protoreflect.EnumDescriptor { return file_info_patch_envelope_proto_enumTypes[0].Descriptor() } -func (EvePatchEnvelopeState) Type() protoreflect.EnumType { +func (EVE_PATCH_ENVELOPE_STATE) Type() protoreflect.EnumType { return &file_info_patch_envelope_proto_enumTypes[0] } -func (x EvePatchEnvelopeState) Number() protoreflect.EnumNumber { +func (x EVE_PATCH_ENVELOPE_STATE) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use EvePatchEnvelopeState.Descriptor instead. -func (EvePatchEnvelopeState) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use EVE_PATCH_ENVELOPE_STATE.Descriptor instead. +func (EVE_PATCH_ENVELOPE_STATE) EnumDescriptor() ([]byte, []int) { return file_info_patch_envelope_proto_rawDescGZIP(), []int{0} } -type EveOpaqueStatusAction int32 +type EVE_OPAQUE_STATUS_ACTION int32 const ( // Controller ignores the opaque status field - EveOpaqueStatusAction_EVE_OPAQUE_STATUS_ACTION_IGNORE EveOpaqueStatusAction = 0 + EVE_OPAQUE_STATUS_ACTION_IGNORE EVE_OPAQUE_STATUS_ACTION = 0 // Controller overwrites any existing opaque // status with the content of opaque status sent // in info message - EveOpaqueStatusAction_EVE_OPAQUE_STATUS_ACTION_OVERWRITE EveOpaqueStatusAction = 1 + EVE_OPAQUE_STATUS_ACTION_OVERWRITE EVE_OPAQUE_STATUS_ACTION = 1 ) -// Enum value maps for EveOpaqueStatusAction. +// Enum value maps for EVE_OPAQUE_STATUS_ACTION. var ( - EveOpaqueStatusAction_name = map[int32]string{ - 0: "EVE_OPAQUE_STATUS_ACTION_IGNORE", - 1: "EVE_OPAQUE_STATUS_ACTION_OVERWRITE", + EVE_OPAQUE_STATUS_ACTION_name = map[int32]string{ + 0: "IGNORE", + 1: "OVERWRITE", } - EveOpaqueStatusAction_value = map[string]int32{ - "EVE_OPAQUE_STATUS_ACTION_IGNORE": 0, - "EVE_OPAQUE_STATUS_ACTION_OVERWRITE": 1, + EVE_OPAQUE_STATUS_ACTION_value = map[string]int32{ + "IGNORE": 0, + "OVERWRITE": 1, } ) -func (x EveOpaqueStatusAction) Enum() *EveOpaqueStatusAction { - p := new(EveOpaqueStatusAction) +func (x EVE_OPAQUE_STATUS_ACTION) Enum() *EVE_OPAQUE_STATUS_ACTION { + p := new(EVE_OPAQUE_STATUS_ACTION) *p = x return p } -func (x EveOpaqueStatusAction) String() string { +func (x EVE_OPAQUE_STATUS_ACTION) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (EveOpaqueStatusAction) Descriptor() protoreflect.EnumDescriptor { +func (EVE_OPAQUE_STATUS_ACTION) Descriptor() protoreflect.EnumDescriptor { return file_info_patch_envelope_proto_enumTypes[1].Descriptor() } -func (EveOpaqueStatusAction) Type() protoreflect.EnumType { +func (EVE_OPAQUE_STATUS_ACTION) Type() protoreflect.EnumType { return &file_info_patch_envelope_proto_enumTypes[1] } -func (x EveOpaqueStatusAction) Number() protoreflect.EnumNumber { +func (x EVE_OPAQUE_STATUS_ACTION) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use EveOpaqueStatusAction.Descriptor instead. -func (EveOpaqueStatusAction) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use EVE_OPAQUE_STATUS_ACTION.Descriptor instead. +func (EVE_OPAQUE_STATUS_ACTION) EnumDescriptor() ([]byte, []int) { return file_info_patch_envelope_proto_rawDescGZIP(), []int{1} } @@ -152,10 +152,10 @@ type ZInfoPatchEnvelope struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` - State EvePatchEnvelopeState `protobuf:"varint,4,opt,name=state,proto3,enum=org.lfedge.eve.info.EvePatchEnvelopeState" json:"state,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + State EVE_PATCH_ENVELOPE_STATE `protobuf:"varint,4,opt,name=state,proto3,enum=org.lfedge.eve.info.EVE_PATCH_ENVELOPE_STATE" json:"state,omitempty"` // Size of PatchEnvelope in bytes Size uint64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` Errors []string `protobuf:"bytes,6,rep,name=errors,proto3" json:"errors,omitempty"` @@ -214,11 +214,11 @@ func (x *ZInfoPatchEnvelope) GetVersion() string { return "" } -func (x *ZInfoPatchEnvelope) GetState() EvePatchEnvelopeState { +func (x *ZInfoPatchEnvelope) GetState() EVE_PATCH_ENVELOPE_STATE { if x != nil { return x.State } - return EvePatchEnvelopeState_EVE_PATCH_ENVELOPE_STATE_UNKOWN + return EVE_PATCH_ENVELOPE_STATE_PATCH_UNKOWN } func (x *ZInfoPatchEnvelope) GetSize() uint64 { @@ -240,10 +240,10 @@ type ZInfoOpaqueAppInstanceStatus struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AppId string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"` - AppName string `protobuf:"bytes,2,opt,name=appName,proto3" json:"appName,omitempty"` - OpaqueStatusAction EveOpaqueStatusAction `protobuf:"varint,3,opt,name=opaqueStatusAction,proto3,enum=org.lfedge.eve.info.EveOpaqueStatusAction" json:"opaqueStatusAction,omitempty"` - OpaqueStatus []byte `protobuf:"bytes,4,opt,name=opaqueStatus,proto3" json:"opaqueStatus,omitempty"` + AppId string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"` + AppName string `protobuf:"bytes,2,opt,name=appName,proto3" json:"appName,omitempty"` + OpaqueStatusAction EVE_OPAQUE_STATUS_ACTION `protobuf:"varint,3,opt,name=opaqueStatusAction,proto3,enum=org.lfedge.eve.info.EVE_OPAQUE_STATUS_ACTION" json:"opaqueStatusAction,omitempty"` + OpaqueStatus []byte `protobuf:"bytes,4,opt,name=opaqueStatus,proto3" json:"opaqueStatus,omitempty"` } func (x *ZInfoOpaqueAppInstanceStatus) Reset() { @@ -292,11 +292,11 @@ func (x *ZInfoOpaqueAppInstanceStatus) GetAppName() string { return "" } -func (x *ZInfoOpaqueAppInstanceStatus) GetOpaqueStatusAction() EveOpaqueStatusAction { +func (x *ZInfoOpaqueAppInstanceStatus) GetOpaqueStatusAction() EVE_OPAQUE_STATUS_ACTION { if x != nil { return x.OpaqueStatusAction } - return EveOpaqueStatusAction_EVE_OPAQUE_STATUS_ACTION_IGNORE + return EVE_OPAQUE_STATUS_ACTION_IGNORE } func (x *ZInfoOpaqueAppInstanceStatus) GetOpaqueStatus() []byte { @@ -306,67 +306,199 @@ func (x *ZInfoOpaqueAppInstanceStatus) GetOpaqueStatus() []byte { return nil } +// Provide information on PatchEnvelope usage per app +type ZInfoPatchEnvelopeUsage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // count the number of times app instance called patch APIs + PatchApiCallCount uint64 `protobuf:"varint,1,opt,name=patchApiCallCount,proto3" json:"patchApiCallCount,omitempty"` + // information about every patchEnvelope referred to this app + PatchStatus []*ZInfoPatchEnvelopeApp `protobuf:"bytes,2,rep,name=patchStatus,proto3" json:"patchStatus,omitempty"` +} + +func (x *ZInfoPatchEnvelopeUsage) Reset() { + *x = ZInfoPatchEnvelopeUsage{} + if protoimpl.UnsafeEnabled { + mi := &file_info_patch_envelope_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZInfoPatchEnvelopeUsage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZInfoPatchEnvelopeUsage) ProtoMessage() {} + +func (x *ZInfoPatchEnvelopeUsage) ProtoReflect() protoreflect.Message { + mi := &file_info_patch_envelope_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZInfoPatchEnvelopeUsage.ProtoReflect.Descriptor instead. +func (*ZInfoPatchEnvelopeUsage) Descriptor() ([]byte, []int) { + return file_info_patch_envelope_proto_rawDescGZIP(), []int{2} +} + +func (x *ZInfoPatchEnvelopeUsage) GetPatchApiCallCount() uint64 { + if x != nil { + return x.PatchApiCallCount + } + return 0 +} + +func (x *ZInfoPatchEnvelopeUsage) GetPatchStatus() []*ZInfoPatchEnvelopeApp { + if x != nil { + return x.PatchStatus + } + return nil +} + +// Statistics on usage of specific patchEnvelope for specific app +type ZInfoPatchEnvelopeApp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // UUID of PatchEnvelope + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Version of PatchEnvelope + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Number of times this PatchEnvelope + // was sucessfully downloaded + TimesDownloaded uint64 `protobuf:"varint,3,opt,name=timesDownloaded,proto3" json:"timesDownloaded,omitempty"` +} + +func (x *ZInfoPatchEnvelopeApp) Reset() { + *x = ZInfoPatchEnvelopeApp{} + if protoimpl.UnsafeEnabled { + mi := &file_info_patch_envelope_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZInfoPatchEnvelopeApp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZInfoPatchEnvelopeApp) ProtoMessage() {} + +func (x *ZInfoPatchEnvelopeApp) ProtoReflect() protoreflect.Message { + mi := &file_info_patch_envelope_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZInfoPatchEnvelopeApp.ProtoReflect.Descriptor instead. +func (*ZInfoPatchEnvelopeApp) Descriptor() ([]byte, []int) { + return file_info_patch_envelope_proto_rawDescGZIP(), []int{3} +} + +func (x *ZInfoPatchEnvelopeApp) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *ZInfoPatchEnvelopeApp) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *ZInfoPatchEnvelopeApp) GetTimesDownloaded() uint64 { + if x != nil { + return x.TimesDownloaded + } + return 0 +} + var File_info_patch_envelope_proto protoreflect.FileDescriptor var file_info_patch_envelope_proto_rawDesc = []byte{ 0x0a, 0x19, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, - 0x22, 0xc0, 0x01, 0x0a, 0x12, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, + 0x22, 0xc3, 0x01, 0x0a, 0x12, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, - 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x50, 0x61, - 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x1c, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x4f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, - 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5a, 0x0a, 0x12, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, - 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x6f, 0x70, - 0x61, 0x71, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x2a, 0xa3, 0x02, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x50, 0x61, 0x74, 0x63, - 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, - 0x0a, 0x1f, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, - 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, - 0x5f, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x56, 0x45, 0x5f, 0x50, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x45, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x28, - 0x0a, 0x24, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, - 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, - 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x27, 0x0a, 0x23, 0x45, 0x56, 0x45, 0x5f, - 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, - 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, - 0x41, 0x44, 0x59, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, - 0x43, 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x06, 0x2a, 0x64, 0x0a, 0x15, 0x45, 0x76, - 0x65, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x1f, 0x45, 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x45, 0x56, 0x45, 0x5f, - 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, - 0x42, 0x39, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, - 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x41, 0x54, 0x45, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x1c, 0x5a, 0x49, 0x6e, 0x66, 0x6f, + 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x12, 0x6f, 0x70, 0x61, 0x71, 0x75, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x56, 0x45, 0x5f, 0x4f, 0x50, + 0x41, 0x51, 0x55, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x52, 0x12, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x17, 0x5a, + 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x61, 0x74, 0x63, 0x68, 0x41, + 0x70, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x11, 0x70, 0x61, 0x74, 0x63, 0x68, 0x41, 0x70, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4c, 0x0a, 0x0b, 0x70, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, + 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x65, 0x41, 0x70, 0x70, 0x52, 0x0b, 0x70, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x6f, 0x0a, 0x15, 0x5a, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, + 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x65, 0x64, 0x2a, 0xa1, 0x01, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x43, + 0x48, 0x5f, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x55, 0x4e, 0x4b, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x52, 0x45, 0x43, + 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x41, 0x54, 0x43, 0x48, + 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, + 0x0a, 0x10, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x52, 0x45, + 0x41, 0x44, 0x59, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x41, + 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x06, 0x2a, 0x35, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x5f, 0x4f, + 0x50, 0x41, 0x51, 0x55, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, + 0x49, 0x4f, 0x4e, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, + 0x0d, 0x0a, 0x09, 0x4f, 0x56, 0x45, 0x52, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x42, 0x39, + 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -382,21 +514,24 @@ func file_info_patch_envelope_proto_rawDescGZIP() []byte { } var file_info_patch_envelope_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_info_patch_envelope_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_info_patch_envelope_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_info_patch_envelope_proto_goTypes = []interface{}{ - (EvePatchEnvelopeState)(0), // 0: org.lfedge.eve.info.EvePatchEnvelopeState - (EveOpaqueStatusAction)(0), // 1: org.lfedge.eve.info.EveOpaqueStatusAction + (EVE_PATCH_ENVELOPE_STATE)(0), // 0: org.lfedge.eve.info.EVE_PATCH_ENVELOPE_STATE + (EVE_OPAQUE_STATUS_ACTION)(0), // 1: org.lfedge.eve.info.EVE_OPAQUE_STATUS_ACTION (*ZInfoPatchEnvelope)(nil), // 2: org.lfedge.eve.info.ZInfoPatchEnvelope (*ZInfoOpaqueAppInstanceStatus)(nil), // 3: org.lfedge.eve.info.ZInfoOpaqueAppInstanceStatus + (*ZInfoPatchEnvelopeUsage)(nil), // 4: org.lfedge.eve.info.ZInfoPatchEnvelopeUsage + (*ZInfoPatchEnvelopeApp)(nil), // 5: org.lfedge.eve.info.ZInfoPatchEnvelopeApp } var file_info_patch_envelope_proto_depIdxs = []int32{ - 0, // 0: org.lfedge.eve.info.ZInfoPatchEnvelope.state:type_name -> org.lfedge.eve.info.EvePatchEnvelopeState - 1, // 1: org.lfedge.eve.info.ZInfoOpaqueAppInstanceStatus.opaqueStatusAction:type_name -> org.lfedge.eve.info.EveOpaqueStatusAction - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 0, // 0: org.lfedge.eve.info.ZInfoPatchEnvelope.state:type_name -> org.lfedge.eve.info.EVE_PATCH_ENVELOPE_STATE + 1, // 1: org.lfedge.eve.info.ZInfoOpaqueAppInstanceStatus.opaqueStatusAction:type_name -> org.lfedge.eve.info.EVE_OPAQUE_STATUS_ACTION + 5, // 2: org.lfedge.eve.info.ZInfoPatchEnvelopeUsage.patchStatus:type_name -> org.lfedge.eve.info.ZInfoPatchEnvelopeApp + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_info_patch_envelope_proto_init() } @@ -429,6 +564,30 @@ func file_info_patch_envelope_proto_init() { return nil } } + file_info_patch_envelope_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZInfoPatchEnvelopeUsage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_info_patch_envelope_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZInfoPatchEnvelopeApp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -436,7 +595,7 @@ func file_info_patch_envelope_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_info_patch_envelope_proto_rawDesc, NumEnums: 2, - NumMessages: 2, + NumMessages: 4, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/logs/log.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/logs/log.pb.go index 56afa5f8d9..4254708978 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/logs/log.pb.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/logs/log.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.31.0 // protoc v4.23.4 // source: logs/log.proto diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go new file mode 100644 index 0000000000..8189c0504b --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/metrics/metrics.pb.go @@ -0,0 +1,6285 @@ +// Copyright(c) 2017-2018 Zededa, Inc. +// All rights reserved. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.23.4 +// source: metrics/metrics.proto + +package metrics + +import ( + evecommon "github.com/lf-edge/eve-api/go/evecommon" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ZmetricTypes int32 + +const ( + ZmetricTypes_ZmNop ZmetricTypes = 0 + ZmetricTypes_ZmDevice ZmetricTypes = 1 + ZmetricTypes_ZmApp ZmetricTypes = 3 +) + +// Enum value maps for ZmetricTypes. +var ( + ZmetricTypes_name = map[int32]string{ + 0: "ZmNop", + 1: "ZmDevice", + 3: "ZmApp", + } + ZmetricTypes_value = map[string]int32{ + "ZmNop": 0, + "ZmDevice": 1, + "ZmApp": 3, + } +) + +func (x ZmetricTypes) Enum() *ZmetricTypes { + p := new(ZmetricTypes) + *p = x + return p +} + +func (x ZmetricTypes) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ZmetricTypes) Descriptor() protoreflect.EnumDescriptor { + return file_metrics_metrics_proto_enumTypes[0].Descriptor() +} + +func (ZmetricTypes) Type() protoreflect.EnumType { + return &file_metrics_metrics_proto_enumTypes[0] +} + +func (x ZmetricTypes) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ZmetricTypes.Descriptor instead. +func (ZmetricTypes) EnumDescriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{0} +} + +// Various error codes +// Note that CIPHER_ERROR_NO_DATA isn't really an error; means that there +// was no encrypted nor cleartext data. +// Must match CipherError in pkg/pillar/types +type CipherError int32 + +const ( + CipherError_CIPHER_ERROR_INVALID CipherError = 0 + CipherError_CIPHER_ERROR_NOT_READY CipherError = 1 // Not yet received ECDH controller cert + CipherError_CIPHER_ERROR_DECRYPT_FAILED CipherError = 2 // ECDH decrypt failed + CipherError_CIPHER_ERROR_UNMARSHAL_FAILED CipherError = 3 // Failed protobuf decode post decryption + CipherError_CIPHER_ERROR_CLEARTEXT_FALLBACK CipherError = 4 // Failure then using cleartext + CipherError_CIPHER_ERROR_MISSING_FALLBACK CipherError = 5 // Failed and no cleartext to fall back to + CipherError_CIPHER_ERROR_NO_CIPHER CipherError = 6 // Only cleartext received + CipherError_CIPHER_ERROR_NO_DATA CipherError = 7 // No data to encrypt/decrypt +) + +// Enum value maps for CipherError. +var ( + CipherError_name = map[int32]string{ + 0: "CIPHER_ERROR_INVALID", + 1: "CIPHER_ERROR_NOT_READY", + 2: "CIPHER_ERROR_DECRYPT_FAILED", + 3: "CIPHER_ERROR_UNMARSHAL_FAILED", + 4: "CIPHER_ERROR_CLEARTEXT_FALLBACK", + 5: "CIPHER_ERROR_MISSING_FALLBACK", + 6: "CIPHER_ERROR_NO_CIPHER", + 7: "CIPHER_ERROR_NO_DATA", + } + CipherError_value = map[string]int32{ + "CIPHER_ERROR_INVALID": 0, + "CIPHER_ERROR_NOT_READY": 1, + "CIPHER_ERROR_DECRYPT_FAILED": 2, + "CIPHER_ERROR_UNMARSHAL_FAILED": 3, + "CIPHER_ERROR_CLEARTEXT_FALLBACK": 4, + "CIPHER_ERROR_MISSING_FALLBACK": 5, + "CIPHER_ERROR_NO_CIPHER": 6, + "CIPHER_ERROR_NO_DATA": 7, + } +) + +func (x CipherError) Enum() *CipherError { + p := new(CipherError) + *p = x + return p +} + +func (x CipherError) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CipherError) Descriptor() protoreflect.EnumDescriptor { + return file_metrics_metrics_proto_enumTypes[1].Descriptor() +} + +func (CipherError) Type() protoreflect.EnumType { + return &file_metrics_metrics_proto_enumTypes[1] +} + +func (x CipherError) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use CipherError.Descriptor instead. +func (CipherError) EnumDescriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{1} +} + +type MetricItemType int32 + +const ( + MetricItemType_MetricItemOther MetricItemType = 0 // E.g., a string like an ESSID + MetricItemType_MetricItemGauge MetricItemType = 1 // Goes up and down over time + MetricItemType_MetricItemCounter MetricItemType = 2 // Monotonically increasing (until reboot) + MetricItemType_MetricItemState MetricItemType = 3 // Toggles on and off; count transitions +) + +// Enum value maps for MetricItemType. +var ( + MetricItemType_name = map[int32]string{ + 0: "MetricItemOther", + 1: "MetricItemGauge", + 2: "MetricItemCounter", + 3: "MetricItemState", + } + MetricItemType_value = map[string]int32{ + "MetricItemOther": 0, + "MetricItemGauge": 1, + "MetricItemCounter": 2, + "MetricItemState": 3, + } +) + +func (x MetricItemType) Enum() *MetricItemType { + p := new(MetricItemType) + *p = x + return p +} + +func (x MetricItemType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MetricItemType) Descriptor() protoreflect.EnumDescriptor { + return file_metrics_metrics_proto_enumTypes[2].Descriptor() +} + +func (MetricItemType) Type() protoreflect.EnumType { + return &file_metrics_metrics_proto_enumTypes[2] +} + +func (x MetricItemType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MetricItemType.Descriptor instead. +func (MetricItemType) EnumDescriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{2} +} + +// memoryMetric - DEPRECATED. DO NOT USE THIS. +type MemoryMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UsedMem uint32 `protobuf:"varint,2,opt,name=usedMem,proto3" json:"usedMem,omitempty"` //in MBytes + AvailMem uint32 `protobuf:"varint,3,opt,name=availMem,proto3" json:"availMem,omitempty"` //in MBytes + UsedPercentage float64 `protobuf:"fixed64,4,opt,name=usedPercentage,proto3" json:"usedPercentage,omitempty"` // Obsolete - No Longer Used. + AvailPercentage float64 `protobuf:"fixed64,5,opt,name=availPercentage,proto3" json:"availPercentage,omitempty"` // Obsolete - No Longer Used. +} + +func (x *MemoryMetric) Reset() { + *x = MemoryMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MemoryMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MemoryMetric) ProtoMessage() {} + +func (x *MemoryMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MemoryMetric.ProtoReflect.Descriptor instead. +func (*MemoryMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{0} +} + +func (x *MemoryMetric) GetUsedMem() uint32 { + if x != nil { + return x.UsedMem + } + return 0 +} + +func (x *MemoryMetric) GetAvailMem() uint32 { + if x != nil { + return x.AvailMem + } + return 0 +} + +func (x *MemoryMetric) GetUsedPercentage() float64 { + if x != nil { + return x.UsedPercentage + } + return 0 +} + +func (x *MemoryMetric) GetAvailPercentage() float64 { + if x != nil { + return x.AvailPercentage + } + return 0 +} + +// App Memory Metric +type AppMemoryMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // allocatedMB - Memory allocated to app instance by EVE independent + // + // of the state of the App Instance. + AllocatedMB uint32 `protobuf:"varint,1,opt,name=allocatedMB,proto3" json:"allocatedMB,omitempty"` + // usedMB - Memory Used by app from totalMB Memory + // + // usedMB <= totalMB in normal cases. + // Enforcement of the allocatedMB could be lax, hence usedMB can sometimes + // exceed allocatedMB. + UsedMB uint32 `protobuf:"varint,2,opt,name=usedMB,proto3" json:"usedMB,omitempty"` +} + +func (x *AppMemoryMetric) Reset() { + *x = AppMemoryMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppMemoryMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppMemoryMetric) ProtoMessage() {} + +func (x *AppMemoryMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AppMemoryMetric.ProtoReflect.Descriptor instead. +func (*AppMemoryMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{1} +} + +func (x *AppMemoryMetric) GetAllocatedMB() uint32 { + if x != nil { + return x.AllocatedMB + } + return 0 +} + +func (x *AppMemoryMetric) GetUsedMB() uint32 { + if x != nil { + return x.UsedMB + } + return 0 +} + +type DeviceMemoryMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // memoryMB - Total Device memory + // This is the same as reported in the memory field in the + // device info message. Repeated here for convenience of controller to process + // the metrics message. + MemoryMB uint32 `protobuf:"varint,1,opt,name=memoryMB,proto3" json:"memoryMB,omitempty"` + // allocated_appsMB - Total memory Allocated to AppInstances + // In steady state, this is the sum of all the AppMemoryMetric.allocatedMB + // from all the app instances + AllocatedAppsMB uint32 `protobuf:"varint,2,opt,name=allocated_appsMB,json=allocatedAppsMB,proto3" json:"allocated_appsMB,omitempty"` + // allocated_eveMB - Total Allocated Memory for Eve + AllocatedEveMB uint32 `protobuf:"varint,3,opt,name=allocated_eveMB,json=allocatedEveMB,proto3" json:"allocated_eveMB,omitempty"` + // used_eveMB - Memory currently used by Eve. + // + // used_eveMB <= allocated_eveMB in normal case + // + // Eve may not be able to enforce ie., used_eveMB might be greater than + // allocated_eveMB. + UsedEveMB uint32 `protobuf:"varint,4,opt,name=used_eveMB,json=usedEveMB,proto3" json:"used_eveMB,omitempty"` +} + +func (x *DeviceMemoryMetric) Reset() { + *x = DeviceMemoryMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeviceMemoryMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceMemoryMetric) ProtoMessage() {} + +func (x *DeviceMemoryMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceMemoryMetric.ProtoReflect.Descriptor instead. +func (*DeviceMemoryMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{2} +} + +func (x *DeviceMemoryMetric) GetMemoryMB() uint32 { + if x != nil { + return x.MemoryMB + } + return 0 +} + +func (x *DeviceMemoryMetric) GetAllocatedAppsMB() uint32 { + if x != nil { + return x.AllocatedAppsMB + } + return 0 +} + +func (x *DeviceMemoryMetric) GetAllocatedEveMB() uint32 { + if x != nil { + return x.AllocatedEveMB + } + return 0 +} + +func (x *DeviceMemoryMetric) GetUsedEveMB() uint32 { + if x != nil { + return x.UsedEveMB + } + return 0 +} + +type NetworkMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // iName - Set to SystemAdapter.Name which is the Logicallabel in phyio + IName string `protobuf:"bytes,1,opt,name=iName,proto3" json:"iName,omitempty"` // name from config; displayName for network instance + // alias - Set to SystemAdapter.alias + Alias string `protobuf:"bytes,20,opt,name=alias,proto3" json:"alias,omitempty"` + TxBytes uint64 `protobuf:"varint,2,opt,name=txBytes,proto3" json:"txBytes,omitempty"` // in bytes + RxBytes uint64 `protobuf:"varint,3,opt,name=rxBytes,proto3" json:"rxBytes,omitempty"` // in bytes + TxDrops uint64 `protobuf:"varint,4,opt,name=txDrops,proto3" json:"txDrops,omitempty"` + RxDrops uint64 `protobuf:"varint,5,opt,name=rxDrops,proto3" json:"rxDrops,omitempty"` + // deprecated = 6; + // deprecated = 7; + TxPkts uint64 `protobuf:"varint,8,opt,name=txPkts,proto3" json:"txPkts,omitempty"` + RxPkts uint64 `protobuf:"varint,9,opt,name=rxPkts,proto3" json:"rxPkts,omitempty"` + TxErrors uint64 `protobuf:"varint,10,opt,name=txErrors,proto3" json:"txErrors,omitempty"` + RxErrors uint64 `protobuf:"varint,11,opt,name=rxErrors,proto3" json:"rxErrors,omitempty"` + TxAclDrops uint64 `protobuf:"varint,12,opt,name=txAclDrops,proto3" json:"txAclDrops,omitempty"` + RxAclDrops uint64 `protobuf:"varint,13,opt,name=rxAclDrops,proto3" json:"rxAclDrops,omitempty"` + TxAclRateLimitDrops uint64 `protobuf:"varint,14,opt,name=txAclRateLimitDrops,proto3" json:"txAclRateLimitDrops,omitempty"` + RxAclRateLimitDrops uint64 `protobuf:"varint,15,opt,name=rxAclRateLimitDrops,proto3" json:"rxAclRateLimitDrops,omitempty"` + // localName - Set to IfName of the Adapter + LocalName string `protobuf:"bytes,16,opt,name=localName,proto3" json:"localName,omitempty"` // local vif name e.g., nbu* +} + +func (x *NetworkMetric) Reset() { + *x = NetworkMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NetworkMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NetworkMetric) ProtoMessage() {} + +func (x *NetworkMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NetworkMetric.ProtoReflect.Descriptor instead. +func (*NetworkMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{3} +} + +func (x *NetworkMetric) GetIName() string { + if x != nil { + return x.IName + } + return "" +} + +func (x *NetworkMetric) GetAlias() string { + if x != nil { + return x.Alias + } + return "" +} + +func (x *NetworkMetric) GetTxBytes() uint64 { + if x != nil { + return x.TxBytes + } + return 0 +} + +func (x *NetworkMetric) GetRxBytes() uint64 { + if x != nil { + return x.RxBytes + } + return 0 +} + +func (x *NetworkMetric) GetTxDrops() uint64 { + if x != nil { + return x.TxDrops + } + return 0 +} + +func (x *NetworkMetric) GetRxDrops() uint64 { + if x != nil { + return x.RxDrops + } + return 0 +} + +func (x *NetworkMetric) GetTxPkts() uint64 { + if x != nil { + return x.TxPkts + } + return 0 +} + +func (x *NetworkMetric) GetRxPkts() uint64 { + if x != nil { + return x.RxPkts + } + return 0 +} + +func (x *NetworkMetric) GetTxErrors() uint64 { + if x != nil { + return x.TxErrors + } + return 0 +} + +func (x *NetworkMetric) GetRxErrors() uint64 { + if x != nil { + return x.RxErrors + } + return 0 +} + +func (x *NetworkMetric) GetTxAclDrops() uint64 { + if x != nil { + return x.TxAclDrops + } + return 0 +} + +func (x *NetworkMetric) GetRxAclDrops() uint64 { + if x != nil { + return x.RxAclDrops + } + return 0 +} + +func (x *NetworkMetric) GetTxAclRateLimitDrops() uint64 { + if x != nil { + return x.TxAclRateLimitDrops + } + return 0 +} + +func (x *NetworkMetric) GetRxAclRateLimitDrops() uint64 { + if x != nil { + return x.RxAclRateLimitDrops + } + return 0 +} + +func (x *NetworkMetric) GetLocalName() string { + if x != nil { + return x.LocalName + } + return "" +} + +type CellularMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Logical label assigned to the physical cellular modem. + Logicallabel string `protobuf:"bytes,1,opt,name=logicallabel,proto3" json:"logicallabel,omitempty"` + SignalStrength *CellularSignalStrength `protobuf:"bytes,2,opt,name=signal_strength,json=signalStrength,proto3" json:"signal_strength,omitempty"` + PacketStats *CellularPacketStats `protobuf:"bytes,3,opt,name=packet_stats,json=packetStats,proto3" json:"packet_stats,omitempty"` +} + +func (x *CellularMetric) Reset() { + *x = CellularMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CellularMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CellularMetric) ProtoMessage() {} + +func (x *CellularMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[4] + 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 CellularMetric.ProtoReflect.Descriptor instead. +func (*CellularMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{4} +} + +func (x *CellularMetric) GetLogicallabel() string { + if x != nil { + return x.Logicallabel + } + return "" +} + +func (x *CellularMetric) GetSignalStrength() *CellularSignalStrength { + if x != nil { + return x.SignalStrength + } + return nil +} + +func (x *CellularMetric) GetPacketStats() *CellularPacketStats { + if x != nil { + return x.PacketStats + } + return nil +} + +// CellularSignalStrength contains cellular signal strength information. +// The maximum value of int32 (0x7FFFFFFF) represents unspecified/unavailable metric. +type CellularSignalStrength struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Received Signal Strength Indicator (RSSI) measured in dBm (decibel-milliwatts). + Rssi int32 `protobuf:"varint,1,opt,name=rssi,proto3" json:"rssi,omitempty"` + // Reference Signal Received Quality (RSRQ) measured in dB (decibels). + Rsrq int32 `protobuf:"varint,2,opt,name=rsrq,proto3" json:"rsrq,omitempty"` + // Reference Signal Receive Power (RSRP) measured in dBm (decibel-milliwatts). + Rsrp int32 `protobuf:"varint,3,opt,name=rsrp,proto3" json:"rsrp,omitempty"` + // Signal-to-Noise Ratio (SNR) measured in dB (decibels). + Snr int32 `protobuf:"varint,4,opt,name=snr,proto3" json:"snr,omitempty"` +} + +func (x *CellularSignalStrength) Reset() { + *x = CellularSignalStrength{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CellularSignalStrength) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CellularSignalStrength) ProtoMessage() {} + +func (x *CellularSignalStrength) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[5] + 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 CellularSignalStrength.ProtoReflect.Descriptor instead. +func (*CellularSignalStrength) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{5} +} + +func (x *CellularSignalStrength) GetRssi() int32 { + if x != nil { + return x.Rssi + } + return 0 +} + +func (x *CellularSignalStrength) GetRsrq() int32 { + if x != nil { + return x.Rsrq + } + return 0 +} + +func (x *CellularSignalStrength) GetRsrp() int32 { + if x != nil { + return x.Rsrp + } + return 0 +} + +func (x *CellularSignalStrength) GetSnr() int32 { + if x != nil { + return x.Snr + } + return 0 +} + +// Stats collected by the cellular modem itself. +type CellularPacketStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rx *NetworkStats `protobuf:"bytes,1,opt,name=rx,proto3" json:"rx,omitempty"` + Tx *NetworkStats `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"` +} + +func (x *CellularPacketStats) Reset() { + *x = CellularPacketStats{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CellularPacketStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CellularPacketStats) ProtoMessage() {} + +func (x *CellularPacketStats) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[6] + 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 CellularPacketStats.ProtoReflect.Descriptor instead. +func (*CellularPacketStats) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{6} +} + +func (x *CellularPacketStats) GetRx() *NetworkStats { + if x != nil { + return x.Rx + } + return nil +} + +func (x *CellularPacketStats) GetTx() *NetworkStats { + if x != nil { + return x.Tx + } + return nil +} + +// Failures and successes for communication to zedcloud +// for each management port +type ZedcloudMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IfName string `protobuf:"bytes,1,opt,name=ifName,proto3" json:"ifName,omitempty"` // interface name for management port + Failures uint64 `protobuf:"varint,2,opt,name=failures,proto3" json:"failures,omitempty"` + Success uint64 `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"` + LastFailure *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=lastFailure,proto3" json:"lastFailure,omitempty"` + LastSuccess *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=lastSuccess,proto3" json:"lastSuccess,omitempty"` + UrlMetrics []*UrlcloudMetric `protobuf:"bytes,6,rep,name=urlMetrics,proto3" json:"urlMetrics,omitempty"` + AuthVerifyFailure uint64 `protobuf:"varint,7,opt,name=authVerifyFailure,proto3" json:"authVerifyFailure,omitempty"` // networking success, authen verify fail count for V2 API +} + +func (x *ZedcloudMetric) Reset() { + *x = ZedcloudMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZedcloudMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZedcloudMetric) ProtoMessage() {} + +func (x *ZedcloudMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[7] + 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 ZedcloudMetric.ProtoReflect.Descriptor instead. +func (*ZedcloudMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{7} +} + +func (x *ZedcloudMetric) GetIfName() string { + if x != nil { + return x.IfName + } + return "" +} + +func (x *ZedcloudMetric) GetFailures() uint64 { + if x != nil { + return x.Failures + } + return 0 +} + +func (x *ZedcloudMetric) GetSuccess() uint64 { + if x != nil { + return x.Success + } + return 0 +} + +func (x *ZedcloudMetric) GetLastFailure() *timestamppb.Timestamp { + if x != nil { + return x.LastFailure + } + return nil +} + +func (x *ZedcloudMetric) GetLastSuccess() *timestamppb.Timestamp { + if x != nil { + return x.LastSuccess + } + return nil +} + +func (x *ZedcloudMetric) GetUrlMetrics() []*UrlcloudMetric { + if x != nil { + return x.UrlMetrics + } + return nil +} + +func (x *ZedcloudMetric) GetAuthVerifyFailure() uint64 { + if x != nil { + return x.AuthVerifyFailure + } + return 0 +} + +// Information for each API URL +type UrlcloudMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + TryMsgCount int64 `protobuf:"varint,2,opt,name=tryMsgCount,proto3" json:"tryMsgCount,omitempty"` // Things we might have tried to send + TryByteCount int64 `protobuf:"varint,3,opt,name=tryByteCount,proto3" json:"tryByteCount,omitempty"` // or it failed before we could send them. + SentMsgCount int64 `protobuf:"varint,4,opt,name=sentMsgCount,proto3" json:"sentMsgCount,omitempty"` + SentByteCount int64 `protobuf:"varint,5,opt,name=sentByteCount,proto3" json:"sentByteCount,omitempty"` + RecvMsgCount int64 `protobuf:"varint,6,opt,name=recvMsgCount,proto3" json:"recvMsgCount,omitempty"` + RecvByteCount int64 `protobuf:"varint,7,opt,name=recvByteCount,proto3" json:"recvByteCount,omitempty"` + TotalTimeSpent int64 `protobuf:"varint,8,opt,name=total_time_spent,json=totalTimeSpent,proto3" json:"total_time_spent,omitempty"` // Total time spent servicing requests that succeeded + SessResumeCount int64 `protobuf:"varint,9,opt,name=sess_resume_count,json=sessResumeCount,proto3" json:"sess_resume_count,omitempty"` // Total counts of the TLS session resumption +} + +func (x *UrlcloudMetric) Reset() { + *x = UrlcloudMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UrlcloudMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UrlcloudMetric) ProtoMessage() {} + +func (x *UrlcloudMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[8] + 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 UrlcloudMetric.ProtoReflect.Descriptor instead. +func (*UrlcloudMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{8} +} + +func (x *UrlcloudMetric) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *UrlcloudMetric) GetTryMsgCount() int64 { + if x != nil { + return x.TryMsgCount + } + return 0 +} + +func (x *UrlcloudMetric) GetTryByteCount() int64 { + if x != nil { + return x.TryByteCount + } + return 0 +} + +func (x *UrlcloudMetric) GetSentMsgCount() int64 { + if x != nil { + return x.SentMsgCount + } + return 0 +} + +func (x *UrlcloudMetric) GetSentByteCount() int64 { + if x != nil { + return x.SentByteCount + } + return 0 +} + +func (x *UrlcloudMetric) GetRecvMsgCount() int64 { + if x != nil { + return x.RecvMsgCount + } + return 0 +} + +func (x *UrlcloudMetric) GetRecvByteCount() int64 { + if x != nil { + return x.RecvByteCount + } + return 0 +} + +func (x *UrlcloudMetric) GetTotalTimeSpent() int64 { + if x != nil { + return x.TotalTimeSpent + } + return 0 +} + +func (x *UrlcloudMetric) GetSessResumeCount() int64 { + if x != nil { + return x.SessResumeCount + } + return 0 +} + +// Failures and successes for the object decryption +type CipherMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AgentName string `protobuf:"bytes,1,opt,name=agent_name,json=agentName,proto3" json:"agent_name,omitempty"` + FailureCount uint64 `protobuf:"varint,2,opt,name=failure_count,json=failureCount,proto3" json:"failure_count,omitempty"` + SuccessCount uint64 `protobuf:"varint,3,opt,name=success_count,json=successCount,proto3" json:"success_count,omitempty"` + LastFailure *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_failure,json=lastFailure,proto3" json:"last_failure,omitempty"` + LastSuccess *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_success,json=lastSuccess,proto3" json:"last_success,omitempty"` + Tc []*TypeCounter `protobuf:"bytes,6,rep,name=tc,proto3" json:"tc,omitempty"` +} + +func (x *CipherMetric) Reset() { + *x = CipherMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CipherMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CipherMetric) ProtoMessage() {} + +func (x *CipherMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_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 CipherMetric.ProtoReflect.Descriptor instead. +func (*CipherMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{9} +} + +func (x *CipherMetric) GetAgentName() string { + if x != nil { + return x.AgentName + } + return "" +} + +func (x *CipherMetric) GetFailureCount() uint64 { + if x != nil { + return x.FailureCount + } + return 0 +} + +func (x *CipherMetric) GetSuccessCount() uint64 { + if x != nil { + return x.SuccessCount + } + return 0 +} + +func (x *CipherMetric) GetLastFailure() *timestamppb.Timestamp { + if x != nil { + return x.LastFailure + } + return nil +} + +func (x *CipherMetric) GetLastSuccess() *timestamppb.Timestamp { + if x != nil { + return x.LastSuccess + } + return nil +} + +func (x *CipherMetric) GetTc() []*TypeCounter { + if x != nil { + return x.Tc + } + return nil +} + +// Counters for each of the different CipherError codes +type TypeCounter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ErrorCode CipherError `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3,enum=org.lfedge.eve.metrics.CipherError" json:"error_code,omitempty"` + Count uint64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *TypeCounter) Reset() { + *x = TypeCounter{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TypeCounter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TypeCounter) ProtoMessage() {} + +func (x *TypeCounter) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_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 TypeCounter.ProtoReflect.Descriptor instead. +func (*TypeCounter) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{10} +} + +func (x *TypeCounter) GetErrorCode() CipherError { + if x != nil { + return x.ErrorCode + } + return CipherError_CIPHER_ERROR_INVALID +} + +func (x *TypeCounter) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +type AppCpuMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // deprecated = 2; + // deprecated = 3; + UpTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=upTime,proto3" json:"upTime,omitempty"` + // should be deprecated + Total uint64 `protobuf:"varint,5,opt,name=total,proto3" json:"total,omitempty"` // cpu total in secs. In docker stats, it's the container user usage + SystemTotal uint64 `protobuf:"varint,6,opt,name=systemTotal,proto3" json:"systemTotal,omitempty"` // docker host system cpu total in secs. inc user, system and idle + TotalNs uint64 `protobuf:"varint,7,opt,name=total_ns,json=totalNs,proto3" json:"total_ns,omitempty"` // like 'total' but in nanoseconds. Overflow may happen after ~40 years without EVE restart +} + +func (x *AppCpuMetric) Reset() { + *x = AppCpuMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppCpuMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppCpuMetric) ProtoMessage() {} + +func (x *AppCpuMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[11] + 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 AppCpuMetric.ProtoReflect.Descriptor instead. +func (*AppCpuMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{11} +} + +func (x *AppCpuMetric) GetUpTime() *timestamppb.Timestamp { + if x != nil { + return x.UpTime + } + return nil +} + +func (x *AppCpuMetric) GetTotal() uint64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *AppCpuMetric) GetSystemTotal() uint64 { + if x != nil { + return x.SystemTotal + } + return 0 +} + +func (x *AppCpuMetric) GetTotalNs() uint64 { + if x != nil { + return x.TotalNs + } + return 0 +} + +// StorageVDevMetrics - contains virtual device statistics from ZFS storage +type StorageVDevMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // VolumeUUID (how and in ZInfoVolume.uuid) + // Non-empty if metrics are collected from /dev/... + // For example: /dev/zd* (zvol) + VolumeUUID string `protobuf:"bytes,1,opt,name=volume_u_u_i_d,json=volumeUUID,proto3" json:"volume_u_u_i_d,omitempty"` + Alloc uint64 `protobuf:"varint,2,opt,name=alloc,proto3" json:"alloc,omitempty"` // Space allocated (in bytes) + Total uint64 `protobuf:"varint,3,opt,name=total,proto3" json:"total,omitempty"` // Total device capacity (in bytes) + // Deflated capacity on this device available to ZFS. (in bytes) + DeflatedSpace uint64 `protobuf:"varint,4,opt,name=deflated_space,json=deflatedSpace,proto3" json:"deflated_space,omitempty"` + // Replaceable dev size. Displays the minimum volume + // required to replace this device. (in bytes) + ReplaceableSize uint64 `protobuf:"varint,5,opt,name=replaceable_size,json=replaceableSize,proto3" json:"replaceable_size,omitempty"` + // Expandable dev size. This value determines how much space + // the pool can expand from this device. (in bytes) + ExpandableSize uint64 `protobuf:"varint,6,opt,name=expandable_size,json=expandableSize,proto3" json:"expandable_size,omitempty"` + ReadErrors uint64 `protobuf:"varint,7,opt,name=read_errors,json=readErrors,proto3" json:"read_errors,omitempty"` // Counter read errors. + WriteErrors uint64 `protobuf:"varint,8,opt,name=write_errors,json=writeErrors,proto3" json:"write_errors,omitempty"` // Counter write errors. + ChecksumErrors uint64 `protobuf:"varint,9,opt,name=checksum_errors,json=checksumErrors,proto3" json:"checksum_errors,omitempty"` // Counter checksum errors. + BytesRead uint64 `protobuf:"varint,10,opt,name=bytes_read,json=bytesRead,proto3" json:"bytes_read,omitempty"` // Total number of bytes read. + BytesWrite uint64 `protobuf:"varint,11,opt,name=bytes_write,json=bytesWrite,proto3" json:"bytes_write,omitempty"` // Total number of bytes write. + // The total number of read operations sent to + // the pool or device, including metadata requests. + OpsCountRead uint64 `protobuf:"varint,12,opt,name=ops_count_read,json=opsCountRead,proto3" json:"ops_count_read,omitempty"` + // The total number of write operations sent to the pool or device. + OpsCountWrite uint64 `protobuf:"varint,13,opt,name=ops_count_write,json=opsCountWrite,proto3" json:"ops_count_write,omitempty"` + // Number of I/Os currently in progress. + IOsInProgress uint64 `protobuf:"varint,14,opt,name=i_os_in_progress,json=iOsInProgress,proto3" json:"i_os_in_progress,omitempty"` + // The total number of milliseconds spent by all reads. + ReadTicks uint64 `protobuf:"varint,15,opt,name=read_ticks,json=readTicks,proto3" json:"read_ticks,omitempty"` + // The total number of milliseconds spent by all writes. + WriteTicks uint64 `protobuf:"varint,16,opt,name=write_ticks,json=writeTicks,proto3" json:"write_ticks,omitempty"` + // The number of milliseconds spent doing I/Os. + IOsTotalTicks uint64 `protobuf:"varint,17,opt,name=i_os_total_ticks,json=iOsTotalTicks,proto3" json:"i_os_total_ticks,omitempty"` + // weighted_io_ticks is the weighted number of milliseconds + // spent doing I/Os. This can also be used to estimate average + // queue wait time for requests. + WeightedIOTicks uint64 `protobuf:"varint,18,opt,name=weighted_i_o_ticks,json=weightedIOTicks,proto3" json:"weighted_i_o_ticks,omitempty"` +} + +func (x *StorageVDevMetrics) Reset() { + *x = StorageVDevMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageVDevMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageVDevMetrics) ProtoMessage() {} + +func (x *StorageVDevMetrics) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[12] + 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 StorageVDevMetrics.ProtoReflect.Descriptor instead. +func (*StorageVDevMetrics) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{12} +} + +func (x *StorageVDevMetrics) GetVolumeUUID() string { + if x != nil { + return x.VolumeUUID + } + return "" +} + +func (x *StorageVDevMetrics) GetAlloc() uint64 { + if x != nil { + return x.Alloc + } + return 0 +} + +func (x *StorageVDevMetrics) GetTotal() uint64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *StorageVDevMetrics) GetDeflatedSpace() uint64 { + if x != nil { + return x.DeflatedSpace + } + return 0 +} + +func (x *StorageVDevMetrics) GetReplaceableSize() uint64 { + if x != nil { + return x.ReplaceableSize + } + return 0 +} + +func (x *StorageVDevMetrics) GetExpandableSize() uint64 { + if x != nil { + return x.ExpandableSize + } + return 0 +} + +func (x *StorageVDevMetrics) GetReadErrors() uint64 { + if x != nil { + return x.ReadErrors + } + return 0 +} + +func (x *StorageVDevMetrics) GetWriteErrors() uint64 { + if x != nil { + return x.WriteErrors + } + return 0 +} + +func (x *StorageVDevMetrics) GetChecksumErrors() uint64 { + if x != nil { + return x.ChecksumErrors + } + return 0 +} + +func (x *StorageVDevMetrics) GetBytesRead() uint64 { + if x != nil { + return x.BytesRead + } + return 0 +} + +func (x *StorageVDevMetrics) GetBytesWrite() uint64 { + if x != nil { + return x.BytesWrite + } + return 0 +} + +func (x *StorageVDevMetrics) GetOpsCountRead() uint64 { + if x != nil { + return x.OpsCountRead + } + return 0 +} + +func (x *StorageVDevMetrics) GetOpsCountWrite() uint64 { + if x != nil { + return x.OpsCountWrite + } + return 0 +} + +func (x *StorageVDevMetrics) GetIOsInProgress() uint64 { + if x != nil { + return x.IOsInProgress + } + return 0 +} + +func (x *StorageVDevMetrics) GetReadTicks() uint64 { + if x != nil { + return x.ReadTicks + } + return 0 +} + +func (x *StorageVDevMetrics) GetWriteTicks() uint64 { + if x != nil { + return x.WriteTicks + } + return 0 +} + +func (x *StorageVDevMetrics) GetIOsTotalTicks() uint64 { + if x != nil { + return x.IOsTotalTicks + } + return 0 +} + +func (x *StorageVDevMetrics) GetWeightedIOTicks() uint64 { + if x != nil { + return x.WeightedIOTicks + } + return 0 +} + +// StorageDiskMetric - contains disk metrics from ZFS storage +type StorageDiskMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DiskName *evecommon.DiskDescription `protobuf:"bytes,1,opt,name=disk_name,json=diskName,proto3" json:"disk_name,omitempty"` + Metrics *StorageVDevMetrics `protobuf:"bytes,2,opt,name=metrics,proto3" json:"metrics,omitempty"` // Metrics for the disk +} + +func (x *StorageDiskMetric) Reset() { + *x = StorageDiskMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageDiskMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageDiskMetric) ProtoMessage() {} + +func (x *StorageDiskMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[13] + 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 StorageDiskMetric.ProtoReflect.Descriptor instead. +func (*StorageDiskMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{13} +} + +func (x *StorageDiskMetric) GetDiskName() *evecommon.DiskDescription { + if x != nil { + return x.DiskName + } + return nil +} + +func (x *StorageDiskMetric) GetMetrics() *StorageVDevMetrics { + if x != nil { + return x.Metrics + } + return nil +} + +// StorageChildren - contains child for zpool metrics +// from ZFS storage for RAID or Mirrors +type StorageChildrenMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The GUID of the child. Unique value. + GUID uint64 `protobuf:"varint,1,opt,name=g_u_i_d,json=gUID,proto3" json:"g_u_i_d,omitempty"` + // Metrics for disks included in RAID or mirror + Disks []*StorageDiskMetric `protobuf:"bytes,2,rep,name=disks,proto3" json:"disks,omitempty"` + // Children of this dataset + Children []*StorageChildrenMetric `protobuf:"bytes,3,rep,name=children,proto3" json:"children,omitempty"` + // Metrics for the whole RAID or mirror + Metrics *StorageVDevMetrics `protobuf:"bytes,4,opt,name=metrics,proto3" json:"metrics,omitempty"` +} + +func (x *StorageChildrenMetric) Reset() { + *x = StorageChildrenMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageChildrenMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageChildrenMetric) ProtoMessage() {} + +func (x *StorageChildrenMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[14] + 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 StorageChildrenMetric.ProtoReflect.Descriptor instead. +func (*StorageChildrenMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{14} +} + +func (x *StorageChildrenMetric) GetGUID() uint64 { + if x != nil { + return x.GUID + } + return 0 +} + +func (x *StorageChildrenMetric) GetDisks() []*StorageDiskMetric { + if x != nil { + return x.Disks + } + return nil +} + +func (x *StorageChildrenMetric) GetChildren() []*StorageChildrenMetric { + if x != nil { + return x.Children + } + return nil +} + +func (x *StorageChildrenMetric) GetMetrics() *StorageVDevMetrics { + if x != nil { + return x.Metrics + } + return nil +} + +// StorageMetric - contains zpool metrics including child devices +type StorageMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PoolName string `protobuf:"bytes,1,opt,name=pool_name,json=poolName,proto3" json:"pool_name,omitempty"` + // Deprecated tag 2 + // Deprecated tag 3 + // Deprecated tag 4 + // Time of the collection metrics. + CollectionTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=collection_time,json=collectionTime,proto3" json:"collection_time,omitempty"` + // Metrics for zpool + ZpoolMetrics *StorageVDevMetrics `protobuf:"bytes,6,opt,name=zpool_metrics,json=zpoolMetrics,proto3" json:"zpool_metrics,omitempty"` + // Metrics for RAID or Mirror + ChildrenDatasets []*StorageChildrenMetric `protobuf:"bytes,7,rep,name=children_datasets,json=childrenDatasets,proto3" json:"children_datasets,omitempty"` + // Metrics for disks that are not included in the RAID or mirror + Disks []*StorageDiskMetric `protobuf:"bytes,8,rep,name=disks,proto3" json:"disks,omitempty"` + // Metrics for zvols + Zvols []*StorageVDevMetrics `protobuf:"bytes,9,rep,name=zvols,proto3" json:"zvols,omitempty"` +} + +func (x *StorageMetric) Reset() { + *x = StorageMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageMetric) ProtoMessage() {} + +func (x *StorageMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[15] + 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 StorageMetric.ProtoReflect.Descriptor instead. +func (*StorageMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{15} +} + +func (x *StorageMetric) GetPoolName() string { + if x != nil { + return x.PoolName + } + return "" +} + +func (x *StorageMetric) GetCollectionTime() *timestamppb.Timestamp { + if x != nil { + return x.CollectionTime + } + return nil +} + +func (x *StorageMetric) GetZpoolMetrics() *StorageVDevMetrics { + if x != nil { + return x.ZpoolMetrics + } + return nil +} + +func (x *StorageMetric) GetChildrenDatasets() []*StorageChildrenMetric { + if x != nil { + return x.ChildrenDatasets + } + return nil +} + +func (x *StorageMetric) GetDisks() []*StorageDiskMetric { + if x != nil { + return x.Disks + } + return nil +} + +func (x *StorageMetric) GetZvols() []*StorageVDevMetrics { + if x != nil { + return x.Zvols + } + return nil +} + +type DeviceMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // memory - OBSOLETE. use DeviceMemoryMetric + Memory *MemoryMetric `protobuf:"bytes,2,opt,name=memory,proto3" json:"memory,omitempty"` + Network []*NetworkMetric `protobuf:"bytes,3,rep,name=network,proto3" json:"network,omitempty"` + Zedcloud []*ZedcloudMetric `protobuf:"bytes,4,rep,name=zedcloud,proto3" json:"zedcloud,omitempty"` + // deprecated = 5; + Disk []*DiskMetric `protobuf:"bytes,6,rep,name=disk,proto3" json:"disk,omitempty"` + CpuMetric *AppCpuMetric `protobuf:"bytes,7,opt,name=cpuMetric,proto3" json:"cpuMetric,omitempty"` + MetricItems []*MetricItem `protobuf:"bytes,8,rep,name=metricItems,proto3" json:"metricItems,omitempty"` + RuntimeStorageOverheadMB uint64 `protobuf:"varint,9,opt,name=runtimeStorageOverheadMB,proto3" json:"runtimeStorageOverheadMB,omitempty"` // In MB + AppRunTimeStorageMB uint64 `protobuf:"varint,10,opt,name=appRunTimeStorageMB,proto3" json:"appRunTimeStorageMB,omitempty"` // In MB + // systemServicesMemoryMB - OBSOLETE. Will no longer be used. + SystemServicesMemoryMB *MemoryMetric `protobuf:"bytes,11,opt,name=systemServicesMemoryMB,proto3" json:"systemServicesMemoryMB,omitempty"` // In MB + Log *LogMetric `protobuf:"bytes,12,opt,name=log,proto3" json:"log,omitempty"` + Cipher []*CipherMetric `protobuf:"bytes,13,rep,name=cipher,proto3" json:"cipher,omitempty"` // Object decryption + Acl *AclMetric `protobuf:"bytes,14,opt,name=acl,proto3" json:"acl,omitempty"` + Newlog *NewlogMetric `protobuf:"bytes,15,opt,name=newlog,proto3" json:"newlog,omitempty"` + Zedbox *ZedboxStats `protobuf:"bytes,16,opt,name=zedbox,proto3" json:"zedbox,omitempty"` + // deviceMemory - Memory metrics. + DeviceMemory *DeviceMemoryMetric `protobuf:"bytes,17,opt,name=deviceMemory,proto3" json:"deviceMemory,omitempty"` + // Last change to EdgeDevConfig received by device from controller + LastReceivedConfig *timestamppb.Timestamp `protobuf:"bytes,18,opt,name=last_received_config,json=lastReceivedConfig,proto3" json:"last_received_config,omitempty"` + // Last change to EdgeDevConfig processed by device + LastProcessedConfig *timestamppb.Timestamp `protobuf:"bytes,19,opt,name=last_processed_config,json=lastProcessedConfig,proto3" json:"last_processed_config,omitempty"` + Cellular []*CellularMetric `protobuf:"bytes,20,rep,name=cellular,proto3" json:"cellular,omitempty"` + Flowlog *FlowlogMetric `protobuf:"bytes,21,opt,name=flowlog,proto3" json:"flowlog,omitempty"` + // Time to wait between metrics messages before marking an edge-node as + // inactive in the controller. 'dormantTimeInSeconds' is subjected to change based + // of network connectivity. + DormantTimeInSeconds uint64 `protobuf:"varint,22,opt,name=dormant_time_in_seconds,json=dormantTimeInSeconds,proto3" json:"dormant_time_in_seconds,omitempty"` + StorageMetrics []*StorageMetric `protobuf:"bytes,23,rep,name=storage_metrics,json=storageMetrics,proto3" json:"storage_metrics,omitempty"` // Storage metrics from ZFS +} + +func (x *DeviceMetric) Reset() { + *x = DeviceMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeviceMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceMetric) ProtoMessage() {} + +func (x *DeviceMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[16] + 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 DeviceMetric.ProtoReflect.Descriptor instead. +func (*DeviceMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{16} +} + +func (x *DeviceMetric) GetMemory() *MemoryMetric { + if x != nil { + return x.Memory + } + return nil +} + +func (x *DeviceMetric) GetNetwork() []*NetworkMetric { + if x != nil { + return x.Network + } + return nil +} + +func (x *DeviceMetric) GetZedcloud() []*ZedcloudMetric { + if x != nil { + return x.Zedcloud + } + return nil +} + +func (x *DeviceMetric) GetDisk() []*DiskMetric { + if x != nil { + return x.Disk + } + return nil +} + +func (x *DeviceMetric) GetCpuMetric() *AppCpuMetric { + if x != nil { + return x.CpuMetric + } + return nil +} + +func (x *DeviceMetric) GetMetricItems() []*MetricItem { + if x != nil { + return x.MetricItems + } + return nil +} + +func (x *DeviceMetric) GetRuntimeStorageOverheadMB() uint64 { + if x != nil { + return x.RuntimeStorageOverheadMB + } + return 0 +} + +func (x *DeviceMetric) GetAppRunTimeStorageMB() uint64 { + if x != nil { + return x.AppRunTimeStorageMB + } + return 0 +} + +func (x *DeviceMetric) GetSystemServicesMemoryMB() *MemoryMetric { + if x != nil { + return x.SystemServicesMemoryMB + } + return nil +} + +func (x *DeviceMetric) GetLog() *LogMetric { + if x != nil { + return x.Log + } + return nil +} + +func (x *DeviceMetric) GetCipher() []*CipherMetric { + if x != nil { + return x.Cipher + } + return nil +} + +func (x *DeviceMetric) GetAcl() *AclMetric { + if x != nil { + return x.Acl + } + return nil +} + +func (x *DeviceMetric) GetNewlog() *NewlogMetric { + if x != nil { + return x.Newlog + } + return nil +} + +func (x *DeviceMetric) GetZedbox() *ZedboxStats { + if x != nil { + return x.Zedbox + } + return nil +} + +func (x *DeviceMetric) GetDeviceMemory() *DeviceMemoryMetric { + if x != nil { + return x.DeviceMemory + } + return nil +} + +func (x *DeviceMetric) GetLastReceivedConfig() *timestamppb.Timestamp { + if x != nil { + return x.LastReceivedConfig + } + return nil +} + +func (x *DeviceMetric) GetLastProcessedConfig() *timestamppb.Timestamp { + if x != nil { + return x.LastProcessedConfig + } + return nil +} + +func (x *DeviceMetric) GetCellular() []*CellularMetric { + if x != nil { + return x.Cellular + } + return nil +} + +func (x *DeviceMetric) GetFlowlog() *FlowlogMetric { + if x != nil { + return x.Flowlog + } + return nil +} + +func (x *DeviceMetric) GetDormantTimeInSeconds() uint64 { + if x != nil { + return x.DormantTimeInSeconds + } + return 0 +} + +func (x *DeviceMetric) GetStorageMetrics() []*StorageMetric { + if x != nil { + return x.StorageMetrics + } + return nil +} + +type AclMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalRuleCount uint64 `protobuf:"varint,1,opt,name=total_rule_count,json=totalRuleCount,proto3" json:"total_rule_count,omitempty"` // Total number of rules found in filter (FORWARD), raw (PREROUTING) tables +} + +func (x *AclMetric) Reset() { + *x = AclMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AclMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AclMetric) ProtoMessage() {} + +func (x *AclMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[17] + 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 AclMetric.ProtoReflect.Descriptor instead. +func (*AclMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{17} +} + +func (x *AclMetric) GetTotalRuleCount() uint64 { + if x != nil { + return x.TotalRuleCount + } + return 0 +} + +type AppContainerMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppContainerName string `protobuf:"bytes,1,opt,name=appContainerName,proto3" json:"appContainerName,omitempty"` // the unique key for the container in a VM or IoT Edge + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Status string e.g. Uptime 3 hours + PIDs uint32 `protobuf:"varint,3,opt,name=PIDs,proto3" json:"PIDs,omitempty"` // Number of PIDs inside the container + Cpu *AppCpuMetric `protobuf:"bytes,4,opt,name=cpu,proto3" json:"cpu,omitempty"` // container cpu usage + // memory - OBSOLETE. Use appContainerMemory instead + Memory *MemoryMetric `protobuf:"bytes,5,opt,name=memory,proto3" json:"memory,omitempty"` // container memory usage, will fill 'usedMem', 'availMem' initially + Network *NetworkMetric `protobuf:"bytes,6,opt,name=network,proto3" json:"network,omitempty"` // container network usage, will fill 'txBytes', 'rxBytes' initially + Disk *DiskMetric `protobuf:"bytes,7,opt,name=disk,proto3" json:"disk,omitempty"` // container Block IO, will fill 'readBytes', 'writeBytes' initially + AppContainerMemory *AppMemoryMetric `protobuf:"bytes,8,opt,name=appContainerMemory,proto3" json:"appContainerMemory,omitempty"` +} + +func (x *AppContainerMetric) Reset() { + *x = AppContainerMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppContainerMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppContainerMetric) ProtoMessage() {} + +func (x *AppContainerMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[18] + 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 AppContainerMetric.ProtoReflect.Descriptor instead. +func (*AppContainerMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{18} +} + +func (x *AppContainerMetric) GetAppContainerName() string { + if x != nil { + return x.AppContainerName + } + return "" +} + +func (x *AppContainerMetric) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *AppContainerMetric) GetPIDs() uint32 { + if x != nil { + return x.PIDs + } + return 0 +} + +func (x *AppContainerMetric) GetCpu() *AppCpuMetric { + if x != nil { + return x.Cpu + } + return nil +} + +func (x *AppContainerMetric) GetMemory() *MemoryMetric { + if x != nil { + return x.Memory + } + return nil +} + +func (x *AppContainerMetric) GetNetwork() *NetworkMetric { + if x != nil { + return x.Network + } + return nil +} + +func (x *AppContainerMetric) GetDisk() *DiskMetric { + if x != nil { + return x.Disk + } + return nil +} + +func (x *AppContainerMetric) GetAppContainerMemory() *AppMemoryMetric { + if x != nil { + return x.AppContainerMemory + } + return nil +} + +// Open-ended metrics from different part of the device such as LTE modem +// metrics. +type MetricItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // E.g., "lte-signal-strength" + Type MetricItemType `protobuf:"varint,2,opt,name=type,proto3,enum=org.lfedge.eve.metrics.MetricItemType" json:"type,omitempty"` + // Types that are assignable to MetricItemValue: + // + // *MetricItem_BoolValue + // *MetricItem_Uint32Value + // *MetricItem_Uint64Value + // *MetricItem_FloatValue + // *MetricItem_StringValue + MetricItemValue isMetricItem_MetricItemValue `protobuf_oneof:"metricItemValue"` +} + +func (x *MetricItem) Reset() { + *x = MetricItem{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MetricItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetricItem) ProtoMessage() {} + +func (x *MetricItem) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[19] + 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 MetricItem.ProtoReflect.Descriptor instead. +func (*MetricItem) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{19} +} + +func (x *MetricItem) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *MetricItem) GetType() MetricItemType { + if x != nil { + return x.Type + } + return MetricItemType_MetricItemOther +} + +func (m *MetricItem) GetMetricItemValue() isMetricItem_MetricItemValue { + if m != nil { + return m.MetricItemValue + } + return nil +} + +func (x *MetricItem) GetBoolValue() bool { + if x, ok := x.GetMetricItemValue().(*MetricItem_BoolValue); ok { + return x.BoolValue + } + return false +} + +func (x *MetricItem) GetUint32Value() uint32 { + if x, ok := x.GetMetricItemValue().(*MetricItem_Uint32Value); ok { + return x.Uint32Value + } + return 0 +} + +func (x *MetricItem) GetUint64Value() uint64 { + if x, ok := x.GetMetricItemValue().(*MetricItem_Uint64Value); ok { + return x.Uint64Value + } + return 0 +} + +func (x *MetricItem) GetFloatValue() float32 { + if x, ok := x.GetMetricItemValue().(*MetricItem_FloatValue); ok { + return x.FloatValue + } + return 0 +} + +func (x *MetricItem) GetStringValue() string { + if x, ok := x.GetMetricItemValue().(*MetricItem_StringValue); ok { + return x.StringValue + } + return "" +} + +type isMetricItem_MetricItemValue interface { + isMetricItem_MetricItemValue() +} + +type MetricItem_BoolValue struct { + BoolValue bool `protobuf:"varint,3,opt,name=boolValue,proto3,oneof"` +} + +type MetricItem_Uint32Value struct { + Uint32Value uint32 `protobuf:"varint,4,opt,name=uint32Value,proto3,oneof"` // If timer this is in seconds +} + +type MetricItem_Uint64Value struct { + Uint64Value uint64 `protobuf:"varint,5,opt,name=uint64Value,proto3,oneof"` +} + +type MetricItem_FloatValue struct { + FloatValue float32 `protobuf:"fixed32,6,opt,name=floatValue,proto3,oneof"` +} + +type MetricItem_StringValue struct { + StringValue string `protobuf:"bytes,7,opt,name=stringValue,proto3,oneof"` // Use with care +} + +func (*MetricItem_BoolValue) isMetricItem_MetricItemValue() {} + +func (*MetricItem_Uint32Value) isMetricItem_MetricItemValue() {} + +func (*MetricItem_Uint64Value) isMetricItem_MetricItemValue() {} + +func (*MetricItem_FloatValue) isMetricItem_MetricItemValue() {} + +func (*MetricItem_StringValue) isMetricItem_MetricItemValue() {} + +// For each partition; counts since boot +type DiskMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Disk string `protobuf:"bytes,1,opt,name=disk,proto3" json:"disk,omitempty"` // E.g., "mmcblk0p2" + MountPath string `protobuf:"bytes,2,opt,name=mountPath,proto3" json:"mountPath,omitempty"` // E.g., "/config" + ReadBytes uint64 `protobuf:"varint,3,opt,name=readBytes,proto3" json:"readBytes,omitempty"` // In MB + WriteBytes uint64 `protobuf:"varint,4,opt,name=writeBytes,proto3" json:"writeBytes,omitempty"` // In MB + ReadCount uint64 `protobuf:"varint,5,opt,name=readCount,proto3" json:"readCount,omitempty"` // Number of ops + WriteCount uint64 `protobuf:"varint,6,opt,name=writeCount,proto3" json:"writeCount,omitempty"` // Number of ops + Total uint64 `protobuf:"varint,7,opt,name=total,proto3" json:"total,omitempty"` // in MBytes; if we know the mountpath + Used uint64 `protobuf:"varint,8,opt,name=used,proto3" json:"used,omitempty"` // in MBytes; if we know the mountpath + Free uint64 `protobuf:"varint,9,opt,name=free,proto3" json:"free,omitempty"` // in MBytes; if we know the mountpath +} + +func (x *DiskMetric) Reset() { + *x = DiskMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DiskMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DiskMetric) ProtoMessage() {} + +func (x *DiskMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[20] + 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 DiskMetric.ProtoReflect.Descriptor instead. +func (*DiskMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{20} +} + +func (x *DiskMetric) GetDisk() string { + if x != nil { + return x.Disk + } + return "" +} + +func (x *DiskMetric) GetMountPath() string { + if x != nil { + return x.MountPath + } + return "" +} + +func (x *DiskMetric) GetReadBytes() uint64 { + if x != nil { + return x.ReadBytes + } + return 0 +} + +func (x *DiskMetric) GetWriteBytes() uint64 { + if x != nil { + return x.WriteBytes + } + return 0 +} + +func (x *DiskMetric) GetReadCount() uint64 { + if x != nil { + return x.ReadCount + } + return 0 +} + +func (x *DiskMetric) GetWriteCount() uint64 { + if x != nil { + return x.WriteCount + } + return 0 +} + +func (x *DiskMetric) GetTotal() uint64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *DiskMetric) GetUsed() uint64 { + if x != nil { + return x.Used + } + return 0 +} + +func (x *DiskMetric) GetFree() uint64 { + if x != nil { + return x.Free + } + return 0 +} + +type AppDiskMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Disk string `protobuf:"bytes,1,opt,name=disk,proto3" json:"disk,omitempty"` // E.g., "mmcblk0p2" + Provisioned uint64 `protobuf:"varint,2,opt,name=provisioned,proto3" json:"provisioned,omitempty"` // in MBytes + Used uint64 `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"` // in MBytes + DiskType string `protobuf:"bytes,4,opt,name=diskType,proto3" json:"diskType,omitempty"` // Type of disk, e.g., QCOW2, RAW etc. + Dirty bool `protobuf:"varint,5,opt,name=dirty,proto3" json:"dirty,omitempty"` // Dirty flag +} + +func (x *AppDiskMetric) Reset() { + *x = AppDiskMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppDiskMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppDiskMetric) ProtoMessage() {} + +func (x *AppDiskMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[21] + 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 AppDiskMetric.ProtoReflect.Descriptor instead. +func (*AppDiskMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{21} +} + +func (x *AppDiskMetric) GetDisk() string { + if x != nil { + return x.Disk + } + return "" +} + +func (x *AppDiskMetric) GetProvisioned() uint64 { + if x != nil { + return x.Provisioned + } + return 0 +} + +func (x *AppDiskMetric) GetUsed() uint64 { + if x != nil { + return x.Used + } + return 0 +} + +func (x *AppDiskMetric) GetDiskType() string { + if x != nil { + return x.DiskType + } + return "" +} + +func (x *AppDiskMetric) GetDirty() bool { + if x != nil { + return x.Dirty + } + return false +} + +type AppMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppID string `protobuf:"bytes,1,opt,name=AppID,proto3" json:"AppID,omitempty"` + AppVersion string `protobuf:"bytes,10,opt,name=appVersion,proto3" json:"appVersion,omitempty"` + AppName string `protobuf:"bytes,2,opt,name=AppName,proto3" json:"AppName,omitempty"` + Cpu *AppCpuMetric `protobuf:"bytes,3,opt,name=cpu,proto3" json:"cpu,omitempty"` + // memory - OBSOLETE. Use appMemory instead + Memory *MemoryMetric `protobuf:"bytes,4,opt,name=memory,proto3" json:"memory,omitempty"` + Network []*NetworkMetric `protobuf:"bytes,5,rep,name=network,proto3" json:"network,omitempty"` + Disk []*AppDiskMetric `protobuf:"bytes,6,rep,name=disk,proto3" json:"disk,omitempty"` + Container []*AppContainerMetric `protobuf:"bytes,7,rep,name=container,proto3" json:"container,omitempty"` + AppMemory *AppMemoryMetric `protobuf:"bytes,8,opt,name=appMemory,proto3" json:"appMemory,omitempty"` +} + +func (x *AppMetric) Reset() { + *x = AppMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppMetric) ProtoMessage() {} + +func (x *AppMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[22] + 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 AppMetric.ProtoReflect.Descriptor instead. +func (*AppMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{22} +} + +func (x *AppMetric) GetAppID() string { + if x != nil { + return x.AppID + } + return "" +} + +func (x *AppMetric) GetAppVersion() string { + if x != nil { + return x.AppVersion + } + return "" +} + +func (x *AppMetric) GetAppName() string { + if x != nil { + return x.AppName + } + return "" +} + +func (x *AppMetric) GetCpu() *AppCpuMetric { + if x != nil { + return x.Cpu + } + return nil +} + +func (x *AppMetric) GetMemory() *MemoryMetric { + if x != nil { + return x.Memory + } + return nil +} + +func (x *AppMetric) GetNetwork() []*NetworkMetric { + if x != nil { + return x.Network + } + return nil +} + +func (x *AppMetric) GetDisk() []*AppDiskMetric { + if x != nil { + return x.Disk + } + return nil +} + +func (x *AppMetric) GetContainer() []*AppContainerMetric { + if x != nil { + return x.Container + } + return nil +} + +func (x *AppMetric) GetAppMemory() *AppMemoryMetric { + if x != nil { + return x.AppMemory + } + return nil +} + +// We track device and app logs separately with these counters. +// An event is counted as a log input that can be sent onwards (to cloud) or +// dropped for a few reason. +// Thus: +// totalAppLogInput = numAppEventsSent + numAppEventErrors + num4xxResponses +// totalDeviceLogInput = numDeviceEventsSent + numDeviceEventErrors +type LogMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Sent events count also includes events that the device tried to send but got deferred. + // Because deferred logs will eventually reach cloud after network is restored. + NumDeviceEventsSent uint64 `protobuf:"varint,1,opt,name=numDeviceEventsSent,proto3" json:"numDeviceEventsSent,omitempty"` + NumDeviceBundlesSent uint64 `protobuf:"varint,2,opt,name=numDeviceBundlesSent,proto3" json:"numDeviceBundlesSent,omitempty"` + NumAppEventsSent uint64 `protobuf:"varint,3,opt,name=numAppEventsSent,proto3" json:"numAppEventsSent,omitempty"` + NumAppBundlesSent uint64 `protobuf:"varint,4,opt,name=numAppBundlesSent,proto3" json:"numAppBundlesSent,omitempty"` + // num4xxResponses: This counter is akin to event errors/drops. + // + // 4xx response for a device event bundle does not make sense, unless + // there is a programming error in EVE code that sends device event bundles to cloud. + // But, app instances can disappear from cloud and any further logs sent by EVE to cloud + // will result in a 4xx response back. + // Any time an app log bundle gets rejected with 4xx response from cloud, num4xxResponses + // should be incremented by the number of events present in that rejected bundle. + Num4XxResponses uint64 `protobuf:"varint,5,opt,name=num4xxResponses,proto3" json:"num4xxResponses,omitempty"` + LastDeviceBundleSendTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=lastDeviceBundleSendTime,proto3" json:"lastDeviceBundleSendTime,omitempty"` + LastAppBundleSendTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=lastAppBundleSendTime,proto3" json:"lastAppBundleSendTime,omitempty"` + IsLogProcessingDeferred bool `protobuf:"varint,8,opt,name=isLogProcessingDeferred,proto3" json:"isLogProcessingDeferred,omitempty"` + NumTimesDeferred uint64 `protobuf:"varint,9,opt,name=numTimesDeferred,proto3" json:"numTimesDeferred,omitempty"` + LastLogDeferTime *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=lastLogDeferTime,proto3" json:"lastLogDeferTime,omitempty"` + TotalDeviceLogInput uint64 `protobuf:"varint,13,opt,name=totalDeviceLogInput,proto3" json:"totalDeviceLogInput,omitempty"` + TotalAppLogInput uint64 `protobuf:"varint,14,opt,name=totalAppLogInput,proto3" json:"totalAppLogInput,omitempty"` + // eg:- Size of individual event is larger than the max proto buf size limit. + NumDeviceEventErrors uint64 `protobuf:"varint,15,opt,name=numDeviceEventErrors,proto3" json:"numDeviceEventErrors,omitempty"` + NumAppEventErrors uint64 `protobuf:"varint,16,opt,name=numAppEventErrors,proto3" json:"numAppEventErrors,omitempty"` + NumDeviceBundleProtoBytesSent uint64 `protobuf:"varint,17,opt,name=numDeviceBundleProtoBytesSent,proto3" json:"numDeviceBundleProtoBytesSent,omitempty"` + NumAppBundleProtoBytesSent uint64 `protobuf:"varint,18,opt,name=numAppBundleProtoBytesSent,proto3" json:"numAppBundleProtoBytesSent,omitempty"` + // Split of totalDeviceLogInput per source string + InputSources map[string]uint64 `protobuf:"bytes,19,rep,name=input_sources,json=inputSources,proto3" json:"input_sources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *LogMetric) Reset() { + *x = LogMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogMetric) ProtoMessage() {} + +func (x *LogMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[23] + 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 LogMetric.ProtoReflect.Descriptor instead. +func (*LogMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{23} +} + +func (x *LogMetric) GetNumDeviceEventsSent() uint64 { + if x != nil { + return x.NumDeviceEventsSent + } + return 0 +} + +func (x *LogMetric) GetNumDeviceBundlesSent() uint64 { + if x != nil { + return x.NumDeviceBundlesSent + } + return 0 +} + +func (x *LogMetric) GetNumAppEventsSent() uint64 { + if x != nil { + return x.NumAppEventsSent + } + return 0 +} + +func (x *LogMetric) GetNumAppBundlesSent() uint64 { + if x != nil { + return x.NumAppBundlesSent + } + return 0 +} + +func (x *LogMetric) GetNum4XxResponses() uint64 { + if x != nil { + return x.Num4XxResponses + } + return 0 +} + +func (x *LogMetric) GetLastDeviceBundleSendTime() *timestamppb.Timestamp { + if x != nil { + return x.LastDeviceBundleSendTime + } + return nil +} + +func (x *LogMetric) GetLastAppBundleSendTime() *timestamppb.Timestamp { + if x != nil { + return x.LastAppBundleSendTime + } + return nil +} + +func (x *LogMetric) GetIsLogProcessingDeferred() bool { + if x != nil { + return x.IsLogProcessingDeferred + } + return false +} + +func (x *LogMetric) GetNumTimesDeferred() uint64 { + if x != nil { + return x.NumTimesDeferred + } + return 0 +} + +func (x *LogMetric) GetLastLogDeferTime() *timestamppb.Timestamp { + if x != nil { + return x.LastLogDeferTime + } + return nil +} + +func (x *LogMetric) GetTotalDeviceLogInput() uint64 { + if x != nil { + return x.TotalDeviceLogInput + } + return 0 +} + +func (x *LogMetric) GetTotalAppLogInput() uint64 { + if x != nil { + return x.TotalAppLogInput + } + return 0 +} + +func (x *LogMetric) GetNumDeviceEventErrors() uint64 { + if x != nil { + return x.NumDeviceEventErrors + } + return 0 +} + +func (x *LogMetric) GetNumAppEventErrors() uint64 { + if x != nil { + return x.NumAppEventErrors + } + return 0 +} + +func (x *LogMetric) GetNumDeviceBundleProtoBytesSent() uint64 { + if x != nil { + return x.NumDeviceBundleProtoBytesSent + } + return 0 +} + +func (x *LogMetric) GetNumAppBundleProtoBytesSent() uint64 { + if x != nil { + return x.NumAppBundleProtoBytesSent + } + return 0 +} + +func (x *LogMetric) GetInputSources() map[string]uint64 { + if x != nil { + return x.InputSources + } + return nil +} + +// Lisp stats +type PktStat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Packets uint64 `protobuf:"varint,1,opt,name=Packets,proto3" json:"Packets,omitempty"` + Bytes uint64 `protobuf:"varint,2,opt,name=Bytes,proto3" json:"Bytes,omitempty"` +} + +func (x *PktStat) Reset() { + *x = PktStat{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PktStat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PktStat) ProtoMessage() {} + +func (x *PktStat) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PktStat.ProtoReflect.Descriptor instead. +func (*PktStat) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{24} +} + +func (x *PktStat) GetPackets() uint64 { + if x != nil { + return x.Packets + } + return 0 +} + +func (x *PktStat) GetBytes() uint64 { + if x != nil { + return x.Bytes + } + return 0 +} + +// Vpn Stats +type ZMetricConn struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InPkts *PktStat `protobuf:"bytes,1,opt,name=InPkts,proto3" json:"InPkts,omitempty"` + OutPkts *PktStat `protobuf:"bytes,2,opt,name=OutPkts,proto3" json:"OutPkts,omitempty"` + ErrPkts *PktStat `protobuf:"bytes,3,opt,name=ErrPkts,proto3" json:"ErrPkts,omitempty"` + CarierErrPkts *PktStat `protobuf:"bytes,4,opt,name=CarierErrPkts,proto3" json:"CarierErrPkts,omitempty"` +} + +func (x *ZMetricConn) Reset() { + *x = ZMetricConn{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricConn) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricConn) ProtoMessage() {} + +func (x *ZMetricConn) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZMetricConn.ProtoReflect.Descriptor instead. +func (*ZMetricConn) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{25} +} + +func (x *ZMetricConn) GetInPkts() *PktStat { + if x != nil { + return x.InPkts + } + return nil +} + +func (x *ZMetricConn) GetOutPkts() *PktStat { + if x != nil { + return x.OutPkts + } + return nil +} + +func (x *ZMetricConn) GetErrPkts() *PktStat { + if x != nil { + return x.ErrPkts + } + return nil +} + +func (x *ZMetricConn) GetCarierErrPkts() *PktStat { + if x != nil { + return x.CarierErrPkts + } + return nil +} + +type ZMetricVpn struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConnStat *ZMetricConn `protobuf:"bytes,1,opt,name=ConnStat,proto3" json:"ConnStat,omitempty"` + IkeStat *ZMetricConn `protobuf:"bytes,2,opt,name=IkeStat,proto3" json:"IkeStat,omitempty"` + NatTStat *ZMetricConn `protobuf:"bytes,3,opt,name=NatTStat,proto3" json:"NatTStat,omitempty"` + EspStat *ZMetricConn `protobuf:"bytes,4,opt,name=EspStat,proto3" json:"EspStat,omitempty"` +} + +func (x *ZMetricVpn) Reset() { + *x = ZMetricVpn{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricVpn) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricVpn) ProtoMessage() {} + +func (x *ZMetricVpn) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[26] + 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 ZMetricVpn.ProtoReflect.Descriptor instead. +func (*ZMetricVpn) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{26} +} + +func (x *ZMetricVpn) GetConnStat() *ZMetricConn { + if x != nil { + return x.ConnStat + } + return nil +} + +func (x *ZMetricVpn) GetIkeStat() *ZMetricConn { + if x != nil { + return x.IkeStat + } + return nil +} + +func (x *ZMetricVpn) GetNatTStat() *ZMetricConn { + if x != nil { + return x.NatTStat + } + return nil +} + +func (x *ZMetricVpn) GetEspStat() *ZMetricConn { + if x != nil { + return x.EspStat + } + return nil +} + +// For other services with no specific metrics +type ZMetricNone struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ZMetricNone) Reset() { + *x = ZMetricNone{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricNone) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricNone) ProtoMessage() {} + +func (x *ZMetricNone) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[27] + 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 ZMetricNone.ProtoReflect.Descriptor instead. +func (*ZMetricNone) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{27} +} + +// flow stats +type ZMetricFlowLink struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Link: + // + // *ZMetricFlowLink_SubNet + Link isZMetricFlowLink_Link `protobuf_oneof:"Link"` + SpiId string `protobuf:"bytes,3,opt,name=spiId,proto3" json:"spiId,omitempty"` // IpSec: SpiId +} + +func (x *ZMetricFlowLink) Reset() { + *x = ZMetricFlowLink{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricFlowLink) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricFlowLink) ProtoMessage() {} + +func (x *ZMetricFlowLink) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[28] + 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 ZMetricFlowLink.ProtoReflect.Descriptor instead. +func (*ZMetricFlowLink) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{28} +} + +func (m *ZMetricFlowLink) GetLink() isZMetricFlowLink_Link { + if m != nil { + return m.Link + } + return nil +} + +func (x *ZMetricFlowLink) GetSubNet() string { + if x, ok := x.GetLink().(*ZMetricFlowLink_SubNet); ok { + return x.SubNet + } + return "" +} + +func (x *ZMetricFlowLink) GetSpiId() string { + if x != nil { + return x.SpiId + } + return "" +} + +type isZMetricFlowLink_Link interface { + isZMetricFlowLink_Link() +} + +type ZMetricFlowLink_SubNet struct { + SubNet string `protobuf:"bytes,1,opt,name=subNet,proto3,oneof"` // IpSec: Subnet +} + +func (*ZMetricFlowLink_SubNet) isZMetricFlowLink_Link() {} + +type ZMetricFlowEndPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Endpoint: + // + // *ZMetricFlowEndPoint_IpAddr + Endpoint isZMetricFlowEndPoint_Endpoint `protobuf_oneof:"Endpoint"` + Link []*ZMetricFlowLink `protobuf:"bytes,5,rep,name=link,proto3" json:"link,omitempty"` + Stats *PktStat `protobuf:"bytes,10,opt,name=stats,proto3" json:"stats,omitempty"` // traffic +} + +func (x *ZMetricFlowEndPoint) Reset() { + *x = ZMetricFlowEndPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricFlowEndPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricFlowEndPoint) ProtoMessage() {} + +func (x *ZMetricFlowEndPoint) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZMetricFlowEndPoint.ProtoReflect.Descriptor instead. +func (*ZMetricFlowEndPoint) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{29} +} + +func (m *ZMetricFlowEndPoint) GetEndpoint() isZMetricFlowEndPoint_Endpoint { + if m != nil { + return m.Endpoint + } + return nil +} + +func (x *ZMetricFlowEndPoint) GetIpAddr() string { + if x, ok := x.GetEndpoint().(*ZMetricFlowEndPoint_IpAddr); ok { + return x.IpAddr + } + return "" +} + +func (x *ZMetricFlowEndPoint) GetLink() []*ZMetricFlowLink { + if x != nil { + return x.Link + } + return nil +} + +func (x *ZMetricFlowEndPoint) GetStats() *PktStat { + if x != nil { + return x.Stats + } + return nil +} + +type isZMetricFlowEndPoint_Endpoint interface { + isZMetricFlowEndPoint_Endpoint() +} + +type ZMetricFlowEndPoint_IpAddr struct { + IpAddr string `protobuf:"bytes,1,opt,name=ipAddr,proto3,oneof"` // IpSec: Endpoint Ip Address +} + +func (*ZMetricFlowEndPoint_IpAddr) isZMetricFlowEndPoint_Endpoint() {} + +type ZMetricFlow struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // IpSec Conn-Id + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // IpSec Tun-Name + Type uint32 `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"` // IpSec-Vpn + // deprecated = 4; uint64 iid = 4 + EstTime uint64 `protobuf:"varint,5,opt,name=estTime,proto3" json:"estTime,omitempty"` // in seconds + LEndPoint *ZMetricFlowEndPoint `protobuf:"bytes,10,opt,name=lEndPoint,proto3" json:"lEndPoint,omitempty"` + REndPoint []*ZMetricFlowEndPoint `protobuf:"bytes,11,rep,name=rEndPoint,proto3" json:"rEndPoint,omitempty"` +} + +func (x *ZMetricFlow) Reset() { + *x = ZMetricFlow{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricFlow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricFlow) ProtoMessage() {} + +func (x *ZMetricFlow) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZMetricFlow.ProtoReflect.Descriptor instead. +func (*ZMetricFlow) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{30} +} + +func (x *ZMetricFlow) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ZMetricFlow) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ZMetricFlow) GetType() uint32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *ZMetricFlow) GetEstTime() uint64 { + if x != nil { + return x.EstTime + } + return 0 +} + +func (x *ZMetricFlow) GetLEndPoint() *ZMetricFlowEndPoint { + if x != nil { + return x.LEndPoint + } + return nil +} + +func (x *ZMetricFlow) GetREndPoint() []*ZMetricFlowEndPoint { + if x != nil { + return x.REndPoint + } + return nil +} + +type NetworkStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalPackets uint64 `protobuf:"varint,1,opt,name=totalPackets,proto3" json:"totalPackets,omitempty"` + Errors uint64 `protobuf:"varint,2,opt,name=errors,proto3" json:"errors,omitempty"` + Drops uint64 `protobuf:"varint,3,opt,name=drops,proto3" json:"drops,omitempty"` + TotalBytes uint64 `protobuf:"varint,4,opt,name=totalBytes,proto3" json:"totalBytes,omitempty"` +} + +func (x *NetworkStats) Reset() { + *x = NetworkStats{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NetworkStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NetworkStats) ProtoMessage() {} + +func (x *NetworkStats) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NetworkStats.ProtoReflect.Descriptor instead. +func (*NetworkStats) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{31} +} + +func (x *NetworkStats) GetTotalPackets() uint64 { + if x != nil { + return x.TotalPackets + } + return 0 +} + +func (x *NetworkStats) GetErrors() uint64 { + if x != nil { + return x.Errors + } + return 0 +} + +func (x *NetworkStats) GetDrops() uint64 { + if x != nil { + return x.Drops + } + return 0 +} + +func (x *NetworkStats) GetTotalBytes() uint64 { + if x != nil { + return x.TotalBytes + } + return 0 +} + +type ZMetricNetworkStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rx *NetworkStats `protobuf:"bytes,1,opt,name=rx,proto3" json:"rx,omitempty"` + Tx *NetworkStats `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"` +} + +func (x *ZMetricNetworkStats) Reset() { + *x = ZMetricNetworkStats{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricNetworkStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricNetworkStats) ProtoMessage() {} + +func (x *ZMetricNetworkStats) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[32] + 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 ZMetricNetworkStats.ProtoReflect.Descriptor instead. +func (*ZMetricNetworkStats) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{32} +} + +func (x *ZMetricNetworkStats) GetRx() *NetworkStats { + if x != nil { + return x.Rx + } + return nil +} + +func (x *ZMetricNetworkStats) GetTx() *NetworkStats { + if x != nil { + return x.Tx + } + return nil +} + +type ZProbeNIMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CurrentIntf string `protobuf:"bytes,1,opt,name=currentIntf,proto3" json:"currentIntf,omitempty"` // current picked uplink interface + RemoteEndpoint string `protobuf:"bytes,2,opt,name=remoteEndpoint,proto3" json:"remoteEndpoint,omitempty"` // remote URL or IP address for probing + PingIntv uint32 `protobuf:"varint,3,opt,name=pingIntv,proto3" json:"pingIntv,omitempty"` // local ping interval in seconds + RemotePingIntv uint32 `protobuf:"varint,4,opt,name=remotePingIntv,proto3" json:"remotePingIntv,omitempty"` // remote probe interval in seconds + UplinkCnt uint32 `protobuf:"varint,5,opt,name=uplinkCnt,proto3" json:"uplinkCnt,omitempty"` // total number of uplink intf in consideration + IntfMetric []*ZProbeNIMetrics_ZProbeIntfMetric `protobuf:"bytes,10,rep,name=intfMetric,proto3" json:"intfMetric,omitempty"` // per uplink intf probing stats +} + +func (x *ZProbeNIMetrics) Reset() { + *x = ZProbeNIMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZProbeNIMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZProbeNIMetrics) ProtoMessage() {} + +func (x *ZProbeNIMetrics) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[33] + 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 ZProbeNIMetrics.ProtoReflect.Descriptor instead. +func (*ZProbeNIMetrics) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{33} +} + +func (x *ZProbeNIMetrics) GetCurrentIntf() string { + if x != nil { + return x.CurrentIntf + } + return "" +} + +func (x *ZProbeNIMetrics) GetRemoteEndpoint() string { + if x != nil { + return x.RemoteEndpoint + } + return "" +} + +func (x *ZProbeNIMetrics) GetPingIntv() uint32 { + if x != nil { + return x.PingIntv + } + return 0 +} + +func (x *ZProbeNIMetrics) GetRemotePingIntv() uint32 { + if x != nil { + return x.RemotePingIntv + } + return 0 +} + +func (x *ZProbeNIMetrics) GetUplinkCnt() uint32 { + if x != nil { + return x.UplinkCnt + } + return 0 +} + +func (x *ZProbeNIMetrics) GetIntfMetric() []*ZProbeNIMetrics_ZProbeIntfMetric { + if x != nil { + return x.IntfMetric + } + return nil +} + +type ZMetricNetworkInstance struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NetworkID string `protobuf:"bytes,2,opt,name=networkID,proto3" json:"networkID,omitempty"` // UUID + NetworkVersion string `protobuf:"bytes,3,opt,name=networkVersion,proto3" json:"networkVersion,omitempty"` + InstType uint32 `protobuf:"varint,5,opt,name=instType,proto3" json:"instType,omitempty"` // ZNetworkInstType + Displayname string `protobuf:"bytes,6,opt,name=displayname,proto3" json:"displayname,omitempty"` // From NetworkInstance config + Activated bool `protobuf:"varint,7,opt,name=activated,proto3" json:"activated,omitempty"` // Forwarding enabled + Network []*NetworkMetric `protobuf:"bytes,10,rep,name=network,proto3" json:"network,omitempty"` // Aggregate counters for bridge + ProbeMetric *ZProbeNIMetrics `protobuf:"bytes,12,opt,name=probeMetric,proto3" json:"probeMetric,omitempty"` // NI uplink probing stats + // Types that are assignable to InstanceContent: + // + // *ZMetricNetworkInstance_Vpnm + // *ZMetricNetworkInstance_Nonem + InstanceContent isZMetricNetworkInstance_InstanceContent `protobuf_oneof:"InstanceContent"` + FlowStats []*ZMetricFlow `protobuf:"bytes,30,rep,name=flowStats,proto3" json:"flowStats,omitempty"` // deprecated = 31; ZMetricLispGlobal lispGlobalStats = 31 + NetworkStats *ZMetricNetworkStats `protobuf:"bytes,40,opt,name=networkStats,proto3" json:"networkStats,omitempty"` // Network bridge interface statistics + VlanInfo *VlanInfo `protobuf:"bytes,41,opt,name=vlan_info,json=vlanInfo,proto3" json:"vlan_info,omitempty"` // Information about vlans attached to this network instance +} + +func (x *ZMetricNetworkInstance) Reset() { + *x = ZMetricNetworkInstance{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricNetworkInstance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricNetworkInstance) ProtoMessage() {} + +func (x *ZMetricNetworkInstance) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[34] + 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 ZMetricNetworkInstance.ProtoReflect.Descriptor instead. +func (*ZMetricNetworkInstance) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{34} +} + +func (x *ZMetricNetworkInstance) GetNetworkID() string { + if x != nil { + return x.NetworkID + } + return "" +} + +func (x *ZMetricNetworkInstance) GetNetworkVersion() string { + if x != nil { + return x.NetworkVersion + } + return "" +} + +func (x *ZMetricNetworkInstance) GetInstType() uint32 { + if x != nil { + return x.InstType + } + return 0 +} + +func (x *ZMetricNetworkInstance) GetDisplayname() string { + if x != nil { + return x.Displayname + } + return "" +} + +func (x *ZMetricNetworkInstance) GetActivated() bool { + if x != nil { + return x.Activated + } + return false +} + +func (x *ZMetricNetworkInstance) GetNetwork() []*NetworkMetric { + if x != nil { + return x.Network + } + return nil +} + +func (x *ZMetricNetworkInstance) GetProbeMetric() *ZProbeNIMetrics { + if x != nil { + return x.ProbeMetric + } + return nil +} + +func (m *ZMetricNetworkInstance) GetInstanceContent() isZMetricNetworkInstance_InstanceContent { + if m != nil { + return m.InstanceContent + } + return nil +} + +func (x *ZMetricNetworkInstance) GetVpnm() *ZMetricVpn { + if x, ok := x.GetInstanceContent().(*ZMetricNetworkInstance_Vpnm); ok { + return x.Vpnm + } + return nil +} + +func (x *ZMetricNetworkInstance) GetNonem() *ZMetricNone { + if x, ok := x.GetInstanceContent().(*ZMetricNetworkInstance_Nonem); ok { + return x.Nonem + } + return nil +} + +func (x *ZMetricNetworkInstance) GetFlowStats() []*ZMetricFlow { + if x != nil { + return x.FlowStats + } + return nil +} + +func (x *ZMetricNetworkInstance) GetNetworkStats() *ZMetricNetworkStats { + if x != nil { + return x.NetworkStats + } + return nil +} + +func (x *ZMetricNetworkInstance) GetVlanInfo() *VlanInfo { + if x != nil { + return x.VlanInfo + } + return nil +} + +type isZMetricNetworkInstance_InstanceContent interface { + isZMetricNetworkInstance_InstanceContent() +} + +type ZMetricNetworkInstance_Vpnm struct { + Vpnm *ZMetricVpn `protobuf:"bytes,20,opt,name=vpnm,proto3,oneof"` +} + +type ZMetricNetworkInstance_Nonem struct { + // deprecated = 21; ZMetricLisp lispm = 21 + Nonem *ZMetricNone `protobuf:"bytes,22,opt,name=nonem,proto3,oneof"` +} + +func (*ZMetricNetworkInstance_Vpnm) isZMetricNetworkInstance_InstanceContent() {} + +func (*ZMetricNetworkInstance_Nonem) isZMetricNetworkInstance_InstanceContent() {} + +type ZMetricVolume struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + DisplayName string `protobuf:"bytes,2,opt,name=displayName,proto3" json:"displayName,omitempty"` + ReadBytes uint64 `protobuf:"varint,3,opt,name=readBytes,proto3" json:"readBytes,omitempty"` + WriteBytes uint64 `protobuf:"varint,4,opt,name=writeBytes,proto3" json:"writeBytes,omitempty"` + ReadCount uint64 `protobuf:"varint,5,opt,name=readCount,proto3" json:"readCount,omitempty"` + WriteCount uint64 `protobuf:"varint,6,opt,name=writeCount,proto3" json:"writeCount,omitempty"` + TotalBytes uint64 `protobuf:"varint,7,opt,name=totalBytes,proto3" json:"totalBytes,omitempty"` + UsedBytes uint64 `protobuf:"varint,8,opt,name=usedBytes,proto3" json:"usedBytes,omitempty"` + FreeBytes uint64 `protobuf:"varint,9,opt,name=freeBytes,proto3" json:"freeBytes,omitempty"` +} + +func (x *ZMetricVolume) Reset() { + *x = ZMetricVolume{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricVolume) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricVolume) ProtoMessage() {} + +func (x *ZMetricVolume) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[35] + 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 ZMetricVolume.ProtoReflect.Descriptor instead. +func (*ZMetricVolume) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{35} +} + +func (x *ZMetricVolume) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *ZMetricVolume) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *ZMetricVolume) GetReadBytes() uint64 { + if x != nil { + return x.ReadBytes + } + return 0 +} + +func (x *ZMetricVolume) GetWriteBytes() uint64 { + if x != nil { + return x.WriteBytes + } + return 0 +} + +func (x *ZMetricVolume) GetReadCount() uint64 { + if x != nil { + return x.ReadCount + } + return 0 +} + +func (x *ZMetricVolume) GetWriteCount() uint64 { + if x != nil { + return x.WriteCount + } + return 0 +} + +func (x *ZMetricVolume) GetTotalBytes() uint64 { + if x != nil { + return x.TotalBytes + } + return 0 +} + +func (x *ZMetricVolume) GetUsedBytes() uint64 { + if x != nil { + return x.UsedBytes + } + return 0 +} + +func (x *ZMetricVolume) GetFreeBytes() uint64 { + if x != nil { + return x.FreeBytes + } + return 0 +} + +// metrics for a single process +type ZMetricProcess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pid int32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + UserProcess bool `protobuf:"varint,3,opt,name=user_process,json=userProcess,proto3" json:"user_process,omitempty"` + Watched bool `protobuf:"varint,4,opt,name=watched,proto3" json:"watched,omitempty"` + NumFds int32 `protobuf:"varint,5,opt,name=num_fds,json=numFds,proto3" json:"num_fds,omitempty"` + NumThreads int32 `protobuf:"varint,6,opt,name=num_threads,json=numThreads,proto3" json:"num_threads,omitempty"` + UserTime float64 `protobuf:"fixed64,7,opt,name=user_time,json=userTime,proto3" json:"user_time,omitempty"` + SystemTime float64 `protobuf:"fixed64,8,opt,name=system_time,json=systemTime,proto3" json:"system_time,omitempty"` + CpuPercent float64 `protobuf:"fixed64,9,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"` + CreateTime *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + VmBytes uint64 `protobuf:"varint,11,opt,name=vm_bytes,json=vmBytes,proto3" json:"vm_bytes,omitempty"` + RssBytes uint64 `protobuf:"varint,12,opt,name=rss_bytes,json=rssBytes,proto3" json:"rss_bytes,omitempty"` + MemoryPercent float32 `protobuf:"fixed32,13,opt,name=memory_percent,json=memoryPercent,proto3" json:"memory_percent,omitempty"` + // We report the stack for !watched proceeses which have been running for a while + Stack string `protobuf:"bytes,14,opt,name=stack,proto3" json:"stack,omitempty"` +} + +func (x *ZMetricProcess) Reset() { + *x = ZMetricProcess{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricProcess) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricProcess) ProtoMessage() {} + +func (x *ZMetricProcess) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[36] + 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 ZMetricProcess.ProtoReflect.Descriptor instead. +func (*ZMetricProcess) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{36} +} + +func (x *ZMetricProcess) GetPid() int32 { + if x != nil { + return x.Pid + } + return 0 +} + +func (x *ZMetricProcess) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ZMetricProcess) GetUserProcess() bool { + if x != nil { + return x.UserProcess + } + return false +} + +func (x *ZMetricProcess) GetWatched() bool { + if x != nil { + return x.Watched + } + return false +} + +func (x *ZMetricProcess) GetNumFds() int32 { + if x != nil { + return x.NumFds + } + return 0 +} + +func (x *ZMetricProcess) GetNumThreads() int32 { + if x != nil { + return x.NumThreads + } + return 0 +} + +func (x *ZMetricProcess) GetUserTime() float64 { + if x != nil { + return x.UserTime + } + return 0 +} + +func (x *ZMetricProcess) GetSystemTime() float64 { + if x != nil { + return x.SystemTime + } + return 0 +} + +func (x *ZMetricProcess) GetCpuPercent() float64 { + if x != nil { + return x.CpuPercent + } + return 0 +} + +func (x *ZMetricProcess) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *ZMetricProcess) GetVmBytes() uint64 { + if x != nil { + return x.VmBytes + } + return 0 +} + +func (x *ZMetricProcess) GetRssBytes() uint64 { + if x != nil { + return x.RssBytes + } + return 0 +} + +func (x *ZMetricProcess) GetMemoryPercent() float32 { + if x != nil { + return x.MemoryPercent + } + return 0 +} + +func (x *ZMetricProcess) GetStack() string { + if x != nil { + return x.Stack + } + return "" +} + +//  This is the request payload for POST /api/v1/edgeDevice/metrics +// ZMetricMsg carries periodic metrics; typically one message is sent for +// all of the objects on a device (the device itself plus all of the app instances +// and all of the network instances). As such there is normally no need to +// retransmit these messages if there is some network failure; the next periodic +// message will include the cumulative numbers. +// The message is assumed to be protected by a TLS session bound to the +// device certificate. +type ZMetricMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DevID string `protobuf:"bytes,1,opt,name=devID,proto3" json:"devID,omitempty"` + // deprecated = 2; + AtTimeStamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=atTimeStamp,proto3" json:"atTimeStamp,omitempty"` + // Types that are assignable to MetricContent: + // + // *ZMetricMsg_Dm + MetricContent isZMetricMsg_MetricContent `protobuf_oneof:"MetricContent"` + Am []*AppMetric `protobuf:"bytes,5,rep,name=am,proto3" json:"am,omitempty"` + // deprecated = 6; + Nm []*ZMetricNetworkInstance `protobuf:"bytes,7,rep,name=nm,proto3" json:"nm,omitempty"` + Vm []*ZMetricVolume `protobuf:"bytes,8,rep,name=vm,proto3" json:"vm,omitempty"` + Pr []*ZMetricProcess `protobuf:"bytes,9,rep,name=pr,proto3" json:"pr,omitempty"` +} + +func (x *ZMetricMsg) Reset() { + *x = ZMetricMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZMetricMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZMetricMsg) ProtoMessage() {} + +func (x *ZMetricMsg) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[37] + 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 ZMetricMsg.ProtoReflect.Descriptor instead. +func (*ZMetricMsg) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{37} +} + +func (x *ZMetricMsg) GetDevID() string { + if x != nil { + return x.DevID + } + return "" +} + +func (x *ZMetricMsg) GetAtTimeStamp() *timestamppb.Timestamp { + if x != nil { + return x.AtTimeStamp + } + return nil +} + +func (m *ZMetricMsg) GetMetricContent() isZMetricMsg_MetricContent { + if m != nil { + return m.MetricContent + } + return nil +} + +func (x *ZMetricMsg) GetDm() *DeviceMetric { + if x, ok := x.GetMetricContent().(*ZMetricMsg_Dm); ok { + return x.Dm + } + return nil +} + +func (x *ZMetricMsg) GetAm() []*AppMetric { + if x != nil { + return x.Am + } + return nil +} + +func (x *ZMetricMsg) GetNm() []*ZMetricNetworkInstance { + if x != nil { + return x.Nm + } + return nil +} + +func (x *ZMetricMsg) GetVm() []*ZMetricVolume { + if x != nil { + return x.Vm + } + return nil +} + +func (x *ZMetricMsg) GetPr() []*ZMetricProcess { + if x != nil { + return x.Pr + } + return nil +} + +type isZMetricMsg_MetricContent interface { + isZMetricMsg_MetricContent() +} + +type ZMetricMsg_Dm struct { + Dm *DeviceMetric `protobuf:"bytes,4,opt,name=dm,proto3,oneof"` +} + +func (*ZMetricMsg_Dm) isZMetricMsg_MetricContent() {} + +// newlogMetric - stats for newlog +type NewlogMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Status of failed to send to controller and start time of fail to send + FailedToSend bool `protobuf:"varint,1,opt,name=failedToSend,proto3" json:"failedToSend,omitempty"` + FailSentStartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=failSentStartTime,proto3" json:"failSentStartTime,omitempty"` + // Stats on total bytes uploaded to controller, the total 4xx responses + // current upload interval in seconds, and current logfile timeout value in seconds + // maximum gzip file size so far, and average gzip file size + TotalBytesUpload uint64 `protobuf:"varint,3,opt,name=totalBytesUpload,proto3" json:"totalBytesUpload,omitempty"` + Num4XxResponses uint32 `protobuf:"varint,4,opt,name=num4xxResponses,proto3" json:"num4xxResponses,omitempty"` + CurrentUploadIntv uint32 `protobuf:"varint,5,opt,name=currentUploadIntv,proto3" json:"currentUploadIntv,omitempty"` + LogfileTimeout uint32 `protobuf:"varint,6,opt,name=logfileTimeout,proto3" json:"logfileTimeout,omitempty"` + MaxGzipFileSize uint32 `protobuf:"varint,7,opt,name=maxGzipFileSize,proto3" json:"maxGzipFileSize,omitempty"` + AvgGzipFileSize uint32 `protobuf:"varint,8,opt,name=avgGzipFileSize,proto3" json:"avgGzipFileSize,omitempty"` + // Stats for upload to controller letency + // the min, max and average upload delay in msec, and the last upload delay in msec + MimUploadMsec uint32 `protobuf:"varint,9,opt,name=mimUploadMsec,proto3" json:"mimUploadMsec,omitempty"` + MaxUploadMsec uint32 `protobuf:"varint,10,opt,name=maxUploadMsec,proto3" json:"maxUploadMsec,omitempty"` + AvgUploadMsec uint32 `protobuf:"varint,11,opt,name=avgUploadMsec,proto3" json:"avgUploadMsec,omitempty"` + LastUploadMsec uint32 `protobuf:"varint,12,opt,name=lastUploadMsec,proto3" json:"lastUploadMsec,omitempty"` + // Stats for controller server, the current and average CPU ussage in percentage + // and the current and average processing delay in msec (from receiving newlog batch to reply to device) + CurrentCPULoadPct float32 `protobuf:"fixed32,13,opt,name=currentCPULoadPct,proto3" json:"currentCPULoadPct,omitempty"` + AverageCPULoadPct float32 `protobuf:"fixed32,14,opt,name=averageCPULoadPct,proto3" json:"averageCPULoadPct,omitempty"` + CurrentProcessDelay uint32 `protobuf:"varint,15,opt,name=currentProcessDelay,proto3" json:"currentProcessDelay,omitempty"` + AverageProcessDelay uint32 `protobuf:"varint,16,opt,name=averageProcessDelay,proto3" json:"averageProcessDelay,omitempty"` + DeviceMetrics *LogfileMetrics `protobuf:"bytes,17,opt,name=deviceMetrics,proto3" json:"deviceMetrics,omitempty"` + AppMetrics *LogfileMetrics `protobuf:"bytes,18,opt,name=appMetrics,proto3" json:"appMetrics,omitempty"` + // top 10 device log (not app) source in total bytes in percentage + Top10InputSources map[string]uint32 `protobuf:"bytes,19,rep,name=top10_input_sources,json=top10InputSources,proto3" json:"top10_input_sources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // counter for not uploaded gzip files removed due to exceeding user defined or default quota + GzipFilesRemoved uint32 `protobuf:"varint,20,opt,name=gzipFilesRemoved,proto3" json:"gzipFilesRemoved,omitempty"` + // counter for 429 returned status code for uploading + TooManyRequest uint32 `protobuf:"varint,21,opt,name=tooManyRequest,proto3" json:"tooManyRequest,omitempty"` + // counter for gzip files bypassing the uploading to cloud + SkipUploadAppFile uint32 `protobuf:"varint,22,opt,name=skipUploadAppFile,proto3" json:"skipUploadAppFile,omitempty"` +} + +func (x *NewlogMetric) Reset() { + *x = NewlogMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NewlogMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NewlogMetric) ProtoMessage() {} + +func (x *NewlogMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[38] + 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 NewlogMetric.ProtoReflect.Descriptor instead. +func (*NewlogMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{38} +} + +func (x *NewlogMetric) GetFailedToSend() bool { + if x != nil { + return x.FailedToSend + } + return false +} + +func (x *NewlogMetric) GetFailSentStartTime() *timestamppb.Timestamp { + if x != nil { + return x.FailSentStartTime + } + return nil +} + +func (x *NewlogMetric) GetTotalBytesUpload() uint64 { + if x != nil { + return x.TotalBytesUpload + } + return 0 +} + +func (x *NewlogMetric) GetNum4XxResponses() uint32 { + if x != nil { + return x.Num4XxResponses + } + return 0 +} + +func (x *NewlogMetric) GetCurrentUploadIntv() uint32 { + if x != nil { + return x.CurrentUploadIntv + } + return 0 +} + +func (x *NewlogMetric) GetLogfileTimeout() uint32 { + if x != nil { + return x.LogfileTimeout + } + return 0 +} + +func (x *NewlogMetric) GetMaxGzipFileSize() uint32 { + if x != nil { + return x.MaxGzipFileSize + } + return 0 +} + +func (x *NewlogMetric) GetAvgGzipFileSize() uint32 { + if x != nil { + return x.AvgGzipFileSize + } + return 0 +} + +func (x *NewlogMetric) GetMimUploadMsec() uint32 { + if x != nil { + return x.MimUploadMsec + } + return 0 +} + +func (x *NewlogMetric) GetMaxUploadMsec() uint32 { + if x != nil { + return x.MaxUploadMsec + } + return 0 +} + +func (x *NewlogMetric) GetAvgUploadMsec() uint32 { + if x != nil { + return x.AvgUploadMsec + } + return 0 +} + +func (x *NewlogMetric) GetLastUploadMsec() uint32 { + if x != nil { + return x.LastUploadMsec + } + return 0 +} + +func (x *NewlogMetric) GetCurrentCPULoadPct() float32 { + if x != nil { + return x.CurrentCPULoadPct + } + return 0 +} + +func (x *NewlogMetric) GetAverageCPULoadPct() float32 { + if x != nil { + return x.AverageCPULoadPct + } + return 0 +} + +func (x *NewlogMetric) GetCurrentProcessDelay() uint32 { + if x != nil { + return x.CurrentProcessDelay + } + return 0 +} + +func (x *NewlogMetric) GetAverageProcessDelay() uint32 { + if x != nil { + return x.AverageProcessDelay + } + return 0 +} + +func (x *NewlogMetric) GetDeviceMetrics() *LogfileMetrics { + if x != nil { + return x.DeviceMetrics + } + return nil +} + +func (x *NewlogMetric) GetAppMetrics() *LogfileMetrics { + if x != nil { + return x.AppMetrics + } + return nil +} + +func (x *NewlogMetric) GetTop10InputSources() map[string]uint32 { + if x != nil { + return x.Top10InputSources + } + return nil +} + +func (x *NewlogMetric) GetGzipFilesRemoved() uint32 { + if x != nil { + return x.GzipFilesRemoved + } + return 0 +} + +func (x *NewlogMetric) GetTooManyRequest() uint32 { + if x != nil { + return x.TooManyRequest + } + return 0 +} + +func (x *NewlogMetric) GetSkipUploadAppFile() uint32 { + if x != nil { + return x.SkipUploadAppFile + } + return 0 +} + +// logfileMetrics - is shared for both device log and application log +type LogfileMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Stats for gzip files been sent to controller, total bytes written into gzip files + // total bytes written into logfiles before compressed, number of gzip files currently + // remain in the gzip directory and total input events + NumGzipFileSent uint64 `protobuf:"varint,1,opt,name=numGzipFileSent,proto3" json:"numGzipFileSent,omitempty"` + NumGzipBytesWrite uint64 `protobuf:"varint,2,opt,name=numGzipBytesWrite,proto3" json:"numGzipBytesWrite,omitempty"` + NumBytesWrite uint64 `protobuf:"varint,3,opt,name=numBytesWrite,proto3" json:"numBytesWrite,omitempty"` + NumGzipFileInDir uint32 `protobuf:"varint,4,opt,name=numGzipFileInDir,proto3" json:"numGzipFileInDir,omitempty"` + NumInputEvent uint64 `protobuf:"varint,5,opt,name=numInputEvent,proto3" json:"numInputEvent,omitempty"` + // Stats for log upload file retries, the number of files can not be sent and kept on device + // the most recent gzip file sent timestamp of the gzip file and the timestamp for sending that file + NumGzipFileRetry uint64 `protobuf:"varint,6,opt,name=numGzipFileRetry,proto3" json:"numGzipFileRetry,omitempty"` + NumGzipFileKeptLocal uint32 `protobuf:"varint,7,opt,name=numGzipFileKeptLocal,proto3" json:"numGzipFileKeptLocal,omitempty"` + RecentGzipFileTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=recentGzipFileTime,proto3" json:"recentGzipFileTime,omitempty"` + LastGzipFileSendTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=lastGzipFileSendTime,proto3" json:"lastGzipFileSendTime,omitempty"` +} + +func (x *LogfileMetrics) Reset() { + *x = LogfileMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogfileMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogfileMetrics) ProtoMessage() {} + +func (x *LogfileMetrics) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[39] + 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 LogfileMetrics.ProtoReflect.Descriptor instead. +func (*LogfileMetrics) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{39} +} + +func (x *LogfileMetrics) GetNumGzipFileSent() uint64 { + if x != nil { + return x.NumGzipFileSent + } + return 0 +} + +func (x *LogfileMetrics) GetNumGzipBytesWrite() uint64 { + if x != nil { + return x.NumGzipBytesWrite + } + return 0 +} + +func (x *LogfileMetrics) GetNumBytesWrite() uint64 { + if x != nil { + return x.NumBytesWrite + } + return 0 +} + +func (x *LogfileMetrics) GetNumGzipFileInDir() uint32 { + if x != nil { + return x.NumGzipFileInDir + } + return 0 +} + +func (x *LogfileMetrics) GetNumInputEvent() uint64 { + if x != nil { + return x.NumInputEvent + } + return 0 +} + +func (x *LogfileMetrics) GetNumGzipFileRetry() uint64 { + if x != nil { + return x.NumGzipFileRetry + } + return 0 +} + +func (x *LogfileMetrics) GetNumGzipFileKeptLocal() uint32 { + if x != nil { + return x.NumGzipFileKeptLocal + } + return 0 +} + +func (x *LogfileMetrics) GetRecentGzipFileTime() *timestamppb.Timestamp { + if x != nil { + return x.RecentGzipFileTime + } + return nil +} + +func (x *LogfileMetrics) GetLastGzipFileSendTime() *timestamppb.Timestamp { + if x != nil { + return x.LastGzipFileSendTime + } + return nil +} + +// zedboxStats - for zedbox process items +type ZedboxStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NumGoRoutines uint32 `protobuf:"varint,1,opt,name=numGoRoutines,proto3" json:"numGoRoutines,omitempty"` +} + +func (x *ZedboxStats) Reset() { + *x = ZedboxStats{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZedboxStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZedboxStats) ProtoMessage() {} + +func (x *ZedboxStats) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[40] + 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 ZedboxStats.ProtoReflect.Descriptor instead. +func (*ZedboxStats) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{40} +} + +func (x *ZedboxStats) GetNumGoRoutines() uint32 { + if x != nil { + return x.NumGoRoutines + } + return 0 +} + +// Contains information about the access vlans attached to network instance +type VlanInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NumTrunkPorts uint32 `protobuf:"varint,1,opt,name=num_trunk_ports,json=numTrunkPorts,proto3" json:"num_trunk_ports,omitempty"` // Number of ports attached to this network instance that are designated trunk + VlanCounts map[uint32]uint32 `protobuf:"bytes,2,rep,name=vlan_counts,json=vlanCounts,proto3" json:"vlan_counts,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // vlan id to it's usage count map +} + +func (x *VlanInfo) Reset() { + *x = VlanInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VlanInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VlanInfo) ProtoMessage() {} + +func (x *VlanInfo) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[41] + 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 VlanInfo.ProtoReflect.Descriptor instead. +func (*VlanInfo) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{41} +} + +func (x *VlanInfo) GetNumTrunkPorts() uint32 { + if x != nil { + return x.NumTrunkPorts + } + return 0 +} + +func (x *VlanInfo) GetVlanCounts() map[uint32]uint32 { + if x != nil { + return x.VlanCounts + } + return nil +} + +// Flowlog stats. +type FlowlogMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Counting FlowMessage instances. + // Note that FlowMessage is used to package and carry a list of flows and DNS requests. + Messages *FlowlogCounters `protobuf:"bytes,1,opt,name=messages,proto3" json:"messages,omitempty"` + // Counting FlowMessage.Flows. + Flows *FlowlogCounters `protobuf:"bytes,2,opt,name=flows,proto3" json:"flows,omitempty"` + // Counting FlowMessage.DnsReqs. + DnsRequests *FlowlogCounters `protobuf:"bytes,3,opt,name=dns_requests,json=dnsRequests,proto3" json:"dns_requests,omitempty"` +} + +func (x *FlowlogMetric) Reset() { + *x = FlowlogMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowlogMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowlogMetric) ProtoMessage() {} + +func (x *FlowlogMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[42] + 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 FlowlogMetric.ProtoReflect.Descriptor instead. +func (*FlowlogMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{42} +} + +func (x *FlowlogMetric) GetMessages() *FlowlogCounters { + if x != nil { + return x.Messages + } + return nil +} + +func (x *FlowlogMetric) GetFlows() *FlowlogCounters { + if x != nil { + return x.Flows + } + return nil +} + +func (x *FlowlogMetric) GetDnsRequests() *FlowlogCounters { + if x != nil { + return x.DnsRequests + } + return nil +} + +// Counters for published/dropped flowlog messages/flows or DNS requests. +// Note that every record is eventually either successfully published or dropped. +// In the process of publishing a flowlog record, one or more failed attempts can be made. +// This means that the total number of fully processed records (i.e. not queued anymore) +// equals the sum of "success" and "drops", while "failed_attempts" is an orthogonal metric. +type FlowlogCounters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Flow records successfully published to zedcloud. + Success uint64 `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + // Flow records dropped because the flowlog queue would not fit them. + // This is either because the queue was already full when the record was created, + // or the publish attempts would keep failing and the queue was nearing its capacity. + Drops uint64 `protobuf:"varint,2,opt,name=drops,proto3" json:"drops,omitempty"` + // The number of failed attempts to publish a flow record. + FailedAttempts uint64 `protobuf:"varint,3,opt,name=failed_attempts,json=failedAttempts,proto3" json:"failed_attempts,omitempty"` +} + +func (x *FlowlogCounters) Reset() { + *x = FlowlogCounters{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowlogCounters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowlogCounters) ProtoMessage() {} + +func (x *FlowlogCounters) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[43] + 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 FlowlogCounters.ProtoReflect.Descriptor instead. +func (*FlowlogCounters) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{43} +} + +func (x *FlowlogCounters) GetSuccess() uint64 { + if x != nil { + return x.Success + } + return 0 +} + +func (x *FlowlogCounters) GetDrops() uint64 { + if x != nil { + return x.Drops + } + return 0 +} + +func (x *FlowlogCounters) GetFailedAttempts() uint64 { + if x != nil { + return x.FailedAttempts + } + return 0 +} + +type ZProbeNIMetrics_ZProbeIntfMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IntfName string `protobuf:"bytes,11,opt,name=intfName,proto3" json:"intfName,omitempty"` // uplink interface name, e.g. eth1, wlan0 + GatewayNexhtop string `protobuf:"bytes,12,opt,name=gatewayNexhtop,proto3" json:"gatewayNexhtop,omitempty"` // intf nexthop IP address + GatewayUP bool `protobuf:"varint,13,opt,name=gatewayUP,proto3" json:"gatewayUP,omitempty"` // local gateway status UP or not + RemoteHostUP bool `protobuf:"varint,14,opt,name=remoteHostUP,proto3" json:"remoteHostUP,omitempty"` // remote url/IP status UP or not + NexthopUpCount uint32 `protobuf:"varint,15,opt,name=nexthopUpCount,proto3" json:"nexthopUpCount,omitempty"` // local ping success count + NexthopDownCount uint32 `protobuf:"varint,16,opt,name=nexthopDownCount,proto3" json:"nexthopDownCount,omitempty"` // local ping failure count + RemoteUpCount uint32 `protobuf:"varint,17,opt,name=remoteUpCount,proto3" json:"remoteUpCount,omitempty"` // remote probing success count + RemoteDownCount uint32 `protobuf:"varint,18,opt,name=remoteDownCount,proto3" json:"remoteDownCount,omitempty"` // remote probing failure count + RemoteProbeLatency uint32 `protobuf:"varint,19,opt,name=remoteProbeLatency,proto3" json:"remoteProbeLatency,omitempty"` // remote host probe latency in msec +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) Reset() { + *x = ZProbeNIMetrics_ZProbeIntfMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_metrics_metrics_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZProbeNIMetrics_ZProbeIntfMetric) ProtoMessage() {} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) ProtoReflect() protoreflect.Message { + mi := &file_metrics_metrics_proto_msgTypes[45] + 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 ZProbeNIMetrics_ZProbeIntfMetric.ProtoReflect.Descriptor instead. +func (*ZProbeNIMetrics_ZProbeIntfMetric) Descriptor() ([]byte, []int) { + return file_metrics_metrics_proto_rawDescGZIP(), []int{33, 0} +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetIntfName() string { + if x != nil { + return x.IntfName + } + return "" +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetGatewayNexhtop() string { + if x != nil { + return x.GatewayNexhtop + } + return "" +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetGatewayUP() bool { + if x != nil { + return x.GatewayUP + } + return false +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetRemoteHostUP() bool { + if x != nil { + return x.RemoteHostUP + } + return false +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetNexthopUpCount() uint32 { + if x != nil { + return x.NexthopUpCount + } + return 0 +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetNexthopDownCount() uint32 { + if x != nil { + return x.NexthopDownCount + } + return 0 +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetRemoteUpCount() uint32 { + if x != nil { + return x.RemoteUpCount + } + return 0 +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetRemoteDownCount() uint32 { + if x != nil { + return x.RemoteDownCount + } + return 0 +} + +func (x *ZProbeNIMetrics_ZProbeIntfMetric) GetRemoteProbeLatency() uint32 { + if x != nil { + return x.RemoteProbeLatency + } + return 0 +} + +var File_metrics_metrics_proto protoreflect.FileDescriptor + +var file_metrics_metrics_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x65, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, 0x65, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x01, 0x0a, 0x0c, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, + 0x75, 0x73, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x75, + 0x73, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x4d, + 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x4d, + 0x65, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x64, + 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x61, 0x67, 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x4d, 0x42, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x42, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, + 0x64, 0x4d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x64, 0x4d, + 0x42, 0x22, 0xa3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x4d, 0x42, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x4d, 0x42, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x4d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x4d, 0x42, 0x12, + 0x27, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, + 0x4d, 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x4d, 0x42, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x64, + 0x5f, 0x65, 0x76, 0x65, 0x4d, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x4d, 0x42, 0x22, 0xcd, 0x03, 0x0a, 0x0d, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x72, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x72, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x78, 0x44, + 0x72, 0x6f, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x78, 0x44, 0x72, + 0x6f, 0x70, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x78, 0x44, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x44, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x78, 0x50, 0x6b, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, + 0x78, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x78, 0x50, 0x6b, 0x74, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x78, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x74, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x74, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x78, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x78, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x78, 0x41, 0x63, 0x6c, 0x44, 0x72, + 0x6f, 0x70, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x78, 0x41, 0x63, 0x6c, + 0x44, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x78, 0x41, 0x63, 0x6c, 0x44, 0x72, + 0x6f, 0x70, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x78, 0x41, 0x63, 0x6c, + 0x44, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x74, 0x78, 0x41, 0x63, 0x6c, 0x52, 0x61, + 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x13, 0x74, 0x78, 0x41, 0x63, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x44, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x78, 0x41, 0x63, 0x6c, + 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x72, 0x78, 0x41, 0x63, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x44, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x0e, 0x43, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x6f, + 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x57, + 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, + 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, + 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x4e, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x16, 0x43, 0x65, 0x6c, 0x6c, 0x75, + 0x6c, 0x61, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x72, 0x71, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x72, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x72, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x72, 0x70, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x6e, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x22, + 0x81, 0x01, 0x0a, 0x13, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x02, 0x72, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x02, 0x72, 0x78, 0x12, 0x34, 0x0a, + 0x02, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, + 0x02, 0x74, 0x78, 0x22, 0xd0, 0x02, 0x0a, 0x0e, 0x7a, 0x65, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x66, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x12, 0x46, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x75, 0x72, + 0x6c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x0a, 0x75, 0x72, + 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x46, + 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0xd2, 0x02, 0x0a, 0x0e, 0x75, 0x72, 0x6c, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x74, + 0x72, 0x79, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x74, 0x72, 0x79, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, + 0x0c, 0x74, 0x72, 0x79, 0x42, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x72, 0x79, 0x42, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x74, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x65, + 0x6e, 0x74, 0x42, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x72, + 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x42, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x42, 0x79, 0x74, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, + 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xaa, 0x02, 0x0a, 0x0c, + 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, + 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, 0x02, 0x74, 0x63, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x52, 0x02, 0x74, 0x63, 0x22, 0x67, 0x0a, 0x0b, 0x54, 0x79, 0x70, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2e, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0x95, 0x01, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x43, 0x70, 0x75, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x12, 0x32, 0x0a, 0x06, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, + 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x19, + 0x0a, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x73, 0x22, 0x99, 0x05, 0x0a, 0x12, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x44, 0x65, 0x76, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x12, 0x22, 0x0a, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x5f, 0x75, 0x5f, 0x69, + 0x5f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x55, 0x55, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, + 0x61, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x5f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x70, 0x73, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x6f, 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x61, 0x64, 0x12, 0x26, + 0x0a, 0x0f, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6f, 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x10, 0x69, 0x5f, 0x6f, 0x73, 0x5f, 0x69, + 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0d, 0x69, 0x4f, 0x73, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x12, + 0x27, 0x0a, 0x10, 0x69, 0x5f, 0x6f, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x69, + 0x63, 0x6b, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x69, 0x4f, 0x73, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x77, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x5f, 0x6f, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x49, 0x4f, + 0x54, 0x69, 0x63, 0x6b, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x43, 0x0a, 0x09, 0x64, + 0x69, 0x73, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x56, 0x44, 0x65, 0x76, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x80, 0x02, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x12, 0x15, 0x0a, 0x07, 0x67, 0x5f, 0x75, 0x5f, 0x69, 0x5f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x04, 0x67, 0x55, 0x49, 0x44, 0x12, 0x3f, 0x0a, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, + 0x72, 0x65, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x72, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x44, 0x65, 0x76, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xa1, 0x03, 0x0a, 0x0d, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x70, + 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x6f, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4f, 0x0a, + 0x0d, 0x7a, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x44, 0x65, 0x76, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x0c, 0x7a, 0x70, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x5a, + 0x0a, 0x11, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x64, 0x69, + 0x73, 0x6b, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x64, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x40, 0x0a, 0x05, 0x7a, + 0x76, 0x6f, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x44, 0x65, 0x76, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x05, 0x7a, 0x76, 0x6f, 0x6c, 0x73, 0x22, 0xfc, 0x0a, + 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x3c, + 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x07, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x42, 0x0a, + 0x08, 0x7a, 0x65, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x7a, 0x65, 0x64, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x08, 0x7a, 0x65, 0x64, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x42, 0x0a, 0x09, 0x63, 0x70, 0x75, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x61, 0x70, 0x70, 0x43, 0x70, 0x75, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x09, 0x63, 0x70, 0x75, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x44, 0x0a, + 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x4d, 0x42, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x4d, 0x42, 0x12, + 0x30, 0x0a, 0x13, 0x61, 0x70, 0x70, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x4d, 0x42, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x61, 0x70, + 0x70, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, + 0x42, 0x12, 0x5c, 0x0a, 0x16, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x42, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x16, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x42, 0x12, + 0x33, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, + 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x18, 0x0d, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x43, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x63, 0x69, 0x70, 0x68, + 0x65, 0x72, 0x12, 0x33, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x41, 0x63, 0x6c, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x3c, 0x0a, 0x06, 0x6e, 0x65, 0x77, 0x6c, 0x6f, + 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x6e, 0x65, 0x77, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6e, + 0x65, 0x77, 0x6c, 0x6f, 0x67, 0x12, 0x3b, 0x0a, 0x06, 0x7a, 0x65, 0x64, 0x62, 0x6f, 0x78, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x7a, + 0x65, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x06, 0x7a, 0x65, 0x64, 0x62, + 0x6f, 0x78, 0x12, 0x4e, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x12, 0x4c, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x6c, 0x61, + 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x4e, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x13, 0x6c, 0x61, 0x73, + 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x42, 0x0a, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x18, 0x14, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x43, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, + 0x75, 0x6c, 0x61, 0x72, 0x12, 0x3f, 0x0a, 0x07, 0x66, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x46, + 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x66, 0x6c, + 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x12, 0x35, 0x0a, 0x17, 0x64, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x18, 0x16, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x64, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x4e, 0x0a, 0x0f, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, + 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x0e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x35, 0x0a, 0x09, + 0x41, 0x63, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0xb4, 0x03, 0x0a, 0x12, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x70, + 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x50, 0x49, 0x44, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x50, 0x49, + 0x44, 0x73, 0x12, 0x36, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x61, 0x70, 0x70, 0x43, 0x70, 0x75, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x3c, 0x0a, 0x06, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x69, 0x73, + 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x64, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x04, 0x64, 0x69, 0x73, + 0x6b, 0x12, 0x57, 0x0a, 0x12, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x12, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x9b, 0x02, 0x0a, 0x0a, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, + 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x75, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x48, 0x00, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x20, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, + 0x74, 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf8, 0x01, 0x0a, 0x0a, 0x64, 0x69, 0x73, + 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x61, + 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, + 0x61, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x72, 0x65, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x66, + 0x72, 0x65, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x0d, 0x61, 0x70, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, + 0x69, 0x72, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, 0x69, 0x72, 0x74, + 0x79, 0x22, 0xde, 0x03, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, + 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x36, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x61, 0x70, 0x70, 0x43, 0x70, 0x75, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x3c, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x39, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x61, 0x70, + 0x70, 0x44, 0x69, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x04, 0x64, 0x69, 0x73, + 0x6b, 0x12, 0x48, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x61, 0x70, + 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x09, 0x61, + 0x70, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x09, 0x61, 0x70, 0x70, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x22, 0xae, 0x08, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x6e, + 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, + 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, + 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x41, 0x70, 0x70, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x41, 0x70, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x41, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6e, + 0x75, 0x6d, 0x41, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, + 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x34, 0x78, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x34, 0x78, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x18, 0x6c, 0x61, + 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x50, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x6c, + 0x61, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x12, 0x2a, + 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x44, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x10, 0x6c, 0x61, + 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x44, 0x65, 0x66, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x44, 0x65, 0x66, 0x65, 0x72, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x70, 0x70, + 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x12, 0x32, 0x0a, 0x14, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, + 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x41, 0x70, 0x70, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x11, 0x6e, 0x75, 0x6d, 0x41, 0x70, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, + 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, + 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1d, 0x6e, 0x75, 0x6d, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x1a, 0x6e, 0x75, 0x6d, 0x41, + 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x6e, 0x75, + 0x6d, 0x41, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x58, 0x0a, 0x0d, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x39, 0x0a, 0x07, 0x50, 0x6b, 0x74, 0x53, 0x74, 0x61, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x83, + 0x02, 0x0a, 0x0b, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x12, 0x37, + 0x0a, 0x06, 0x49, 0x6e, 0x50, 0x6b, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x50, 0x6b, 0x74, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x06, 0x49, 0x6e, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x4f, 0x75, 0x74, 0x50, 0x6b, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x50, 0x6b, 0x74, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x4f, 0x75, 0x74, 0x50, 0x6b, + 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x45, 0x72, 0x72, 0x50, 0x6b, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x50, 0x6b, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x45, 0x72, 0x72, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x45, 0x0a, + 0x0d, 0x43, 0x61, 0x72, 0x69, 0x65, 0x72, 0x45, 0x72, 0x72, 0x50, 0x6b, 0x74, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x50, 0x6b, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x52, 0x0d, 0x43, 0x61, 0x72, 0x69, 0x65, 0x72, 0x45, 0x72, 0x72, + 0x50, 0x6b, 0x74, 0x73, 0x22, 0x8c, 0x02, 0x0a, 0x0a, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x56, 0x70, 0x6e, 0x12, 0x3f, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x49, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x52, 0x07, 0x49, 0x6b, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x12, 0x3f, 0x0a, 0x08, 0x4e, 0x61, 0x74, 0x54, 0x53, 0x74, 0x61, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x52, 0x08, 0x4e, 0x61, 0x74, 0x54, + 0x53, 0x74, 0x61, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x45, 0x73, 0x70, 0x53, 0x74, 0x61, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x52, 0x07, 0x45, 0x73, 0x70, 0x53, + 0x74, 0x61, 0x74, 0x22, 0x0d, 0x0a, 0x0b, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x6f, + 0x6e, 0x65, 0x22, 0x49, 0x0a, 0x0f, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, + 0x77, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x65, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x70, 0x69, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x73, 0x70, 0x69, 0x49, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x22, 0xaf, 0x01, + 0x0a, 0x13, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x77, 0x45, 0x6e, 0x64, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, + 0x3b, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x6c, + 0x6f, 0x77, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x35, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2e, 0x50, 0x6b, 0x74, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, + 0xf5, 0x01, 0x0a, 0x0b, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x77, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x73, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x49, 0x0a, 0x09, 0x6c, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x77, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x09, 0x6c, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x09, + 0x72, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x46, 0x6c, 0x6f, 0x77, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x09, 0x72, 0x45, + 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0c, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x13, 0x5a, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x12, 0x34, 0x0a, 0x02, 0x72, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x02, 0x72, 0x78, 0x12, 0x34, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x02, 0x74, 0x78, 0x22, 0x86, + 0x05, 0x0a, 0x0f, 0x5a, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x4e, 0x49, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x74, + 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x49, 0x6e, 0x74, 0x66, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x76, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x50, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x76, + 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x43, 0x6e, 0x74, 0x12, 0x58, + 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x66, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x50, 0x72, 0x6f, + 0x62, 0x65, 0x4e, 0x49, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x50, 0x72, 0x6f, + 0x62, 0x65, 0x49, 0x6e, 0x74, 0x66, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x0a, 0x69, 0x6e, + 0x74, 0x66, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x1a, 0xec, 0x02, 0x0a, 0x10, 0x5a, 0x50, 0x72, + 0x6f, 0x62, 0x65, 0x49, 0x6e, 0x74, 0x66, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1a, 0x0a, + 0x08, 0x69, 0x6e, 0x74, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x69, 0x6e, 0x74, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x4e, 0x65, 0x78, 0x68, 0x74, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4e, 0x65, 0x78, 0x68, 0x74, 0x6f, + 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x55, 0x50, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x55, 0x50, 0x12, + 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x55, 0x50, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x48, 0x6f, 0x73, + 0x74, 0x55, 0x50, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x55, 0x70, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x78, + 0x74, 0x68, 0x6f, 0x70, 0x55, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x6e, + 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x44, 0x6f, 0x77, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x44, 0x6f, + 0x77, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x55, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x55, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, + 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, + 0x77, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x62, 0x65, + 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xa3, 0x05, 0x0a, 0x16, 0x5a, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, + 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x49, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x4e, 0x49, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x12, 0x38, 0x0a, 0x04, 0x76, 0x70, 0x6e, 0x6d, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, + 0x70, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x76, 0x70, 0x6e, 0x6d, 0x12, 0x3b, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x65, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x6f, 0x6e, 0x65, 0x48, 0x00, + 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x65, 0x6d, 0x12, 0x41, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x77, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x77, 0x52, + 0x09, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x0c, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, + 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0c, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x76, + 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x08, 0x76, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x11, 0x0a, 0x0f, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x9d, 0x02, + 0x0a, 0x0d, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x66, 0x72, 0x65, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xbe, 0x03, + 0x0a, 0x0e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x73, + 0x65, 0x72, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x77, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x64, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x46, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0a, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, + 0x70, 0x75, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0a, 0x63, 0x70, 0x75, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x6d, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x76, 0x6d, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x73, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x73, 0x73, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x63, + 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x22, 0x8b, + 0x03, 0x0a, 0x0a, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4d, 0x73, 0x67, 0x12, 0x14, 0x0a, + 0x05, 0x64, 0x65, 0x76, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, + 0x76, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x0b, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x36, 0x0a, 0x02, 0x64, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x48, 0x00, 0x52, 0x02, 0x64, 0x6d, 0x12, 0x31, 0x0a, 0x02, 0x61, 0x6d, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, + 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x61, + 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x02, 0x61, 0x6d, 0x12, 0x3e, 0x0a, 0x02, + 0x6e, 0x6d, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x02, 0x6e, 0x6d, 0x12, 0x35, 0x0a, 0x02, + 0x76, 0x6d, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, + 0x02, 0x76, 0x6d, 0x12, 0x36, 0x0a, 0x02, 0x70, 0x72, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x5a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x02, 0x70, 0x72, 0x42, 0x0f, 0x0a, 0x0d, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xa1, 0x09, 0x0a, + 0x0c, 0x6e, 0x65, 0x77, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x22, 0x0a, + 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x54, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x54, 0x6f, 0x53, 0x65, 0x6e, + 0x64, 0x12, 0x48, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x53, 0x65, + 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x34, 0x78, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x34, 0x78, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x49, 0x6e, 0x74, 0x76, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x74, 0x76, 0x12, + 0x26, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6c, 0x6f, 0x67, 0x66, 0x69, 0x6c, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x47, 0x7a, + 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x76, 0x67, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x76, 0x67, 0x47, + 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6d, + 0x69, 0x6d, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x73, 0x65, 0x63, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x69, 0x6d, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x73, 0x65, + 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x73, + 0x65, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x4d, 0x73, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x76, 0x67, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, + 0x61, 0x76, 0x67, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x73, 0x65, 0x63, 0x12, 0x26, 0x0a, + 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x73, 0x65, 0x63, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x4d, 0x73, 0x65, 0x63, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x43, 0x50, 0x55, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x63, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x50, 0x55, 0x4c, 0x6f, 0x61, 0x64, + 0x50, 0x63, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x43, 0x50, + 0x55, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, + 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x43, 0x50, 0x55, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x63, + 0x74, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, + 0x6c, 0x61, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x13, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x4c, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x6c, 0x6f, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x6c, 0x6f, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x0a, 0x61, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x6b, 0x0a, 0x13, 0x74, + 0x6f, 0x70, 0x31, 0x30, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, + 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x54, + 0x6f, 0x70, 0x31, 0x30, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x74, 0x6f, 0x70, 0x31, 0x30, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x67, 0x7a, 0x69, 0x70, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x10, 0x67, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x6f, 0x6f, 0x4d, 0x61, 0x6e, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x6f, + 0x6f, 0x4d, 0x61, 0x6e, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, + 0x73, 0x6b, 0x69, 0x70, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x70, 0x70, 0x46, 0x69, 0x6c, + 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x41, 0x70, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x44, 0x0a, 0x16, 0x54, 0x6f, + 0x70, 0x31, 0x30, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xdc, 0x03, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, + 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6e, 0x75, + 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, + 0x11, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, + 0x70, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6e, + 0x75, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x44, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6e, 0x75, 0x6d, + 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x44, 0x69, 0x72, 0x12, 0x24, 0x0a, + 0x0d, 0x6e, 0x75, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x65, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6e, + 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, + 0x32, 0x0a, 0x14, 0x6e, 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x4b, 0x65, + 0x70, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x6e, + 0x75, 0x6d, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x70, 0x74, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x47, 0x7a, 0x69, + 0x70, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x72, 0x65, 0x63, + 0x65, 0x6e, 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x4e, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x47, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x47, + 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0x33, 0x0a, 0x0b, 0x7a, 0x65, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x24, + 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x47, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x47, 0x6f, 0x52, 0x6f, 0x75, 0x74, + 0x69, 0x6e, 0x65, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x08, 0x76, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x6b, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x54, + 0x72, 0x75, 0x6e, 0x6b, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x0b, 0x76, 0x6c, 0x61, + 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x56, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x76, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, + 0x56, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdf, 0x01, 0x0a, 0x0d, + 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x43, 0x0a, + 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, + 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x6c, + 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x77, + 0x73, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x6e, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x0b, 0x64, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x6a, 0x0a, + 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x6c, 0x6f, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x72, + 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x72, 0x6f, 0x70, 0x73, + 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, + 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x2a, 0x32, 0x0a, 0x0c, 0x5a, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x5a, 0x6d, 0x4e, + 0x6f, 0x70, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x5a, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x5a, 0x6d, 0x41, 0x70, 0x70, 0x10, 0x03, 0x2a, 0x85, 0x02, + 0x0a, 0x0b, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, + 0x14, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x49, 0x50, 0x48, 0x45, + 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, + 0x59, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x4d, 0x41, 0x52, 0x53, 0x48, 0x41, 0x4c, 0x5f, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x49, 0x50, 0x48, 0x45, + 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4c, 0x45, 0x41, 0x52, 0x54, 0x45, 0x58, + 0x54, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, + 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4d, 0x49, 0x53, + 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x05, 0x12, + 0x1a, 0x0a, 0x16, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, + 0x4e, 0x4f, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x43, + 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x10, 0x07, 0x2a, 0x66, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, + 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x49, 0x74, 0x65, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x47, 0x61, 0x75, 0x67, 0x65, 0x10, + 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0x03, 0x42, 0x3f, 0x0a, + 0x16, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_metrics_metrics_proto_rawDescOnce sync.Once + file_metrics_metrics_proto_rawDescData = file_metrics_metrics_proto_rawDesc +) + +func file_metrics_metrics_proto_rawDescGZIP() []byte { + file_metrics_metrics_proto_rawDescOnce.Do(func() { + file_metrics_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(file_metrics_metrics_proto_rawDescData) + }) + return file_metrics_metrics_proto_rawDescData +} + +var file_metrics_metrics_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_metrics_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_metrics_metrics_proto_goTypes = []interface{}{ + (ZmetricTypes)(0), // 0: org.lfedge.eve.metrics.ZmetricTypes + (CipherError)(0), // 1: org.lfedge.eve.metrics.CipherError + (MetricItemType)(0), // 2: org.lfedge.eve.metrics.MetricItemType + (*MemoryMetric)(nil), // 3: org.lfedge.eve.metrics.memoryMetric + (*AppMemoryMetric)(nil), // 4: org.lfedge.eve.metrics.AppMemoryMetric + (*DeviceMemoryMetric)(nil), // 5: org.lfedge.eve.metrics.DeviceMemoryMetric + (*NetworkMetric)(nil), // 6: org.lfedge.eve.metrics.networkMetric + (*CellularMetric)(nil), // 7: org.lfedge.eve.metrics.CellularMetric + (*CellularSignalStrength)(nil), // 8: org.lfedge.eve.metrics.CellularSignalStrength + (*CellularPacketStats)(nil), // 9: org.lfedge.eve.metrics.CellularPacketStats + (*ZedcloudMetric)(nil), // 10: org.lfedge.eve.metrics.zedcloudMetric + (*UrlcloudMetric)(nil), // 11: org.lfedge.eve.metrics.urlcloudMetric + (*CipherMetric)(nil), // 12: org.lfedge.eve.metrics.CipherMetric + (*TypeCounter)(nil), // 13: org.lfedge.eve.metrics.TypeCounter + (*AppCpuMetric)(nil), // 14: org.lfedge.eve.metrics.appCpuMetric + (*StorageVDevMetrics)(nil), // 15: org.lfedge.eve.metrics.StorageVDevMetrics + (*StorageDiskMetric)(nil), // 16: org.lfedge.eve.metrics.StorageDiskMetric + (*StorageChildrenMetric)(nil), // 17: org.lfedge.eve.metrics.StorageChildrenMetric + (*StorageMetric)(nil), // 18: org.lfedge.eve.metrics.StorageMetric + (*DeviceMetric)(nil), // 19: org.lfedge.eve.metrics.deviceMetric + (*AclMetric)(nil), // 20: org.lfedge.eve.metrics.AclMetric + (*AppContainerMetric)(nil), // 21: org.lfedge.eve.metrics.appContainerMetric + (*MetricItem)(nil), // 22: org.lfedge.eve.metrics.MetricItem + (*DiskMetric)(nil), // 23: org.lfedge.eve.metrics.diskMetric + (*AppDiskMetric)(nil), // 24: org.lfedge.eve.metrics.appDiskMetric + (*AppMetric)(nil), // 25: org.lfedge.eve.metrics.appMetric + (*LogMetric)(nil), // 26: org.lfedge.eve.metrics.logMetric + (*PktStat)(nil), // 27: org.lfedge.eve.metrics.PktStat + (*ZMetricConn)(nil), // 28: org.lfedge.eve.metrics.ZMetricConn + (*ZMetricVpn)(nil), // 29: org.lfedge.eve.metrics.ZMetricVpn + (*ZMetricNone)(nil), // 30: org.lfedge.eve.metrics.ZMetricNone + (*ZMetricFlowLink)(nil), // 31: org.lfedge.eve.metrics.ZMetricFlowLink + (*ZMetricFlowEndPoint)(nil), // 32: org.lfedge.eve.metrics.ZMetricFlowEndPoint + (*ZMetricFlow)(nil), // 33: org.lfedge.eve.metrics.ZMetricFlow + (*NetworkStats)(nil), // 34: org.lfedge.eve.metrics.NetworkStats + (*ZMetricNetworkStats)(nil), // 35: org.lfedge.eve.metrics.ZMetricNetworkStats + (*ZProbeNIMetrics)(nil), // 36: org.lfedge.eve.metrics.ZProbeNIMetrics + (*ZMetricNetworkInstance)(nil), // 37: org.lfedge.eve.metrics.ZMetricNetworkInstance + (*ZMetricVolume)(nil), // 38: org.lfedge.eve.metrics.ZMetricVolume + (*ZMetricProcess)(nil), // 39: org.lfedge.eve.metrics.ZMetricProcess + (*ZMetricMsg)(nil), // 40: org.lfedge.eve.metrics.ZMetricMsg + (*NewlogMetric)(nil), // 41: org.lfedge.eve.metrics.newlogMetric + (*LogfileMetrics)(nil), // 42: org.lfedge.eve.metrics.logfileMetrics + (*ZedboxStats)(nil), // 43: org.lfedge.eve.metrics.zedboxStats + (*VlanInfo)(nil), // 44: org.lfedge.eve.metrics.vlanInfo + (*FlowlogMetric)(nil), // 45: org.lfedge.eve.metrics.FlowlogMetric + (*FlowlogCounters)(nil), // 46: org.lfedge.eve.metrics.FlowlogCounters + nil, // 47: org.lfedge.eve.metrics.logMetric.InputSourcesEntry + (*ZProbeNIMetrics_ZProbeIntfMetric)(nil), // 48: org.lfedge.eve.metrics.ZProbeNIMetrics.ZProbeIntfMetric + nil, // 49: org.lfedge.eve.metrics.newlogMetric.Top10InputSourcesEntry + nil, // 50: org.lfedge.eve.metrics.vlanInfo.VlanCountsEntry + (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp + (*evecommon.DiskDescription)(nil), // 52: org.lfedge.eve.common.DiskDescription +} +var file_metrics_metrics_proto_depIdxs = []int32{ + 8, // 0: org.lfedge.eve.metrics.CellularMetric.signal_strength:type_name -> org.lfedge.eve.metrics.CellularSignalStrength + 9, // 1: org.lfedge.eve.metrics.CellularMetric.packet_stats:type_name -> org.lfedge.eve.metrics.CellularPacketStats + 34, // 2: org.lfedge.eve.metrics.CellularPacketStats.rx:type_name -> org.lfedge.eve.metrics.NetworkStats + 34, // 3: org.lfedge.eve.metrics.CellularPacketStats.tx:type_name -> org.lfedge.eve.metrics.NetworkStats + 51, // 4: org.lfedge.eve.metrics.zedcloudMetric.lastFailure:type_name -> google.protobuf.Timestamp + 51, // 5: org.lfedge.eve.metrics.zedcloudMetric.lastSuccess:type_name -> google.protobuf.Timestamp + 11, // 6: org.lfedge.eve.metrics.zedcloudMetric.urlMetrics:type_name -> org.lfedge.eve.metrics.urlcloudMetric + 51, // 7: org.lfedge.eve.metrics.CipherMetric.last_failure:type_name -> google.protobuf.Timestamp + 51, // 8: org.lfedge.eve.metrics.CipherMetric.last_success:type_name -> google.protobuf.Timestamp + 13, // 9: org.lfedge.eve.metrics.CipherMetric.tc:type_name -> org.lfedge.eve.metrics.TypeCounter + 1, // 10: org.lfedge.eve.metrics.TypeCounter.error_code:type_name -> org.lfedge.eve.metrics.CipherError + 51, // 11: org.lfedge.eve.metrics.appCpuMetric.upTime:type_name -> google.protobuf.Timestamp + 52, // 12: org.lfedge.eve.metrics.StorageDiskMetric.disk_name:type_name -> org.lfedge.eve.common.DiskDescription + 15, // 13: org.lfedge.eve.metrics.StorageDiskMetric.metrics:type_name -> org.lfedge.eve.metrics.StorageVDevMetrics + 16, // 14: org.lfedge.eve.metrics.StorageChildrenMetric.disks:type_name -> org.lfedge.eve.metrics.StorageDiskMetric + 17, // 15: org.lfedge.eve.metrics.StorageChildrenMetric.children:type_name -> org.lfedge.eve.metrics.StorageChildrenMetric + 15, // 16: org.lfedge.eve.metrics.StorageChildrenMetric.metrics:type_name -> org.lfedge.eve.metrics.StorageVDevMetrics + 51, // 17: org.lfedge.eve.metrics.StorageMetric.collection_time:type_name -> google.protobuf.Timestamp + 15, // 18: org.lfedge.eve.metrics.StorageMetric.zpool_metrics:type_name -> org.lfedge.eve.metrics.StorageVDevMetrics + 17, // 19: org.lfedge.eve.metrics.StorageMetric.children_datasets:type_name -> org.lfedge.eve.metrics.StorageChildrenMetric + 16, // 20: org.lfedge.eve.metrics.StorageMetric.disks:type_name -> org.lfedge.eve.metrics.StorageDiskMetric + 15, // 21: org.lfedge.eve.metrics.StorageMetric.zvols:type_name -> org.lfedge.eve.metrics.StorageVDevMetrics + 3, // 22: org.lfedge.eve.metrics.deviceMetric.memory:type_name -> org.lfedge.eve.metrics.memoryMetric + 6, // 23: org.lfedge.eve.metrics.deviceMetric.network:type_name -> org.lfedge.eve.metrics.networkMetric + 10, // 24: org.lfedge.eve.metrics.deviceMetric.zedcloud:type_name -> org.lfedge.eve.metrics.zedcloudMetric + 23, // 25: org.lfedge.eve.metrics.deviceMetric.disk:type_name -> org.lfedge.eve.metrics.diskMetric + 14, // 26: org.lfedge.eve.metrics.deviceMetric.cpuMetric:type_name -> org.lfedge.eve.metrics.appCpuMetric + 22, // 27: org.lfedge.eve.metrics.deviceMetric.metricItems:type_name -> org.lfedge.eve.metrics.MetricItem + 3, // 28: org.lfedge.eve.metrics.deviceMetric.systemServicesMemoryMB:type_name -> org.lfedge.eve.metrics.memoryMetric + 26, // 29: org.lfedge.eve.metrics.deviceMetric.log:type_name -> org.lfedge.eve.metrics.logMetric + 12, // 30: org.lfedge.eve.metrics.deviceMetric.cipher:type_name -> org.lfedge.eve.metrics.CipherMetric + 20, // 31: org.lfedge.eve.metrics.deviceMetric.acl:type_name -> org.lfedge.eve.metrics.AclMetric + 41, // 32: org.lfedge.eve.metrics.deviceMetric.newlog:type_name -> org.lfedge.eve.metrics.newlogMetric + 43, // 33: org.lfedge.eve.metrics.deviceMetric.zedbox:type_name -> org.lfedge.eve.metrics.zedboxStats + 5, // 34: org.lfedge.eve.metrics.deviceMetric.deviceMemory:type_name -> org.lfedge.eve.metrics.DeviceMemoryMetric + 51, // 35: org.lfedge.eve.metrics.deviceMetric.last_received_config:type_name -> google.protobuf.Timestamp + 51, // 36: org.lfedge.eve.metrics.deviceMetric.last_processed_config:type_name -> google.protobuf.Timestamp + 7, // 37: org.lfedge.eve.metrics.deviceMetric.cellular:type_name -> org.lfedge.eve.metrics.CellularMetric + 45, // 38: org.lfedge.eve.metrics.deviceMetric.flowlog:type_name -> org.lfedge.eve.metrics.FlowlogMetric + 18, // 39: org.lfedge.eve.metrics.deviceMetric.storage_metrics:type_name -> org.lfedge.eve.metrics.StorageMetric + 14, // 40: org.lfedge.eve.metrics.appContainerMetric.cpu:type_name -> org.lfedge.eve.metrics.appCpuMetric + 3, // 41: org.lfedge.eve.metrics.appContainerMetric.memory:type_name -> org.lfedge.eve.metrics.memoryMetric + 6, // 42: org.lfedge.eve.metrics.appContainerMetric.network:type_name -> org.lfedge.eve.metrics.networkMetric + 23, // 43: org.lfedge.eve.metrics.appContainerMetric.disk:type_name -> org.lfedge.eve.metrics.diskMetric + 4, // 44: org.lfedge.eve.metrics.appContainerMetric.appContainerMemory:type_name -> org.lfedge.eve.metrics.AppMemoryMetric + 2, // 45: org.lfedge.eve.metrics.MetricItem.type:type_name -> org.lfedge.eve.metrics.MetricItemType + 14, // 46: org.lfedge.eve.metrics.appMetric.cpu:type_name -> org.lfedge.eve.metrics.appCpuMetric + 3, // 47: org.lfedge.eve.metrics.appMetric.memory:type_name -> org.lfedge.eve.metrics.memoryMetric + 6, // 48: org.lfedge.eve.metrics.appMetric.network:type_name -> org.lfedge.eve.metrics.networkMetric + 24, // 49: org.lfedge.eve.metrics.appMetric.disk:type_name -> org.lfedge.eve.metrics.appDiskMetric + 21, // 50: org.lfedge.eve.metrics.appMetric.container:type_name -> org.lfedge.eve.metrics.appContainerMetric + 4, // 51: org.lfedge.eve.metrics.appMetric.appMemory:type_name -> org.lfedge.eve.metrics.AppMemoryMetric + 51, // 52: org.lfedge.eve.metrics.logMetric.lastDeviceBundleSendTime:type_name -> google.protobuf.Timestamp + 51, // 53: org.lfedge.eve.metrics.logMetric.lastAppBundleSendTime:type_name -> google.protobuf.Timestamp + 51, // 54: org.lfedge.eve.metrics.logMetric.lastLogDeferTime:type_name -> google.protobuf.Timestamp + 47, // 55: org.lfedge.eve.metrics.logMetric.input_sources:type_name -> org.lfedge.eve.metrics.logMetric.InputSourcesEntry + 27, // 56: org.lfedge.eve.metrics.ZMetricConn.InPkts:type_name -> org.lfedge.eve.metrics.PktStat + 27, // 57: org.lfedge.eve.metrics.ZMetricConn.OutPkts:type_name -> org.lfedge.eve.metrics.PktStat + 27, // 58: org.lfedge.eve.metrics.ZMetricConn.ErrPkts:type_name -> org.lfedge.eve.metrics.PktStat + 27, // 59: org.lfedge.eve.metrics.ZMetricConn.CarierErrPkts:type_name -> org.lfedge.eve.metrics.PktStat + 28, // 60: org.lfedge.eve.metrics.ZMetricVpn.ConnStat:type_name -> org.lfedge.eve.metrics.ZMetricConn + 28, // 61: org.lfedge.eve.metrics.ZMetricVpn.IkeStat:type_name -> org.lfedge.eve.metrics.ZMetricConn + 28, // 62: org.lfedge.eve.metrics.ZMetricVpn.NatTStat:type_name -> org.lfedge.eve.metrics.ZMetricConn + 28, // 63: org.lfedge.eve.metrics.ZMetricVpn.EspStat:type_name -> org.lfedge.eve.metrics.ZMetricConn + 31, // 64: org.lfedge.eve.metrics.ZMetricFlowEndPoint.link:type_name -> org.lfedge.eve.metrics.ZMetricFlowLink + 27, // 65: org.lfedge.eve.metrics.ZMetricFlowEndPoint.stats:type_name -> org.lfedge.eve.metrics.PktStat + 32, // 66: org.lfedge.eve.metrics.ZMetricFlow.lEndPoint:type_name -> org.lfedge.eve.metrics.ZMetricFlowEndPoint + 32, // 67: org.lfedge.eve.metrics.ZMetricFlow.rEndPoint:type_name -> org.lfedge.eve.metrics.ZMetricFlowEndPoint + 34, // 68: org.lfedge.eve.metrics.ZMetricNetworkStats.rx:type_name -> org.lfedge.eve.metrics.NetworkStats + 34, // 69: org.lfedge.eve.metrics.ZMetricNetworkStats.tx:type_name -> org.lfedge.eve.metrics.NetworkStats + 48, // 70: org.lfedge.eve.metrics.ZProbeNIMetrics.intfMetric:type_name -> org.lfedge.eve.metrics.ZProbeNIMetrics.ZProbeIntfMetric + 6, // 71: org.lfedge.eve.metrics.ZMetricNetworkInstance.network:type_name -> org.lfedge.eve.metrics.networkMetric + 36, // 72: org.lfedge.eve.metrics.ZMetricNetworkInstance.probeMetric:type_name -> org.lfedge.eve.metrics.ZProbeNIMetrics + 29, // 73: org.lfedge.eve.metrics.ZMetricNetworkInstance.vpnm:type_name -> org.lfedge.eve.metrics.ZMetricVpn + 30, // 74: org.lfedge.eve.metrics.ZMetricNetworkInstance.nonem:type_name -> org.lfedge.eve.metrics.ZMetricNone + 33, // 75: org.lfedge.eve.metrics.ZMetricNetworkInstance.flowStats:type_name -> org.lfedge.eve.metrics.ZMetricFlow + 35, // 76: org.lfedge.eve.metrics.ZMetricNetworkInstance.networkStats:type_name -> org.lfedge.eve.metrics.ZMetricNetworkStats + 44, // 77: org.lfedge.eve.metrics.ZMetricNetworkInstance.vlan_info:type_name -> org.lfedge.eve.metrics.vlanInfo + 51, // 78: org.lfedge.eve.metrics.ZMetricProcess.create_time:type_name -> google.protobuf.Timestamp + 51, // 79: org.lfedge.eve.metrics.ZMetricMsg.atTimeStamp:type_name -> google.protobuf.Timestamp + 19, // 80: org.lfedge.eve.metrics.ZMetricMsg.dm:type_name -> org.lfedge.eve.metrics.deviceMetric + 25, // 81: org.lfedge.eve.metrics.ZMetricMsg.am:type_name -> org.lfedge.eve.metrics.appMetric + 37, // 82: org.lfedge.eve.metrics.ZMetricMsg.nm:type_name -> org.lfedge.eve.metrics.ZMetricNetworkInstance + 38, // 83: org.lfedge.eve.metrics.ZMetricMsg.vm:type_name -> org.lfedge.eve.metrics.ZMetricVolume + 39, // 84: org.lfedge.eve.metrics.ZMetricMsg.pr:type_name -> org.lfedge.eve.metrics.ZMetricProcess + 51, // 85: org.lfedge.eve.metrics.newlogMetric.failSentStartTime:type_name -> google.protobuf.Timestamp + 42, // 86: org.lfedge.eve.metrics.newlogMetric.deviceMetrics:type_name -> org.lfedge.eve.metrics.logfileMetrics + 42, // 87: org.lfedge.eve.metrics.newlogMetric.appMetrics:type_name -> org.lfedge.eve.metrics.logfileMetrics + 49, // 88: org.lfedge.eve.metrics.newlogMetric.top10_input_sources:type_name -> org.lfedge.eve.metrics.newlogMetric.Top10InputSourcesEntry + 51, // 89: org.lfedge.eve.metrics.logfileMetrics.recentGzipFileTime:type_name -> google.protobuf.Timestamp + 51, // 90: org.lfedge.eve.metrics.logfileMetrics.lastGzipFileSendTime:type_name -> google.protobuf.Timestamp + 50, // 91: org.lfedge.eve.metrics.vlanInfo.vlan_counts:type_name -> org.lfedge.eve.metrics.vlanInfo.VlanCountsEntry + 46, // 92: org.lfedge.eve.metrics.FlowlogMetric.messages:type_name -> org.lfedge.eve.metrics.FlowlogCounters + 46, // 93: org.lfedge.eve.metrics.FlowlogMetric.flows:type_name -> org.lfedge.eve.metrics.FlowlogCounters + 46, // 94: org.lfedge.eve.metrics.FlowlogMetric.dns_requests:type_name -> org.lfedge.eve.metrics.FlowlogCounters + 95, // [95:95] is the sub-list for method output_type + 95, // [95:95] is the sub-list for method input_type + 95, // [95:95] is the sub-list for extension type_name + 95, // [95:95] is the sub-list for extension extendee + 0, // [0:95] is the sub-list for field type_name +} + +func init() { file_metrics_metrics_proto_init() } +func file_metrics_metrics_proto_init() { + if File_metrics_metrics_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_metrics_metrics_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MemoryMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppMemoryMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeviceMemoryMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NetworkMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CellularMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CellularSignalStrength); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CellularPacketStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZedcloudMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UrlcloudMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CipherMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TypeCounter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppCpuMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageVDevMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageDiskMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageChildrenMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeviceMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AclMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppContainerMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MetricItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DiskMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppDiskMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PktStat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricConn); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricVpn); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricNone); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricFlowLink); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricFlowEndPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricFlow); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NetworkStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricNetworkStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZProbeNIMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricNetworkInstance); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricVolume); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricProcess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZMetricMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NewlogMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogfileMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZedboxStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VlanInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowlogMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowlogCounters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_metrics_metrics_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZProbeNIMetrics_ZProbeIntfMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_metrics_metrics_proto_msgTypes[19].OneofWrappers = []interface{}{ + (*MetricItem_BoolValue)(nil), + (*MetricItem_Uint32Value)(nil), + (*MetricItem_Uint64Value)(nil), + (*MetricItem_FloatValue)(nil), + (*MetricItem_StringValue)(nil), + } + file_metrics_metrics_proto_msgTypes[28].OneofWrappers = []interface{}{ + (*ZMetricFlowLink_SubNet)(nil), + } + file_metrics_metrics_proto_msgTypes[29].OneofWrappers = []interface{}{ + (*ZMetricFlowEndPoint_IpAddr)(nil), + } + file_metrics_metrics_proto_msgTypes[34].OneofWrappers = []interface{}{ + (*ZMetricNetworkInstance_Vpnm)(nil), + (*ZMetricNetworkInstance_Nonem)(nil), + } + file_metrics_metrics_proto_msgTypes[37].OneofWrappers = []interface{}{ + (*ZMetricMsg_Dm)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_metrics_metrics_proto_rawDesc, + NumEnums: 3, + NumMessages: 48, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_metrics_metrics_proto_goTypes, + DependencyIndexes: file_metrics_metrics_proto_depIdxs, + EnumInfos: file_metrics_metrics_proto_enumTypes, + MessageInfos: file_metrics_metrics_proto_msgTypes, + }.Build() + File_metrics_metrics_proto = out.File + file_metrics_metrics_proto_rawDesc = nil + file_metrics_metrics_proto_goTypes = nil + file_metrics_metrics_proto_depIdxs = nil +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/profile/local_profile.pb.go b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/profile/local_profile.pb.go new file mode 100644 index 0000000000..5609c7cad5 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve-api/go/profile/local_profile.pb.go @@ -0,0 +1,1256 @@ +// Copyright(c) 2021 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.23.4 +// source: profile/local_profile.proto + +package profile + +import ( + info "github.com/lf-edge/eve-api/go/info" + metrics "github.com/lf-edge/eve-api/go/metrics" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type AppCommand_Command int32 + +const ( + AppCommand_COMMAND_UNSPECIFIED AppCommand_Command = 0 + // Application instance, which is either running or transitioning to a running state, + // will be stopped and subsequently started again, preserving the mutated run time state. + AppCommand_COMMAND_RESTART AppCommand_Command = 1 + // Application instance, which is either running or transitioning to a running state, + // will be stopped and the mutated run time state of the app is deleted. + // A subsequent action to start the app will start it with a pristine runtime state. + // This command will purge ALL volumes used by the application. + AppCommand_COMMAND_PURGE AppCommand_Command = 2 +) + +// Enum value maps for AppCommand_Command. +var ( + AppCommand_Command_name = map[int32]string{ + 0: "COMMAND_UNSPECIFIED", + 1: "COMMAND_RESTART", + 2: "COMMAND_PURGE", + } + AppCommand_Command_value = map[string]int32{ + "COMMAND_UNSPECIFIED": 0, + "COMMAND_RESTART": 1, + "COMMAND_PURGE": 2, + } +) + +func (x AppCommand_Command) Enum() *AppCommand_Command { + p := new(AppCommand_Command) + *p = x + return p +} + +func (x AppCommand_Command) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AppCommand_Command) Descriptor() protoreflect.EnumDescriptor { + return file_profile_local_profile_proto_enumTypes[0].Descriptor() +} + +func (AppCommand_Command) Type() protoreflect.EnumType { + return &file_profile_local_profile_proto_enumTypes[0] +} + +func (x AppCommand_Command) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AppCommand_Command.Descriptor instead. +func (AppCommand_Command) EnumDescriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{7, 0} +} + +type LocalDevCmd_Command int32 + +const ( + LocalDevCmd_COMMAND_UNSPECIFIED LocalDevCmd_Command = 0 + // SHUTDOWN: Edge node will initiate a graceful shutdown of all of the app + // instances on the node (including an application instance implementing + // the local profile server API). + // The state of the application instances (HALTING, HALTED, etc) can be + // observed since is sent to the api/v1/appinfo API endpoint as normal. + // Any local profile server is shut down after all the other app instances + // have halted. + LocalDevCmd_COMMAND_SHUTDOWN LocalDevCmd_Command = 1 + // SHUTDOWN_POWEROFF: As above, but once all of the app instances have + // been shut down the edge node will also power off. Note that the power + // on will need to be done through other local means (UPS power cycling + // the edge node or someone manually power cycling the edge node.) + LocalDevCmd_COMMAND_SHUTDOWN_POWEROFF LocalDevCmd_Command = 2 +) + +// Enum value maps for LocalDevCmd_Command. +var ( + LocalDevCmd_Command_name = map[int32]string{ + 0: "COMMAND_UNSPECIFIED", + 1: "COMMAND_SHUTDOWN", + 2: "COMMAND_SHUTDOWN_POWEROFF", + } + LocalDevCmd_Command_value = map[string]int32{ + "COMMAND_UNSPECIFIED": 0, + "COMMAND_SHUTDOWN": 1, + "COMMAND_SHUTDOWN_POWEROFF": 2, + } +) + +func (x LocalDevCmd_Command) Enum() *LocalDevCmd_Command { + p := new(LocalDevCmd_Command) + *p = x + return p +} + +func (x LocalDevCmd_Command) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LocalDevCmd_Command) Descriptor() protoreflect.EnumDescriptor { + return file_profile_local_profile_proto_enumTypes[1].Descriptor() +} + +func (LocalDevCmd_Command) Type() protoreflect.EnumType { + return &file_profile_local_profile_proto_enumTypes[1] +} + +func (x LocalDevCmd_Command) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LocalDevCmd_Command.Descriptor instead. +func (LocalDevCmd_Command) EnumDescriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{9, 0} +} + +// LocalProfile message is sent in response to a GET to +// the api/v1/local_profile API +type LocalProfile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LocalProfile string `protobuf:"bytes,1,opt,name=local_profile,json=localProfile,proto3" json:"local_profile,omitempty"` + ServerToken string `protobuf:"bytes,2,opt,name=server_token,json=serverToken,proto3" json:"server_token,omitempty"` +} + +func (x *LocalProfile) Reset() { + *x = LocalProfile{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalProfile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalProfile) ProtoMessage() {} + +func (x *LocalProfile) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LocalProfile.ProtoReflect.Descriptor instead. +func (*LocalProfile) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{0} +} + +func (x *LocalProfile) GetLocalProfile() string { + if x != nil { + return x.LocalProfile + } + return "" +} + +func (x *LocalProfile) GetServerToken() string { + if x != nil { + return x.ServerToken + } + return "" +} + +// RadioStatus message is sent in the POST request to the api/v1/radio API. +type RadioStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // radio_silence is True if the Radio-Silence mode is enabled by config AND successfully + // applied for all radio devices. + // If the radio silence was requested but this field is still returned as False, + // expect non-empty config_error attached. + RadioSilence bool `protobuf:"varint,1,opt,name=radio_silence,json=radioSilence,proto3" json:"radio_silence,omitempty"` + // If the last radio configuration change failed, error message is reported here. + // Please note that there is also a per-modem configuration error reported under CellularStatus. + ConfigError string `protobuf:"bytes,2,opt,name=config_error,json=configError,proto3" json:"config_error,omitempty"` + // Status of every LTE network. + CellularStatus []*CellularStatus `protobuf:"bytes,3,rep,name=cellular_status,json=cellularStatus,proto3" json:"cellular_status,omitempty"` + // Metrics for every LTE network. + CellularMetrics []*metrics.CellularMetric `protobuf:"bytes,4,rep,name=cellular_metrics,json=cellularMetrics,proto3" json:"cellular_metrics,omitempty"` // XXX Later we can add status for every WiFi network adapter. +} + +func (x *RadioStatus) Reset() { + *x = RadioStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RadioStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RadioStatus) ProtoMessage() {} + +func (x *RadioStatus) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RadioStatus.ProtoReflect.Descriptor instead. +func (*RadioStatus) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{1} +} + +func (x *RadioStatus) GetRadioSilence() bool { + if x != nil { + return x.RadioSilence + } + return false +} + +func (x *RadioStatus) GetConfigError() string { + if x != nil { + return x.ConfigError + } + return "" +} + +func (x *RadioStatus) GetCellularStatus() []*CellularStatus { + if x != nil { + return x.CellularStatus + } + return nil +} + +func (x *RadioStatus) GetCellularMetrics() []*metrics.CellularMetric { + if x != nil { + return x.CellularMetrics + } + return nil +} + +// CellularStatus contains status information for a single LTE network. +type CellularStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Logical label assigned to the physical cellular modem. + Logicallabel string `protobuf:"bytes,1,opt,name=logicallabel,proto3" json:"logicallabel,omitempty"` + Module *info.ZCellularModuleInfo `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` + SimCards []*info.ZSimcardInfo `protobuf:"bytes,3,rep,name=sim_cards,json=simCards,proto3" json:"sim_cards,omitempty"` + Providers []*info.ZCellularProvider `protobuf:"bytes,4,rep,name=providers,proto3" json:"providers,omitempty"` + ConfigError string `protobuf:"bytes,10,opt,name=config_error,json=configError,proto3" json:"config_error,omitempty"` + ProbeError string `protobuf:"bytes,11,opt,name=probe_error,json=probeError,proto3" json:"probe_error,omitempty"` +} + +func (x *CellularStatus) Reset() { + *x = CellularStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CellularStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CellularStatus) ProtoMessage() {} + +func (x *CellularStatus) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CellularStatus.ProtoReflect.Descriptor instead. +func (*CellularStatus) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{2} +} + +func (x *CellularStatus) GetLogicallabel() string { + if x != nil { + return x.Logicallabel + } + return "" +} + +func (x *CellularStatus) GetModule() *info.ZCellularModuleInfo { + if x != nil { + return x.Module + } + return nil +} + +func (x *CellularStatus) GetSimCards() []*info.ZSimcardInfo { + if x != nil { + return x.SimCards + } + return nil +} + +func (x *CellularStatus) GetProviders() []*info.ZCellularProvider { + if x != nil { + return x.Providers + } + return nil +} + +func (x *CellularStatus) GetConfigError() string { + if x != nil { + return x.ConfigError + } + return "" +} + +func (x *CellularStatus) GetProbeError() string { + if x != nil { + return x.ProbeError + } + return "" +} + +// RadioConfig message may be returned in the response from a POST request +// sent to the api/v1/radio API by the local profile server (see PROFILE.md), +// or the message can be a part of the CompoundEdgeDevConfig message and +// returned by the local operator console (see config/compound_devconfig.proto). +type RadioConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Security token. EVE will verify that serverToken matches the profile server + // token received from the controller. Not used for the LOC case. + ServerToken string `protobuf:"bytes,1,opt,name=server_token,json=serverToken,proto3" json:"server_token,omitempty"` + // If enabled, EVE will disable radio transmission on all wireless devices available + // to the host (i.e. it does not cover wireless devices directly attached to applications). + RadioSilence bool `protobuf:"varint,2,opt,name=radio_silence,json=radioSilence,proto3" json:"radio_silence,omitempty"` +} + +func (x *RadioConfig) Reset() { + *x = RadioConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RadioConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RadioConfig) ProtoMessage() {} + +func (x *RadioConfig) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RadioConfig.ProtoReflect.Descriptor instead. +func (*RadioConfig) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{3} +} + +func (x *RadioConfig) GetServerToken() string { + if x != nil { + return x.ServerToken + } + return "" +} + +func (x *RadioConfig) GetRadioSilence() bool { + if x != nil { + return x.RadioSilence + } + return false +} + +// LocalAppInfoList contains information about all app on EdgeNode +// sent to the api/v1/appinfo +type LocalAppInfoList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppsInfo []*LocalAppInfo `protobuf:"bytes,1,rep,name=apps_info,json=appsInfo,proto3" json:"apps_info,omitempty"` +} + +func (x *LocalAppInfoList) Reset() { + *x = LocalAppInfoList{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalAppInfoList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalAppInfoList) ProtoMessage() {} + +func (x *LocalAppInfoList) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[4] + 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 LocalAppInfoList.ProtoReflect.Descriptor instead. +func (*LocalAppInfoList) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{4} +} + +func (x *LocalAppInfoList) GetAppsInfo() []*LocalAppInfo { + if x != nil { + return x.AppsInfo + } + return nil +} + +// LocalAppInfo contains information about app on EdgeNode +type LocalAppInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Err *info.ErrorInfo `protobuf:"bytes,4,opt,name=err,proto3" json:"err,omitempty"` + State info.ZSwState `protobuf:"varint,5,opt,name=state,proto3,enum=org.lfedge.eve.info.ZSwState" json:"state,omitempty"` + // Value of the field `timestamp` from the last `AppCommand` that was + // requested by the Local profile server, received by EVE and has completed + // its execution for this application instance. + LastCmdTimestamp uint64 `protobuf:"varint,6,opt,name=last_cmd_timestamp,json=lastCmdTimestamp,proto3" json:"last_cmd_timestamp,omitempty"` +} + +func (x *LocalAppInfo) Reset() { + *x = LocalAppInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalAppInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalAppInfo) ProtoMessage() {} + +func (x *LocalAppInfo) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[5] + 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 LocalAppInfo.ProtoReflect.Descriptor instead. +func (*LocalAppInfo) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{5} +} + +func (x *LocalAppInfo) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *LocalAppInfo) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *LocalAppInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *LocalAppInfo) GetErr() *info.ErrorInfo { + if x != nil { + return x.Err + } + return nil +} + +func (x *LocalAppInfo) GetState() info.ZSwState { + if x != nil { + return x.State + } + return info.ZSwState(0) +} + +func (x *LocalAppInfo) GetLastCmdTimestamp() uint64 { + if x != nil { + return x.LastCmdTimestamp + } + return 0 +} + +// LocalAppCmdList message may be returned in the response from a POST request +// sent to the api/v1/appinfo API by the local profile server (see PROFILE.md), +// or the message can be a part of the CompoundEdgeDevConfig message and +// returned by the local operator console (see config/compound_devconfig.proto) +type LocalAppCmdList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Security token. EVE will verify that server_token matches the profile server + // token received from the controller. Not used for the LOC case. + ServerToken string `protobuf:"bytes,1,opt,name=server_token,json=serverToken,proto3" json:"server_token,omitempty"` + // A list of commands requested to be executed for locally running application instances. + // A new request created for the same application should overwrite the previous entry + // with the 'timestamp' field updated. In other words, the list should contain at most + // one entry for each application instance. + // It is not required for the Local profile server to persist command requests. + // Also, it is not required for the Local profile server to stop submitting command + // requests that have been already processed by EVE. Using the `timestamp` field, + // EVE is able to determine if a given command request has been already handled or not. + // To check if the last requested command has completed, compare its timestamp with + // 'last_cmd_timestamp' from `LocalAppInfo` message, submitted by EVE in the request + // body of the api/v1/appinfo API. + AppCommands []*AppCommand `protobuf:"bytes,2,rep,name=app_commands,json=appCommands,proto3" json:"app_commands,omitempty"` +} + +func (x *LocalAppCmdList) Reset() { + *x = LocalAppCmdList{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalAppCmdList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalAppCmdList) ProtoMessage() {} + +func (x *LocalAppCmdList) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[6] + 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 LocalAppCmdList.ProtoReflect.Descriptor instead. +func (*LocalAppCmdList) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{6} +} + +func (x *LocalAppCmdList) GetServerToken() string { + if x != nil { + return x.ServerToken + } + return "" +} + +func (x *LocalAppCmdList) GetAppCommands() []*AppCommand { + if x != nil { + return x.AppCommands + } + return nil +} + +// AppCommand references a running application instance by UUID and/or displayname, +// and describes a command to execute for this instance. +type AppCommand struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Reference the application instance by its ID (which is an instance of UUID). + // At least one of the id and displayname should be defined. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Reference the application instance by the user-friendly displayname. + // At least one of the id and displayname should be defined. + Displayname string `protobuf:"bytes,2,opt,name=displayname,proto3" json:"displayname,omitempty"` + // Timestamp to record when the request to run the command was made. + // The format of the timestamp is not defined. It can be a Unix timestamp + // or a different time representation. It is not even required for the timestamp + // to match the real time or to be in-sync with the device clock. + // What is required, however, is that two successive but distinct requests made + // for the same application will have different timestamps attached. + // This requirement applies even between restarts of the Local profile server. + // A request made after a restart should not have the same timestamp attached + // as the previous request made for the same application before the restart. + // + // EVE guarantees that a newly added command request or a change of the timestamp + // will result in the command being triggered ASAP. Even if the execution of a command + // is interrupted by a device reboot/crash, the eventuality of the command completion + // is still guaranteed. The only exception is if Local Profile Server restarts/crashes + // shortly after a request is made, in which case it can get lost before EVE is able + // to receive it. For this scenario to be avoided, a persistence of command requests + // on the side of the Local Profile server is necessary. + Timestamp uint64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Command to run. + Command AppCommand_Command `protobuf:"varint,4,opt,name=command,proto3,enum=org.lfedge.eve.profile.AppCommand_Command" json:"command,omitempty"` +} + +func (x *AppCommand) Reset() { + *x = AppCommand{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppCommand) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppCommand) ProtoMessage() {} + +func (x *AppCommand) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[7] + 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 AppCommand.ProtoReflect.Descriptor instead. +func (*AppCommand) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{7} +} + +func (x *AppCommand) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AppCommand) GetDisplayname() string { + if x != nil { + return x.Displayname + } + return "" +} + +func (x *AppCommand) GetTimestamp() uint64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *AppCommand) GetCommand() AppCommand_Command { + if x != nil { + return x.Command + } + return AppCommand_COMMAND_UNSPECIFIED +} + +// LocalDevInfo contains information about an EdgeNode +// sent to the api/v1/devinfo +type LocalDevInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceUuid string `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"` + State info.ZDeviceState `protobuf:"varint,2,opt,name=state,proto3,enum=org.lfedge.eve.info.ZDeviceState" json:"state,omitempty"` + MaintenanceModeReasons []info.MaintenanceModeReason `protobuf:"varint,3,rep,packed,name=maintenance_mode_reasons,json=maintenanceModeReasons,proto3,enum=org.lfedge.eve.info.MaintenanceModeReason" json:"maintenance_mode_reasons,omitempty"` + BootTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=boot_time,json=bootTime,proto3" json:"boot_time,omitempty"` + LastBootReason info.BootReason `protobuf:"varint,5,opt,name=last_boot_reason,json=lastBootReason,proto3,enum=org.lfedge.eve.info.BootReason" json:"last_boot_reason,omitempty"` + // Value of the field `timestamp` from the last `DevCommand` that was + // requested by the Local profile server, received by EVE and has completed + // its execution for this edge node. + LastCmdTimestamp uint64 `protobuf:"varint,10,opt,name=last_cmd_timestamp,json=lastCmdTimestamp,proto3" json:"last_cmd_timestamp,omitempty"` +} + +func (x *LocalDevInfo) Reset() { + *x = LocalDevInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalDevInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalDevInfo) ProtoMessage() {} + +func (x *LocalDevInfo) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_proto_msgTypes[8] + 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 LocalDevInfo.ProtoReflect.Descriptor instead. +func (*LocalDevInfo) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{8} +} + +func (x *LocalDevInfo) GetDeviceUuid() string { + if x != nil { + return x.DeviceUuid + } + return "" +} + +func (x *LocalDevInfo) GetState() info.ZDeviceState { + if x != nil { + return x.State + } + return info.ZDeviceState(0) +} + +func (x *LocalDevInfo) GetMaintenanceModeReasons() []info.MaintenanceModeReason { + if x != nil { + return x.MaintenanceModeReasons + } + return nil +} + +func (x *LocalDevInfo) GetBootTime() *timestamppb.Timestamp { + if x != nil { + return x.BootTime + } + return nil +} + +func (x *LocalDevInfo) GetLastBootReason() info.BootReason { + if x != nil { + return x.LastBootReason + } + return info.BootReason(0) +} + +func (x *LocalDevInfo) GetLastCmdTimestamp() uint64 { + if x != nil { + return x.LastCmdTimestamp + } + return 0 +} + +// LocalDevCmd message may be returned in the response from a POST request +// sent to the api/v1/devinfo API by the local profile server (see PROFILE.md), +// or the message can be a part of the CompoundEdgeDevConfig message and +// returned by the local operator console (see config/compound_devconfig.proto). +type LocalDevCmd struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Security token. EVE will verify that server_token matches the profile server + // token received from the controller. Not used for the LOC case. + ServerToken string `protobuf:"bytes,1,opt,name=server_token,json=serverToken,proto3" json:"server_token,omitempty"` + Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Command to run. + Command LocalDevCmd_Command `protobuf:"varint,3,opt,name=command,proto3,enum=org.lfedge.eve.profile.LocalDevCmd_Command" json:"command,omitempty"` +} + +func (x *LocalDevCmd) Reset() { + *x = LocalDevCmd{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_local_profile_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalDevCmd) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalDevCmd) ProtoMessage() {} + +func (x *LocalDevCmd) ProtoReflect() protoreflect.Message { + mi := &file_profile_local_profile_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 LocalDevCmd.ProtoReflect.Descriptor instead. +func (*LocalDevCmd) Descriptor() ([]byte, []int) { + return file_profile_local_profile_proto_rawDescGZIP(), []int{9} +} + +func (x *LocalDevCmd) GetServerToken() string { + if x != nil { + return x.ServerToken + } + return "" +} + +func (x *LocalDevCmd) GetTimestamp() uint64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *LocalDevCmd) GetCommand() LocalDevCmd_Command { + if x != nil { + return x.Command + } + return LocalDevCmd_COMMAND_UNSPECIFIED +} + +var File_profile_local_profile_proto protoreflect.FileDescriptor + +var file_profile_local_profile_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6f, + 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x69, 0x6e, 0x66, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2f, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x56, + 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xf9, 0x01, 0x0a, 0x0b, 0x52, 0x61, 0x64, 0x69, 0x6f, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x5f, + 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, + 0x61, 0x64, 0x69, 0x6f, 0x53, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4f, + 0x0a, 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, + 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x0e, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x51, 0x0a, 0x10, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x52, 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x22, 0xc0, 0x02, 0x0a, 0x0e, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x6f, 0x67, + 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x40, 0x0a, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, + 0x5a, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x73, + 0x69, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x69, 0x6d, 0x63, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x08, 0x73, 0x69, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x44, 0x0a, 0x09, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x62, 0x65, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x0b, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x61, 0x64, 0x69, 0x6f, + 0x5f, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x72, 0x61, 0x64, 0x69, 0x6f, 0x53, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x55, 0x0a, 0x10, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x41, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x61, 0x70, 0x70, 0x73, 0x49, + 0x6e, 0x66, 0x6f, 0x22, 0xe1, 0x01, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x70, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, + 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x03, 0x65, 0x72, 0x72, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x53, 0x77, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6d, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x7b, 0x0a, 0x0f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x41, 0x70, 0x70, 0x43, 0x6d, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x45, 0x0a, + 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, + 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x41, 0x70, 0x70, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x22, 0xee, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x44, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, + 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x41, 0x70, + 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x4a, 0x0a, 0x07, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, + 0x0f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x55, + 0x52, 0x47, 0x45, 0x10, 0x02, 0x22, 0x80, 0x03, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x44, + 0x65, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, + 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x5a, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x64, 0x0a, 0x18, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, + 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x16, + 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x49, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, + 0x42, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, + 0x42, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6d, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xee, 0x01, 0x0a, 0x0b, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x44, 0x65, 0x76, 0x43, 0x6d, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x43, 0x6d, 0x64, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x22, 0x57, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x43, + 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, + 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x4f, + 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x5f, 0x50, + 0x4f, 0x57, 0x45, 0x52, 0x4f, 0x46, 0x46, 0x10, 0x02, 0x42, 0x3f, 0x0a, 0x16, 0x6f, 0x72, 0x67, + 0x2e, 0x6c, 0x66, 0x65, 0x64, 0x67, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6c, 0x66, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x65, 0x76, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, + 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_profile_local_profile_proto_rawDescOnce sync.Once + file_profile_local_profile_proto_rawDescData = file_profile_local_profile_proto_rawDesc +) + +func file_profile_local_profile_proto_rawDescGZIP() []byte { + file_profile_local_profile_proto_rawDescOnce.Do(func() { + file_profile_local_profile_proto_rawDescData = protoimpl.X.CompressGZIP(file_profile_local_profile_proto_rawDescData) + }) + return file_profile_local_profile_proto_rawDescData +} + +var file_profile_local_profile_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_profile_local_profile_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_profile_local_profile_proto_goTypes = []interface{}{ + (AppCommand_Command)(0), // 0: org.lfedge.eve.profile.AppCommand.Command + (LocalDevCmd_Command)(0), // 1: org.lfedge.eve.profile.LocalDevCmd.Command + (*LocalProfile)(nil), // 2: org.lfedge.eve.profile.LocalProfile + (*RadioStatus)(nil), // 3: org.lfedge.eve.profile.RadioStatus + (*CellularStatus)(nil), // 4: org.lfedge.eve.profile.CellularStatus + (*RadioConfig)(nil), // 5: org.lfedge.eve.profile.RadioConfig + (*LocalAppInfoList)(nil), // 6: org.lfedge.eve.profile.LocalAppInfoList + (*LocalAppInfo)(nil), // 7: org.lfedge.eve.profile.LocalAppInfo + (*LocalAppCmdList)(nil), // 8: org.lfedge.eve.profile.LocalAppCmdList + (*AppCommand)(nil), // 9: org.lfedge.eve.profile.AppCommand + (*LocalDevInfo)(nil), // 10: org.lfedge.eve.profile.LocalDevInfo + (*LocalDevCmd)(nil), // 11: org.lfedge.eve.profile.LocalDevCmd + (*metrics.CellularMetric)(nil), // 12: org.lfedge.eve.metrics.CellularMetric + (*info.ZCellularModuleInfo)(nil), // 13: org.lfedge.eve.info.ZCellularModuleInfo + (*info.ZSimcardInfo)(nil), // 14: org.lfedge.eve.info.ZSimcardInfo + (*info.ZCellularProvider)(nil), // 15: org.lfedge.eve.info.ZCellularProvider + (*info.ErrorInfo)(nil), // 16: org.lfedge.eve.info.ErrorInfo + (info.ZSwState)(0), // 17: org.lfedge.eve.info.ZSwState + (info.ZDeviceState)(0), // 18: org.lfedge.eve.info.ZDeviceState + (info.MaintenanceModeReason)(0), // 19: org.lfedge.eve.info.MaintenanceModeReason + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp + (info.BootReason)(0), // 21: org.lfedge.eve.info.BootReason +} +var file_profile_local_profile_proto_depIdxs = []int32{ + 4, // 0: org.lfedge.eve.profile.RadioStatus.cellular_status:type_name -> org.lfedge.eve.profile.CellularStatus + 12, // 1: org.lfedge.eve.profile.RadioStatus.cellular_metrics:type_name -> org.lfedge.eve.metrics.CellularMetric + 13, // 2: org.lfedge.eve.profile.CellularStatus.module:type_name -> org.lfedge.eve.info.ZCellularModuleInfo + 14, // 3: org.lfedge.eve.profile.CellularStatus.sim_cards:type_name -> org.lfedge.eve.info.ZSimcardInfo + 15, // 4: org.lfedge.eve.profile.CellularStatus.providers:type_name -> org.lfedge.eve.info.ZCellularProvider + 7, // 5: org.lfedge.eve.profile.LocalAppInfoList.apps_info:type_name -> org.lfedge.eve.profile.LocalAppInfo + 16, // 6: org.lfedge.eve.profile.LocalAppInfo.err:type_name -> org.lfedge.eve.info.ErrorInfo + 17, // 7: org.lfedge.eve.profile.LocalAppInfo.state:type_name -> org.lfedge.eve.info.ZSwState + 9, // 8: org.lfedge.eve.profile.LocalAppCmdList.app_commands:type_name -> org.lfedge.eve.profile.AppCommand + 0, // 9: org.lfedge.eve.profile.AppCommand.command:type_name -> org.lfedge.eve.profile.AppCommand.Command + 18, // 10: org.lfedge.eve.profile.LocalDevInfo.state:type_name -> org.lfedge.eve.info.ZDeviceState + 19, // 11: org.lfedge.eve.profile.LocalDevInfo.maintenance_mode_reasons:type_name -> org.lfedge.eve.info.MaintenanceModeReason + 20, // 12: org.lfedge.eve.profile.LocalDevInfo.boot_time:type_name -> google.protobuf.Timestamp + 21, // 13: org.lfedge.eve.profile.LocalDevInfo.last_boot_reason:type_name -> org.lfedge.eve.info.BootReason + 1, // 14: org.lfedge.eve.profile.LocalDevCmd.command:type_name -> org.lfedge.eve.profile.LocalDevCmd.Command + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_profile_local_profile_proto_init() } +func file_profile_local_profile_proto_init() { + if File_profile_local_profile_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_profile_local_profile_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalProfile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RadioStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CellularStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RadioConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalAppInfoList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalAppInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalAppCmdList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppCommand); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalDevInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_local_profile_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalDevCmd); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_profile_local_profile_proto_rawDesc, + NumEnums: 2, + NumMessages: 10, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_profile_local_profile_proto_goTypes, + DependencyIndexes: file_profile_local_profile_proto_depIdxs, + EnumInfos: file_profile_local_profile_proto_enumTypes, + MessageInfos: file_profile_local_profile_proto_msgTypes, + }.Build() + File_profile_local_profile_proto = out.File + file_profile_local_profile_proto_rawDesc = nil + file_profile_local_profile_proto_goTypes = nil + file_profile_local_profile_proto_depIdxs = nil +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/execwrapper.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/execwrapper.go index fabc7b67c1..b84a0949bd 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/execwrapper.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/execwrapper.go @@ -17,84 +17,61 @@ import ( ) const ( - // Will wait for 1000s max for a call instead of waiting forever - maxTimeOutLimit = 1000 - timeOutLimit = 100 + /* + * execution timeout is supposed to be less than the watchdog timeout, + * as otherwise the watchdog might fire and reboot the system before + * the timeout fires + * exceptions are when an executable is started from a different goroutine + * source of the error timeout and the watchdog timeout: + * error timeout: $ grep -r errorTime pkg/pillar/cmd/ | grep time + * watchdog timeout: $ grep hv_watchdog_timer pkg/grub/rootfs.cfg + */ + timeoutLimit = 3 * time.Minute + defaultTimeout = 100 * time.Second ) // Command holds the necessary data to execute command type Command struct { - command *exec.Cmd - log *LogObject - agentName string - timeout time.Duration - buffer *bytes.Buffer - ctx context.Context + command *exec.Cmd + log *LogObject + agentName string + timeout time.Duration + buffer *bytes.Buffer + ctx context.Context + errorMonad error } // Output runs the command and returns its standard output. // Any returned error will usually be of type *ExitError. -// Waits for the exec call to finish for `maxTimeOutLimit` after which timeout error is returned +// Waits for the exec call to finish for `defaultTimeout` after which timeout error is returned func (c *Command) Output() ([]byte, error) { var buf bytes.Buffer c.command.Stdout = &buf c.buffer = &buf - c.timeout = maxTimeOutLimit + if c.timeout == 0 { + c.timeout = defaultTimeout + } return c.execCommand() } // CombinedOutput runs the command and returns its combined standard output and standard error. -// Waits for the exec call to finish for `maxTimeOutLimit` after which timeout error is returned +// Waits for the exec call to finish for `defaultTimeout` after which timeout error is returned func (c *Command) CombinedOutput() ([]byte, error) { var buf bytes.Buffer c.command.Stdout = &buf c.command.Stderr = &buf c.buffer = &buf - c.timeout = maxTimeOutLimit - return c.execCommand() -} - -// OutputWithTimeout waits for the exec call to finish for `timeOutLimit` -// after which timeout error is returned -func (c *Command) OutputWithTimeout() ([]byte, error) { - var buf bytes.Buffer - c.command.Stdout = &buf - c.buffer = &buf - c.timeout = timeOutLimit - return c.execCommand() -} - -// CombinedOutputWithTimeout waits for the exec call to finish for `timeOutLimit` -// after which timeout error is returned -func (c *Command) CombinedOutputWithTimeout() ([]byte, error) { - var buf bytes.Buffer - c.command.Stdout = &buf - c.command.Stderr = &buf - c.buffer = &buf - c.timeout = timeOutLimit - return c.execCommand() -} - -// OutputWithCustomTimeout accepts a custom timeout limit to wait for the exec call. -func (c *Command) OutputWithCustomTimeout(timeout uint) ([]byte, error) { - var buf bytes.Buffer - c.command.Stdout = &buf - c.buffer = &buf - c.timeout = time.Duration(timeout) - return c.execCommand() -} - -// CombinedOutputWithCustomTimeout accepts a custom timeout limit to wait for the exec call. -func (c *Command) CombinedOutputWithCustomTimeout(timeout uint) ([]byte, error) { - var buf bytes.Buffer - c.command.Stdout = &buf - c.command.Stderr = &buf - c.buffer = &buf - c.timeout = time.Duration(timeout) + if c.timeout == 0 { + c.timeout = defaultTimeout + } return c.execCommand() } func (c *Command) execCommand() ([]byte, error) { + if c.errorMonad != nil { + return nil, c.errorMonad + } + if c.log != nil { c.log.Tracef("execCommand(%v)", c.command.Args) } @@ -108,7 +85,7 @@ func (c *Command) execCommand() ([]byte, error) { stillRunning := time.NewTicker(25 * time.Second) defer stillRunning.Stop() - waitTimer := time.NewTimer(c.timeout * time.Second) + waitTimer := time.NewTimer(c.timeout) defer waitTimer.Stop() if c.ctx == nil { @@ -134,6 +111,23 @@ func (c *Command) execCommand() ([]byte, error) { } } +// WithLimitedTimeout set custom timeout for command +func (c *Command) WithLimitedTimeout(timeout time.Duration) *Command { + c.timeout = timeout + if c.timeout > timeoutLimit { + c.errorMonad = fmt.Errorf("custom timeout (%v) is longer than watchdog timeout (%v)", c.timeout, defaultTimeout) + } + + return c +} + +// WithUnlimitedTimeout set custom timeout for command not bound to any limits for when run in a separate goroutine +func (c *Command) WithUnlimitedTimeout(timeout time.Duration) *Command { + c.timeout = timeout + + return c +} + // WithContext set context for command func (c *Command) WithContext(ctx context.Context) *Command { c.ctx = ctx diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/logobjecttypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/logobjecttypes.go index 09ac874a8e..415815f2e7 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/logobjecttypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/base/logobjecttypes.go @@ -136,6 +136,10 @@ const ( NetworkInstanceMetricsLogType LogObjectType = "network_instance_metrics" // NetworkMetricsLogType: NetworkMetricsLogType LogObjectType = "network_metrics" + // WwanConfigLogType: + WwanConfigLogType LogObjectType = "wwan_config" + // WwanStatusLogType: + WwanStatusLogType LogObjectType = "wwan_status" // WwanMetricsLogType: WwanMetricsLogType LogObjectType = "wwan_metrics" // WwanLocationInfoLogType: diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/pubsubintf.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/pubsubintf.go index 7fb6dd9350..680fa95ffa 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/pubsubintf.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/pubsubintf.go @@ -9,6 +9,11 @@ import ( "github.com/lf-edge/eve/pkg/pillar/base" ) +// Getter - Interface for pub/sub +type Getter interface { + Get(key string) (interface{}, error) +} + // Publication - Interface to be implemented by a Publication type Publication interface { // CheckMaxSize returns an error if the item is too large diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/socketdriver/driver.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/socketdriver/driver.go index e3ee1d48f4..b568fef945 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/socketdriver/driver.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/socketdriver/driver.go @@ -48,12 +48,6 @@ const ( fixedName = "global" fixedDir = "/run/" + fixedName maxsize = 65535 // Max size for json which can be read or written - - // Copied from types package to avoid cycle in package dependencies - // persistDir - Location to store persistent files. - persistDir = "/persist" - // persistConfigDir is where we keep some configuration across reboots - persistConfigDir = persistDir + "/config" ) // SocketDriver driver for pubsub using local unix-domain socket and files @@ -87,8 +81,8 @@ func (s *SocketDriver) Publisher(global bool, name, topic string, persistent boo // the dirName depends on if we are persistent, and if it is the global config switch { case persistent && publishToDir: - // Special case for /persist/config/ - dirName = fmt.Sprintf("%s/%s/%s", s.RootDir, persistConfigDir, name) + // No longer supported + return nil, errors.New("Persistent not supported for empty agentname") case persistent && !publishToDir: dirName = s.persistentDirName(name) case !persistent && publishToDir: @@ -184,12 +178,10 @@ func (s *SocketDriver) Subscriber(global bool, name, topic string, persistent bo if global { subFromDir = true if persistent { - // Special case for /persist/config/ - dirName = fmt.Sprintf("%s/%s/%s", s.RootDir, - persistConfigDir, name) - } else { - dirName = s.fixedDirName(name) + // No longer supported + return nil, errors.New("Persistent not supported for empty agentname") } + dirName = s.fixedDirName(name) } else if agentName == "zedclient" { subFromDir = true if persistent { diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/util.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/util.go index 758e90cbcb..27dbb3c8fb 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/util.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/pubsub/util.go @@ -15,6 +15,15 @@ import ( ) // deepCopy returns the same type as what is passed as input +// Warning: only public fields will be exported +// Note why json marshalling is used: +// Type casting and associated type assertions in golang are only +// useful for atoms in the type system. Hence you can't do a type +// assertion and cast of a struct of internal fields. This coupled +// with pubsub needing to save a copy lead to doing deep copies. +// Golang doesn't have support for a deep copy. Once can build it +// oneself using reflect package, but it ends up doing the same thing +// as json encode+decode apart from the exported fields check. func deepCopy(log *base.LogObject, in interface{}) interface{} { b, err := json.Marshal(in) if err != nil { diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/attesttypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/attesttypes.go index d42394933d..8445aac0be 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/attesttypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/attesttypes.go @@ -10,6 +10,48 @@ import ( "github.com/lf-edge/eve/pkg/pillar/base" ) +// AttestState represents a state in the attest state machine +type AttestState int32 + +// States +const ( + StateNone AttestState = iota + 0 // State when (Re)Starting attestation + StateNonceWait // Waiting for response from Controller for Nonce request + StateInternalQuoteWait // Waiting for internal PCR quote to be published + StateInternalEscrowWait // Waiting for internal Escrow data to be published + StateAttestWait // Waiting for response from Controller for PCR quote + StateAttestEscrowWait // Waiting for response from Controller for Escrow data + StateRestartWait // Waiting for restart timer to expire, to start all over again + StateComplete // Everything w.r.t attestation is complete + StateAny // Not a real state per se. helps defining wildcard transitions(below) +) + +// String returns human readable string of an AttestState +func (state AttestState) String() string { + switch state { + case StateNone: + return "StateNone" + case StateNonceWait: + return "StateNonceWait" + case StateInternalQuoteWait: + return "StateInternalQuoteWait" + case StateInternalEscrowWait: + return "StateInternalEscrowWait" + case StateAttestWait: + return "StateAttestWait" + case StateAttestEscrowWait: + return "StateAttestEscrowWait" + case StateRestartWait: + return "StateRestartWait" + case StateComplete: + return "StateComplete" + case StateAny: + return "StateAny" + default: + return "Unknown State" + } +} + // AttestNonce carries nonce published by requester type AttestNonce struct { Nonce []byte diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cachedresolvedip.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cachedresolvedip.go new file mode 100644 index 0000000000..7279c64e1f --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cachedresolvedip.go @@ -0,0 +1,79 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package types + +import ( + "fmt" + "net" + "strings" + "time" + + "github.com/lf-edge/eve/pkg/pillar/base" +) + +// CachedIP : cached IP with time-limited validity. +type CachedIP struct { + IPAddress net.IP + ValidUntil time.Time +} + +// String representation of CachedIP. +func (c CachedIP) String() string { + return fmt.Sprintf("IP %s valid until %v", c.IPAddress, c.ValidUntil) +} + +// CachedResolvedIPs serves as a cache for storing the IP addresses obtained through +// DNS resolution for a given hostname. +type CachedResolvedIPs struct { + Hostname string + CachedIPs []CachedIP +} + +// String representation of CachedResolvedIPs. +func (c CachedResolvedIPs) String() string { + cachedIPs := make([]string, 0, len(c.CachedIPs)) + for _, ip := range c.CachedIPs { + cachedIPs = append(cachedIPs, ip.String()) + } + return fmt.Sprintf("Hostname %s with cached resolved IPs: [%s]", c.Hostname, + strings.Join(cachedIPs, ", ")) +} + +// Key is used for pubsub +func (c CachedResolvedIPs) Key() string { + return c.Hostname +} + +// LogCreate : +func (c CachedResolvedIPs) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.CachedResolvedIPsLogType, "", + nilUUID, c.LogKey()) + logObject.Metricf("CachedResolvedIPs create %s", c.String()) +} + +// LogModify : +func (c CachedResolvedIPs) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.CachedResolvedIPsLogType, "", + nilUUID, c.LogKey()) + oldVal, ok := old.(CachedResolvedIPs) + if !ok { + logObject.Clone().Fatalf( + "LogModify: Old object interface passed is not of CachedResolvedIPs type") + } + logObject.Metricf("CachedResolvedIPs modified from %s to %s", + oldVal.String(), c.String()) +} + +// LogDelete : +func (c CachedResolvedIPs) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.CachedResolvedIPsLogType, "", + nilUUID, c.LogKey()) + logObject.Metricf("CachedResolvedIPs delete %s", c.String()) + base.DeleteLogObject(logBase, c.LogKey()) +} + +// LogKey : +func (c CachedResolvedIPs) LogKey() string { + return string(base.CachedResolvedIPsLogType) + "-" + c.Key() +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cipherinfotypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cipherinfotypes.go index a572a4d368..e1b1982c42 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cipherinfotypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/cipherinfotypes.go @@ -7,7 +7,6 @@ import ( "encoding/hex" "github.com/google/go-cmp/cmp" - zconfig "github.com/lf-edge/eve-api/go/config" zcommon "github.com/lf-edge/eve-api/go/evecommon" "github.com/lf-edge/eve/pkg/pillar/base" ) @@ -18,8 +17,8 @@ import ( type CipherContext struct { ContextID string HashScheme zcommon.HashAlgorithm - KeyExchangeScheme zconfig.KeyExchangeScheme - EncryptionScheme zconfig.EncryptionScheme + KeyExchangeScheme zcommon.KeyExchangeScheme + EncryptionScheme zcommon.EncryptionScheme ControllerCertHash []byte DeviceCertHash []byte // ErrorAndTime provides SetErrorNow() and ClearError() @@ -139,9 +138,11 @@ func (status CipherBlockStatus) LogKey() string { // api/proto/config/acipherinfo.proto - EncryptionBlock // Always need to keep these two consistent. type EncryptionBlock struct { - DsAPIKey string - DsPassword string - WifiUserName string // If the authentication type is EAP - WifiPassword string - ProtectedUserData string + DsAPIKey string + DsPassword string + WifiUserName string // If the authentication type is EAP + WifiPassword string + CellularNetUsername string + CellularNetPassword string + ProtectedUserData string } diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/conntest.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/conntest.go new file mode 100644 index 0000000000..067aa807ef --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/conntest.go @@ -0,0 +1,115 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package types + +import ( + "time" + + "github.com/sirupsen/logrus" +) + +// TestResults is used to record when some test Failed or Succeeded. +// All zeros timestamps means it was never tested. +type TestResults struct { + LastFailed time.Time + LastSucceeded time.Time + LastError string // Set when LastFailed is updated +} + +// RecordSuccess records a success +// Keeps the LastFailed in place as history +func (trPtr *TestResults) RecordSuccess() { + trPtr.LastSucceeded = time.Now() + trPtr.LastError = "" +} + +// RecordFailure records a failure +// Keeps the LastSucceeded in place as history +func (trPtr *TestResults) RecordFailure(errStr string) { + if errStr == "" { + logrus.Fatal("Missing error string") + } + trPtr.LastFailed = time.Now() + trPtr.LastError = errStr +} + +// HasError returns true if there is an error +// Returns false if it was never tested i.e., both timestamps zero +func (trPtr *TestResults) HasError() bool { + return trPtr.LastFailed.After(trPtr.LastSucceeded) +} + +// Update uses the src to add info to the results +// If src has newer information for the 'other' part we update that as well. +func (trPtr *TestResults) Update(src TestResults) { + if src.HasError() { + trPtr.LastFailed = src.LastFailed + trPtr.LastError = src.LastError + if src.LastSucceeded.After(trPtr.LastSucceeded) { + trPtr.LastSucceeded = src.LastSucceeded + } + } else { + trPtr.LastSucceeded = src.LastSucceeded + trPtr.LastError = "" + if src.LastFailed.After(trPtr.LastFailed) { + trPtr.LastFailed = src.LastFailed + } + } +} + +// Clear test results. +func (trPtr *TestResults) Clear() { + trPtr.LastFailed = time.Time{} + trPtr.LastSucceeded = time.Time{} + trPtr.LastError = "" +} + +// IntfStatusMap - Used to return per-interface test results (success and failures) +// +// ifName is used as the key +type IntfStatusMap struct { + // StatusMap -> Key: ifname, Value: TestResults + StatusMap map[string]TestResults +} + +// NewIntfStatusMap - Create a new instance of IntfStatusMap +func NewIntfStatusMap() *IntfStatusMap { + intfStatusMap := IntfStatusMap{} + intfStatusMap.StatusMap = make(map[string]TestResults) + return &intfStatusMap +} + +// RecordSuccess records a success for the ifName +func (intfMap *IntfStatusMap) RecordSuccess(ifName string) { + tr, ok := intfMap.StatusMap[ifName] + if !ok { + tr = TestResults{} + } + tr.RecordSuccess() + intfMap.StatusMap[ifName] = tr +} + +// RecordFailure records a failure for the ifName +func (intfMap *IntfStatusMap) RecordFailure(ifName string, errStr string) { + tr, ok := intfMap.StatusMap[ifName] + if !ok { + tr = TestResults{} + } + tr.RecordFailure(errStr) + intfMap.StatusMap[ifName] = tr +} + +// SetOrUpdateFromMap - Set all the entries from the given per-interface map +// Entries which are not in the source are not modified +func (intfMap *IntfStatusMap) SetOrUpdateFromMap( + source IntfStatusMap) { + for intf, src := range source.StatusMap { + tr, ok := intfMap.StatusMap[intf] + if !ok { + tr = TestResults{} + } + tr.Update(src) + intfMap.StatusMap[intf] = tr + } +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dns.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dns.go new file mode 100644 index 0000000000..1978a3ae64 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dns.go @@ -0,0 +1,807 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package types + +import ( + "bytes" + "fmt" + "net" + "reflect" + "sort" + "time" + + "github.com/eriknordmark/ipinfo" + "github.com/lf-edge/eve/pkg/pillar/base" + "github.com/lf-edge/eve/pkg/pillar/utils/netutils" +) + +// DeviceNetworkStatus is published to microservices which needs to know about ports and IP addresses +// It is published under the key "global" only +type DeviceNetworkStatus struct { + DPCKey string // For logs/testing + Version DevicePortConfigVersion // From DevicePortConfig + Testing bool // Ignore since it is not yet verified + State DPCState // Details about testing state + CurrentIndex int // For logs + RadioSilence RadioSilence // The actual state of the radio-silence mode + Ports []NetworkPortStatus +} + +type NetworkPortStatus struct { + IfName string + Phylabel string // Physical name set by controller/model + Logicallabel string + Alias string // From SystemAdapter's alias + IsMgmt bool // Used to talk to controller + IsL3Port bool // True if port is applicable to operate on the network layer + Cost uint8 + Dhcp DhcpType + Type NetworkType // IPv4 or IPv6 or Dual stack + Subnet net.IPNet + NtpServer net.IP // This comes from network instance configuration + DomainName string + DNSServers []net.IP // If not set we use Gateway as DNS server + NtpServers []net.IP // This comes from DHCP done on uplink port + AddrInfoList []AddrInfo + Up bool + MacAddr net.HardwareAddr + DefaultRouters []net.IP + MTU uint16 + WirelessCfg WirelessConfig + WirelessStatus WirelessStatus + ProxyConfig + L2LinkConfig + // TestResults provides recording of failure and success + TestResults +} + +type AddrInfo struct { + Addr net.IP + Geo ipinfo.IPInfo + LastGeoTimestamp time.Time +} + +// WirelessStatus : state information for a single wireless device +type WirelessStatus struct { + WType WirelessType + Cellular WwanNetworkStatus + // TODO: Wifi status +} + +// HasIPAndDNS - Check if the given port has a valid unicast IP along with DNS & Gateway. +func (port NetworkPortStatus) HasIPAndDNS() bool { + foundUnicast := false + for _, addr := range port.AddrInfoList { + if !addr.Addr.IsLinkLocalUnicast() { + foundUnicast = true + } + } + if foundUnicast && len(port.DefaultRouters) > 0 && len(port.DNSServers) > 0 { + return true + } + return false +} + +// Key is used for pubsub +func (status DeviceNetworkStatus) Key() string { + return "global" +} + +// LogCreate : +func (status DeviceNetworkStatus) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.DeviceNetworkStatusLogType, "", + nilUUID, status.LogKey()) + if logObject == nil { + return + } + logObject.CloneAndAddField("testing-bool", status.Testing). + AddField("ports-int64", len(status.Ports)). + AddField("state", status.State.String()). + AddField("current-index-int64", status.CurrentIndex). + Noticef("DeviceNetworkStatus create") + for _, p := range status.Ports { + // XXX different logobject for a particular port? + logObject.CloneAndAddField("ifname", p.IfName). + AddField("last-error", p.LastError). + AddField("last-succeeded", p.LastSucceeded). + AddField("last-failed", p.LastFailed). + Noticef("DeviceNetworkStatus port create") + } +} + +// LogModify : +func (status DeviceNetworkStatus) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.DeviceNetworkStatusLogType, "", + nilUUID, status.LogKey()) + + oldStatus, ok := old.(DeviceNetworkStatus) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object interface passed is not of DeviceNetworkStatus type") + } + if oldStatus.Testing != status.Testing || + oldStatus.State != status.State || + oldStatus.CurrentIndex != status.CurrentIndex || + len(oldStatus.Ports) != len(status.Ports) { + + logData := logObject.CloneAndAddField("testing-bool", status.Testing). + AddField("ports-int64", len(status.Ports)). + AddField("state", status.State.String()). + AddField("current-index-int64", status.CurrentIndex). + AddField("old-testing-bool", oldStatus.Testing). + AddField("old-ports-int64", len(oldStatus.Ports)). + AddField("old-state", oldStatus.State.String()). + AddField("old-current-index-int64", oldStatus.CurrentIndex) + + if oldStatus.State == status.State && oldStatus.CurrentIndex == status.CurrentIndex && + len(oldStatus.Ports) == len(status.Ports) { + // if only testing state changed, reduce log level + logData.Function("DeviceNetworkStatus modify") + } else { + logData.Notice("DeviceNetworkStatus modify") + } + } + // XXX which fields to compare/log? + for i, p := range status.Ports { + if len(oldStatus.Ports) <= i { + continue + } + op := oldStatus.Ports[i] + // XXX different logobject for a particular port? + if p.HasError() != op.HasError() || + p.LastFailed != op.LastFailed || + p.LastSucceeded != op.LastSucceeded || + p.LastError != op.LastError { + logData := logObject.CloneAndAddField("ifname", p.IfName). + AddField("last-error", p.LastError). + AddField("last-succeeded", p.LastSucceeded). + AddField("last-failed", p.LastFailed). + AddField("old-last-error", op.LastError). + AddField("old-last-succeeded", op.LastSucceeded). + AddField("old-last-failed", op.LastFailed) + if p.HasError() == op.HasError() && + p.LastFailed == op.LastFailed && + p.LastError == op.LastError && + p.LastSucceeded.After(op.LastFailed) && + op.LastSucceeded.After(op.LastFailed) { + // if we have success again, reduce log level + logData.Function("DeviceNetworkStatus port modify") + } else { + logData.Notice("DeviceNetworkStatus port modify") + } + } + } +} + +// LogDelete : +func (status DeviceNetworkStatus) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.DeviceNetworkStatusLogType, "", + nilUUID, status.LogKey()) + logObject.CloneAndAddField("testing-bool", status.Testing). + AddField("ports-int64", len(status.Ports)). + AddField("state", status.State.String()). + Noticef("DeviceNetworkStatus instance status delete") + for _, p := range status.Ports { + // XXX different logobject for a particular port? + logObject.CloneAndAddField("ifname", p.IfName). + AddField("last-error", p.LastError). + AddField("last-succeeded", p.LastSucceeded). + AddField("last-failed", p.LastFailed). + Noticef("DeviceNetworkStatus port delete") + } + + base.DeleteLogObject(logBase, status.LogKey()) +} + +// LogKey : +func (status DeviceNetworkStatus) LogKey() string { + return string(base.DeviceNetworkStatusLogType) + "-" + status.Key() +} + +// MostlyEqual compares two DeviceNetworkStatus but skips things the test status/results aspects, including State and Testing. +// We compare the Ports in array order. +func (status DeviceNetworkStatus) MostlyEqual(status2 DeviceNetworkStatus) bool { + + if len(status.Ports) != len(status2.Ports) { + return false + } + for i, p1 := range status.Ports { + p2 := status2.Ports[i] + if p1.IfName != p2.IfName || + p1.Phylabel != p2.Phylabel || + p1.Logicallabel != p2.Logicallabel || + p1.Alias != p2.Alias || + p1.IsMgmt != p2.IsMgmt || + p1.Cost != p2.Cost { + return false + } + if p1.Dhcp != p2.Dhcp || + !netutils.EqualIPNets(&p1.Subnet, &p2.Subnet) || + !p1.NtpServer.Equal(p2.NtpServer) || + p1.DomainName != p2.DomainName { + return false + } + if len(p1.DNSServers) != len(p2.DNSServers) { + return false + } + for i := range p1.DNSServers { + if !p1.DNSServers[i].Equal(p2.DNSServers[i]) { + return false + } + } + if len(p1.AddrInfoList) != len(p2.AddrInfoList) { + return false + } + for i := range p1.AddrInfoList { + if !p1.AddrInfoList[i].Addr.Equal(p2.AddrInfoList[i].Addr) { + return false + } + } + if p1.Up != p2.Up || + !bytes.Equal(p1.MacAddr, p2.MacAddr) { + return false + } + if len(p1.DefaultRouters) != len(p2.DefaultRouters) { + return false + } + for i := range p1.DefaultRouters { + if !p1.DefaultRouters[i].Equal(p2.DefaultRouters[i]) { + return false + } + } + + if !reflect.DeepEqual(p1.ProxyConfig, p2.ProxyConfig) || + !reflect.DeepEqual(p1.WirelessStatus, p2.WirelessStatus) { + return false + } + } + return reflect.DeepEqual(status.RadioSilence, status2.RadioSilence) +} + +// MostlyEqualStatus compares two DeviceNetworkStatus but skips things that are +// unimportant like just an increase in the success timestamp, but detects +// when a port changes to/from a failure. +func (status *DeviceNetworkStatus) MostlyEqualStatus(status2 DeviceNetworkStatus) bool { + + if !status.MostlyEqual(status2) { + return false + } + if status.State != status2.State || status.Testing != status2.Testing || + status.CurrentIndex != status2.CurrentIndex { + return false + } + if len(status.Ports) != len(status2.Ports) { + return false + } + for i, p1 := range status.Ports { + p2 := status2.Ports[i] + // Did we change to/from failure? + if p1.HasError() != p2.HasError() { + return false + } + } + return true +} + +// GetPortByIfName - Get Port Status for port with given Ifname +func (status *DeviceNetworkStatus) GetPortByIfName( + ifname string) *NetworkPortStatus { + for i := range status.Ports { + if status.Ports[i].IfName == ifname { + return &status.Ports[i] + } + } + return nil +} + +// GetPortsByLogicallabel - Get Port Status for all ports matching the given label. +func (status *DeviceNetworkStatus) GetPortsByLogicallabel( + label string) (ports []*NetworkPortStatus) { + // Check for shared labels first. + switch label { + case UplinkLabel: + for i := range status.Ports { + if status.Version >= DPCIsMgmt && !status.Ports[i].IsMgmt { + continue + } + ports = append(ports, &status.Ports[i]) + } + return ports + case FreeUplinkLabel: + for i := range status.Ports { + if status.Version >= DPCIsMgmt && !status.Ports[i].IsMgmt { + continue + } + if status.Ports[i].Cost > 0 { + continue + } + ports = append(ports, &status.Ports[i]) + } + return ports + } + // Label is referencing single port. + for i := range status.Ports { + if status.Ports[i].Logicallabel == label { + ports = append(ports, &status.Ports[i]) + return ports + } + } + return nil +} + +// HasErrors - DeviceNetworkStatus has errors on any of it's ports? +func (status DeviceNetworkStatus) HasErrors() bool { + for _, port := range status.Ports { + if port.HasError() { + return true + } + } + return false +} + +// GetPortAddrInfo returns address info for a given interface and its IP address. +func (status DeviceNetworkStatus) GetPortAddrInfo(ifname string, addr net.IP) *AddrInfo { + portStatus := status.GetPortByIfName(ifname) + if portStatus == nil { + return nil + } + for i := range portStatus.AddrInfoList { + if portStatus.AddrInfoList[i].Addr.Equal(addr) { + return &portStatus.AddrInfoList[i] + } + } + return nil +} + +func rotate(arr []string, amount int) []string { + if len(arr) == 0 { + return []string{} + } + amount %= len(arr) + return append(append([]string{}, arr[amount:]...), arr[:amount]...) +} + +// GetMgmtPortsSortedCost returns all management ports sorted by port cost +// rotation causes rotation/round-robin within each cost +func GetMgmtPortsSortedCost(dns DeviceNetworkStatus, rotation int) []string { + return getPortsSortedCostImpl(dns, rotation, + PortCostMax, true, false) +} + +// GetAllPortsSortedCost returns all ports (management and app shared) sorted by port cost. +// Rotation causes rotation/round-robin within each cost. +func GetAllPortsSortedCost(dns DeviceNetworkStatus, rotation int) []string { + return getPortsSortedCostImpl(dns, rotation, + PortCostMax, false, false) +} + +// GetMgmtPortsSortedCostWithoutFailed returns all management ports sorted by +// port cost ignoring ports with failures. +// rotation causes rotation/round-robin within each cost +func GetMgmtPortsSortedCostWithoutFailed(dns DeviceNetworkStatus, rotation int) []string { + return getPortsSortedCostImpl(dns, rotation, + PortCostMax, true, true) +} + +// getPortsSortedCostImpl returns all ports sorted by port cost +// up to and including the maxCost +func getPortsSortedCostImpl(dns DeviceNetworkStatus, rotation int, maxCost uint8, + mgmtOnly, dropFailed bool) []string { + ifnameList := []string{} + costList := getPortCostListImpl(dns, maxCost) + for _, cost := range costList { + ifnameList = append(ifnameList, + getPortsImpl(dns, rotation, true, cost, mgmtOnly, dropFailed)...) + } + return ifnameList +} + +// GetMgmtPortsAny returns all management ports +func GetMgmtPortsAny(dns DeviceNetworkStatus, rotation int) []string { + return getPortsImpl(dns, rotation, false, 0, true, false) +} + +// GetMgmtPortsByCost returns all management ports with a given port cost +func GetMgmtPortsByCost(dns DeviceNetworkStatus, cost uint8) []string { + return getPortsImpl(dns, 0, true, cost, true, false) +} + +// Returns the IfNames. +func getPortsImpl(dns DeviceNetworkStatus, rotation int, + matchCost bool, cost uint8, mgmtOnly, dropFailed bool) []string { + + ifnameList := make([]string, 0, len(dns.Ports)) + for _, us := range dns.Ports { + if matchCost && us.Cost != cost { + continue + } + if mgmtOnly && dns.Version >= DPCIsMgmt && + !us.IsMgmt { + continue + } + if dropFailed && us.HasError() { + continue + } + ifnameList = append(ifnameList, us.IfName) + } + return rotate(ifnameList, rotation) +} + +// GetPortCostList returns the sorted list of port costs +// with cost zero entries first. +func GetPortCostList(dns DeviceNetworkStatus) []uint8 { + + return getPortCostListImpl(dns, PortCostMax) +} + +// getPortCostListImpl returns the sorted port costs up to and including the max +func getPortCostListImpl(dns DeviceNetworkStatus, maxCost uint8) []uint8 { + costList := make([]uint8, 0, len(dns.Ports)) + for _, us := range dns.Ports { + costList = append(costList, us.Cost) + } + if len(costList) == 0 { + return []uint8{} + } + // Need sort -u so separately we remove the duplicates + sort.Slice(costList, + func(i, j int) bool { return costList[i] < costList[j] }) + unique := make([]uint8, 0, len(costList)) + i := 0 + unique = append(unique, costList[0]) + for _, cost := range costList { + if cost != unique[i] && cost <= maxCost { + unique = append(unique, cost) + i++ + } + } + return unique +} + +// CountLocalAddrAnyNoLinkLocal returns the number of local IP addresses for +// all the management ports (for all port costs) excluding link-local addresses +func CountLocalAddrAnyNoLinkLocal(dns DeviceNetworkStatus) int { + + // Count the number of addresses which apply + addrs, _ := getLocalAddrListImpl(dns, "", PortCostMax, + false, 0) + return len(addrs) +} + +// CountLocalAddrAnyNoLinkLocalIf return number of local IP addresses for +// the interface excluding link-local addresses +func CountLocalAddrAnyNoLinkLocalIf(dns DeviceNetworkStatus, + ifname string) (int, error) { + + if ifname == "" { + return 0, fmt.Errorf("ifname not specified") + } + // Count the number of addresses which apply + addrs, err := getLocalAddrListImpl(dns, ifname, + PortCostMax, false, 0) + return len(addrs), err +} + +// CountLocalAddrNoLinkLocalWithCost is like CountLocalAddrAnyNoLinkLocal but +// in addition allows the caller to specify the cost between +// PortCostMin (0) and PortCostMax(255). +// If 0 is specified it only considers cost 0 ports. +// if 255 is specified it considers all the ports. +func CountLocalAddrNoLinkLocalWithCost(dns DeviceNetworkStatus, + maxCost uint8) int { + + // Count the number of addresses which apply + addrs, _ := getLocalAddrListImpl(dns, "", maxCost, + false, 0) + return len(addrs) +} + +// CountLocalIPv4AddrAnyNoLinkLocal is like CountLocalAddrAnyNoLinkLocal but +// only IPv4 addresses are counted +func CountLocalIPv4AddrAnyNoLinkLocal(dns DeviceNetworkStatus) int { + + // Count the number of addresses which apply + addrs, _ := getLocalAddrListImpl(dns, "", PortCostMax, + false, 4) + return len(addrs) +} + +// CountDNSServers returns the number of DNS servers; for ifname if set +func CountDNSServers(dns DeviceNetworkStatus, ifname string) int { + + count := 0 + for _, us := range dns.Ports { + if us.IfName != ifname && ifname != "" { + continue + } + count += len(us.DNSServers) + } + return count +} + +// GetDNSServers returns all, or the ones on one interface if ifname is set +func GetDNSServers(dns DeviceNetworkStatus, ifname string) []net.IP { + + var servers []net.IP + for _, us := range dns.Ports { + if !us.IsMgmt && ifname == "" { + continue + } + if ifname != "" && ifname != us.IfName { + continue + } + servers = append(servers, us.DNSServers...) + } + return servers +} + +// GetNTPServers returns all, or the ones on one interface if ifname is set +func GetNTPServers(dns DeviceNetworkStatus, ifname string) []net.IP { + + var servers []net.IP + for _, us := range dns.Ports { + if ifname != "" && ifname != us.IfName { + continue + } + servers = append(servers, us.NtpServers...) + // Add statically configured NTP server as well, but avoid duplicates. + if us.NtpServer != nil { + var found bool + for _, server := range servers { + if server.Equal(us.NtpServer) { + found = true + break + } + } + if !found { + servers = append(servers, us.NtpServer) + } + } + } + return servers +} + +// CountLocalIPv4AddrAnyNoLinkLocalIf is like CountLocalAddrAnyNoLinkLocalIf but +// only IPv4 addresses are counted +func CountLocalIPv4AddrAnyNoLinkLocalIf(dns DeviceNetworkStatus, + ifname string) (int, error) { + + if ifname == "" { + return 0, fmt.Errorf("ifname not specified") + } + // Count the number of addresses which apply + addrs, err := getLocalAddrListImpl(dns, ifname, + PortCostMax, false, 4) + return len(addrs), err +} + +// GetLocalAddrAnyNoLinkLocal is used to pick one address from: +// - ifname if set. +// - otherwise from all of the management ports +// Excludes link-local addresses. +// The addresses are sorted in cost order thus as the caller starts with +// pickNum zero and increases it will use the ports in cost order. +func GetLocalAddrAnyNoLinkLocal(dns DeviceNetworkStatus, pickNum int, + ifname string) (net.IP, error) { + + includeLinkLocal := false + return getLocalAddrImpl(dns, pickNum, ifname, + PortCostMax, includeLinkLocal, 0) +} + +// GetLocalAddrNoLinkLocalWithCost is like GetLocalAddrNoLinkLocal but +// in addition allows the caller to specify the cost between +// PortCostMin (0) and PortCostMax(255). +// If 0 is specified it only considers local addresses on cost zero ports; +// if 255 is specified it considers all the local addresses. +func GetLocalAddrNoLinkLocalWithCost(dns DeviceNetworkStatus, pickNum int, + ifname string, maxCost uint8) (net.IP, error) { + + includeLinkLocal := false + return getLocalAddrImpl(dns, pickNum, ifname, + maxCost, includeLinkLocal, 0) +} + +// getLocalAddrImpl returns an IP address based on interfaces sorted in +// cost order. If ifname is set, the addresses are from that +// interface. Otherwise from all management interfaces up to and including maxCost. +// af can be set to 0 (any), 4, IPv4), or 6 (IPv6) to select the family. +func getLocalAddrImpl(dns DeviceNetworkStatus, pickNum int, + ifname string, maxCost uint8, includeLinkLocal bool, + af uint) (net.IP, error) { + + addrs, err := getLocalAddrListImpl(dns, ifname, + maxCost, includeLinkLocal, af) + if err != nil { + return net.IP{}, err + } + numAddrs := len(addrs) + if numAddrs == 0 { + return net.IP{}, fmt.Errorf("no addresses") + } + pickNum %= numAddrs + return addrs[pickNum], nil +} + +// getLocalAddrListImpl returns a list IP addresses based on interfaces sorted +// in cost order. If ifname is set, the addresses are from that +// interface. Otherwise from all management interfaces up to and including maxCost +// af can be set to 0 (any), 4, IPv4), or 6 (IPv6) to select a subset. +func getLocalAddrListImpl(dns DeviceNetworkStatus, + ifname string, maxCost uint8, includeLinkLocal bool, + af uint) ([]net.IP, error) { + + var ifnameList []string + var ignoreErrors bool + if ifname == "" { + // Get interfaces in cost order + ifnameList = getPortsSortedCostImpl(dns, 0, + maxCost, true, false) + // If we are looking across all interfaces, then We ignore errors + // since we get them if there are no addresses on a ports + ignoreErrors = true + } else { + us := GetPort(dns, ifname) + if us == nil { + return []net.IP{}, fmt.Errorf("Unknown interface %s", + ifname) + } + if us.Cost > maxCost { + return []net.IP{}, fmt.Errorf("Interface %s cost %d exceeds maxCost %d", + ifname, us.Cost, maxCost) + } + ifnameList = []string{ifname} + } + addrs := []net.IP{} + for _, ifname := range ifnameList { + ifaddrs, err := getLocalAddrIf(dns, ifname, + includeLinkLocal, af) + if !ignoreErrors && err != nil { + return addrs, err + } + addrs = append(addrs, ifaddrs...) + } + return addrs, nil +} + +// Check if an interface name is a port owned by nim +func IsPort(dns DeviceNetworkStatus, ifname string) bool { + for _, us := range dns.Ports { + if us.IfName != ifname { + continue + } + return true + } + return false +} + +// IsL3Port checks if an interface name belongs to a port with SystemAdapter attached. +func IsL3Port(dns DeviceNetworkStatus, ifname string) bool { + for _, us := range dns.Ports { + if us.IfName != ifname { + continue + } + return us.IsL3Port + } + return false +} + +// Check if a physical label or ifname is a management port +func IsMgmtPort(dns DeviceNetworkStatus, ifname string) bool { + for _, us := range dns.Ports { + if us.IfName != ifname { + continue + } + if dns.Version >= DPCIsMgmt && + !us.IsMgmt { + continue + } + return true + } + return false +} + +// GetPortCost returns the port cost +// Returns 0 if the ifname does not exist. +func GetPortCost(dns DeviceNetworkStatus, ifname string) uint8 { + for _, us := range dns.Ports { + if us.IfName != ifname { + continue + } + return us.Cost + } + return 0 +} + +func GetPort(dns DeviceNetworkStatus, ifname string) *NetworkPortStatus { + for _, us := range dns.Ports { + if us.IfName != ifname { + continue + } + if dns.Version < DPCIsMgmt { + us.IsMgmt = true + } + return &us + } + return nil +} + +// Given an address tell me its IfName +func GetMgmtPortFromAddr(dns DeviceNetworkStatus, addr net.IP) string { + for _, us := range dns.Ports { + if dns.Version >= DPCIsMgmt && + !us.IsMgmt { + continue + } + for _, i := range us.AddrInfoList { + if i.Addr.Equal(addr) { + return us.IfName + } + } + } + return "" +} + +// GetLocalAddrList returns all IP addresses on the ifName except +// the link local addresses. +func GetLocalAddrList(dns DeviceNetworkStatus, + ifname string) ([]net.IP, error) { + + if ifname == "" { + return []net.IP{}, fmt.Errorf("ifname not specified") + } + return getLocalAddrIf(dns, ifname, false, 0) +} + +// getLocalAddrIf returns all of the IP addresses for the ifname. +// includeLinkLocal and af can be used to exclude addresses. +func getLocalAddrIf(dns DeviceNetworkStatus, ifname string, + includeLinkLocal bool, af uint) ([]net.IP, error) { + + var addrs []net.IP + for _, us := range dns.Ports { + if us.IfName != ifname { + continue + } + for _, i := range us.AddrInfoList { + if !includeLinkLocal && i.Addr.IsLinkLocalUnicast() { + continue + } + if i.Addr == nil { + continue + } + switch af { + case 0: + // Accept any + case 4: + if i.Addr.To4() == nil { + continue + } + case 6: + if i.Addr.To4() != nil { + continue + } + } + addrs = append(addrs, i.Addr) + } + } + if len(addrs) == 0 { + return []net.IP{}, &IPAddrNotAvailError{IfName: ifname} + } + return addrs, nil +} + +// UpdatePortStatusFromIntfStatusMap - Set TestResults for ports in DeviceNetworkStatus to +// those from intfStatusMap. If a port is not found in intfStatusMap, it means +// the port was not tested, so we retain the original TestResults for the port. +func (status *DeviceNetworkStatus) UpdatePortStatusFromIntfStatusMap( + intfStatusMap IntfStatusMap) { + for indx := range status.Ports { + portPtr := &status.Ports[indx] + tr, ok := intfStatusMap.StatusMap[portPtr.IfName] + if ok { + portPtr.TestResults.Update(tr) + } + // Else - Port not tested hence no change + } +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dpc.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dpc.go new file mode 100644 index 0000000000..174baa02e5 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/dpc.go @@ -0,0 +1,1023 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package types + +import ( + "bytes" + "encoding/binary" + "fmt" + "net" + "os" + "reflect" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/lf-edge/eve/pkg/pillar/base" + "github.com/lf-edge/eve/pkg/pillar/utils/generics" + uuid "github.com/satori/go.uuid" +) + +// DevicePortConfigVersion is used to track major changes in DPC semantics. +type DevicePortConfigVersion uint32 + +// When new fields and/or new semantics are added to DevicePortConfig a new +// version value is added here. +const ( + DPCInitial DevicePortConfigVersion = iota + DPCIsMgmt // Require IsMgmt to be set for management ports +) + +// DPCState tracks the progression a DPC verification. +type DPCState uint8 + +const ( + // DPCStateNone : undefined state. + DPCStateNone DPCState = iota + // DPCStateFail : DPC verification failed. + DPCStateFail + // DPCStateFailWithIPAndDNS : failed to reach controller but has IP/DNS. + DPCStateFailWithIPAndDNS + // DPCStateSuccess : DPC verification succeeded. + DPCStateSuccess + // DPCStateIPDNSWait : waiting for interface IP address(es) and/or DNS server(s). + DPCStateIPDNSWait + // DPCStatePCIWait : waiting for some interface to come from pciback. + DPCStatePCIWait + // DPCStateIntfWait : waiting for some interface to appear in the network stack. + DPCStateIntfWait + // DPCStateRemoteWait : DPC verification failed because controller is down + // or has old certificate. + DPCStateRemoteWait + // DPCStateAsyncWait : waiting for some config operations to finalize which are + // running asynchronously in the background. + DPCStateAsyncWait +) + +// String returns the string name +func (status DPCState) String() string { + switch status { + case DPCStateNone: + return "" + case DPCStateFail: + return "DPC_FAIL" + case DPCStateFailWithIPAndDNS: + return "DPC_FAIL_WITH_IPANDDNS" + case DPCStateSuccess: + return "DPC_SUCCESS" + case DPCStateIPDNSWait: + return "DPC_IPDNS_WAIT" + case DPCStatePCIWait: + return "DPC_PCI_WAIT" + case DPCStateIntfWait: + return "DPC_INTF_WAIT" + case DPCStateRemoteWait: + return "DPC_REMOTE_WAIT" + case DPCStateAsyncWait: + return "DPC_ASYNC_WAIT" + default: + return fmt.Sprintf("Unknown status %d", status) + } +} + +const ( + // PortCostMin is the lowest cost + PortCostMin = uint8(0) + // PortCostMax is the highest cost + PortCostMax = uint8(255) +) + +// DevicePortConfig is a misnomer in that it includes the total test results +// plus the test results for a given port. The complete status with +// IP addresses lives in DeviceNetworkStatus +type DevicePortConfig struct { + Version DevicePortConfigVersion + Key string + TimePriority time.Time // All zero's is fallback lowest priority + State DPCState + ShaFile string // File in which to write ShaValue once DevicePortConfigList published + ShaValue []byte + TestResults + LastIPAndDNS time.Time // Time when we got some IP addresses and DNS + + Ports []NetworkPortConfig +} + +// PubKey is used for pubsub. Key string plus TimePriority +func (config DevicePortConfig) PubKey() string { + return config.Key + "@" + config.TimePriority.UTC().Format(time.RFC3339Nano) +} + +// LogCreate : +func (config DevicePortConfig) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.DevicePortConfigLogType, "", + nilUUID, config.LogKey()) + if logObject == nil { + return + } + logObject.CloneAndAddField("ports-int64", len(config.Ports)). + AddField("last-failed", config.LastFailed). + AddField("last-succeeded", config.LastSucceeded). + AddField("last-error", config.LastError). + AddField("state", config.State.String()). + Noticef("DevicePortConfig create") + for _, p := range config.Ports { + // XXX different logobject for a particular port? + logObject.CloneAndAddField("ifname", p.IfName). + AddField("last-error", p.LastError). + AddField("last-succeeded", p.LastSucceeded). + AddField("last-failed", p.LastFailed). + Noticef("DevicePortConfig port create") + } +} + +// LogModify : +func (config DevicePortConfig) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.DevicePortConfigLogType, "", + nilUUID, config.LogKey()) + + oldConfig, ok := old.(DevicePortConfig) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object interface passed is not of DevicePortConfig type") + } + if len(oldConfig.Ports) != len(config.Ports) || + oldConfig.LastFailed != config.LastFailed || + oldConfig.LastSucceeded != config.LastSucceeded || + oldConfig.LastError != config.LastError || + oldConfig.State != config.State { + + logData := logObject.CloneAndAddField("ports-int64", len(config.Ports)). + AddField("last-failed", config.LastFailed). + AddField("last-succeeded", config.LastSucceeded). + AddField("last-error", config.LastError). + AddField("state", config.State.String()). + AddField("old-ports-int64", len(oldConfig.Ports)). + AddField("old-last-failed", oldConfig.LastFailed). + AddField("old-last-succeeded", oldConfig.LastSucceeded). + AddField("old-last-error", oldConfig.LastError). + AddField("old-state", oldConfig.State.String()) + if len(oldConfig.Ports) == len(config.Ports) && + config.LastFailed == oldConfig.LastFailed && + config.LastError == oldConfig.LastError && + oldConfig.State == config.State && + config.LastSucceeded.After(oldConfig.LastFailed) && + oldConfig.LastSucceeded.After(oldConfig.LastFailed) { + // if we have success again, reduce log level + logData.Function("DevicePortConfig port modify") + } else { + logData.Notice("DevicePortConfig port modify") + } + } + // XXX which fields to compare/log? + for i, p := range config.Ports { + if len(oldConfig.Ports) <= i { + continue + } + op := oldConfig.Ports[i] + // XXX different logobject for a particular port? + if p.HasError() != op.HasError() || + p.LastFailed != op.LastFailed || + p.LastSucceeded != op.LastSucceeded || + p.LastError != op.LastError { + logData := logObject.CloneAndAddField("ifname", p.IfName). + AddField("last-error", p.LastError). + AddField("last-succeeded", p.LastSucceeded). + AddField("last-failed", p.LastFailed). + AddField("old-last-error", op.LastError). + AddField("old-last-succeeded", op.LastSucceeded). + AddField("old-last-failed", op.LastFailed) + if p.HasError() == op.HasError() && + p.LastFailed == op.LastFailed && + p.LastError == op.LastError && + p.LastSucceeded.After(op.LastFailed) && + op.LastSucceeded.After(op.LastFailed) { + // if we have success again, reduce log level + logData.Function("DevicePortConfig port modify") + } else { + logData.Notice("DevicePortConfig port modify") + } + } + } +} + +// LogDelete : +func (config DevicePortConfig) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.DevicePortConfigLogType, "", + nilUUID, config.LogKey()) + logObject.CloneAndAddField("ports-int64", len(config.Ports)). + AddField("last-failed", config.LastFailed). + AddField("last-succeeded", config.LastSucceeded). + AddField("last-error", config.LastError). + AddField("state", config.State.String()). + Noticef("DevicePortConfig delete") + for _, p := range config.Ports { + // XXX different logobject for a particular port? + logObject.CloneAndAddField("ifname", p.IfName). + AddField("last-error", p.LastError). + AddField("last-succeeded", p.LastSucceeded). + AddField("last-failed", p.LastFailed). + Noticef("DevicePortConfig port delete") + } + + base.DeleteLogObject(logBase, config.LogKey()) +} + +// LogKey : +func (config DevicePortConfig) LogKey() string { + return string(base.DevicePortConfigLogType) + "-" + config.PubKey() +} + +// LookupPortByIfName returns port configuration for the given interface. +func (config *DevicePortConfig) LookupPortByIfName(ifName string) *NetworkPortConfig { + if config != nil { + for _, port := range config.Ports { + if port.IfName == ifName { + return &port + } + } + } + return nil +} + +// LookupPortByLogicallabel returns port configuration referenced by the logical label. +func (config *DevicePortConfig) LookupPortByLogicallabel( + label string) *NetworkPortConfig { + for _, port := range config.Ports { + if port.Logicallabel == label { + return &port + } + } + return nil +} + +// GetPortByIfName - DevicePortConfig method to get config pointer +func (config *DevicePortConfig) GetPortByIfName( + ifname string) *NetworkPortConfig { + for indx := range config.Ports { + portPtr := &config.Ports[indx] + if ifname == portPtr.IfName { + return portPtr + } + } + return nil +} + +// RecordPortSuccess - Record for given ifname in PortConfig +func (config *DevicePortConfig) RecordPortSuccess(ifname string) { + portPtr := config.GetPortByIfName(ifname) + if portPtr != nil { + portPtr.RecordSuccess() + } +} + +// RecordPortFailure - Record for given ifname in PortConfig +func (config *DevicePortConfig) RecordPortFailure(ifname string, errStr string) { + portPtr := config.GetPortByIfName(ifname) + if portPtr != nil { + portPtr.RecordFailure(errStr) + } +} + +// DoSanitize - +func (config *DevicePortConfig) DoSanitize(log *base.LogObject, + sanitizeTimePriority bool, sanitizeKey bool, key string, + sanitizeName, sanitizeL3Port bool) { + + if sanitizeTimePriority { + zeroTime := time.Time{} + if config.TimePriority == zeroTime { + // A json override file should really contain a + // timepriority field so we can determine whether + // it or the information received from the controller + // is more current. + // If we can stat the file we use 1980, otherwise + // we use 1970; using the modify time of the file + // is too unpredictable. + _, err1 := os.Stat(fmt.Sprintf("%s/DevicePortConfig/%s.json", + TmpDirname, key)) + _, err2 := os.Stat(fmt.Sprintf("%s/DevicePortConfig/%s.json", + IdentityDirname, key)) + if err1 == nil || err2 == nil { + config.TimePriority = time.Date(1980, + time.January, 1, 0, 0, 0, 0, time.UTC) + } else { + config.TimePriority = time.Date(1970, + time.January, 1, 0, 0, 0, 0, time.UTC) + } + log.Warnf("DoSanitize: Forcing TimePriority for %s to %v", + key, config.TimePriority) + } + } + if sanitizeKey { + if config.Key == "" { + config.Key = key + log.Noticef("DoSanitize: Forcing Key for %s TS %v\n", + key, config.TimePriority) + } + } + if sanitizeName { + // In case Phylabel isn't set we make it match IfName. Ditto for Logicallabel + // XXX still needed? + for i := range config.Ports { + port := &config.Ports[i] + if port.Phylabel == "" { + port.Phylabel = port.IfName + log.Functionf("XXX DoSanitize: Forcing Phylabel for %s ifname %s\n", + key, port.IfName) + } + if port.Logicallabel == "" { + port.Logicallabel = port.IfName + log.Functionf("XXX DoSanitize: Forcing Logicallabel for %s ifname %s\n", + key, port.IfName) + } + } + } + if sanitizeL3Port { + // IsL3Port flag was introduced to NetworkPortConfig in 7.3.0 + // It is used to differentiate between L3 ports (with IP/DNS config) + // and intermediate L2-only ports (bond slaves, VLAN parents, etc.). + // Before 7.3.0, EVE didn't support L2-only adapters and all uplink ports + // were L3 endpoints. + // However, even with VLANs and bonds there has to be at least one L3 + // port (L2 adapters are only intermediates with L3 endpoint(s) at the top). + // This means that to support upgrade from older EVE versions, + // we can simply check if there is at least one L3 port, and if not, it means + // that we are dealing with an older persisted/override DPC, where all + // ports should be marked as L3. + var hasL3Port bool + for _, port := range config.Ports { + hasL3Port = hasL3Port || port.IsL3Port + } + if !hasL3Port { + for i := range config.Ports { + config.Ports[i].IsL3Port = true + } + } + } +} + +// CountMgmtPorts returns the number of management ports +// Exclude any broken ones with Dhcp = DhcpTypeNone +func (config *DevicePortConfig) CountMgmtPorts() int { + count := 0 + for _, port := range config.Ports { + if port.IsMgmt && port.Dhcp != DhcpTypeNone { + count++ + } + } + return count +} + +// MostlyEqual compares two DevicePortConfig but skips things that are +// more of status such as the timestamps and the TestResults +// XXX Compare Version or not? +// We compare the Ports in array order. +func (config *DevicePortConfig) MostlyEqual(config2 *DevicePortConfig) bool { + + if config.Key != config2.Key { + return false + } + if len(config.Ports) != len(config2.Ports) { + return false + } + for i, p1 := range config.Ports { + p2 := config2.Ports[i] + if p1.IfName != p2.IfName || + p1.PCIAddr != p2.PCIAddr || + p1.USBAddr != p2.USBAddr || + p1.Phylabel != p2.Phylabel || + p1.Logicallabel != p2.Logicallabel || + p1.Alias != p2.Alias || + p1.IsMgmt != p2.IsMgmt || + p1.Cost != p2.Cost { + return false + } + if !reflect.DeepEqual(p1.DhcpConfig, p2.DhcpConfig) || + !reflect.DeepEqual(p1.ProxyConfig, p2.ProxyConfig) || + !reflect.DeepEqual(p1.WirelessCfg, p2.WirelessCfg) { + return false + } + } + return true +} + +// IsDPCTestable - Return false if recent failure (less than "minTimeSinceFailure") +// Also returns false if it isn't usable +func (config DevicePortConfig) IsDPCTestable(minTimeSinceFailure time.Duration) bool { + if !config.IsDPCUsable() { + return false + } + if config.LastFailed.IsZero() { + return true + } + if config.LastSucceeded.After(config.LastFailed) { + return true + } + if config.LastFailed.After(time.Now()) { + // Clocks are not in sync - most likely they are still around + // the start of the epoch. + // Network is likely needed to synchronize the clocks using NTP, + // and we should attempt to establish network connectivity using + // any DPC available. + return true + } + return time.Since(config.LastFailed) >= minTimeSinceFailure +} + +// IsDPCUntested - returns true if this is something we might want to test now. +// Checks if it is Usable since there is no point in testing unusable things. +func (config DevicePortConfig) IsDPCUntested() bool { + if config.LastFailed.IsZero() && config.LastSucceeded.IsZero() && + config.IsDPCUsable() { + return true + } + return false +} + +// IsDPCUsable - checks whether something is invalid; no management IP +// addresses means it isn't usable hence we return false if none. +func (config DevicePortConfig) IsDPCUsable() bool { + mgmtCount := config.CountMgmtPorts() + return mgmtCount > 0 +} + +// WasDPCWorking - Check if the last results for the DPC was Success +func (config DevicePortConfig) WasDPCWorking() bool { + + if config.LastSucceeded.IsZero() { + return false + } + if config.LastSucceeded.After(config.LastFailed) { + return true + } + return false +} + +// UpdatePortStatusFromIntfStatusMap - Set TestResults for ports in DevicePortConfig to +// those from intfStatusMap. If a port is not found in intfStatusMap, it means +// the port was not tested, so we retain the original TestResults for the port. +func (config *DevicePortConfig) UpdatePortStatusFromIntfStatusMap( + intfStatusMap IntfStatusMap) { + for indx := range config.Ports { + portPtr := &config.Ports[indx] + tr, ok := intfStatusMap.StatusMap[portPtr.IfName] + if ok { + portPtr.TestResults.Update(tr) + } + // Else - Port not tested hence no change + } +} + +// IsAnyPortInPciBack +// +// Checks if any of the Ports are part of IO bundles which are in PCIback. +// If true, it also returns the ifName ( NOT bundle name ) +// Also returns whether it is currently used by an application by +// returning a UUID. If the UUID is zero it is in PCIback but available. +// Use filterUnassigned to filter out unassigned ports. +func (config *DevicePortConfig) IsAnyPortInPciBack( + log *base.LogObject, aa *AssignableAdapters, filterUnassigned bool) (bool, string, uuid.UUID) { + if aa == nil { + log.Functionf("IsAnyPortInPciBack: nil aa") + return false, "", uuid.UUID{} + } + log.Functionf("IsAnyPortInPciBack: aa init %t, %d bundles, %d ports", + aa.Initialized, len(aa.IoBundleList), len(config.Ports)) + for _, port := range config.Ports { + ioBundle := aa.LookupIoBundleIfName(port.IfName) + if ioBundle == nil { + // It is not guaranteed that all Ports are part of Assignable Adapters + // If not found, the adapter is not capable of being assigned at + // PCI level. So it cannot be in PCI back. + log.Functionf("IsAnyPortInPciBack: ifname %s not found", + port.IfName) + continue + } + if ioBundle.IsPCIBack && (!filterUnassigned || ioBundle.UsedByUUID != nilUUID) { + return true, port.IfName, ioBundle.UsedByUUID + } + } + return false, "", uuid.UUID{} +} + +// NetworkPortConfig has the configuration and some status like TestResults +// for one IfName. +// XXX odd to have ParseErrors and/or TestResults here but we don't have +// a corresponding Status struct. +// Note that if fields are added the MostlyEqual function needs to be updated. +type NetworkPortConfig struct { + IfName string + USBAddr string + PCIAddr string + Phylabel string // Physical name set by controller/model + Logicallabel string // SystemAdapter's name which is logical label in phyio + Alias string // From SystemAdapter's alias + // NetworkUUID - UUID of the Network Object configured for the port. + NetworkUUID uuid.UUID + IsMgmt bool // Used to talk to controller + IsL3Port bool // True if port is applicable to operate on the network layer + Cost uint8 // Zero is free + DhcpConfig + ProxyConfig + L2LinkConfig + WirelessCfg WirelessConfig + // TestResults - Errors from parsing plus success/failure from testing + TestResults +} + +// DhcpType decides how EVE should obtain IP address for a given network port. +type DhcpType uint8 + +const ( + // DhcpTypeNOOP : DHCP type is undefined. + DhcpTypeNOOP DhcpType = iota + // DhcpTypeStatic : static IP config. + DhcpTypeStatic + // DhcpTypeNone : DHCP passthrough for switch NI + // (between app VIF and external DHCP server). + DhcpTypeNone + // DhcpTypeDeprecated : defined here just to match deprecated value in EVE API. + DhcpTypeDeprecated + // DhcpTypeClient : run DHCP client to obtain IP address. + DhcpTypeClient +) + +// NetworkType decided IP version(s) that EVE should use for a given network port. +type NetworkType uint8 + +const ( + // NetworkTypeNOOP : network type is undefined. + NetworkTypeNOOP NetworkType = 0 + // NetworkTypeIPv4 : IPv4 addresses. + NetworkTypeIPv4 NetworkType = 4 + // NetworkTypeIPV6 : IPv6 addresses. + NetworkTypeIPV6 NetworkType = 6 + + // EVE has been running with Dual stack DHCP behavior with both IPv4 & IPv6 specific networks. + // There can be users who are currently benefiting from this behavior. + // It makes sense to introduce two new types IPv4_ONLY & IPv6_ONLY and allow + // the same family selection from UI for the use cases where only one of the IP families + // is required on management/app-shared adapters. + + // NetworkTypeIpv4Only : IPv4 addresses only + NetworkTypeIpv4Only NetworkType = 5 + // NetworkTypeIpv6Only : IPv6 addresses only + NetworkTypeIpv6Only NetworkType = 7 + // NetworkTypeDualStack : Run with dual stack + NetworkTypeDualStack NetworkType = 8 +) + +// DhcpConfig : DHCP configuration for network port. +type DhcpConfig struct { + Dhcp DhcpType // If DhcpTypeStatic use below; if DhcpTypeNone do nothing + AddrSubnet string // In CIDR e.g., 192.168.1.44/24 + Gateway net.IP + DomainName string + NTPServer net.IP + DNSServers []net.IP // If not set we use Gateway as DNS server + Type NetworkType // IPv4 or IPv6 or Dual stack +} + +// NetworkProxyType is used to differentiate proxies for different network protocols. +type NetworkProxyType uint8 + +// Values if these definitions should match the values +// given to the types in zapi.ProxyProto +const ( + NetworkProxyTypeHTTP NetworkProxyType = iota + NetworkProxyTypeHTTPS + NetworkProxyTypeSOCKS + NetworkProxyTypeFTP + NetworkProxyTypeNOPROXY + NetworkProxyTypeLAST = 255 +) + +// ProxyEntry is used to store address of a single network proxy. +type ProxyEntry struct { + Type NetworkProxyType `json:"type"` + Server string `json:"server"` + Port uint32 `json:"port"` +} + +// ProxyConfig : proxy configuration for a network port. +type ProxyConfig struct { + Proxies []ProxyEntry + Exceptions string + Pacfile string + // If Enable is set we use WPAD. If the URL is not set we try + // the various DNS suffixes until we can download a wpad.dat file + NetworkProxyEnable bool // Enable WPAD + NetworkProxyURL string // Complete URL i.e., with /wpad.dat + WpadURL string // The URL determined from DNS + // List of certs which will be added to TLS trust + ProxyCertPEM [][]byte `json:"pubsub-large-ProxyCertPEM"` //nolint:tagliatelle +} + +// WifiKeySchemeType - types of key management +type WifiKeySchemeType uint8 + +// Key Scheme type +const ( + KeySchemeNone WifiKeySchemeType = iota // enum for key scheme + KeySchemeWpaPsk + KeySchemeWpaEap + KeySchemeOther +) + +// WirelessType - types of wireless media +type WirelessType uint8 + +// enum wireless type +const ( + WirelessTypeNone WirelessType = iota // enum for wireless type + WirelessTypeCellular + WirelessTypeWifi +) + +// WirelessConfig - wireless structure +type WirelessConfig struct { + // WType : Wireless Type, either Cellular or WiFi. + WType WirelessType + // CellularV2 : configuration for Cellular connectivity. + // This is version 2 of the cellular APIs. With the introduction of support + // for multiple modems and multiple SIMs, the previously used CellConfig + // structure was no longer suitable for storing all the new config attributes. + CellularV2 CellNetPortConfig + // Wifi : configuration for WiFi connectivity. + Wifi []WifiConfig + // Cellular : old and now deprecated structure for the cellular connectivity + // configuration (aka version 1). + // It is kept here only for backward-compatibility, i.e. to support upgrades from + // EVE versions which still use this structure. + Cellular []DeprecatedCellConfig +} + +// WifiConfig - Wifi structure +type WifiConfig struct { + SSID string // wifi SSID + KeyScheme WifiKeySchemeType // such as WPA-PSK, WPA-EAP + + // XXX: to be deprecated, use CipherBlockStatus instead + Identity string // identity or username for WPA-EAP + + // XXX: to be deprecated, use CipherBlockStatus instead + Password string // string of pass phrase or password hash + Priority int32 + + // CipherBlockStatus, for encrypted credentials + CipherBlockStatus +} + +// DeprecatedCellConfig : old and now deprecated structure for storing cellular +// network port config. It is preserved only to support upgrades from older EVE +// versions where this is still being used (under the original struct name "CellConfig") +type DeprecatedCellConfig struct { + APN string + ProbeAddr string + DisableProbe bool + LocationTracking bool +} + +// CellNetPortConfig - configuration for cellular network port (part of DPC). +type CellNetPortConfig struct { + // Parameters to apply for connecting to cellular networks. + // Configured separately for every SIM card inserted into the modem. + AccessPoints []CellularAccessPoint + // Probe used to detect broken connection. + Probe WwanProbe + // Enable to get location info from the GNSS receiver of the cellular modem. + LocationTracking bool +} + +// CellularAccessPoint contains config parameters for connecting to a cellular network. +type CellularAccessPoint struct { + // SIM card slot to which this configuration applies. + // 0 - unspecified (apply to currently activated or the only available) + // 1 - config for SIM card in the first slot + // 2 - config for SIM card in the second slot + // etc. + SIMSlot uint8 + // If true, then this configuration is currently activated. + Activated bool + // Access Point Network + APN string + // Authentication protocol used by the network. + AuthProtocol WwanAuthProtocol + // EncryptedCredentials : encrypted username and password. + EncryptedCredentials CipherBlockStatus + // The set of cellular network operators that modem should preferably try to register + // and connect into. + // Network operator should be referenced by PLMN (Public Land Mobile Network) code. + PreferredPLMNs []string + // The list of preferred Radio Access Technologies (RATs) to use for connecting + // to the network. + PreferredRATs []WwanRAT + // If true, then modem will avoid connecting to networks with roaming. + ForbidRoaming bool +} + +// Equal compares two instances of CellularAccessPoint for equality. +func (ap CellularAccessPoint) Equal(ap2 CellularAccessPoint) bool { + if ap.SIMSlot != ap2.SIMSlot || + ap.Activated != ap2.Activated || + ap.APN != ap2.APN { + return false + } + if ap.AuthProtocol != ap2.AuthProtocol || + // TODO (how to properly detect changed username/password ?) + !reflect.DeepEqual(ap.EncryptedCredentials, ap2.EncryptedCredentials) { + return false + } + if !generics.EqualLists(ap.PreferredPLMNs, ap2.PreferredPLMNs) || + !generics.EqualLists(ap.PreferredRATs, ap2.PreferredRATs) || + ap.ForbidRoaming != ap2.ForbidRoaming { + return false + } + return true +} + +// L2LinkType - supported types of an L2 link +type L2LinkType uint8 + +const ( + // L2LinkTypeNone : not an L2 link (used for physical network adapters). + L2LinkTypeNone L2LinkType = iota + // L2LinkTypeVLAN : VLAN sub-interface + L2LinkTypeVLAN + // L2LinkTypeBond : Bond interface + L2LinkTypeBond +) + +// L2LinkConfig - contains either VLAN or Bond interface configuration, +// depending on the L2Type. +type L2LinkConfig struct { + L2Type L2LinkType + VLAN VLANConfig + Bond BondConfig +} + +// VLANConfig - VLAN sub-interface configuration. +type VLANConfig struct { + // Logical name of the parent port. + ParentPort string + // VLAN ID. + ID uint16 +} + +// BondMode specifies the policy indicating how bonding slaves are used +// during network transmissions. +type BondMode uint8 + +const ( + // BondModeUnspecified : default is Round-Robin + BondModeUnspecified BondMode = iota + // BondModeBalanceRR : Round-Robin + BondModeBalanceRR + // BondModeActiveBackup : Active/Backup + BondModeActiveBackup + // BondModeBalanceXOR : select slave for a packet using a hash function + BondModeBalanceXOR + // BondModeBroadcast : send every packet on all slaves + BondModeBroadcast + // BondMode802Dot3AD : IEEE 802.3ad Dynamic link aggregation + BondMode802Dot3AD + // BondModeBalanceTLB : Adaptive transmit load balancing + BondModeBalanceTLB + // BondModeBalanceALB : Adaptive load balancing + BondModeBalanceALB +) + +// LacpRate specifies the rate in which EVE will ask LACP link partners +// to transmit LACPDU packets in 802.3ad mode. +type LacpRate uint8 + +const ( + // LacpRateUnspecified : default is Slow. + LacpRateUnspecified LacpRate = iota + // LacpRateSlow : Request partner to transmit LACPDUs every 30 seconds. + LacpRateSlow + // LacpRateFast : Request partner to transmit LACPDUs every 1 second. + LacpRateFast +) + +// BondConfig - Bond (LAG) interface configuration. +type BondConfig struct { + // Logical names of PhysicalIO network adapters aggregated by this bond. + AggregatedPorts []string + + // Bonding policy. + Mode BondMode + + // LACPDU packets transmission rate. + // Applicable for BondMode802Dot3AD only. + LacpRate LacpRate + + // Link monitoring is either disabled or one of the monitors + // is enabled, never both at the same time. + MIIMonitor BondMIIMonitor + ARPMonitor BondArpMonitor +} + +// BondMIIMonitor : MII link monitoring parameters (see devmodel.proto for description). +type BondMIIMonitor struct { + Enabled bool + Interval uint32 + UpDelay uint32 + DownDelay uint32 +} + +// BondArpMonitor : ARP-based link monitoring parameters (see devmodel.proto for description). +type BondArpMonitor struct { + Enabled bool + Interval uint32 + IPTargets []net.IP +} + +// DevicePortConfigList is an array in timestamp aka priority order; +// first one is the most desired config to use +// It includes test results hence is misnamed - should have a separate status +// This is only published under the key "global" +type DevicePortConfigList struct { + CurrentIndex int + PortConfigList []DevicePortConfig +} + +// MostlyEqual - Equal if everything else other than timestamps is equal. +func (config DevicePortConfigList) MostlyEqual(config2 DevicePortConfigList) bool { + + if len(config.PortConfigList) != len(config2.PortConfigList) { + return false + } + if config.CurrentIndex != config2.CurrentIndex { + return false + } + for i, c1 := range config.PortConfigList { + c2 := config2.PortConfigList[i] + + if !c1.MostlyEqual(&c2) || c1.State != c2.State { + return false + } + } + return true +} + +// PubKey is used for pubsub +func (config DevicePortConfigList) PubKey() string { + return "global" +} + +// LogCreate : +func (config DevicePortConfigList) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.DevicePortConfigListLogType, "", + nilUUID, config.LogKey()) + if logObject == nil { + return + } + logObject.CloneAndAddField("current-index-int64", config.CurrentIndex). + AddField("num-portconfig-int64", len(config.PortConfigList)). + Noticef("DevicePortConfigList create") +} + +// LogModify : +func (config DevicePortConfigList) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.DevicePortConfigListLogType, "", + nilUUID, config.LogKey()) + + oldConfig, ok := old.(DevicePortConfigList) + if !ok { + logObject.Clone().Errorf("LogModify: Old object interface passed is not of DevicePortConfigList type") + return + } + if oldConfig.CurrentIndex != config.CurrentIndex || + len(oldConfig.PortConfigList) != len(config.PortConfigList) { + + logObject.CloneAndAddField("current-index-int64", config.CurrentIndex). + AddField("num-portconfig-int64", len(config.PortConfigList)). + AddField("old-current-index-int64", oldConfig.CurrentIndex). + AddField("old-num-portconfig-int64", len(oldConfig.PortConfigList)). + Noticef("DevicePortConfigList modify") + } else { + // Log at Trace level - most likely just a timestamp change + logObject.CloneAndAddField("diff", cmp.Diff(oldConfig, config)). + Tracef("DevicePortConfigList modify other change") + } + +} + +// LogDelete : +func (config DevicePortConfigList) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.DevicePortConfigListLogType, "", + nilUUID, config.LogKey()) + logObject.CloneAndAddField("current-index-int64", config.CurrentIndex). + AddField("num-portconfig-int64", len(config.PortConfigList)). + Noticef("DevicePortConfigList delete") + + base.DeleteLogObject(logBase, config.LogKey()) +} + +// LogKey : +func (config DevicePortConfigList) LogKey() string { + return string(base.DevicePortConfigListLogType) + "-" + config.PubKey() +} + +// NetworkXObjectConfig is extracted from the protobuf NetworkConfig. +// Used by zedagent as an intermediate structure when parsing network config +// from protobuf API into DevicePortConfig. +// XXX replace by inline once we have device model +type NetworkXObjectConfig struct { + UUID uuid.UUID + Type NetworkType + Dhcp DhcpType // If DhcpTypeStatic or DhcpTypeClient use below + Subnet net.IPNet + Gateway net.IP + DomainName string + NTPServer net.IP + DNSServers []net.IP // If not set we use Gateway as DNS server + DhcpRange IPRange + DNSNameToIPList []DNSNameToIP // Used for DNS and ACL ipset + Proxy *ProxyConfig + WirelessCfg WirelessConfig + // Any errors from the parser + // ErrorAndTime provides SetErrorNow() and ClearError() + ErrorAndTime +} + +// DNSNameToIP : static mapping between hostname and IP addresses. +type DNSNameToIP struct { + HostName string + IPs []net.IP +} + +// IPRange : range of consecutive IP addresses. +type IPRange struct { + Start net.IP + End net.IP +} + +// Contains used to evaluate whether an IP address +// is within the range +func (ipRange IPRange) Contains(ipAddr net.IP) bool { + if bytes.Compare(ipAddr, ipRange.Start) >= 0 && + bytes.Compare(ipAddr, ipRange.End) <= 0 { + return true + } + return false +} + +// Size returns addresses count inside IPRange +func (ipRange IPRange) Size() uint32 { + //TBD:XXX, IPv6 handling + ip1v4 := ipRange.Start.To4() + ip2v4 := ipRange.End.To4() + if ip1v4 == nil || ip2v4 == nil { + return 0 + } + ip1Int := binary.BigEndian.Uint32(ip1v4) + ip2Int := binary.BigEndian.Uint32(ip2v4) + if ip1Int > ip2Int { + return ip1Int - ip2Int + } + return ip2Int - ip1Int +} + +func (config NetworkXObjectConfig) Key() string { + return config.UUID.String() +} + +// LogCreate : +func (config NetworkXObjectConfig) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.NetworkXObjectConfigLogType, "", + config.UUID, config.LogKey()) + if logObject == nil { + return + } + logObject.Noticef("NetworkXObject config create") +} + +// LogModify : +func (config NetworkXObjectConfig) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.NetworkXObjectConfigLogType, "", + config.UUID, config.LogKey()) + + oldConfig, ok := old.(NetworkXObjectConfig) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object interface passed is not of NetworkXObjectConfig type") + } + // XXX remove? + logObject.CloneAndAddField("diff", cmp.Diff(oldConfig, config)). + Noticef("NetworkXObject config modify") +} + +// LogDelete : +func (config NetworkXObjectConfig) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.NetworkXObjectConfigLogType, "", + config.UUID, config.LogKey()) + logObject.Noticef("NetworkXObject config delete") + + base.DeleteLogObject(logBase, config.LogKey()) +} + +// LogKey : +func (config NetworkXObjectConfig) LogKey() string { + return string(base.NetworkXObjectConfigLogType) + "-" + config.Key() +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/eidtypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/eidtypes.go deleted file mode 100644 index 057ca7a81e..0000000000 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/eidtypes.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) 2017 Zededa, Inc. -// SPDX-License-Identifier: Apache-2.0 - -// Type definitions for interface from Zedmanager to IdentityMgr for EID -// allocation and status - -package types - -import ( - "fmt" - "net" - "time" -) - -// Parameters which determine whether and how the EID is allocated -type EIDAllocation struct { - Allocate bool - ExportPrivate bool // Provide private key to ZedManager - AllocationPrefix []byte // Normally and default 0xfd - AllocationPrefixLen int // Normally and default 8 -} - -// Indexed by UUID plus IID; version not included in index -// Implies a given App Instance can not have multiple interfaces to the same IID. -type EIDConfig struct { - UUIDandVersion UUIDandVersion - DisplayName string - EIDConfigDetails -} - -type EIDConfigDetails struct { - IID uint32 - EIDAllocation - // When Allocate is false the ZedCloud provides these parameters. - // No work for IdentityMgr in that case. - // When Allocate is true these fields are not set in the config - EID net.IP - LispSignature string - PemCert []byte - PemPrivateKey []byte -} - -func (config EIDConfig) Key() string { - return fmt.Sprintf("%s:%d", - config.UUIDandVersion.UUID.String(), config.IID) -} - -// Indexed by UUID plus IID. Version is not part of the index. -type EIDStatus struct { - UUIDandVersion UUIDandVersion - DisplayName string - EIDStatusDetails -} - -type EIDStatusDetails struct { - IID uint32 - EIDAllocation - PendingAdd bool - PendingModify bool - PendingDelete bool - EID net.IP - LispSignature string - PemCert []byte - PemPublicKey []byte - PemPrivateKey []byte // If ExportPrivate. XXX or in separate type? - CreateTime time.Time // When EID was created -} - -func EidKey(uuidAndVers UUIDandVersion, iid uint32) string { - return fmt.Sprintf("%s:%d", uuidAndVers.UUID.String(), iid) -} - -func (status EIDStatus) Key() string { - return fmt.Sprintf("%s:%d", - status.UUIDandVersion.UUID.String(), status.IID) -} - -func (status EIDStatus) Pending() bool { - return status.PendingAdd || status.PendingModify || status.PendingDelete -} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/errors.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/errors.go new file mode 100644 index 0000000000..5d8342aeb3 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/errors.go @@ -0,0 +1,28 @@ +// Copyright (c) 2017-2021 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package types + +import "fmt" + +// IPAddrNotAvailError is returned when there is no (suitable) IP address +// assigned to a given interface. +type IPAddrNotAvailError struct { + IfName string +} + +// Error message. +func (e *IPAddrNotAvailError) Error() string { + return fmt.Sprintf("interface %s: no suitable IP address available", e.IfName) +} + +// DNSNotAvailError is returned when there is no DNS server configured +// for a given interface. +type DNSNotAvailError struct { + IfName string +} + +// Error message. +func (e *DNSNotAvailError) Error() string { + return fmt.Sprintf("interface %s: no DNS server available", e.IfName) +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/global.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/global.go index 04a94c937e..945abc7ab1 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/global.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/global.go @@ -166,8 +166,6 @@ const ( FallbackIfCloudGoneTime GlobalSettingKey = "timer.update.fallback.no.network" // MintimeUpdateSuccess global setting key MintimeUpdateSuccess GlobalSettingKey = "timer.test.baseimage.update" - // StaleConfigTime global setting key - StaleConfigTime GlobalSettingKey = "timer.use.config.checkpoint" // VdiskGCTime global setting key VdiskGCTime GlobalSettingKey = "timer.gc.vdisk" // DeferContentDelete global setting key @@ -239,6 +237,8 @@ const ( AllowLogFastupload GlobalSettingKey = "newlog.allow.fastupload" // EnableARPSnoopOnNI global setting key EnableARPSnoop GlobalSettingKey = "network.switch.enable.arpsnoop" + // WwanQueryVisibleProviders : periodically query visible cellular service providers + WwanQueryVisibleProviders GlobalSettingKey = "wwan.query.visible.providers" // TriState Items // NetworkFallbackAnyEth global setting key @@ -263,9 +263,6 @@ const ( // ProcessCloudInitMultiPart to help VMs which do not handle mime multi-part themselves ProcessCloudInitMultiPart GlobalSettingKey = "process.cloud-init.multipart" - // XXX temp for testing edge-view - EdgeViewToken GlobalSettingKey = "edgeview.authen.jwt" - // NetDumpEnable : enable publishing of network diagnostics (as tgz archives to /persist/netdump). NetDumpEnable GlobalSettingKey = "netdump.enable" // NetDumpTopicPreOnboardInterval : how frequently (in seconds) can be netdumps @@ -815,7 +812,6 @@ func NewConfigItemSpecMap() ConfigItemSpecMap { configItemSpecMap.AddIntItem(ResetIfCloudGoneTime, 7*24*3600, 120, 0xFFFFFFFF) configItemSpecMap.AddIntItem(FallbackIfCloudGoneTime, 300, 60, 0xFFFFFFFF) configItemSpecMap.AddIntItem(MintimeUpdateSuccess, 600, 30, HourInSec) - configItemSpecMap.AddIntItem(StaleConfigTime, 7*24*3600, 0, 0xFFFFFFFF) configItemSpecMap.AddIntItem(VdiskGCTime, 3600, 60, 0xFFFFFFFF) configItemSpecMap.AddIntItem(DeferContentDelete, 0, 0, 24*3600) configItemSpecMap.AddIntItem(DownloadRetryTime, 600, 60, 0xFFFFFFFF) @@ -859,6 +855,7 @@ func NewConfigItemSpecMap() ConfigItemSpecMap { configItemSpecMap.AddBoolItem(ProcessCloudInitMultiPart, false) configItemSpecMap.AddBoolItem(ConsoleAccess, true) // Controller likely default to false configItemSpecMap.AddBoolItem(EnableARPSnoop, true) + configItemSpecMap.AddBoolItem(WwanQueryVisibleProviders, false) // Add TriState Items configItemSpecMap.AddTriStateItem(NetworkFallbackAnyEth, TS_DISABLED) @@ -873,9 +870,6 @@ func NewConfigItemSpecMap() ConfigItemSpecMap { configItemSpecMap.AddAgentSettingStringItem(LogLevel, "info", parseLevel) configItemSpecMap.AddAgentSettingStringItem(RemoteLogLevel, "info", parseLevel) - // XXX temp edgeview setting - configItemSpecMap.AddStringItem(EdgeViewToken, "", blankValidator) - // Add NetDump settings configItemSpecMap.AddBoolItem(NetDumpEnable, true) configItemSpecMap.AddIntItem(NetDumpTopicPreOnboardInterval, HourInSec, 60, 0xFFFFFFFF) diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/globalconfigold.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/globalconfigold.go index c54d8e2850..0477648618 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/globalconfigold.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/globalconfigold.go @@ -18,7 +18,6 @@ type OldGlobalConfig struct { ResetIfCloudGoneTime uint32 // reboot if no cloud connectivity FallbackIfCloudGoneTime uint32 // ... and shorter during update MintimeUpdateSuccess uint32 // time before zedagent declares success - StaleConfigTime uint32 // On reboot use saved config if not stale DownloadGCTime uint32 // Garbage collect if no use VdiskGCTime uint32 // Garbage collect RW disk if no use @@ -107,7 +106,6 @@ var globalConfigDefaults = OldGlobalConfig{ UsbAccess: true, // Controller likely to default to false SshAccess: true, // Controller likely to default to false SshAuthorizedKeys: "", - StaleConfigTime: 600, // Use stale config for up to 10 minutes DownloadGCTime: 600, // 10 minutes VdiskGCTime: 3600, // 1 hour DownloadRetryTime: 600, // 10 minutes @@ -165,9 +163,6 @@ func ApplyDefaults(newgc OldGlobalConfig) OldGlobalConfig { if newgc.NetworkSendTimeout == 0 { newgc.NetworkSendTimeout = globalConfigDefaults.NetworkSendTimeout } - if newgc.StaleConfigTime == 0 { - newgc.StaleConfigTime = globalConfigDefaults.StaleConfigTime - } if newgc.DownloadGCTime == 0 { newgc.DownloadGCTime = globalConfigDefaults.DownloadGCTime } @@ -211,7 +206,6 @@ var GlobalConfigMinimums = OldGlobalConfig{ NetworkTestInterval: 300, // 5 minutes NetworkTestBetterInterval: 0, // Disabled - StaleConfigTime: 0, // Don't use stale config DownloadGCTime: 60, VdiskGCTime: 60, DownloadRetryTime: 60, @@ -269,12 +263,6 @@ func EnforceGlobalConfigMinimums(newgc OldGlobalConfig) OldGlobalConfig { newgc.NetworkTestBetterInterval, GlobalConfigMinimums.NetworkTestBetterInterval) newgc.NetworkTestBetterInterval = GlobalConfigMinimums.NetworkTestBetterInterval } - - if newgc.StaleConfigTime < GlobalConfigMinimums.StaleConfigTime { - logrus.Warnf("Enforce minimum StaleConfigTime received %d; using %d", - newgc.StaleConfigTime, GlobalConfigMinimums.StaleConfigTime) - newgc.StaleConfigTime = GlobalConfigMinimums.StaleConfigTime - } if newgc.DownloadGCTime < GlobalConfigMinimums.DownloadGCTime { logrus.Warnf("Enforce minimum DownloadGCTime received %d; using %d", newgc.DownloadGCTime, GlobalConfigMinimums.DownloadGCTime) @@ -311,7 +299,6 @@ func (config OldGlobalConfig) MoveBetweenConfigs() *ConfigItemValueMap { newConfig.SetGlobalValueInt(ResetIfCloudGoneTime, config.ResetIfCloudGoneTime) newConfig.SetGlobalValueInt(FallbackIfCloudGoneTime, config.FallbackIfCloudGoneTime) newConfig.SetGlobalValueInt(MintimeUpdateSuccess, config.MintimeUpdateSuccess) - newConfig.SetGlobalValueInt(StaleConfigTime, config.StaleConfigTime) newConfig.SetGlobalValueInt(VdiskGCTime, config.VdiskGCTime) newConfig.SetGlobalValueInt(DownloadRetryTime, config.DownloadRetryTime) newConfig.SetGlobalValueInt(DomainBootRetryTime, config.DomainBootRetryTime) diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/locationconsts.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/locationconsts.go index 3755415e92..839353cb65 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/locationconsts.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/locationconsts.go @@ -11,7 +11,7 @@ const ( // PersistDir - Location to store persistent files. PersistDir = "/persist" - // PersistConfigDir is where we keep some configuration across reboots + // PersistConfigDir is where we used to keep some configuration across reboots. Remove once upgradeconverter code is removed. PersistConfigDir = PersistDir + "/config" // PersistStatusDir is where we keep some configuration across reboots PersistStatusDir = PersistDir + "/status" @@ -33,8 +33,14 @@ const ( IngestedDirname = PersistDir + "/ingested" // SnapshotsDirname - location for snapshots SnapshotsDirname = PersistDir + "/snapshots" - // SnapshotConfigFilename - file to store snapshot configuration - SnapshotConfigFilename = "config.json" + // SnapshotAppInstanceConfigFilename - file to store snapshot-related app instance config + SnapshotAppInstanceConfigFilename = "appInstanceConfig.json" + // SnapshotVolumesSnapshotStatusFilename - file to store volume snapshot status + SnapshotVolumesSnapshotStatusFilename = "volumesSnapshotStatus.json" + // SnapshotInstanceStatusFilename - file to store SnapshotInstanceStatus + SnapshotInstanceStatusFilename = "snapshotInstanceStatus.json" + // PersistCachePatchEnvelopes - folder to store inline patch envelopes + PersistCachePatchEnvelopes = PersistDir + "/patchEnvelopesCache" // IdentityDirname - Config dir IdentityDirname = "/config" @@ -58,6 +64,8 @@ const ( APIV1FileName = IdentityDirname + "/Force-API-V1" // BootstrapConfFileName - file to store initial device configuration for bootstrapping BootstrapConfFileName = IdentityDirname + "/bootstrap-config.pb" + // RemoteAccessFlagFileName -- file to check for remote access configuration + RemoteAccessFlagFileName = IdentityDirname + "/remote_access_disabled" // BootstrapShaFileName - file to store SHA hash of an already ingested bootstrap config BootstrapShaFileName = IngestedDirname + "/bootstrap-config.sha" diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/onboardingtypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/onboardingtypes.go index b7ebd4d498..762c2e0f56 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/onboardingtypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/onboardingtypes.go @@ -4,10 +4,56 @@ package types import ( - "net" + "github.com/google/go-cmp/cmp" + "github.com/lf-edge/eve/pkg/pillar/base" + uuid "github.com/satori/go.uuid" ) -type DnsNameToIP struct { - HostName string - IPs []net.IP +// OnboardingStatus - UUID, etc. advertised by client process +type OnboardingStatus struct { + DeviceUUID uuid.UUID + HardwareModel string // From controller +} + +// Key returns the key for pubsub +func (status OnboardingStatus) Key() string { + return "global" +} + +// LogCreate : +func (status OnboardingStatus) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.OnboardingStatusLogType, "", + nilUUID, status.LogKey()) + if logObject == nil { + return + } + logObject.Noticef("Onboarding status create") +} + +// LogModify : +func (status OnboardingStatus) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.OnboardingStatusLogType, "", + nilUUID, status.LogKey()) + + oldStatus, ok := old.(OnboardingStatus) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object interface passed is not of OnboardingStatus type") + } + // XXX remove? + logObject.CloneAndAddField("diff", cmp.Diff(oldStatus, status)). + Noticef("Onboarding status modify") +} + +// LogDelete : +func (status OnboardingStatus) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.OnboardingStatusLogType, "", + nilUUID, status.LogKey()) + logObject.Noticef("Onboarding status delete") + + base.DeleteLogObject(logBase, status.LogKey()) +} + +// LogKey : +func (status OnboardingStatus) LogKey() string { + return string(base.OnboardingStatusLogType) + "-" + status.Key() } diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/patchenvelopestypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/patchenvelopestypes.go new file mode 100644 index 0000000000..0eb09b5385 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/patchenvelopestypes.go @@ -0,0 +1,150 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package types + +import ( + "archive/zip" + "encoding/json" + "io" + "os" + "path/filepath" +) + +// PatchEnvelopes is a wrapper +// to send patch envelopes +type PatchEnvelopes struct { + Envelopes []PatchEnvelopeInfo +} + +// Get returns list of patch envelopes, which are available to appUUID +func (pe *PatchEnvelopes) Get(appUUID string) []PatchEnvelopeInfo { + var res []PatchEnvelopeInfo + + for _, envelope := range pe.Envelopes { + for _, allowedUUID := range envelope.AllowedApps { + if allowedUUID == appUUID { + res = append(res, envelope) + break + } + } + } + + return res +} + +// Key for pubsub +func (PatchEnvelopes) Key() string { + return "zedagent" +} + +// PatchEnvelopeInfo - information +// about patch envelopes +type PatchEnvelopeInfo struct { + AllowedApps []string + PatchID string + BinaryBlobs []BinaryBlobCompleted + VolumeRefs []BinaryBlobVolumeRef +} + +// since we use json in pubsub we cannot use json - tag +// and therefore we need some representational structure +// for PatchEnvelopeInfo. +type peInfoToDisplay struct { + PatchID string + BinaryBlobs []BinaryBlobCompleted + VolumeRefs []BinaryBlobVolumeRef +} + +// PatchEnvelopesJSONForAppInstance returns json representation +// of Patch Envelopes list which are shown to app instances +func PatchEnvelopesJSONForAppInstance(pe []PatchEnvelopeInfo) ([]byte, error) { + toDisplay := make([]peInfoToDisplay, len(pe)) + + for i, envelope := range pe { + toDisplay[i] = peInfoToDisplay{ + PatchID: envelope.PatchID, + BinaryBlobs: envelope.BinaryBlobs, + VolumeRefs: envelope.VolumeRefs, + } + } + + return json.Marshal(toDisplay) +} + +// FindPatchEnvelopeByID returns patch envelope with given patchId +func FindPatchEnvelopeByID(pe []PatchEnvelopeInfo, patchID string) *PatchEnvelopeInfo { + for _, pe := range pe { + if pe.PatchID == patchID { + return &pe + } + } + return nil +} + +// GetZipArchive archives list of patch envelopes in a given path and returns +// full path to zip archive +func GetZipArchive(root string, pe PatchEnvelopeInfo) (string, error) { + zipFilename := filepath.Join(root, pe.PatchID+".zip") + zipFile, err := os.Create(zipFilename) + if err != nil { + return "", err + } + defer zipFile.Close() + + zipWriter := zip.NewWriter(zipFile) + defer zipWriter.Close() + + for _, b := range pe.BinaryBlobs { + // We only want to archive binary blobs which are ready + file, err := os.Open(b.URL) + if err != nil { + return "", err + } + defer file.Close() + + baseName := filepath.Base(b.URL) + zipEntry, err := zipWriter.Create(baseName) + if err != nil { + return "", err + } + + _, err = io.Copy(zipEntry, file) + if err != nil { + return "", err + } + + } + + return zipFilename, nil +} + +// BinaryBlobCompleted is representation of +// binary blob ready to be downloaded by app instance +type BinaryBlobCompleted struct { + FileName string `json:"fileName"` + FileSha string `json:"fileSha"` + FileMetadata string `json:"fileMetaData"` + URL string `json:"url"` //nolint:var-naming +} + +// CompletedBinaryBlobIdxByName returns index of element in blobs list +// which FileName matches name +func CompletedBinaryBlobIdxByName(blobs []BinaryBlobCompleted, name string) int { + for i := range blobs { + if blobs[i].FileName == name { + return i + } + } + return -1 +} + +// BinaryBlobVolumeRef is representation of +// external binary blobs, which has not yet been +// downloaded +type BinaryBlobVolumeRef struct { + FileName string `json:"fileName"` + ImageName string `json:"imageName"` + FileMetadata string `json:"fileMetaData"` + ImageID string `json:"imageId"` +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/volumetypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/volumetypes.go index c028c409c9..be8f1ac924 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/volumetypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/volumetypes.go @@ -276,7 +276,6 @@ type VolumesSnapshotConfig struct { VolumeIDs []uuid.UUID // AppUUID used as a backlink to the app AppUUID uuid.UUID - // ConfigID is the ID of the config that created the snapshot } // Key returns unique key for the snapshot @@ -286,16 +285,18 @@ func (config VolumesSnapshotConfig) Key() string { // VolumesSnapshotStatus is used to send snapshot status from volumemgr to zedmanager type VolumesSnapshotStatus struct { - // SnapshotID is the ID of the snapshot - SnapshotID string - // Metadata is a map of volumeID to metadata, depending on the volume type - VolumeSnapshotMeta map[string]interface{} + // SnapshotID is the ID of the snapshot, critical field + SnapshotID string `mandatory:"true"` + // Metadata is a map of volumeID to metadata, depending on the volume type. Critical field. + VolumeSnapshotMeta map[string]interface{} `mandatory:"true"` // TimeCreated is the time the snapshot was created, reported by FS-specific code TimeCreated time.Time - // AppUUID used as a backlink to the app - AppUUID uuid.UUID + // AppUUID used as a backlink to the app, critical field + AppUUID uuid.UUID `mandatory:"true"` // RefCount is the number of times the snapshot is used. Necessary to trigger the handleModify handler RefCount int + // ResultOfAction is the type of action that was performed on the snapshot that resulted in this status + ResultOfAction VolumesSnapshotAction // ErrorAndTimeWithSource provides SetErrorNow() and ClearError() ErrorAndTimeWithSource } diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/wwan.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/wwan.go new file mode 100644 index 0000000000..be4d3a0dc3 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/wwan.go @@ -0,0 +1,674 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Types defined for interaction between pillar and the wwan microservice. + +package types + +import ( + "fmt" + "net" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/lf-edge/eve/pkg/pillar/base" + "github.com/lf-edge/eve/pkg/pillar/utils/generics" + "github.com/lf-edge/eve/pkg/pillar/utils/netutils" +) + +// WwanConfig is published by nim and consumed by the wwan service. +type WwanConfig struct { + // Key of the DevicePortConfig from which WwanConfig was generated. + DPCKey string + // Timestamp of the DevicePortConfig from which WwanConfig was generated. + DPCTimestamp time.Time + // Timestamp of the RadioSilence config applied into this WwanConfig. + RSConfigTimestamp time.Time + // Radio silence is the act of disabling all radio transmission + // for safety or security reasons + RadioSilence bool + // One entry for every cellular modem. + Networks []WwanNetworkConfig +} + +// GetNetworkConfig returns pointer to the network config corresponding to the modem +// with the given logical label. +func (wc WwanConfig) GetNetworkConfig(logicalLabel string) *WwanNetworkConfig { + for i := range wc.Networks { + if wc.Networks[i].LogicalLabel == logicalLabel { + return &wc.Networks[i] + } + } + return nil +} + +// Equal compares two instances of WwanConfig for equality. +func (wc WwanConfig) Equal(wc2 WwanConfig) bool { + if wc.DPCKey != wc2.DPCKey || + !wc.DPCTimestamp.Equal(wc2.DPCTimestamp) || + !wc.RSConfigTimestamp.Equal(wc2.RSConfigTimestamp) || + wc.RadioSilence != wc2.RadioSilence { + return false + } + return generics.EqualSetsFn(wc.Networks, wc2.Networks, + func(wnc1, wnc2 WwanNetworkConfig) bool { + return wnc1.Equal(wnc2) + }) +} + +// Key is used for pubsub +func (wc WwanConfig) Key() string { + return "global" +} + +// LogCreate : +func (wc WwanConfig) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.WwanConfigLogType, "", + nilUUID, wc.LogKey()) + if logObject == nil { + return + } + logObject.Metricf("Wwan config create") +} + +// LogModify : +func (wc WwanConfig) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.WwanConfigLogType, "", + nilUUID, wc.LogKey()) + oldWc, ok := old.(WwanConfig) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object passed is not of WwanConfig type") + } + logObject.CloneAndAddField("diff", cmp.Diff(oldWc, wc)). + Metricf("Wwan config modify") +} + +// LogDelete : +func (wc WwanConfig) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.WwanConfigLogType, "", + nilUUID, wc.LogKey()) + logObject.Metricf("Wwan config delete") + base.DeleteLogObject(logBase, wc.LogKey()) +} + +// LogKey : +func (wc WwanConfig) LogKey() string { + return string(base.WwanConfigLogType) + "-" + wc.Key() +} + +// WwanNetworkConfig contains configuration for a single cellular network. +// In case there are multiple SIM cards/slots in the modem, WwanNetworkConfig +// contains config only for the activated one. +type WwanNetworkConfig struct { + // Logical label in PhysicalIO. + LogicalLabel string + // Physical address of the cellular modem. + PhysAddrs WwanPhysAddrs + // Configuration of the activated Access point. + AccessPoint CellularAccessPoint + // Proxies configured for the cellular network. + Proxies []ProxyEntry + // Probe used to detect broken connection. + Probe WwanProbe + // Some LTE modems have GNSS receiver integrated and can be used + // for device location tracking. + // Enable this option to have location info periodically obtained + // from this modem and published by wwan microservice via topic WwanLocationInfo. + LocationTracking bool +} + +// WwanAuthProtocol : authentication protocol used by cellular network. +type WwanAuthProtocol string + +const ( + // WwanAuthProtocolNone : no authentication. + WwanAuthProtocolNone WwanAuthProtocol = "" + // WwanAuthProtocolPAP : Password Authentication Protocol. + WwanAuthProtocolPAP WwanAuthProtocol = "pap" + // WwanAuthProtocolCHAP : Challenge-Handshake Authentication Protocol. + WwanAuthProtocolCHAP WwanAuthProtocol = "chap" + // WwanAuthProtocolPAPAndCHAP : Both PAP and CHAP. + WwanAuthProtocolPAPAndCHAP WwanAuthProtocol = "pap-and-chap" +) + +// WwanRAT : Radio Access Technology. +type WwanRAT string + +const ( + // WwanRATUnspecified : select RAT automatically. + WwanRATUnspecified WwanRAT = "" + // WwanRATGSM : Global System for Mobile Communications (2G). + WwanRATGSM WwanRAT = "gsm" + // WwanRATUMTS : Universal Mobile Telecommunications System (3G). + WwanRATUMTS WwanRAT = "umts" + // WwanRATLTE : Long-Term Evolution (4G). + WwanRATLTE WwanRAT = "lte" + // WwanRAT5GNR : 5th Generation New Radio (5G). + WwanRAT5GNR WwanRAT = "5gnr" +) + +// WwanProbe : cellular connectivity verification probe. +type WwanProbe struct { + Disable bool + // IP/FQDN address to periodically probe to determine connection status. + Address string +} + +// Equal compares two instances of WwanNetworkConfig for equality. +func (wnc WwanNetworkConfig) Equal(wnc2 WwanNetworkConfig) bool { + if wnc.LogicalLabel != wnc2.LogicalLabel || + wnc.PhysAddrs != wnc2.PhysAddrs { + return false + } + if !wnc.AccessPoint.Equal(wnc2.AccessPoint) { + return false + } + if !generics.EqualLists(wnc.Proxies, wnc2.Proxies) { + return false + } + if wnc.Probe != wnc2.Probe { + return false + } + if wnc.LocationTracking != wnc2.LocationTracking { + return false + } + return true +} + +// WwanPhysAddrs is a physical address of a cellular modem. +// Not all fields have to be defined. Empty WwanPhysAddrs will match the first modem found in sysfs. +// With multiple LTE modems the USB address is the most unambiguous and reliable. +type WwanPhysAddrs struct { + // Interface name. + // For example: wwan0 + Interface string + // USB address in the format ":[]", with nested ports separated by dots. + // For example: 1:2.3 + USB string + // PCI address in the long format. + // For example: 0000:00:15.0 + PCI string + // Dev : device file representing the modem (e.g. /dev/cdc-wdm0). + // This address is only published as part of the wwan status + // and can't be configured from the controller. + Dev string +} + +// WwanStatus is published by the wwan service and consumed by nim, zedagent and zedrouter. +type WwanStatus struct { + // DPCKey is just copied from the last applied WwanConfig. + DPCKey string + // DPCTimestamp is just copied from the last applied WwanConfig. + DPCTimestamp time.Time + // RSConfigTimestamp is just copied from the last applied WwanConfig. + RSConfigTimestamp time.Time + // One entry for every cellular modem. + Networks []WwanNetworkStatus +} + +// Equal compares two instances of WwanStatus for equality. +func (ws WwanStatus) Equal(ws2 WwanStatus) bool { + if ws.DPCKey != ws2.DPCKey || + !ws.DPCTimestamp.Equal(ws2.DPCTimestamp) || + !ws.RSConfigTimestamp.Equal(ws2.RSConfigTimestamp) { + return false + } + return generics.EqualSetsFn(ws.Networks, ws2.Networks, + func(wns1, wns2 WwanNetworkStatus) bool { + return wns1.Equal(wns2) + }) +} + +// GetNetworkStatus returns pointer to the network status corresponding to the modem +// with the given logical label. +func (ws WwanStatus) GetNetworkStatus(logicalLabel string) *WwanNetworkStatus { + for i := range ws.Networks { + if ws.Networks[i].LogicalLabel == logicalLabel { + return &ws.Networks[i] + } + } + return nil +} + +// DoSanitize fills in logical names for cellular modules and SIM cards. +func (ws WwanStatus) DoSanitize() { + uniqueModel := func(model string) bool { + var counter int + for i := range ws.Networks { + if ws.Networks[i].Module.Model == model { + counter++ + } + } + return counter == 1 + } + for i := range ws.Networks { + network := &ws.Networks[i] + if network.Module.Name == "" { + switch { + case network.Module.IMEI != "": + network.Module.Name = network.Module.IMEI + case uniqueModel(network.Module.Model): + network.Module.Name = network.Module.Model + default: + network.Module.Name = network.PhysAddrs.USB + } + } + for j := range network.SimCards { + simCard := &network.SimCards[j] + if simCard.Name == "" { + if simCard.ICCID != "" { + simCard.Name = simCard.ICCID + } else { + simCard.Name = fmt.Sprintf("%s-SIM%d", + network.Module.Name, simCard.SlotNumber) + } + } + } + } +} + +// Key is used for pubsub +func (ws WwanStatus) Key() string { + return "global" +} + +// LogCreate : +func (ws WwanStatus) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.WwanStatusLogType, "", + nilUUID, ws.LogKey()) + if logObject == nil { + return + } + logObject.Metricf("Wwan status create") +} + +// LogModify : +func (ws WwanStatus) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.WwanStatusLogType, "", + nilUUID, ws.LogKey()) + oldWs, ok := old.(WwanStatus) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object passed is not of WwanStatus type") + } + logObject.CloneAndAddField("diff", cmp.Diff(oldWs, ws)). + Metricf("Wwan status modify") +} + +// LogDelete : +func (ws WwanStatus) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.WwanStatusLogType, "", + nilUUID, ws.LogKey()) + logObject.Metricf("Wwan status delete") + base.DeleteLogObject(logBase, ws.LogKey()) +} + +// LogKey : +func (ws WwanStatus) LogKey() string { + return string(base.WwanStatusLogType) + "-" + ws.Key() +} + +// WwanNetworkStatus contains status information for a single cellular network +// (i.e. one modem but possibly multiple SIM slots/cards). +type WwanNetworkStatus struct { + // Logical label of the cellular modem in PhysicalIO. + // Can be empty if this device is not configured by the controller + // (and hence logical label does not exist). + LogicalLabel string + PhysAddrs WwanPhysAddrs + Module WwanCellModule + // One entry for every SIM slot (incl. those without SIM card). + SimCards []WwanSimCard + // Non-empty if the wwan microservice failed to apply config submitted by NIM. + ConfigError string + // Error message from the last connectivity probing. + ProbeError string + // Network where the modem is currently registered. + CurrentProvider WwanProvider + // All networks that the modem is able to detect. + // This will include the currently used provider as well as other visible networks. + VisibleProviders []WwanProvider + // The list of Radio Access Technologies (RATs) currently used for registering/connecting + // to the network (typically just one). + CurrentRATs []WwanRAT + // Unix timestamp in seconds made when the current connection was established. + // Zero value if the modem is not connected. + ConnectedAt uint64 + // IP settings received from the network when connection is established. + IPSettings WwanIPSettings + // True if location tracking is successfully running. + LocationTracking bool +} + +// WwanCellModule contains cellular module specs. +type WwanCellModule struct { + // Name is a module identifier. For example IMEI if available. + // Guaranteed to be unique among all modems attached to the edge node. + Name string + // International Mobile Equipment Identity. + IMEI string + Model string + Manufacturer string + // Firmware version identifier. + Revision string + // QMI or MBIM. + ControlProtocol WwanCtrlProt + OpMode WwanOpMode +} + +// WwanSimCard describes either empty SIM slot or a slot with a SIM card inserted. +type WwanSimCard struct { + // Name is a SIM card/slot identifier. + // Guaranteed to be unique across all modems and their SIM slots attached + // to the edge node. + Name string + // SIM slot number which this WwanSimCard instance describes. + SlotNumber uint8 + // True if this SIM slot is activated, i.e. the inserted SIM card (if any) can be used + // to connect to a cellular network. + SlotActivated bool + // Integrated Circuit Card Identifier. + // Empty if no SIM card is inserted into the slot or if the SIM card is not recognized. + ICCID string + // International Mobile Subscriber Identity. + // Empty if no SIM card is inserted into the slot or if the SIM card is not recognized. + IMSI string + // The current state of the SIM card (absent, initialized, not recognized, etc.). + // This state is not modeled using enum because the set of possible values differs + // between QMI and MBIM protocols (used to control cellular modules) and there is + // no 1:1 mapping between them. + State string +} + +// WwanProvider contains information about a cellular connectivity provider. +type WwanProvider struct { + // Public Land Mobile Network identifier. + PLMN string + // Human-readable label identifying the provider. + Description string + // True if this is the provider currently being used. + CurrentServing bool + // True if data roaming is ON. + Roaming bool + // True if this provider is forbidden by SIM card config. + Forbidden bool +} + +// WwanOpMode : wwan operating mode +type WwanOpMode string + +const ( + // WwanOpModeUnspecified : operating mode is not specified + WwanOpModeUnspecified WwanOpMode = "" + // WwanOpModeOnline : modem is online but not connected + WwanOpModeOnline WwanOpMode = "online" + // WwanOpModeConnected : modem is online and connected + WwanOpModeConnected WwanOpMode = "online-and-connected" + // WwanOpModeRadioOff : modem has disabled radio transmission + WwanOpModeRadioOff WwanOpMode = "radio-off" + // WwanOpModeOffline : modem is offline + WwanOpModeOffline WwanOpMode = "offline" + // WwanOpModeUnrecognized : unrecongized operating mode + WwanOpModeUnrecognized WwanOpMode = "unrecognized" +) + +// WwanCtrlProt : wwan control protocol +type WwanCtrlProt string + +const ( + // WwanCtrlProtUnspecified : control protocol is not specified + WwanCtrlProtUnspecified WwanCtrlProt = "" + // WwanCtrlProtQMI : modem is controlled using the QMI protocol + WwanCtrlProtQMI WwanCtrlProt = "qmi" + // WwanCtrlProtMBIM : modem is controlled using the MBIM protocol + WwanCtrlProtMBIM WwanCtrlProt = "mbim" +) + +// WwanIPSettings : IP settings received from the connected network. +type WwanIPSettings struct { + Address *net.IPNet + Gateway net.IP + DNSServers []net.IP + MTU uint16 +} + +// Equal compares two instances of WwanIPSettings for equality. +func (wips WwanIPSettings) Equal(wips2 WwanIPSettings) bool { + return netutils.EqualIPNets(wips.Address, wips2.Address) && + netutils.EqualIPs(wips.Gateway, wips2.Gateway) && + generics.EqualSetsFn(wips.DNSServers, wips2.DNSServers, netutils.EqualIPs) && + wips.MTU == wips2.MTU +} + +// Equal compares two instances of WwanNetworkStatus for equality. +func (wns WwanNetworkStatus) Equal(wns2 WwanNetworkStatus) bool { + if wns.LogicalLabel != wns2.LogicalLabel || + wns.PhysAddrs != wns2.PhysAddrs { + return false + } + if wns.Module != wns2.Module { + return false + } + if !generics.EqualSets(wns.SimCards, wns2.SimCards) { + return false + } + if wns.ConfigError != wns2.ConfigError || + wns.ProbeError != wns2.ProbeError { + return false + } + if wns.CurrentProvider != wns2.CurrentProvider || + !generics.EqualSets(wns.VisibleProviders, wns2.VisibleProviders) { + return false + } + if !generics.EqualSets(wns.CurrentRATs, wns2.CurrentRATs) { + return false + } + if wns.ConnectedAt != wns2.ConnectedAt || + !wns.IPSettings.Equal(wns2.IPSettings) || + wns.LocationTracking != wns2.LocationTracking { + return false + } + return true +} + +// WwanMetrics is published by the wwan service. +type WwanMetrics struct { + Networks []WwanNetworkMetrics +} + +// GetNetworkMetrics returns pointer to the network metrics corresponding to the modem +// with the given logical label. +func (wm WwanMetrics) GetNetworkMetrics(logicalLabel string) *WwanNetworkMetrics { + for i := range wm.Networks { + if wm.Networks[i].LogicalLabel == logicalLabel { + return &wm.Networks[i] + } + } + return nil +} + +// Equal compares two instances of WwanMetrics for equality. +func (wm WwanMetrics) Equal(wm2 WwanMetrics) bool { + return generics.EqualSets(wm.Networks, wm2.Networks) +} + +// LookupNetworkMetrics returns metrics corresponding to the given cellular network. +func (wm WwanMetrics) LookupNetworkMetrics(logicalLabel string) (WwanNetworkMetrics, bool) { + for _, metrics := range wm.Networks { + if logicalLabel == metrics.LogicalLabel { + return metrics, true + } + } + return WwanNetworkMetrics{}, false +} + +// Key is used for pubsub +func (wm WwanMetrics) Key() string { + return "global" +} + +// LogCreate : +func (wm WwanMetrics) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.WwanMetricsLogType, "", + nilUUID, wm.LogKey()) + if logObject == nil { + return + } + logObject.Metricf("Wwan metrics create") +} + +// LogModify : +func (wm WwanMetrics) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.WwanMetricsLogType, "", + nilUUID, wm.LogKey()) + + oldWm, ok := old.(WwanMetrics) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object passed is not of WwanMetrics type") + } + // XXX remove? + logObject.CloneAndAddField("diff", cmp.Diff(oldWm, wm)). + Metricf("Wwan metrics modify") +} + +// LogDelete : +func (wm WwanMetrics) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.WwanMetricsLogType, "", + nilUUID, wm.LogKey()) + logObject.Metricf("Wwan metrics delete") + + base.DeleteLogObject(logBase, wm.LogKey()) +} + +// LogKey : +func (wm WwanMetrics) LogKey() string { + return string(base.WwanMetricsLogType) + "-" + wm.Key() +} + +// WwanNetworkMetrics contains metrics for a single cellular network. +type WwanNetworkMetrics struct { + // Logical label of the cellular modem in PhysicalIO. + // Can be empty if this device is not configured by the controller + // (and hence logical label does not exist). + LogicalLabel string + PhysAddrs WwanPhysAddrs + PacketStats WwanPacketStats + SignalInfo WwanSignalInfo +} + +// WwanPacketStats contains packet statistics recorded by a cellular modem. +type WwanPacketStats struct { + RxBytes uint64 + RxPackets uint64 + RxDrops uint64 + TxBytes uint64 + TxPackets uint64 + TxDrops uint64 +} + +// WwanSignalInfo contains cellular signal strength information. +// The maximum value of int32 (0x7FFFFFFF) represents unspecified/unavailable metric. +type WwanSignalInfo struct { + // Received signal strength indicator (RSSI) measured in dBm (decibel-milliwatts). + RSSI int32 + // Reference Signal Received Quality (RSRQ) measured in dB (decibels). + RSRQ int32 + // Reference Signal Receive Power (RSRP) measured in dBm (decibel-milliwatts). + RSRP int32 + // Signal-to-Noise Ratio (SNR) measured in dB (decibels). + SNR int32 +} + +// WwanLocationInfo contains device location information obtained from a GNSS +// receiver integrated into an LTE modem. +type WwanLocationInfo struct { + // Logical label of the device used to obtain this location information. + LogicalLabel string + // Latitude in the Decimal degrees (DD) notation. + // Valid values are in the range <-90, 90>. Anything outside of this range + // should be treated as an unavailable value. + // Note that wwan microservice uses -32768 specifically when latitude is not known. + Latitude float64 + // Longitude in the Decimal degrees (DD) notation. + // Valid values are in the range <-180, 180>. Anything outside of this range + // should be treated as an unavailable value. + // Note that wwan microservice uses -32768 specifically when longitude is not known. + Longitude float64 + // Altitude w.r.t. mean sea level in meters. + // Negative value of -32768 is returned when altitude is not known. + Altitude float64 + // Circular horizontal position uncertainty in meters. + // Negative values are not valid and represent unavailable uncertainty. + // Note that wwan microservice uses -32768 specifically when horizontal + // uncertainty is not known. + HorizontalUncertainty float32 + // Reliability of the provided information for latitude and longitude. + HorizontalReliability LocReliability + // Vertical position uncertainty in meters. + // Negative values are not valid and represent unavailable uncertainty. + // Note that wwan microservice uses -32768 specifically when vertical + // uncertainty is not known. + VerticalUncertainty float32 + // Reliability of the provided information for altitude. + VerticalReliability LocReliability + // Unix timestamp in milliseconds. + // Zero value represents unavailable UTC timestamp. + UTCTimestamp uint64 +} + +// Key is used for pubsub +func (wli WwanLocationInfo) Key() string { + return "global" +} + +// LogCreate : +func (wli WwanLocationInfo) LogCreate(logBase *base.LogObject) { + logObject := base.NewLogObject(logBase, base.WwanLocationInfoLogType, "", + nilUUID, wli.LogKey()) + if logObject == nil { + return + } + logObject.Metricf("Wwan location info create") +} + +// LogModify : +func (wli WwanLocationInfo) LogModify(logBase *base.LogObject, old interface{}) { + logObject := base.EnsureLogObject(logBase, base.WwanLocationInfoLogType, "", + nilUUID, wli.LogKey()) + + oldWli, ok := old.(WwanLocationInfo) + if !ok { + logObject.Clone().Fatalf("LogModify: Old object passed is not of WwanLocationInfo type") + } + // XXX remove? + logObject.CloneAndAddField("diff", cmp.Diff(oldWli, wli)). + Metricf("Wwan location info modify") +} + +// LogDelete : +func (wli WwanLocationInfo) LogDelete(logBase *base.LogObject) { + logObject := base.EnsureLogObject(logBase, base.WwanLocationInfoLogType, "", + nilUUID, wli.LogKey()) + logObject.Metricf("Wwan location info delete") + base.DeleteLogObject(logBase, wli.LogKey()) +} + +// LogKey : +func (wli WwanLocationInfo) LogKey() string { + return string(base.WwanLocationInfoLogType) + "-" + wli.Key() +} + +// LocReliability : reliability of location information. +type LocReliability string + +const ( + // LocReliabilityUnspecified : reliability is not specified + LocReliabilityUnspecified LocReliability = "not-set" + // LocReliabilityVeryLow : very low reliability + LocReliabilityVeryLow LocReliability = "very-low" + // LocReliabilityLow : low reliability + LocReliabilityLow LocReliability = "low" + // LocReliabilityMedium : medium reliability + LocReliabilityMedium LocReliability = "medium" + // LocReliabilityHigh : high reliability + LocReliabilityHigh LocReliability = "high" +) diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedagenttypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedagenttypes.go index 1321999b27..d7b313fa3f 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedagenttypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedagenttypes.go @@ -6,10 +6,10 @@ package types import ( "fmt" "strings" - "sync" "time" "github.com/google/go-cmp/cmp" + "github.com/lf-edge/eve-api/go/info" "github.com/lf-edge/eve/pkg/pillar/base" uuid "github.com/satori/go.uuid" ) @@ -524,6 +524,57 @@ type ZedAgentStatus struct { ForceFallbackCounter int // Try image fallback when counter changes CurrentProfile string // Current profile RadioSilence RadioSilence // Currently requested state of radio devices + DeviceState DeviceState + AttestState AttestState + AttestError string + VaultStatus info.DataSecAtRestStatus + PCRStatus info.PCRStatus + VaultErr string +} + +// DeviceState represents overall state +type DeviceState uint8 + +// Integer values must match those in ZDeviceState in lf-edge/eve-api/proto/info/info.proto +// +//revive:disable:var-naming +const ( + DEVICE_STATE_UNSPECIFIED DeviceState = iota + DEVICE_STATE_ONLINE = 1 + DEVICE_STATE_REBOOTING = 2 + DEVICE_STATE_MAINTENANCE_MODE = 3 + DEVICE_STATE_BASEOS_UPDATING = 4 + DEVICE_STATE_BOOTING = 5 + DEVICE_STATE_PREPARING_POWEROFF = 6 + DEVICE_STATE_POWERING_OFF = 7 + DEVICE_STATE_PREPARED_POWEROFF = 8 +) + +//revive:enable:var-naming + +func (ds DeviceState) String() string { + switch ds { + case DEVICE_STATE_UNSPECIFIED: + return "unspecified" + case DEVICE_STATE_ONLINE: + return "online" + case DEVICE_STATE_REBOOTING: + return "rebooting" + case DEVICE_STATE_MAINTENANCE_MODE: + return "maintenance_mode" + case DEVICE_STATE_BASEOS_UPDATING: + return "baseos_updating" + case DEVICE_STATE_BOOTING: + return "booting" + case DEVICE_STATE_PREPARING_POWEROFF: + return "preparing_poweroff" + case DEVICE_STATE_POWERING_OFF: + return "powering_off" + case DEVICE_STATE_PREPARED_POWEROFF: + return "prepared_poweroff" + default: + return fmt.Sprintf("Unknown state %d", ds) + } } // Key : @@ -628,7 +679,6 @@ func (am RadioSilence) String() string { // LocalCommands : commands triggered locally via Local profile server. type LocalCommands struct { - sync.Mutex // Locally issued app commands. // For every app there is entry only for the last command (completed // or still in progress). Previous commands are not remembered. @@ -657,7 +707,6 @@ const ( AppCommandRestart // AppCommandPurge : purge application with ALL of its volumes. AppCommandPurge - // TODO : purge for a single or a subset of volumes. ) // LocalAppCommand : An application command requested from a local server. diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedmanagertypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedmanagertypes.go index f6bce7e97a..1c75d1e4ac 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedmanagertypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedmanagertypes.go @@ -6,6 +6,7 @@ package types import ( "fmt" "net" + "path/filepath" "time" "github.com/google/go-cmp/cmp" @@ -15,26 +16,6 @@ import ( uuid "github.com/satori/go.uuid" ) -type UrlCloudCfg struct { - ConfigUrl string - MetricsUrl string - StatusUrl string - LogUrl string -} - -// top level config container -type DeviceConfigResponse struct { - Config EdgeDevConfig -} - -type EdgeDevConfig struct { - Id UUIDandVersion - DevConfigSha256 string - DevConfigSignature string - Apps []AppInstanceConfig - Networks []UnderlayNetworkConfig -} - // UUID plus version type UUIDandVersion struct { UUID uuid.UUID @@ -82,7 +63,7 @@ type SnapshotDesc struct { // SnapshotInstanceStatus status of a snapshot instance. Used as a zedmanager-level representation of a snapshot type SnapshotInstanceStatus struct { // Snapshot contains the snapshot description - Snapshot SnapshotDesc + Snapshot SnapshotDesc `mandatory:"true"` // Reported indicates if the snapshot has been reported to the controller Reported bool // TimeTriggered is the time when the snapshot was triggered. At the moment, it is used to check if the snapshot has @@ -92,10 +73,10 @@ type SnapshotInstanceStatus struct { // TimeCreated is the time when the snapshot was created. It's reported by FS-specific snapshot creation code. TimeCreated time.Time // AppInstanceID is the UUID of the app instance the snapshot belongs to - AppInstanceID uuid.UUID + AppInstanceID uuid.UUID `mandatory:"true"` // ConfigVersion is the version of the app instance config at the moment of the snapshot creation // It is reported to the controller, so it can use the proper config to roll back the app instance - ConfigVersion UUIDandVersion + ConfigVersion UUIDandVersion `mandatory:"true"` // Error indicates if snapshot deletion or a rollback to the snapshot failed Error ErrorDescription } @@ -126,7 +107,7 @@ type AppInstanceConfig struct { DisableLogs bool VolumeRefConfigList []VolumeRefConfig Activate bool //EffectiveActivate in AppInstanceStatus must be used for the actual activation - UnderlayNetworkList []UnderlayNetworkConfig + AppNetAdapterList []AppNetAdapterConfig IoAdapterList []IoAdapter RestartCmd AppInstanceOpsCmd PurgeCmd AppInstanceOpsCmd @@ -243,14 +224,14 @@ type SnapshottingStatus struct { PreparedVolumesSnapshotConfigs []VolumesSnapshotConfig // SnapshotOnUpgrade indicates whether a snapshot should be taken during the app instance update. SnapshotOnUpgrade bool - // HasRollbackRequest indicates whether a rollback is in progress for the app instance. + // HasRollbackRequest indicates whether there are any rollback requests for the app instance. + // Set to true when a rollback is requested by controller, set to false when the rollback is triggered. HasRollbackRequest bool // ActiveSnapshot contains the id of the snapshot to be used for the rollback. ActiveSnapshot string // RollbackInProgress indicates whether a rollback is in progress for the app instance. + // Set to true when a rollback is triggered, set to false when the rollback is completed. RollbackInProgress bool - // ConfigBeforeRollback contains the version of the configuration of the app instance before the rollback - ConfigBeforeRollback UUIDandVersion } // Indexed by UUIDandVersion as above @@ -262,7 +243,7 @@ type AppInstanceStatus struct { ActivateInprogress bool // Needed for cleanup after failure FixedResources VmConfig // CPU etc VolumeRefStatusList []VolumeRefStatus - UnderlayNetworks []UnderlayNetworkStatus + AppNetAdapters []AppNetAdapterStatus BootTime time.Time IoAdapterList []IoAdapter // Report what was actually used RestartInprogress Inprogress @@ -388,9 +369,9 @@ func (status AppInstanceSummary) Key() string { func (status AppInstanceStatus) GetAppInterfaceList() []string { var viflist []string - for _, ulStatus := range status.UnderlayNetworks { - if ulStatus.VifUsed != "" { - viflist = append(viflist, ulStatus.VifUsed) + for _, adapterStatus := range status.AppNetAdapters { + if adapterStatus.VifUsed != "" { + viflist = append(viflist, adapterStatus.VifUsed) } } return viflist @@ -474,3 +455,23 @@ func (aih AppAndImageToHash) LogDelete(logBase *base.LogObject) { func (aih AppAndImageToHash) LogKey() string { return string(base.AppAndImageToHashLogType) + "-" + aih.Key() } + +// GetSnapshotDir returns the snapshot directory for the given snapshot ID +func GetSnapshotDir(snapshotID string) string { + return filepath.Join(SnapshotsDirname, snapshotID) +} + +// GetVolumesSnapshotStatusFile returns the volumes snapshot status file for the given snapshot ID and volume ID +func GetVolumesSnapshotStatusFile(snapshotID string) string { + return filepath.Join(GetSnapshotDir(snapshotID), SnapshotVolumesSnapshotStatusFilename) +} + +// GetSnapshotInstanceStatusFile returns the instance status file for the given snapshot ID +func GetSnapshotInstanceStatusFile(snapshotID string) string { + return filepath.Join(GetSnapshotDir(snapshotID), SnapshotInstanceStatusFilename) +} + +// GetSnapshotAppInstanceConfigFile returns the app instance config file for the given snapshot ID +func GetSnapshotAppInstanceConfigFile(snapshotID string) string { + return filepath.Join(GetSnapshotDir(snapshotID), SnapshotAppInstanceConfigFilename) +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedroutertypes.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedroutertypes.go index 8fb40a8f3d..26e4e561cc 100644 --- a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedroutertypes.go +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/types/zedroutertypes.go @@ -4,58 +4,27 @@ package types import ( - "bytes" - "encoding/binary" - "fmt" "net" - "os" - "reflect" - "sort" - "strings" "time" - "github.com/eriknordmark/ipinfo" "github.com/google/go-cmp/cmp" "github.com/lf-edge/eve/pkg/pillar/base" uuid "github.com/satori/go.uuid" - "github.com/sirupsen/logrus" - "github.com/vishvananda/netlink" ) -// IPAddrNotAvail is returned when there is no (suitable) IP address -// assigned to a given interface. -type IPAddrNotAvail struct { - IfName string -} - -// Error message. -func (e *IPAddrNotAvail) Error() string { - return fmt.Sprintf("interface %s: no suitable IP address available", e.IfName) -} - -// DNSNotAvail is returned when there is no DNS server configured -// for a given interface. -type DNSNotAvail struct { - IfName string -} - -// Error message. -func (e *DNSNotAvail) Error() string { - return fmt.Sprintf("interface %s: no DNS server available", e.IfName) -} - -// Indexed by UUID +// AppNetworkConfig : network configuration for a given application. type AppNetworkConfig struct { - UUIDandVersion UUIDandVersion - DisplayName string - Activate bool - GetStatsIPAddr net.IP - UnderlayNetworkList []UnderlayNetworkConfig - CloudInitUserData *string `json:"pubsub-large-CloudInitUserData"` - CipherBlockStatus CipherBlockStatus - MetaDataType MetaDataType + UUIDandVersion UUIDandVersion + DisplayName string + Activate bool + GetStatsIPAddr net.IP + AppNetAdapterList []AppNetAdapterConfig + CloudInitUserData *string `json:"pubsub-large-CloudInitUserData"` + CipherBlockStatus CipherBlockStatus + MetaDataType MetaDataType } +// Key : func (config AppNetworkConfig) Key() string { return config.UUIDandVersion.UUID.String() } @@ -107,50 +76,23 @@ func (config AppNetworkConfig) LogKey() string { return string(base.AppNetworkConfigLogType) + "-" + config.Key() } -func (config *AppNetworkConfig) getUnderlayConfig( - network uuid.UUID) *UnderlayNetworkConfig { - for i := range config.UnderlayNetworkList { - ulConfig := &config.UnderlayNetworkList[i] - if ulConfig.Network == network { - return ulConfig +func (config *AppNetworkConfig) getAppNetAdapterConfig( + network uuid.UUID) *AppNetAdapterConfig { + for i := range config.AppNetAdapterList { + adapterConfig := &config.AppNetAdapterList[i] + if adapterConfig.Network == network { + return adapterConfig } } return nil } +// IsNetworkUsed returns true if the given network instance is used by this app. func (config *AppNetworkConfig) IsNetworkUsed(network uuid.UUID) bool { - ulConfig := config.getUnderlayConfig(network) - if ulConfig != nil { - return true - } - // Network UUID matching neither UL nor OL network - return false -} - -func (status AppNetworkStatus) Pending() bool { - return status.PendingAdd || status.PendingModify || status.PendingDelete + return config.getAppNetAdapterConfig(network) != nil } -// AwaitingNetwork - Is the app waiting for network? -func (status AppNetworkStatus) AwaitingNetwork() bool { - return status.AwaitNetworkInstance -} - -// GetULStatusForNI returns UnderlayNetworkStatus for every application VIF -// connected to the given network instance (there can be multiple interfaces connected -// to the same network instance). -func (status AppNetworkStatus) GetULStatusForNI(netUUID uuid.UUID) []*UnderlayNetworkStatus { - var uls []*UnderlayNetworkStatus - for i := range status.UnderlayNetworkList { - ul := &status.UnderlayNetworkList[i] - if ul.Network == netUUID { - uls = append(uls, ul) - } - } - return uls -} - -// Indexed by UUID +// AppNetworkStatus : status of app connectivity. type AppNetworkStatus struct { UUIDandVersion UUIDandVersion AppNum int @@ -162,13 +104,14 @@ type AppNetworkStatus struct { DisplayName string // Copy from the AppNetworkConfig; used to delete when config is gone. GetStatsIPAddr net.IP - UnderlayNetworkList []UnderlayNetworkStatus + AppNetAdapterList []AppNetAdapterStatus AwaitNetworkInstance bool // If any Missing flag is set in the networks // Any errors from provisioning the network // ErrorAndTime provides SetErrorNow() and ClearError() ErrorAndTime } +// Key : func (status AppNetworkStatus) Key() string { return status.UUIDandVersion.UUID.String() } @@ -228,6 +171,31 @@ func (status AppNetworkStatus) LogKey() string { return string(base.AppNetworkStatusLogType) + "-" + status.Key() } +// Pending returns true if the last configuration operation is still pending +// and not processed yet. +func (status AppNetworkStatus) Pending() bool { + return status.PendingAdd || status.PendingModify || status.PendingDelete +} + +// AwaitingNetwork - Is the app waiting for network? +func (status AppNetworkStatus) AwaitingNetwork() bool { + return status.AwaitNetworkInstance +} + +// GetAdaptersStatusForNI returns AppNetAdapterStatus for every application VIF +// connected to the given network instance (there can be multiple interfaces connected +// to the same network instance). +func (status AppNetworkStatus) GetAdaptersStatusForNI(netUUID uuid.UUID) []*AppNetAdapterStatus { + var adapters []*AppNetAdapterStatus + for i := range status.AppNetAdapterList { + adapter := &status.AppNetAdapterList[i] + if adapter.Network == netUUID { + adapters = append(adapters, adapter) + } + } + return adapters +} + // AppContainerMetrics - App Container Metrics type AppContainerMetrics struct { UUIDandVersion UUIDandVersion // App UUID @@ -299,1905 +267,89 @@ func (acMetric AppContainerMetrics) LogKey() string { return string(base.AppContainerMetricsLogType) + "-" + acMetric.Key() } -// IntfStatusMap - Used to return per-interface test results (success and failures) -// -// ifName is used as the key -type IntfStatusMap struct { - // StatusMap -> Key: ifname, Value: TestResults - StatusMap map[string]TestResults -} - -// RecordSuccess records a success for the ifName -func (intfMap *IntfStatusMap) RecordSuccess(ifName string) { - tr, ok := intfMap.StatusMap[ifName] - if !ok { - tr = TestResults{} - } - tr.RecordSuccess() - intfMap.StatusMap[ifName] = tr -} - -// RecordFailure records a failure for the ifName -func (intfMap *IntfStatusMap) RecordFailure(ifName string, errStr string) { - tr, ok := intfMap.StatusMap[ifName] - if !ok { - tr = TestResults{} - } - tr.RecordFailure(errStr) - intfMap.StatusMap[ifName] = tr -} - -// SetOrUpdateFromMap - Set all the entries from the given per-interface map -// Entries which are not in the source are not modified -func (intfMap *IntfStatusMap) SetOrUpdateFromMap( - source IntfStatusMap) { - for intf, src := range source.StatusMap { - tr, ok := intfMap.StatusMap[intf] - if !ok { - tr = TestResults{} - } - tr.Update(src) - intfMap.StatusMap[intf] = tr - } -} - -// NewIntfStatusMap - Create a new instance of IntfStatusMap -func NewIntfStatusMap() *IntfStatusMap { - intfStatusMap := IntfStatusMap{} - intfStatusMap.StatusMap = make(map[string]TestResults) - return &intfStatusMap -} - -// DevicePortConfigList is an array in timestamp aka priority order; -// first one is the most desired config to use -// It includes test results hence is misnamed - should have a separate status -// This is only published under the key "global" -type DevicePortConfigList struct { - CurrentIndex int - PortConfigList []DevicePortConfig -} - -// MostlyEqual - Equal if everything else other than timestamps is equal. -func (config DevicePortConfigList) MostlyEqual(config2 DevicePortConfigList) bool { - - if len(config.PortConfigList) != len(config2.PortConfigList) { - return false - } - if config.CurrentIndex != config2.CurrentIndex { - return false - } - for i, c1 := range config.PortConfigList { - c2 := config2.PortConfigList[i] - - if !c1.MostlyEqual(&c2) || c1.State != c2.State { - return false - } - } - return true -} - -// PubKey is used for pubsub -func (config DevicePortConfigList) PubKey() string { - return "global" -} - -// LogCreate : -func (config DevicePortConfigList) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.DevicePortConfigListLogType, "", - nilUUID, config.LogKey()) - if logObject == nil { - return - } - logObject.CloneAndAddField("current-index-int64", config.CurrentIndex). - AddField("num-portconfig-int64", len(config.PortConfigList)). - Noticef("DevicePortConfigList create") -} - -// LogModify : -func (config DevicePortConfigList) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.DevicePortConfigListLogType, "", - nilUUID, config.LogKey()) - - oldConfig, ok := old.(DevicePortConfigList) - if !ok { - logObject.Clone().Errorf("LogModify: Old object interface passed is not of DevicePortConfigList type") - return - } - if oldConfig.CurrentIndex != config.CurrentIndex || - len(oldConfig.PortConfigList) != len(config.PortConfigList) { - - logObject.CloneAndAddField("current-index-int64", config.CurrentIndex). - AddField("num-portconfig-int64", len(config.PortConfigList)). - AddField("old-current-index-int64", oldConfig.CurrentIndex). - AddField("old-num-portconfig-int64", len(oldConfig.PortConfigList)). - Noticef("DevicePortConfigList modify") - } else { - // Log at Trace level - most likely just a timestamp change - logObject.CloneAndAddField("diff", cmp.Diff(oldConfig, config)). - Tracef("DevicePortConfigList modify other change") - } - -} - -// LogDelete : -func (config DevicePortConfigList) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.DevicePortConfigListLogType, "", - nilUUID, config.LogKey()) - logObject.CloneAndAddField("current-index-int64", config.CurrentIndex). - AddField("num-portconfig-int64", len(config.PortConfigList)). - Noticef("DevicePortConfigList delete") - - base.DeleteLogObject(logBase, config.LogKey()) -} - -// LogKey : -func (config DevicePortConfigList) LogKey() string { - return string(base.DevicePortConfigListLogType) + "-" + config.PubKey() -} - -// DPCState tracks the progression a DPC verification. -type DPCState uint8 - -const ( - // DPCStateNone : undefined state. - DPCStateNone DPCState = iota - // DPCStateFail : DPC verification failed. - DPCStateFail - // DPCStateFailWithIPAndDNS : failed to reach controller but has IP/DNS. - DPCStateFailWithIPAndDNS - // DPCStateSuccess : DPC verification succeeded. - DPCStateSuccess - // DPCStateIPDNSWait : waiting for interface IP address(es) and/or DNS server(s). - DPCStateIPDNSWait - // DPCStatePCIWait : waiting for some interface to come from pciback. - DPCStatePCIWait - // DPCStateIntfWait : waiting for some interface to appear in the network stack. - DPCStateIntfWait - // DPCStateRemoteWait : DPC verification failed because controller is down - // or has old certificate. - DPCStateRemoteWait - // DPCStateAsyncWait : waiting for some config operations to finalize which are - // running asynchronously in the background. - DPCStateAsyncWait -) - -// String returns the string name -func (status DPCState) String() string { - switch status { - case DPCStateNone: - return "" - case DPCStateFail: - return "DPC_FAIL" - case DPCStateFailWithIPAndDNS: - return "DPC_FAIL_WITH_IPANDDNS" - case DPCStateSuccess: - return "DPC_SUCCESS" - case DPCStateIPDNSWait: - return "DPC_IPDNS_WAIT" - case DPCStatePCIWait: - return "DPC_PCI_WAIT" - case DPCStateIntfWait: - return "DPC_INTF_WAIT" - case DPCStateRemoteWait: - return "DPC_REMOTE_WAIT" - case DPCStateAsyncWait: - return "DPC_ASYNC_WAIT" - default: - return fmt.Sprintf("Unknown status %d", status) - } -} - -// DevicePortConfig is a misnomer in that it includes the total test results -// plus the test results for a given port. The complete status with -// IP addresses lives in DeviceNetworkStatus -type DevicePortConfig struct { - Version DevicePortConfigVersion - Key string - TimePriority time.Time // All zero's is fallback lowest priority - State DPCState - ShaFile string // File in which to write ShaValue once DevicePortConfigList published - ShaValue []byte - TestResults - LastIPAndDNS time.Time // Time when we got some IP addresses and DNS - - Ports []NetworkPortConfig -} - -// PubKey is used for pubsub. Key string plus TimePriority -func (config DevicePortConfig) PubKey() string { - return config.Key + "@" + config.TimePriority.UTC().Format(time.RFC3339Nano) -} - -// LogCreate : -func (config DevicePortConfig) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.DevicePortConfigLogType, "", - nilUUID, config.LogKey()) - if logObject == nil { - return - } - logObject.CloneAndAddField("ports-int64", len(config.Ports)). - AddField("last-failed", config.LastFailed). - AddField("last-succeeded", config.LastSucceeded). - AddField("last-error", config.LastError). - AddField("state", config.State.String()). - Noticef("DevicePortConfig create") - for _, p := range config.Ports { - // XXX different logobject for a particular port? - logObject.CloneAndAddField("ifname", p.IfName). - AddField("last-error", p.LastError). - AddField("last-succeeded", p.LastSucceeded). - AddField("last-failed", p.LastFailed). - Noticef("DevicePortConfig port create") - } -} - -// LogModify : -func (config DevicePortConfig) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.DevicePortConfigLogType, "", - nilUUID, config.LogKey()) - - oldConfig, ok := old.(DevicePortConfig) - if !ok { - logObject.Clone().Fatalf("LogModify: Old object interface passed is not of DevicePortConfig type") - } - if len(oldConfig.Ports) != len(config.Ports) || - oldConfig.LastFailed != config.LastFailed || - oldConfig.LastSucceeded != config.LastSucceeded || - oldConfig.LastError != config.LastError || - oldConfig.State != config.State { - - logData := logObject.CloneAndAddField("ports-int64", len(config.Ports)). - AddField("last-failed", config.LastFailed). - AddField("last-succeeded", config.LastSucceeded). - AddField("last-error", config.LastError). - AddField("state", config.State.String()). - AddField("old-ports-int64", len(oldConfig.Ports)). - AddField("old-last-failed", oldConfig.LastFailed). - AddField("old-last-succeeded", oldConfig.LastSucceeded). - AddField("old-last-error", oldConfig.LastError). - AddField("old-state", oldConfig.State.String()) - if len(oldConfig.Ports) == len(config.Ports) && - config.LastFailed == oldConfig.LastFailed && - config.LastError == oldConfig.LastError && - oldConfig.State == config.State && - config.LastSucceeded.After(oldConfig.LastFailed) && - oldConfig.LastSucceeded.After(oldConfig.LastFailed) { - // if we have success again, reduce log level - logData.Function("DevicePortConfig port modify") - } else { - logData.Notice("DevicePortConfig port modify") - } - } - // XXX which fields to compare/log? - for i, p := range config.Ports { - if len(oldConfig.Ports) <= i { - continue - } - op := oldConfig.Ports[i] - // XXX different logobject for a particular port? - if p.HasError() != op.HasError() || - p.LastFailed != op.LastFailed || - p.LastSucceeded != op.LastSucceeded || - p.LastError != op.LastError { - logData := logObject.CloneAndAddField("ifname", p.IfName). - AddField("last-error", p.LastError). - AddField("last-succeeded", p.LastSucceeded). - AddField("last-failed", p.LastFailed). - AddField("old-last-error", op.LastError). - AddField("old-last-succeeded", op.LastSucceeded). - AddField("old-last-failed", op.LastFailed) - if p.HasError() == op.HasError() && - p.LastFailed == op.LastFailed && - p.LastError == op.LastError && - p.LastSucceeded.After(op.LastFailed) && - op.LastSucceeded.After(op.LastFailed) { - // if we have success again, reduce log level - logData.Function("DevicePortConfig port modify") - } else { - logData.Notice("DevicePortConfig port modify") - } - } - } -} - -// LogDelete : -func (config DevicePortConfig) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.DevicePortConfigLogType, "", - nilUUID, config.LogKey()) - logObject.CloneAndAddField("ports-int64", len(config.Ports)). - AddField("last-failed", config.LastFailed). - AddField("last-succeeded", config.LastSucceeded). - AddField("last-error", config.LastError). - AddField("state", config.State.String()). - Noticef("DevicePortConfig delete") - for _, p := range config.Ports { - // XXX different logobject for a particular port? - logObject.CloneAndAddField("ifname", p.IfName). - AddField("last-error", p.LastError). - AddField("last-succeeded", p.LastSucceeded). - AddField("last-failed", p.LastFailed). - Noticef("DevicePortConfig port delete") - } - - base.DeleteLogObject(logBase, config.LogKey()) -} - -// LogKey : -func (config DevicePortConfig) LogKey() string { - return string(base.DevicePortConfigLogType) + "-" + config.PubKey() -} - -// LookupPortByIfName returns port configuration for the given interface. -func (config *DevicePortConfig) LookupPortByIfName(ifName string) *NetworkPortConfig { - if config != nil { - for _, port := range config.Ports { - if port.IfName == ifName { - return &port - } - } - } - return nil -} - -// LookupPortByLogicallabel returns port configuration referenced by the logical label. -func (config *DevicePortConfig) LookupPortByLogicallabel( - label string) *NetworkPortConfig { - for _, port := range config.Ports { - if port.Logicallabel == label { - return &port - } - } - return nil -} - -// TestResults is used to record when some test Failed or Succeeded. -// All zeros timestamps means it was never tested. -type TestResults struct { - LastFailed time.Time - LastSucceeded time.Time - LastError string // Set when LastFailed is updated -} - -// RecordSuccess records a success -// Keeps the LastFailed in place as history -func (trPtr *TestResults) RecordSuccess() { - trPtr.LastSucceeded = time.Now() - trPtr.LastError = "" -} - -// RecordFailure records a failure -// Keeps the LastSucceeded in place as history -func (trPtr *TestResults) RecordFailure(errStr string) { - if errStr == "" { - logrus.Fatal("Missing error string") - } - trPtr.LastFailed = time.Now() - trPtr.LastError = errStr -} - -// HasError returns true if there is an error -// Returns false if it was never tested i.e., both timestamps zero -func (trPtr *TestResults) HasError() bool { - return trPtr.LastFailed.After(trPtr.LastSucceeded) -} - -// Update uses the src to add info to the results -// If src has newer information for the 'other' part we update that as well. -func (trPtr *TestResults) Update(src TestResults) { - if src.HasError() { - trPtr.LastFailed = src.LastFailed - trPtr.LastError = src.LastError - if src.LastSucceeded.After(trPtr.LastSucceeded) { - trPtr.LastSucceeded = src.LastSucceeded - } - } else { - trPtr.LastSucceeded = src.LastSucceeded - trPtr.LastError = "" - if src.LastFailed.After(trPtr.LastFailed) { - trPtr.LastFailed = src.LastFailed - } - } -} - -// Clear test results. -func (trPtr *TestResults) Clear() { - trPtr.LastFailed = time.Time{} - trPtr.LastSucceeded = time.Time{} - trPtr.LastError = "" -} - -type DevicePortConfigVersion uint32 - -// GetPortByIfName - DevicePortConfig method to get config pointer -func (config *DevicePortConfig) GetPortByIfName( - ifname string) *NetworkPortConfig { - for indx := range config.Ports { - portPtr := &config.Ports[indx] - if ifname == portPtr.IfName { - return portPtr - } - } - return nil -} +// AppNetAdapterConfig : configuration for one application network adapter. +type AppNetAdapterConfig struct { + Name string // From proto message + AppMacAddr net.HardwareAddr // If set use it for vif + AppIPAddr net.IP // If set use DHCP to assign to app + IntfOrder int32 // XXX need to get from API -// RecordPortSuccess - Record for given ifname in PortConfig -func (config *DevicePortConfig) RecordPortSuccess(ifname string) { - portPtr := config.GetPortByIfName(ifname) - if portPtr != nil { - portPtr.RecordSuccess() - } + // XXX Shouldn't we use ErrorAndTime here + // Error + // If there is a parsing error and this AppNetAdapterNetwork config cannot be + // processed, set the error here. This allows the error to be propagated + // back to zedcloud + Error string + Network uuid.UUID // Points to a NetworkInstance. + ACLs []ACE + AccessVlanID uint32 + IfIdx uint32 // If we have multiple interfaces on that network, we will increase the index } -// RecordPortFailure - Record for given ifname in PortConfig -func (config *DevicePortConfig) RecordPortFailure(ifname string, errStr string) { - portPtr := config.GetPortByIfName(ifname) - if portPtr != nil { - portPtr.RecordFailure(errStr) - } -} +// ACEDirection determines rule direction. +type ACEDirection uint8 -// When new fields and/or new semantics are added to DevicePortConfig a new -// version value is added here. const ( - DPCInitial DevicePortConfigVersion = iota - DPCIsMgmt // Require IsMgmt to be set for management ports + // AceDirBoth : Rule applies in both directions + AceDirBoth ACEDirection = iota + // AceDirIngress : Rules applies in Ingress direction (from internet to app) + AceDirIngress ACEDirection = 1 + // AceDirEgress : Rules applies in Egress direction (from app to internet) + AceDirEgress ACEDirection = 2 ) -// DoSanitize - -func (config *DevicePortConfig) DoSanitize(log *base.LogObject, - sanitizeTimePriority bool, sanitizeKey bool, key string, - sanitizeName, sanitizeL3Port bool) { - - if sanitizeTimePriority { - zeroTime := time.Time{} - if config.TimePriority == zeroTime { - // A json override file should really contain a - // timepriority field so we can determine whether - // it or the information received from the controller - // is more current. - // If we can stat the file we use 1980, otherwise - // we use 1970; using the modify time of the file - // is too unpredictable. - _, err1 := os.Stat(fmt.Sprintf("%s/DevicePortConfig/%s.json", - TmpDirname, key)) - _, err2 := os.Stat(fmt.Sprintf("%s/DevicePortConfig/%s.json", - IdentityDirname, key)) - if err1 == nil || err2 == nil { - config.TimePriority = time.Date(1980, - time.January, 1, 0, 0, 0, 0, time.UTC) - } else { - config.TimePriority = time.Date(1970, - time.January, 1, 0, 0, 0, 0, time.UTC) - } - log.Warnf("DoSanitize: Forcing TimePriority for %s to %v", - key, config.TimePriority) - } - } - if sanitizeKey { - if config.Key == "" { - config.Key = key - log.Noticef("DoSanitize: Forcing Key for %s TS %v\n", - key, config.TimePriority) - } - } - if sanitizeName { - // In case Phylabel isn't set we make it match IfName. Ditto for Logicallabel - // XXX still needed? - for i := range config.Ports { - port := &config.Ports[i] - if port.Phylabel == "" { - port.Phylabel = port.IfName - log.Functionf("XXX DoSanitize: Forcing Phylabel for %s ifname %s\n", - key, port.IfName) - } - if port.Logicallabel == "" { - port.Logicallabel = port.IfName - log.Functionf("XXX DoSanitize: Forcing Logicallabel for %s ifname %s\n", - key, port.IfName) - } - } - } - if sanitizeL3Port { - // IsL3Port flag was introduced to NetworkPortConfig in 7.3.0 - // It is used to differentiate between L3 ports (with IP/DNS config) - // and intermediate L2-only ports (bond slaves, VLAN parents, etc.). - // Before 7.3.0, EVE didn't support L2-only adapters and all uplink ports - // were L3 endpoints. - // However, even with VLANs and bonds there has to be at least one L3 - // port (L2 adapters are only intermediates with L3 endpoint(s) at the top). - // This means that to support upgrade from older EVE versions, - // we can simply check if there is at least one L3 port, and if not, it means - // that we are dealing with an older persisted/override DPC, where all - // ports should be marked as L3. - var hasL3Port bool - for _, port := range config.Ports { - hasL3Port = hasL3Port || port.IsL3Port - } - if !hasL3Port { - for i := range config.Ports { - config.Ports[i].IsL3Port = true - } - } - } +// ACE definition is very similar to draft-ietf-netmod-acl-model +type ACE struct { + Matches []ACEMatch + Actions []ACEAction + Name string + RuleID int32 + Dir ACEDirection } -// CountMgmtPorts returns the number of management ports -// Exclude any broken ones with Dhcp = DT_NONE -func (config *DevicePortConfig) CountMgmtPorts() int { - - count := 0 - for _, port := range config.Ports { - if port.IsMgmt && port.Dhcp != DT_NONE { - count++ - } - } - return count +// ACEMatch determines which traffic is matched by a given ACE. +// The Type can be "ip" or "host" (aka domain name), "eidset", "protocol", +// "fport", or "lport" for now. The ip and host matches the remote IP/hostname. +// The host matching is suffix-matching thus zededa.net matches *.zededa.net. +// XXX Need "interface"... e.g. "uplink" or "eth1"? Implicit in network used? +// For now the matches are bidirectional. +// XXX Add directionality? Different rate limits in different directions? +// Value is always a string. +// There is an implicit reject rule at the end. +// The "eidset" type is special for the overlay. Matches all the IPs which +// are part of the DNSNameToIPList. +type ACEMatch struct { + Type string + Value string } -// MostlyEqual compares two DevicePortConfig but skips things that are -// more of status such as the timestamps and the TestResults -// XXX Compare Version or not? -// We compare the Ports in array order. -func (config *DevicePortConfig) MostlyEqual(config2 *DevicePortConfig) bool { - - if config.Key != config2.Key { - return false - } - if len(config.Ports) != len(config2.Ports) { - return false - } - for i, p1 := range config.Ports { - p2 := config2.Ports[i] - if p1.IfName != p2.IfName || - p1.Phylabel != p2.Phylabel || - p1.Logicallabel != p2.Logicallabel || - p1.Alias != p2.Alias || - p1.IsMgmt != p2.IsMgmt || - p1.Cost != p2.Cost { - return false - } - if !reflect.DeepEqual(p1.DhcpConfig, p2.DhcpConfig) || - !reflect.DeepEqual(p1.ProxyConfig, p2.ProxyConfig) || - !reflect.DeepEqual(p1.WirelessCfg, p2.WirelessCfg) { - return false - } - } - return true -} +// ACEAction decides what to do with traffic matched by a given ACE. +type ACEAction struct { + Drop bool // Otherwise accept -// IsDPCTestable - Return false if recent failure (less than "minTimeSinceFailure") -// Also returns false if it isn't usable -func (config DevicePortConfig) IsDPCTestable(minTimeSinceFailure time.Duration) bool { - if !config.IsDPCUsable() { - return false - } - if config.LastFailed.IsZero() { - return true - } - if config.LastSucceeded.After(config.LastFailed) { - return true - } - return time.Since(config.LastFailed) >= minTimeSinceFailure -} + Limit bool // Is limiter enabled? + LimitRate int // Packets per unit + LimitUnit string // "s", "m", "h", for second, minute, hour + LimitBurst int // Packets -// IsDPCUntested - returns true if this is something we might want to test now. -// Checks if it is Usable since there is no point in testing unusable things. -func (config DevicePortConfig) IsDPCUntested() bool { - if config.LastFailed.IsZero() && config.LastSucceeded.IsZero() && - config.IsDPCUsable() { - return true - } - return false -} - -// IsDPCUsable - checks whether something is invalid; no management IP -// addresses means it isn't usable hence we return false if none. -func (config DevicePortConfig) IsDPCUsable() bool { - mgmtCount := config.CountMgmtPorts() - return mgmtCount > 0 -} - -// WasDPCWorking - Check if the last results for the DPC was Success -func (config DevicePortConfig) WasDPCWorking() bool { - - if config.LastSucceeded.IsZero() { - return false - } - if config.LastSucceeded.After(config.LastFailed) { - return true - } - return false -} - -// UpdatePortStatusFromIntfStatusMap - Set TestResults for ports in DevicePortConfig to -// those from intfStatusMap. If a port is not found in intfStatusMap, it means -// the port was not tested, so we retain the original TestResults for the port. -func (config *DevicePortConfig) UpdatePortStatusFromIntfStatusMap( - intfStatusMap IntfStatusMap) { - for indx := range config.Ports { - portPtr := &config.Ports[indx] - tr, ok := intfStatusMap.StatusMap[portPtr.IfName] - if ok { - portPtr.TestResults.Update(tr) - } - // Else - Port not tested hence no change - } -} - -type NetworkProxyType uint8 - -// Values if these definitions should match the values -// given to the types in zapi.ProxyProto -const ( - NPT_HTTP NetworkProxyType = iota - NPT_HTTPS - NPT_SOCKS - NPT_FTP - NPT_NOPROXY - NPT_LAST = 255 -) - -// WifiKeySchemeType - types of key management -type WifiKeySchemeType uint8 - -// Key Scheme type -const ( - KeySchemeNone WifiKeySchemeType = iota // enum for key scheme - KeySchemeWpaPsk - KeySchemeWpaEap - KeySchemeOther -) - -// WirelessType - types of wireless media -type WirelessType uint8 - -// enum wireless type -const ( - WirelessTypeNone WirelessType = iota // enum for wireless type - WirelessTypeCellular - WirelessTypeWifi -) - -type ProxyEntry struct { - Type NetworkProxyType `json:"type"` - Server string `json:"server"` - Port uint32 `json:"port"` -} - -type ProxyConfig struct { - Proxies []ProxyEntry - Exceptions string - Pacfile string - // If Enable is set we use WPAD. If the URL is not set we try - // the various DNS suffixes until we can download a wpad.dat file - NetworkProxyEnable bool // Enable WPAD - NetworkProxyURL string // Complete URL i.e., with /wpad.dat - WpadURL string // The URL determined from DNS - // List of certs which will be added to TLS trust - ProxyCertPEM [][]byte `json:"pubsub-large-ProxyCertPEM"` -} - -type DhcpConfig struct { - Dhcp DhcpType // If DT_STATIC use below; if DT_NONE do nothing - AddrSubnet string // In CIDR e.g., 192.168.1.44/24 - Gateway net.IP - DomainName string - NtpServer net.IP - DnsServers []net.IP // If not set we use Gateway as DNS server - Type NetworkType // IPv4 or IPv6 or Dual stack -} - -// WifiConfig - Wifi structure -type WifiConfig struct { - SSID string // wifi SSID - KeyScheme WifiKeySchemeType // such as WPA-PSK, WPA-EAP - - // XXX: to be deprecated, use CipherBlockStatus instead - Identity string // identity or username for WPA-EAP - - // XXX: to be deprecated, use CipherBlockStatus instead - Password string // string of pass phrase or password hash - Priority int32 - - // CipherBlockStatus, for encrypted credentials - CipherBlockStatus -} - -// CellConfig - Cellular part of the configure -type CellConfig struct { - APN string // LTE APN - ProbeAddr string - DisableProbe bool - // Enable to get location info from the GNSS receiver of the LTE modem. - LocationTracking bool -} - -// WirelessConfig - wireless structure -type WirelessConfig struct { - WType WirelessType // Wireless Type - Cellular []CellConfig // LTE APN - Wifi []WifiConfig // Wifi Config params -} - -// WirelessStatus : state information for a single wireless device -type WirelessStatus struct { - WType WirelessType - Cellular WwanNetworkStatus - // TODO: Wifi status -} - -const ( - // PortCostMin is the lowest cost - PortCostMin = uint8(0) - // PortCostMax is the highest cost - PortCostMax = uint8(255) -) - -// L2LinkType - supported types of an L2 link -type L2LinkType uint8 - -const ( - // L2LinkTypeNone : not an L2 link (used for physical network adapters). - L2LinkTypeNone L2LinkType = iota - // L2LinkTypeVLAN : VLAN sub-interface - L2LinkTypeVLAN - // L2LinkTypeBond : Bond interface - L2LinkTypeBond -) - -// L2LinkConfig - contains either VLAN or Bond interface configuration, -// depending on the L2Type. -type L2LinkConfig struct { - L2Type L2LinkType - VLAN VLANConfig - Bond BondConfig -} - -// VLANConfig - VLAN sub-interface configuration. -type VLANConfig struct { - // Logical name of the parent port. - ParentPort string - // VLAN ID. - ID uint16 -} - -// BondMode specifies the policy indicating how bonding slaves are used -// during network transmissions. -type BondMode uint8 - -const ( - // BondModeUnspecified : default is Round-Robin - BondModeUnspecified BondMode = iota - // BondModeBalanceRR : Round-Robin - BondModeBalanceRR - // BondModeActiveBackup : Active/Backup - BondModeActiveBackup - // BondModeBalanceXOR : select slave for a packet using a hash function - BondModeBalanceXOR - // BondModeBroadcast : send every packet on all slaves - BondModeBroadcast - // BondMode802Dot3AD : IEEE 802.3ad Dynamic link aggregation - BondMode802Dot3AD - // BondModeBalanceTLB : Adaptive transmit load balancing - BondModeBalanceTLB - // BondModeBalanceALB : Adaptive load balancing - BondModeBalanceALB -) - -// LacpRate specifies the rate in which EVE will ask LACP link partners -// to transmit LACPDU packets in 802.3ad mode. -type LacpRate uint8 - -const ( - // LacpRateUnspecified : default is Slow. - LacpRateUnspecified LacpRate = iota - // LacpRateSlow : Request partner to transmit LACPDUs every 30 seconds. - LacpRateSlow - // LacpRateFast : Request partner to transmit LACPDUs every 1 second. - LacpRateFast -) - -// BondConfig - Bond (LAG) interface configuration. -type BondConfig struct { - // Logical names of PhysicalIO network adapters aggregated by this bond. - AggregatedPorts []string - - // Bonding policy. - Mode BondMode - - // LACPDU packets transmission rate. - // Applicable for BondMode802Dot3AD only. - LacpRate LacpRate - - // Link monitoring is either disabled or one of the monitors - // is enabled, never both at the same time. - MIIMonitor BondMIIMonitor - ARPMonitor BondArpMonitor -} - -// BondMIIMonitor : MII link monitoring parameters (see devmodel.proto for description). -type BondMIIMonitor struct { - Enabled bool - Interval uint32 - UpDelay uint32 - DownDelay uint32 -} - -// BondArpMonitor : ARP-based link monitoring parameters (see devmodel.proto for description). -type BondArpMonitor struct { - Enabled bool - Interval uint32 - IPTargets []net.IP -} - -// NetworkPortConfig has the configuration and some status like TestResults -// for one IfName. -// XXX odd to have ParseErrors and/or TestResults here but we don't have -// a corresponding Status struct. -// Note that if fields are added the MostlyEqual function needs to be updated. -type NetworkPortConfig struct { - IfName string - Phylabel string // Physical name set by controller/model - Logicallabel string // SystemAdapter's name which is logical label in phyio - Alias string // From SystemAdapter's alias - // NetworkUUID - UUID of the Network Object configured for the port. - NetworkUUID uuid.UUID - IsMgmt bool // Used to talk to controller - IsL3Port bool // True if port is applicable to operate on the network layer - Cost uint8 // Zero is free - DhcpConfig - ProxyConfig - L2LinkConfig - WirelessCfg WirelessConfig - // TestResults - Errors from parsing plus success/failure from testing - TestResults -} - -type NetworkPortStatus struct { - IfName string - Phylabel string // Physical name set by controller/model - Logicallabel string - Alias string // From SystemAdapter's alias - IsMgmt bool // Used to talk to controller - IsL3Port bool // True if port is applicable to operate on the network layer - Cost uint8 - Dhcp DhcpType - Type NetworkType // IPv4 or IPv6 or Dual stack - Subnet net.IPNet - NtpServer net.IP // This comes from network instance configuration - DomainName string - DNSServers []net.IP // If not set we use Gateway as DNS server - NtpServers []net.IP // This comes from DHCP done on uplink port - AddrInfoList []AddrInfo - Up bool - MacAddr string - DefaultRouters []net.IP - WirelessCfg WirelessConfig - WirelessStatus WirelessStatus - ProxyConfig - L2LinkConfig - // TestResults provides recording of failure and success - TestResults -} - -// HasIPAndDNS - Check if the given port has a valid unicast IP along with DNS & Gateway. -func (port NetworkPortStatus) HasIPAndDNS() bool { - foundUnicast := false - - for _, addr := range port.AddrInfoList { - if !addr.Addr.IsLinkLocalUnicast() { - foundUnicast = true - } - } - - if foundUnicast && len(port.DefaultRouters) > 0 && len(port.DNSServers) > 0 { - return true - } - - return false -} - -type AddrInfo struct { - Addr net.IP - Geo ipinfo.IPInfo - LastGeoTimestamp time.Time -} - -// DeviceNetworkStatus is published to microservices which needs to know about ports and IP addresses -// It is published under the key "global" only -type DeviceNetworkStatus struct { - DPCKey string // For logs/testing - Version DevicePortConfigVersion // From DevicePortConfig - Testing bool // Ignore since it is not yet verified - State DPCState // Details about testing state - CurrentIndex int // For logs - RadioSilence RadioSilence // The actual state of the radio-silence mode - Ports []NetworkPortStatus -} - -// Key is used for pubsub -func (status DeviceNetworkStatus) Key() string { - return "global" -} - -// LogCreate : -func (status DeviceNetworkStatus) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.DeviceNetworkStatusLogType, "", - nilUUID, status.LogKey()) - if logObject == nil { - return - } - logObject.CloneAndAddField("testing-bool", status.Testing). - AddField("ports-int64", len(status.Ports)). - AddField("state", status.State.String()). - AddField("current-index-int64", status.CurrentIndex). - Noticef("DeviceNetworkStatus create") - for _, p := range status.Ports { - // XXX different logobject for a particular port? - logObject.CloneAndAddField("ifname", p.IfName). - AddField("last-error", p.LastError). - AddField("last-succeeded", p.LastSucceeded). - AddField("last-failed", p.LastFailed). - Noticef("DeviceNetworkStatus port create") - } -} - -// LogModify : -func (status DeviceNetworkStatus) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.DeviceNetworkStatusLogType, "", - nilUUID, status.LogKey()) - - oldStatus, ok := old.(DeviceNetworkStatus) - if !ok { - logObject.Clone().Fatalf("LogModify: Old object interface passed is not of DeviceNetworkStatus type") - } - if oldStatus.Testing != status.Testing || - oldStatus.State != status.State || - oldStatus.CurrentIndex != status.CurrentIndex || - len(oldStatus.Ports) != len(status.Ports) { - - logData := logObject.CloneAndAddField("testing-bool", status.Testing). - AddField("ports-int64", len(status.Ports)). - AddField("state", status.State.String()). - AddField("current-index-int64", status.CurrentIndex). - AddField("old-testing-bool", oldStatus.Testing). - AddField("old-ports-int64", len(oldStatus.Ports)). - AddField("old-state", oldStatus.State.String()). - AddField("old-current-index-int64", oldStatus.CurrentIndex) - - if oldStatus.State == status.State && oldStatus.CurrentIndex == status.CurrentIndex && - len(oldStatus.Ports) == len(status.Ports) { - // if only testing state changed, reduce log level - logData.Function("DeviceNetworkStatus modify") - } else { - logData.Notice("DeviceNetworkStatus modify") - } - } - // XXX which fields to compare/log? - for i, p := range status.Ports { - if len(oldStatus.Ports) <= i { - continue - } - op := oldStatus.Ports[i] - // XXX different logobject for a particular port? - if p.HasError() != op.HasError() || - p.LastFailed != op.LastFailed || - p.LastSucceeded != op.LastSucceeded || - p.LastError != op.LastError { - logData := logObject.CloneAndAddField("ifname", p.IfName). - AddField("last-error", p.LastError). - AddField("last-succeeded", p.LastSucceeded). - AddField("last-failed", p.LastFailed). - AddField("old-last-error", op.LastError). - AddField("old-last-succeeded", op.LastSucceeded). - AddField("old-last-failed", op.LastFailed) - if p.HasError() == op.HasError() && - p.LastFailed == op.LastFailed && - p.LastError == op.LastError && - p.LastSucceeded.After(op.LastFailed) && - op.LastSucceeded.After(op.LastFailed) { - // if we have success again, reduce log level - logData.Function("DeviceNetworkStatus port modify") - } else { - logData.Notice("DeviceNetworkStatus port modify") - } - } - } -} - -// LogDelete : -func (status DeviceNetworkStatus) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.DeviceNetworkStatusLogType, "", - nilUUID, status.LogKey()) - logObject.CloneAndAddField("testing-bool", status.Testing). - AddField("ports-int64", len(status.Ports)). - AddField("state", status.State.String()). - Noticef("DeviceNetworkStatus instance status delete") - for _, p := range status.Ports { - // XXX different logobject for a particular port? - logObject.CloneAndAddField("ifname", p.IfName). - AddField("last-error", p.LastError). - AddField("last-succeeded", p.LastSucceeded). - AddField("last-failed", p.LastFailed). - Noticef("DeviceNetworkStatus port delete") - } - - base.DeleteLogObject(logBase, status.LogKey()) -} - -// LogKey : -func (status DeviceNetworkStatus) LogKey() string { - return string(base.DeviceNetworkStatusLogType) + "-" + status.Key() -} - -// MostlyEqual compares two DeviceNetworkStatus but skips things the test status/results aspects, including State and Testing. -// We compare the Ports in array order. -func (status DeviceNetworkStatus) MostlyEqual(status2 DeviceNetworkStatus) bool { - - if len(status.Ports) != len(status2.Ports) { - return false - } - for i, p1 := range status.Ports { - p2 := status2.Ports[i] - if p1.IfName != p2.IfName || - p1.Phylabel != p2.Phylabel || - p1.Logicallabel != p2.Logicallabel || - p1.Alias != p2.Alias || - p1.IsMgmt != p2.IsMgmt || - p1.Cost != p2.Cost { - return false - } - if p1.Dhcp != p2.Dhcp || - !EqualSubnet(p1.Subnet, p2.Subnet) || - !p1.NtpServer.Equal(p2.NtpServer) || - p1.DomainName != p2.DomainName { - return false - } - if len(p1.DNSServers) != len(p2.DNSServers) { - return false - } - for i := range p1.DNSServers { - if !p1.DNSServers[i].Equal(p2.DNSServers[i]) { - return false - } - } - if len(p1.AddrInfoList) != len(p2.AddrInfoList) { - return false - } - for i := range p1.AddrInfoList { - if !p1.AddrInfoList[i].Addr.Equal(p2.AddrInfoList[i].Addr) { - return false - } - } - if p1.Up != p2.Up || - p1.MacAddr != p2.MacAddr { - return false - } - if len(p1.DefaultRouters) != len(p2.DefaultRouters) { - return false - } - for i := range p1.DefaultRouters { - if !p1.DefaultRouters[i].Equal(p2.DefaultRouters[i]) { - return false - } - } - - if !reflect.DeepEqual(p1.ProxyConfig, p2.ProxyConfig) || - !reflect.DeepEqual(p1.WirelessStatus, p2.WirelessStatus) { - return false - } - } - if !reflect.DeepEqual(status.RadioSilence, status2.RadioSilence) { - return false - } - return true -} - -// MostlyEqualStatus compares two DeviceNetworkStatus but skips things that are -// unimportant like just an increase in the success timestamp, but detects -// when a port changes to/from a failure. -func (status *DeviceNetworkStatus) MostlyEqualStatus(status2 DeviceNetworkStatus) bool { - - if !status.MostlyEqual(status2) { - return false - } - if status.State != status2.State || status.Testing != status2.Testing || - status.CurrentIndex != status2.CurrentIndex { - return false - } - if len(status.Ports) != len(status2.Ports) { - return false - } - for i, p1 := range status.Ports { - p2 := status2.Ports[i] - // Did we change to/from failure? - if p1.HasError() != p2.HasError() { - return false - } - } - return true -} - -// EqualSubnet compares two subnets; silently assumes contiguous masks -func EqualSubnet(subnet1, subnet2 net.IPNet) bool { - if !subnet1.IP.Equal(subnet2.IP) { - return false - } - len1, _ := subnet1.Mask.Size() - len2, _ := subnet2.Mask.Size() - return len1 == len2 -} - -// GetPortByIfName - Get Port Status for port with given Ifname -func (status *DeviceNetworkStatus) GetPortByIfName( - ifname string) *NetworkPortStatus { - for i := range status.Ports { - if status.Ports[i].IfName == ifname { - return &status.Ports[i] - } - } - return nil -} - -// GetPortsByLogicallabel - Get Port Status for all ports matching the given label. -func (status *DeviceNetworkStatus) GetPortsByLogicallabel( - label string) (ports []*NetworkPortStatus) { - // Check for shared labels first. - switch label { - case UplinkLabel: - for i := range status.Ports { - if status.Version >= DPCIsMgmt && !status.Ports[i].IsMgmt { - continue - } - ports = append(ports, &status.Ports[i]) - } - return ports - case FreeUplinkLabel: - for i := range status.Ports { - if status.Version >= DPCIsMgmt && !status.Ports[i].IsMgmt { - continue - } - if status.Ports[i].Cost > 0 { - continue - } - ports = append(ports, &status.Ports[i]) - } - return ports - } - // Label is referencing single port. - for i := range status.Ports { - if status.Ports[i].Logicallabel == label { - ports = append(ports, &status.Ports[i]) - return ports - } - } - return nil -} - -// HasErrors - DeviceNetworkStatus has errors on any of it's ports? -func (status DeviceNetworkStatus) HasErrors() bool { - for _, port := range status.Ports { - if port.HasError() { - return true - } - } - return false -} - -// GetPortAddrInfo returns address info for a given interface and its IP address. -func (status DeviceNetworkStatus) GetPortAddrInfo(ifname string, addr net.IP) *AddrInfo { - portStatus := status.GetPortByIfName(ifname) - if portStatus == nil { - return nil - } - for i := range portStatus.AddrInfoList { - if portStatus.AddrInfoList[i].Addr.Equal(addr) { - return &portStatus.AddrInfoList[i] - } - } - return nil -} - -func rotate(arr []string, amount int) []string { - if len(arr) == 0 { - return []string{} - } - amount = amount % len(arr) - return append(append([]string{}, arr[amount:]...), arr[:amount]...) -} - -// GetMgmtPortsSortedCost returns all management ports sorted by port cost -// rotation causes rotation/round-robin within each cost -func GetMgmtPortsSortedCost(globalStatus DeviceNetworkStatus, rotation int) []string { - return getPortsSortedCostImpl(globalStatus, rotation, - PortCostMax, true, false) -} - -// GetAllPortsSortedCost returns all ports (management and app shared) sorted by port cost. -// Rotation causes rotation/round-robin within each cost. -func GetAllPortsSortedCost(globalStatus DeviceNetworkStatus, rotation int) []string { - return getPortsSortedCostImpl(globalStatus, rotation, - PortCostMax, false, false) -} - -// GetMgmtPortsSortedCostWithoutFailed returns all management ports sorted by -// port cost ignoring ports with failures. -// rotation causes rotation/round-robin within each cost -func GetMgmtPortsSortedCostWithoutFailed(globalStatus DeviceNetworkStatus, rotation int) []string { - return getPortsSortedCostImpl(globalStatus, rotation, - PortCostMax, true, true) -} - -// getPortsSortedCostImpl returns all ports sorted by port cost -// up to and including the maxCost -func getPortsSortedCostImpl(globalStatus DeviceNetworkStatus, rotation int, maxCost uint8, - mgmtOnly, dropFailed bool) []string { - ifnameList := []string{} - costList := getPortCostListImpl(globalStatus, maxCost) - for _, cost := range costList { - ifnameList = append(ifnameList, - getPortsImpl(globalStatus, rotation, true, cost, mgmtOnly, dropFailed)...) - } - return ifnameList -} - -// GetMgmtPortsAny returns all management ports -func GetMgmtPortsAny(globalStatus DeviceNetworkStatus, rotation int) []string { - return getPortsImpl(globalStatus, rotation, false, 0, true, false) -} - -// GetMgmtPortsByCost returns all management ports with a given port cost -func GetMgmtPortsByCost(globalStatus DeviceNetworkStatus, cost uint8) []string { - return getPortsImpl(globalStatus, 0, true, cost, true, false) -} - -// Returns the IfNames. -func getPortsImpl(globalStatus DeviceNetworkStatus, rotation int, - matchCost bool, cost uint8, mgmtOnly, dropFailed bool) []string { - - var ifnameList []string - for _, us := range globalStatus.Ports { - if matchCost && us.Cost != cost { - continue - } - if mgmtOnly && globalStatus.Version >= DPCIsMgmt && - !us.IsMgmt { - continue - } - if dropFailed && us.HasError() { - continue - } - ifnameList = append(ifnameList, us.IfName) - } - return rotate(ifnameList, rotation) -} - -// GetPortCostList returns the sorted list of port costs -// with cost zero entries first. -func GetPortCostList(globalStatus DeviceNetworkStatus) []uint8 { - - return getPortCostListImpl(globalStatus, PortCostMax) -} - -// getPortCostListImpl returns the sorted port costs up to and including the max -func getPortCostListImpl(globalStatus DeviceNetworkStatus, maxCost uint8) []uint8 { - var costList []uint8 - for _, us := range globalStatus.Ports { - costList = append(costList, us.Cost) - } - if len(costList) == 0 { - return []uint8{} - } - // Need sort -u so separately we remove the duplicates - sort.Slice(costList, - func(i, j int) bool { return costList[i] < costList[j] }) - unique := make([]uint8, 0, len(costList)) - i := 0 - unique = append(unique, costList[0]) - for _, cost := range costList { - if cost != unique[i] && cost <= maxCost { - unique = append(unique, cost) - i++ - } - } - return unique -} - -// CountLocalAddrAnyNoLinkLocal returns the number of local IP addresses for -// all the management ports (for all port costs) excluding link-local addresses -func CountLocalAddrAnyNoLinkLocal(globalStatus DeviceNetworkStatus) int { - - // Count the number of addresses which apply - addrs, _ := getLocalAddrListImpl(globalStatus, "", PortCostMax, - false, 0) - return len(addrs) -} - -// CountLocalAddrAnyNoLinkLocalIf return number of local IP addresses for -// the interface excluding link-local addresses -func CountLocalAddrAnyNoLinkLocalIf(globalStatus DeviceNetworkStatus, - ifname string) (int, error) { - - if ifname == "" { - return 0, fmt.Errorf("ifname not specified") - } - // Count the number of addresses which apply - addrs, err := getLocalAddrListImpl(globalStatus, ifname, - PortCostMax, false, 0) - return len(addrs), err -} - -// CountLocalAddrNoLinkLocalWithCost is like CountLocalAddrAnyNoLinkLocal but -// in addition allows the caller to specify the cost between -// PortCostMin (0) and PortCostMax(255). -// If 0 is specified it only considers cost 0 ports. -// if 255 is specified it considers all the ports. -func CountLocalAddrNoLinkLocalWithCost(globalStatus DeviceNetworkStatus, - maxCost uint8) int { - - // Count the number of addresses which apply - addrs, _ := getLocalAddrListImpl(globalStatus, "", maxCost, - false, 0) - return len(addrs) -} - -// CountLocalIPv4AddrAnyNoLinkLocal is like CountLocalAddrAnyNoLinkLocal but -// only IPv4 addresses are counted -func CountLocalIPv4AddrAnyNoLinkLocal(globalStatus DeviceNetworkStatus) int { - - // Count the number of addresses which apply - addrs, _ := getLocalAddrListImpl(globalStatus, "", PortCostMax, - false, 4) - return len(addrs) -} - -// CountDNSServers returns the number of DNS servers; for ifname if set -func CountDNSServers(globalStatus DeviceNetworkStatus, ifname string) int { - - count := 0 - for _, us := range globalStatus.Ports { - if us.IfName != ifname && ifname != "" { - continue - } - count += len(us.DNSServers) - } - return count -} - -// GetDNSServers returns all, or the ones on one interface if ifname is set -func GetDNSServers(globalStatus DeviceNetworkStatus, ifname string) []net.IP { - - var servers []net.IP - for _, us := range globalStatus.Ports { - if !us.IsMgmt && ifname == "" { - continue - } - if ifname != "" && ifname != us.IfName { - continue - } - for _, server := range us.DNSServers { - servers = append(servers, server) - } - } - return servers -} - -// GetNTPServers returns all, or the ones on one interface if ifname is set -func GetNTPServers(globalStatus DeviceNetworkStatus, ifname string) []net.IP { - - var servers []net.IP - for _, us := range globalStatus.Ports { - if ifname != "" && ifname != us.IfName { - continue - } - servers = append(servers, us.NtpServers...) - // Add statically configured NTP server as well, but avoid duplicates. - if us.NtpServer != nil { - var found bool - for _, server := range servers { - if server.Equal(us.NtpServer) { - found = true - break - } - } - if !found { - servers = append(servers, us.NtpServer) - } - } - } - return servers -} - -// CountLocalIPv4AddrAnyNoLinkLocalIf is like CountLocalAddrAnyNoLinkLocalIf but -// only IPv4 addresses are counted -func CountLocalIPv4AddrAnyNoLinkLocalIf(globalStatus DeviceNetworkStatus, - ifname string) (int, error) { - - if ifname == "" { - return 0, fmt.Errorf("ifname not specified") - } - // Count the number of addresses which apply - addrs, err := getLocalAddrListImpl(globalStatus, ifname, - PortCostMax, false, 4) - return len(addrs), err -} - -// GetLocalAddrAnyNoLinkLocal is used to pick one address from: -// - ifname if set. -// - otherwise from all of the management ports -// Excludes link-local addresses. -// The addresses are sorted in cost order thus as the caller starts with -// pickNum zero and increases it will use the ports in cost order. -func GetLocalAddrAnyNoLinkLocal(globalStatus DeviceNetworkStatus, pickNum int, - ifname string) (net.IP, error) { - - includeLinkLocal := false - return getLocalAddrImpl(globalStatus, pickNum, ifname, - PortCostMax, includeLinkLocal, 0) -} - -// GetLocalAddrNoLinkLocalWithCost is like GetLocalAddrNoLinkLocal but -// in addition allows the caller to specify the cost between -// PortCostMin (0) and PortCostMax(255). -// If 0 is specified it only considers local addresses on cost zero ports; -// if 255 is specified it considers all the local addresses. -func GetLocalAddrNoLinkLocalWithCost(globalStatus DeviceNetworkStatus, pickNum int, - ifname string, maxCost uint8) (net.IP, error) { - - includeLinkLocal := false - return getLocalAddrImpl(globalStatus, pickNum, ifname, - maxCost, includeLinkLocal, 0) -} - -// getLocalAddrImpl returns an IP address based on interfaces sorted in -// cost order. If ifname is set, the addresses are from that -// interface. Otherwise from all management interfaces up to and including maxCost. -// af can be set to 0 (any), 4, IPv4), or 6 (IPv6) to select the family. -func getLocalAddrImpl(globalStatus DeviceNetworkStatus, pickNum int, - ifname string, maxCost uint8, includeLinkLocal bool, - af uint) (net.IP, error) { - - addrs, err := getLocalAddrListImpl(globalStatus, ifname, - maxCost, includeLinkLocal, af) - if err != nil { - return net.IP{}, err - } - numAddrs := len(addrs) - if numAddrs == 0 { - return net.IP{}, fmt.Errorf("no addresses") - } - pickNum = pickNum % numAddrs - return addrs[pickNum], nil -} - -// getLocalAddrListImpl returns a list IP addresses based on interfaces sorted -// in cost order. If ifname is set, the addresses are from that -// interface. Otherwise from all management interfaces up to and including maxCost -// af can be set to 0 (any), 4, IPv4), or 6 (IPv6) to select a subset. -func getLocalAddrListImpl(globalStatus DeviceNetworkStatus, - ifname string, maxCost uint8, includeLinkLocal bool, - af uint) ([]net.IP, error) { - - var ifnameList []string - var ignoreErrors bool - if ifname == "" { - // Get interfaces in cost order - ifnameList = getPortsSortedCostImpl(globalStatus, 0, - maxCost, true, false) - // If we are looking across all interfaces, then We ignore errors - // since we get them if there are no addresses on a ports - ignoreErrors = true - } else { - us := GetPort(globalStatus, ifname) - if us == nil { - return []net.IP{}, fmt.Errorf("Unknown interface %s", - ifname) - } - if us.Cost > maxCost { - return []net.IP{}, fmt.Errorf("Interface %s cost %d exceeds maxCost %d", - ifname, us.Cost, maxCost) - } - ifnameList = []string{ifname} - } - addrs := []net.IP{} - for _, ifname := range ifnameList { - ifaddrs, err := getLocalAddrIf(globalStatus, ifname, - includeLinkLocal, af) - if !ignoreErrors && err != nil { - return addrs, err - } - addrs = append(addrs, ifaddrs...) - } - return addrs, nil -} - -// Return the list of ifnames in DNC which exist in the kernel -func GetExistingInterfaceList(log *base.LogObject, globalStatus DeviceNetworkStatus) []string { - - var ifs []string - for _, us := range globalStatus.Ports { - - link, _ := netlink.LinkByName(us.IfName) - if link == nil { - log.Warnf("GetExistingInterfaceList: if %s not found\n", - us.IfName) - continue - } - ifs = append(ifs, us.IfName) - } - return ifs -} - -// Check if an interface name is a port owned by nim -func IsPort(globalStatus DeviceNetworkStatus, ifname string) bool { - for _, us := range globalStatus.Ports { - if us.IfName != ifname { - continue - } - return true - } - return false -} - -// IsL3Port checks if an interface name belongs to a port with SystemAdapter attached. -func IsL3Port(globalStatus DeviceNetworkStatus, ifname string) bool { - for _, us := range globalStatus.Ports { - if us.IfName != ifname { - continue - } - return us.IsL3Port - } - return false -} - -// Check if a physical label or ifname is a management port -func IsMgmtPort(globalStatus DeviceNetworkStatus, ifname string) bool { - for _, us := range globalStatus.Ports { - if us.IfName != ifname { - continue - } - if globalStatus.Version >= DPCIsMgmt && - !us.IsMgmt { - continue - } - return true - } - return false -} - -// GetPortCost returns the port cost -// Returns 0 if the ifname does not exist. -func GetPortCost(globalStatus DeviceNetworkStatus, ifname string) uint8 { - for _, us := range globalStatus.Ports { - if us.IfName != ifname { - continue - } - return us.Cost - } - return 0 -} - -func GetPort(globalStatus DeviceNetworkStatus, ifname string) *NetworkPortStatus { - for _, us := range globalStatus.Ports { - if us.IfName != ifname { - continue - } - if globalStatus.Version < DPCIsMgmt { - us.IsMgmt = true - } - return &us - } - return nil -} - -// Given an address tell me its IfName -func GetMgmtPortFromAddr(globalStatus DeviceNetworkStatus, addr net.IP) string { - for _, us := range globalStatus.Ports { - if globalStatus.Version >= DPCIsMgmt && - !us.IsMgmt { - continue - } - for _, i := range us.AddrInfoList { - if i.Addr.Equal(addr) { - return us.IfName - } - } - } - return "" -} - -// GetLocalAddrList returns all IP addresses on the ifName except -// the link local addresses. -func GetLocalAddrList(globalStatus DeviceNetworkStatus, - ifname string) ([]net.IP, error) { - - if ifname == "" { - return []net.IP{}, fmt.Errorf("ifname not specified") - } - return getLocalAddrIf(globalStatus, ifname, false, 0) -} - -// getLocalAddrIf returns all of the IP addresses for the ifname. -// includeLinkLocal and af can be used to exclude addresses. -func getLocalAddrIf(globalStatus DeviceNetworkStatus, ifname string, - includeLinkLocal bool, af uint) ([]net.IP, error) { - - var addrs []net.IP - for _, us := range globalStatus.Ports { - if us.IfName != ifname { - continue - } - for _, i := range us.AddrInfoList { - if !includeLinkLocal && i.Addr.IsLinkLocalUnicast() { - continue - } - if i.Addr == nil { - continue - } - switch af { - case 0: - // Accept any - case 4: - if i.Addr.To4() == nil { - continue - } - case 6: - if i.Addr.To4() != nil { - continue - } - } - addrs = append(addrs, i.Addr) - } - } - if len(addrs) != 0 { - return addrs, nil - } else { - return []net.IP{}, &IPAddrNotAvail{IfName: ifname} - } -} - -// ReportLogicallabels returns a list of Logicallabels we will report in info and metrics -func ReportLogicallabels(deviceNetworkStatus DeviceNetworkStatus) []string { - - var names []string - for _, port := range deviceNetworkStatus.Ports { - names = append(names, port.Logicallabel) - } - return names -} - -// UpdatePortStatusFromIntfStatusMap - Set TestResults for ports in DeviceNetworkStatus to -// those from intfStatusMap. If a port is not found in intfStatusMap, it means -// the port was not tested, so we retain the original TestResults for the port. -func (status *DeviceNetworkStatus) UpdatePortStatusFromIntfStatusMap( - intfStatusMap IntfStatusMap) { - for indx := range status.Ports { - portPtr := &status.Ports[indx] - tr, ok := intfStatusMap.StatusMap[portPtr.IfName] - if ok { - portPtr.TestResults.Update(tr) - } - // Else - Port not tested hence no change - } -} - -// LogicallabelToIfName looks up a port Logical label to find an existing IfName -// If not found, return the logicallabel argument string -func LogicallabelToIfName(deviceNetworkStatus *DeviceNetworkStatus, - logicallabel string) string { - - for _, p := range deviceNetworkStatus.Ports { - if p.Logicallabel == logicallabel { - return p.IfName - } - } - return logicallabel -} - -// IsAnyPortInPciBack -// -// Checks if any of the Ports are part of IO bundles which are in PCIback. -// If true, it also returns the ifName ( NOT bundle name ) -// Also returns whether it is currently used by an application by -// returning a UUID. If the UUID is zero it is in PCIback but available. -// Use filterUnassigned to filter out unassigned ports. -func (config *DevicePortConfig) IsAnyPortInPciBack( - log *base.LogObject, aa *AssignableAdapters, filterUnassigned bool) (bool, string, uuid.UUID) { - if aa == nil { - log.Functionf("IsAnyPortInPciBack: nil aa") - return false, "", uuid.UUID{} - } - log.Functionf("IsAnyPortInPciBack: aa init %t, %d bundles, %d ports", - aa.Initialized, len(aa.IoBundleList), len(config.Ports)) - for _, port := range config.Ports { - ioBundle := aa.LookupIoBundleIfName(port.IfName) - if ioBundle == nil { - // It is not guaranteed that all Ports are part of Assignable Adapters - // If not found, the adapter is not capable of being assigned at - // PCI level. So it cannot be in PCI back. - log.Functionf("IsAnyPortInPciBack: ifname %s not found", - port.IfName) - continue - } - if ioBundle.IsPCIBack && (!filterUnassigned || ioBundle.UsedByUUID != nilUUID) { - return true, port.IfName, ioBundle.UsedByUUID - } - } - return false, "", uuid.UUID{} -} - -type MapServerType uint8 - -const ( - MST_INVALID MapServerType = iota - MST_MAPSERVER - MST_SUPPORT_SERVER - MST_LAST = 255 -) - -type DhcpType uint8 - -const ( - DT_NOOP DhcpType = iota - DT_STATIC // Device static config - DT_NONE // App passthrough e.g., to a bridge - DT_Deprecated // XXX to match .proto value - DT_CLIENT // Device client on external port -) - -type UnderlayNetworkConfig struct { - Name string // From proto message - AppMacAddr net.HardwareAddr // If set use it for vif - AppIPAddr net.IP // If set use DHCP to assign to app - IntfOrder int32 // XXX need to get from API - - // XXX Shouldn't we use ErrorAndTime here - // Error - // If there is a parsing error and this uLNetwork config cannot be - // processed, set the error here. This allows the error to be propagated - // back to zedcloud - // If this is non-empty ( != ""), the UL network Config should not be - // processed further. It Should just be flagged to be in error state - // back to the cloud. - Error string - Network uuid.UUID // Points to a NetworkInstance. - ACLs []ACE - AccessVlanID uint32 - IfIdx uint32 // If we have multiple interfaces on that network, we will increase the index -} - -type UnderlayNetworkStatus struct { - UnderlayNetworkConfig - VifInfo - BridgeMac net.HardwareAddr - BridgeIPAddr net.IP // The address for DNS/DHCP service in zedrouter - AllocatedIPv4Addr net.IP // Assigned to domU - AllocatedIPv6List []net.IP // IPv6 addresses assigned to domU - IPv4Assigned bool // Set to true once DHCP has assigned it to domU - IPAddrMisMatch bool - HostName string -} - -type NetworkType uint8 - -const ( - NT_NOOP NetworkType = 0 - NT_IPV4 = 4 - NT_IPV6 = 6 - - // EVE has been running with Dual stack DHCP behavior with both IPv4 & IPv6 specific networks. - // There can be users who are currently benefitting from this behavior. - // It makes sense to introduce two new types IPv4_ONLY & IPv6_ONLY and allow - // the same family selection from UI for the use cases where only one of the IP families - // is required on management/app-shared adapters. - - // NtIpv4Only : IPv4 addresses only - NtIpv4Only = 5 - // NtIpv6Only : IPv6 addresses only - NtIpv6Only = 7 - // NtDualStack : Run with dual stack - NtDualStack = 8 -) - -// Extracted from the protobuf NetworkConfig. Used by parseSystemAdapter -// XXX replace by inline once we have device model -type NetworkXObjectConfig struct { - UUID uuid.UUID - Type NetworkType - Dhcp DhcpType // If DT_STATIC or DT_CLIENT use below - Subnet net.IPNet - Gateway net.IP - DomainName string - NtpServer net.IP - DnsServers []net.IP // If not set we use Gateway as DNS server - DhcpRange IpRange - DnsNameToIPList []DnsNameToIP // Used for DNS and ACL ipset - Proxy *ProxyConfig - WirelessCfg WirelessConfig - // Any errors from the parser - // ErrorAndTime provides SetErrorNow() and ClearError() - ErrorAndTime -} - -type IpRange struct { - Start net.IP - End net.IP -} - -// Contains used to evaluate whether an IP address -// is within the range -func (ipRange IpRange) Contains(ipAddr net.IP) bool { - if bytes.Compare(ipAddr, ipRange.Start) >= 0 && - bytes.Compare(ipAddr, ipRange.End) <= 0 { - return true - } - return false -} - -// Size returns addresses count inside IpRange -func (ipRange IpRange) Size() uint32 { - //TBD:XXX, IPv6 handling - ip1v4 := ipRange.Start.To4() - ip2v4 := ipRange.End.To4() - if ip1v4 == nil || ip2v4 == nil { - return 0 - } - ip1Int := binary.BigEndian.Uint32(ip1v4) - ip2Int := binary.BigEndian.Uint32(ip2v4) - if ip1Int > ip2Int { - return ip1Int - ip2Int - } - return ip2Int - ip1Int -} - -func (config NetworkXObjectConfig) Key() string { - return config.UUID.String() -} - -// LogCreate : -func (config NetworkXObjectConfig) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.NetworkXObjectConfigLogType, "", - config.UUID, config.LogKey()) - if logObject == nil { - return - } - logObject.Noticef("NetworkXObject config create") -} - -// LogModify : -func (config NetworkXObjectConfig) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.NetworkXObjectConfigLogType, "", - config.UUID, config.LogKey()) - - oldConfig, ok := old.(NetworkXObjectConfig) - if !ok { - logObject.Clone().Fatalf("LogModify: Old object interface passed is not of NetworkXObjectConfig type") - } - // XXX remove? - logObject.CloneAndAddField("diff", cmp.Diff(oldConfig, config)). - Noticef("NetworkXObject config modify") -} - -// LogDelete : -func (config NetworkXObjectConfig) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.NetworkXObjectConfigLogType, "", - config.UUID, config.LogKey()) - logObject.Noticef("NetworkXObject config delete") - - base.DeleteLogObject(logBase, config.LogKey()) -} - -// LogKey : -func (config NetworkXObjectConfig) LogKey() string { - return string(base.NetworkXObjectConfigLogType) + "-" + config.Key() -} - -// AssignedAddrs : -type AssignedAddrs struct { - IPv4Addr net.IP - IPv6Addrs []net.IP + PortMap bool // Is port mapping part of action? + TargetPort int // Internal port } +// AppNetAdapterStatus : status of application network adapter. +type AppNetAdapterStatus struct { + AppNetAdapterConfig + VifInfo + BridgeMac net.HardwareAddr + BridgeIPAddr net.IP // The address for DNS/DHCP service in zedrouter + AllocatedIPv4Addr net.IP // Assigned to domU + AllocatedIPv6List []net.IP // IPv6 addresses assigned to domU + IPv4Assigned bool // Set to true once DHCP has assigned it to domU + IPAddrMisMatch bool + HostName string +} + +// NetworkInstanceInfo : info about created Network instance. type NetworkInstanceInfo struct { BridgeNum int BridgeName string @@ -2227,6 +379,20 @@ type NetworkInstanceInfo struct { NumTrunkPorts uint32 } +// AssignedAddrs : IP addresses assigned to application network adapter. +type AssignedAddrs struct { + IPv4Addr net.IP + IPv6Addrs []net.IP +} + +// VifNameMac : name and MAC address assigned to app VIF. +type VifNameMac struct { + Name string + MacAddr net.HardwareAddr + AppID uuid.UUID +} + +// IsVifInBridge checks if network instance already contains VIF with the given name. func (instanceInfo *NetworkInstanceInfo) IsVifInBridge( vifName string) bool { for _, vif := range instanceInfo.Vifs { @@ -2237,6 +403,7 @@ func (instanceInfo *NetworkInstanceInfo) IsVifInBridge( return false } +// RemoveVif : remove VIF record from network instance info. func (instanceInfo *NetworkInstanceInfo) RemoveVif(log *base.LogObject, vifName string) { log.Functionf("RemoveVif(%s, %s)", instanceInfo.BridgeName, vifName) @@ -2257,6 +424,7 @@ func (instanceInfo *NetworkInstanceInfo) RemoveVif(log *base.LogObject, instanceInfo.Vifs = vifs } +// AddVif : add VIF record into network instance info. func (instanceInfo *NetworkInstanceInfo) AddVif(log *base.LogObject, vifName string, appMac net.HardwareAddr, appID uuid.UUID) { @@ -2277,6 +445,7 @@ func (instanceInfo *NetworkInstanceInfo) AddVif(log *base.LogObject, instanceInfo.Vifs = append(instanceInfo.Vifs, info) } +// NetworkInstanceMetrics : metrics for a given network instance. type NetworkInstanceMetrics struct { UUIDandVersion UUIDandVersion DisplayName string @@ -2286,7 +455,7 @@ type NetworkInstanceMetrics struct { VlanMetrics VlanMetrics } -// VlanMetrics : +// VlanMetrics : VLAN metrics for a given NI. type VlanMetrics struct { NumTrunkPorts uint32 VlanCounts map[uint32]uint32 @@ -2315,6 +484,7 @@ type ProbeIntfMetrics struct { LatencyToRemote uint32 // probe latency to remote in msec } +// Key : func (metrics NetworkInstanceMetrics) Key() string { return metrics.UUIDandVersion.UUID.String() } @@ -2357,8 +527,8 @@ func (metrics NetworkInstanceMetrics) LogKey() string { return string(base.NetworkInstanceMetricsLogType) + "-" + metrics.Key() } -// Network metrics for overlay and underlay -// Matches networkMetrics protobuf message +// NetworkMetrics are for all adapters +// Matches networkMetrics protobuf message. type NetworkMetrics struct { MetricList []NetworkMetric TotalRuleCount uint64 @@ -2407,6 +577,7 @@ func (nms NetworkMetrics) LogKey() string { return string(base.NetworkMetricsLogType) + "-" + nms.Key() } +// LookupNetworkMetrics : get metrics collected for a given interface. func (nms *NetworkMetrics) LookupNetworkMetrics(ifName string) (NetworkMetric, bool) { for _, metric := range nms.MetricList { if ifName == metric.IfName { @@ -2416,6 +587,7 @@ func (nms *NetworkMetrics) LookupNetworkMetrics(ifName string) (NetworkMetric, b return NetworkMetric{}, false } +// NetworkMetric : metrics for a given network interface. type NetworkMetric struct { IfName string TxBytes uint64 @@ -2432,6 +604,7 @@ type NetworkMetric struct { RxAclRateLimitDrops uint64 // For all rate limited rules } +// NetworkInstanceType : type of network instance. type NetworkInstanceType int32 // These values should be same as the ones defined in zconfig.ZNetworkInstType @@ -2445,6 +618,7 @@ const ( NetworkInstanceTypeLast NetworkInstanceType = 255 ) +// AddressType : type of network address. type AddressType int32 // The values here should be same as the ones defined in zconfig.AddressType @@ -2481,14 +655,15 @@ type NetworkInstanceConfig struct { DomainName string NtpServer net.IP DnsServers []net.IP // If not set we use Gateway as DNS server - DhcpRange IpRange - DnsNameToIPList []DnsNameToIP // Used for DNS and ACL ipset + DhcpRange IPRange + DnsNameToIPList []DNSNameToIP // Used for DNS and ACL ipset // Any errors from the parser // ErrorAndTime provides SetErrorNow() and ClearError() ErrorAndTime } +// Key : func (config *NetworkInstanceConfig) Key() string { return config.UUID.String() } @@ -2531,6 +706,7 @@ func (config NetworkInstanceConfig) LogKey() string { return string(base.NetworkInstanceConfigLogType) + "-" + config.Key() } +// IsIPv6 returns true if the address is IP version 6. func (config *NetworkInstanceConfig) IsIPv6() bool { switch config.IpType { case AddressTypeIPV6: @@ -2667,19 +843,11 @@ func (status NetworkInstanceStatus) LogKey() string { return string(base.NetworkInstanceStatusLogType) + "-" + status.Key() } -type VifNameMac struct { - Name string - MacAddr net.HardwareAddr - AppID uuid.UUID -} - -/* - * Tx/Rx of bridge is equal to the total of Tx/Rx on all member - * virtual interfaces excluding the bridge itself. - * - * Drops/Errors/AclDrops of bridge is equal to total of Drops/Errors/AclDrops - * on all member virtual interface including the bridge. - */ +// UpdateNetworkMetrics : update collected network metrics. +// Tx/Rx of bridge is equal to the total of Tx/Rx on all member +// virtual interfaces excluding the bridge itself. +// Drops/Errors/AclDrops of bridge is equal to total of Drops/Errors/AclDrops +// on all member virtual interface including the bridge. func (status *NetworkInstanceStatus) UpdateNetworkMetrics(log *base.LogObject, nms *NetworkMetrics) (brNetMetric *NetworkMetric) { @@ -2711,13 +879,7 @@ func (status *NetworkInstanceStatus) UpdateNetworkMetrics(log *base.LogObject, return brNetMetric } -/* - * Tx/Rx of bridge is equal to the total of Tx/Rx on all member - * virtual interfaces excluding the bridge itself. - * - * Drops/Errors/AclDrops of bridge is equal to total of Drops/Errors/AclDrops - * on all member virtual interface including the bridge. - */ +// UpdateBridgeMetrics records metrics of the bridge interface itself. func (status *NetworkInstanceStatus) UpdateBridgeMetrics(log *base.LogObject, nms *NetworkMetrics, netMetric *NetworkMetric) { // Get bridge metrics @@ -2737,7 +899,7 @@ func (status *NetworkInstanceStatus) UpdateBridgeMetrics(log *base.LogObject, } } -// Returns true if found +// IsIpAssigned returns true if the given IP address is assigned to any app VIF. func (status *NetworkInstanceStatus) IsIpAssigned(ip net.IP) bool { for _, assignments := range status.IPAssignments { if ip.Equal(assignments.IPv4Addr) { @@ -2752,55 +914,6 @@ func (status *NetworkInstanceStatus) IsIpAssigned(ip net.IP) bool { return false } -// ACEDirection : -// Rule direction -type ACEDirection uint8 - -const ( - // AceDirBoth : Rule applies in both directions - AceDirBoth ACEDirection = iota - // AceDirIngress : Rules applies in Ingress direction (from internet to app) - AceDirIngress ACEDirection = 1 - // AceDirEgress : Rules applies in Egress direction (from app to internet) - AceDirEgress ACEDirection = 2 -) - -// Similar support as in draft-ietf-netmod-acl-model -type ACE struct { - Matches []ACEMatch - Actions []ACEAction - Name string - RuleID int32 - Dir ACEDirection -} - -// The Type can be "ip" or "host" (aka domain name), "eidset", "protocol", -// "fport", or "lport" for now. The ip and host matches the remote IP/hostname. -// The host matching is suffix-matching thus zededa.net matches *.zededa.net. -// XXX Need "interface"... e.g. "uplink" or "eth1"? Implicit in network used? -// For now the matches are bidirectional. -// XXX Add directionality? Different rate limits in different directions? -// Value is always a string. -// There is an implicit reject rule at the end. -// The "eidset" type is special for the overlay. Matches all the IPs which -// are part of the DnsNameToIPList. -type ACEMatch struct { - Type string - Value string -} - -type ACEAction struct { - Drop bool // Otherwise accept - - Limit bool // Is limiter enabled? - LimitRate int // Packets per unit - LimitUnit string // "s", "m", "h", for second, minute, hour - LimitBurst int // Packets - - PortMap bool // Is port mapping part of action? - TargetPort int // Internal port -} - // IPTuple : type IPTuple struct { Src net.IP // local App IP address @@ -2912,55 +1025,6 @@ func (flows IPFlow) LogKey() string { return string(base.IPFlowLogType) + "-" + flows.Key() } -// OnboardingStatus - UUID, etc. advertised by client process -type OnboardingStatus struct { - DeviceUUID uuid.UUID - HardwareModel string // From controller -} - -// Key returns the key for pubsub -func (status OnboardingStatus) Key() string { - return "global" -} - -// LogCreate : -func (status OnboardingStatus) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.OnboardingStatusLogType, "", - nilUUID, status.LogKey()) - if logObject == nil { - return - } - logObject.Noticef("Onboarding status create") -} - -// LogModify : -func (status OnboardingStatus) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.OnboardingStatusLogType, "", - nilUUID, status.LogKey()) - - oldStatus, ok := old.(OnboardingStatus) - if !ok { - logObject.Clone().Fatalf("LogModify: Old object interface passed is not of OnboardingStatus type") - } - // XXX remove? - logObject.CloneAndAddField("diff", cmp.Diff(oldStatus, status)). - Noticef("Onboarding status modify") -} - -// LogDelete : -func (status OnboardingStatus) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.OnboardingStatusLogType, "", - nilUUID, status.LogKey()) - logObject.Noticef("Onboarding status delete") - - base.DeleteLogObject(logBase, status.LogKey()) -} - -// LogKey : -func (status OnboardingStatus) LogKey() string { - return string(base.OnboardingStatusLogType) + "-" + status.Key() -} - // AppInstMetaDataType - types of app meta data type AppInstMetaDataType uint8 @@ -2983,53 +1047,6 @@ func (data AppInstMetaData) Key() string { return data.AppInstUUID.String() + "-" + string(data.Type) } -// AddToIP : -func AddToIP(ip net.IP, addition int) net.IP { - if addr := ip.To4(); addr != nil { - val := uint32(addr[0])<<24 + uint32(addr[1])<<16 + - uint32(addr[2])<<8 + uint32(addr[3]) - val += uint32(addition) - byte0 := byte((val >> 24) & 0xFF) - byte1 := byte((val >> 16) & 0xFF) - byte2 := byte((val >> 8) & 0xFF) - byte3 := byte(val & 0xFF) - return net.IPv4(byte0, byte1, byte2, byte3) - } - //TBD:XXX, IPv6 handling - return net.IP{} -} - -// GetIPAddrCountOnSubnet IP address count on subnet -func GetIPAddrCountOnSubnet(subnet net.IPNet) int { - prefixLen, _ := subnet.Mask.Size() - if prefixLen != 0 { - if subnet.IP.To4() != nil { - return 0x01 << (32 - prefixLen) - } - if subnet.IP.To16() != nil { - return 0x01 << (128 - prefixLen) - } - } - return 0 -} - -// GetIPNetwork : -// returns the first IP Address of the subnet(Network Address) -func GetIPNetwork(subnet net.IPNet) net.IP { - return subnet.IP.Mask(subnet.Mask) -} - -// GetIPBroadcast : -// returns the last IP Address of the subnet(Broadcast Address) -func GetIPBroadcast(subnet net.IPNet) net.IP { - if network := GetIPNetwork(subnet); network != nil { - if addrCount := GetIPAddrCountOnSubnet(subnet); addrCount != 0 { - return AddToIP(network, addrCount-1) - } - } - return net.IP{} -} - // At the MinSubnetSize there is room for one app instance (.0 being reserved, // .3 broadcast, .1 is the bridgeIPAddr, and .2 is usable). const ( @@ -3037,427 +1054,6 @@ const ( LargeSubnetSize = 16 // for determining default Dhcp Range ) -// WwanConfig is published by nim and consumed by the wwan service. -type WwanConfig struct { - RadioSilence bool `json:"radio-silence"` - Networks []WwanNetworkConfig `json:"networks"` -} - -// Equal compares two instances of WwanConfig for equality. -func (wc WwanConfig) Equal(wc2 WwanConfig) bool { - if wc.RadioSilence != wc2.RadioSilence { - return false - } - if len(wc.Networks) != len(wc2.Networks) { - return false - } - for _, m1 := range wc.Networks { - var found bool - for _, m2 := range wc2.Networks { - if m1.Equal(m2) { - found = true - break - } - } - if !found { - return false - } - } - return true -} - -// WwanNetworkConfig contains configuration for a single cellular network. -type WwanNetworkConfig struct { - // Logical label in PhysicalIO. - LogicalLabel string `json:"logical-label"` - PhysAddrs WwanPhysAddrs `json:"physical-addrs"` - // XXX Multiple APNs are not yet supported. - Apns []string `json:"apns"` - // Proxies configured for the cellular network. - Proxies []ProxyEntry `json:"proxies"` - // Probe used to detect broken connection. - Probe WwanProbe `json:"probe"` - // Some LTE modems have GNSS receiver integrated and can be used - // for device location tracking. - // Enable this option to have location info periodically obtained - // from this modem and published into /run/wwan/location.json by the wwan - // microservice. This is further distributed to the controller and - // to applications by zedagent. - LocationTracking bool `json:"location-tracking"` -} - -// WwanProbe : cellular connectivity verification probe. -type WwanProbe struct { - Disable bool `json:"disable"` - // IP/FQDN address to periodically probe to determine connection status. - Address string `json:"address"` -} - -// Equal compares two instances of WwanNetworkConfig for equality. -func (wnc WwanNetworkConfig) Equal(wnc2 WwanNetworkConfig) bool { - if wnc.LogicalLabel != wnc2.LogicalLabel || - wnc.PhysAddrs.PCI != wnc2.PhysAddrs.PCI || - wnc.PhysAddrs.USB != wnc2.PhysAddrs.USB || - wnc.PhysAddrs.Interface != wnc2.PhysAddrs.Interface { - return false - } - if wnc.Probe.Address != wnc2.Probe.Address || - wnc.Probe.Disable != wnc2.Probe.Disable { - return false - } - if len(wnc.Proxies) != len(wnc2.Proxies) { - return false - } - for i := range wnc.Proxies { - if wnc.Proxies[i] != wnc2.Proxies[i] { - return false - } - } - if wnc.LocationTracking != wnc2.LocationTracking { - return false - } - if len(wnc.Apns) != len(wnc2.Apns) { - return false - } - for _, apn1 := range wnc.Apns { - var found bool - for _, apn2 := range wnc2.Apns { - if apn1 == apn2 { - found = true - break - } - } - if !found { - return false - } - } - return true -} - -// WwanPhysAddrs is a physical address of a cellular modem. -// Not all fields have to be defined. Empty WwanPhysAddrs will match the first modem found in sysfs. -// With multiple LTE modems the USB address is the most unambiguous and reliable. -type WwanPhysAddrs struct { - // Interface name. - // For example: wwan0 - Interface string `json:"interface"` - // USB address in the format ":[]", with nested ports separated by dots. - // For example: 1:2.3 - USB string `json:"usb"` - // PCI address in the long format. - // For example: 0000:00:15.0 - PCI string `json:"pci"` -} - -// WwanStatus is published by the wwan service and consumed by nim. -type WwanStatus struct { - Networks []WwanNetworkStatus `json:"networks"` - // MD5 checksum of the corresponding WwanConfig (as config.json). - ConfigChecksum string `json:"config-checksum,omitempty"` -} - -// LookupNetworkStatus returns status corresponding to the given cellular network. -func (ws WwanStatus) LookupNetworkStatus(logicalLabel string) (WwanNetworkStatus, bool) { - for _, status := range ws.Networks { - if logicalLabel == status.LogicalLabel { - return status, true - } - } - return WwanNetworkStatus{}, false -} - -// DoSanitize fills in logical names for cellular modules and SIM cards. -func (ws WwanStatus) DoSanitize() { - uniqueModel := func(model string) bool { - var counter int - for i := range ws.Networks { - if ws.Networks[i].Module.Model == model { - counter++ - } - } - return counter == 1 - } - for i := range ws.Networks { - network := &ws.Networks[i] - if network.Module.Name == "" { - if network.Module.IMEI != "" { - network.Module.Name = network.Module.IMEI - } else if uniqueModel(network.Module.Model) { - network.Module.Name = network.Module.Model - } else { - network.Module.Name = network.PhysAddrs.USB - } - } - for j := range network.SimCards { - simCard := &network.SimCards[j] - if simCard.Name == "" { - if simCard.ICCID != "" { - simCard.Name = simCard.ICCID - } else { - simCard.Name = fmt.Sprintf("%s - SIM%d", network.Module.Name, j) - } - } - } - } -} - -// WwanNetworkStatus contains status information for a single cellular network. -type WwanNetworkStatus struct { - // Logical label of the cellular modem in PhysicalIO. - // Can be empty if this device is not configured by the controller - // (and hence logical label does not exist). - LogicalLabel string `json:"logical-label"` - PhysAddrs WwanPhysAddrs `json:"physical-addrs"` - Module WwanCellModule `json:"cellular-module"` - SimCards []WwanSimCard `json:"sim-cards"` - ConfigError string `json:"config-error"` - ProbeError string `json:"probe-error"` - Providers []WwanProvider `json:"providers"` -} - -// WwanCellModule contains cellular module specs. -type WwanCellModule struct { - Name string `json:"name,omitempty"` - IMEI string `json:"imei"` - Model string `json:"model"` - Revision string `json:"revision"` - ControlProtocol WwanCtrlProt `json:"control-protocol"` - OpMode WwanOpMode `json:"operating-mode"` -} - -// WwanSimCard contains SIM card information. -type WwanSimCard struct { - Name string `json:"name,omitempty"` - ICCID string `json:"iccid"` - IMSI string `json:"imsi"` - Status string `json:"status"` -} - -// WwanProvider contains information about a cellular connectivity provider. -type WwanProvider struct { - PLMN string `json:"plmn"` - Description string `json:"description"` - CurrentServing bool `json:"current-serving"` - Roaming bool `json:"roaming"` -} - -// WwanOpMode : wwan operating mode -type WwanOpMode string - -const ( - // WwanOpModeUnspecified : operating mode is not specified - WwanOpModeUnspecified WwanOpMode = "" - // WwanOpModeOnline : modem is online but not connected - WwanOpModeOnline WwanOpMode = "online" - // WwanOpModeConnected : modem is online and connected - WwanOpModeConnected WwanOpMode = "online-and-connected" - // WwanOpModeRadioOff : modem has disabled radio transmission - WwanOpModeRadioOff WwanOpMode = "radio-off" - // WwanOpModeOffline : modem is offline - WwanOpModeOffline WwanOpMode = "offline" - // WwanOpModeUnrecognized : unrecongized operating mode - WwanOpModeUnrecognized WwanOpMode = "unrecognized" -) - -// WwanCtrlProt : wwan control protocol -type WwanCtrlProt string - -const ( - // WwanCtrlProtUnspecified : control protocol is not specified - WwanCtrlProtUnspecified WwanCtrlProt = "" - // WwanCtrlProtQMI : modem is controlled using the QMI protocol - WwanCtrlProtQMI WwanCtrlProt = "qmi" - // WwanCtrlProtMBIM : modem is controlled using the MBIM protocol - WwanCtrlProtMBIM WwanCtrlProt = "mbim" -) - -// WwanMetrics is published by the wwan service. -type WwanMetrics struct { - Networks []WwanNetworkMetrics `json:"networks"` -} - -// LookupNetworkMetrics returns metrics corresponding to the given cellular network. -func (wm WwanMetrics) LookupNetworkMetrics(logicalLabel string) (WwanNetworkMetrics, bool) { - for _, metrics := range wm.Networks { - if logicalLabel == metrics.LogicalLabel { - return metrics, true - } - } - return WwanNetworkMetrics{}, false -} - -// Key is used for pubsub -func (wm WwanMetrics) Key() string { - return "global" -} - -// LogCreate : -func (wm WwanMetrics) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.WwanMetricsLogType, "", - nilUUID, wm.LogKey()) - if logObject == nil { - return - } - logObject.Metricf("Wwan metrics create") -} - -// LogModify : -func (wm WwanMetrics) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.WwanMetricsLogType, "", - nilUUID, wm.LogKey()) - - oldWm, ok := old.(WwanMetrics) - if !ok { - logObject.Clone().Fatalf("LogModify: Old object passed is not of WwanMetrics type") - } - // XXX remove? - logObject.CloneAndAddField("diff", cmp.Diff(oldWm, wm)). - Metricf("Wwan metrics modify") -} - -// LogDelete : -func (wm WwanMetrics) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.WwanMetricsLogType, "", - nilUUID, wm.LogKey()) - logObject.Metricf("Wwan metrics delete") - - base.DeleteLogObject(logBase, wm.LogKey()) -} - -// LogKey : -func (wm WwanMetrics) LogKey() string { - return string(base.WwanMetricsLogType) + "-" + wm.Key() -} - -// WwanNetworkMetrics contains metrics for a single cellular network. -type WwanNetworkMetrics struct { - // Logical label of the cellular modem in PhysicalIO. - // Can be empty if this device is not configured by the controller - // (and hence logical label does not exist). - LogicalLabel string `json:"logical-label"` - PhysAddrs WwanPhysAddrs `json:"physical-addrs"` - PacketStats WwanPacketStats `json:"packet-stats"` - SignalInfo WwanSignalInfo `json:"signal-info"` -} - -// WwanPacketStats contains packet statistics recorded by a cellular modem. -type WwanPacketStats struct { - RxBytes uint64 `json:"rx-bytes"` - RxPackets uint64 `json:"rx-packets"` - RxDrops uint64 `json:"rx-drops"` - TxBytes uint64 `json:"tx-bytes"` - TxPackets uint64 `json:"tx-packets"` - TxDrops uint64 `json:"tx-drops"` -} - -// WwanSignalInfo contains cellular signal strength information. -// The maximum value of int32 (0x7FFFFFFF) represents unspecified/unavailable metric. -type WwanSignalInfo struct { - // Received signal strength indicator (RSSI) measured in dBm (decibel-milliwatts). - RSSI int32 `json:"rssi"` - // Reference Signal Received Quality (RSRQ) measured in dB (decibels). - RSRQ int32 `json:"rsrq"` - // Reference Signal Receive Power (RSRP) measured in dBm (decibel-milliwatts). - RSRP int32 `json:"rsrp"` - // Signal-to-Noise Ratio (SNR) measured in dB (decibels). - SNR int32 `json:"snr"` -} - -// WwanLocationInfo contains device location information obtained from a GNSS -// receiver integrated into an LTE modem. -type WwanLocationInfo struct { - // Logical label of the device used to obtain this location information. - LogicalLabel string `json:"logical-label"` - // Latitude in the Decimal degrees (DD) notation. - // Valid values are in the range <-90, 90>. Anything outside of this range - // should be treated as an unavailable value. - // Note that wwan microservice uses -32768 specifically when latitude is not known. - Latitude float64 `json:"latitude"` - // Longitude in the Decimal degrees (DD) notation. - // Valid values are in the range <-180, 180>. Anything outside of this range - // should be treated as an unavailable value. - // Note that wwan microservice uses -32768 specifically when longitude is not known. - Longitude float64 `json:"longitude"` - // Altitude w.r.t. mean sea level in meters. - // Negative value of -32768 is returned when altitude is not known. - Altitude float64 `json:"altitude"` - // Circular horizontal position uncertainty in meters. - // Negative values are not valid and represent unavailable uncertainty. - // Note that wwan microservice uses -32768 specifically when horizontal - // uncertainty is not known. - HorizontalUncertainty float32 `json:"horizontal-uncertainty"` - // Reliability of the provided information for latitude and longitude. - HorizontalReliability LocReliability `json:"horizontal-reliability"` - // Vertical position uncertainty in meters. - // Negative values are not valid and represent unavailable uncertainty. - // Note that wwan microservice uses -32768 specifically when vertical - // uncertainty is not known. - VerticalUncertainty float32 `json:"vertical-uncertainty"` - // Reliability of the provided information for altitude. - VerticalReliability LocReliability `json:"vertical-reliability"` - // Unix timestamp in milliseconds. - // Zero value represents unavailable UTC timestamp. - UTCTimestamp uint64 `json:"utc-timestamp"` -} - -// Key is used for pubsub -func (wli WwanLocationInfo) Key() string { - return "global" -} - -// LogCreate : -func (wli WwanLocationInfo) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.WwanLocationInfoLogType, "", - nilUUID, wli.LogKey()) - if logObject == nil { - return - } - logObject.Metricf("Wwan location info create") -} - -// LogModify : -func (wli WwanLocationInfo) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.WwanLocationInfoLogType, "", - nilUUID, wli.LogKey()) - - oldWli, ok := old.(WwanLocationInfo) - if !ok { - logObject.Clone().Fatalf("LogModify: Old object passed is not of WwanLocationInfo type") - } - // XXX remove? - logObject.CloneAndAddField("diff", cmp.Diff(oldWli, wli)). - Metricf("Wwan location info modify") -} - -// LogDelete : -func (wli WwanLocationInfo) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.WwanLocationInfoLogType, "", - nilUUID, wli.LogKey()) - logObject.Metricf("Wwan location info delete") - base.DeleteLogObject(logBase, wli.LogKey()) -} - -// LogKey : -func (wli WwanLocationInfo) LogKey() string { - return string(base.WwanLocationInfoLogType) + "-" + wli.Key() -} - -// LocReliability : reliability of location information. -type LocReliability string - -const ( - // LocReliabilityUnspecified : reliability is not specified - LocReliabilityUnspecified LocReliability = "not-set" - // LocReliabilityVeryLow : very low reliability - LocReliabilityVeryLow LocReliability = "very-low" - // LocReliabilityLow : low reliability - LocReliabilityLow LocReliability = "low" - // LocReliabilityMedium : medium reliability - LocReliabilityMedium LocReliability = "medium" - // LocReliabilityHigh : high reliability - LocReliabilityHigh LocReliability = "high" -) - // AppBlobsAvailable provides a list of AppCustom blobs which has been provided // from the cloud type AppBlobsAvailable struct { @@ -3469,69 +1065,3 @@ type AppBlobsAvailable struct { type AppInfo struct { AppBlobs []AppBlobsAvailable } - -// CachedIP : cached IP with time-limited validity. -type CachedIP struct { - IPAddress net.IP - ValidUntil time.Time -} - -// String representation of CachedIP. -func (c CachedIP) String() string { - return fmt.Sprintf("IP %s valid until %v", c.IPAddress, c.ValidUntil) -} - -// CachedResolvedIPs serves as a cache for storing the IP addresses obtained through -// DNS resolution for a given hostname. -type CachedResolvedIPs struct { - Hostname string - CachedIPs []CachedIP -} - -// String representation of CachedResolvedIPs. -func (c CachedResolvedIPs) String() string { - var cachedIPs []string - for _, ip := range c.CachedIPs { - cachedIPs = append(cachedIPs, ip.String()) - } - return fmt.Sprintf("Hostname %s with cached resolved IPs: [%s]", c.Hostname, - strings.Join(cachedIPs, ", ")) -} - -// Key is used for pubsub -func (c CachedResolvedIPs) Key() string { - return c.Hostname -} - -// LogCreate : -func (c CachedResolvedIPs) LogCreate(logBase *base.LogObject) { - logObject := base.NewLogObject(logBase, base.CachedResolvedIPsLogType, "", - nilUUID, c.LogKey()) - logObject.Metricf("CachedResolvedIPs create %s", c.String()) -} - -// LogModify : -func (c CachedResolvedIPs) LogModify(logBase *base.LogObject, old interface{}) { - logObject := base.EnsureLogObject(logBase, base.CachedResolvedIPsLogType, "", - nilUUID, c.LogKey()) - oldVal, ok := old.(CachedResolvedIPs) - if !ok { - logObject.Clone().Fatalf( - "LogModify: Old object interface passed is not of CachedResolvedIPs type") - } - logObject.Metricf("CachedResolvedIPs modified from %s to %s", - oldVal.String(), c.String()) -} - -// LogDelete : -func (c CachedResolvedIPs) LogDelete(logBase *base.LogObject) { - logObject := base.EnsureLogObject(logBase, base.CachedResolvedIPsLogType, "", - nilUUID, c.LogKey()) - logObject.Metricf("CachedResolvedIPs delete %s", c.String()) - base.DeleteLogObject(logBase, c.LogKey()) -} - -// LogKey : -func (c CachedResolvedIPs) LogKey() string { - return string(base.CachedResolvedIPsLogType) + "-" + c.Key() -} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/generics/generics.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/generics/generics.go new file mode 100644 index 0000000000..d7a723f725 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/generics/generics.go @@ -0,0 +1,171 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package generics + +// EqualLists returns true if the two slices representing lists (i.e. order dependent) +// are equal in size and items they contain. +// This function can be used if slice items are comparable +// (operator "==" can be used). +func EqualLists[Type comparable](list1, list2 []Type) bool { + return EqualListsFn(list1, list2, func(a, b Type) bool { + return a == b + }) +} + +// EqualListsFn returns true if the two slices representing lists (i.e. order dependent) +// are equal in size and items they contain. +// Two slice items are compared using the provided "equal" callback. +func EqualListsFn[Type any](list1, list2 []Type, equal func(a, b Type) bool) bool { + if len(list1) != len(list2) { + return false + } + for i := range list1 { + if !equal(list1[i], list2[i]) { + return false + } + } + return true +} + +// EqualSets returns true if the two slices that represent sets (i.e. order independent) +// are equal in size and items they contain. +// This function can be used if slice items are comparable +// (operator "==" can be used). +func EqualSets[Type comparable](set1, set2 []Type) bool { + return EqualSetsFn(set1, set2, func(a, b Type) bool { + return a == b + }) +} + +// EqualSetsFn returns true if the two slices that represent sets (i.e. order independent) +// are equal in size and items they contain. +// Two slice items are compared using the provided "equal" callback. +func EqualSetsFn[Type any](set1, set2 []Type, equal func(a, b Type) bool) bool { + if len(set1) != len(set2) { + return false + } + for _, item1 := range set1 { + var found bool + for _, item2 := range set2 { + if equal(item1, item2) { + found = true + break + } + } + if !found { + return false + } + } + return true +} + +// DiffSets returns slice with items that are present in the first slice +// but not in the second and vice versa. +// This function can be used if slice items are comparable +// (operator "==" can be used). +func DiffSets[Type comparable](set1, set2 []Type) (onlyInSet1, onlyInSet2 []Type) { + return DiffSetsFn(set1, set2, func(a, b Type) bool { + return a == b + }) +} + +// DiffSetsFn returns slice with items that are present in the first slice +// but not in the second and vice versa. +// Two slice items are compared using the provided "equal" callback. +func DiffSetsFn[Type any](set1, set2 []Type, equal func(a, b Type) bool) ( + onlyInSet1, onlyInSet2 []Type) { + for _, item1 := range set1 { + var found bool + for _, item2 := range set2 { + if equal(item1, item2) { + found = true + break + } + } + if !found { + onlyInSet1 = append(onlyInSet1, item1) + } + } + for _, item2 := range set2 { + var found bool + for _, item1 := range set1 { + if equal(item2, item1) { + found = true + break + } + } + if !found { + onlyInSet2 = append(onlyInSet2, item2) + } + } + return +} + +// FilterList return a new slice with items that pass the "keep" callback. +func FilterList[Type any](list []Type, keep func(a Type) bool) (filtered []Type) { + for _, item := range list { + if keep(item) { + filtered = append(filtered, item) + } + } + return +} + +// FilterDuplicates return a new slice with duplicate entries removed. +// This function can be used if slice items are comparable +// (operator "==" can be used). +func FilterDuplicates[Type comparable](list []Type) (filtered []Type) { + return FilterDuplicatesFn(list, func(a, b Type) bool { + return a == b + }) +} + +// FilterDuplicatesFn return a new slice with duplicate entries removed. +// Two slice items are compared using the provided "equal" callback. +func FilterDuplicatesFn[Type any](list []Type, equal func(a, b Type) bool) (filtered []Type) { + for _, item := range list { + var duplicate bool + for _, prevItem := range filtered { + if equal(item, prevItem) { + duplicate = true + break + } + } + if !duplicate { + filtered = append(filtered, item) + } + } + return +} + +// ContainsItem returns true if the slice contains the given item. +// This function can be used if slice items are comparable +// (operator "==" can be used). +func ContainsItem[Type comparable](list []Type, item Type) bool { + for i := range list { + if list[i] == item { + return true + } + } + return false +} + +// ContainsItemFn returns true if the slice contains the given item. +// Two slice items are compared using the provided "equal" callback. +func ContainsItemFn[Type any](list []Type, item Type, equal func(a, b Type) bool) bool { + for i := range list { + if equal(list[i], item) { + return true + } + } + return false +} + +// AppendIfNotDuplicate adds item into list if the list does not yet contain the item. +func AppendIfNotDuplicate[Type comparable](list []Type, item Type) []Type { + if !ContainsItem(list, item) { + return append(list, item) + } + return list +} diff --git a/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/netutils/ip.go b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/netutils/ip.go new file mode 100644 index 0000000000..1bdbb46ff5 --- /dev/null +++ b/pkg/edgeview/vendor/github.com/lf-edge/eve/pkg/pillar/utils/netutils/ip.go @@ -0,0 +1,81 @@ +// Copyright (c) 2023 Zededa, Inc. +// SPDX-License-Identifier: Apache-2.0 + +package netutils + +import ( + "bytes" + "net" +) + +// EqualIPs compares two IP addresses. +func EqualIPs(ip1 net.IP, ip2 net.IP) bool { + if ip1 == nil { + return ip2 == nil + } + if ip2 == nil { + return ip1 == nil + } + return ip1.Equal(ip2) +} + +// EqualIPNets compares two IP addresses with masks. +func EqualIPNets(ipNet1, ipNet2 *net.IPNet) bool { + if ipNet1 == nil || ipNet2 == nil { + return ipNet1 == ipNet2 + } + return ipNet1.IP.Equal(ipNet2.IP) && + bytes.Equal(ipNet1.Mask, ipNet2.Mask) +} + +// SameIPVersions returns true if both IP addresses are of the same version +func SameIPVersions(ip1, ip2 net.IP) bool { + firstIsV4 := ip1.To4() != nil + secondIsV4 := ip2.To4() != nil + return firstIsV4 == secondIsV4 +} + +// AddToIP increments IP address by the given integer number. +func AddToIP(ip net.IP, addition int) net.IP { + if addr := ip.To4(); addr != nil { + val := uint32(addr[0])<<24 + uint32(addr[1])<<16 + + uint32(addr[2])<<8 + uint32(addr[3]) + val += uint32(addition) + byte0 := byte((val >> 24) & 0xFF) + byte1 := byte((val >> 16) & 0xFF) + byte2 := byte((val >> 8) & 0xFF) + byte3 := byte(val & 0xFF) + return net.IPv4(byte0, byte1, byte2, byte3) + } + //TBD:XXX, IPv6 handling + return net.IP{} +} + +// GetIPAddrCountOnSubnet return the number or available IP addresses inside a subnet. +func GetIPAddrCountOnSubnet(subnet net.IPNet) int { + prefixLen, _ := subnet.Mask.Size() + if prefixLen != 0 { + if subnet.IP.To4() != nil { + return 0x01 << (32 - prefixLen) + } + if subnet.IP.To16() != nil { + return 0x01 << (128 - prefixLen) + } + } + return 0 +} + +// GetIPNetwork returns the first IP Address of the subnet(Network Address) +func GetIPNetwork(subnet net.IPNet) net.IP { + return subnet.IP.Mask(subnet.Mask) +} + +// GetIPBroadcast returns the last IP Address of the subnet(Broadcast Address) +func GetIPBroadcast(subnet net.IPNet) net.IP { + if network := GetIPNetwork(subnet); network != nil { + if addrCount := GetIPAddrCountOnSubnet(subnet); addrCount != 0 { + return AddToIP(network, addrCount-1) + } + } + return net.IP{} +} diff --git a/pkg/edgeview/vendor/modules.txt b/pkg/edgeview/vendor/modules.txt index df18b96373..57b07915a6 100644 --- a/pkg/edgeview/vendor/modules.txt +++ b/pkg/edgeview/vendor/modules.txt @@ -27,7 +27,7 @@ github.com/gorilla/websocket # github.com/grandcat/zeroconf v1.0.0 ## explicit; go 1.13 github.com/grandcat/zeroconf -# github.com/lf-edge/eve-api/go v0.0.0-20230727134029-123abaf9479d +# github.com/lf-edge/eve-api/go v0.0.0-20231011200019-cb3cb1275e0d ## explicit; go 1.20 github.com/lf-edge/eve-api/go/auth github.com/lf-edge/eve-api/go/certs @@ -35,7 +35,9 @@ github.com/lf-edge/eve-api/go/config github.com/lf-edge/eve-api/go/evecommon github.com/lf-edge/eve-api/go/info github.com/lf-edge/eve-api/go/logs -# github.com/lf-edge/eve/pkg/pillar v0.0.0-20230727061425-295cf5137a5c +github.com/lf-edge/eve-api/go/metrics +github.com/lf-edge/eve-api/go/profile +# github.com/lf-edge/eve/pkg/pillar v0.0.0-20231025120317-b25d016a16bb ## explicit; go 1.20 github.com/lf-edge/eve/pkg/pillar/base github.com/lf-edge/eve/pkg/pillar/flextimer @@ -45,7 +47,9 @@ github.com/lf-edge/eve/pkg/pillar/pubsub/socketdriver github.com/lf-edge/eve/pkg/pillar/sriov github.com/lf-edge/eve/pkg/pillar/types github.com/lf-edge/eve/pkg/pillar/utils/file +github.com/lf-edge/eve/pkg/pillar/utils/generics github.com/lf-edge/eve/pkg/pillar/utils/logging +github.com/lf-edge/eve/pkg/pillar/utils/netutils github.com/lf-edge/eve/pkg/pillar/watch # github.com/miekg/dns v1.1.41 ## explicit; go 1.13