diff --git a/README.md b/README.md index 1721c758..1314dfe5 100644 --- a/README.md +++ b/README.md @@ -206,6 +206,7 @@ The following pieces of container metadata are available to plugins in NRI: - cpuset memory - Block I/O class - RDT class + - Linux seccomp profile and policy - container (init) process ID - container (init process) exit status - timestamp of container creation @@ -252,6 +253,7 @@ container parameters: - cpuset memory - Block I/O class - RDT class + - Linux seccomp policy ### Container Updates @@ -341,11 +343,17 @@ selectively configured to 1. Reject OCI Hook injection: Reject any adjustment which tries to inject OCI Hooks into a container. -2. Verify global mandatory plugins: Verify that all configured mandatory +2. Reject Linux seccomp policy adjustment: Reject any adjustment which tries +to set/override Linux seccomp policy of a container. There are separate controls +for rejecting adjustment of the seccomp policy profile based on the type of policy +profile set for the container. These types include the runtime default seccomp +policy profile, a custom policy profile, and unconfined security profiles. + +3. Verify global mandatory plugins: Verify that all configured mandatory plugins are present and have processed a container. Otherwise reject the creation of the container. -3. Verify annotated mandatory plugins: Verify that an annotated set of +4. Verify annotated mandatory plugins: Verify that an annotated set of container-specific mandatory plugins are present and have processed a container. Otherwise reject the creation of the container. @@ -354,11 +362,11 @@ allows one to deploy mandatory plugins as containers themselves. #### Default Validation Scope -Currently only OCI hook injection can be restricted using the default -validator. However, this probably will change in the future. Especially -when NRI is extended with control over new container parameters. If such -parameters will have security implications, corresponding configurable -restrictions will be introduced to the default validator. +Currently only OCI hook injection and Linux seccomp policy can be restricted +using the default validator. However, this probably will change in the future. +Especially when NRI is extended with control over more container parameters. +If newly added controls will have security implications, expect corresponding +configurable restrictions in the default validator. ## Runtime Adaptation diff --git a/pkg/adaptation/adaptation_suite_test.go b/pkg/adaptation/adaptation_suite_test.go index 4fb32668..d3888ab3 100644 --- a/pkg/adaptation/adaptation_suite_test.go +++ b/pkg/adaptation/adaptation_suite_test.go @@ -38,6 +38,7 @@ import ( "github.com/containerd/nri/pkg/api" "github.com/containerd/nri/pkg/plugin" validator "github.com/containerd/nri/plugins/default-validator/builtin" + rspec "github.com/opencontainers/runtime-spec/specs-go" ) var _ = Describe("Configuration", func() { @@ -558,6 +559,24 @@ var _ = Describe("Plugin container creation adjustments", func() { case "cgroupspath": a.SetLinuxCgroupsPath("/" + plugin) + + case "seccomp": + a.SetLinuxSeccompPolicy( + func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + ) } return a, nil, nil @@ -812,6 +831,26 @@ var _ = Describe("Plugin container creation adjustments", func() { }, }, ), + Entry("adjust seccomp policy", "seccomp", + &api.ContainerAdjustment{ + Linux: &api.LinuxContainerAdjustment{ + SeccompPolicy: func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + }, + }, + ), ) }) @@ -1055,8 +1094,8 @@ var _ = Describe("Plugin container creation adjustments", func() { options: []nri.Option{ nri.WithDefaultValidator( &validator.DefaultValidatorConfig{ - Enable: true, - RejectOCIHooks: true, + Enable: true, + RejectOCIHookAdjustment: true, }, ), }, @@ -1141,6 +1180,626 @@ var _ = Describe("Plugin container creation adjustments", func() { }) }) + When("default validator disallows runtime default seccomp policy adjustment", func() { + BeforeEach(func() { + s.Prepare( + &mockRuntime{ + options: []nri.Option{ + nri.WithDefaultValidator( + &validator.DefaultValidatorConfig{ + Enable: true, + RejectRuntimeDefaultSeccompAdjustment: true, + }, + ), + }, + }, + &mockPlugin{idx: "00", name: "foo"}, + &mockPlugin{idx: "10", name: "validator1"}, + &mockPlugin{idx: "20", name: "validator2"}, + ) + }) + + It("should reject runtime default seccomp policy adjustment", func() { + var ( + create = func(_ *mockPlugin, _ *api.PodSandbox, ctr *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) { + a := &api.ContainerAdjustment{} + if ctr.GetName() == "ctr1" { + a.SetLinuxSeccompPolicy( + func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + ) + } + return a, nil, nil + } + + validate = func(_ *mockPlugin, _ *api.ValidateContainerAdjustmentRequest) error { + return nil + } + + runtime = s.runtime + plugins = s.plugins + ctx = context.Background() + + pod = &api.PodSandbox{ + Id: "pod0", + Name: "pod0", + Uid: "uid0", + Namespace: "default", + } + ctr0 = &api.Container{ + Id: "ctr0", + PodSandboxId: "pod0", + Name: "ctr0", + State: api.ContainerState_CONTAINER_CREATED, + } + ctr1 = &api.Container{ + Id: "ctr1", + PodSandboxId: "pod0", + Name: "ctr1", + State: api.ContainerState_CONTAINER_CREATED, + Linux: &api.LinuxContainer{ + SeccompProfile: &api.SecurityProfile{ + ProfileType: api.SecurityProfile_RUNTIME_DEFAULT, + }, + }, + } + ) + + plugins[0].createContainer = create + plugins[1].validateAdjustment = validate + plugins[2].validateAdjustment = validate + + s.Startup() + podReq := &api.RunPodSandboxRequest{Pod: pod} + Expect(runtime.RunPodSandbox(ctx, podReq)).To(Succeed()) + + ctrReq := &api.CreateContainerRequest{ + Pod: pod, + Container: ctr0, + } + reply, err := runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + + ctrReq = &api.CreateContainerRequest{ + Pod: pod, + Container: ctr1, + } + reply, err = runtime.CreateContainer(ctx, ctrReq) + Expect(err).ToNot(BeNil()) + Expect(reply).To(BeNil()) + }) + }) + + When("default validator allows runtime default seccomp policy adjustment", func() { + BeforeEach(func() { + s.Prepare( + &mockRuntime{ + options: []nri.Option{ + nri.WithDefaultValidator( + &validator.DefaultValidatorConfig{ + Enable: true, + RejectRuntimeDefaultSeccompAdjustment: false, + }, + ), + }, + }, + &mockPlugin{idx: "00", name: "foo"}, + &mockPlugin{idx: "10", name: "validator1"}, + &mockPlugin{idx: "20", name: "validator2"}, + ) + }) + + It("should not reject runtime default seccomp policy adjustment", func() { + var ( + create = func(_ *mockPlugin, _ *api.PodSandbox, ctr *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) { + a := &api.ContainerAdjustment{} + if ctr.GetName() == "ctr1" { + a.SetLinuxSeccompPolicy( + func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + ) + } + return a, nil, nil + } + + validate = func(_ *mockPlugin, _ *api.ValidateContainerAdjustmentRequest) error { + return nil + } + + runtime = s.runtime + plugins = s.plugins + ctx = context.Background() + + pod = &api.PodSandbox{ + Id: "pod0", + Name: "pod0", + Uid: "uid0", + Namespace: "default", + } + ctr0 = &api.Container{ + Id: "ctr0", + PodSandboxId: "pod0", + Name: "ctr0", + State: api.ContainerState_CONTAINER_CREATED, + } + ctr1 = &api.Container{ + Id: "ctr1", + PodSandboxId: "pod0", + Name: "ctr1", + State: api.ContainerState_CONTAINER_CREATED, + Linux: &api.LinuxContainer{ + SeccompProfile: &api.SecurityProfile{ + ProfileType: api.SecurityProfile_RUNTIME_DEFAULT, + }, + }, + } + ) + + plugins[0].createContainer = create + plugins[1].validateAdjustment = validate + plugins[2].validateAdjustment = validate + + s.Startup() + podReq := &api.RunPodSandboxRequest{Pod: pod} + Expect(runtime.RunPodSandbox(ctx, podReq)).To(Succeed()) + + ctrReq := &api.CreateContainerRequest{ + Pod: pod, + Container: ctr0, + } + reply, err := runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + + ctrReq = &api.CreateContainerRequest{ + Pod: pod, + Container: ctr1, + } + reply, err = runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + }) + }) + + When("default validator disallows custom seccomp policy adjustment", func() { + BeforeEach(func() { + s.Prepare( + &mockRuntime{ + options: []nri.Option{ + nri.WithDefaultValidator( + &validator.DefaultValidatorConfig{ + Enable: true, + RejectCustomSeccompAdjustment: true, + }, + ), + }, + }, + &mockPlugin{idx: "00", name: "foo"}, + &mockPlugin{idx: "10", name: "validator1"}, + &mockPlugin{idx: "20", name: "validator2"}, + ) + }) + + It("should reject custom seccomp policy adjustment", func() { + var ( + create = func(_ *mockPlugin, _ *api.PodSandbox, ctr *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) { + a := &api.ContainerAdjustment{} + if ctr.GetName() == "ctr1" { + a.SetLinuxSeccompPolicy( + func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + ) + } + return a, nil, nil + } + + validate = func(_ *mockPlugin, _ *api.ValidateContainerAdjustmentRequest) error { + return nil + } + + runtime = s.runtime + plugins = s.plugins + ctx = context.Background() + + pod = &api.PodSandbox{ + Id: "pod0", + Name: "pod0", + Uid: "uid0", + Namespace: "default", + } + ctr0 = &api.Container{ + Id: "ctr0", + PodSandboxId: "pod0", + Name: "ctr0", + State: api.ContainerState_CONTAINER_CREATED, + } + ctr1 = &api.Container{ + Id: "ctr1", + PodSandboxId: "pod0", + Name: "ctr1", + State: api.ContainerState_CONTAINER_CREATED, + Linux: &api.LinuxContainer{ + SeccompProfile: &api.SecurityProfile{ + ProfileType: api.SecurityProfile_LOCALHOST, + LocalhostRef: "/xyzzy/foobar", + }, + }, + } + ) + + plugins[0].createContainer = create + plugins[1].validateAdjustment = validate + plugins[2].validateAdjustment = validate + + s.Startup() + podReq := &api.RunPodSandboxRequest{Pod: pod} + Expect(runtime.RunPodSandbox(ctx, podReq)).To(Succeed()) + + ctrReq := &api.CreateContainerRequest{ + Pod: pod, + Container: ctr0, + } + reply, err := runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + + ctrReq = &api.CreateContainerRequest{ + Pod: pod, + Container: ctr1, + } + reply, err = runtime.CreateContainer(ctx, ctrReq) + Expect(err).ToNot(BeNil()) + Expect(reply).To(BeNil()) + }) + }) + + When("default validator allows custom seccomp policy adjustment", func() { + BeforeEach(func() { + s.Prepare( + &mockRuntime{ + options: []nri.Option{ + nri.WithDefaultValidator( + &validator.DefaultValidatorConfig{ + Enable: true, + RejectCustomSeccompAdjustment: false, + }, + ), + }, + }, + &mockPlugin{idx: "00", name: "foo"}, + &mockPlugin{idx: "10", name: "validator1"}, + &mockPlugin{idx: "20", name: "validator2"}, + ) + }) + + It("should not reject custom seccomp policy adjustment", func() { + var ( + create = func(_ *mockPlugin, _ *api.PodSandbox, ctr *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) { + a := &api.ContainerAdjustment{} + if ctr.GetName() == "ctr1" { + a.SetLinuxSeccompPolicy( + func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + ) + } + return a, nil, nil + } + + validate = func(_ *mockPlugin, _ *api.ValidateContainerAdjustmentRequest) error { + return nil + } + + runtime = s.runtime + plugins = s.plugins + ctx = context.Background() + + pod = &api.PodSandbox{ + Id: "pod0", + Name: "pod0", + Uid: "uid0", + Namespace: "default", + } + ctr0 = &api.Container{ + Id: "ctr0", + PodSandboxId: "pod0", + Name: "ctr0", + State: api.ContainerState_CONTAINER_CREATED, + } + ctr1 = &api.Container{ + Id: "ctr1", + PodSandboxId: "pod0", + Name: "ctr1", + State: api.ContainerState_CONTAINER_CREATED, + Linux: &api.LinuxContainer{ + SeccompProfile: &api.SecurityProfile{ + ProfileType: api.SecurityProfile_LOCALHOST, + LocalhostRef: "/xyzzy/foobar", + }, + }, + } + ) + + plugins[0].createContainer = create + plugins[1].validateAdjustment = validate + plugins[2].validateAdjustment = validate + + s.Startup() + podReq := &api.RunPodSandboxRequest{Pod: pod} + Expect(runtime.RunPodSandbox(ctx, podReq)).To(Succeed()) + + ctrReq := &api.CreateContainerRequest{ + Pod: pod, + Container: ctr0, + } + reply, err := runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + + ctrReq = &api.CreateContainerRequest{ + Pod: pod, + Container: ctr1, + } + reply, err = runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + }) + }) + + When("default validator disallows unconfined seccomp policy adjustment", func() { + BeforeEach(func() { + s.Prepare( + &mockRuntime{ + options: []nri.Option{ + nri.WithDefaultValidator( + &validator.DefaultValidatorConfig{ + Enable: true, + RejectUnconfinedSeccompAdjustment: true, + }, + ), + }, + }, + &mockPlugin{idx: "00", name: "foo"}, + &mockPlugin{idx: "10", name: "validator1"}, + &mockPlugin{idx: "20", name: "validator2"}, + ) + }) + + It("should reject unconfined seccomp policy adjustment", func() { + var ( + create = func(_ *mockPlugin, _ *api.PodSandbox, ctr *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) { + a := &api.ContainerAdjustment{} + if ctr.GetName() == "ctr1" { + a.SetLinuxSeccompPolicy( + func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + ) + } + return a, nil, nil + } + + validate = func(_ *mockPlugin, _ *api.ValidateContainerAdjustmentRequest) error { + return nil + } + + runtime = s.runtime + plugins = s.plugins + ctx = context.Background() + + pod = &api.PodSandbox{ + Id: "pod0", + Name: "pod0", + Uid: "uid0", + Namespace: "default", + } + ctr0 = &api.Container{ + Id: "ctr0", + PodSandboxId: "pod0", + Name: "ctr0", + State: api.ContainerState_CONTAINER_CREATED, + } + ctr1 = &api.Container{ + Id: "ctr1", + PodSandboxId: "pod0", + Name: "ctr1", + State: api.ContainerState_CONTAINER_CREATED, + Linux: &api.LinuxContainer{ + SeccompProfile: &api.SecurityProfile{ + ProfileType: api.SecurityProfile_UNCONFINED, + }, + }, + } + ) + + plugins[0].createContainer = create + plugins[1].validateAdjustment = validate + plugins[2].validateAdjustment = validate + + s.Startup() + podReq := &api.RunPodSandboxRequest{Pod: pod} + Expect(runtime.RunPodSandbox(ctx, podReq)).To(Succeed()) + + ctrReq := &api.CreateContainerRequest{ + Pod: pod, + Container: ctr0, + } + reply, err := runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + + ctrReq = &api.CreateContainerRequest{ + Pod: pod, + Container: ctr1, + } + reply, err = runtime.CreateContainer(ctx, ctrReq) + Expect(err).ToNot(BeNil()) + Expect(reply).To(BeNil()) + }) + }) + + When("default validator allows unconfined seccomp policy adjustment", func() { + BeforeEach(func() { + s.Prepare( + &mockRuntime{ + options: []nri.Option{ + nri.WithDefaultValidator( + &validator.DefaultValidatorConfig{ + Enable: true, + RejectUnconfinedSeccompAdjustment: false, + }, + ), + }, + }, + &mockPlugin{idx: "00", name: "foo"}, + &mockPlugin{idx: "10", name: "validator1"}, + &mockPlugin{idx: "20", name: "validator2"}, + ) + }) + + It("should not reject unconfined seccomp policy adjustment", func() { + var ( + create = func(_ *mockPlugin, _ *api.PodSandbox, ctr *api.Container) (*api.ContainerAdjustment, []*api.ContainerUpdate, error) { + a := &api.ContainerAdjustment{} + if ctr.GetName() == "ctr1" { + a.SetLinuxSeccompPolicy( + func() *api.LinuxSeccomp { + seccomp := rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + return api.FromOCILinuxSeccomp(&seccomp) + }(), + ) + } + return a, nil, nil + } + + validate = func(_ *mockPlugin, _ *api.ValidateContainerAdjustmentRequest) error { + return nil + } + + runtime = s.runtime + plugins = s.plugins + ctx = context.Background() + + pod = &api.PodSandbox{ + Id: "pod0", + Name: "pod0", + Uid: "uid0", + Namespace: "default", + } + ctr0 = &api.Container{ + Id: "ctr0", + PodSandboxId: "pod0", + Name: "ctr0", + State: api.ContainerState_CONTAINER_CREATED, + } + ctr1 = &api.Container{ + Id: "ctr1", + PodSandboxId: "pod0", + Name: "ctr1", + State: api.ContainerState_CONTAINER_CREATED, + Linux: &api.LinuxContainer{ + SeccompProfile: &api.SecurityProfile{ + ProfileType: api.SecurityProfile_UNCONFINED, + }, + }, + } + ) + + plugins[0].createContainer = create + plugins[1].validateAdjustment = validate + plugins[2].validateAdjustment = validate + + s.Startup() + podReq := &api.RunPodSandboxRequest{Pod: pod} + Expect(runtime.RunPodSandbox(ctx, podReq)).To(Succeed()) + + ctrReq := &api.CreateContainerRequest{ + Pod: pod, + Container: ctr0, + } + reply, err := runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + + ctrReq = &api.CreateContainerRequest{ + Pod: pod, + Container: ctr1, + } + reply, err = runtime.CreateContainer(ctx, ctrReq) + Expect(reply).ToNot(BeNil()) + Expect(err).To(BeNil()) + }) + }) + When("the default validator is enabled with some required plugins", func() { const AnnotationDomain = plugin.AnnotationDomain BeforeEach(func() { diff --git a/pkg/adaptation/api.go b/pkg/adaptation/api.go index 524294da..e780ae22 100644 --- a/pkg/adaptation/api.go +++ b/pkg/adaptation/api.go @@ -90,11 +90,13 @@ type ( LinuxDevice = api.LinuxDevice LinuxDeviceCgroup = api.LinuxDeviceCgroup LinuxIOPriority = api.LinuxIOPriority + LinuxSeccomp = api.LinuxSeccomp CDIDevice = api.CDIDevice HugepageLimit = api.HugepageLimit Hooks = api.Hooks Hook = api.Hook POSIXRlimit = api.POSIXRlimit + SecurityProfile = api.SecurityProfile EventMask = api.EventMask ) @@ -125,6 +127,10 @@ const ( ContainerState_CONTAINER_RUNNING = api.ContainerState_CONTAINER_RUNNING ContainerState_CONTAINER_STOPPED = api.ContainerState_CONTAINER_STOPPED ContainerState_CONTAINER_EXITED = api.ContainerState_CONTAINER_STOPPED + + SecurityProfile_RUNTIME_DEFAULT = api.SecurityProfile_RUNTIME_DEFAULT + SecurityProfile_UNCONFINED = api.SecurityProfile_UNCONFINED + SecurityProfile_LOCALHOST = api.SecurityProfile_LOCALHOST ) // Aliased types for api/optional.go. diff --git a/pkg/adaptation/result.go b/pkg/adaptation/result.go index da68df62..640b2213 100644 --- a/pkg/adaptation/result.go +++ b/pkg/adaptation/result.go @@ -224,6 +224,9 @@ func (r *result) adjust(rpl *ContainerAdjustment, plugin string) error { if err := r.adjustIOPriority(rpl.Linux.IoPriority, plugin); err != nil { return err } + if err := r.adjustSeccompPolicy(rpl.Linux.SeccompPolicy, plugin); err != nil { + return err + } } if err := r.adjustRlimits(rpl.Rlimits, plugin); err != nil { return err @@ -793,6 +796,22 @@ func (r *result) adjustIOPriority(priority *LinuxIOPriority, plugin string) erro return nil } +func (r *result) adjustSeccompPolicy(adjustment *LinuxSeccomp, plugin string) error { + if adjustment == nil { + return nil + } + create, id := r.request.create, r.request.create.Container.Id + + if err := r.owners.ClaimSeccompPolicy(id, plugin); err != nil { + return err + } + + create.Container.Linux.SeccompPolicy = adjustment + r.reply.adjust.Linux.SeccompPolicy = adjustment + + 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 6cba396d..e4e0b56e 100644 --- a/pkg/api/adjustment.go +++ b/pkg/api/adjustment.go @@ -289,6 +289,12 @@ func (a *ContainerAdjustment) SetLinuxIOPriority(ioprio *LinuxIOPriority) { a.Linux.IoPriority = ioprio } +// SetLinuxSeccompPolicy overrides the container seccomp policy with the given arguments. +func (a *ContainerAdjustment) SetLinuxSeccompPolicy(seccomp *LinuxSeccomp) { + a.initLinux() + a.Linux.SeccompPolicy = seccomp +} + // // Initializing a container adjustment and container update. // diff --git a/pkg/api/api.pb.go b/pkg/api/api.pb.go index 64ce931c..edc42e32 100644 --- a/pkg/api/api.pb.go +++ b/pkg/api/api.pb.go @@ -268,6 +268,7 @@ const ( Field_OomScoreAdj Field = 29 Field_Rlimits Field = 30 Field_IoPriority Field = 31 + Field_SeccompPolicy Field = 32 ) // Enum value maps for Field. @@ -305,6 +306,7 @@ var ( 29: "OomScoreAdj", 30: "Rlimits", 31: "IoPriority", + 32: "SeccompPolicy", } Field_value = map[string]int32{ "None": 0, @@ -339,6 +341,7 @@ var ( "OomScoreAdj": 29, "Rlimits": 30, "IoPriority": 31, + "SeccompPolicy": 32, } ) @@ -424,6 +427,55 @@ func (LogRequest_Level) EnumDescriptor() ([]byte, []int) { return file_pkg_api_api_proto_rawDescGZIP(), []int{3, 0} } +type SecurityProfile_ProfileType int32 + +const ( + SecurityProfile_RUNTIME_DEFAULT SecurityProfile_ProfileType = 0 + SecurityProfile_UNCONFINED SecurityProfile_ProfileType = 1 + SecurityProfile_LOCALHOST SecurityProfile_ProfileType = 2 +) + +// Enum value maps for SecurityProfile_ProfileType. +var ( + SecurityProfile_ProfileType_name = map[int32]string{ + 0: "RUNTIME_DEFAULT", + 1: "UNCONFINED", + 2: "LOCALHOST", + } + SecurityProfile_ProfileType_value = map[string]int32{ + "RUNTIME_DEFAULT": 0, + "UNCONFINED": 1, + "LOCALHOST": 2, + } +) + +func (x SecurityProfile_ProfileType) Enum() *SecurityProfile_ProfileType { + p := new(SecurityProfile_ProfileType) + *p = x + return p +} + +func (x SecurityProfile_ProfileType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SecurityProfile_ProfileType) Descriptor() protoreflect.EnumDescriptor { + return file_pkg_api_api_proto_enumTypes[5].Descriptor() +} + +func (SecurityProfile_ProfileType) Type() protoreflect.EnumType { + return &file_pkg_api_api_proto_enumTypes[5] +} + +func (x SecurityProfile_ProfileType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SecurityProfile_ProfileType.Descriptor instead. +func (SecurityProfile_ProfileType) EnumDescriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{36, 0} +} + type RegisterPluginRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2308,12 +2360,14 @@ type LinuxContainer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Namespaces []*LinuxNamespace `protobuf:"bytes,1,rep,name=namespaces,proto3" json:"namespaces,omitempty"` - Devices []*LinuxDevice `protobuf:"bytes,2,rep,name=devices,proto3" json:"devices,omitempty"` - Resources *LinuxResources `protobuf:"bytes,3,opt,name=resources,proto3" json:"resources,omitempty"` - OomScoreAdj *OptionalInt `protobuf:"bytes,4,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` - CgroupsPath string `protobuf:"bytes,5,opt,name=cgroups_path,json=cgroupsPath,proto3" json:"cgroups_path,omitempty"` - IoPriority *LinuxIOPriority `protobuf:"bytes,6,opt,name=io_priority,json=ioPriority,proto3" json:"io_priority,omitempty"` + Namespaces []*LinuxNamespace `protobuf:"bytes,1,rep,name=namespaces,proto3" json:"namespaces,omitempty"` + Devices []*LinuxDevice `protobuf:"bytes,2,rep,name=devices,proto3" json:"devices,omitempty"` + Resources *LinuxResources `protobuf:"bytes,3,opt,name=resources,proto3" json:"resources,omitempty"` + OomScoreAdj *OptionalInt `protobuf:"bytes,4,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` + CgroupsPath string `protobuf:"bytes,5,opt,name=cgroups_path,json=cgroupsPath,proto3" json:"cgroups_path,omitempty"` + IoPriority *LinuxIOPriority `protobuf:"bytes,6,opt,name=io_priority,json=ioPriority,proto3" json:"io_priority,omitempty"` + SeccompProfile *SecurityProfile `protobuf:"bytes,7,opt,name=seccomp_profile,json=seccompProfile,proto3" json:"seccomp_profile,omitempty"` + SeccompPolicy *LinuxSeccomp `protobuf:"bytes,8,opt,name=seccomp_policy,json=seccompPolicy,proto3" json:"seccomp_policy,omitempty"` } func (x *LinuxContainer) Reset() { @@ -2390,6 +2444,20 @@ func (x *LinuxContainer) GetIoPriority() *LinuxIOPriority { return nil } +func (x *LinuxContainer) GetSeccompProfile() *SecurityProfile { + if x != nil { + return x.SeccompProfile + } + return nil +} + +func (x *LinuxContainer) GetSeccompPolicy() *LinuxSeccomp { + if x != nil { + return x.SeccompPolicy + } + return nil +} + // A linux namespace. type LinuxNamespace struct { state protoimpl.MessageState @@ -3030,6 +3098,62 @@ func (x *HugepageLimit) GetLimit() uint64 { return 0 } +// SecurityProfile for container. +type SecurityProfile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProfileType SecurityProfile_ProfileType `protobuf:"varint,1,opt,name=profile_type,json=profileType,proto3,enum=nri.pkg.api.v1alpha1.SecurityProfile_ProfileType" json:"profile_type,omitempty"` + LocalhostRef string `protobuf:"bytes,2,opt,name=localhost_ref,json=localhostRef,proto3" json:"localhost_ref,omitempty"` +} + +func (x *SecurityProfile) Reset() { + *x = SecurityProfile{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_api_api_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SecurityProfile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SecurityProfile) ProtoMessage() {} + +func (x *SecurityProfile) ProtoReflect() protoreflect.Message { + mi := &file_pkg_api_api_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SecurityProfile.ProtoReflect.Descriptor instead. +func (*SecurityProfile) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{36} +} + +func (x *SecurityProfile) GetProfileType() SecurityProfile_ProfileType { + if x != nil { + return x.ProfileType + } + return SecurityProfile_RUNTIME_DEFAULT +} + +func (x *SecurityProfile) GetLocalhostRef() string { + if x != nil { + return x.LocalhostRef + } + return "" +} + // Container rlimits type POSIXRlimit struct { state protoimpl.MessageState @@ -3044,7 +3168,7 @@ type POSIXRlimit struct { func (x *POSIXRlimit) Reset() { *x = POSIXRlimit{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[36] + mi := &file_pkg_api_api_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3057,7 +3181,7 @@ func (x *POSIXRlimit) String() string { func (*POSIXRlimit) ProtoMessage() {} func (x *POSIXRlimit) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[36] + mi := &file_pkg_api_api_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3070,7 +3194,7 @@ func (x *POSIXRlimit) ProtoReflect() protoreflect.Message { // Deprecated: Use POSIXRlimit.ProtoReflect.Descriptor instead. func (*POSIXRlimit) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{36} + return file_pkg_api_api_proto_rawDescGZIP(), []int{37} } func (x *POSIXRlimit) GetType() string { @@ -3106,7 +3230,7 @@ type LinuxPids struct { func (x *LinuxPids) Reset() { *x = LinuxPids{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[37] + mi := &file_pkg_api_api_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3119,7 +3243,7 @@ func (x *LinuxPids) String() string { func (*LinuxPids) ProtoMessage() {} func (x *LinuxPids) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[37] + mi := &file_pkg_api_api_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3132,7 +3256,7 @@ func (x *LinuxPids) ProtoReflect() protoreflect.Message { // Deprecated: Use LinuxPids.ProtoReflect.Descriptor instead. func (*LinuxPids) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{37} + return file_pkg_api_api_proto_rawDescGZIP(), []int{38} } func (x *LinuxPids) GetLimit() int64 { @@ -3156,7 +3280,7 @@ type LinuxIOPriority struct { func (x *LinuxIOPriority) Reset() { *x = LinuxIOPriority{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[38] + mi := &file_pkg_api_api_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3169,7 +3293,7 @@ func (x *LinuxIOPriority) String() string { func (*LinuxIOPriority) ProtoMessage() {} func (x *LinuxIOPriority) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[38] + mi := &file_pkg_api_api_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3182,7 +3306,7 @@ func (x *LinuxIOPriority) ProtoReflect() protoreflect.Message { // Deprecated: Use LinuxIOPriority.ProtoReflect.Descriptor instead. func (*LinuxIOPriority) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{38} + return file_pkg_api_api_proto_rawDescGZIP(), []int{39} } func (x *LinuxIOPriority) GetClass() IOPrioClass { @@ -3218,7 +3342,7 @@ type ContainerAdjustment struct { func (x *ContainerAdjustment) Reset() { *x = ContainerAdjustment{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[39] + mi := &file_pkg_api_api_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3231,7 +3355,7 @@ func (x *ContainerAdjustment) String() string { func (*ContainerAdjustment) ProtoMessage() {} func (x *ContainerAdjustment) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[39] + mi := &file_pkg_api_api_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3244,7 +3368,7 @@ func (x *ContainerAdjustment) ProtoReflect() protoreflect.Message { // Deprecated: Use ContainerAdjustment.ProtoReflect.Descriptor instead. func (*ContainerAdjustment) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{39} + return file_pkg_api_api_proto_rawDescGZIP(), []int{40} } func (x *ContainerAdjustment) GetAnnotations() map[string]string { @@ -3309,17 +3433,18 @@ type LinuxContainerAdjustment struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Devices []*LinuxDevice `protobuf:"bytes,1,rep,name=devices,proto3" json:"devices,omitempty"` - Resources *LinuxResources `protobuf:"bytes,2,opt,name=resources,proto3" json:"resources,omitempty"` - CgroupsPath string `protobuf:"bytes,3,opt,name=cgroups_path,json=cgroupsPath,proto3" json:"cgroups_path,omitempty"` - OomScoreAdj *OptionalInt `protobuf:"bytes,4,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` - IoPriority *LinuxIOPriority `protobuf:"bytes,5,opt,name=io_priority,json=ioPriority,proto3" json:"io_priority,omitempty"` + Devices []*LinuxDevice `protobuf:"bytes,1,rep,name=devices,proto3" json:"devices,omitempty"` + Resources *LinuxResources `protobuf:"bytes,2,opt,name=resources,proto3" json:"resources,omitempty"` + CgroupsPath string `protobuf:"bytes,3,opt,name=cgroups_path,json=cgroupsPath,proto3" json:"cgroups_path,omitempty"` + OomScoreAdj *OptionalInt `protobuf:"bytes,4,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` + IoPriority *LinuxIOPriority `protobuf:"bytes,5,opt,name=io_priority,json=ioPriority,proto3" json:"io_priority,omitempty"` + SeccompPolicy *LinuxSeccomp `protobuf:"bytes,6,opt,name=seccomp_policy,json=seccompPolicy,proto3" json:"seccomp_policy,omitempty"` } func (x *LinuxContainerAdjustment) Reset() { *x = LinuxContainerAdjustment{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[40] + mi := &file_pkg_api_api_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3332,7 +3457,7 @@ func (x *LinuxContainerAdjustment) String() string { func (*LinuxContainerAdjustment) ProtoMessage() {} func (x *LinuxContainerAdjustment) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[40] + mi := &file_pkg_api_api_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3345,7 +3470,7 @@ func (x *LinuxContainerAdjustment) ProtoReflect() protoreflect.Message { // Deprecated: Use LinuxContainerAdjustment.ProtoReflect.Descriptor instead. func (*LinuxContainerAdjustment) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{40} + return file_pkg_api_api_proto_rawDescGZIP(), []int{41} } func (x *LinuxContainerAdjustment) GetDevices() []*LinuxDevice { @@ -3383,34 +3508,44 @@ func (x *LinuxContainerAdjustment) GetIoPriority() *LinuxIOPriority { return nil } -// Requested update to an already created container. -type ContainerUpdate struct { +func (x *LinuxContainerAdjustment) GetSeccompPolicy() *LinuxSeccomp { + if x != nil { + return x.SeccompPolicy + } + return nil +} + +type LinuxSeccomp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` - Linux *LinuxContainerUpdate `protobuf:"bytes,2,opt,name=linux,proto3" json:"linux,omitempty"` - IgnoreFailure bool `protobuf:"varint,3,opt,name=ignore_failure,json=ignoreFailure,proto3" json:"ignore_failure,omitempty"` + DefaultAction string `protobuf:"bytes,1,opt,name=default_action,json=defaultAction,proto3" json:"default_action,omitempty"` + DefaultErrno *OptionalUInt32 `protobuf:"bytes,2,opt,name=default_errno,json=defaultErrno,proto3" json:"default_errno,omitempty"` + Architectures []string `protobuf:"bytes,3,rep,name=architectures,proto3" json:"architectures,omitempty"` + Flags []string `protobuf:"bytes,4,rep,name=flags,proto3" json:"flags,omitempty"` + ListenerPath string `protobuf:"bytes,5,opt,name=listener_path,json=listenerPath,proto3" json:"listener_path,omitempty"` + ListenerMetadata string `protobuf:"bytes,6,opt,name=listener_metadata,json=listenerMetadata,proto3" json:"listener_metadata,omitempty"` + Syscalls []*LinuxSyscall `protobuf:"bytes,7,rep,name=syscalls,proto3" json:"syscalls,omitempty"` } -func (x *ContainerUpdate) Reset() { - *x = ContainerUpdate{} +func (x *LinuxSeccomp) Reset() { + *x = LinuxSeccomp{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[41] + mi := &file_pkg_api_api_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ContainerUpdate) String() string { +func (x *LinuxSeccomp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContainerUpdate) ProtoMessage() {} +func (*LinuxSeccomp) ProtoMessage() {} -func (x *ContainerUpdate) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[41] +func (x *LinuxSeccomp) ProtoReflect() protoreflect.Message { + mi := &file_pkg_api_api_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3421,94 +3556,73 @@ func (x *ContainerUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContainerUpdate.ProtoReflect.Descriptor instead. -func (*ContainerUpdate) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{41} +// Deprecated: Use LinuxSeccomp.ProtoReflect.Descriptor instead. +func (*LinuxSeccomp) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{42} } -func (x *ContainerUpdate) GetContainerId() string { +func (x *LinuxSeccomp) GetDefaultAction() string { if x != nil { - return x.ContainerId + return x.DefaultAction } return "" } -func (x *ContainerUpdate) GetLinux() *LinuxContainerUpdate { +func (x *LinuxSeccomp) GetDefaultErrno() *OptionalUInt32 { if x != nil { - return x.Linux + return x.DefaultErrno } return nil } -func (x *ContainerUpdate) GetIgnoreFailure() bool { +func (x *LinuxSeccomp) GetArchitectures() []string { if x != nil { - return x.IgnoreFailure + return x.Architectures } - return false -} - -// Updates to (linux) resources. -type LinuxContainerUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Resources *LinuxResources `protobuf:"bytes,1,opt,name=resources,proto3" json:"resources,omitempty"` + return nil } -func (x *LinuxContainerUpdate) Reset() { - *x = LinuxContainerUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LinuxSeccomp) GetFlags() []string { + if x != nil { + return x.Flags } + return nil } -func (x *LinuxContainerUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LinuxContainerUpdate) ProtoMessage() {} - -func (x *LinuxContainerUpdate) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LinuxSeccomp) GetListenerPath() string { + if x != nil { + return x.ListenerPath } - return mi.MessageOf(x) + return "" } -// Deprecated: Use LinuxContainerUpdate.ProtoReflect.Descriptor instead. -func (*LinuxContainerUpdate) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{42} +func (x *LinuxSeccomp) GetListenerMetadata() string { + if x != nil { + return x.ListenerMetadata + } + return "" } -func (x *LinuxContainerUpdate) GetResources() *LinuxResources { +func (x *LinuxSeccomp) GetSyscalls() []*LinuxSyscall { if x != nil { - return x.Resources + return x.Syscalls } return nil } -// Request to evict (IOW unsolicitedly stop) a container. -type ContainerEviction struct { +type LinuxSyscall struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Container to evict. - ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` - // Human-readable reason for eviction. - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + ErrnoRet *OptionalUInt32 `protobuf:"bytes,3,opt,name=errno_ret,json=errnoRet,proto3" json:"errno_ret,omitempty"` + Args []*LinuxSeccompArg `protobuf:"bytes,4,rep,name=args,proto3" json:"args,omitempty"` } -func (x *ContainerEviction) Reset() { - *x = ContainerEviction{} +func (x *LinuxSyscall) Reset() { + *x = LinuxSyscall{} if protoimpl.UnsafeEnabled { mi := &file_pkg_api_api_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3516,13 +3630,13 @@ func (x *ContainerEviction) Reset() { } } -func (x *ContainerEviction) String() string { +func (x *LinuxSyscall) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContainerEviction) ProtoMessage() {} +func (*LinuxSyscall) ProtoMessage() {} -func (x *ContainerEviction) ProtoReflect() protoreflect.Message { +func (x *LinuxSyscall) ProtoReflect() protoreflect.Message { mi := &file_pkg_api_api_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3534,37 +3648,52 @@ func (x *ContainerEviction) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContainerEviction.ProtoReflect.Descriptor instead. -func (*ContainerEviction) Descriptor() ([]byte, []int) { +// Deprecated: Use LinuxSyscall.ProtoReflect.Descriptor instead. +func (*LinuxSyscall) Descriptor() ([]byte, []int) { return file_pkg_api_api_proto_rawDescGZIP(), []int{43} } -func (x *ContainerEviction) GetContainerId() string { +func (x *LinuxSyscall) GetNames() []string { if x != nil { - return x.ContainerId + return x.Names } - return "" + return nil } -func (x *ContainerEviction) GetReason() string { +func (x *LinuxSyscall) GetAction() string { if x != nil { - return x.Reason + return x.Action } return "" } -// KeyValue represents an environment variable. -type KeyValue struct { +func (x *LinuxSyscall) GetErrnoRet() *OptionalUInt32 { + if x != nil { + return x.ErrnoRet + } + return nil +} + +func (x *LinuxSyscall) GetArgs() []*LinuxSeccompArg { + if x != nil { + return x.Args + } + return nil +} + +type LinuxSeccompArg struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Index uint32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + Value uint64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + ValueTwo uint64 `protobuf:"varint,3,opt,name=value_two,json=valueTwo,proto3" json:"value_two,omitempty"` + Op string `protobuf:"bytes,4,opt,name=op,proto3" json:"op,omitempty"` } -func (x *KeyValue) Reset() { - *x = KeyValue{} +func (x *LinuxSeccompArg) Reset() { + *x = LinuxSeccompArg{} if protoimpl.UnsafeEnabled { mi := &file_pkg_api_api_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3572,13 +3701,13 @@ func (x *KeyValue) Reset() { } } -func (x *KeyValue) String() string { +func (x *LinuxSeccompArg) String() string { return protoimpl.X.MessageStringOf(x) } -func (*KeyValue) ProtoMessage() {} +func (*LinuxSeccompArg) ProtoMessage() {} -func (x *KeyValue) ProtoReflect() protoreflect.Message { +func (x *LinuxSeccompArg) ProtoReflect() protoreflect.Message { mi := &file_pkg_api_api_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3590,36 +3719,52 @@ func (x *KeyValue) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use KeyValue.ProtoReflect.Descriptor instead. -func (*KeyValue) Descriptor() ([]byte, []int) { +// Deprecated: Use LinuxSeccompArg.ProtoReflect.Descriptor instead. +func (*LinuxSeccompArg) Descriptor() ([]byte, []int) { return file_pkg_api_api_proto_rawDescGZIP(), []int{44} } -func (x *KeyValue) GetKey() string { +func (x *LinuxSeccompArg) GetIndex() uint32 { if x != nil { - return x.Key + return x.Index } - return "" + return 0 } -func (x *KeyValue) GetValue() string { +func (x *LinuxSeccompArg) GetValue() uint64 { if x != nil { return x.Value } + return 0 +} + +func (x *LinuxSeccompArg) GetValueTwo() uint64 { + if x != nil { + return x.ValueTwo + } + return 0 +} + +func (x *LinuxSeccompArg) GetOp() string { + if x != nil { + return x.Op + } return "" } -// An optional string value. -type OptionalString struct { +// Requested update to an already created container. +type ContainerUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + Linux *LinuxContainerUpdate `protobuf:"bytes,2,opt,name=linux,proto3" json:"linux,omitempty"` + IgnoreFailure bool `protobuf:"varint,3,opt,name=ignore_failure,json=ignoreFailure,proto3" json:"ignore_failure,omitempty"` } -func (x *OptionalString) Reset() { - *x = OptionalString{} +func (x *ContainerUpdate) Reset() { + *x = ContainerUpdate{} if protoimpl.UnsafeEnabled { mi := &file_pkg_api_api_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3627,13 +3772,13 @@ func (x *OptionalString) Reset() { } } -func (x *OptionalString) String() string { +func (x *ContainerUpdate) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OptionalString) ProtoMessage() {} +func (*ContainerUpdate) ProtoMessage() {} -func (x *OptionalString) ProtoReflect() protoreflect.Message { +func (x *ContainerUpdate) ProtoReflect() protoreflect.Message { mi := &file_pkg_api_api_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3645,9 +3790,233 @@ func (x *OptionalString) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OptionalString.ProtoReflect.Descriptor instead. -func (*OptionalString) Descriptor() ([]byte, []int) { - return file_pkg_api_api_proto_rawDescGZIP(), []int{45} +// Deprecated: Use ContainerUpdate.ProtoReflect.Descriptor instead. +func (*ContainerUpdate) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{45} +} + +func (x *ContainerUpdate) GetContainerId() string { + if x != nil { + return x.ContainerId + } + return "" +} + +func (x *ContainerUpdate) GetLinux() *LinuxContainerUpdate { + if x != nil { + return x.Linux + } + return nil +} + +func (x *ContainerUpdate) GetIgnoreFailure() bool { + if x != nil { + return x.IgnoreFailure + } + return false +} + +// Updates to (linux) resources. +type LinuxContainerUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resources *LinuxResources `protobuf:"bytes,1,opt,name=resources,proto3" json:"resources,omitempty"` +} + +func (x *LinuxContainerUpdate) Reset() { + *x = LinuxContainerUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_api_api_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LinuxContainerUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinuxContainerUpdate) ProtoMessage() {} + +func (x *LinuxContainerUpdate) ProtoReflect() protoreflect.Message { + mi := &file_pkg_api_api_proto_msgTypes[46] + 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 LinuxContainerUpdate.ProtoReflect.Descriptor instead. +func (*LinuxContainerUpdate) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{46} +} + +func (x *LinuxContainerUpdate) GetResources() *LinuxResources { + if x != nil { + return x.Resources + } + return nil +} + +// Request to evict (IOW unsolicitedly stop) a container. +type ContainerEviction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Container to evict. + ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + // Human-readable reason for eviction. + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` +} + +func (x *ContainerEviction) Reset() { + *x = ContainerEviction{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_api_api_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ContainerEviction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContainerEviction) ProtoMessage() {} + +func (x *ContainerEviction) ProtoReflect() protoreflect.Message { + mi := &file_pkg_api_api_proto_msgTypes[47] + 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 ContainerEviction.ProtoReflect.Descriptor instead. +func (*ContainerEviction) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{47} +} + +func (x *ContainerEviction) GetContainerId() string { + if x != nil { + return x.ContainerId + } + return "" +} + +func (x *ContainerEviction) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +// KeyValue represents an environment variable. +type KeyValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *KeyValue) Reset() { + *x = KeyValue{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_api_api_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValue) ProtoMessage() {} + +func (x *KeyValue) 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 KeyValue.ProtoReflect.Descriptor instead. +func (*KeyValue) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{48} +} + +func (x *KeyValue) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *KeyValue) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// An optional string value. +type OptionalString struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *OptionalString) Reset() { + *x = OptionalString{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_api_api_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OptionalString) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OptionalString) ProtoMessage() {} + +func (x *OptionalString) ProtoReflect() protoreflect.Message { + mi := &file_pkg_api_api_proto_msgTypes[49] + 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 OptionalString.ProtoReflect.Descriptor instead. +func (*OptionalString) Descriptor() ([]byte, []int) { + return file_pkg_api_api_proto_rawDescGZIP(), []int{49} } func (x *OptionalString) GetValue() string { @@ -3669,7 +4038,7 @@ type OptionalInt struct { func (x *OptionalInt) Reset() { *x = OptionalInt{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[46] + mi := &file_pkg_api_api_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3682,7 +4051,7 @@ func (x *OptionalInt) String() string { func (*OptionalInt) ProtoMessage() {} func (x *OptionalInt) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[46] + mi := &file_pkg_api_api_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3695,7 +4064,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{46} + return file_pkg_api_api_proto_rawDescGZIP(), []int{50} } func (x *OptionalInt) GetValue() int64 { @@ -3717,7 +4086,7 @@ type OptionalInt32 struct { func (x *OptionalInt32) Reset() { *x = OptionalInt32{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[47] + mi := &file_pkg_api_api_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3730,7 +4099,7 @@ func (x *OptionalInt32) String() string { func (*OptionalInt32) ProtoMessage() {} func (x *OptionalInt32) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[47] + mi := &file_pkg_api_api_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3743,7 +4112,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{47} + return file_pkg_api_api_proto_rawDescGZIP(), []int{51} } func (x *OptionalInt32) GetValue() int32 { @@ -3765,7 +4134,7 @@ type OptionalUInt32 struct { func (x *OptionalUInt32) Reset() { *x = OptionalUInt32{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[48] + mi := &file_pkg_api_api_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3778,7 +4147,7 @@ func (x *OptionalUInt32) String() string { func (*OptionalUInt32) ProtoMessage() {} func (x *OptionalUInt32) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[48] + mi := &file_pkg_api_api_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3791,7 +4160,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{48} + return file_pkg_api_api_proto_rawDescGZIP(), []int{52} } func (x *OptionalUInt32) GetValue() uint32 { @@ -3813,7 +4182,7 @@ type OptionalInt64 struct { func (x *OptionalInt64) Reset() { *x = OptionalInt64{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[49] + mi := &file_pkg_api_api_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3826,7 +4195,7 @@ func (x *OptionalInt64) String() string { func (*OptionalInt64) ProtoMessage() {} func (x *OptionalInt64) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[49] + mi := &file_pkg_api_api_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3839,7 +4208,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{49} + return file_pkg_api_api_proto_rawDescGZIP(), []int{53} } func (x *OptionalInt64) GetValue() int64 { @@ -3861,7 +4230,7 @@ type OptionalUInt64 struct { func (x *OptionalUInt64) Reset() { *x = OptionalUInt64{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[50] + mi := &file_pkg_api_api_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3874,7 +4243,7 @@ func (x *OptionalUInt64) String() string { func (*OptionalUInt64) ProtoMessage() {} func (x *OptionalUInt64) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[50] + mi := &file_pkg_api_api_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3887,7 +4256,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{50} + return file_pkg_api_api_proto_rawDescGZIP(), []int{54} } func (x *OptionalUInt64) GetValue() uint64 { @@ -3909,7 +4278,7 @@ type OptionalBool struct { func (x *OptionalBool) Reset() { *x = OptionalBool{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[51] + mi := &file_pkg_api_api_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3922,7 +4291,7 @@ func (x *OptionalBool) String() string { func (*OptionalBool) ProtoMessage() {} func (x *OptionalBool) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[51] + mi := &file_pkg_api_api_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3935,7 +4304,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{51} + return file_pkg_api_api_proto_rawDescGZIP(), []int{55} } func (x *OptionalBool) GetValue() bool { @@ -3957,7 +4326,7 @@ type OptionalFileMode struct { func (x *OptionalFileMode) Reset() { *x = OptionalFileMode{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[52] + mi := &file_pkg_api_api_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3970,7 +4339,7 @@ func (x *OptionalFileMode) String() string { func (*OptionalFileMode) ProtoMessage() {} func (x *OptionalFileMode) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[52] + mi := &file_pkg_api_api_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3983,7 +4352,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{52} + return file_pkg_api_api_proto_rawDescGZIP(), []int{56} } func (x *OptionalFileMode) GetValue() uint32 { @@ -4010,7 +4379,7 @@ type CompoundFieldOwners struct { func (x *CompoundFieldOwners) Reset() { *x = CompoundFieldOwners{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[53] + mi := &file_pkg_api_api_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4023,7 +4392,7 @@ func (x *CompoundFieldOwners) String() string { func (*CompoundFieldOwners) ProtoMessage() {} func (x *CompoundFieldOwners) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[53] + mi := &file_pkg_api_api_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4036,7 +4405,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{53} + return file_pkg_api_api_proto_rawDescGZIP(), []int{57} } func (x *CompoundFieldOwners) GetOwners() map[string]string { @@ -4065,7 +4434,7 @@ type FieldOwners struct { func (x *FieldOwners) Reset() { *x = FieldOwners{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[54] + mi := &file_pkg_api_api_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4078,7 +4447,7 @@ func (x *FieldOwners) String() string { func (*FieldOwners) ProtoMessage() {} func (x *FieldOwners) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[54] + mi := &file_pkg_api_api_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4091,7 +4460,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{54} + return file_pkg_api_api_proto_rawDescGZIP(), []int{58} } func (x *FieldOwners) GetSimple() map[int32]string { @@ -4122,7 +4491,7 @@ type OwningPlugins struct { func (x *OwningPlugins) Reset() { *x = OwningPlugins{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_api_api_proto_msgTypes[55] + mi := &file_pkg_api_api_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4135,7 +4504,7 @@ func (x *OwningPlugins) String() string { func (*OwningPlugins) ProtoMessage() {} func (x *OwningPlugins) ProtoReflect() protoreflect.Message { - mi := &file_pkg_api_api_proto_msgTypes[55] + mi := &file_pkg_api_api_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4148,7 +4517,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{55} + return file_pkg_api_api_proto_rawDescGZIP(), []int{59} } func (x *OwningPlugins) GetOwners() map[string]*FieldOwners { @@ -4510,7 +4879,7 @@ var file_pkg_api_api_proto_rawDesc = []byte{ 0x18, 0x04, 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, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, + 0x75, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 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, @@ -4534,453 +4903,522 @@ var file_pkg_api_api_proto_rawDesc = []byte{ 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 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, 0x49, 0x4f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x38, - 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, - 0x75, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 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, 0x46, - 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x36, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x06, 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, 0x03, 0x75, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x67, 0x69, 0x64, - 0x18, 0x07, 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, 0x03, 0x67, 0x69, - 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x39, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 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, - 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x39, 0x0a, 0x05, - 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, - 0x1f, 0x0a, 0x09, 0x43, 0x44, 0x49, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0xda, 0x04, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x01, 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, 0x4c, 0x69, 0x6e, 0x75, 0x78, - 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x30, - 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 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, 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, - 0x12, 0x4c, 0x0a, 0x0f, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, - 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x48, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, - 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x49, - 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6f, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, - 0x04, 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, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x69, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x64, 0x74, - 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 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, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x52, 0x08, 0x72, 0x64, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x4b, 0x0a, 0x07, - 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 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, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 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, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x04, - 0x70, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x4e, + 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x18, 0x07, 0x20, 0x01, 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, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0e, + 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x49, + 0x0a, 0x0e, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x18, 0x08, 0x20, 0x01, 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, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x63, + 0x6f, 0x6d, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x38, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, + 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, + 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 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, 0x50, 0x69, 0x64, 0x73, 0x52, 0x04, 0x70, 0x69, 0x64, - 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 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, 0xaa, 0x04, - 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x39, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x45, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x37, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x3b, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, - 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x06, 0x6b, - 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x42, 0x0a, 0x0a, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, - 0x74, 0x63, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, + 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x03, + 0x75, 0x69, 0x64, 0x18, 0x06, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x09, - 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x54, 0x63, 0x70, 0x12, 0x44, 0x0a, 0x0a, 0x73, 0x77, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x06, 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, 0x36, 0x34, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, - 0x50, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6f, 0x6d, 0x5f, 0x6b, - 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x72, + 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, + 0x03, 0x75, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x07, 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, 0x03, 0x67, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, + 0x11, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, + 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x52, - 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x6f, 0x6d, 0x4b, 0x69, 0x6c, 0x6c, 0x65, - 0x72, 0x12, 0x47, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, - 0x68, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, + 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, + 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x39, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x6d, 0x69, 0x6e, + 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x1f, 0x0a, 0x09, 0x43, 0x44, + 0x49, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xda, 0x04, 0x0a, 0x0e, + 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x39, + 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x01, 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, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x03, 0x63, 0x70, 0x75, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 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, 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x4c, 0x0a, 0x0f, 0x68, + 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x75, 0x67, 0x65, + 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, 0x68, 0x75, 0x67, 0x65, 0x70, + 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x69, 0x6f, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x04, 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, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6f, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x64, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x18, 0x05, 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, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x72, + 0x64, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0c, 0x75, 0x73, - 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x88, 0x03, 0x0a, 0x08, 0x4c, - 0x69, 0x6e, 0x75, 0x78, 0x43, 0x50, 0x55, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, + 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x55, + 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x75, 0x6e, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x03, 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, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x07, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x04, 0x70, 0x69, 0x64, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 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, 0x50, 0x69, 0x64, 0x73, 0x52, 0x04, 0x70, 0x69, 0x64, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, + 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 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, 0xaa, 0x04, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, + 0x75, 0x78, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x36, 0x34, 0x52, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x02, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x45, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0b, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x73, 0x77, + 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x04, 0x73, + 0x77, 0x61, 0x70, 0x12, 0x3b, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, + 0x12, 0x42, 0x0a, 0x0a, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x74, 0x63, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 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, 0x36, 0x34, 0x52, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x4e, - 0x0a, 0x10, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, + 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x09, 0x6b, 0x65, 0x72, 0x6e, 0x65, + 0x6c, 0x54, 0x63, 0x70, 0x12, 0x44, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x65, + 0x73, 0x73, 0x18, 0x06, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0f, 0x72, - 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x4d, - 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x18, 0x05, 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, 0x36, 0x34, 0x52, 0x0e, 0x72, - 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x70, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x70, 0x75, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6d, 0x65, 0x6d, 0x73, 0x22, 0x42, 0x0a, 0x0d, 0x48, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, - 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x4f, 0x53, - 0x49, 0x58, 0x52, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x61, 0x72, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x66, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, - 0x73, 0x6f, 0x66, 0x74, 0x22, 0x21, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x50, 0x69, 0x64, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x66, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x75, 0x78, - 0x49, 0x4f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, - 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x49, 0x4f, 0x50, 0x72, 0x69, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x05, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, - 0xa6, 0x04, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 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, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x6e, - 0x76, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, - 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, - 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x31, 0x0a, 0x05, - 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x72, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0a, + 0x73, 0x77, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x12, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6f, 0x6d, 0x5f, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x72, + 0x18, 0x07, 0x20, 0x01, 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, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x10, 0x64, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x4f, 0x6f, 0x6d, 0x4b, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x0d, + 0x75, 0x73, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x08, 0x20, + 0x01, 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, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x48, 0x69, 0x65, 0x72, + 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x88, 0x03, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, + 0x50, 0x55, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 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, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x12, 0x39, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 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, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x06, 0x70, + 0x65, 0x72, 0x69, 0x6f, 0x64, 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, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, - 0x44, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 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, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, - 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, - 0x18, 0x07, 0x20, 0x03, 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, 0x50, 0x4f, - 0x53, 0x49, 0x58, 0x52, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x43, 0x44, 0x49, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, - 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x44, 0x49, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0a, 0x43, 0x44, 0x49, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcd, 0x02, 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, 0x6b, 0x67, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x6e, 0x75, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 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, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x45, 0x0a, 0x0d, 0x6f, 0x6f, 0x6d, - 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x6a, 0x18, 0x04, 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, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x49, 0x6e, 0x74, 0x52, 0x0b, 0x6f, 0x6f, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x41, 0x64, 0x6a, - 0x12, 0x46, 0x0a, 0x0b, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x05, 0x20, 0x01, 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, 0x49, 0x4f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x69, 0x6f, - 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 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, + 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x52, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x4e, 0x0a, 0x10, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0f, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x05, 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, 0x36, 0x34, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x70, 0x75, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x70, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6d, 0x65, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x73, + 0x22, 0x42, 0x0a, 0x0d, 0x48, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 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, 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, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x22, 0x41, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x44, 0x45, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x43, 0x41, 0x4c, + 0x48, 0x4f, 0x53, 0x54, 0x10, 0x02, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x4f, 0x53, 0x49, 0x58, 0x52, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x72, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x6f, 0x66, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6f, 0x66, + 0x74, 0x22, 0x21, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x50, 0x69, 0x64, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x22, 0x66, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x49, 0x4f, 0x50, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x4f, + 0x50, 0x72, 0x69, 0x6f, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0xa6, 0x04, 0x0a, + 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 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, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x31, 0x0a, 0x05, 0x68, 0x6f, 0x6f, + 0x6b, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, + 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x44, 0x0a, 0x05, + 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 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, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x6c, 0x69, 0x6e, + 0x75, 0x78, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x07, 0x20, + 0x03, 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, 0x50, 0x4f, 0x53, 0x49, 0x58, + 0x52, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, + 0x40, 0x0a, 0x0b, 0x43, 0x44, 0x49, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x72, 0x69, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x44, 0x49, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0a, 0x43, 0x44, 0x49, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x04, 0x61, 0x72, 0x67, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 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, 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, 0x97, 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, 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, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x98, 0x03, 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, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, + 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 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, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x45, 0x0a, 0x0d, 0x6f, 0x6f, 0x6d, 0x5f, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x6a, 0x18, 0x04, 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, 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, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, + 0x52, 0x0b, 0x6f, 0x6f, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x41, 0x64, 0x6a, 0x12, 0x46, 0x0a, + 0x0b, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, + 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, 0x49, + 0x4f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x69, 0x6f, 0x50, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x0e, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 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, 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, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x53, 0x65, 0x63, 0x63, 0x6f, 0x6d, + 0x70, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 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, 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, 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, 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, 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, + 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, 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, 0xaa, 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, 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, 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, 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, 0x2e, 0x6e, 0x72, + 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, 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, + 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, 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, 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 ( @@ -4995,216 +5433,229 @@ 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, 5) -var file_pkg_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 66) +var file_pkg_api_api_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_pkg_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 70) 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 (Field)(0), // 3: nri.pkg.api.v1alpha1.Field (LogRequest_Level)(0), // 4: nri.pkg.api.v1alpha1.LogRequest.Level - (*RegisterPluginRequest)(nil), // 5: nri.pkg.api.v1alpha1.RegisterPluginRequest - (*UpdateContainersRequest)(nil), // 6: nri.pkg.api.v1alpha1.UpdateContainersRequest - (*UpdateContainersResponse)(nil), // 7: nri.pkg.api.v1alpha1.UpdateContainersResponse - (*LogRequest)(nil), // 8: nri.pkg.api.v1alpha1.LogRequest - (*ConfigureRequest)(nil), // 9: nri.pkg.api.v1alpha1.ConfigureRequest - (*ConfigureResponse)(nil), // 10: nri.pkg.api.v1alpha1.ConfigureResponse - (*SynchronizeRequest)(nil), // 11: nri.pkg.api.v1alpha1.SynchronizeRequest - (*SynchronizeResponse)(nil), // 12: nri.pkg.api.v1alpha1.SynchronizeResponse - (*CreateContainerRequest)(nil), // 13: nri.pkg.api.v1alpha1.CreateContainerRequest - (*CreateContainerResponse)(nil), // 14: nri.pkg.api.v1alpha1.CreateContainerResponse - (*UpdateContainerRequest)(nil), // 15: nri.pkg.api.v1alpha1.UpdateContainerRequest - (*UpdateContainerResponse)(nil), // 16: nri.pkg.api.v1alpha1.UpdateContainerResponse - (*StopContainerRequest)(nil), // 17: nri.pkg.api.v1alpha1.StopContainerRequest - (*StopContainerResponse)(nil), // 18: nri.pkg.api.v1alpha1.StopContainerResponse - (*UpdatePodSandboxRequest)(nil), // 19: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest - (*UpdatePodSandboxResponse)(nil), // 20: nri.pkg.api.v1alpha1.UpdatePodSandboxResponse - (*StateChangeEvent)(nil), // 21: nri.pkg.api.v1alpha1.StateChangeEvent - (*ValidateContainerAdjustmentRequest)(nil), // 22: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest - (*PluginInstance)(nil), // 23: nri.pkg.api.v1alpha1.PluginInstance - (*ValidateContainerAdjustmentResponse)(nil), // 24: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse - (*Empty)(nil), // 25: nri.pkg.api.v1alpha1.Empty - (*PodSandbox)(nil), // 26: nri.pkg.api.v1alpha1.PodSandbox - (*LinuxPodSandbox)(nil), // 27: nri.pkg.api.v1alpha1.LinuxPodSandbox - (*Container)(nil), // 28: nri.pkg.api.v1alpha1.Container - (*Mount)(nil), // 29: nri.pkg.api.v1alpha1.Mount - (*Hooks)(nil), // 30: nri.pkg.api.v1alpha1.Hooks - (*Hook)(nil), // 31: nri.pkg.api.v1alpha1.Hook - (*LinuxContainer)(nil), // 32: nri.pkg.api.v1alpha1.LinuxContainer - (*LinuxNamespace)(nil), // 33: nri.pkg.api.v1alpha1.LinuxNamespace - (*LinuxDevice)(nil), // 34: nri.pkg.api.v1alpha1.LinuxDevice - (*LinuxDeviceCgroup)(nil), // 35: nri.pkg.api.v1alpha1.LinuxDeviceCgroup - (*CDIDevice)(nil), // 36: nri.pkg.api.v1alpha1.CDIDevice - (*LinuxResources)(nil), // 37: nri.pkg.api.v1alpha1.LinuxResources - (*LinuxMemory)(nil), // 38: nri.pkg.api.v1alpha1.LinuxMemory - (*LinuxCPU)(nil), // 39: nri.pkg.api.v1alpha1.LinuxCPU - (*HugepageLimit)(nil), // 40: nri.pkg.api.v1alpha1.HugepageLimit - (*POSIXRlimit)(nil), // 41: nri.pkg.api.v1alpha1.POSIXRlimit - (*LinuxPids)(nil), // 42: nri.pkg.api.v1alpha1.LinuxPids - (*LinuxIOPriority)(nil), // 43: nri.pkg.api.v1alpha1.LinuxIOPriority - (*ContainerAdjustment)(nil), // 44: nri.pkg.api.v1alpha1.ContainerAdjustment - (*LinuxContainerAdjustment)(nil), // 45: nri.pkg.api.v1alpha1.LinuxContainerAdjustment - (*ContainerUpdate)(nil), // 46: nri.pkg.api.v1alpha1.ContainerUpdate - (*LinuxContainerUpdate)(nil), // 47: nri.pkg.api.v1alpha1.LinuxContainerUpdate - (*ContainerEviction)(nil), // 48: nri.pkg.api.v1alpha1.ContainerEviction - (*KeyValue)(nil), // 49: nri.pkg.api.v1alpha1.KeyValue - (*OptionalString)(nil), // 50: nri.pkg.api.v1alpha1.OptionalString - (*OptionalInt)(nil), // 51: nri.pkg.api.v1alpha1.OptionalInt - (*OptionalInt32)(nil), // 52: nri.pkg.api.v1alpha1.OptionalInt32 - (*OptionalUInt32)(nil), // 53: nri.pkg.api.v1alpha1.OptionalUInt32 - (*OptionalInt64)(nil), // 54: nri.pkg.api.v1alpha1.OptionalInt64 - (*OptionalUInt64)(nil), // 55: nri.pkg.api.v1alpha1.OptionalUInt64 - (*OptionalBool)(nil), // 56: nri.pkg.api.v1alpha1.OptionalBool - (*OptionalFileMode)(nil), // 57: nri.pkg.api.v1alpha1.OptionalFileMode - (*CompoundFieldOwners)(nil), // 58: nri.pkg.api.v1alpha1.CompoundFieldOwners - (*FieldOwners)(nil), // 59: nri.pkg.api.v1alpha1.FieldOwners - (*OwningPlugins)(nil), // 60: nri.pkg.api.v1alpha1.OwningPlugins - nil, // 61: nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry - nil, // 62: nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry - nil, // 63: nri.pkg.api.v1alpha1.Container.LabelsEntry - nil, // 64: nri.pkg.api.v1alpha1.Container.AnnotationsEntry - nil, // 65: nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry - nil, // 66: nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry - nil, // 67: nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry - nil, // 68: nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry - nil, // 69: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry - nil, // 70: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry + (SecurityProfile_ProfileType)(0), // 5: nri.pkg.api.v1alpha1.SecurityProfile.ProfileType + (*RegisterPluginRequest)(nil), // 6: nri.pkg.api.v1alpha1.RegisterPluginRequest + (*UpdateContainersRequest)(nil), // 7: nri.pkg.api.v1alpha1.UpdateContainersRequest + (*UpdateContainersResponse)(nil), // 8: nri.pkg.api.v1alpha1.UpdateContainersResponse + (*LogRequest)(nil), // 9: nri.pkg.api.v1alpha1.LogRequest + (*ConfigureRequest)(nil), // 10: nri.pkg.api.v1alpha1.ConfigureRequest + (*ConfigureResponse)(nil), // 11: nri.pkg.api.v1alpha1.ConfigureResponse + (*SynchronizeRequest)(nil), // 12: nri.pkg.api.v1alpha1.SynchronizeRequest + (*SynchronizeResponse)(nil), // 13: nri.pkg.api.v1alpha1.SynchronizeResponse + (*CreateContainerRequest)(nil), // 14: nri.pkg.api.v1alpha1.CreateContainerRequest + (*CreateContainerResponse)(nil), // 15: nri.pkg.api.v1alpha1.CreateContainerResponse + (*UpdateContainerRequest)(nil), // 16: nri.pkg.api.v1alpha1.UpdateContainerRequest + (*UpdateContainerResponse)(nil), // 17: nri.pkg.api.v1alpha1.UpdateContainerResponse + (*StopContainerRequest)(nil), // 18: nri.pkg.api.v1alpha1.StopContainerRequest + (*StopContainerResponse)(nil), // 19: nri.pkg.api.v1alpha1.StopContainerResponse + (*UpdatePodSandboxRequest)(nil), // 20: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest + (*UpdatePodSandboxResponse)(nil), // 21: nri.pkg.api.v1alpha1.UpdatePodSandboxResponse + (*StateChangeEvent)(nil), // 22: nri.pkg.api.v1alpha1.StateChangeEvent + (*ValidateContainerAdjustmentRequest)(nil), // 23: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest + (*PluginInstance)(nil), // 24: nri.pkg.api.v1alpha1.PluginInstance + (*ValidateContainerAdjustmentResponse)(nil), // 25: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse + (*Empty)(nil), // 26: nri.pkg.api.v1alpha1.Empty + (*PodSandbox)(nil), // 27: nri.pkg.api.v1alpha1.PodSandbox + (*LinuxPodSandbox)(nil), // 28: nri.pkg.api.v1alpha1.LinuxPodSandbox + (*Container)(nil), // 29: nri.pkg.api.v1alpha1.Container + (*Mount)(nil), // 30: nri.pkg.api.v1alpha1.Mount + (*Hooks)(nil), // 31: nri.pkg.api.v1alpha1.Hooks + (*Hook)(nil), // 32: nri.pkg.api.v1alpha1.Hook + (*LinuxContainer)(nil), // 33: nri.pkg.api.v1alpha1.LinuxContainer + (*LinuxNamespace)(nil), // 34: nri.pkg.api.v1alpha1.LinuxNamespace + (*LinuxDevice)(nil), // 35: nri.pkg.api.v1alpha1.LinuxDevice + (*LinuxDeviceCgroup)(nil), // 36: nri.pkg.api.v1alpha1.LinuxDeviceCgroup + (*CDIDevice)(nil), // 37: nri.pkg.api.v1alpha1.CDIDevice + (*LinuxResources)(nil), // 38: nri.pkg.api.v1alpha1.LinuxResources + (*LinuxMemory)(nil), // 39: nri.pkg.api.v1alpha1.LinuxMemory + (*LinuxCPU)(nil), // 40: nri.pkg.api.v1alpha1.LinuxCPU + (*HugepageLimit)(nil), // 41: nri.pkg.api.v1alpha1.HugepageLimit + (*SecurityProfile)(nil), // 42: nri.pkg.api.v1alpha1.SecurityProfile + (*POSIXRlimit)(nil), // 43: nri.pkg.api.v1alpha1.POSIXRlimit + (*LinuxPids)(nil), // 44: nri.pkg.api.v1alpha1.LinuxPids + (*LinuxIOPriority)(nil), // 45: nri.pkg.api.v1alpha1.LinuxIOPriority + (*ContainerAdjustment)(nil), // 46: nri.pkg.api.v1alpha1.ContainerAdjustment + (*LinuxContainerAdjustment)(nil), // 47: nri.pkg.api.v1alpha1.LinuxContainerAdjustment + (*LinuxSeccomp)(nil), // 48: nri.pkg.api.v1alpha1.LinuxSeccomp + (*LinuxSyscall)(nil), // 49: nri.pkg.api.v1alpha1.LinuxSyscall + (*LinuxSeccompArg)(nil), // 50: nri.pkg.api.v1alpha1.LinuxSeccompArg + (*ContainerUpdate)(nil), // 51: nri.pkg.api.v1alpha1.ContainerUpdate + (*LinuxContainerUpdate)(nil), // 52: nri.pkg.api.v1alpha1.LinuxContainerUpdate + (*ContainerEviction)(nil), // 53: nri.pkg.api.v1alpha1.ContainerEviction + (*KeyValue)(nil), // 54: nri.pkg.api.v1alpha1.KeyValue + (*OptionalString)(nil), // 55: nri.pkg.api.v1alpha1.OptionalString + (*OptionalInt)(nil), // 56: nri.pkg.api.v1alpha1.OptionalInt + (*OptionalInt32)(nil), // 57: nri.pkg.api.v1alpha1.OptionalInt32 + (*OptionalUInt32)(nil), // 58: nri.pkg.api.v1alpha1.OptionalUInt32 + (*OptionalInt64)(nil), // 59: nri.pkg.api.v1alpha1.OptionalInt64 + (*OptionalUInt64)(nil), // 60: nri.pkg.api.v1alpha1.OptionalUInt64 + (*OptionalBool)(nil), // 61: nri.pkg.api.v1alpha1.OptionalBool + (*OptionalFileMode)(nil), // 62: nri.pkg.api.v1alpha1.OptionalFileMode + (*CompoundFieldOwners)(nil), // 63: nri.pkg.api.v1alpha1.CompoundFieldOwners + (*FieldOwners)(nil), // 64: nri.pkg.api.v1alpha1.FieldOwners + (*OwningPlugins)(nil), // 65: nri.pkg.api.v1alpha1.OwningPlugins + nil, // 66: nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry + nil, // 67: nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry + nil, // 68: nri.pkg.api.v1alpha1.Container.LabelsEntry + nil, // 69: nri.pkg.api.v1alpha1.Container.AnnotationsEntry + nil, // 70: nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry + nil, // 71: nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry + nil, // 72: nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry + nil, // 73: nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry + nil, // 74: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry + nil, // 75: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry } var file_pkg_api_api_proto_depIdxs = []int32{ - 46, // 0: nri.pkg.api.v1alpha1.UpdateContainersRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 48, // 1: nri.pkg.api.v1alpha1.UpdateContainersRequest.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction - 46, // 2: nri.pkg.api.v1alpha1.UpdateContainersResponse.failed:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 51, // 0: nri.pkg.api.v1alpha1.UpdateContainersRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 53, // 1: nri.pkg.api.v1alpha1.UpdateContainersRequest.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction + 51, // 2: nri.pkg.api.v1alpha1.UpdateContainersResponse.failed:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate 4, // 3: nri.pkg.api.v1alpha1.LogRequest.level:type_name -> nri.pkg.api.v1alpha1.LogRequest.Level - 26, // 4: nri.pkg.api.v1alpha1.SynchronizeRequest.pods:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 28, // 5: nri.pkg.api.v1alpha1.SynchronizeRequest.containers:type_name -> nri.pkg.api.v1alpha1.Container - 46, // 6: nri.pkg.api.v1alpha1.SynchronizeResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 26, // 7: nri.pkg.api.v1alpha1.CreateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 28, // 8: nri.pkg.api.v1alpha1.CreateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 44, // 9: nri.pkg.api.v1alpha1.CreateContainerResponse.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment - 46, // 10: nri.pkg.api.v1alpha1.CreateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 48, // 11: nri.pkg.api.v1alpha1.CreateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction - 26, // 12: nri.pkg.api.v1alpha1.UpdateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 28, // 13: nri.pkg.api.v1alpha1.UpdateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 37, // 14: nri.pkg.api.v1alpha1.UpdateContainerRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 46, // 15: nri.pkg.api.v1alpha1.UpdateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 48, // 16: nri.pkg.api.v1alpha1.UpdateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction - 26, // 17: nri.pkg.api.v1alpha1.StopContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 28, // 18: nri.pkg.api.v1alpha1.StopContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 46, // 19: nri.pkg.api.v1alpha1.StopContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 26, // 20: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 37, // 21: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.overhead_linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 37, // 22: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 27, // 4: nri.pkg.api.v1alpha1.SynchronizeRequest.pods:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 29, // 5: nri.pkg.api.v1alpha1.SynchronizeRequest.containers:type_name -> nri.pkg.api.v1alpha1.Container + 51, // 6: nri.pkg.api.v1alpha1.SynchronizeResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 27, // 7: nri.pkg.api.v1alpha1.CreateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 29, // 8: nri.pkg.api.v1alpha1.CreateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 46, // 9: nri.pkg.api.v1alpha1.CreateContainerResponse.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment + 51, // 10: nri.pkg.api.v1alpha1.CreateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 53, // 11: nri.pkg.api.v1alpha1.CreateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction + 27, // 12: nri.pkg.api.v1alpha1.UpdateContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 29, // 13: nri.pkg.api.v1alpha1.UpdateContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 38, // 14: nri.pkg.api.v1alpha1.UpdateContainerRequest.linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 51, // 15: nri.pkg.api.v1alpha1.UpdateContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 53, // 16: nri.pkg.api.v1alpha1.UpdateContainerResponse.evict:type_name -> nri.pkg.api.v1alpha1.ContainerEviction + 27, // 17: nri.pkg.api.v1alpha1.StopContainerRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 29, // 18: nri.pkg.api.v1alpha1.StopContainerRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 51, // 19: nri.pkg.api.v1alpha1.StopContainerResponse.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 27, // 20: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 38, // 21: nri.pkg.api.v1alpha1.UpdatePodSandboxRequest.overhead_linux_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 38, // 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 - 26, // 24: nri.pkg.api.v1alpha1.StateChangeEvent.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 28, // 25: nri.pkg.api.v1alpha1.StateChangeEvent.container:type_name -> nri.pkg.api.v1alpha1.Container - 26, // 26: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox - 28, // 27: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.container:type_name -> nri.pkg.api.v1alpha1.Container - 44, // 28: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment - 46, // 29: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate - 60, // 30: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins - 23, // 31: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.plugins:type_name -> nri.pkg.api.v1alpha1.PluginInstance - 61, // 32: nri.pkg.api.v1alpha1.PodSandbox.labels:type_name -> nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry - 62, // 33: nri.pkg.api.v1alpha1.PodSandbox.annotations:type_name -> nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry - 27, // 34: nri.pkg.api.v1alpha1.PodSandbox.linux:type_name -> nri.pkg.api.v1alpha1.LinuxPodSandbox - 37, // 35: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_overhead:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 37, // 36: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 33, // 37: nri.pkg.api.v1alpha1.LinuxPodSandbox.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace - 37, // 38: nri.pkg.api.v1alpha1.LinuxPodSandbox.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 27, // 24: nri.pkg.api.v1alpha1.StateChangeEvent.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 29, // 25: nri.pkg.api.v1alpha1.StateChangeEvent.container:type_name -> nri.pkg.api.v1alpha1.Container + 27, // 26: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.pod:type_name -> nri.pkg.api.v1alpha1.PodSandbox + 29, // 27: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.container:type_name -> nri.pkg.api.v1alpha1.Container + 46, // 28: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.adjust:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment + 51, // 29: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.update:type_name -> nri.pkg.api.v1alpha1.ContainerUpdate + 65, // 30: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins + 24, // 31: nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest.plugins:type_name -> nri.pkg.api.v1alpha1.PluginInstance + 66, // 32: nri.pkg.api.v1alpha1.PodSandbox.labels:type_name -> nri.pkg.api.v1alpha1.PodSandbox.LabelsEntry + 67, // 33: nri.pkg.api.v1alpha1.PodSandbox.annotations:type_name -> nri.pkg.api.v1alpha1.PodSandbox.AnnotationsEntry + 28, // 34: nri.pkg.api.v1alpha1.PodSandbox.linux:type_name -> nri.pkg.api.v1alpha1.LinuxPodSandbox + 38, // 35: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_overhead:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 38, // 36: nri.pkg.api.v1alpha1.LinuxPodSandbox.pod_resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 34, // 37: nri.pkg.api.v1alpha1.LinuxPodSandbox.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace + 38, // 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 - 63, // 40: nri.pkg.api.v1alpha1.Container.labels:type_name -> nri.pkg.api.v1alpha1.Container.LabelsEntry - 64, // 41: nri.pkg.api.v1alpha1.Container.annotations:type_name -> nri.pkg.api.v1alpha1.Container.AnnotationsEntry - 29, // 42: nri.pkg.api.v1alpha1.Container.mounts:type_name -> nri.pkg.api.v1alpha1.Mount - 30, // 43: nri.pkg.api.v1alpha1.Container.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks - 32, // 44: nri.pkg.api.v1alpha1.Container.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainer - 41, // 45: nri.pkg.api.v1alpha1.Container.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit - 36, // 46: nri.pkg.api.v1alpha1.Container.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice - 31, // 47: nri.pkg.api.v1alpha1.Hooks.prestart:type_name -> nri.pkg.api.v1alpha1.Hook - 31, // 48: nri.pkg.api.v1alpha1.Hooks.create_runtime:type_name -> nri.pkg.api.v1alpha1.Hook - 31, // 49: nri.pkg.api.v1alpha1.Hooks.create_container:type_name -> nri.pkg.api.v1alpha1.Hook - 31, // 50: nri.pkg.api.v1alpha1.Hooks.start_container:type_name -> nri.pkg.api.v1alpha1.Hook - 31, // 51: nri.pkg.api.v1alpha1.Hooks.poststart:type_name -> nri.pkg.api.v1alpha1.Hook - 31, // 52: nri.pkg.api.v1alpha1.Hooks.poststop:type_name -> nri.pkg.api.v1alpha1.Hook - 51, // 53: nri.pkg.api.v1alpha1.Hook.timeout:type_name -> nri.pkg.api.v1alpha1.OptionalInt - 33, // 54: nri.pkg.api.v1alpha1.LinuxContainer.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace - 34, // 55: nri.pkg.api.v1alpha1.LinuxContainer.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice - 37, // 56: nri.pkg.api.v1alpha1.LinuxContainer.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 51, // 57: nri.pkg.api.v1alpha1.LinuxContainer.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt - 43, // 58: nri.pkg.api.v1alpha1.LinuxContainer.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority - 57, // 59: nri.pkg.api.v1alpha1.LinuxDevice.file_mode:type_name -> nri.pkg.api.v1alpha1.OptionalFileMode - 53, // 60: nri.pkg.api.v1alpha1.LinuxDevice.uid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 - 53, // 61: nri.pkg.api.v1alpha1.LinuxDevice.gid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 - 54, // 62: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.major:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 54, // 63: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.minor:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 38, // 64: nri.pkg.api.v1alpha1.LinuxResources.memory:type_name -> nri.pkg.api.v1alpha1.LinuxMemory - 39, // 65: nri.pkg.api.v1alpha1.LinuxResources.cpu:type_name -> nri.pkg.api.v1alpha1.LinuxCPU - 40, // 66: nri.pkg.api.v1alpha1.LinuxResources.hugepage_limits:type_name -> nri.pkg.api.v1alpha1.HugepageLimit - 50, // 67: nri.pkg.api.v1alpha1.LinuxResources.blockio_class:type_name -> nri.pkg.api.v1alpha1.OptionalString - 50, // 68: nri.pkg.api.v1alpha1.LinuxResources.rdt_class:type_name -> nri.pkg.api.v1alpha1.OptionalString - 65, // 69: nri.pkg.api.v1alpha1.LinuxResources.unified:type_name -> nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry - 35, // 70: nri.pkg.api.v1alpha1.LinuxResources.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDeviceCgroup - 42, // 71: nri.pkg.api.v1alpha1.LinuxResources.pids:type_name -> nri.pkg.api.v1alpha1.LinuxPids - 54, // 72: nri.pkg.api.v1alpha1.LinuxMemory.limit:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 54, // 73: nri.pkg.api.v1alpha1.LinuxMemory.reservation:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 54, // 74: nri.pkg.api.v1alpha1.LinuxMemory.swap:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 54, // 75: nri.pkg.api.v1alpha1.LinuxMemory.kernel:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 54, // 76: nri.pkg.api.v1alpha1.LinuxMemory.kernel_tcp:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 55, // 77: nri.pkg.api.v1alpha1.LinuxMemory.swappiness:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 56, // 78: nri.pkg.api.v1alpha1.LinuxMemory.disable_oom_killer:type_name -> nri.pkg.api.v1alpha1.OptionalBool - 56, // 79: nri.pkg.api.v1alpha1.LinuxMemory.use_hierarchy:type_name -> nri.pkg.api.v1alpha1.OptionalBool - 55, // 80: nri.pkg.api.v1alpha1.LinuxCPU.shares:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 54, // 81: nri.pkg.api.v1alpha1.LinuxCPU.quota:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 55, // 82: nri.pkg.api.v1alpha1.LinuxCPU.period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 54, // 83: nri.pkg.api.v1alpha1.LinuxCPU.realtime_runtime:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 - 55, // 84: nri.pkg.api.v1alpha1.LinuxCPU.realtime_period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 - 2, // 85: nri.pkg.api.v1alpha1.LinuxIOPriority.class:type_name -> nri.pkg.api.v1alpha1.IOPrioClass - 66, // 86: nri.pkg.api.v1alpha1.ContainerAdjustment.annotations:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry - 29, // 87: nri.pkg.api.v1alpha1.ContainerAdjustment.mounts:type_name -> nri.pkg.api.v1alpha1.Mount - 49, // 88: nri.pkg.api.v1alpha1.ContainerAdjustment.env:type_name -> nri.pkg.api.v1alpha1.KeyValue - 30, // 89: nri.pkg.api.v1alpha1.ContainerAdjustment.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks - 45, // 90: nri.pkg.api.v1alpha1.ContainerAdjustment.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment - 41, // 91: nri.pkg.api.v1alpha1.ContainerAdjustment.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit - 36, // 92: nri.pkg.api.v1alpha1.ContainerAdjustment.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice - 34, // 93: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice - 37, // 94: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 51, // 95: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt - 43, // 96: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority - 47, // 97: nri.pkg.api.v1alpha1.ContainerUpdate.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerUpdate - 37, // 98: nri.pkg.api.v1alpha1.LinuxContainerUpdate.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources - 67, // 99: nri.pkg.api.v1alpha1.CompoundFieldOwners.owners:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry - 68, // 100: nri.pkg.api.v1alpha1.FieldOwners.simple:type_name -> nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry - 69, // 101: nri.pkg.api.v1alpha1.FieldOwners.compound:type_name -> nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry - 70, // 102: nri.pkg.api.v1alpha1.OwningPlugins.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry - 58, // 103: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry.value:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners - 59, // 104: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry.value:type_name -> nri.pkg.api.v1alpha1.FieldOwners - 5, // 105: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:input_type -> nri.pkg.api.v1alpha1.RegisterPluginRequest - 6, // 106: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:input_type -> nri.pkg.api.v1alpha1.UpdateContainersRequest - 9, // 107: nri.pkg.api.v1alpha1.Plugin.Configure:input_type -> nri.pkg.api.v1alpha1.ConfigureRequest - 11, // 108: nri.pkg.api.v1alpha1.Plugin.Synchronize:input_type -> nri.pkg.api.v1alpha1.SynchronizeRequest - 25, // 109: nri.pkg.api.v1alpha1.Plugin.Shutdown:input_type -> nri.pkg.api.v1alpha1.Empty - 13, // 110: nri.pkg.api.v1alpha1.Plugin.CreateContainer:input_type -> nri.pkg.api.v1alpha1.CreateContainerRequest - 15, // 111: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:input_type -> nri.pkg.api.v1alpha1.UpdateContainerRequest - 17, // 112: nri.pkg.api.v1alpha1.Plugin.StopContainer:input_type -> nri.pkg.api.v1alpha1.StopContainerRequest - 19, // 113: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:input_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxRequest - 21, // 114: nri.pkg.api.v1alpha1.Plugin.StateChange:input_type -> nri.pkg.api.v1alpha1.StateChangeEvent - 22, // 115: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:input_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest - 8, // 116: nri.pkg.api.v1alpha1.HostFunctions.Log:input_type -> nri.pkg.api.v1alpha1.LogRequest - 25, // 117: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:output_type -> nri.pkg.api.v1alpha1.Empty - 7, // 118: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:output_type -> nri.pkg.api.v1alpha1.UpdateContainersResponse - 10, // 119: nri.pkg.api.v1alpha1.Plugin.Configure:output_type -> nri.pkg.api.v1alpha1.ConfigureResponse - 12, // 120: nri.pkg.api.v1alpha1.Plugin.Synchronize:output_type -> nri.pkg.api.v1alpha1.SynchronizeResponse - 25, // 121: nri.pkg.api.v1alpha1.Plugin.Shutdown:output_type -> nri.pkg.api.v1alpha1.Empty - 14, // 122: nri.pkg.api.v1alpha1.Plugin.CreateContainer:output_type -> nri.pkg.api.v1alpha1.CreateContainerResponse - 16, // 123: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:output_type -> nri.pkg.api.v1alpha1.UpdateContainerResponse - 18, // 124: nri.pkg.api.v1alpha1.Plugin.StopContainer:output_type -> nri.pkg.api.v1alpha1.StopContainerResponse - 20, // 125: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:output_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxResponse - 25, // 126: nri.pkg.api.v1alpha1.Plugin.StateChange:output_type -> nri.pkg.api.v1alpha1.Empty - 24, // 127: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:output_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse - 25, // 128: nri.pkg.api.v1alpha1.HostFunctions.Log:output_type -> nri.pkg.api.v1alpha1.Empty - 117, // [117:129] is the sub-list for method output_type - 105, // [105:117] is the sub-list for method input_type - 105, // [105:105] is the sub-list for extension type_name - 105, // [105:105] is the sub-list for extension extendee - 0, // [0:105] is the sub-list for field type_name + 68, // 40: nri.pkg.api.v1alpha1.Container.labels:type_name -> nri.pkg.api.v1alpha1.Container.LabelsEntry + 69, // 41: nri.pkg.api.v1alpha1.Container.annotations:type_name -> nri.pkg.api.v1alpha1.Container.AnnotationsEntry + 30, // 42: nri.pkg.api.v1alpha1.Container.mounts:type_name -> nri.pkg.api.v1alpha1.Mount + 31, // 43: nri.pkg.api.v1alpha1.Container.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks + 33, // 44: nri.pkg.api.v1alpha1.Container.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainer + 43, // 45: nri.pkg.api.v1alpha1.Container.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit + 37, // 46: nri.pkg.api.v1alpha1.Container.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice + 32, // 47: nri.pkg.api.v1alpha1.Hooks.prestart:type_name -> nri.pkg.api.v1alpha1.Hook + 32, // 48: nri.pkg.api.v1alpha1.Hooks.create_runtime:type_name -> nri.pkg.api.v1alpha1.Hook + 32, // 49: nri.pkg.api.v1alpha1.Hooks.create_container:type_name -> nri.pkg.api.v1alpha1.Hook + 32, // 50: nri.pkg.api.v1alpha1.Hooks.start_container:type_name -> nri.pkg.api.v1alpha1.Hook + 32, // 51: nri.pkg.api.v1alpha1.Hooks.poststart:type_name -> nri.pkg.api.v1alpha1.Hook + 32, // 52: nri.pkg.api.v1alpha1.Hooks.poststop:type_name -> nri.pkg.api.v1alpha1.Hook + 56, // 53: nri.pkg.api.v1alpha1.Hook.timeout:type_name -> nri.pkg.api.v1alpha1.OptionalInt + 34, // 54: nri.pkg.api.v1alpha1.LinuxContainer.namespaces:type_name -> nri.pkg.api.v1alpha1.LinuxNamespace + 35, // 55: nri.pkg.api.v1alpha1.LinuxContainer.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice + 38, // 56: nri.pkg.api.v1alpha1.LinuxContainer.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 56, // 57: nri.pkg.api.v1alpha1.LinuxContainer.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt + 45, // 58: nri.pkg.api.v1alpha1.LinuxContainer.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority + 42, // 59: nri.pkg.api.v1alpha1.LinuxContainer.seccomp_profile:type_name -> nri.pkg.api.v1alpha1.SecurityProfile + 48, // 60: nri.pkg.api.v1alpha1.LinuxContainer.seccomp_policy:type_name -> nri.pkg.api.v1alpha1.LinuxSeccomp + 62, // 61: nri.pkg.api.v1alpha1.LinuxDevice.file_mode:type_name -> nri.pkg.api.v1alpha1.OptionalFileMode + 58, // 62: nri.pkg.api.v1alpha1.LinuxDevice.uid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 58, // 63: nri.pkg.api.v1alpha1.LinuxDevice.gid:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 59, // 64: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.major:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 59, // 65: nri.pkg.api.v1alpha1.LinuxDeviceCgroup.minor:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 39, // 66: nri.pkg.api.v1alpha1.LinuxResources.memory:type_name -> nri.pkg.api.v1alpha1.LinuxMemory + 40, // 67: nri.pkg.api.v1alpha1.LinuxResources.cpu:type_name -> nri.pkg.api.v1alpha1.LinuxCPU + 41, // 68: nri.pkg.api.v1alpha1.LinuxResources.hugepage_limits:type_name -> nri.pkg.api.v1alpha1.HugepageLimit + 55, // 69: nri.pkg.api.v1alpha1.LinuxResources.blockio_class:type_name -> nri.pkg.api.v1alpha1.OptionalString + 55, // 70: nri.pkg.api.v1alpha1.LinuxResources.rdt_class:type_name -> nri.pkg.api.v1alpha1.OptionalString + 70, // 71: nri.pkg.api.v1alpha1.LinuxResources.unified:type_name -> nri.pkg.api.v1alpha1.LinuxResources.UnifiedEntry + 36, // 72: nri.pkg.api.v1alpha1.LinuxResources.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDeviceCgroup + 44, // 73: nri.pkg.api.v1alpha1.LinuxResources.pids:type_name -> nri.pkg.api.v1alpha1.LinuxPids + 59, // 74: nri.pkg.api.v1alpha1.LinuxMemory.limit:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 59, // 75: nri.pkg.api.v1alpha1.LinuxMemory.reservation:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 59, // 76: nri.pkg.api.v1alpha1.LinuxMemory.swap:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 59, // 77: nri.pkg.api.v1alpha1.LinuxMemory.kernel:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 59, // 78: nri.pkg.api.v1alpha1.LinuxMemory.kernel_tcp:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 60, // 79: nri.pkg.api.v1alpha1.LinuxMemory.swappiness:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 61, // 80: nri.pkg.api.v1alpha1.LinuxMemory.disable_oom_killer:type_name -> nri.pkg.api.v1alpha1.OptionalBool + 61, // 81: nri.pkg.api.v1alpha1.LinuxMemory.use_hierarchy:type_name -> nri.pkg.api.v1alpha1.OptionalBool + 60, // 82: nri.pkg.api.v1alpha1.LinuxCPU.shares:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 59, // 83: nri.pkg.api.v1alpha1.LinuxCPU.quota:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 60, // 84: nri.pkg.api.v1alpha1.LinuxCPU.period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 59, // 85: nri.pkg.api.v1alpha1.LinuxCPU.realtime_runtime:type_name -> nri.pkg.api.v1alpha1.OptionalInt64 + 60, // 86: nri.pkg.api.v1alpha1.LinuxCPU.realtime_period:type_name -> nri.pkg.api.v1alpha1.OptionalUInt64 + 5, // 87: nri.pkg.api.v1alpha1.SecurityProfile.profile_type:type_name -> nri.pkg.api.v1alpha1.SecurityProfile.ProfileType + 2, // 88: nri.pkg.api.v1alpha1.LinuxIOPriority.class:type_name -> nri.pkg.api.v1alpha1.IOPrioClass + 71, // 89: nri.pkg.api.v1alpha1.ContainerAdjustment.annotations:type_name -> nri.pkg.api.v1alpha1.ContainerAdjustment.AnnotationsEntry + 30, // 90: nri.pkg.api.v1alpha1.ContainerAdjustment.mounts:type_name -> nri.pkg.api.v1alpha1.Mount + 54, // 91: nri.pkg.api.v1alpha1.ContainerAdjustment.env:type_name -> nri.pkg.api.v1alpha1.KeyValue + 31, // 92: nri.pkg.api.v1alpha1.ContainerAdjustment.hooks:type_name -> nri.pkg.api.v1alpha1.Hooks + 47, // 93: nri.pkg.api.v1alpha1.ContainerAdjustment.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerAdjustment + 43, // 94: nri.pkg.api.v1alpha1.ContainerAdjustment.rlimits:type_name -> nri.pkg.api.v1alpha1.POSIXRlimit + 37, // 95: nri.pkg.api.v1alpha1.ContainerAdjustment.CDI_devices:type_name -> nri.pkg.api.v1alpha1.CDIDevice + 35, // 96: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.devices:type_name -> nri.pkg.api.v1alpha1.LinuxDevice + 38, // 97: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 56, // 98: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.oom_score_adj:type_name -> nri.pkg.api.v1alpha1.OptionalInt + 45, // 99: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.io_priority:type_name -> nri.pkg.api.v1alpha1.LinuxIOPriority + 48, // 100: nri.pkg.api.v1alpha1.LinuxContainerAdjustment.seccomp_policy:type_name -> nri.pkg.api.v1alpha1.LinuxSeccomp + 58, // 101: nri.pkg.api.v1alpha1.LinuxSeccomp.default_errno:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 49, // 102: nri.pkg.api.v1alpha1.LinuxSeccomp.syscalls:type_name -> nri.pkg.api.v1alpha1.LinuxSyscall + 58, // 103: nri.pkg.api.v1alpha1.LinuxSyscall.errno_ret:type_name -> nri.pkg.api.v1alpha1.OptionalUInt32 + 50, // 104: nri.pkg.api.v1alpha1.LinuxSyscall.args:type_name -> nri.pkg.api.v1alpha1.LinuxSeccompArg + 52, // 105: nri.pkg.api.v1alpha1.ContainerUpdate.linux:type_name -> nri.pkg.api.v1alpha1.LinuxContainerUpdate + 38, // 106: nri.pkg.api.v1alpha1.LinuxContainerUpdate.resources:type_name -> nri.pkg.api.v1alpha1.LinuxResources + 72, // 107: nri.pkg.api.v1alpha1.CompoundFieldOwners.owners:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners.OwnersEntry + 73, // 108: nri.pkg.api.v1alpha1.FieldOwners.simple:type_name -> nri.pkg.api.v1alpha1.FieldOwners.SimpleEntry + 74, // 109: nri.pkg.api.v1alpha1.FieldOwners.compound:type_name -> nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry + 75, // 110: nri.pkg.api.v1alpha1.OwningPlugins.owners:type_name -> nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry + 63, // 111: nri.pkg.api.v1alpha1.FieldOwners.CompoundEntry.value:type_name -> nri.pkg.api.v1alpha1.CompoundFieldOwners + 64, // 112: nri.pkg.api.v1alpha1.OwningPlugins.OwnersEntry.value:type_name -> nri.pkg.api.v1alpha1.FieldOwners + 6, // 113: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:input_type -> nri.pkg.api.v1alpha1.RegisterPluginRequest + 7, // 114: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:input_type -> nri.pkg.api.v1alpha1.UpdateContainersRequest + 10, // 115: nri.pkg.api.v1alpha1.Plugin.Configure:input_type -> nri.pkg.api.v1alpha1.ConfigureRequest + 12, // 116: nri.pkg.api.v1alpha1.Plugin.Synchronize:input_type -> nri.pkg.api.v1alpha1.SynchronizeRequest + 26, // 117: nri.pkg.api.v1alpha1.Plugin.Shutdown:input_type -> nri.pkg.api.v1alpha1.Empty + 14, // 118: nri.pkg.api.v1alpha1.Plugin.CreateContainer:input_type -> nri.pkg.api.v1alpha1.CreateContainerRequest + 16, // 119: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:input_type -> nri.pkg.api.v1alpha1.UpdateContainerRequest + 18, // 120: nri.pkg.api.v1alpha1.Plugin.StopContainer:input_type -> nri.pkg.api.v1alpha1.StopContainerRequest + 20, // 121: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:input_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxRequest + 22, // 122: nri.pkg.api.v1alpha1.Plugin.StateChange:input_type -> nri.pkg.api.v1alpha1.StateChangeEvent + 23, // 123: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:input_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentRequest + 9, // 124: nri.pkg.api.v1alpha1.HostFunctions.Log:input_type -> nri.pkg.api.v1alpha1.LogRequest + 26, // 125: nri.pkg.api.v1alpha1.Runtime.RegisterPlugin:output_type -> nri.pkg.api.v1alpha1.Empty + 8, // 126: nri.pkg.api.v1alpha1.Runtime.UpdateContainers:output_type -> nri.pkg.api.v1alpha1.UpdateContainersResponse + 11, // 127: nri.pkg.api.v1alpha1.Plugin.Configure:output_type -> nri.pkg.api.v1alpha1.ConfigureResponse + 13, // 128: nri.pkg.api.v1alpha1.Plugin.Synchronize:output_type -> nri.pkg.api.v1alpha1.SynchronizeResponse + 26, // 129: nri.pkg.api.v1alpha1.Plugin.Shutdown:output_type -> nri.pkg.api.v1alpha1.Empty + 15, // 130: nri.pkg.api.v1alpha1.Plugin.CreateContainer:output_type -> nri.pkg.api.v1alpha1.CreateContainerResponse + 17, // 131: nri.pkg.api.v1alpha1.Plugin.UpdateContainer:output_type -> nri.pkg.api.v1alpha1.UpdateContainerResponse + 19, // 132: nri.pkg.api.v1alpha1.Plugin.StopContainer:output_type -> nri.pkg.api.v1alpha1.StopContainerResponse + 21, // 133: nri.pkg.api.v1alpha1.Plugin.UpdatePodSandbox:output_type -> nri.pkg.api.v1alpha1.UpdatePodSandboxResponse + 26, // 134: nri.pkg.api.v1alpha1.Plugin.StateChange:output_type -> nri.pkg.api.v1alpha1.Empty + 25, // 135: nri.pkg.api.v1alpha1.Plugin.ValidateContainerAdjustment:output_type -> nri.pkg.api.v1alpha1.ValidateContainerAdjustmentResponse + 26, // 136: nri.pkg.api.v1alpha1.HostFunctions.Log:output_type -> nri.pkg.api.v1alpha1.Empty + 125, // [125:137] is the sub-list for method output_type + 113, // [113:125] is the sub-list for method input_type + 113, // [113:113] is the sub-list for extension type_name + 113, // [113:113] is the sub-list for extension extendee + 0, // [0:113] is the sub-list for field type_name } func init() { file_pkg_api_api_proto_init() } @@ -5646,7 +6097,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*POSIXRlimit); i { + switch v := v.(*SecurityProfile); i { case 0: return &v.state case 1: @@ -5658,7 +6109,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LinuxPids); i { + switch v := v.(*POSIXRlimit); i { case 0: return &v.state case 1: @@ -5670,7 +6121,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LinuxIOPriority); i { + switch v := v.(*LinuxPids); i { case 0: return &v.state case 1: @@ -5682,7 +6133,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerAdjustment); i { + switch v := v.(*LinuxIOPriority); i { case 0: return &v.state case 1: @@ -5694,7 +6145,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LinuxContainerAdjustment); i { + switch v := v.(*ContainerAdjustment); i { case 0: return &v.state case 1: @@ -5706,7 +6157,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerUpdate); i { + switch v := v.(*LinuxContainerAdjustment); i { case 0: return &v.state case 1: @@ -5718,7 +6169,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LinuxContainerUpdate); i { + switch v := v.(*LinuxSeccomp); i { case 0: return &v.state case 1: @@ -5730,7 +6181,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerEviction); i { + switch v := v.(*LinuxSyscall); i { case 0: return &v.state case 1: @@ -5742,7 +6193,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyValue); i { + switch v := v.(*LinuxSeccompArg); i { case 0: return &v.state case 1: @@ -5754,7 +6205,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalString); i { + switch v := v.(*ContainerUpdate); i { case 0: return &v.state case 1: @@ -5766,7 +6217,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalInt); i { + switch v := v.(*LinuxContainerUpdate); i { case 0: return &v.state case 1: @@ -5778,7 +6229,7 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OptionalInt32); i { + switch v := v.(*ContainerEviction); i { case 0: return &v.state case 1: @@ -5790,7 +6241,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.(*OptionalUInt32); i { + switch v := v.(*KeyValue); i { case 0: return &v.state case 1: @@ -5802,7 +6253,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.(*OptionalInt64); i { + switch v := v.(*OptionalString); i { case 0: return &v.state case 1: @@ -5814,7 +6265,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.(*OptionalUInt64); i { + switch v := v.(*OptionalInt); i { case 0: return &v.state case 1: @@ -5826,7 +6277,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.(*OptionalBool); i { + switch v := v.(*OptionalInt32); i { case 0: return &v.state case 1: @@ -5838,7 +6289,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.(*OptionalFileMode); i { + switch v := v.(*OptionalUInt32); i { case 0: return &v.state case 1: @@ -5850,7 +6301,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.(*CompoundFieldOwners); i { + switch v := v.(*OptionalInt64); i { case 0: return &v.state case 1: @@ -5862,7 +6313,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.(*FieldOwners); i { + switch v := v.(*OptionalUInt64); i { case 0: return &v.state case 1: @@ -5874,6 +6325,54 @@ func file_pkg_api_api_proto_init() { } } file_pkg_api_api_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OptionalBool); 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[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OptionalFileMode); 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[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CompoundFieldOwners); 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[58].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[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OwningPlugins); i { case 0: return &v.state @@ -5891,8 +6390,8 @@ func file_pkg_api_api_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_api_api_proto_rawDesc, - NumEnums: 5, - NumMessages: 66, + NumEnums: 6, + NumMessages: 70, NumExtensions: 0, NumServices: 3, }, diff --git a/pkg/api/api.proto b/pkg/api/api.proto index b5dc9239..87118916 100644 --- a/pkg/api/api.proto +++ b/pkg/api/api.proto @@ -374,6 +374,8 @@ message LinuxContainer { OptionalInt oom_score_adj = 4; string cgroups_path = 5; LinuxIOPriority io_priority = 6; + SecurityProfile seccomp_profile = 7; + LinuxSeccomp seccomp_policy = 8; } // A linux namespace. @@ -448,6 +450,17 @@ message HugepageLimit { uint64 limit = 2; } +// SecurityProfile for container. +message SecurityProfile { + enum ProfileType { + RUNTIME_DEFAULT = 0; + UNCONFINED = 1; + LOCALHOST = 2; + } + ProfileType profile_type = 1; + string localhost_ref = 2; +} + // Container rlimits message POSIXRlimit { string type = 1; @@ -493,6 +506,31 @@ message LinuxContainerAdjustment { string cgroups_path = 3; OptionalInt oom_score_adj = 4; LinuxIOPriority io_priority = 5; + LinuxSeccomp seccomp_policy = 6; +} + +message LinuxSeccomp { + string default_action = 1; + OptionalUInt32 default_errno = 2; + repeated string architectures = 3; + repeated string flags = 4; + string listener_path = 5; + string listener_metadata = 6; + repeated LinuxSyscall syscalls = 7; +} + +message LinuxSyscall { + repeated string names = 1; + string action = 2; + OptionalUInt32 errno_ret = 3; + repeated LinuxSeccompArg args = 4; +} + +message LinuxSeccompArg { + uint32 index = 1; + uint64 value = 2; + uint64 value_two = 3; + string op = 4; } // Requested update to an already created container. @@ -624,4 +662,5 @@ enum Field { OomScoreAdj = 29; Rlimits = 30; IoPriority = 31; + SeccompPolicy = 32; } diff --git a/pkg/api/api_vtproto.pb.go b/pkg/api/api_vtproto.pb.go index 21336228..3c57c277 100644 --- a/pkg/api/api_vtproto.pb.go +++ b/pkg/api/api_vtproto.pb.go @@ -1877,6 +1877,26 @@ func (m *LinuxContainer) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.SeccompPolicy != nil { + size, err := m.SeccompPolicy.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x42 + } + if m.SeccompProfile != nil { + size, err := m.SeccompProfile.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x3a + } if m.IoPriority != nil { size, err := m.IoPriority.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { @@ -2573,6 +2593,51 @@ func (m *HugepageLimit) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SecurityProfile) 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 *SecurityProfile) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *SecurityProfile) 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.LocalhostRef) > 0 { + i -= len(m.LocalhostRef) + copy(dAtA[i:], m.LocalhostRef) + i = encodeVarint(dAtA, i, uint64(len(m.LocalhostRef))) + i-- + dAtA[i] = 0x12 + } + if m.ProfileType != 0 { + i = encodeVarint(dAtA, i, uint64(m.ProfileType)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *POSIXRlimit) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -2863,6 +2928,16 @@ func (m *LinuxContainerAdjustment) MarshalToSizedBufferVT(dAtA []byte) (int, err i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.SeccompPolicy != nil { + size, err := m.SeccompPolicy.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x32 + } if m.IoPriority != nil { size, err := m.IoPriority.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { @@ -2915,6 +2990,226 @@ func (m *LinuxContainerAdjustment) MarshalToSizedBufferVT(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *LinuxSeccomp) 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 *LinuxSeccomp) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *LinuxSeccomp) 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.Syscalls) > 0 { + for iNdEx := len(m.Syscalls) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Syscalls[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x3a + } + } + if len(m.ListenerMetadata) > 0 { + i -= len(m.ListenerMetadata) + copy(dAtA[i:], m.ListenerMetadata) + i = encodeVarint(dAtA, i, uint64(len(m.ListenerMetadata))) + i-- + dAtA[i] = 0x32 + } + if len(m.ListenerPath) > 0 { + i -= len(m.ListenerPath) + copy(dAtA[i:], m.ListenerPath) + i = encodeVarint(dAtA, i, uint64(len(m.ListenerPath))) + i-- + dAtA[i] = 0x2a + } + if len(m.Flags) > 0 { + for iNdEx := len(m.Flags) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Flags[iNdEx]) + copy(dAtA[i:], m.Flags[iNdEx]) + i = encodeVarint(dAtA, i, uint64(len(m.Flags[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if len(m.Architectures) > 0 { + for iNdEx := len(m.Architectures) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Architectures[iNdEx]) + copy(dAtA[i:], m.Architectures[iNdEx]) + i = encodeVarint(dAtA, i, uint64(len(m.Architectures[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if m.DefaultErrno != nil { + size, err := m.DefaultErrno.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if len(m.DefaultAction) > 0 { + i -= len(m.DefaultAction) + copy(dAtA[i:], m.DefaultAction) + i = encodeVarint(dAtA, i, uint64(len(m.DefaultAction))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *LinuxSyscall) 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 *LinuxSyscall) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *LinuxSyscall) 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.Args) > 0 { + for iNdEx := len(m.Args) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Args[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x22 + } + } + if m.ErrnoRet != nil { + size, err := m.ErrnoRet.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + } + if len(m.Action) > 0 { + i -= len(m.Action) + copy(dAtA[i:], m.Action) + i = encodeVarint(dAtA, i, uint64(len(m.Action))) + i-- + dAtA[i] = 0x12 + } + if len(m.Names) > 0 { + for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Names[iNdEx]) + copy(dAtA[i:], m.Names[iNdEx]) + i = encodeVarint(dAtA, i, uint64(len(m.Names[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *LinuxSeccompArg) 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 *LinuxSeccompArg) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *LinuxSeccompArg) 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.Op) > 0 { + i -= len(m.Op) + copy(dAtA[i:], m.Op) + i = encodeVarint(dAtA, i, uint64(len(m.Op))) + i-- + dAtA[i] = 0x22 + } + if m.ValueTwo != 0 { + i = encodeVarint(dAtA, i, uint64(m.ValueTwo)) + i-- + dAtA[i] = 0x18 + } + if m.Value != 0 { + i = encodeVarint(dAtA, i, uint64(m.Value)) + i-- + dAtA[i] = 0x10 + } + if m.Index != 0 { + i = encodeVarint(dAtA, i, uint64(m.Index)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *ContainerUpdate) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -4362,6 +4657,14 @@ func (m *LinuxContainer) SizeVT() (n int) { l = m.IoPriority.SizeVT() n += 1 + l + sov(uint64(l)) } + if m.SeccompProfile != nil { + l = m.SeccompProfile.SizeVT() + n += 1 + l + sov(uint64(l)) + } + if m.SeccompPolicy != nil { + l = m.SeccompPolicy.SizeVT() + n += 1 + l + sov(uint64(l)) + } n += len(m.unknownFields) return n } @@ -4610,6 +4913,23 @@ func (m *HugepageLimit) SizeVT() (n int) { return n } +func (m *SecurityProfile) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ProfileType != 0 { + n += 1 + sov(uint64(m.ProfileType)) + } + l = len(m.LocalhostRef) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + n += len(m.unknownFields) + return n +} + func (m *POSIXRlimit) SizeVT() (n int) { if m == nil { return 0 @@ -4743,31 +5063,132 @@ func (m *LinuxContainerAdjustment) SizeVT() (n int) { l = m.IoPriority.SizeVT() n += 1 + l + sov(uint64(l)) } + if m.SeccompPolicy != nil { + l = m.SeccompPolicy.SizeVT() + n += 1 + l + sov(uint64(l)) + } n += len(m.unknownFields) return n } -func (m *ContainerUpdate) SizeVT() (n int) { +func (m *LinuxSeccomp) SizeVT() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.ContainerId) + l = len(m.DefaultAction) if l > 0 { n += 1 + l + sov(uint64(l)) } - if m.Linux != nil { - l = m.Linux.SizeVT() + if m.DefaultErrno != nil { + l = m.DefaultErrno.SizeVT() n += 1 + l + sov(uint64(l)) } - if m.IgnoreFailure { - n += 2 + if len(m.Architectures) > 0 { + for _, s := range m.Architectures { + l = len(s) + n += 1 + l + sov(uint64(l)) + } } - n += len(m.unknownFields) - return n -} - + if len(m.Flags) > 0 { + for _, s := range m.Flags { + l = len(s) + n += 1 + l + sov(uint64(l)) + } + } + l = len(m.ListenerPath) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + l = len(m.ListenerMetadata) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + if len(m.Syscalls) > 0 { + for _, e := range m.Syscalls { + l = e.SizeVT() + n += 1 + l + sov(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *LinuxSyscall) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Names) > 0 { + for _, s := range m.Names { + l = len(s) + n += 1 + l + sov(uint64(l)) + } + } + l = len(m.Action) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + if m.ErrnoRet != nil { + l = m.ErrnoRet.SizeVT() + n += 1 + l + sov(uint64(l)) + } + if len(m.Args) > 0 { + for _, e := range m.Args { + l = e.SizeVT() + n += 1 + l + sov(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *LinuxSeccompArg) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Index != 0 { + n += 1 + sov(uint64(m.Index)) + } + if m.Value != 0 { + n += 1 + sov(uint64(m.Value)) + } + if m.ValueTwo != 0 { + n += 1 + sov(uint64(m.ValueTwo)) + } + l = len(m.Op) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *ContainerUpdate) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContainerId) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + if m.Linux != nil { + l = m.Linux.SizeVT() + n += 1 + l + sov(uint64(l)) + } + if m.IgnoreFailure { + n += 2 + } + n += len(m.unknownFields) + return n +} + func (m *LinuxContainerUpdate) SizeVT() (n int) { if m == nil { return 0 @@ -10049,6 +10470,78 @@ func (m *LinuxContainer) UnmarshalVT(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SeccompProfile", 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.SeccompProfile == nil { + m.SeccompProfile = &SecurityProfile{} + } + if err := m.SeccompProfile.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SeccompPolicy", 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.SeccompPolicy == nil { + m.SeccompPolicy = &LinuxSeccomp{} + } + if err := m.SeccompPolicy.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) @@ -11899,6 +12392,108 @@ func (m *HugepageLimit) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *SecurityProfile) 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: SecurityProfile: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecurityProfile: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProfileType", wireType) + } + m.ProfileType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ProfileType |= SecurityProfile_ProfileType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LocalhostRef", 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.LocalhostRef = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + 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 *POSIXRlimit) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -12800,6 +13395,648 @@ func (m *LinuxContainerAdjustment) UnmarshalVT(dAtA []byte) error { return err } iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SeccompPolicy", 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.SeccompPolicy == nil { + m.SeccompPolicy = &LinuxSeccomp{} + } + if err := m.SeccompPolicy.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + 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 *LinuxSeccomp) 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: LinuxSeccomp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LinuxSeccomp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultAction", 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.DefaultAction = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultErrno", 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.DefaultErrno == nil { + m.DefaultErrno = &OptionalUInt32{} + } + if err := m.DefaultErrno.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Architectures", 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.Architectures = append(m.Architectures, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Flags", 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.Flags = append(m.Flags, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListenerPath", 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.ListenerPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListenerMetadata", 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.ListenerMetadata = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Syscalls", 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 + } + m.Syscalls = append(m.Syscalls, &LinuxSyscall{}) + if err := m.Syscalls[len(m.Syscalls)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + 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 *LinuxSyscall) 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: LinuxSyscall: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LinuxSyscall: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Names", 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.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", 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.Action = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrnoRet", 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.ErrnoRet == nil { + m.ErrnoRet = &OptionalUInt32{} + } + if err := m.ErrnoRet.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Args", 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 + } + m.Args = append(m.Args, &LinuxSeccompArg{}) + if err := m.Args[len(m.Args)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + 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 *LinuxSeccompArg) 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: LinuxSeccompArg: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LinuxSeccompArg: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) + } + m.Index = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Index |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + m.Value = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Value |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ValueTwo", wireType) + } + m.ValueTwo = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ValueTwo |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Op", 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.Op = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) diff --git a/pkg/api/owners.go b/pkg/api/owners.go index a6df02f9..d447ce75 100644 --- a/pkg/api/owners.go +++ b/pkg/api/owners.go @@ -161,6 +161,10 @@ func (o *OwningPlugins) ClaimIOPriority(id, plugin string) error { return o.mustOwnersFor(id).ClaimIOPriority(plugin) } +func (o *OwningPlugins) ClaimSeccompPolicy(id, plugin string) error { + return o.mustOwnersFor(id).ClaimSeccompPolicy(plugin) +} + func (o *OwningPlugins) ClearAnnotation(id, key, plugin string) { o.mustOwnersFor(id).ClearAnnotation(key, plugin) } @@ -301,6 +305,10 @@ func (o *OwningPlugins) IOPriorityOwner(id string) (string, bool) { return o.ownersFor(id).simpleOwner(Field_IoPriority.Key()) } +func (o *OwningPlugins) SeccompPolicyOwner(id string) (string, bool) { + return o.ownersFor(id).simpleOwner(Field_SeccompPolicy.Key()) +} + func (o *OwningPlugins) mustOwnersFor(id string) *FieldOwners { f, ok := o.Owners[id] if !ok { @@ -515,6 +523,10 @@ func (f *FieldOwners) ClaimIOPriority(plugin string) error { return f.claimSimple(Field_IoPriority.Key(), plugin) } +func (f *FieldOwners) ClaimSeccompPolicy(plugin string) error { + return f.claimSimple(Field_SeccompPolicy.Key(), plugin) +} + func (f *FieldOwners) clearCompound(field int32, key, plugin string) { m, ok := f.Compound[field] if !ok { diff --git a/pkg/api/seccomp.go b/pkg/api/seccomp.go new file mode 100644 index 00000000..433fefb5 --- /dev/null +++ b/pkg/api/seccomp.go @@ -0,0 +1,119 @@ +/* + 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" +) + +func FromOCILinuxSeccomp(o *rspec.LinuxSeccomp) *LinuxSeccomp { + var errno *OptionalUInt32 + if o.DefaultErrnoRet != nil { + errno = &OptionalUInt32{Value: uint32(*o.DefaultErrnoRet)} + } + + arches := make([]string, len(o.Architectures)) + for i, arch := range o.Architectures { + arches[i] = string(arch) + } + + flags := make([]string, len(o.Flags)) + for i, flag := range o.Flags { + flags[i] = string(flag) + } + + return &LinuxSeccomp{ + DefaultAction: string(o.DefaultAction), + DefaultErrno: errno, + Architectures: arches, + Flags: flags, + ListenerPath: o.ListenerPath, + ListenerMetadata: o.ListenerMetadata, + Syscalls: FromOCILinuxSyscalls(o.Syscalls), + } +} + +func FromOCILinuxSyscalls(o []rspec.LinuxSyscall) []*LinuxSyscall { + syscalls := make([]*LinuxSyscall, len(o)) + + for i, syscall := range o { + var errno *OptionalUInt32 + if syscall.ErrnoRet != nil { + errno = &OptionalUInt32{Value: uint32(*syscall.ErrnoRet)} + } + + syscalls[i] = &LinuxSyscall{ + Names: syscall.Names, + Action: string(syscall.Action), + ErrnoRet: errno, + Args: FromOCILinuxSeccompArgs(syscall.Args), + } + } + + return syscalls +} + +func FromOCILinuxSeccompArgs(o []rspec.LinuxSeccompArg) []*LinuxSeccompArg { + args := make([]*LinuxSeccompArg, len(o)) + + for i, arg := range o { + args[i] = &LinuxSeccompArg{ + Index: uint32(arg.Index), + Value: arg.Value, + ValueTwo: arg.ValueTwo, + Op: string(arg.Op), + } + } + + return args +} + +func ToOCILinuxSyscalls(o []*LinuxSyscall) []rspec.LinuxSyscall { + syscalls := make([]rspec.LinuxSyscall, len(o)) + + for i, syscall := range o { + var errnoRet *uint + + if syscall.ErrnoRet != nil { + *errnoRet = uint(syscall.ErrnoRet.Value) + } + + syscalls[i] = rspec.LinuxSyscall{ + Names: syscall.Names, + Action: rspec.LinuxSeccompAction(syscall.Action), + ErrnoRet: errnoRet, + Args: ToOCILinuxSeccompArgs(syscall.Args), + } + } + + return syscalls +} + +func ToOCILinuxSeccompArgs(o []*LinuxSeccompArg) []rspec.LinuxSeccompArg { + args := make([]rspec.LinuxSeccompArg, len(o)) + + for i, arg := range o { + args[i] = rspec.LinuxSeccompArg{ + Index: uint(arg.Index), + Value: arg.Value, + ValueTwo: arg.ValueTwo, + Op: rspec.LinuxSeccompOperator(arg.Op), + } + } + + return args +} diff --git a/pkg/runtime-tools/generate/generate.go b/pkg/runtime-tools/generate/generate.go index cb67c5a5..18bd63a6 100644 --- a/pkg/runtime-tools/generate/generate.go +++ b/pkg/runtime-tools/generate/generate.go @@ -120,6 +120,10 @@ func (g *Generator) Adjust(adjust *nri.ContainerAdjustment) error { g.AdjustOomScoreAdj(adjust.GetLinux().GetOomScoreAdj()) g.AdjustIOPriority(adjust.GetLinux().GetIoPriority()) + if err := g.AdjustSeccompPolicy(adjust.GetLinux().GetSeccompPolicy()); err != nil { + return err + } + resources := adjust.GetLinux().GetResources() if err := g.AdjustResources(resources); err != nil { return err @@ -348,6 +352,43 @@ func (g *Generator) AdjustIOPriority(ioprio *nri.LinuxIOPriority) { } } +// AdjustSeccompPolicy adjusts the seccomp policy for the container, which may +// override kubelet's settings for the seccomp policy. +func (g *Generator) AdjustSeccompPolicy(policy *nri.LinuxSeccomp) error { + if policy == nil { + return nil + } + + // Note: we explicitly do not use the SetDefaultSeccompAction() and + // SetSeccompArchitecture() helpers from generate here, because they + // expect a "humanized" version of the action (e.g. "allow" or "x86"). + // since these helpers do not exist for the below, we would be + // inconsistent: here we would want the humanized strings, in favor of + // the rspec definitions like SCMP_ACT_ALLOW. let's just use the rspec + // versions everywhere since helpers don't exist in runtime-tools for + // setting actual syscall policies, only default actions. + archs := make([]rspec.Arch, len(policy.Architectures)) + for i, arch := range policy.Architectures { + archs[i] = rspec.Arch(arch) + } + + flags := make([]rspec.LinuxSeccompFlag, len(policy.Flags)) + for i, f := range policy.Flags { + flags[i] = rspec.LinuxSeccompFlag(f) + } + + g.Config.Linux.Seccomp = &rspec.LinuxSeccomp{ + DefaultAction: rspec.LinuxSeccompAction(policy.DefaultAction), + Architectures: archs, + ListenerPath: policy.ListenerPath, + ListenerMetadata: policy.ListenerMetadata, + Flags: flags, + Syscalls: nri.ToOCILinuxSyscalls(policy.Syscalls), + } + + return nil +} + // AdjustDevices adjusts the (Linux) devices in the OCI Spec. func (g *Generator) AdjustDevices(devices []*nri.LinuxDevice) { for _, d := range devices { diff --git a/pkg/runtime-tools/generate/generate_suite_test.go b/pkg/runtime-tools/generate/generate_suite_test.go index b7bcd34c..10e805df 100644 --- a/pkg/runtime-tools/generate/generate_suite_test.go +++ b/pkg/runtime-tools/generate/generate_suite_test.go @@ -397,6 +397,38 @@ var _ = Describe("Adjustment", func() { ))) }) }) + + When("has a seccomp policy adjustment", func() { + It("adjusts Spec correctly", func() { + var ( + spec = makeSpec() + seccomp = rspec.LinuxSeccomp{ + DefaultAction: rspec.ActAllow, + ListenerPath: "/run/meshuggah-rocks.sock", + Architectures: []rspec.Arch{}, + Flags: []rspec.LinuxSeccompFlag{}, + Syscalls: []rspec.LinuxSyscall{{ + Names: []string{"sched_getaffinity"}, + Action: rspec.ActNotify, + Args: []rspec.LinuxSeccompArg{}, + }}, + } + adjust = &api.ContainerAdjustment{ + Linux: &api.LinuxContainerAdjustment{ + SeccompPolicy: api.FromOCILinuxSeccomp(&seccomp), + }, + } + ) + + rg := &rgen.Generator{Config: spec} + xg := xgen.SpecGenerator(rg) + + Expect(xg).ToNot(BeNil()) + Expect(xg.Adjust(adjust)).To(Succeed()) + Expect(*spec.Linux.Seccomp).To(Equal(seccomp)) + }) + }) + }) type specOption func(*rspec.Spec) diff --git a/plugins/default-validator/default-validator.go b/plugins/default-validator/default-validator.go index cc9d404a..4a14817c 100644 --- a/plugins/default-validator/default-validator.go +++ b/plugins/default-validator/default-validator.go @@ -33,8 +33,17 @@ import ( type DefaultValidatorConfig struct { // Enable the default validator plugin. Enable bool `yaml:"enable" toml:"enable"` - // RejectOCIHooks fails validation if any plugin injects OCI hooks. - RejectOCIHooks bool `yaml:"rejectOCIHooks" toml:"reject_oci_hooks"` + // RejectOCIHookAdjustment fails validation if OCI hooks are adjusted. + RejectOCIHookAdjustment bool `yaml:"rejectOCIHookAdjustment" toml:"reject_oci_hook_adjustment"` + // RejectRuntimeDefaultSeccompAdjustment fails validation if a runtime default seccomp + // policy is adjusted. + RejectRuntimeDefaultSeccompAdjustment bool `yaml:"rejectRuntimeDefaultSeccompAdjustment" toml:"reject_runtime_default_seccomp_adjustment"` + // RejectUnconfinedSeccompAdjustment fails validation if an unconfined seccomp policy is + // adjusted. + RejectUnconfinedSeccompAdjustment bool `yaml:"rejectUnconfinedSeccompAdjustment" toml:"reject_unconfined_seccomp_adjustment"` + // RejectCustomSeccompAdjustment fails validation if a custom seccomp policy (aka LOCALHOST) + // is adjusted. + RejectCustomSeccompAdjustment bool `yaml:"rejectCustomSeccompAdjustment" toml:"reject_custom_seccomp_adjustment"` // RequiredPlugins list globally required plugins. These must be present // or otherwise validation will fail. // WARNING: This is a global setting and will affect all containers. In @@ -88,6 +97,11 @@ func (v *DefaultValidator) ValidateContainerAdjustment(ctx context.Context, req return err } + if err := v.validateSeccompPolicy(req); err != nil { + log.Errorf(ctx, "rejecting adjustment: %v", err) + return err + } + if err := v.validateRequiredPlugins(req); err != nil { log.Errorf(ctx, "rejecting adjustment: %v", err) return err @@ -101,7 +115,7 @@ func (v *DefaultValidator) validateOCIHooks(req *api.ValidateContainerAdjustment return nil } - if !v.cfg.RejectOCIHooks { + if !v.cfg.RejectOCIHookAdjustment { return nil } @@ -121,6 +135,40 @@ func (v *DefaultValidator) validateOCIHooks(req *api.ValidateContainerAdjustment return fmt.Errorf("%w: %s attempted restricted OCI hook injection", ErrValidation, offender) } +func (v *DefaultValidator) validateSeccompPolicy(req *api.ValidateContainerAdjustmentRequest) error { + if req.Adjust == nil { + return nil + } + + owner, claimed := req.Owners.SeccompPolicyOwner(req.Container.Id) + if !claimed { + return nil + } + + profile := req.Container.GetLinux().GetSeccompProfile() + switch { + case profile == nil || profile.GetProfileType() == api.SecurityProfile_UNCONFINED: + if v.cfg.RejectUnconfinedSeccompAdjustment { + return fmt.Errorf("%w: plugin %s attempted restricted "+ + " unconfined seccomp policy adjustment", ErrValidation, owner) + } + + case profile.GetProfileType() == api.SecurityProfile_RUNTIME_DEFAULT: + if v.cfg.RejectRuntimeDefaultSeccompAdjustment { + return fmt.Errorf("%w: plugin %s attempted restricted "+ + "runtime default seccomp policy adjustment", ErrValidation, owner) + } + + case profile.GetProfileType() == api.SecurityProfile_LOCALHOST: + if v.cfg.RejectCustomSeccompAdjustment { + return fmt.Errorf("%w: plugin %s attempted restricted "+ + " custom seccomp policy adjustment", ErrValidation, owner) + } + } + + return nil +} + func (v *DefaultValidator) validateRequiredPlugins(req *api.ValidateContainerAdjustmentRequest) error { var ( container = req.GetContainer().GetName()