From 83ceab17cef9e3d3e63bca74262130ba5b045ee1 Mon Sep 17 00:00:00 2001 From: Dominik Richter Date: Fri, 8 Mar 2024 11:37:18 -0800 Subject: [PATCH] =?UTF-8?q?=E2=AD=90=20introduce=20asset=20URLs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From the code docs: Assets are generally structured in a giant graph. However, we often find it difficult to reason with arbitrary graphs. As humans, we tend to group assets into hierarchical tree structures, that make it easy for us to put them into a box and reason about them. For example: A techology-centric view of the world would group a VM in a cloud environment like this: /aws/accountX/ec2/instances/linux/debian/8.0 Every entry in this path structure follows a strict schema. Thus "aws" above is the chosen path value for the key "technology". As you can see, some keys lead to predefined (limited) values (technology can be aws, azure, os, k8s, etc), while other keys can have (almost) arbitrary values (eg account). Providers create this schema and may extend this schema. Providers cannot create conflicting entries in this schema. Assets can belong to multiple URLs at the same time, which allows us to look at it from different perspectives. URLs enable fast lookup, but do not restrict in terms of the search. This support looking at e.g. linux instances on all kinds of environments and runtimes. Signed-off-by: Dominik Richter --- providers-sdk/v1/inventory/asset_url.go | 363 ++++++++ providers-sdk/v1/inventory/asset_url_test.go | 91 ++ providers-sdk/v1/inventory/inventory.pb.go | 858 +++++++++++-------- providers-sdk/v1/inventory/inventory.proto | 30 + providers-sdk/v1/resources/resources.pb.go | 14 +- 5 files changed, 1007 insertions(+), 349 deletions(-) create mode 100644 providers-sdk/v1/inventory/asset_url.go create mode 100644 providers-sdk/v1/inventory/asset_url_test.go diff --git a/providers-sdk/v1/inventory/asset_url.go b/providers-sdk/v1/inventory/asset_url.go new file mode 100644 index 0000000000..01f134dfcb --- /dev/null +++ b/providers-sdk/v1/inventory/asset_url.go @@ -0,0 +1,363 @@ +package inventory + +import ( + "errors" + "regexp" + "sort" + "strings" +) + +// # AssetUrl +// +// Assets are generally structured in a giant graph. However, we often find +// it difficult to reason with arbitrary graphs. As humans, we tend to +// group assets into hierarchical tree structures, that make it easy for us +// to put them into a box and reason about them. +// +// For example: A techology-centric view of the world would group a VM +// in a cloud environment like this: +// /aws/accountX/ec2/instances/linux/debian/8.0 +// +// Every entry in this path structure follows a strict schema. Thus "aws" above +// is the chosen path value for the key "technology". As you can see, some +// keys lead to predefined (limited) values (technology can be aws, azure, os, +// k8s, etc), while other keys can have (almost) arbitrary values (eg account). +// +// Providers create this schema and may extend this schema. Providers cannot +// create conflicting entries in this schema. +// +// Assets can belong to multiple URLs at the same time, which allows us to +// look at it from different perspectives. +// +// URLs enable fast lookup, but do not restrict in terms of the search. +// This support looking at e.g. linux instances on all kinds of environments +// and runtimes. + +// AssetUrlSchema defines the structure for an AssetUrl. +type AssetUrlSchema struct { + root *AssetUrlBranch + + // Possible keys that exist at any layer in this structure + keys map[string][]*AssetUrlBranch +} + +type KV struct { + Key string + Value string +} + +type AssetUrlChain []KV + +func NewAssetUrlChain(segments []string) ([]KV, error) { + res := make([]KV, len(segments)) + for i, segment := range segments { + if len(segment) > ASSETURL_MAX_KEY_CHARS+ASSETURL_MAX_VALUE_CHARS { + return nil, errors.New("asset url path segment is too long") + } + KVs := strings.Split(segment, "=") + if len(KVs) != 2 { + return nil, errors.New("asset url path segment must be formatted as key=value") + } + res[i].Key = KVs[0] + res[i].Value = KVs[1] + } + return res, nil +} + +const ( + ASSETURL_MAX_DEPTH = 100 + ASSETURL_MAX_KEY_CHARS = 100 + ASSETURL_MAX_VALUE_CHARS = 200 +) + +var ( + assetUrlKeyRegex = regexp.MustCompile("^[a-z0-9_-]+$") + assetUrlValueRegex = regexp.MustCompile("^[A-Za-z0-9_ .-]+$") +) + +func validateKey(key string) error { + if len(key) > ASSETURL_MAX_KEY_CHARS { + return errors.New("asset url branch key is too long: " + key[0:100] + "...") + } + if key == "" { + return errors.New("asset url branch key cannot be empty") + } + if !assetUrlKeyRegex.MatchString(key) { + return errors.New("asset url branch key '" + key + "' must only contain valid characters: " + assetUrlKeyRegex.String()) + } + return nil +} + +func validateValue(value string) error { + if len(value) > ASSETURL_MAX_VALUE_CHARS { + return errors.New("asset url branch value is too long: " + value[0:100] + "...") + } + if value == "" { + return errors.New("asset url branch value cannot be empty") + } + if value == "*" { + return nil + } + if !assetUrlValueRegex.MatchString(value) { + return errors.New("asset url branch value '" + value + "' must only contain valid characters: " + assetUrlKeyRegex.String()) + } + return nil +} + +func newAssetUrlSchema(rootKey string) (*AssetUrlSchema, error) { + if err := validateKey(rootKey); err != nil { + return nil, err + } + + return &AssetUrlSchema{ + root: &AssetUrlBranch{ + Key: rootKey, + Values: map[string]*AssetUrlBranch{}, + Depth: 1, + }, + }, nil +} + +func (a *AssetUrlSchema) Add(branch *AssetUrlBranch) error { + if branch == nil { + return errors.New("cannot attach empty asset url branch") + } + if len(branch.Path) == 0 { + return errors.New("don't know where to attach asset url branch") + } + + urlChain, err := NewAssetUrlChain(branch.Path) + if err != nil { + return err + } + + found, lastKey, err := a.root.FindPath(urlChain) + if err != nil { + return errors.New("failed to add: " + err.Error()) + } + + if found == nil { + return errors.New("failed to attach asset url branch to any existing subtree for: " + strings.Join(branch.Path, "/")) + } + + if err = branch.validate(); err != nil { + return errors.New("failed to add url branch: " + err.Error()) + } + + branch.setDepth(found.Depth + 1) + found.Values[lastKey] = branch + return nil +} + +func (a *AssetUrlBranch) setDepth(i uint32) { + a.Depth = i + next := i + 1 + for _, v := range a.Values { + if v != nil { + v.setDepth(next) + } + } +} + +func (a *AssetUrlBranch) validate() error { + branches := []*AssetUrlBranch{a} + i := 0 + for i < len(branches) { + branch := branches[i] + i++ + + if len(branch.Reference) != 0 { + if len(branch.Key) != 0 { + return errors.New("asset url segment with reference cannot have a key set") + } + if len(branch.Values) != 0 { + return errors.New("asset url segment with reference cannot have values set") + } + continue + } + + if err := validateKey(branch.Key); err != nil { + return err + } + + for value, next := range branch.Values { + if err := validateValue(value); err != nil { + return err + } + if next != nil { + branches = append(branches, next) + } + } + } + + return nil +} + +func (a *AssetUrlBranch) FindPath(path AssetUrlChain) (*AssetUrlBranch, string, error) { + if len(path) > ASSETURL_MAX_DEPTH { + return nil, "", errors.New("asset url branch path is too long") + } + + curBranch := a + for segmentIdx, segment := range path { + key := segment.Key + if key != curBranch.Key { + return nil, "", errors.New("asset url path key is invalid (expected '" + curBranch.Key + "', got '" + key + "')") + } + + value := segment.Value + if err := validateValue(value); err != nil { + return nil, "", err + } + + // ending condition on the last element + if segmentIdx == len(path)-1 { + return curBranch, value, nil + } + + if curBranch.Values == nil { + return nil, "", errors.New("asset url search ended prematurely, no more keys in this chain") + } + + branch, ok := curBranch.Values[value] + if !ok { + return nil, "", errors.New("cannot find asset url branch for '" + key + "=" + value + "'") + } + if branch == nil { + return nil, "", errors.New("ran into premature end for asset url branch '" + key + "=" + value + "'") + } + curBranch = branch + } + + return curBranch, "", nil +} + +func (a *AssetUrlSchema) cloneBranch(branch *AssetUrlBranch, depth uint32, isDereferenced bool) (*AssetUrlBranch, error) { + if depth > 1000 { + return nil, errors.New("maximum depth reached for asset url during clone (look for circular branch references)") + } + + if len(branch.Reference) != 0 { + if isDereferenced { + return nil, errors.New("dereferenced an asset url branch with more references (reference to = '" + strings.Join(branch.Reference, "/") + "')") + } + + urlChain, err := NewAssetUrlChain(branch.Reference) + if err != nil { + return nil, err + } + + found, lastKey, err := a.root.FindPath(urlChain) + if err != nil { + return nil, errors.New("failed to add asset url reference: " + err.Error()) + } + + branch = found.Values[lastKey] + return a.cloneBranch(branch, depth, true) + } + + res := &AssetUrlBranch{ + Key: branch.Key, + Title: branch.Title, + Values: make(map[string]*AssetUrlBranch, len(branch.Values)), + Depth: depth, + } + + for k, v := range branch.Values { + if v == nil { + res.Values[k] = nil + continue + } + + b, err := a.cloneBranch(v, depth+1, false) + if err != nil { + return nil, err + } + b.ParentValue = k + b.Parent = res + res.Values[k] = b + } + + return res, nil +} + +func (a *AssetUrlSchema) RefreshCache() error { + a.keys = map[string][]*AssetUrlBranch{} + + branches := []*AssetUrlBranch{a.root} + i := 0 + for i < len(branches) { + branch := branches[i] + i++ + + if len(branch.Reference) != 0 { + res, err := a.cloneBranch(branch, branch.Depth, false) + if err != nil { + return err + } + + branch.Key = res.Key + branch.Title = res.Title + branch.Values = res.Values + } + + a.keys[branch.Key] = append(a.keys[branch.Key], branch) + + for k, next := range branch.Values { + if next != nil { + next.Parent = branch + next.ParentValue = k + branches = append(branches, next) + } + } + } + + return nil +} + +func (a *AssetUrlSchema) BuildQueries(kvs []KV) []AssetUrlChain { + var nodes []*AssetUrlBranch + var values []string + for i := range kvs { + kv := kvs[i] + nuNodes := a.keys[kv.Key] + nodes = append(nodes, nuNodes...) + for i := 0; i < len(nuNodes); i++ { + values = append(values, kv.Value) + } + } + + sort.SliceStable(nodes, func(i, j int) bool { + return nodes[i].Depth < nodes[j].Depth + }) + + var res []AssetUrlChain + for len(nodes) != 0 { + lastIdx := len(nodes) - 1 + cur := nodes[lastIdx] + curKey := values[lastIdx] + nodes = nodes[:lastIdx] + values = values[:lastIdx] + + res = append(res, buildParentQuery(cur, curKey)) + } + return res +} + +func buildParentQuery(leaf *AssetUrlBranch, value string) AssetUrlChain { + res := make([]KV, leaf.Depth) + + cur := leaf + curValue := value + for cur != nil { + res[cur.Depth-1] = KV{ + Key: cur.Key, + Value: curValue, + } + + curValue = cur.ParentValue + cur = cur.Parent + } + + return res +} diff --git a/providers-sdk/v1/inventory/asset_url_test.go b/providers-sdk/v1/inventory/asset_url_test.go new file mode 100644 index 0000000000..4b99071a55 --- /dev/null +++ b/providers-sdk/v1/inventory/asset_url_test.go @@ -0,0 +1,91 @@ +package inventory + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.mondoo.com/cnquery/v10/utils/sortx" +) + +func genTestSchema(t *testing.T) *AssetUrlSchema { + root, err := newAssetUrlSchema("technology") + require.NoError(t, err) + + err = root.Add(&AssetUrlBranch{ + Path: []string{"technology=aws"}, + Key: "account", + Values: map[string]*AssetUrlBranch{ + "*": { + Key: "service", + Values: map[string]*AssetUrlBranch{ + "ec2": { + Reference: []string{"technology=os"}, + }, + }, + }, + }, + }) + require.NoError(t, err) + + err = root.Add(&AssetUrlBranch{ + Path: []string{"technology=os"}, + Key: "family", + Values: map[string]*AssetUrlBranch{ + "windows": { + Key: "platform", + Values: map[string]*AssetUrlBranch{ + "windows server": nil, + }, + }, + }, + }) + require.NoError(t, err) + + err = root.Add(&AssetUrlBranch{ + Path: []string{"technology=os", "family=windows", "platform=windows server"}, + Key: "version", + Values: map[string]*AssetUrlBranch{ + "2019": nil, + "2022": nil, + }, + }) + require.NoError(t, err) + + return root +} + +func TestAddSubtree(t *testing.T) { + root := genTestSchema(t) + + t.Run("refresh cache and access keys", func(t *testing.T) { + root.RefreshCache() + + keys := sortx.Keys(root.keys) + assert.Equal(t, []string{ + "account", "family", "platform", "service", "technology", "version", + }, keys) + }) + + t.Run("build a query with referenced tree positions", func(t *testing.T) { + root.RefreshCache() + + queries := root.BuildQueries([]KV{ + {Key: "platform", Value: "windows server"}, + }) + assert.Equal(t, []AssetUrlChain{ + { + KV{"technology", "aws"}, + KV{"account", "*"}, + KV{"service", "ec2"}, + KV{"family", "windows"}, + KV{"platform", "windows server"}, + }, + { + KV{"technology", "os"}, + KV{"family", "windows"}, + KV{"platform", "windows server"}, + }, + }, queries) + }) +} diff --git a/providers-sdk/v1/inventory/inventory.pb.go b/providers-sdk/v1/inventory/inventory.pb.go index 2660de40f4..68b860c418 100644 --- a/providers-sdk/v1/inventory/inventory.pb.go +++ b/providers-sdk/v1/inventory/inventory.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc v4.25.2 // source: inventory.proto package inventory @@ -627,6 +627,128 @@ func (x *Asset) GetFqdn() string { return "" } +// AssetUrlBranch defines the hierarchy into which an asset can be placed. It makes +// it easier to find and group assets. Typically this is a subset of all possible +// asset relationships used to generate an opinionated view on an asset. +// +// AssetUrlBranches are part of the overall AssetUrlSchema, to which they are +// attached. +type AssetUrlBranch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The path to which this tree is getting attached. Only necessary for the + // top-most branches, not necessary for branches inside the values field. + Path []string `protobuf:"bytes,1,rep,name=path,proto3" json:"path,omitempty"` + // key of this tree. Every tree must have one key only at its root. + // Must be [a-z0-9_-]+ up to 100 characters + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // values of this tree. Other trees can attach themselves into this without + // overwriting existing values. Must be [A-Za-z0-9_-]+ up to 200 characters + // The special value '*' is used to designate arbitrary values. + Values map[string]*AssetUrlBranch `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // title for pretty-printing this branch + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` + // reference to other subtree that will be used at this position. Allows + // providers to re-use url parts from other definitions. For example: + // attaching the /technology=os subtree to cloud VMs + Reference []string `protobuf:"bytes,5,rep,name=reference,proto3" json:"reference,omitempty"` + // internal only: depth of the subtree + Depth uint32 `protobuf:"varint,20,opt,name=depth,proto3" json:"depth,omitempty"` + // internal only: parent relationships + Parent *AssetUrlBranch `protobuf:"bytes,21,opt,name=parent,proto3" json:"parent,omitempty"` + ParentValue string `protobuf:"bytes,22,opt,name=parentValue,proto3" json:"parentValue,omitempty"` +} + +func (x *AssetUrlBranch) Reset() { + *x = AssetUrlBranch{} + if protoimpl.UnsafeEnabled { + mi := &file_inventory_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AssetUrlBranch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AssetUrlBranch) ProtoMessage() {} + +func (x *AssetUrlBranch) ProtoReflect() protoreflect.Message { + mi := &file_inventory_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 AssetUrlBranch.ProtoReflect.Descriptor instead. +func (*AssetUrlBranch) Descriptor() ([]byte, []int) { + return file_inventory_proto_rawDescGZIP(), []int{1} +} + +func (x *AssetUrlBranch) GetPath() []string { + if x != nil { + return x.Path + } + return nil +} + +func (x *AssetUrlBranch) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *AssetUrlBranch) GetValues() map[string]*AssetUrlBranch { + if x != nil { + return x.Values + } + return nil +} + +func (x *AssetUrlBranch) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *AssetUrlBranch) GetReference() []string { + if x != nil { + return x.Reference + } + return nil +} + +func (x *AssetUrlBranch) GetDepth() uint32 { + if x != nil { + return x.Depth + } + return 0 +} + +func (x *AssetUrlBranch) GetParent() *AssetUrlBranch { + if x != nil { + return x.Parent + } + return nil +} + +func (x *AssetUrlBranch) GetParentValue() string { + if x != nil { + return x.ParentValue + } + return "" +} + type Config struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -662,14 +784,14 @@ type Config struct { PlatformId string `protobuf:"bytes,26,opt,name=platform_id,json=platformId,proto3" json:"platform_id,omitempty"` Capabilities []string `protobuf:"bytes,29,rep,name=capabilities,proto3" json:"capabilities,omitempty"` // Determines whether to delay discovery during the connection phase. - // Discovery will only happen if this is false + // Discovery will only happen if Connect is called and this is false DelayDiscovery bool `protobuf:"varint,31,opt,name=delay_discovery,json=delayDiscovery,proto3" json:"delay_discovery,omitempty"` } func (x *Config) Reset() { *x = Config{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[1] + mi := &file_inventory_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -682,7 +804,7 @@ func (x *Config) String() string { func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[1] + mi := &file_inventory_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -695,7 +817,7 @@ func (x *Config) ProtoReflect() protoreflect.Message { // Deprecated: Use Config.ProtoReflect.Descriptor instead. func (*Config) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{1} + return file_inventory_proto_rawDescGZIP(), []int{2} } func (x *Config) GetBackend() ProviderType { @@ -838,7 +960,7 @@ type Sudo struct { func (x *Sudo) Reset() { *x = Sudo{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[2] + mi := &file_inventory_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -851,7 +973,7 @@ func (x *Sudo) String() string { func (*Sudo) ProtoMessage() {} func (x *Sudo) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[2] + mi := &file_inventory_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -864,7 +986,7 @@ func (x *Sudo) ProtoReflect() protoreflect.Message { // Deprecated: Use Sudo.ProtoReflect.Descriptor instead. func (*Sudo) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{2} + return file_inventory_proto_rawDescGZIP(), []int{3} } func (x *Sudo) GetActive() bool { @@ -907,7 +1029,7 @@ type Discovery struct { func (x *Discovery) Reset() { *x = Discovery{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[3] + mi := &file_inventory_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -920,7 +1042,7 @@ func (x *Discovery) String() string { func (*Discovery) ProtoMessage() {} func (x *Discovery) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[3] + mi := &file_inventory_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -933,7 +1055,7 @@ func (x *Discovery) ProtoReflect() protoreflect.Message { // Deprecated: Use Discovery.ProtoReflect.Descriptor instead. func (*Discovery) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{3} + return file_inventory_proto_rawDescGZIP(), []int{4} } func (x *Discovery) GetTargets() []string { @@ -972,7 +1094,7 @@ type Platform struct { func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[4] + mi := &file_inventory_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -985,7 +1107,7 @@ func (x *Platform) String() string { func (*Platform) ProtoMessage() {} func (x *Platform) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[4] + mi := &file_inventory_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -998,7 +1120,7 @@ func (x *Platform) ProtoReflect() protoreflect.Message { // Deprecated: Use Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{4} + return file_inventory_proto_rawDescGZIP(), []int{5} } func (x *Platform) GetName() string { @@ -1099,7 +1221,7 @@ type TypeMeta struct { func (x *TypeMeta) Reset() { *x = TypeMeta{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[5] + mi := &file_inventory_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1112,7 +1234,7 @@ func (x *TypeMeta) String() string { func (*TypeMeta) ProtoMessage() {} func (x *TypeMeta) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[5] + mi := &file_inventory_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1125,7 +1247,7 @@ func (x *TypeMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeMeta.ProtoReflect.Descriptor instead. func (*TypeMeta) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{5} + return file_inventory_proto_rawDescGZIP(), []int{6} } func (x *TypeMeta) GetKind() string { @@ -1195,7 +1317,7 @@ type ObjectMeta struct { func (x *ObjectMeta) Reset() { *x = ObjectMeta{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[6] + mi := &file_inventory_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1208,7 +1330,7 @@ func (x *ObjectMeta) String() string { func (*ObjectMeta) ProtoMessage() {} func (x *ObjectMeta) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[6] + mi := &file_inventory_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1221,7 +1343,7 @@ func (x *ObjectMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectMeta.ProtoReflect.Descriptor instead. func (*ObjectMeta) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{6} + return file_inventory_proto_rawDescGZIP(), []int{7} } func (x *ObjectMeta) GetName() string { @@ -1285,7 +1407,7 @@ type Time struct { func (x *Time) Reset() { *x = Time{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[7] + mi := &file_inventory_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1298,7 +1420,7 @@ func (x *Time) String() string { func (*Time) ProtoMessage() {} func (x *Time) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[7] + mi := &file_inventory_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1311,7 +1433,7 @@ func (x *Time) ProtoReflect() protoreflect.Message { // Deprecated: Use Time.ProtoReflect.Descriptor instead. func (*Time) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{7} + return file_inventory_proto_rawDescGZIP(), []int{8} } func (x *Time) GetSeconds() int64 { @@ -1355,7 +1477,7 @@ type OwnerReference struct { func (x *OwnerReference) Reset() { *x = OwnerReference{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[8] + mi := &file_inventory_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1368,7 +1490,7 @@ func (x *OwnerReference) String() string { func (*OwnerReference) ProtoMessage() {} func (x *OwnerReference) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[8] + mi := &file_inventory_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1381,7 +1503,7 @@ func (x *OwnerReference) ProtoReflect() protoreflect.Message { // Deprecated: Use OwnerReference.ProtoReflect.Descriptor instead. func (*OwnerReference) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{8} + return file_inventory_proto_rawDescGZIP(), []int{9} } func (x *OwnerReference) GetApiVersion() string { @@ -1431,7 +1553,7 @@ type Inventory struct { func (x *Inventory) Reset() { *x = Inventory{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[9] + mi := &file_inventory_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1444,7 +1566,7 @@ func (x *Inventory) String() string { func (*Inventory) ProtoMessage() {} func (x *Inventory) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[9] + mi := &file_inventory_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1457,7 +1579,7 @@ func (x *Inventory) ProtoReflect() protoreflect.Message { // Deprecated: Use Inventory.ProtoReflect.Descriptor instead. func (*Inventory) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{9} + return file_inventory_proto_rawDescGZIP(), []int{10} } func (x *Inventory) GetMetadata() *ObjectMeta { @@ -1497,7 +1619,7 @@ type InventorySpec struct { func (x *InventorySpec) Reset() { *x = InventorySpec{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[10] + mi := &file_inventory_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1510,7 +1632,7 @@ func (x *InventorySpec) String() string { func (*InventorySpec) ProtoMessage() {} func (x *InventorySpec) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[10] + mi := &file_inventory_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1523,7 +1645,7 @@ func (x *InventorySpec) ProtoReflect() protoreflect.Message { // Deprecated: Use InventorySpec.ProtoReflect.Descriptor instead. func (*InventorySpec) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{10} + return file_inventory_proto_rawDescGZIP(), []int{11} } func (x *InventorySpec) GetAssets() []*Asset { @@ -1570,7 +1692,7 @@ type InventoryStatus struct { func (x *InventoryStatus) Reset() { *x = InventoryStatus{} if protoimpl.UnsafeEnabled { - mi := &file_inventory_proto_msgTypes[11] + mi := &file_inventory_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1583,7 +1705,7 @@ func (x *InventoryStatus) String() string { func (*InventoryStatus) ProtoMessage() {} func (x *InventoryStatus) ProtoReflect() protoreflect.Message { - mi := &file_inventory_proto_msgTypes[11] + mi := &file_inventory_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1596,7 +1718,7 @@ func (x *InventoryStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InventoryStatus.ProtoReflect.Descriptor instead. func (*InventoryStatus) Descriptor() ([]byte, []int) { - return file_inventory_proto_rawDescGZIP(), []int{11} + return file_inventory_proto_rawDescGZIP(), []int{12} } var File_inventory_proto protoreflect.FileDescriptor @@ -1668,259 +1790,284 @@ var file_inventory_proto_rawDesc = []byte{ 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, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, - 0x04, 0x08, 0x1e, 0x10, 0x1f, 0x22, 0xa1, 0x06, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x3c, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x22, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3b, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, - 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x38, - 0x5f, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x1e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, - 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x2e, 0x0a, - 0x04, 0x73, 0x75, 0x64, 0x6f, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x64, 0x6f, 0x52, 0x04, 0x73, 0x75, 0x64, 0x6f, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x43, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x08, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x69, 0x64, - 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x1a, - 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 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, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x06, 0x10, - 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, - 0x0a, 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x14, 0x10, 0x15, 0x22, 0x68, 0x0a, 0x04, 0x53, 0x75, 0x64, - 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, - 0x65, 0x6c, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 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, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x94, 0x03, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x12, 0x55, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x76, 0x38, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, + 0x04, 0x08, 0x1e, 0x10, 0x1f, 0x22, 0x8b, 0x03, 0x0a, 0x0e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, + 0x72, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, + 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x56, 0x38, 0x5f, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x10, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x56, 0x38, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x16, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 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, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0xa4, 0x03, 0x0a, 0x0a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, - 0x61, 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, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x53, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, - 0x0a, 0x0f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x39, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x42, 0x72, + 0x61, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, + 0x72, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x1a, 0x5f, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 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, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x55, + 0x72, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xa1, 0x06, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, + 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x22, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x38, 0x5f, 0x4b, + 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x1e, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x12, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x73, + 0x75, 0x64, 0x6f, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x75, 0x64, 0x6f, 0x52, 0x04, 0x73, 0x75, 0x64, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x12, 0x43, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x08, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, + 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x1d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x1a, 0x3a, 0x0a, + 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 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, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, + 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, + 0x0b, 0x4a, 0x04, 0x08, 0x14, 0x10, 0x15, 0x22, 0x68, 0x0a, 0x04, 0x53, 0x75, 0x64, 0x6f, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x68, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x65, 0x6c, + 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, + 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x39, + 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 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, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x36, 0x0a, 0x04, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, - 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, - 0x73, 0x22, 0x6a, 0x0a, 0x0e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xc1, 0x01, - 0x0a, 0x09, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x04, 0x73, 0x70, 0x65, - 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, - 0x6f, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0xd3, 0x03, 0x0a, 0x0d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x33, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x94, 0x03, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, + 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x12, 0x55, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, + 0x38, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, + 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x38, + 0x5f, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x10, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x56, 0x38, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x3e, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0xa4, 0x03, 0x0a, 0x0a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 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, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x44, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x53, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, + 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x0f, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, + 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x36, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, + 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x22, + 0x6a, 0x0a, 0x0e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xc1, 0x01, 0x0a, 0x09, + 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, + 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0xd3, 0x03, 0x0a, 0x0d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x70, 0x65, + 0x63, 0x12, 0x33, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x6e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3e, + 0x0a, 0x05, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x75, 0x6c, 0x74, - 0x12, 0x29, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x68, 0x0a, 0x14, 0x75, - 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6d, 0x6f, 0x6e, 0x64, - 0x6f, 0x6f, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x52, 0x13, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x1a, 0x60, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 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, 0x36, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x11, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x6f, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0xec, 0x01, 0x0a, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x12, - 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, - 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, - 0x50, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, - 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, - 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x10, - 0x08, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, - 0x45, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x46, 0x46, - 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0b, 0x2a, 0x3a, 0x0a, 0x0d, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x41, - 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, - 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x43, - 0x49, 0x43, 0x44, 0x10, 0x01, 0x2a, 0x85, 0x04, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, - 0x4f, 0x53, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x45, - 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x01, 0x12, 0x1b, 0x0a, - 0x17, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x5f, 0x43, - 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x53, - 0x48, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x49, 0x4e, 0x52, 0x4d, 0x10, 0x04, 0x12, 0x17, - 0x0a, 0x13, 0x41, 0x57, 0x53, 0x5f, 0x53, 0x53, 0x4d, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x43, 0x4f, - 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, 0x54, 0x41, - 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x59, 0x10, 0x06, 0x12, - 0x07, 0x0a, 0x03, 0x54, 0x41, 0x52, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x4f, 0x43, 0x4b, - 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x53, 0x50, 0x48, 0x45, 0x52, 0x45, 0x10, 0x09, 0x12, - 0x0d, 0x0a, 0x09, 0x41, 0x52, 0x49, 0x53, 0x54, 0x41, 0x45, 0x4f, 0x53, 0x10, 0x0a, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x57, 0x53, 0x10, 0x0c, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x43, 0x50, 0x10, 0x0d, - 0x12, 0x09, 0x0a, 0x05, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, 0x4d, - 0x53, 0x33, 0x36, 0x35, 0x10, 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, 0x49, 0x10, 0x10, - 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x53, 0x50, 0x48, 0x45, 0x52, 0x45, 0x5f, 0x56, 0x4d, 0x10, 0x11, - 0x12, 0x06, 0x0a, 0x02, 0x46, 0x53, 0x10, 0x12, 0x12, 0x07, 0x0a, 0x03, 0x4b, 0x38, 0x53, 0x10, - 0x13, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x51, 0x55, 0x49, 0x4e, 0x49, 0x58, 0x5f, 0x4d, 0x45, 0x54, - 0x41, 0x4c, 0x10, 0x14, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x15, - 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x16, 0x12, 0x0b, 0x0a, 0x07, - 0x56, 0x41, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x17, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x57, 0x53, - 0x5f, 0x45, 0x43, 0x32, 0x5f, 0x45, 0x42, 0x53, 0x10, 0x18, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, - 0x54, 0x4c, 0x41, 0x42, 0x10, 0x19, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x45, 0x52, 0x52, 0x41, 0x46, - 0x4f, 0x52, 0x4d, 0x10, 0x1a, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x1b, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x1c, 0x12, 0x08, 0x0a, 0x04, - 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x1d, 0x12, 0x14, 0x0a, 0x10, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, - 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x1e, 0x12, 0x09, 0x0a, 0x05, - 0x53, 0x4c, 0x41, 0x43, 0x4b, 0x10, 0x1f, 0x12, 0x07, 0x0a, 0x03, 0x56, 0x43, 0x44, 0x10, 0x20, - 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x43, 0x49, 0x10, 0x21, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x50, 0x43, - 0x55, 0x41, 0x10, 0x22, 0x12, 0x21, 0x0a, 0x1d, 0x47, 0x43, 0x50, 0x5f, 0x43, 0x4f, 0x4d, 0x50, - 0x55, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x4e, 0x41, - 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x23, 0x22, 0x04, 0x08, 0x0b, 0x10, 0x0b, 0x2a, 0xcb, 0x02, - 0x0a, 0x11, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x38, 0x5f, 0x4b, - 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x56, 0x49, - 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x4d, - 0x41, 0x47, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, 0x4f, - 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, - 0x0d, 0x0a, 0x09, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x03, 0x12, 0x10, - 0x0a, 0x0c, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x10, 0x04, - 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, - 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x10, - 0x0a, 0x0c, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x10, 0x07, - 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x50, 0x49, 0x10, 0x08, 0x12, 0x13, - 0x0a, 0x0f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x41, 0x52, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, - 0x4c, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x45, 0x54, 0x57, - 0x4f, 0x52, 0x4b, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x38, - 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0c, 0x12, - 0x13, 0x0a, 0x0f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x47, 0x43, 0x50, 0x5f, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x10, 0x0d, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x5a, 0x55, - 0x52, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0e, 0x42, 0x36, 0x5a, 0x34, 0x67, - 0x6f, 0x2e, 0x6d, 0x6f, 0x6e, 0x64, 0x6f, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x30, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, - 0x6f, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x29, + 0x0a, 0x10, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x68, 0x0a, 0x14, 0x75, 0x70, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6d, 0x6f, 0x6e, 0x64, 0x6f, 0x6f, + 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x13, + 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x1a, 0x60, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 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, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x11, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, + 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0xec, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x04, + 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, + 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x55, + 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x10, 0x0a, + 0x0c, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x10, 0x08, 0x12, + 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, + 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, + 0x4e, 0x45, 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0b, 0x2a, 0x3a, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x41, 0x54, 0x45, + 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x43, 0x49, 0x43, + 0x44, 0x10, 0x01, 0x2a, 0x85, 0x04, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x4f, 0x53, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x47, + 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, + 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x47, 0x49, 0x4e, 0x45, 0x5f, 0x43, 0x4f, 0x4e, + 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x53, 0x48, 0x10, + 0x03, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x49, 0x4e, 0x52, 0x4d, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, + 0x41, 0x57, 0x53, 0x5f, 0x53, 0x53, 0x4d, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, + 0x41, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x59, 0x10, 0x06, 0x12, 0x07, 0x0a, + 0x03, 0x54, 0x41, 0x52, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x4f, 0x43, 0x4b, 0x10, 0x08, + 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x53, 0x50, 0x48, 0x45, 0x52, 0x45, 0x10, 0x09, 0x12, 0x0d, 0x0a, + 0x09, 0x41, 0x52, 0x49, 0x53, 0x54, 0x41, 0x45, 0x4f, 0x53, 0x10, 0x0a, 0x12, 0x07, 0x0a, 0x03, + 0x41, 0x57, 0x53, 0x10, 0x0c, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x43, 0x50, 0x10, 0x0d, 0x12, 0x09, + 0x0a, 0x05, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x53, 0x33, + 0x36, 0x35, 0x10, 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x4d, 0x49, 0x10, 0x10, 0x12, 0x0e, + 0x0a, 0x0a, 0x56, 0x53, 0x50, 0x48, 0x45, 0x52, 0x45, 0x5f, 0x56, 0x4d, 0x10, 0x11, 0x12, 0x06, + 0x0a, 0x02, 0x46, 0x53, 0x10, 0x12, 0x12, 0x07, 0x0a, 0x03, 0x4b, 0x38, 0x53, 0x10, 0x13, 0x12, + 0x11, 0x0a, 0x0d, 0x45, 0x51, 0x55, 0x49, 0x4e, 0x49, 0x58, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x4c, + 0x10, 0x14, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x15, 0x12, 0x0a, + 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x16, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x41, + 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x17, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x57, 0x53, 0x5f, 0x45, + 0x43, 0x32, 0x5f, 0x45, 0x42, 0x53, 0x10, 0x18, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x4c, + 0x41, 0x42, 0x10, 0x19, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x45, 0x52, 0x52, 0x41, 0x46, 0x4f, 0x52, + 0x4d, 0x10, 0x1a, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x1b, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x1c, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x4b, + 0x54, 0x41, 0x10, 0x1d, 0x12, 0x14, 0x0a, 0x10, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x57, + 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x1e, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x4c, + 0x41, 0x43, 0x4b, 0x10, 0x1f, 0x12, 0x07, 0x0a, 0x03, 0x56, 0x43, 0x44, 0x10, 0x20, 0x12, 0x07, + 0x0a, 0x03, 0x4f, 0x43, 0x49, 0x10, 0x21, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x50, 0x43, 0x55, 0x41, + 0x10, 0x22, 0x12, 0x21, 0x0a, 0x1d, 0x47, 0x43, 0x50, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x55, 0x54, + 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, + 0x48, 0x4f, 0x54, 0x10, 0x23, 0x22, 0x04, 0x08, 0x0b, 0x10, 0x0b, 0x2a, 0xcb, 0x02, 0x0a, 0x11, + 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x38, 0x5f, 0x4b, 0x69, 0x6e, + 0x64, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x56, 0x49, 0x52, 0x54, + 0x55, 0x41, 0x4c, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, + 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, + 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, + 0x09, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x18, + 0x0a, 0x14, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x4d, + 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x10, 0x07, 0x12, 0x0c, + 0x0a, 0x08, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x50, 0x49, 0x10, 0x08, 0x12, 0x13, 0x0a, 0x0f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x41, 0x52, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x4c, 0x10, + 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, + 0x4b, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x38, 0x53, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x41, 0x57, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0c, 0x12, 0x13, 0x0a, + 0x0f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x47, 0x43, 0x50, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x10, 0x0d, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, + 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0e, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x6f, 0x2e, + 0x6d, 0x6f, 0x6e, 0x64, 0x6f, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x30, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, + 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1936,71 +2083,76 @@ func file_inventory_proto_rawDescGZIP() []byte { } var file_inventory_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_inventory_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_inventory_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_inventory_proto_goTypes = []interface{}{ (State)(0), // 0: cnquery.providers.v1.State (AssetCategory)(0), // 1: cnquery.providers.v1.AssetCategory (ProviderType)(0), // 2: cnquery.providers.v1.ProviderType (DeprecatedV8_Kind)(0), // 3: cnquery.providers.v1.DeprecatedV8_Kind (*Asset)(nil), // 4: cnquery.providers.v1.Asset - (*Config)(nil), // 5: cnquery.providers.v1.Config - (*Sudo)(nil), // 6: cnquery.providers.v1.Sudo - (*Discovery)(nil), // 7: cnquery.providers.v1.Discovery - (*Platform)(nil), // 8: cnquery.providers.v1.Platform - (*TypeMeta)(nil), // 9: cnquery.providers.v1.TypeMeta - (*ObjectMeta)(nil), // 10: cnquery.providers.v1.ObjectMeta - (*Time)(nil), // 11: cnquery.providers.v1.Time - (*OwnerReference)(nil), // 12: cnquery.providers.v1.OwnerReference - (*Inventory)(nil), // 13: cnquery.providers.v1.Inventory - (*InventorySpec)(nil), // 14: cnquery.providers.v1.InventorySpec - (*InventoryStatus)(nil), // 15: cnquery.providers.v1.InventoryStatus - nil, // 16: cnquery.providers.v1.Asset.LabelsEntry - nil, // 17: cnquery.providers.v1.Asset.AnnotationsEntry - nil, // 18: cnquery.providers.v1.Asset.OptionsEntry - nil, // 19: cnquery.providers.v1.Config.OptionsEntry - nil, // 20: cnquery.providers.v1.Discovery.FilterEntry - nil, // 21: cnquery.providers.v1.Platform.LabelsEntry - nil, // 22: cnquery.providers.v1.ObjectMeta.LabelsEntry - nil, // 23: cnquery.providers.v1.ObjectMeta.AnnotationsEntry - nil, // 24: cnquery.providers.v1.InventorySpec.CredentialsEntry - (*vault.Credential)(nil), // 25: cnquery.providers.v1.Credential - (*vault.VaultConfiguration)(nil), // 26: cnquery.providers.v1.VaultConfiguration - (*upstream.ServiceAccountCredentials)(nil), // 27: mondoo.cnquery.upstream.v1.ServiceAccountCredentials + (*AssetUrlBranch)(nil), // 5: cnquery.providers.v1.AssetUrlBranch + (*Config)(nil), // 6: cnquery.providers.v1.Config + (*Sudo)(nil), // 7: cnquery.providers.v1.Sudo + (*Discovery)(nil), // 8: cnquery.providers.v1.Discovery + (*Platform)(nil), // 9: cnquery.providers.v1.Platform + (*TypeMeta)(nil), // 10: cnquery.providers.v1.TypeMeta + (*ObjectMeta)(nil), // 11: cnquery.providers.v1.ObjectMeta + (*Time)(nil), // 12: cnquery.providers.v1.Time + (*OwnerReference)(nil), // 13: cnquery.providers.v1.OwnerReference + (*Inventory)(nil), // 14: cnquery.providers.v1.Inventory + (*InventorySpec)(nil), // 15: cnquery.providers.v1.InventorySpec + (*InventoryStatus)(nil), // 16: cnquery.providers.v1.InventoryStatus + nil, // 17: cnquery.providers.v1.Asset.LabelsEntry + nil, // 18: cnquery.providers.v1.Asset.AnnotationsEntry + nil, // 19: cnquery.providers.v1.Asset.OptionsEntry + nil, // 20: cnquery.providers.v1.AssetUrlBranch.ValuesEntry + nil, // 21: cnquery.providers.v1.Config.OptionsEntry + nil, // 22: cnquery.providers.v1.Discovery.FilterEntry + nil, // 23: cnquery.providers.v1.Platform.LabelsEntry + nil, // 24: cnquery.providers.v1.ObjectMeta.LabelsEntry + nil, // 25: cnquery.providers.v1.ObjectMeta.AnnotationsEntry + nil, // 26: cnquery.providers.v1.InventorySpec.CredentialsEntry + (*vault.Credential)(nil), // 27: cnquery.providers.v1.Credential + (*vault.VaultConfiguration)(nil), // 28: cnquery.providers.v1.VaultConfiguration + (*upstream.ServiceAccountCredentials)(nil), // 29: mondoo.cnquery.upstream.v1.ServiceAccountCredentials } var file_inventory_proto_depIdxs = []int32{ 0, // 0: cnquery.providers.v1.Asset.state:type_name -> cnquery.providers.v1.State - 8, // 1: cnquery.providers.v1.Asset.platform:type_name -> cnquery.providers.v1.Platform - 5, // 2: cnquery.providers.v1.Asset.connections:type_name -> cnquery.providers.v1.Config - 16, // 3: cnquery.providers.v1.Asset.labels:type_name -> cnquery.providers.v1.Asset.LabelsEntry - 17, // 4: cnquery.providers.v1.Asset.annotations:type_name -> cnquery.providers.v1.Asset.AnnotationsEntry - 18, // 5: cnquery.providers.v1.Asset.options:type_name -> cnquery.providers.v1.Asset.OptionsEntry + 9, // 1: cnquery.providers.v1.Asset.platform:type_name -> cnquery.providers.v1.Platform + 6, // 2: cnquery.providers.v1.Asset.connections:type_name -> cnquery.providers.v1.Config + 17, // 3: cnquery.providers.v1.Asset.labels:type_name -> cnquery.providers.v1.Asset.LabelsEntry + 18, // 4: cnquery.providers.v1.Asset.annotations:type_name -> cnquery.providers.v1.Asset.AnnotationsEntry + 19, // 5: cnquery.providers.v1.Asset.options:type_name -> cnquery.providers.v1.Asset.OptionsEntry 1, // 6: cnquery.providers.v1.Asset.category:type_name -> cnquery.providers.v1.AssetCategory 4, // 7: cnquery.providers.v1.Asset.related_assets:type_name -> cnquery.providers.v1.Asset - 2, // 8: cnquery.providers.v1.Config.backend:type_name -> cnquery.providers.v1.ProviderType - 3, // 9: cnquery.providers.v1.Config.kind:type_name -> cnquery.providers.v1.DeprecatedV8_Kind - 25, // 10: cnquery.providers.v1.Config.credentials:type_name -> cnquery.providers.v1.Credential - 6, // 11: cnquery.providers.v1.Config.sudo:type_name -> cnquery.providers.v1.Sudo - 19, // 12: cnquery.providers.v1.Config.options:type_name -> cnquery.providers.v1.Config.OptionsEntry - 7, // 13: cnquery.providers.v1.Config.discover:type_name -> cnquery.providers.v1.Discovery - 20, // 14: cnquery.providers.v1.Discovery.filter:type_name -> cnquery.providers.v1.Discovery.FilterEntry - 3, // 15: cnquery.providers.v1.Platform.deprecated_v8_kind:type_name -> cnquery.providers.v1.DeprecatedV8_Kind - 21, // 16: cnquery.providers.v1.Platform.labels:type_name -> cnquery.providers.v1.Platform.LabelsEntry - 22, // 17: cnquery.providers.v1.ObjectMeta.labels:type_name -> cnquery.providers.v1.ObjectMeta.LabelsEntry - 23, // 18: cnquery.providers.v1.ObjectMeta.annotations:type_name -> cnquery.providers.v1.ObjectMeta.AnnotationsEntry - 12, // 19: cnquery.providers.v1.ObjectMeta.ownerReferences:type_name -> cnquery.providers.v1.OwnerReference - 10, // 20: cnquery.providers.v1.Inventory.metadata:type_name -> cnquery.providers.v1.ObjectMeta - 14, // 21: cnquery.providers.v1.Inventory.spec:type_name -> cnquery.providers.v1.InventorySpec - 15, // 22: cnquery.providers.v1.Inventory.status:type_name -> cnquery.providers.v1.InventoryStatus - 4, // 23: cnquery.providers.v1.InventorySpec.assets:type_name -> cnquery.providers.v1.Asset - 24, // 24: cnquery.providers.v1.InventorySpec.credentials:type_name -> cnquery.providers.v1.InventorySpec.CredentialsEntry - 26, // 25: cnquery.providers.v1.InventorySpec.vault:type_name -> cnquery.providers.v1.VaultConfiguration - 27, // 26: cnquery.providers.v1.InventorySpec.upstream_credentials:type_name -> mondoo.cnquery.upstream.v1.ServiceAccountCredentials - 25, // 27: cnquery.providers.v1.InventorySpec.CredentialsEntry.value:type_name -> cnquery.providers.v1.Credential - 28, // [28:28] is the sub-list for method output_type - 28, // [28:28] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 20, // 8: cnquery.providers.v1.AssetUrlBranch.values:type_name -> cnquery.providers.v1.AssetUrlBranch.ValuesEntry + 5, // 9: cnquery.providers.v1.AssetUrlBranch.parent:type_name -> cnquery.providers.v1.AssetUrlBranch + 2, // 10: cnquery.providers.v1.Config.backend:type_name -> cnquery.providers.v1.ProviderType + 3, // 11: cnquery.providers.v1.Config.kind:type_name -> cnquery.providers.v1.DeprecatedV8_Kind + 27, // 12: cnquery.providers.v1.Config.credentials:type_name -> cnquery.providers.v1.Credential + 7, // 13: cnquery.providers.v1.Config.sudo:type_name -> cnquery.providers.v1.Sudo + 21, // 14: cnquery.providers.v1.Config.options:type_name -> cnquery.providers.v1.Config.OptionsEntry + 8, // 15: cnquery.providers.v1.Config.discover:type_name -> cnquery.providers.v1.Discovery + 22, // 16: cnquery.providers.v1.Discovery.filter:type_name -> cnquery.providers.v1.Discovery.FilterEntry + 3, // 17: cnquery.providers.v1.Platform.deprecated_v8_kind:type_name -> cnquery.providers.v1.DeprecatedV8_Kind + 23, // 18: cnquery.providers.v1.Platform.labels:type_name -> cnquery.providers.v1.Platform.LabelsEntry + 24, // 19: cnquery.providers.v1.ObjectMeta.labels:type_name -> cnquery.providers.v1.ObjectMeta.LabelsEntry + 25, // 20: cnquery.providers.v1.ObjectMeta.annotations:type_name -> cnquery.providers.v1.ObjectMeta.AnnotationsEntry + 13, // 21: cnquery.providers.v1.ObjectMeta.ownerReferences:type_name -> cnquery.providers.v1.OwnerReference + 11, // 22: cnquery.providers.v1.Inventory.metadata:type_name -> cnquery.providers.v1.ObjectMeta + 15, // 23: cnquery.providers.v1.Inventory.spec:type_name -> cnquery.providers.v1.InventorySpec + 16, // 24: cnquery.providers.v1.Inventory.status:type_name -> cnquery.providers.v1.InventoryStatus + 4, // 25: cnquery.providers.v1.InventorySpec.assets:type_name -> cnquery.providers.v1.Asset + 26, // 26: cnquery.providers.v1.InventorySpec.credentials:type_name -> cnquery.providers.v1.InventorySpec.CredentialsEntry + 28, // 27: cnquery.providers.v1.InventorySpec.vault:type_name -> cnquery.providers.v1.VaultConfiguration + 29, // 28: cnquery.providers.v1.InventorySpec.upstream_credentials:type_name -> mondoo.cnquery.upstream.v1.ServiceAccountCredentials + 5, // 29: cnquery.providers.v1.AssetUrlBranch.ValuesEntry.value:type_name -> cnquery.providers.v1.AssetUrlBranch + 27, // 30: cnquery.providers.v1.InventorySpec.CredentialsEntry.value:type_name -> cnquery.providers.v1.Credential + 31, // [31:31] is the sub-list for method output_type + 31, // [31:31] is the sub-list for method input_type + 31, // [31:31] is the sub-list for extension type_name + 31, // [31:31] is the sub-list for extension extendee + 0, // [0:31] is the sub-list for field type_name } func init() { file_inventory_proto_init() } @@ -2022,7 +2174,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Config); i { + switch v := v.(*AssetUrlBranch); i { case 0: return &v.state case 1: @@ -2034,7 +2186,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sudo); i { + switch v := v.(*Config); i { case 0: return &v.state case 1: @@ -2046,7 +2198,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Discovery); i { + switch v := v.(*Sudo); i { case 0: return &v.state case 1: @@ -2058,7 +2210,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Platform); i { + switch v := v.(*Discovery); i { case 0: return &v.state case 1: @@ -2070,7 +2222,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TypeMeta); i { + switch v := v.(*Platform); i { case 0: return &v.state case 1: @@ -2082,7 +2234,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ObjectMeta); i { + switch v := v.(*TypeMeta); i { case 0: return &v.state case 1: @@ -2094,7 +2246,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Time); i { + switch v := v.(*ObjectMeta); i { case 0: return &v.state case 1: @@ -2106,7 +2258,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OwnerReference); i { + switch v := v.(*Time); i { case 0: return &v.state case 1: @@ -2118,7 +2270,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Inventory); i { + switch v := v.(*OwnerReference); i { case 0: return &v.state case 1: @@ -2130,7 +2282,7 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InventorySpec); i { + switch v := v.(*Inventory); i { case 0: return &v.state case 1: @@ -2142,6 +2294,18 @@ func file_inventory_proto_init() { } } file_inventory_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InventorySpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_inventory_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InventoryStatus); i { case 0: return &v.state @@ -2160,7 +2324,7 @@ func file_inventory_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_inventory_proto_rawDesc, NumEnums: 4, - NumMessages: 21, + NumMessages: 23, NumExtensions: 0, NumServices: 0, }, diff --git a/providers-sdk/v1/inventory/inventory.proto b/providers-sdk/v1/inventory/inventory.proto index 6a79d7244f..6fafbedda1 100644 --- a/providers-sdk/v1/inventory/inventory.proto +++ b/providers-sdk/v1/inventory/inventory.proto @@ -84,6 +84,36 @@ message Asset { string fqdn = 37; } +// AssetUrlBranch defines the hierarchy into which an asset can be placed. It makes +// it easier to find and group assets. Typically this is a subset of all possible +// asset relationships used to generate an opinionated view on an asset. +// +// AssetUrlBranches are part of the overall AssetUrlSchema, to which they are +// attached. +message AssetUrlBranch { + // The path to which this tree is getting attached. Only necessary for the + // top-most branches, not necessary for branches inside the values field. + repeated string path = 1; + // key of this tree. Every tree must have one key only at its root. + // Must be [a-z0-9_-]+ up to 100 characters + string key = 2; + // values of this tree. Other trees can attach themselves into this without + // overwriting existing values. Must be [A-Za-z0-9_-]+ up to 200 characters + // The special value '*' is used to designate arbitrary values. + map values = 3; + // title for pretty-printing this branch + string title = 4; + // reference to other subtree that will be used at this position. Allows + // providers to re-use url parts from other definitions. For example: + // attaching the /technology=os subtree to cloud VMs + repeated string reference = 5; + // internal only: depth of the subtree + uint32 depth = 20; + // internal only: parent relationships + AssetUrlBranch parent = 21; + string parentValue = 22; +} + // FIXME: DEPRECATED, remove in v10.0 (or later) vv enum ProviderType { // protolint:disable:next ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH diff --git a/providers-sdk/v1/resources/resources.pb.go b/providers-sdk/v1/resources/resources.pb.go index 608e7729e5..a9434103e3 100644 --- a/providers-sdk/v1/resources/resources.pb.go +++ b/providers-sdk/v1/resources/resources.pb.go @@ -252,7 +252,12 @@ type ResourceInfo struct { MinMondooVersion string `protobuf:"bytes,25,opt,name=min_mondoo_version,json=minMondooVersion,proto3" json:"min_mondoo_version,omitempty"` Defaults string `protobuf:"bytes,26,opt,name=defaults,proto3" json:"defaults,omitempty"` Provider string `protobuf:"bytes,27,opt,name=provider,proto3" json:"provider,omitempty"` - Others []*ResourceInfo `protobuf:"bytes,29,rep,name=others,proto3" json:"others,omitempty"` + // This field contains references to other providers with the same + // resource/field. + // Note: Please do not use this field, it is only temporary and will be + // removed in the future once binding resources are mandatory for all + // executions. + Others []*ResourceInfo `protobuf:"bytes,29,rep,name=others,proto3" json:"others,omitempty"` } func (x *ResourceInfo) Reset() { @@ -394,7 +399,12 @@ type Field struct { IsImplicitResource bool `protobuf:"varint,24,opt,name=is_implicit_resource,json=isImplicitResource,proto3" json:"is_implicit_resource,omitempty"` IsEmbedded bool `protobuf:"varint,25,opt,name=is_embedded,json=isEmbedded,proto3" json:"is_embedded,omitempty"` Provider string `protobuf:"bytes,27,opt,name=provider,proto3" json:"provider,omitempty"` - Others []*Field `protobuf:"bytes,29,rep,name=others,proto3" json:"others,omitempty"` + // This field contains references to other providers with the same + // resource/field. + // Note: Please do not use this field, it is only temporary and will be + // removed in the future once binding resources are mandatory for all + // executions. + Others []*Field `protobuf:"bytes,29,rep,name=others,proto3" json:"others,omitempty"` } func (x *Field) Reset() {