diff --git a/README.md b/README.md index 4bacfaec..ba49b472 100644 --- a/README.md +++ b/README.md @@ -260,6 +260,7 @@ container parameters: - Unified cgroup v2 parameter map - Linux seccomp policy - Linux network devices + - Linux memory policy - Linux namespaces - scheduling policy parameters diff --git a/pkg/adaptation/adaptation_suite_test.go b/pkg/adaptation/adaptation_suite_test.go index 9288928e..617608ca 100644 --- a/pkg/adaptation/adaptation_suite_test.go +++ b/pkg/adaptation/adaptation_suite_test.go @@ -557,6 +557,11 @@ var _ = Describe("Plugin container creation adjustments", func() { Policy: api.LinuxSchedulerPolicy_SCHED_NONE, }) + case "linux memory policy": + a.SetLinuxMemoryPolicy( + api.MpolMode_MPOL_INTERLEAVE, "0,1", api.MpolFlag_MPOL_F_STATIC_NODES, + ) + case "resources/cpu": a.SetLinuxCPUShares(123) a.SetLinuxCPUQuota(456) @@ -846,6 +851,20 @@ var _ = Describe("Plugin container creation adjustments", func() { }, ), + Entry("adjust linux memory policy", "linux memory policy", + &api.ContainerAdjustment{ + Linux: &api.LinuxContainerAdjustment{ + MemoryPolicy: &api.LinuxMemoryPolicy{ + Mode: api.MpolMode_MPOL_INTERLEAVE, + Nodes: "0,1", + Flags: []api.MpolFlag{ + api.MpolFlag_MPOL_F_STATIC_NODES, + }, + }, + }, + }, + ), + Entry("adjust CPU resources", "resources/cpu", &api.ContainerAdjustment{ Linux: &api.LinuxContainerAdjustment{ diff --git a/pkg/adaptation/api.go b/pkg/adaptation/api.go index eb9a1d9a..330052a0 100644 --- a/pkg/adaptation/api.go +++ b/pkg/adaptation/api.go @@ -88,6 +88,7 @@ type ( LinuxResources = api.LinuxResources LinuxCPU = api.LinuxCPU LinuxMemory = api.LinuxMemory + LinuxMemoryPolicy = api.LinuxMemoryPolicy LinuxDevice = api.LinuxDevice LinuxDeviceCgroup = api.LinuxDeviceCgroup LinuxIOPriority = api.LinuxIOPriority diff --git a/pkg/adaptation/result.go b/pkg/adaptation/result.go index 636359be..e2d75efe 100644 --- a/pkg/adaptation/result.go +++ b/pkg/adaptation/result.go @@ -248,6 +248,9 @@ func (r *result) adjust(rpl *ContainerAdjustment, plugin string) error { if err := r.adjustLinuxScheduler(rpl.Linux.Scheduler, plugin); err != nil { return err } + if err := r.adjustMemoryPolicy(rpl.Linux.MemoryPolicy, plugin); err != nil { + return err + } } if err := r.adjustRlimits(rpl.Rlimits, plugin); err != nil { return err @@ -974,6 +977,22 @@ func (r *result) adjustLinuxScheduler(sch *LinuxScheduler, plugin string) error return nil } +func (r *result) adjustMemoryPolicy(memoryPolicy *LinuxMemoryPolicy, plugin string) error { + if memoryPolicy == nil { + return nil + } + + id := r.request.create.Container.Id + + if err := r.owners.ClaimMemoryPolicy(id, plugin); err != nil { + return err + } + + r.reply.adjust.Linux.MemoryPolicy = memoryPolicy + + return nil +} + func (r *result) adjustRlimits(rlimits []*POSIXRlimit, plugin string) error { create, id, adjust := r.request.create, r.request.create.Container.Id, r.reply.adjust for _, l := range rlimits { diff --git a/pkg/api/adjustment.go b/pkg/api/adjustment.go index 5ff781c2..4cb63206 100644 --- a/pkg/api/adjustment.go +++ b/pkg/api/adjustment.go @@ -180,6 +180,14 @@ func (a *ContainerAdjustment) RemoveLinuxNetDevice(hostDev string) { a.Linux.NetDevices[MarkForRemoval(hostDev)] = nil } +// SetLinuxMemoryPolicy records setting the Linux memory policy for a container. +func (a *ContainerAdjustment) SetLinuxMemoryPolicy(mode MpolMode, nodes string, flags ...MpolFlag) { + a.initLinuxMemoryPolicy() + a.Linux.MemoryPolicy.Mode = mode + a.Linux.MemoryPolicy.Nodes = nodes + a.Linux.MemoryPolicy.Flags = slices.Clone(flags) +} + // SetLinuxMemoryLimit records setting the memory limit for a container. func (a *ContainerAdjustment) SetLinuxMemoryLimit(value int64) { a.initLinuxResourcesMemory() @@ -378,6 +386,13 @@ func (a *ContainerAdjustment) initLinuxNamespaces() { } } +func (a *ContainerAdjustment) initLinuxMemoryPolicy() { + a.initLinux() + if a.Linux.MemoryPolicy == nil { + a.Linux.MemoryPolicy = &LinuxMemoryPolicy{} + } +} + func (a *ContainerAdjustment) initLinuxResources() { a.initLinux() if a.Linux.Resources == nil { diff --git a/pkg/api/api.pb.go b/pkg/api/api.pb.go index f340034d..755850df 100644 --- a/pkg/api/api.pb.go +++ b/pkg/api/api.pb.go @@ -358,6 +358,116 @@ func (LinuxSchedulerFlag) EnumDescriptor() ([]byte, []int) { return file_pkg_api_api_proto_rawDescGZIP(), []int{4} } +type MpolMode int32 + +const ( + MpolMode_MPOL_DEFAULT MpolMode = 0 + MpolMode_MPOL_PREFERRED MpolMode = 1 + MpolMode_MPOL_BIND MpolMode = 2 + MpolMode_MPOL_INTERLEAVE MpolMode = 3 + MpolMode_MPOL_LOCAL MpolMode = 4 + MpolMode_MPOL_PREFERRED_MANY MpolMode = 5 + MpolMode_MPOL_WEIGHTED_INTERLEAVE MpolMode = 6 +) + +// Enum value maps for MpolMode. +var ( + MpolMode_name = map[int32]string{ + 0: "MPOL_DEFAULT", + 1: "MPOL_PREFERRED", + 2: "MPOL_BIND", + 3: "MPOL_INTERLEAVE", + 4: "MPOL_LOCAL", + 5: "MPOL_PREFERRED_MANY", + 6: "MPOL_WEIGHTED_INTERLEAVE", + } + MpolMode_value = map[string]int32{ + "MPOL_DEFAULT": 0, + "MPOL_PREFERRED": 1, + "MPOL_BIND": 2, + "MPOL_INTERLEAVE": 3, + "MPOL_LOCAL": 4, + "MPOL_PREFERRED_MANY": 5, + "MPOL_WEIGHTED_INTERLEAVE": 6, + } +) + +func (x MpolMode) Enum() *MpolMode { + p := new(MpolMode) + *p = x + return p +} + +func (x MpolMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MpolMode) Descriptor() protoreflect.EnumDescriptor { + return file_pkg_api_api_proto_enumTypes[5].Descriptor() +} + +func (MpolMode) Type() protoreflect.EnumType { + return &file_pkg_api_api_proto_enumTypes[5] +} + +func (x MpolMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MpolMode.Descriptor instead. +func (MpolMode) EnumDescriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{5} +} + +type MpolFlag int32 + +const ( + MpolFlag_MPOL_F_STATIC_NODES MpolFlag = 0 + MpolFlag_MPOL_F_RELATIVE_NODES MpolFlag = 1 + MpolFlag_MPOL_F_NUMA_BALANCING MpolFlag = 2 +) + +// Enum value maps for MpolFlag. +var ( + MpolFlag_name = map[int32]string{ + 0: "MPOL_F_STATIC_NODES", + 1: "MPOL_F_RELATIVE_NODES", + 2: "MPOL_F_NUMA_BALANCING", + } + MpolFlag_value = map[string]int32{ + "MPOL_F_STATIC_NODES": 0, + "MPOL_F_RELATIVE_NODES": 1, + "MPOL_F_NUMA_BALANCING": 2, + } +) + +func (x MpolFlag) Enum() *MpolFlag { + p := new(MpolFlag) + *p = x + return p +} + +func (x MpolFlag) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MpolFlag) Descriptor() protoreflect.EnumDescriptor { + return file_pkg_api_api_proto_enumTypes[6].Descriptor() +} + +func (MpolFlag) Type() protoreflect.EnumType { + return &file_pkg_api_api_proto_enumTypes[6] +} + +func (x MpolFlag) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MpolFlag.Descriptor instead. +func (MpolFlag) EnumDescriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{6} +} + // Field enumerates all fields that can be adjusted by plugins. type Field int32 @@ -399,7 +509,8 @@ const ( Field_Sysctl Field = 34 Field_LinuxNetDevices Field = 35 // protoc scoping rules: calling this LinuxScheduler would conflict with message. - Field_LinuxSched Field = 36 + Field_LinuxSched Field = 36 + Field_MemoryPolicy Field = 37 ) // Enum value maps for Field. @@ -442,6 +553,7 @@ var ( 34: "Sysctl", 35: "LinuxNetDevices", 36: "LinuxSched", + 37: "MemoryPolicy", } Field_value = map[string]int32{ "None": 0, @@ -481,6 +593,7 @@ var ( "Sysctl": 34, "LinuxNetDevices": 35, "LinuxSched": 36, + "MemoryPolicy": 37, } ) @@ -495,11 +608,11 @@ func (x Field) String() string { } func (Field) Descriptor() protoreflect.EnumDescriptor { - return file_pkg_api_api_proto_enumTypes[5].Descriptor() + return file_pkg_api_api_proto_enumTypes[7].Descriptor() } func (Field) Type() protoreflect.EnumType { - return &file_pkg_api_api_proto_enumTypes[5] + return &file_pkg_api_api_proto_enumTypes[7] } func (x Field) Number() protoreflect.EnumNumber { @@ -508,7 +621,7 @@ func (x Field) Number() protoreflect.EnumNumber { // Deprecated: Use Field.Descriptor instead. func (Field) EnumDescriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{5} + return file_pkg_api_api_proto_rawDescGZIP(), []int{7} } type LogRequest_Level int32 @@ -550,11 +663,11 @@ func (x LogRequest_Level) String() string { } func (LogRequest_Level) Descriptor() protoreflect.EnumDescriptor { - return file_pkg_api_api_proto_enumTypes[6].Descriptor() + return file_pkg_api_api_proto_enumTypes[8].Descriptor() } func (LogRequest_Level) Type() protoreflect.EnumType { - return &file_pkg_api_api_proto_enumTypes[6] + return &file_pkg_api_api_proto_enumTypes[8] } func (x LogRequest_Level) Number() protoreflect.EnumNumber { @@ -599,11 +712,11 @@ func (x SecurityProfile_ProfileType) String() string { } func (SecurityProfile_ProfileType) Descriptor() protoreflect.EnumDescriptor { - return file_pkg_api_api_proto_enumTypes[7].Descriptor() + return file_pkg_api_api_proto_enumTypes[9].Descriptor() } func (SecurityProfile_ProfileType) Type() protoreflect.EnumType { - return &file_pkg_api_api_proto_enumTypes[7] + return &file_pkg_api_api_proto_enumTypes[9] } func (x SecurityProfile_ProfileType) Number() protoreflect.EnumNumber { @@ -3822,6 +3935,7 @@ type LinuxContainerAdjustment struct { Sysctl map[string]string `protobuf:"bytes,8,rep,name=sysctl,proto3" json:"sysctl,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` NetDevices map[string]*LinuxNetDevice `protobuf:"bytes,9,rep,name=net_devices,json=netDevices,proto3" json:"net_devices,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Scheduler *LinuxScheduler `protobuf:"bytes,10,opt,name=scheduler,proto3" json:"scheduler,omitempty"` + MemoryPolicy *LinuxMemoryPolicy `protobuf:"bytes,11,opt,name=memory_policy,json=memoryPolicy,proto3" json:"memory_policy,omitempty"` } func (x *LinuxContainerAdjustment) Reset() { @@ -3926,6 +4040,13 @@ func (x *LinuxContainerAdjustment) GetScheduler() *LinuxScheduler { return nil } +func (x *LinuxContainerAdjustment) GetMemoryPolicy() *LinuxMemoryPolicy { + if x != nil { + return x.MemoryPolicy + } + return nil +} + type LinuxSeccomp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4163,6 +4284,70 @@ func (x *LinuxSeccompArg) GetOp() string { return "" } +// Memory policy of a container being created. +type LinuxMemoryPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mode MpolMode `protobuf:"varint,1,opt,name=mode,proto3,enum=nri.pkg.api.v1alpha1.MpolMode" json:"mode,omitempty"` + Nodes string `protobuf:"bytes,2,opt,name=nodes,proto3" json:"nodes,omitempty"` + Flags []MpolFlag `protobuf:"varint,3,rep,packed,name=flags,proto3,enum=nri.pkg.api.v1alpha1.MpolFlag" json:"flags,omitempty"` +} + +func (x *LinuxMemoryPolicy) Reset() { + *x = LinuxMemoryPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_api_api_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LinuxMemoryPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinuxMemoryPolicy) ProtoMessage() {} + +func (x *LinuxMemoryPolicy) ProtoReflect() protoreflect.Message { + mi := &file_pkg_api_api_proto_msgTypes[48] + 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 LinuxMemoryPolicy.ProtoReflect.Descriptor instead. +func (*LinuxMemoryPolicy) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{48} +} + +func (x *LinuxMemoryPolicy) GetMode() MpolMode { + if x != nil { + return x.Mode + } + return MpolMode_MPOL_DEFAULT +} + +func (x *LinuxMemoryPolicy) GetNodes() string { + if x != nil { + return x.Nodes + } + return "" +} + +func (x *LinuxMemoryPolicy) GetFlags() []MpolFlag { + if x != nil { + return x.Flags + } + return nil +} + // Requested update to an already created container. type ContainerUpdate struct { state protoimpl.MessageState @@ -4177,7 +4362,7 @@ type ContainerUpdate struct { func (x *ContainerUpdate) Reset() { *x = ContainerUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[48] + mi := &file_pkg_api_api_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4190,7 +4375,7 @@ func (x *ContainerUpdate) String() string { func (*ContainerUpdate) ProtoMessage() {} func (x *ContainerUpdate) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[48] + mi := &file_pkg_api_api_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4203,7 +4388,7 @@ func (x *ContainerUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use ContainerUpdate.ProtoReflect.Descriptor instead. func (*ContainerUpdate) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{48} + return file_pkg_api_api_proto_rawDescGZIP(), []int{49} } func (x *ContainerUpdate) GetContainerId() string { @@ -4239,7 +4424,7 @@ type LinuxContainerUpdate struct { func (x *LinuxContainerUpdate) Reset() { *x = LinuxContainerUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[49] + mi := &file_pkg_api_api_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4252,7 +4437,7 @@ func (x *LinuxContainerUpdate) String() string { func (*LinuxContainerUpdate) ProtoMessage() {} func (x *LinuxContainerUpdate) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[49] + mi := &file_pkg_api_api_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4265,7 +4450,7 @@ func (x *LinuxContainerUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use LinuxContainerUpdate.ProtoReflect.Descriptor instead. func (*LinuxContainerUpdate) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{49} + return file_pkg_api_api_proto_rawDescGZIP(), []int{50} } func (x *LinuxContainerUpdate) GetResources() *LinuxResources { @@ -4290,7 +4475,7 @@ type ContainerEviction struct { func (x *ContainerEviction) Reset() { *x = ContainerEviction{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[50] + mi := &file_pkg_api_api_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4303,7 +4488,7 @@ func (x *ContainerEviction) String() string { func (*ContainerEviction) ProtoMessage() {} func (x *ContainerEviction) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[50] + mi := &file_pkg_api_api_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4316,7 +4501,7 @@ func (x *ContainerEviction) ProtoReflect() protoreflect.Message { // Deprecated: Use ContainerEviction.ProtoReflect.Descriptor instead. func (*ContainerEviction) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{50} + return file_pkg_api_api_proto_rawDescGZIP(), []int{51} } func (x *ContainerEviction) GetContainerId() string { @@ -4346,7 +4531,7 @@ type KeyValue struct { func (x *KeyValue) Reset() { *x = KeyValue{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[51] + mi := &file_pkg_api_api_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4359,7 +4544,7 @@ func (x *KeyValue) String() string { func (*KeyValue) ProtoMessage() {} func (x *KeyValue) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[51] + mi := &file_pkg_api_api_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4372,7 +4557,7 @@ func (x *KeyValue) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyValue.ProtoReflect.Descriptor instead. func (*KeyValue) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{51} + return file_pkg_api_api_proto_rawDescGZIP(), []int{52} } func (x *KeyValue) GetKey() string { @@ -4401,7 +4586,7 @@ type OptionalString struct { func (x *OptionalString) Reset() { *x = OptionalString{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[52] + mi := &file_pkg_api_api_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4414,7 +4599,7 @@ func (x *OptionalString) String() string { func (*OptionalString) ProtoMessage() {} func (x *OptionalString) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[52] + mi := &file_pkg_api_api_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4427,7 +4612,7 @@ func (x *OptionalString) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalString.ProtoReflect.Descriptor instead. func (*OptionalString) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{52} + return file_pkg_api_api_proto_rawDescGZIP(), []int{53} } func (x *OptionalString) GetValue() string { @@ -4449,7 +4634,7 @@ type OptionalRepeatedString struct { func (x *OptionalRepeatedString) Reset() { *x = OptionalRepeatedString{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[53] + mi := &file_pkg_api_api_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4462,7 +4647,7 @@ func (x *OptionalRepeatedString) String() string { func (*OptionalRepeatedString) ProtoMessage() {} func (x *OptionalRepeatedString) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[53] + mi := &file_pkg_api_api_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4475,7 +4660,7 @@ func (x *OptionalRepeatedString) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalRepeatedString.ProtoReflect.Descriptor instead. func (*OptionalRepeatedString) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{53} + return file_pkg_api_api_proto_rawDescGZIP(), []int{54} } func (x *OptionalRepeatedString) GetValue() []string { @@ -4497,7 +4682,7 @@ type OptionalInt struct { func (x *OptionalInt) Reset() { *x = OptionalInt{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[54] + mi := &file_pkg_api_api_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4510,7 +4695,7 @@ func (x *OptionalInt) String() string { func (*OptionalInt) ProtoMessage() {} func (x *OptionalInt) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[54] + mi := &file_pkg_api_api_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4523,7 +4708,7 @@ func (x *OptionalInt) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalInt.ProtoReflect.Descriptor instead. func (*OptionalInt) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{54} + return file_pkg_api_api_proto_rawDescGZIP(), []int{55} } func (x *OptionalInt) GetValue() int64 { @@ -4545,7 +4730,7 @@ type OptionalInt32 struct { func (x *OptionalInt32) Reset() { *x = OptionalInt32{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[55] + mi := &file_pkg_api_api_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4558,7 +4743,7 @@ func (x *OptionalInt32) String() string { func (*OptionalInt32) ProtoMessage() {} func (x *OptionalInt32) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[55] + mi := &file_pkg_api_api_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4571,7 +4756,7 @@ func (x *OptionalInt32) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalInt32.ProtoReflect.Descriptor instead. func (*OptionalInt32) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{55} + return file_pkg_api_api_proto_rawDescGZIP(), []int{56} } func (x *OptionalInt32) GetValue() int32 { @@ -4593,7 +4778,7 @@ type OptionalUInt32 struct { func (x *OptionalUInt32) Reset() { *x = OptionalUInt32{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[56] + mi := &file_pkg_api_api_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4606,7 +4791,7 @@ func (x *OptionalUInt32) String() string { func (*OptionalUInt32) ProtoMessage() {} func (x *OptionalUInt32) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[56] + mi := &file_pkg_api_api_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4619,7 +4804,7 @@ func (x *OptionalUInt32) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalUInt32.ProtoReflect.Descriptor instead. func (*OptionalUInt32) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{56} + return file_pkg_api_api_proto_rawDescGZIP(), []int{57} } func (x *OptionalUInt32) GetValue() uint32 { @@ -4641,7 +4826,7 @@ type OptionalInt64 struct { func (x *OptionalInt64) Reset() { *x = OptionalInt64{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[57] + mi := &file_pkg_api_api_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4654,7 +4839,7 @@ func (x *OptionalInt64) String() string { func (*OptionalInt64) ProtoMessage() {} func (x *OptionalInt64) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[57] + mi := &file_pkg_api_api_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4667,7 +4852,7 @@ func (x *OptionalInt64) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalInt64.ProtoReflect.Descriptor instead. func (*OptionalInt64) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{57} + return file_pkg_api_api_proto_rawDescGZIP(), []int{58} } func (x *OptionalInt64) GetValue() int64 { @@ -4689,7 +4874,7 @@ type OptionalUInt64 struct { func (x *OptionalUInt64) Reset() { *x = OptionalUInt64{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[58] + mi := &file_pkg_api_api_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4702,7 +4887,7 @@ func (x *OptionalUInt64) String() string { func (*OptionalUInt64) ProtoMessage() {} func (x *OptionalUInt64) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[58] + mi := &file_pkg_api_api_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4715,7 +4900,7 @@ func (x *OptionalUInt64) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalUInt64.ProtoReflect.Descriptor instead. func (*OptionalUInt64) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{58} + return file_pkg_api_api_proto_rawDescGZIP(), []int{59} } func (x *OptionalUInt64) GetValue() uint64 { @@ -4737,7 +4922,7 @@ type OptionalBool struct { func (x *OptionalBool) Reset() { *x = OptionalBool{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[59] + mi := &file_pkg_api_api_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4750,7 +4935,7 @@ func (x *OptionalBool) String() string { func (*OptionalBool) ProtoMessage() {} func (x *OptionalBool) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[59] + mi := &file_pkg_api_api_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4763,7 +4948,7 @@ func (x *OptionalBool) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalBool.ProtoReflect.Descriptor instead. func (*OptionalBool) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{59} + return file_pkg_api_api_proto_rawDescGZIP(), []int{60} } func (x *OptionalBool) GetValue() bool { @@ -4785,7 +4970,7 @@ type OptionalFileMode struct { func (x *OptionalFileMode) Reset() { *x = OptionalFileMode{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[60] + mi := &file_pkg_api_api_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4798,7 +4983,7 @@ func (x *OptionalFileMode) String() string { func (*OptionalFileMode) ProtoMessage() {} func (x *OptionalFileMode) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[60] + mi := &file_pkg_api_api_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4811,7 +4996,7 @@ func (x *OptionalFileMode) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalFileMode.ProtoReflect.Descriptor instead. func (*OptionalFileMode) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{60} + return file_pkg_api_api_proto_rawDescGZIP(), []int{61} } func (x *OptionalFileMode) GetValue() uint32 { @@ -4838,7 +5023,7 @@ type CompoundFieldOwners struct { func (x *CompoundFieldOwners) Reset() { *x = CompoundFieldOwners{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[61] + mi := &file_pkg_api_api_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4851,7 +5036,7 @@ func (x *CompoundFieldOwners) String() string { func (*CompoundFieldOwners) ProtoMessage() {} func (x *CompoundFieldOwners) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[61] + mi := &file_pkg_api_api_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4864,7 +5049,7 @@ func (x *CompoundFieldOwners) ProtoReflect() protoreflect.Message { // Deprecated: Use CompoundFieldOwners.ProtoReflect.Descriptor instead. func (*CompoundFieldOwners) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{61} + return file_pkg_api_api_proto_rawDescGZIP(), []int{62} } func (x *CompoundFieldOwners) GetOwners() map[string]string { @@ -4893,7 +5078,7 @@ type FieldOwners struct { func (x *FieldOwners) Reset() { *x = FieldOwners{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[62] + mi := &file_pkg_api_api_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4906,7 +5091,7 @@ func (x *FieldOwners) String() string { func (*FieldOwners) ProtoMessage() {} func (x *FieldOwners) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[62] + mi := &file_pkg_api_api_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4919,7 +5104,7 @@ func (x *FieldOwners) ProtoReflect() protoreflect.Message { // Deprecated: Use FieldOwners.ProtoReflect.Descriptor instead. func (*FieldOwners) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{62} + return file_pkg_api_api_proto_rawDescGZIP(), []int{63} } func (x *FieldOwners) GetSimple() map[int32]string { @@ -4950,7 +5135,7 @@ type OwningPlugins struct { func (x *OwningPlugins) Reset() { *x = OwningPlugins{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[63] + mi := &file_pkg_api_api_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4963,7 +5148,7 @@ func (x *OwningPlugins) String() string { func (*OwningPlugins) ProtoMessage() {} func (x *OwningPlugins) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[63] + mi := &file_pkg_api_api_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4976,7 +5161,7 @@ func (x *OwningPlugins) ProtoReflect() protoreflect.Message { // Deprecated: Use OwningPlugins.ProtoReflect.Descriptor instead. func (*OwningPlugins) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{63} + return file_pkg_api_api_proto_rawDescGZIP(), []int{64} } func (x *OwningPlugins) GetOwners() map[string]*FieldOwners { @@ -5623,7 +5808,7 @@ var file_pkg_api_api_proto_rawDesc = []byte{ 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, 0xf7, 0x06, 0x0a, 0x18, 0x4c, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc5, 0x07, 0x0a, 0x18, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, @@ -5669,328 +5854,359 @@ var file_pkg_api_api_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 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, - 0x63, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, - 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, 0x02, 0x0a, 0x0c, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x65, - 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0d, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x6c, - 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, - 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, - 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x6e, 0x75, 0x78, 0x53, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x08, 0x73, 0x79, 0x73, - 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, - 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x5f, 0x72, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, - 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x08, 0x65, - 0x72, 0x72, 0x6e, 0x6f, 0x52, 0x65, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x75, 0x6c, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x72, + 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 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, 0x63, 0x0a, + 0x0f, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4e, 0x65, + 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xce, 0x02, 0x0a, 0x0c, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x65, 0x63, 0x63, + 0x6f, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0d, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, + 0x6c, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, - 0x75, 0x78, 0x53, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x41, 0x72, 0x67, 0x52, 0x04, 0x61, 0x72, - 0x67, 0x73, 0x22, 0x6a, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x65, 0x63, 0x63, 0x6f, - 0x6d, 0x70, 0x41, 0x72, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x77, 0x6f, 0x12, 0x0e, - 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x70, 0x22, 0x9d, - 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, - 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x67, 0x6e, 0x6f, 0x72, - 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0x5a, - 0x0a, 0x14, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, - 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x4e, 0x0a, 0x11, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x32, 0x0a, 0x08, 0x4b, 0x65, - 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, - 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x16, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23, 0x0a, 0x0b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x28, 0x0a, 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x4d, - 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x13, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x73, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, - 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, - 0x1a, 0x39, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 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, 0xc4, 0x02, 0x0a, 0x0b, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x73, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6e, 0x72, + 0x75, 0x78, 0x53, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x08, 0x73, 0x79, 0x73, 0x63, 0x61, + 0x6c, 0x6c, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x79, 0x73, + 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x08, 0x65, 0x72, 0x72, + 0x6e, 0x6f, 0x52, 0x65, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, + 0x53, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x41, 0x72, 0x67, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, + 0x22, 0x6a, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, + 0x41, 0x72, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x77, 0x6f, 0x12, 0x0e, 0x0a, 0x02, + 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x70, 0x22, 0x93, 0x01, 0x0a, + 0x11, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x32, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x70, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, + 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x05, + 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x1a, - 0x39, 0x0a, 0x0b, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 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, 0x66, 0x0a, 0x0d, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6e, - 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xb6, 0x01, 0x0a, 0x0d, 0x4f, 0x77, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x69, - 0x6e, 0x67, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x1a, 0x5c, 0x0a, - 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 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, 0x37, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x61, 0x31, 0x2e, 0x4d, 0x70, 0x6f, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x6c, 0x69, 0x6e, + 0x75, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, + 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x69, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0xf4, 0x02, 0x0a, 0x05, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x41, - 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x4f, 0x50, 0x5f, - 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x02, 0x12, 0x16, 0x0a, - 0x12, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x41, 0x4e, 0x44, - 0x42, 0x4f, 0x58, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x50, - 0x4f, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, - 0x49, 0x4e, 0x45, 0x52, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x50, - 0x4f, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, - 0x4e, 0x45, 0x52, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x50, - 0x4f, 0x53, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, - 0x49, 0x4e, 0x45, 0x52, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x4f, 0x50, 0x5f, 0x43, - 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, - 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x0b, - 0x12, 0x16, 0x0a, 0x12, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, - 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x0c, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x4f, 0x53, 0x54, - 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x41, 0x4e, 0x44, - 0x42, 0x4f, 0x58, 0x10, 0x0d, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, - 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x41, 0x44, 0x4a, 0x55, - 0x53, 0x54, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x0e, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x41, 0x53, 0x54, - 0x10, 0x0f, 0x2a, 0x82, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, - 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, - 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, - 0x5f, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, - 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x65, 0x0a, 0x0b, 0x49, 0x4f, 0x50, 0x72, 0x69, - 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4f, 0x50, 0x52, 0x49, 0x4f, - 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, - 0x0f, 0x49, 0x4f, 0x50, 0x52, 0x49, 0x4f, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x52, 0x54, - 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4f, 0x50, 0x52, 0x49, 0x4f, 0x5f, 0x43, 0x4c, 0x41, - 0x53, 0x53, 0x5f, 0x42, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4f, 0x50, 0x52, 0x49, - 0x4f, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x03, 0x2a, 0x99, - 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x43, 0x48, 0x45, 0x44, - 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x43, 0x48, 0x45, 0x44, - 0x5f, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x43, 0x48, 0x45, - 0x44, 0x5f, 0x46, 0x49, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x43, 0x48, 0x45, - 0x44, 0x5f, 0x52, 0x52, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, - 0x42, 0x41, 0x54, 0x43, 0x48, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x43, 0x48, 0x45, 0x44, - 0x5f, 0x49, 0x53, 0x4f, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, - 0x49, 0x44, 0x4c, 0x45, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, - 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x07, 0x2a, 0xdb, 0x01, 0x0a, 0x12, 0x4c, - 0x69, 0x6e, 0x75, 0x78, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x46, 0x6c, 0x61, - 0x67, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, - 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x10, 0x00, 0x12, - 0x16, 0x0a, 0x12, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x52, 0x45, - 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x43, 0x48, 0x45, 0x44, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x44, 0x4c, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x52, 0x55, 0x4e, - 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x5f, 0x4b, 0x45, 0x45, 0x50, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x03, 0x12, 0x1a, - 0x0a, 0x16, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x4b, 0x45, 0x45, - 0x50, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x53, 0x10, 0x04, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x43, - 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x55, 0x54, 0x49, 0x4c, 0x5f, 0x43, 0x4c, - 0x41, 0x4d, 0x50, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x43, 0x48, - 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x55, 0x54, 0x49, 0x4c, 0x5f, 0x43, 0x4c, 0x41, - 0x4d, 0x50, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x06, 0x2a, 0xea, 0x04, 0x0a, 0x05, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x63, 0x69, - 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x64, 0x69, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x6e, 0x76, 0x10, 0x06, 0x12, 0x08, 0x0a, - 0x04, 0x41, 0x72, 0x67, 0x73, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, - 0x53, 0x77, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x4d, - 0x65, 0x6d, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0b, 0x12, - 0x0f, 0x0a, 0x0b, 0x4d, 0x65, 0x6d, 0x54, 0x43, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0c, - 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x10, 0x0d, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x4f, 0x6f, 0x6d, 0x4b, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, - 0x4d, 0x65, 0x6d, 0x55, 0x73, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x10, - 0x0f, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x50, 0x55, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x10, 0x10, - 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x50, 0x55, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x10, 0x11, 0x12, 0x0d, - 0x0a, 0x09, 0x43, 0x50, 0x55, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x10, 0x12, 0x12, 0x16, 0x0a, - 0x12, 0x43, 0x50, 0x55, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x10, 0x13, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x50, 0x55, 0x52, 0x65, 0x61, 0x6c, - 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x10, 0x14, 0x12, 0x0e, 0x0a, 0x0a, - 0x43, 0x50, 0x55, 0x53, 0x65, 0x74, 0x43, 0x50, 0x55, 0x73, 0x10, 0x15, 0x12, 0x0e, 0x0a, 0x0a, - 0x43, 0x50, 0x55, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x73, 0x10, 0x16, 0x12, 0x0d, 0x0a, 0x09, - 0x50, 0x69, 0x64, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x17, 0x12, 0x12, 0x0a, 0x0e, 0x48, - 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x10, 0x18, 0x12, - 0x10, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x10, - 0x19, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x64, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x10, 0x1a, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x10, 0x1b, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x50, 0x61, - 0x74, 0x68, 0x10, 0x1c, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x6f, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x41, 0x64, 0x6a, 0x10, 0x1d, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, - 0x10, 0x1e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x6f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x10, 0x1f, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x10, 0x20, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x10, 0x21, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 0x10, 0x22, - 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x10, 0x23, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x10, 0x24, 0x32, 0xd8, 0x01, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x12, 0x5a, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x12, 0x2b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x71, 0x0a, - 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x73, 0x12, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x32, 0xb6, 0x07, 0x0a, 0x06, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x5c, 0x0a, 0x09, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x26, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x4e, + 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x69, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x32, + 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x16, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23, 0x0a, 0x0b, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x25, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, + 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x24, 0x0a, + 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x28, 0x0a, 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, + 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9f, 0x01, + 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 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, + 0xc4, 0x02, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, + 0x45, 0x0a, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, + 0x72, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, + 0x6e, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, + 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x75, 0x6e, 0x64, 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 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, 0x66, + 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb6, 0x01, 0x0a, 0x0d, 0x4f, 0x77, 0x6e, 0x69, 0x6e, + 0x67, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0b, 0x53, 0x79, 0x6e, - 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, + 0x4f, 0x77, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2e, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x73, 0x1a, 0x5c, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 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, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, + 0xf4, 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x5f, 0x50, 0x4f, + 0x44, 0x5f, 0x53, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, + 0x54, 0x4f, 0x50, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, + 0x02, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, + 0x53, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x04, 0x12, + 0x19, 0x0a, 0x15, 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x43, + 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, + 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, + 0x18, 0x0a, 0x14, 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, + 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x08, 0x12, + 0x19, 0x0a, 0x15, 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, + 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, + 0x4f, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x0a, 0x12, 0x14, + 0x0a, 0x10, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, + 0x45, 0x52, 0x10, 0x0b, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x50, + 0x4f, 0x44, 0x5f, 0x53, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x0c, 0x12, 0x1b, 0x0a, 0x17, + 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, + 0x53, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x58, 0x10, 0x0d, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x41, 0x4c, + 0x49, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, + 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x0e, 0x12, 0x08, 0x0a, 0x04, + 0x4c, 0x41, 0x53, 0x54, 0x10, 0x0f, 0x2a, 0x82, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, + 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x43, 0x52, + 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4e, 0x54, 0x41, + 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, + 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, + 0x4e, 0x47, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, + 0x52, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x65, 0x0a, 0x0b, 0x49, + 0x4f, 0x50, 0x72, 0x69, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4f, + 0x50, 0x52, 0x49, 0x4f, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, + 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4f, 0x50, 0x52, 0x49, 0x4f, 0x5f, 0x43, 0x4c, 0x41, 0x53, + 0x53, 0x5f, 0x52, 0x54, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4f, 0x50, 0x52, 0x49, 0x4f, + 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x42, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, + 0x4f, 0x50, 0x52, 0x49, 0x4f, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x49, 0x44, 0x4c, 0x45, + 0x10, 0x03, 0x2a, 0x99, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x0a, 0x53, + 0x43, 0x48, 0x45, 0x44, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, + 0x43, 0x48, 0x45, 0x44, 0x5f, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x49, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, + 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x52, 0x52, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x5f, 0x42, 0x41, 0x54, 0x43, 0x48, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x53, + 0x43, 0x48, 0x45, 0x44, 0x5f, 0x49, 0x53, 0x4f, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x07, 0x2a, 0xdb, + 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, 0x52, + 0x4b, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, + 0x47, 0x5f, 0x52, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, + 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x44, 0x4c, 0x5f, 0x4f, 0x56, 0x45, + 0x52, 0x52, 0x55, 0x4e, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x4b, 0x45, 0x45, 0x50, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, + 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, + 0x5f, 0x4b, 0x45, 0x45, 0x50, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x53, 0x10, 0x04, 0x12, 0x1d, + 0x0a, 0x19, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x55, 0x54, 0x49, + 0x4c, 0x5f, 0x43, 0x4c, 0x41, 0x4d, 0x50, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x05, 0x12, 0x1d, 0x0a, + 0x19, 0x53, 0x43, 0x48, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x55, 0x54, 0x49, 0x4c, + 0x5f, 0x43, 0x4c, 0x41, 0x4d, 0x50, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x06, 0x2a, 0x9b, 0x01, 0x0a, + 0x08, 0x4d, 0x70, 0x6f, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x50, 0x4f, + 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4d, + 0x50, 0x4f, 0x4c, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x45, 0x52, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x0d, 0x0a, 0x09, 0x4d, 0x50, 0x4f, 0x4c, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x13, + 0x0a, 0x0f, 0x4d, 0x50, 0x4f, 0x4c, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, + 0x45, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x50, 0x4f, 0x4c, 0x5f, 0x4c, 0x4f, 0x43, 0x41, + 0x4c, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x50, 0x4f, 0x4c, 0x5f, 0x50, 0x52, 0x45, 0x46, + 0x45, 0x52, 0x52, 0x45, 0x44, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, + 0x4d, 0x50, 0x4f, 0x4c, 0x5f, 0x57, 0x45, 0x49, 0x47, 0x48, 0x54, 0x45, 0x44, 0x5f, 0x49, 0x4e, + 0x54, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0x06, 0x2a, 0x59, 0x0a, 0x08, 0x4d, 0x70, + 0x6f, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x50, 0x4f, 0x4c, 0x5f, 0x46, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x53, 0x10, 0x00, 0x12, + 0x19, 0x0a, 0x15, 0x4d, 0x50, 0x4f, 0x4c, 0x5f, 0x46, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x49, + 0x56, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x53, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x50, + 0x4f, 0x4c, 0x5f, 0x46, 0x5f, 0x4e, 0x55, 0x4d, 0x41, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, + 0x49, 0x4e, 0x47, 0x10, 0x02, 0x2a, 0xfc, 0x04, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, + 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x63, 0x69, 0x48, 0x6f, 0x6f, + 0x6b, 0x73, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x10, + 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x64, 0x69, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x10, + 0x05, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x6e, 0x76, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x72, + 0x67, 0x73, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x53, 0x77, 0x61, + 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x4b, + 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0b, 0x12, 0x0f, 0x0a, 0x0b, + 0x4d, 0x65, 0x6d, 0x54, 0x43, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x0c, 0x12, 0x11, 0x0a, + 0x0d, 0x4d, 0x65, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x10, 0x0d, + 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x6f, + 0x6d, 0x4b, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x65, 0x6d, + 0x55, 0x73, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x10, 0x0f, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x50, 0x55, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x10, 0x10, 0x12, 0x0c, 0x0a, + 0x08, 0x43, 0x50, 0x55, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x10, 0x11, 0x12, 0x0d, 0x0a, 0x09, 0x43, + 0x50, 0x55, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x10, 0x12, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x50, + 0x55, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x10, 0x13, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x50, 0x55, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x10, 0x14, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x50, 0x55, + 0x53, 0x65, 0x74, 0x43, 0x50, 0x55, 0x73, 0x10, 0x15, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x50, 0x55, + 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x73, 0x10, 0x16, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x69, 0x64, + 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x17, 0x12, 0x12, 0x0a, 0x0e, 0x48, 0x75, 0x67, 0x65, + 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x10, 0x18, 0x12, 0x10, 0x0a, 0x0c, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x10, 0x19, 0x12, 0x0c, + 0x0a, 0x08, 0x52, 0x64, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x10, 0x1a, 0x12, 0x12, 0x0a, 0x0e, + 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x10, 0x1b, + 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x50, 0x61, 0x74, 0x68, 0x10, + 0x1c, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x6f, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x41, 0x64, 0x6a, + 0x10, 0x1d, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x10, 0x1e, 0x12, + 0x0e, 0x0a, 0x0a, 0x49, 0x6f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x10, 0x1f, 0x12, + 0x11, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x10, 0x20, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x10, + 0x21, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 0x10, 0x22, 0x12, 0x13, 0x0a, + 0x0f, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x10, 0x23, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x10, 0x24, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x10, 0x25, 0x32, 0xd8, 0x01, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x12, 0x5a, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x12, 0x2b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x71, 0x0a, 0x10, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, + 0x12, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0xb6, 0x07, 0x0a, 0x06, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x5c, 0x0a, 0x09, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x26, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, + 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x27, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, + 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, + 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, + 0x6e, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x08, + 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, - 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, - 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, - 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x6e, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, - 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x12, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x12, 0x6e, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x10, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x12, 0x2d, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, - 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x26, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, - 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x92, 0x01, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, + 0x64, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x64, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x52, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x57, 0x0a, 0x0d, 0x48, 0x6f, 0x73, - 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x03, 0x4c, 0x6f, - 0x67, 0x12, 0x20, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x42, 0x27, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x6e, 0x72, 0x69, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x92, 0x01, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x38, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, + 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, + 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x57, 0x0a, 0x0d, 0x48, 0x6f, 0x73, 0x74, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x03, 0x4c, 0x6f, 0x67, + 0x12, 0x20, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x00, 0x42, 0x27, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x6e, 0x72, 0x69, 0x2f, 0x70, + 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -6005,251 +6221,257 @@ func file_pkg_api_api_proto_rawDescGZIP() []byte { return file_pkg_api_api_proto_rawDescData } -var file_pkg_api_api_proto_enumTypes = make([]protoimpl.EnumInfo, 8) -var file_pkg_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 78) +var file_pkg_api_api_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_pkg_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 79) var file_pkg_api_api_proto_goTypes = []interface{}{ (Event)(0), // 0: nri.pkg.api.v1alpha1.Event (ContainerState)(0), // 1: nri.pkg.api.v1alpha1.ContainerState (IOPrioClass)(0), // 2: nri.pkg.api.v1alpha1.IOPrioClass (LinuxSchedulerPolicy)(0), // 3: nri.pkg.api.v1alpha1.LinuxSchedulerPolicy (LinuxSchedulerFlag)(0), // 4: nri.pkg.api.v1alpha1.LinuxSchedulerFlag - (Field)(0), // 5: nri.pkg.api.v1alpha1.Field - (LogRequest_Level)(0), // 6: nri.pkg.api.v1alpha1.LogRequest.Level - (SecurityProfile_ProfileType)(0), // 7: nri.pkg.api.v1alpha1.SecurityProfile.ProfileType - (*RegisterPluginRequest)(nil), // 8: nri.pkg.api.v1alpha1.RegisterPluginRequest - (*UpdateContainersRequest)(nil), // 9: nri.pkg.api.v1alpha1.UpdateContainersRequest - (*UpdateContainersResponse)(nil), // 10: nri.pkg.api.v1alpha1.UpdateContainersResponse - (*LogRequest)(nil), // 11: nri.pkg.api.v1alpha1.LogRequest - (*ConfigureRequest)(nil), // 12: nri.pkg.api.v1alpha1.ConfigureRequest - (*ConfigureResponse)(nil), // 13: nri.pkg.api.v1alpha1.ConfigureResponse - (*SynchronizeRequest)(nil), // 14: nri.pkg.api.v1alpha1.SynchronizeRequest - (*SynchronizeResponse)(nil), // 15: nri.pkg.api.v1alpha1.SynchronizeResponse - (*CreateContainerRequest)(nil), // 16: nri.pkg.api.v1alpha1.CreateContainerRequest - (*CreateContainerResponse)(nil), // 17: nri.pkg.api.v1alpha1.CreateContainerResponse - (*UpdateContainerRequest)(nil), // 18: nri.pkg.api.v1alpha1.UpdateContainerRequest - (*UpdateContainerResponse)(nil), // 19: nri.pkg.api.v1alpha1.UpdateContainerResponse - (*StopContainerRequest)(nil), // 20: nri.pkg.api.v1alpha1.StopContainerRequest - (*StopContainerResponse)(nil), // 21: nri.pkg.api.v1alpha1.StopContainerResponse - (*UpdatePodSandboxRequest)(nil), // 22: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest - (*UpdatePodSandboxResponse)(nil), // 23: nri.pkg.api.v1alpha1.UpdatePodSandboxResponse - (*StateChangeEvent)(nil), // 24: nri.pkg.api.v1alpha1.StateChangeEvent - (*ValidateContainerAdjustmentRequest)(nil), // 25: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest - (*PluginInstance)(nil), // 26: nri.pkg.api.v1alpha1.PluginInstance - (*ValidateContainerAdjustmentResponse)(nil), // 27: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse - (*Empty)(nil), // 28: nri.pkg.api.v1alpha1.Empty - (*PodSandbox)(nil), // 29: nri.pkg.api.v1alpha1.PodSandbox - (*LinuxPodSandbox)(nil), // 30: nri.pkg.api.v1alpha1.LinuxPodSandbox - (*Container)(nil), // 31: nri.pkg.api.v1alpha1.Container - (*Mount)(nil), // 32: nri.pkg.api.v1alpha1.Mount - (*Hooks)(nil), // 33: nri.pkg.api.v1alpha1.Hooks - (*Hook)(nil), // 34: nri.pkg.api.v1alpha1.Hook - (*LinuxContainer)(nil), // 35: nri.pkg.api.v1alpha1.LinuxContainer - (*LinuxNamespace)(nil), // 36: nri.pkg.api.v1alpha1.LinuxNamespace - (*LinuxDevice)(nil), // 37: nri.pkg.api.v1alpha1.LinuxDevice - (*LinuxDeviceCgroup)(nil), // 38: nri.pkg.api.v1alpha1.LinuxDeviceCgroup - (*CDIDevice)(nil), // 39: nri.pkg.api.v1alpha1.CDIDevice - (*User)(nil), // 40: nri.pkg.api.v1alpha1.User - (*LinuxResources)(nil), // 41: nri.pkg.api.v1alpha1.LinuxResources - (*LinuxMemory)(nil), // 42: nri.pkg.api.v1alpha1.LinuxMemory - (*LinuxCPU)(nil), // 43: nri.pkg.api.v1alpha1.LinuxCPU - (*HugepageLimit)(nil), // 44: nri.pkg.api.v1alpha1.HugepageLimit - (*SecurityProfile)(nil), // 45: nri.pkg.api.v1alpha1.SecurityProfile - (*POSIXRlimit)(nil), // 46: nri.pkg.api.v1alpha1.POSIXRlimit - (*LinuxPids)(nil), // 47: nri.pkg.api.v1alpha1.LinuxPids - (*LinuxIOPriority)(nil), // 48: nri.pkg.api.v1alpha1.LinuxIOPriority - (*LinuxNetDevice)(nil), // 49: nri.pkg.api.v1alpha1.LinuxNetDevice - (*LinuxScheduler)(nil), // 50: nri.pkg.api.v1alpha1.LinuxScheduler - (*ContainerAdjustment)(nil), // 51: nri.pkg.api.v1alpha1.ContainerAdjustment - (*LinuxContainerAdjustment)(nil), // 52: nri.pkg.api.v1alpha1.LinuxContainerAdjustment - (*LinuxSeccomp)(nil), // 53: nri.pkg.api.v1alpha1.LinuxSeccomp - (*LinuxSyscall)(nil), // 54: nri.pkg.api.v1alpha1.LinuxSyscall - (*LinuxSeccompArg)(nil), // 55: nri.pkg.api.v1alpha1.LinuxSeccompArg - (*ContainerUpdate)(nil), // 56: nri.pkg.api.v1alpha1.ContainerUpdate - (*LinuxContainerUpdate)(nil), // 57: nri.pkg.api.v1alpha1.LinuxContainerUpdate - (*ContainerEviction)(nil), // 58: nri.pkg.api.v1alpha1.ContainerEviction - (*KeyValue)(nil), // 59: nri.pkg.api.v1alpha1.KeyValue - (*OptionalString)(nil), // 60: nri.pkg.api.v1alpha1.OptionalString - (*OptionalRepeatedString)(nil), // 61: nri.pkg.api.v1alpha1.OptionalRepeatedString - (*OptionalInt)(nil), // 62: nri.pkg.api.v1alpha1.OptionalInt - (*OptionalInt32)(nil), // 63: nri.pkg.api.v1alpha1.OptionalInt32 - (*OptionalUInt32)(nil), // 64: nri.pkg.api.v1alpha1.OptionalUInt32 - (*OptionalInt64)(nil), // 65: nri.pkg.api.v1alpha1.OptionalInt64 - (*OptionalUInt64)(nil), // 66: nri.pkg.api.v1alpha1.OptionalUInt64 - (*OptionalBool)(nil), // 67: nri.pkg.api.v1alpha1.OptionalBool - (*OptionalFileMode)(nil), // 68: nri.pkg.api.v1alpha1.OptionalFileMode - (*CompoundFieldOwners)(nil), // 69: nri.pkg.api.v1alpha1.CompoundFieldOwners - (*FieldOwners)(nil), // 70: nri.pkg.api.v1alpha1.FieldOwners - (*OwningPlugins)(nil), // 71: nri.pkg.api.v1alpha1.OwningPlugins - nil, // 72: nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry - nil, // 73: nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry - nil, // 74: nri.pkg.api.v1alpha1.Container.LabelsEntry - nil, // 75: nri.pkg.api.v1alpha1.Container.AnnotationsEntry - nil, // 76: nri.pkg.api.v1alpha1.LinuxContainer.SysctlEntry - nil, // 77: nri.pkg.api.v1alpha1.LinuxContainer.NetDevicesEntry - nil, // 78: nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry - nil, // 79: nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry - nil, // 80: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.SysctlEntry - nil, // 81: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.NetDevicesEntry - nil, // 82: nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry - nil, // 83: nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry - nil, // 84: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry - nil, // 85: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry + (MpolMode)(0), // 5: nri.pkg.api.v1alpha1.MpolMode + (MpolFlag)(0), // 6: nri.pkg.api.v1alpha1.MpolFlag + (Field)(0), // 7: nri.pkg.api.v1alpha1.Field + (LogRequest_Level)(0), // 8: nri.pkg.api.v1alpha1.LogRequest.Level + (SecurityProfile_ProfileType)(0), // 9: nri.pkg.api.v1alpha1.SecurityProfile.ProfileType + (*RegisterPluginRequest)(nil), // 10: nri.pkg.api.v1alpha1.RegisterPluginRequest + (*UpdateContainersRequest)(nil), // 11: nri.pkg.api.v1alpha1.UpdateContainersRequest + (*UpdateContainersResponse)(nil), // 12: nri.pkg.api.v1alpha1.UpdateContainersResponse + (*LogRequest)(nil), // 13: nri.pkg.api.v1alpha1.LogRequest + (*ConfigureRequest)(nil), // 14: nri.pkg.api.v1alpha1.ConfigureRequest + (*ConfigureResponse)(nil), // 15: nri.pkg.api.v1alpha1.ConfigureResponse + (*SynchronizeRequest)(nil), // 16: nri.pkg.api.v1alpha1.SynchronizeRequest + (*SynchronizeResponse)(nil), // 17: nri.pkg.api.v1alpha1.SynchronizeResponse + (*CreateContainerRequest)(nil), // 18: nri.pkg.api.v1alpha1.CreateContainerRequest + (*CreateContainerResponse)(nil), // 19: nri.pkg.api.v1alpha1.CreateContainerResponse + (*UpdateContainerRequest)(nil), // 20: nri.pkg.api.v1alpha1.UpdateContainerRequest + (*UpdateContainerResponse)(nil), // 21: nri.pkg.api.v1alpha1.UpdateContainerResponse + (*StopContainerRequest)(nil), // 22: nri.pkg.api.v1alpha1.StopContainerRequest + (*StopContainerResponse)(nil), // 23: nri.pkg.api.v1alpha1.StopContainerResponse + (*UpdatePodSandboxRequest)(nil), // 24: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest + (*UpdatePodSandboxResponse)(nil), // 25: nri.pkg.api.v1alpha1.UpdatePodSandboxResponse + (*StateChangeEvent)(nil), // 26: nri.pkg.api.v1alpha1.StateChangeEvent + (*ValidateContainerAdjustmentRequest)(nil), // 27: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest + (*PluginInstance)(nil), // 28: nri.pkg.api.v1alpha1.PluginInstance + (*ValidateContainerAdjustmentResponse)(nil), // 29: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse + (*Empty)(nil), // 30: nri.pkg.api.v1alpha1.Empty + (*PodSandbox)(nil), // 31: nri.pkg.api.v1alpha1.PodSandbox + (*LinuxPodSandbox)(nil), // 32: nri.pkg.api.v1alpha1.LinuxPodSandbox + (*Container)(nil), // 33: nri.pkg.api.v1alpha1.Container + (*Mount)(nil), // 34: nri.pkg.api.v1alpha1.Mount + (*Hooks)(nil), // 35: nri.pkg.api.v1alpha1.Hooks + (*Hook)(nil), // 36: nri.pkg.api.v1alpha1.Hook + (*LinuxContainer)(nil), // 37: nri.pkg.api.v1alpha1.LinuxContainer + (*LinuxNamespace)(nil), // 38: nri.pkg.api.v1alpha1.LinuxNamespace + (*LinuxDevice)(nil), // 39: nri.pkg.api.v1alpha1.LinuxDevice + (*LinuxDeviceCgroup)(nil), // 40: nri.pkg.api.v1alpha1.LinuxDeviceCgroup + (*CDIDevice)(nil), // 41: nri.pkg.api.v1alpha1.CDIDevice + (*User)(nil), // 42: nri.pkg.api.v1alpha1.User + (*LinuxResources)(nil), // 43: nri.pkg.api.v1alpha1.LinuxResources + (*LinuxMemory)(nil), // 44: nri.pkg.api.v1alpha1.LinuxMemory + (*LinuxCPU)(nil), // 45: nri.pkg.api.v1alpha1.LinuxCPU + (*HugepageLimit)(nil), // 46: nri.pkg.api.v1alpha1.HugepageLimit + (*SecurityProfile)(nil), // 47: nri.pkg.api.v1alpha1.SecurityProfile + (*POSIXRlimit)(nil), // 48: nri.pkg.api.v1alpha1.POSIXRlimit + (*LinuxPids)(nil), // 49: nri.pkg.api.v1alpha1.LinuxPids + (*LinuxIOPriority)(nil), // 50: nri.pkg.api.v1alpha1.LinuxIOPriority + (*LinuxNetDevice)(nil), // 51: nri.pkg.api.v1alpha1.LinuxNetDevice + (*LinuxScheduler)(nil), // 52: nri.pkg.api.v1alpha1.LinuxScheduler + (*ContainerAdjustment)(nil), // 53: nri.pkg.api.v1alpha1.ContainerAdjustment + (*LinuxContainerAdjustment)(nil), // 54: nri.pkg.api.v1alpha1.LinuxContainerAdjustment + (*LinuxSeccomp)(nil), // 55: nri.pkg.api.v1alpha1.LinuxSeccomp + (*LinuxSyscall)(nil), // 56: nri.pkg.api.v1alpha1.LinuxSyscall + (*LinuxSeccompArg)(nil), // 57: nri.pkg.api.v1alpha1.LinuxSeccompArg + (*LinuxMemoryPolicy)(nil), // 58: nri.pkg.api.v1alpha1.LinuxMemoryPolicy + (*ContainerUpdate)(nil), // 59: nri.pkg.api.v1alpha1.ContainerUpdate + (*LinuxContainerUpdate)(nil), // 60: nri.pkg.api.v1alpha1.LinuxContainerUpdate + (*ContainerEviction)(nil), // 61: nri.pkg.api.v1alpha1.ContainerEviction + (*KeyValue)(nil), // 62: nri.pkg.api.v1alpha1.KeyValue + (*OptionalString)(nil), // 63: nri.pkg.api.v1alpha1.OptionalString + (*OptionalRepeatedString)(nil), // 64: nri.pkg.api.v1alpha1.OptionalRepeatedString + (*OptionalInt)(nil), // 65: nri.pkg.api.v1alpha1.OptionalInt + (*OptionalInt32)(nil), // 66: nri.pkg.api.v1alpha1.OptionalInt32 + (*OptionalUInt32)(nil), // 67: nri.pkg.api.v1alpha1.OptionalUInt32 + (*OptionalInt64)(nil), // 68: nri.pkg.api.v1alpha1.OptionalInt64 + (*OptionalUInt64)(nil), // 69: nri.pkg.api.v1alpha1.OptionalUInt64 + (*OptionalBool)(nil), // 70: nri.pkg.api.v1alpha1.OptionalBool + (*OptionalFileMode)(nil), // 71: nri.pkg.api.v1alpha1.OptionalFileMode + (*CompoundFieldOwners)(nil), // 72: nri.pkg.api.v1alpha1.CompoundFieldOwners + (*FieldOwners)(nil), // 73: nri.pkg.api.v1alpha1.FieldOwners + (*OwningPlugins)(nil), // 74: nri.pkg.api.v1alpha1.OwningPlugins + nil, // 75: nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry + nil, // 76: nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry + nil, // 77: nri.pkg.api.v1alpha1.Container.LabelsEntry + nil, // 78: nri.pkg.api.v1alpha1.Container.AnnotationsEntry + nil, // 79: nri.pkg.api.v1alpha1.LinuxContainer.SysctlEntry + nil, // 80: nri.pkg.api.v1alpha1.LinuxContainer.NetDevicesEntry + nil, // 81: nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry + nil, // 82: nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry + nil, // 83: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.SysctlEntry + nil, // 84: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.NetDevicesEntry + nil, // 85: nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry + nil, // 86: nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry + nil, // 87: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry + nil, // 88: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry } var file_pkg_api_api_proto_depIdxs = []int32{ - 56, // 0: nri.pkg.api.v1alpha1.UpdateContainersRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 58, // 1: nri.pkg.api.v1alpha1.UpdateContainersRequest.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction - 56, // 2: nri.pkg.api.v1alpha1.UpdateContainersResponse.failed:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 6, // 3: nri.pkg.api.v1alpha1.LogRequest.level:type_name -> nri.pkg.api.v1alpha1.LogRequest.Level - 29, // 4: nri.pkg.api.v1alpha1.SynchronizeRequest.pods:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 31, // 5: nri.pkg.api.v1alpha1.SynchronizeRequest.containers:type_name -> nri.pkg.api.v1alpha1.Container - 56, // 6: nri.pkg.api.v1alpha1.SynchronizeResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 29, // 7: nri.pkg.api.v1alpha1.CreateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 31, // 8: nri.pkg.api.v1alpha1.CreateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 51, // 9: nri.pkg.api.v1alpha1.CreateContainerResponse.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment - 56, // 10: nri.pkg.api.v1alpha1.CreateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 58, // 11: nri.pkg.api.v1alpha1.CreateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction - 29, // 12: nri.pkg.api.v1alpha1.UpdateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 31, // 13: nri.pkg.api.v1alpha1.UpdateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 41, // 14: nri.pkg.api.v1alpha1.UpdateContainerRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 56, // 15: nri.pkg.api.v1alpha1.UpdateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 58, // 16: nri.pkg.api.v1alpha1.UpdateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction - 29, // 17: nri.pkg.api.v1alpha1.StopContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 31, // 18: nri.pkg.api.v1alpha1.StopContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 56, // 19: nri.pkg.api.v1alpha1.StopContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 29, // 20: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 41, // 21: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.overhead_linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 41, // 22: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 59, // 0: nri.pkg.api.v1alpha1.UpdateContainersRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 61, // 1: nri.pkg.api.v1alpha1.UpdateContainersRequest.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction + 59, // 2: nri.pkg.api.v1alpha1.UpdateContainersResponse.failed:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 8, // 3: nri.pkg.api.v1alpha1.LogRequest.level:type_name -> nri.pkg.api.v1alpha1.LogRequest.Level + 31, // 4: nri.pkg.api.v1alpha1.SynchronizeRequest.pods:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 33, // 5: nri.pkg.api.v1alpha1.SynchronizeRequest.containers:type_name -> nri.pkg.api.v1alpha1.Container + 59, // 6: nri.pkg.api.v1alpha1.SynchronizeResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 31, // 7: nri.pkg.api.v1alpha1.CreateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 33, // 8: nri.pkg.api.v1alpha1.CreateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 53, // 9: nri.pkg.api.v1alpha1.CreateContainerResponse.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment + 59, // 10: nri.pkg.api.v1alpha1.CreateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 61, // 11: nri.pkg.api.v1alpha1.CreateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction + 31, // 12: nri.pkg.api.v1alpha1.UpdateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 33, // 13: nri.pkg.api.v1alpha1.UpdateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 43, // 14: nri.pkg.api.v1alpha1.UpdateContainerRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 59, // 15: nri.pkg.api.v1alpha1.UpdateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 61, // 16: nri.pkg.api.v1alpha1.UpdateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction + 31, // 17: nri.pkg.api.v1alpha1.StopContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 33, // 18: nri.pkg.api.v1alpha1.StopContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 59, // 19: nri.pkg.api.v1alpha1.StopContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 31, // 20: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 43, // 21: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.overhead_linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 43, // 22: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources 0, // 23: nri.pkg.api.v1alpha1.StateChangeEvent.event:type_name -> nri.pkg.api.v1alpha1.Event - 29, // 24: nri.pkg.api.v1alpha1.StateChangeEvent.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 31, // 25: nri.pkg.api.v1alpha1.StateChangeEvent.container:type_name -> nri.pkg.api.v1alpha1.Container - 29, // 26: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 31, // 27: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 51, // 28: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment - 56, // 29: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 71, // 30: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins - 26, // 31: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.plugins:type_name -> nri.pkg.api.v1alpha1.PluginInstance - 72, // 32: nri.pkg.api.v1alpha1.PodSandbox.labels:type_name -> nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry - 73, // 33: nri.pkg.api.v1alpha1.PodSandbox.annotations:type_name -> nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry - 30, // 34: nri.pkg.api.v1alpha1.PodSandbox.linux:type_name -> nri.pkg.api.v1alpha1.LinuxPodSandbox - 41, // 35: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_overhead:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 41, // 36: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 36, // 37: nri.pkg.api.v1alpha1.LinuxPodSandbox.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace - 41, // 38: nri.pkg.api.v1alpha1.LinuxPodSandbox.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 31, // 24: nri.pkg.api.v1alpha1.StateChangeEvent.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 33, // 25: nri.pkg.api.v1alpha1.StateChangeEvent.container:type_name -> nri.pkg.api.v1alpha1.Container + 31, // 26: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 33, // 27: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 53, // 28: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment + 59, // 29: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 74, // 30: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins + 28, // 31: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.plugins:type_name -> nri.pkg.api.v1alpha1.PluginInstance + 75, // 32: nri.pkg.api.v1alpha1.PodSandbox.labels:type_name -> nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry + 76, // 33: nri.pkg.api.v1alpha1.PodSandbox.annotations:type_name -> nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry + 32, // 34: nri.pkg.api.v1alpha1.PodSandbox.linux:type_name -> nri.pkg.api.v1alpha1.LinuxPodSandbox + 43, // 35: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_overhead:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 43, // 36: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 38, // 37: nri.pkg.api.v1alpha1.LinuxPodSandbox.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace + 43, // 38: nri.pkg.api.v1alpha1.LinuxPodSandbox.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources 1, // 39: nri.pkg.api.v1alpha1.Container.state:type_name -> nri.pkg.api.v1alpha1.ContainerState - 74, // 40: nri.pkg.api.v1alpha1.Container.labels:type_name -> nri.pkg.api.v1alpha1.Container.LabelsEntry - 75, // 41: nri.pkg.api.v1alpha1.Container.annotations:type_name -> nri.pkg.api.v1alpha1.Container.AnnotationsEntry - 32, // 42: nri.pkg.api.v1alpha1.Container.mounts:type_name -> nri.pkg.api.v1alpha1.Mount - 33, // 43: nri.pkg.api.v1alpha1.Container.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks - 35, // 44: nri.pkg.api.v1alpha1.Container.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainer - 46, // 45: nri.pkg.api.v1alpha1.Container.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit - 39, // 46: nri.pkg.api.v1alpha1.Container.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice - 40, // 47: nri.pkg.api.v1alpha1.Container.user:type_name -> nri.pkg.api.v1alpha1.User - 34, // 48: nri.pkg.api.v1alpha1.Hooks.prestart:type_name -> nri.pkg.api.v1alpha1.Hook - 34, // 49: nri.pkg.api.v1alpha1.Hooks.create_runtime:type_name -> nri.pkg.api.v1alpha1.Hook - 34, // 50: nri.pkg.api.v1alpha1.Hooks.create_container:type_name -> nri.pkg.api.v1alpha1.Hook - 34, // 51: nri.pkg.api.v1alpha1.Hooks.start_container:type_name -> nri.pkg.api.v1alpha1.Hook - 34, // 52: nri.pkg.api.v1alpha1.Hooks.poststart:type_name -> nri.pkg.api.v1alpha1.Hook - 34, // 53: nri.pkg.api.v1alpha1.Hooks.poststop:type_name -> nri.pkg.api.v1alpha1.Hook - 62, // 54: nri.pkg.api.v1alpha1.Hook.timeout:type_name -> nri.pkg.api.v1alpha1.OptionalInt - 36, // 55: nri.pkg.api.v1alpha1.LinuxContainer.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace - 37, // 56: nri.pkg.api.v1alpha1.LinuxContainer.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice - 41, // 57: nri.pkg.api.v1alpha1.LinuxContainer.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 62, // 58: nri.pkg.api.v1alpha1.LinuxContainer.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt - 48, // 59: nri.pkg.api.v1alpha1.LinuxContainer.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority - 45, // 60: nri.pkg.api.v1alpha1.LinuxContainer.seccomp_profile:type_name -> nri.pkg.api.v1alpha1.SecurityProfile - 53, // 61: nri.pkg.api.v1alpha1.LinuxContainer.seccomp_policy:type_name -> nri.pkg.api.v1alpha1.LinuxSeccomp - 76, // 62: nri.pkg.api.v1alpha1.LinuxContainer.sysctl:type_name -> nri.pkg.api.v1alpha1.LinuxContainer.SysctlEntry - 77, // 63: nri.pkg.api.v1alpha1.LinuxContainer.net_devices:type_name -> nri.pkg.api.v1alpha1.LinuxContainer.NetDevicesEntry - 50, // 64: nri.pkg.api.v1alpha1.LinuxContainer.scheduler:type_name -> nri.pkg.api.v1alpha1.LinuxScheduler - 68, // 65: nri.pkg.api.v1alpha1.LinuxDevice.file_mode:type_name -> nri.pkg.api.v1alpha1.OptionalFileMode - 64, // 66: nri.pkg.api.v1alpha1.LinuxDevice.uid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 - 64, // 67: nri.pkg.api.v1alpha1.LinuxDevice.gid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 - 65, // 68: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.major:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 65, // 69: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.minor:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 42, // 70: nri.pkg.api.v1alpha1.LinuxResources.memory:type_name -> nri.pkg.api.v1alpha1.LinuxMemory - 43, // 71: nri.pkg.api.v1alpha1.LinuxResources.cpu:type_name -> nri.pkg.api.v1alpha1.LinuxCPU - 44, // 72: nri.pkg.api.v1alpha1.LinuxResources.hugepage_limits:type_name -> nri.pkg.api.v1alpha1.HugepageLimit - 60, // 73: nri.pkg.api.v1alpha1.LinuxResources.blockio_class:type_name -> nri.pkg.api.v1alpha1.OptionalString - 60, // 74: nri.pkg.api.v1alpha1.LinuxResources.rdt_class:type_name -> nri.pkg.api.v1alpha1.OptionalString - 78, // 75: nri.pkg.api.v1alpha1.LinuxResources.unified:type_name -> nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry - 38, // 76: nri.pkg.api.v1alpha1.LinuxResources.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDeviceCgroup - 47, // 77: nri.pkg.api.v1alpha1.LinuxResources.pids:type_name -> nri.pkg.api.v1alpha1.LinuxPids - 65, // 78: nri.pkg.api.v1alpha1.LinuxMemory.limit:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 65, // 79: nri.pkg.api.v1alpha1.LinuxMemory.reservation:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 65, // 80: nri.pkg.api.v1alpha1.LinuxMemory.swap:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 65, // 81: nri.pkg.api.v1alpha1.LinuxMemory.kernel:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 65, // 82: nri.pkg.api.v1alpha1.LinuxMemory.kernel_tcp:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 66, // 83: nri.pkg.api.v1alpha1.LinuxMemory.swappiness:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 67, // 84: nri.pkg.api.v1alpha1.LinuxMemory.disable_oom_killer:type_name -> nri.pkg.api.v1alpha1.OptionalBool - 67, // 85: nri.pkg.api.v1alpha1.LinuxMemory.use_hierarchy:type_name -> nri.pkg.api.v1alpha1.OptionalBool - 66, // 86: nri.pkg.api.v1alpha1.LinuxCPU.shares:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 65, // 87: nri.pkg.api.v1alpha1.LinuxCPU.quota:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 66, // 88: nri.pkg.api.v1alpha1.LinuxCPU.period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 65, // 89: nri.pkg.api.v1alpha1.LinuxCPU.realtime_runtime:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 66, // 90: nri.pkg.api.v1alpha1.LinuxCPU.realtime_period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 7, // 91: nri.pkg.api.v1alpha1.SecurityProfile.profile_type:type_name -> nri.pkg.api.v1alpha1.SecurityProfile.ProfileType + 77, // 40: nri.pkg.api.v1alpha1.Container.labels:type_name -> nri.pkg.api.v1alpha1.Container.LabelsEntry + 78, // 41: nri.pkg.api.v1alpha1.Container.annotations:type_name -> nri.pkg.api.v1alpha1.Container.AnnotationsEntry + 34, // 42: nri.pkg.api.v1alpha1.Container.mounts:type_name -> nri.pkg.api.v1alpha1.Mount + 35, // 43: nri.pkg.api.v1alpha1.Container.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks + 37, // 44: nri.pkg.api.v1alpha1.Container.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainer + 48, // 45: nri.pkg.api.v1alpha1.Container.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit + 41, // 46: nri.pkg.api.v1alpha1.Container.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice + 42, // 47: nri.pkg.api.v1alpha1.Container.user:type_name -> nri.pkg.api.v1alpha1.User + 36, // 48: nri.pkg.api.v1alpha1.Hooks.prestart:type_name -> nri.pkg.api.v1alpha1.Hook + 36, // 49: nri.pkg.api.v1alpha1.Hooks.create_runtime:type_name -> nri.pkg.api.v1alpha1.Hook + 36, // 50: nri.pkg.api.v1alpha1.Hooks.create_container:type_name -> nri.pkg.api.v1alpha1.Hook + 36, // 51: nri.pkg.api.v1alpha1.Hooks.start_container:type_name -> nri.pkg.api.v1alpha1.Hook + 36, // 52: nri.pkg.api.v1alpha1.Hooks.poststart:type_name -> nri.pkg.api.v1alpha1.Hook + 36, // 53: nri.pkg.api.v1alpha1.Hooks.poststop:type_name -> nri.pkg.api.v1alpha1.Hook + 65, // 54: nri.pkg.api.v1alpha1.Hook.timeout:type_name -> nri.pkg.api.v1alpha1.OptionalInt + 38, // 55: nri.pkg.api.v1alpha1.LinuxContainer.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace + 39, // 56: nri.pkg.api.v1alpha1.LinuxContainer.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice + 43, // 57: nri.pkg.api.v1alpha1.LinuxContainer.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 65, // 58: nri.pkg.api.v1alpha1.LinuxContainer.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt + 50, // 59: nri.pkg.api.v1alpha1.LinuxContainer.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority + 47, // 60: nri.pkg.api.v1alpha1.LinuxContainer.seccomp_profile:type_name -> nri.pkg.api.v1alpha1.SecurityProfile + 55, // 61: nri.pkg.api.v1alpha1.LinuxContainer.seccomp_policy:type_name -> nri.pkg.api.v1alpha1.LinuxSeccomp + 79, // 62: nri.pkg.api.v1alpha1.LinuxContainer.sysctl:type_name -> nri.pkg.api.v1alpha1.LinuxContainer.SysctlEntry + 80, // 63: nri.pkg.api.v1alpha1.LinuxContainer.net_devices:type_name -> nri.pkg.api.v1alpha1.LinuxContainer.NetDevicesEntry + 52, // 64: nri.pkg.api.v1alpha1.LinuxContainer.scheduler:type_name -> nri.pkg.api.v1alpha1.LinuxScheduler + 71, // 65: nri.pkg.api.v1alpha1.LinuxDevice.file_mode:type_name -> nri.pkg.api.v1alpha1.OptionalFileMode + 67, // 66: nri.pkg.api.v1alpha1.LinuxDevice.uid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 67, // 67: nri.pkg.api.v1alpha1.LinuxDevice.gid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 68, // 68: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.major:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 68, // 69: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.minor:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 44, // 70: nri.pkg.api.v1alpha1.LinuxResources.memory:type_name -> nri.pkg.api.v1alpha1.LinuxMemory + 45, // 71: nri.pkg.api.v1alpha1.LinuxResources.cpu:type_name -> nri.pkg.api.v1alpha1.LinuxCPU + 46, // 72: nri.pkg.api.v1alpha1.LinuxResources.hugepage_limits:type_name -> nri.pkg.api.v1alpha1.HugepageLimit + 63, // 73: nri.pkg.api.v1alpha1.LinuxResources.blockio_class:type_name -> nri.pkg.api.v1alpha1.OptionalString + 63, // 74: nri.pkg.api.v1alpha1.LinuxResources.rdt_class:type_name -> nri.pkg.api.v1alpha1.OptionalString + 81, // 75: nri.pkg.api.v1alpha1.LinuxResources.unified:type_name -> nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry + 40, // 76: nri.pkg.api.v1alpha1.LinuxResources.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDeviceCgroup + 49, // 77: nri.pkg.api.v1alpha1.LinuxResources.pids:type_name -> nri.pkg.api.v1alpha1.LinuxPids + 68, // 78: nri.pkg.api.v1alpha1.LinuxMemory.limit:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 68, // 79: nri.pkg.api.v1alpha1.LinuxMemory.reservation:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 68, // 80: nri.pkg.api.v1alpha1.LinuxMemory.swap:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 68, // 81: nri.pkg.api.v1alpha1.LinuxMemory.kernel:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 68, // 82: nri.pkg.api.v1alpha1.LinuxMemory.kernel_tcp:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 69, // 83: nri.pkg.api.v1alpha1.LinuxMemory.swappiness:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 70, // 84: nri.pkg.api.v1alpha1.LinuxMemory.disable_oom_killer:type_name -> nri.pkg.api.v1alpha1.OptionalBool + 70, // 85: nri.pkg.api.v1alpha1.LinuxMemory.use_hierarchy:type_name -> nri.pkg.api.v1alpha1.OptionalBool + 69, // 86: nri.pkg.api.v1alpha1.LinuxCPU.shares:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 68, // 87: nri.pkg.api.v1alpha1.LinuxCPU.quota:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 69, // 88: nri.pkg.api.v1alpha1.LinuxCPU.period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 68, // 89: nri.pkg.api.v1alpha1.LinuxCPU.realtime_runtime:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 69, // 90: nri.pkg.api.v1alpha1.LinuxCPU.realtime_period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 9, // 91: nri.pkg.api.v1alpha1.SecurityProfile.profile_type:type_name -> nri.pkg.api.v1alpha1.SecurityProfile.ProfileType 2, // 92: nri.pkg.api.v1alpha1.LinuxIOPriority.class:type_name -> nri.pkg.api.v1alpha1.IOPrioClass 3, // 93: nri.pkg.api.v1alpha1.LinuxScheduler.policy:type_name -> nri.pkg.api.v1alpha1.LinuxSchedulerPolicy 4, // 94: nri.pkg.api.v1alpha1.LinuxScheduler.flags:type_name -> nri.pkg.api.v1alpha1.LinuxSchedulerFlag - 79, // 95: nri.pkg.api.v1alpha1.ContainerAdjustment.annotations:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry - 32, // 96: nri.pkg.api.v1alpha1.ContainerAdjustment.mounts:type_name -> nri.pkg.api.v1alpha1.Mount - 59, // 97: nri.pkg.api.v1alpha1.ContainerAdjustment.env:type_name -> nri.pkg.api.v1alpha1.KeyValue - 33, // 98: nri.pkg.api.v1alpha1.ContainerAdjustment.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks - 52, // 99: nri.pkg.api.v1alpha1.ContainerAdjustment.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment - 46, // 100: nri.pkg.api.v1alpha1.ContainerAdjustment.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit - 39, // 101: nri.pkg.api.v1alpha1.ContainerAdjustment.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice - 37, // 102: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice - 41, // 103: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 62, // 104: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt - 48, // 105: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority - 53, // 106: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.seccomp_policy:type_name -> nri.pkg.api.v1alpha1.LinuxSeccomp - 36, // 107: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace - 80, // 108: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.sysctl:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment.SysctlEntry - 81, // 109: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.net_devices:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment.NetDevicesEntry - 50, // 110: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.scheduler:type_name -> nri.pkg.api.v1alpha1.LinuxScheduler - 64, // 111: nri.pkg.api.v1alpha1.LinuxSeccomp.default_errno:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 - 54, // 112: nri.pkg.api.v1alpha1.LinuxSeccomp.syscalls:type_name -> nri.pkg.api.v1alpha1.LinuxSyscall - 64, // 113: nri.pkg.api.v1alpha1.LinuxSyscall.errno_ret:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 - 55, // 114: nri.pkg.api.v1alpha1.LinuxSyscall.args:type_name -> nri.pkg.api.v1alpha1.LinuxSeccompArg - 57, // 115: nri.pkg.api.v1alpha1.ContainerUpdate.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerUpdate - 41, // 116: nri.pkg.api.v1alpha1.LinuxContainerUpdate.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 82, // 117: nri.pkg.api.v1alpha1.CompoundFieldOwners.owners:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry - 83, // 118: nri.pkg.api.v1alpha1.FieldOwners.simple:type_name -> nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry - 84, // 119: nri.pkg.api.v1alpha1.FieldOwners.compound:type_name -> nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry - 85, // 120: nri.pkg.api.v1alpha1.OwningPlugins.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry - 49, // 121: nri.pkg.api.v1alpha1.LinuxContainer.NetDevicesEntry.value:type_name -> nri.pkg.api.v1alpha1.LinuxNetDevice - 49, // 122: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.NetDevicesEntry.value:type_name -> nri.pkg.api.v1alpha1.LinuxNetDevice - 69, // 123: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry.value:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners - 70, // 124: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry.value:type_name -> nri.pkg.api.v1alpha1.FieldOwners - 8, // 125: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:input_type -> nri.pkg.api.v1alpha1.RegisterPluginRequest - 9, // 126: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:input_type -> nri.pkg.api.v1alpha1.UpdateContainersRequest - 12, // 127: nri.pkg.api.v1alpha1.Plugin.Configure:input_type -> nri.pkg.api.v1alpha1.ConfigureRequest - 14, // 128: nri.pkg.api.v1alpha1.Plugin.Synchronize:input_type -> nri.pkg.api.v1alpha1.SynchronizeRequest - 28, // 129: nri.pkg.api.v1alpha1.Plugin.Shutdown:input_type -> nri.pkg.api.v1alpha1.Empty - 16, // 130: nri.pkg.api.v1alpha1.Plugin.CreateContainer:input_type -> nri.pkg.api.v1alpha1.CreateContainerRequest - 18, // 131: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:input_type -> nri.pkg.api.v1alpha1.UpdateContainerRequest - 20, // 132: nri.pkg.api.v1alpha1.Plugin.StopContainer:input_type -> nri.pkg.api.v1alpha1.StopContainerRequest - 22, // 133: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:input_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxRequest - 24, // 134: nri.pkg.api.v1alpha1.Plugin.StateChange:input_type -> nri.pkg.api.v1alpha1.StateChangeEvent - 25, // 135: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:input_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest - 11, // 136: nri.pkg.api.v1alpha1.HostFunctions.Log:input_type -> nri.pkg.api.v1alpha1.LogRequest - 28, // 137: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:output_type -> nri.pkg.api.v1alpha1.Empty - 10, // 138: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:output_type -> nri.pkg.api.v1alpha1.UpdateContainersResponse - 13, // 139: nri.pkg.api.v1alpha1.Plugin.Configure:output_type -> nri.pkg.api.v1alpha1.ConfigureResponse - 15, // 140: nri.pkg.api.v1alpha1.Plugin.Synchronize:output_type -> nri.pkg.api.v1alpha1.SynchronizeResponse - 28, // 141: nri.pkg.api.v1alpha1.Plugin.Shutdown:output_type -> nri.pkg.api.v1alpha1.Empty - 17, // 142: nri.pkg.api.v1alpha1.Plugin.CreateContainer:output_type -> nri.pkg.api.v1alpha1.CreateContainerResponse - 19, // 143: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:output_type -> nri.pkg.api.v1alpha1.UpdateContainerResponse - 21, // 144: nri.pkg.api.v1alpha1.Plugin.StopContainer:output_type -> nri.pkg.api.v1alpha1.StopContainerResponse - 23, // 145: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:output_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxResponse - 28, // 146: nri.pkg.api.v1alpha1.Plugin.StateChange:output_type -> nri.pkg.api.v1alpha1.Empty - 27, // 147: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:output_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse - 28, // 148: nri.pkg.api.v1alpha1.HostFunctions.Log:output_type -> nri.pkg.api.v1alpha1.Empty - 137, // [137:149] is the sub-list for method output_type - 125, // [125:137] is the sub-list for method input_type - 125, // [125:125] is the sub-list for extension type_name - 125, // [125:125] is the sub-list for extension extendee - 0, // [0:125] is the sub-list for field type_name + 82, // 95: nri.pkg.api.v1alpha1.ContainerAdjustment.annotations:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry + 34, // 96: nri.pkg.api.v1alpha1.ContainerAdjustment.mounts:type_name -> nri.pkg.api.v1alpha1.Mount + 62, // 97: nri.pkg.api.v1alpha1.ContainerAdjustment.env:type_name -> nri.pkg.api.v1alpha1.KeyValue + 35, // 98: nri.pkg.api.v1alpha1.ContainerAdjustment.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks + 54, // 99: nri.pkg.api.v1alpha1.ContainerAdjustment.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment + 48, // 100: nri.pkg.api.v1alpha1.ContainerAdjustment.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit + 41, // 101: nri.pkg.api.v1alpha1.ContainerAdjustment.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice + 39, // 102: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice + 43, // 103: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 65, // 104: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt + 50, // 105: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority + 55, // 106: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.seccomp_policy:type_name -> nri.pkg.api.v1alpha1.LinuxSeccomp + 38, // 107: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace + 83, // 108: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.sysctl:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment.SysctlEntry + 84, // 109: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.net_devices:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment.NetDevicesEntry + 52, // 110: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.scheduler:type_name -> nri.pkg.api.v1alpha1.LinuxScheduler + 58, // 111: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.memory_policy:type_name -> nri.pkg.api.v1alpha1.LinuxMemoryPolicy + 67, // 112: nri.pkg.api.v1alpha1.LinuxSeccomp.default_errno:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 56, // 113: nri.pkg.api.v1alpha1.LinuxSeccomp.syscalls:type_name -> nri.pkg.api.v1alpha1.LinuxSyscall + 67, // 114: nri.pkg.api.v1alpha1.LinuxSyscall.errno_ret:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 57, // 115: nri.pkg.api.v1alpha1.LinuxSyscall.args:type_name -> nri.pkg.api.v1alpha1.LinuxSeccompArg + 5, // 116: nri.pkg.api.v1alpha1.LinuxMemoryPolicy.mode:type_name -> nri.pkg.api.v1alpha1.MpolMode + 6, // 117: nri.pkg.api.v1alpha1.LinuxMemoryPolicy.flags:type_name -> nri.pkg.api.v1alpha1.MpolFlag + 60, // 118: nri.pkg.api.v1alpha1.ContainerUpdate.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerUpdate + 43, // 119: nri.pkg.api.v1alpha1.LinuxContainerUpdate.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 85, // 120: nri.pkg.api.v1alpha1.CompoundFieldOwners.owners:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry + 86, // 121: nri.pkg.api.v1alpha1.FieldOwners.simple:type_name -> nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry + 87, // 122: nri.pkg.api.v1alpha1.FieldOwners.compound:type_name -> nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry + 88, // 123: nri.pkg.api.v1alpha1.OwningPlugins.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry + 51, // 124: nri.pkg.api.v1alpha1.LinuxContainer.NetDevicesEntry.value:type_name -> nri.pkg.api.v1alpha1.LinuxNetDevice + 51, // 125: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.NetDevicesEntry.value:type_name -> nri.pkg.api.v1alpha1.LinuxNetDevice + 72, // 126: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry.value:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners + 73, // 127: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry.value:type_name -> nri.pkg.api.v1alpha1.FieldOwners + 10, // 128: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:input_type -> nri.pkg.api.v1alpha1.RegisterPluginRequest + 11, // 129: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:input_type -> nri.pkg.api.v1alpha1.UpdateContainersRequest + 14, // 130: nri.pkg.api.v1alpha1.Plugin.Configure:input_type -> nri.pkg.api.v1alpha1.ConfigureRequest + 16, // 131: nri.pkg.api.v1alpha1.Plugin.Synchronize:input_type -> nri.pkg.api.v1alpha1.SynchronizeRequest + 30, // 132: nri.pkg.api.v1alpha1.Plugin.Shutdown:input_type -> nri.pkg.api.v1alpha1.Empty + 18, // 133: nri.pkg.api.v1alpha1.Plugin.CreateContainer:input_type -> nri.pkg.api.v1alpha1.CreateContainerRequest + 20, // 134: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:input_type -> nri.pkg.api.v1alpha1.UpdateContainerRequest + 22, // 135: nri.pkg.api.v1alpha1.Plugin.StopContainer:input_type -> nri.pkg.api.v1alpha1.StopContainerRequest + 24, // 136: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:input_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxRequest + 26, // 137: nri.pkg.api.v1alpha1.Plugin.StateChange:input_type -> nri.pkg.api.v1alpha1.StateChangeEvent + 27, // 138: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:input_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest + 13, // 139: nri.pkg.api.v1alpha1.HostFunctions.Log:input_type -> nri.pkg.api.v1alpha1.LogRequest + 30, // 140: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:output_type -> nri.pkg.api.v1alpha1.Empty + 12, // 141: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:output_type -> nri.pkg.api.v1alpha1.UpdateContainersResponse + 15, // 142: nri.pkg.api.v1alpha1.Plugin.Configure:output_type -> nri.pkg.api.v1alpha1.ConfigureResponse + 17, // 143: nri.pkg.api.v1alpha1.Plugin.Synchronize:output_type -> nri.pkg.api.v1alpha1.SynchronizeResponse + 30, // 144: nri.pkg.api.v1alpha1.Plugin.Shutdown:output_type -> nri.pkg.api.v1alpha1.Empty + 19, // 145: nri.pkg.api.v1alpha1.Plugin.CreateContainer:output_type -> nri.pkg.api.v1alpha1.CreateContainerResponse + 21, // 146: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:output_type -> nri.pkg.api.v1alpha1.UpdateContainerResponse + 23, // 147: nri.pkg.api.v1alpha1.Plugin.StopContainer:output_type -> nri.pkg.api.v1alpha1.StopContainerResponse + 25, // 148: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:output_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxResponse + 30, // 149: nri.pkg.api.v1alpha1.Plugin.StateChange:output_type -> nri.pkg.api.v1alpha1.Empty + 29, // 150: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:output_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse + 30, // 151: nri.pkg.api.v1alpha1.HostFunctions.Log:output_type -> nri.pkg.api.v1alpha1.Empty + 140, // [140:152] is the sub-list for method output_type + 128, // [128:140] is the sub-list for method input_type + 128, // [128:128] is the sub-list for extension type_name + 128, // [128:128] is the sub-list for extension extendee + 0, // [0:128] is the sub-list for field type_name } func init() { file_pkg_api_api_proto_init() } @@ -6835,7 +7057,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerUpdate); i { + switch v := v.(*LinuxMemoryPolicy); i { case 0: return &v.state case 1: @@ -6847,7 +7069,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LinuxContainerUpdate); i { + switch v := v.(*ContainerUpdate); i { case 0: return &v.state case 1: @@ -6859,7 +7081,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerEviction); i { + switch v := v.(*LinuxContainerUpdate); i { case 0: return &v.state case 1: @@ -6871,7 +7093,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyValue); i { + switch v := v.(*ContainerEviction); i { case 0: return &v.state case 1: @@ -6883,7 +7105,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalString); i { + switch v := v.(*KeyValue); i { case 0: return &v.state case 1: @@ -6895,7 +7117,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalRepeatedString); i { + switch v := v.(*OptionalString); i { case 0: return &v.state case 1: @@ -6907,7 +7129,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalInt); i { + switch v := v.(*OptionalRepeatedString); i { case 0: return &v.state case 1: @@ -6919,7 +7141,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalInt32); i { + switch v := v.(*OptionalInt); i { case 0: return &v.state case 1: @@ -6931,7 +7153,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalUInt32); i { + switch v := v.(*OptionalInt32); i { case 0: return &v.state case 1: @@ -6943,7 +7165,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalInt64); i { + switch v := v.(*OptionalUInt32); i { case 0: return &v.state case 1: @@ -6955,7 +7177,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalUInt64); i { + switch v := v.(*OptionalInt64); i { case 0: return &v.state case 1: @@ -6967,7 +7189,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalBool); i { + switch v := v.(*OptionalUInt64); i { case 0: return &v.state case 1: @@ -6979,7 +7201,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalFileMode); i { + switch v := v.(*OptionalBool); i { case 0: return &v.state case 1: @@ -6991,7 +7213,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompoundFieldOwners); i { + switch v := v.(*OptionalFileMode); i { case 0: return &v.state case 1: @@ -7003,7 +7225,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldOwners); i { + switch v := v.(*CompoundFieldOwners); i { case 0: return &v.state case 1: @@ -7015,6 +7237,18 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FieldOwners); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_api_api_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OwningPlugins); i { case 0: return &v.state @@ -7032,8 +7266,8 @@ func file_pkg_api_api_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_api_api_proto_rawDesc, - NumEnums: 8, - NumMessages: 78, + NumEnums: 10, + NumMessages: 79, NumExtensions: 0, NumServices: 3, }, diff --git a/pkg/api/api.proto b/pkg/api/api.proto index 2dfdafa8..d38eb326 100644 --- a/pkg/api/api.proto +++ b/pkg/api/api.proto @@ -560,6 +560,7 @@ message LinuxContainerAdjustment { map sysctl = 8; map net_devices = 9; LinuxScheduler scheduler = 10; + LinuxMemoryPolicy memory_policy = 11; } message LinuxSeccomp { @@ -586,6 +587,29 @@ message LinuxSeccompArg { string op = 4; } +// Memory policy of a container being created. +message LinuxMemoryPolicy { + MpolMode mode = 1; + string nodes = 2; + repeated MpolFlag flags = 3; +} + +enum MpolMode { + MPOL_DEFAULT = 0; + MPOL_PREFERRED = 1; + MPOL_BIND = 2; + MPOL_INTERLEAVE = 3; + MPOL_LOCAL = 4; + MPOL_PREFERRED_MANY = 5; + MPOL_WEIGHTED_INTERLEAVE = 6; +} + +enum MpolFlag { + MPOL_F_STATIC_NODES = 0; + MPOL_F_RELATIVE_NODES = 1; + MPOL_F_NUMA_BALANCING = 2; +} + // Requested update to an already created container. message ContainerUpdate { string container_id = 1; @@ -726,4 +750,5 @@ enum Field { LinuxNetDevices = 35; // protoc scoping rules: calling this LinuxScheduler would conflict with message. LinuxSched = 36; + MemoryPolicy = 37; } diff --git a/pkg/api/api_vtproto.pb.go b/pkg/api/api_vtproto.pb.go index 4fd1763b..084c2f41 100644 --- a/pkg/api/api_vtproto.pb.go +++ b/pkg/api/api_vtproto.pb.go @@ -3178,6 +3178,16 @@ func (m *LinuxContainerAdjustment) MarshalToSizedBufferVT(dAtA []byte) (int, err i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.MemoryPolicy != nil { + size, err := m.MemoryPolicy.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x5a + } if m.Scheduler != nil { size, err := m.Scheduler.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { @@ -3523,6 +3533,72 @@ func (m *LinuxSeccompArg) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *LinuxMemoryPolicy) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LinuxMemoryPolicy) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *LinuxMemoryPolicy) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Flags) > 0 { + var pksize2 int + for _, num := range m.Flags { + pksize2 += sov(uint64(num)) + } + i -= pksize2 + j1 := i + for _, num1 := range m.Flags { + num := uint64(num1) + for num >= 1<<7 { + dAtA[j1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j1++ + } + dAtA[j1] = uint8(num) + j1++ + } + i = encodeVarint(dAtA, i, uint64(pksize2)) + i-- + dAtA[i] = 0x1a + } + if len(m.Nodes) > 0 { + i -= len(m.Nodes) + copy(dAtA[i:], m.Nodes) + i = encodeVarint(dAtA, i, uint64(len(m.Nodes))) + i-- + dAtA[i] = 0x12 + } + if m.Mode != 0 { + i = encodeVarint(dAtA, i, uint64(m.Mode)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *ContainerUpdate) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -5554,6 +5630,10 @@ func (m *LinuxContainerAdjustment) SizeVT() (n int) { l = m.Scheduler.SizeVT() n += 1 + l + sov(uint64(l)) } + if m.MemoryPolicy != nil { + l = m.MemoryPolicy.SizeVT() + n += 1 + l + sov(uint64(l)) + } n += len(m.unknownFields) return n } @@ -5655,6 +5735,30 @@ func (m *LinuxSeccompArg) SizeVT() (n int) { return n } +func (m *LinuxMemoryPolicy) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Mode != 0 { + n += 1 + sov(uint64(m.Mode)) + } + l = len(m.Nodes) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + if len(m.Flags) > 0 { + l = 0 + for _, e := range m.Flags { + l += sov(uint64(e)) + } + n += 1 + sov(uint64(l)) + l + } + n += len(m.unknownFields) + return n +} + func (m *ContainerUpdate) SizeVT() (n int) { if m == nil { return 0 @@ -15070,6 +15174,42 @@ func (m *LinuxContainerAdjustment) UnmarshalVT(dAtA []byte) error { return err } iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MemoryPolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MemoryPolicy == nil { + m.MemoryPolicy = &LinuxMemoryPolicy{} + } + if err := m.MemoryPolicy.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) @@ -15698,6 +15838,177 @@ func (m *LinuxSeccompArg) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *LinuxMemoryPolicy) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LinuxMemoryPolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LinuxMemoryPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + m.Mode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Mode |= MpolMode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Nodes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Nodes = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType == 0 { + var v MpolFlag + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= MpolFlag(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Flags = append(m.Flags, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + if elementCount != 0 && len(m.Flags) == 0 { + m.Flags = make([]MpolFlag, 0, elementCount) + } + for iNdEx < postIndex { + var v MpolFlag + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= MpolFlag(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Flags = append(m.Flags, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field Flags", wireType) + } + default: + iNdEx = preIndex + skippy, err := skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ContainerUpdate) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/api/memorypolicy.go b/pkg/api/memorypolicy.go new file mode 100644 index 00000000..86a6ad42 --- /dev/null +++ b/pkg/api/memorypolicy.go @@ -0,0 +1,90 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package api + +import ( + rspec "github.com/opencontainers/runtime-spec/specs-go" +) + +// FromOCILinuxMemoryPolicy returns a LinuxMemoryPolicy corresponding to the +// OCI LinuxMemoryPolicy. +func FromOCILinuxMemoryPolicy(o *rspec.LinuxMemoryPolicy) *LinuxMemoryPolicy { + if o == nil { + return nil + } + + memoryPolicy := &LinuxMemoryPolicy{ + Mode: FromOCIMemoryPolicyMode(o.Mode), + Nodes: o.Nodes, + Flags: FromOCIMemoryPolicyFlags(o.Flags...), + } + + return memoryPolicy +} + +// ToOCI returns the OCI LinuxMemoryPolicy corresponding to the LinuxMemoryPolicy. +func (memoryPolicy *LinuxMemoryPolicy) ToOCI() *rspec.LinuxMemoryPolicy { + if memoryPolicy == nil { + return nil + } + + return &rspec.LinuxMemoryPolicy{ + Mode: memoryPolicy.Mode.ToOCI(), + Nodes: memoryPolicy.Nodes, + Flags: ToOCIMemoryPolicyFlags(memoryPolicy.Flags...), + } +} + +// FromOCIMemoryPolicyMode returns memory policy mode corresponding to the +// mode in the OCI LinuxMemoryPolicy. +func FromOCIMemoryPolicyMode(mode rspec.MemoryPolicyModeType) MpolMode { + return MpolMode(MpolMode_value[string(mode)]) +} + +// FromOCIMemoryPolicyFlags returns memory policy flags corresponding to the +// flags in the OCI LinuxMemoryPolicy. +func FromOCIMemoryPolicyFlags(flags ...rspec.MemoryPolicyFlagType) []MpolFlag { + if flags == nil { + return nil + } + + mpolFlags := make([]MpolFlag, len(flags)) + for i, flag := range flags { + mpolFlags[i] = MpolFlag(MpolFlag_value[string(flag)]) + } + return mpolFlags +} + +// ToOCI returns the OCI MemoryPolicyClass corresponding to the given +// IOPrioClass. +func (mode MpolMode) ToOCI() rspec.MemoryPolicyModeType { + return rspec.MemoryPolicyModeType(MpolMode_name[int32(mode)]) +} + +// ToOCIMemoryPolicyFlags returns memory policy mode flags +// corresponding to flags. +func ToOCIMemoryPolicyFlags(flags ...MpolFlag) []rspec.MemoryPolicyFlagType { + if flags == nil { + return nil + } + + ociFlags := make([]rspec.MemoryPolicyFlagType, len(flags)) + for i, flag := range flags { + ociFlags[i] = rspec.MemoryPolicyFlagType(MpolFlag_name[int32(flag)]) + } + return ociFlags +} diff --git a/pkg/api/owners.go b/pkg/api/owners.go index cc36017e..48d9fb28 100644 --- a/pkg/api/owners.go +++ b/pkg/api/owners.go @@ -184,6 +184,10 @@ func (o *OwningPlugins) ClaimLinuxNetDevice(id, path, plugin string) error { return o.mustOwnersFor(id).ClaimLinuxNetDevice(path, plugin) } +func (o *OwningPlugins) ClaimMemoryPolicy(id, plugin string) error { + return o.mustOwnersFor(id).ClaimMemoryPolicy(plugin) +} + func (o *OwningPlugins) ClearAnnotation(id, key, plugin string) { o.mustOwnersFor(id).ClearAnnotation(key, plugin) } @@ -356,6 +360,10 @@ func (o *OwningPlugins) LinuxNetDeviceOwner(id, path string) (string, bool) { return o.ownersFor(id).compoundOwner(Field_LinuxNetDevices.Key(), path) } +func (o *OwningPlugins) MemoryPolicy(id string) (string, bool) { + return o.ownersFor(id).simpleOwner(Field_MemoryPolicy.Key()) +} + func (o *OwningPlugins) mustOwnersFor(id string) *FieldOwners { f, ok := o.Owners[id] if !ok { @@ -590,6 +598,10 @@ func (f *FieldOwners) ClaimLinuxNetDevice(path, plugin string) error { return f.claimCompound(Field_LinuxNetDevices.Key(), path, plugin) } +func (f *FieldOwners) ClaimMemoryPolicy(plugin string) error { + return f.claimSimple(Field_MemoryPolicy.Key(), plugin) +} + func (f *FieldOwners) clearCompound(field int32, key, plugin string) { m, ok := f.Compound[field] if !ok { @@ -789,6 +801,10 @@ func (f *FieldOwners) RlimitOwner(typ string) (string, bool) { return f.compoundOwner(Field_Rlimits.Key(), typ) } +func (f *FieldOwners) MemoryPolicyOwner() (string, bool) { + return f.simpleOwner(Field_MemoryPolicy.Key()) +} + func qualify(field int32, qualifiers ...string) string { return Field(field).String() + " " + strings.Join(append([]string{}, qualifiers...), " ") } diff --git a/pkg/api/strip.go b/pkg/api/strip.go index 116a4687..04de6cd3 100644 --- a/pkg/api/strip.go +++ b/pkg/api/strip.go @@ -112,6 +112,10 @@ func (l *LinuxContainerAdjustment) Strip() *LinuxContainerAdjustment { empty = false } + if l.MemoryPolicy = l.MemoryPolicy.Strip(); l.MemoryPolicy != nil { + empty = false + } + if empty { return nil } @@ -296,6 +300,37 @@ func (m *LinuxMemory) Strip() *LinuxMemory { return m } +// Strip empty fields from linux scheduler attributes, reducing a fully empty +// one to nil. Strip allows comparison of two sets of attributes for semantic +// equality using go-cmp. +func (m *LinuxMemoryPolicy) Strip() *LinuxMemoryPolicy { + if m == nil { + return nil + } + + empty := true //nolint:staticcheck // could merge conditional assignment below to variable definition + + if m.Mode != 0 { + empty = false + } + + if m.Nodes != "" { + empty = false + } + + if len(m.Flags) == 0 { + m.Flags = nil + } else { + empty = false + } + + if empty { + return nil + } + + return m +} + // Strip empty fields from a container update, reducing a fully empty one // to nil. Strip allows comparison of two updates for semantic equality // using go-cmp. diff --git a/pkg/runtime-tools/generate/generate.go b/pkg/runtime-tools/generate/generate.go index be8b23e1..782693bf 100644 --- a/pkg/runtime-tools/generate/generate.go +++ b/pkg/runtime-tools/generate/generate.go @@ -179,6 +179,8 @@ func (g *Generator) Adjust(adjust *nri.ContainerAdjustment) error { } g.AdjustLinuxNetDevices(adjust.GetLinux().GetNetDevices()) + g.AdjustMemoryPolicy(adjust.GetLinux().GetMemoryPolicy()) + resources := adjust.GetLinux().GetResources() if err := g.AdjustResources(resources); err != nil { return err @@ -493,6 +495,13 @@ func (g *Generator) AdjustLinuxScheduler(sch *nri.LinuxScheduler) { g.Config.Process.Scheduler = sch.ToOCI() } +// AdjustMemoryPolicy adjusts default memory policy (set_mempolicy) for the container. +func (g *Generator) AdjustMemoryPolicy(memoryPolicy *nri.LinuxMemoryPolicy) { + if memoryPolicy != nil { + g.SetLinuxMemoryPolicy(memoryPolicy.ToOCI()) + } +} + // AdjustDevices adjusts the (Linux) devices in the OCI Spec. func (g *Generator) AdjustDevices(devices []*nri.LinuxDevice) { for _, d := range devices { @@ -733,6 +742,15 @@ func (g *Generator) RemoveLinuxNetDevice(hostDev string) { delete(g.Config.Linux.NetDevices, hostDev) } +// SetLinuxMemoryPolicy sets the given Linux memory policy. +func (g *Generator) SetLinuxMemoryPolicy(mpol *rspec.LinuxMemoryPolicy) { + g.initConfigLinux() + if mpol != nil && mpol.Mode == "" { + mpol = nil + } + g.Config.Linux.MemoryPolicy = mpol +} + func (g *Generator) initConfig() { if g.Config == nil { g.Config = &rspec.Spec{} diff --git a/plugins/device-injector/README.md b/plugins/device-injector/README.md index a0337675..324d141d 100644 --- a/plugins/device-injector/README.md +++ b/plugins/device-injector/README.md @@ -128,6 +128,43 @@ requests the injection of the host network interface `ens2.100` into container ` as the network interface `netdev0`, and the host network interface `ens2.101` into container `c1` as the network interface `netdev1`. +### Linux Memory Policy Annotations + +Memory policies are annotated in a similar manner to devices, but using the +`memory-policy.noderesource.dev` annotation key prefix. As with devices, the +`memory-policy.nri.io` annotation key prefix is also supported. + +The annotation value syntax for memory policy adjustment is + +``` + mode: + nodes: + flags: +``` + +The supported modes are: + +- MPOL_DEFAULT +- MPOL_PREFERRED +- MPOL_BIND +- MPOL_INTERLEAVE +- MPOL_LOCAL +- MPOL_PREFERRED_MANY +- MPOL_WEIGHTED_INTERLEAVE + +You can omit the MPOL_ prefix and can use lowercase at will. + +The supported flags are: + +- MPOL_F_STATIC_NODES +- MPOL_F_RELATIVE_NODES +- MPOL_F_NUMA_BALANCING + +As with modes, you can omit the MPOL_F_ prefix and use lowercase at will. + +See man set_mempolicy(2) for a description of what the effects are of these +settings. + ## Deployment The NRI repository contains minimal kustomize overlays for this plugin at diff --git a/plugins/device-injector/device-injector.go b/plugins/device-injector/device-injector.go index 0fbdda38..9bd1b896 100644 --- a/plugins/device-injector/device-injector.go +++ b/plugins/device-injector/device-injector.go @@ -55,6 +55,10 @@ const ( schedulerKey = "scheduling-policy.noderesource.dev" // Deprecated: Prefix of the key used for scheduler attribute adjustment. oldSchedulerKey = "scheduling-policy.nri.io" + // Prefix of the key used for memory policy adjustment. + memoryPolicyKey = "memory-policy.noderesource.dev" + // Deprecated: Prefix of the key used for memory policy adjustment. + oldMemoryPolicyKey = "memory-policy.nri.io" ) var ( @@ -104,6 +108,13 @@ type scheduler struct { Period uint64 `json:"period"` } +// memoryPolicy adjustment +type memoryPolicy struct { + Mode string `json:"mode"` + Nodes string `json:"nodes"` + Flags []string `json:"flags"` +} + // our injector plugin type plugin struct { stub stub.Stub @@ -135,6 +146,9 @@ func (p *plugin) CreateContainer(_ context.Context, pod *api.PodSandbox, ctr *ap if err := adjustScheduler(pod, ctr, adjust); err != nil { return nil, nil, err } + if err := adjustMemoryPolicy(pod, ctr, adjust); err != nil { + return nil, nil, err + } if err := injectNetDevices(pod, ctr, adjust); err != nil { return nil, nil, err @@ -395,6 +409,53 @@ func parseScheduler(ctr string, annotations map[string]string) (*scheduler, erro return sch, nil } +func adjustMemoryPolicy(pod *api.PodSandbox, ctr *api.Container, a *api.ContainerAdjustment) error { + pol, err := parseMemoryPolicy(ctr.Name, pod.Annotations) + if err != nil { + log.Errorf("%s: invalid memory policy annotation: %v", + containerName(pod, ctr), err) + return err + } + + if pol == nil { + log.Debugf("%s: no memory policy annotated...", containerName(pod, ctr)) + return nil + } + + if verbose { + dump(containerName(pod, ctr), "annotated memory policy", pol) + } + + amp, err := pol.ToNRI() + if err != nil { + log.Errorf("%s: invalid memory policy annotation: %v", + containerName(pod, ctr), err) + return fmt.Errorf("invalid memory policy: %w", err) + } + + a.SetLinuxMemoryPolicy(amp.Mode, amp.Nodes, amp.Flags...) + log.Infof("%s: adjusted memory policy to %s...", containerName(pod, ctr), amp) + + return nil +} + +func parseMemoryPolicy(ctr string, annotations map[string]string) (*memoryPolicy, error) { + var ( + policy = &memoryPolicy{} + ) + + annotation := getAnnotation(annotations, memoryPolicyKey, oldMemoryPolicyKey, ctr) + if annotation == nil { + return nil, nil + } + + if err := yaml.Unmarshal(annotation, policy); err != nil { + return nil, fmt.Errorf("invalid memory policy annotation %q: %w", string(annotation), err) + } + + return policy, nil +} + func getAnnotation(annotations map[string]string, mainKey, oldKey, ctr string) []byte { for _, key := range []string{ mainKey + "/container." + ctr, @@ -519,6 +580,46 @@ func (sc *scheduler) String() string { return s } +// Convert memoryPolicy to the NRI API representation. +func (mp *memoryPolicy) ToNRI() (*api.LinuxMemoryPolicy, error) { + apiPol := &api.LinuxMemoryPolicy{ + Nodes: mp.Nodes, + } + + mode, ok := api.MpolMode_value[mp.Mode] + if !ok { + return nil, fmt.Errorf("invalid memory policy mode %q", mp.Mode) + } + apiPol.Mode = api.MpolMode(mode) + + for _, f := range mp.Flags { + flag, ok := api.MpolFlag_value[f] + if !ok { + return nil, fmt.Errorf("invalid memory policy flag %q", f) + } + apiPol.Flags = append(apiPol.Flags, api.MpolFlag(flag)) + } + + return apiPol, nil +} + +func (mp *memoryPolicy) String() string { + if mp == nil { + return "" + } + + s := fmt.Sprintf(" 0 { + s += fmt.Sprintf(", flags=%v", mp.Flags) + } + s += ">" + + return s +} + // Construct a container name for log messages. func containerName(pod *api.PodSandbox, container *api.Container) string { if pod != nil {