From 32ffd5376e062c201cd11a7328940b2559026bd7 Mon Sep 17 00:00:00 2001 From: Artem Gavrilov Date: Wed, 27 Dec 2023 11:37:50 +0200 Subject: [PATCH] PMM-8019 Support partial updates of settings and other entities (#2705) * PMM-8019 Get rid of enable/disable flags in settings * PMM-8019 Fixes * PMM-8019 Fix * PMM-8019 Cleanup * PMM-8019 Fix tests * PMM-8019 Fixes * PMM-8019 Fix migrations order * PMM-8019 Fix DB migrations * PMM-8019 Fix tests * PMM-8019 Update docs * PMM-8019 Fix * PMM-8019 Make check enabling toogle optional * PMM-8019 Make role update params optional * PMM-8019 Fix API tests * PMM-8019 Use optional fields for tour flags * PMM-8019 Use optionals instead of wrappers in API where it's possible * PMM-8019 Comments * PMM-8019 Fix tests * PMM-8019 Fix linters * PMM-8019 Fix --- .golangci.yml | 5 +- agent/agents/cache/cache_test.go | 6 +- agent/utils/mongo_fix/mongo_fix_test.go | 4 +- .../management/alerting/alerting_test.go | 3 +- api-tests/management/backup/backups_test.go | 8 +- api-tests/server/advisors_test.go | 10 +- api-tests/server/helpers.go | 10 +- api-tests/server/platform_test.go | 3 +- api-tests/server/settings_test.go | 110 +-- api/buf.yaml | 3 + api/common/common.pb.go | 154 +++ api/common/common.pb.validate.go | 135 +++ api/common/common.proto | 8 + .../change_service_responses.go | 8 +- api/inventory/v1/json/v1.json | 4 + api/management/v1/backup/backups.pb.go | 507 +++++----- .../v1/backup/backups.pb.validate.go | 190 +--- api/management/v1/backup/backups.proto | 13 +- api/management/v1/backup/json/backup.json | 6 + .../change_scheduled_backup_responses.go | 12 +- api/management/v1/checks.pb.go | 547 ++++++----- api/management/v1/checks.pb.validate.go | 10 +- api/management/v1/checks.proto | 7 +- .../change_security_checks_responses.go | 5 +- .../list_advisors_responses.go | 4 +- .../list_security_checks_responses.go | 4 +- api/management/v1/json/v1.json | 15 +- .../role_service/update_role_responses.go | 6 +- api/management/v1/role/json/role.json | 3 + api/management/v1/role/role.pb.go | 294 +++--- api/management/v1/role/role.pb.validate.go | 26 +- api/management/v1/role/role.proto | 6 +- ...rch_organization_entitlements_responses.go | 12 +- api/platform/v1/json/v1.json | 6 + api/platform/v1/platform.pb.go | 538 +++++----- api/platform/v1/platform.pb.validate.go | 190 +--- api/platform/v1/platform.proto | 13 +- .../change_settings_responses.go | 129 ++- .../server_service/get_settings_responses.go | 4 +- api/server/v1/json/v1.json | 90 +- api/server/v1/server.pb.go | 918 ++++++++---------- api/server/v1/server.pb.validate.go | 91 +- api/server/v1/server.proto | 38 +- api/swagger/swagger-dev.json | 128 ++- api/swagger/swagger.json | 115 +-- .../user_service/update_user_responses.go | 4 +- api/user/v1/json/v1.json | 2 + api/user/v1/user.pb.go | 155 +-- api/user/v1/user.pb.validate.go | 8 +- api/user/v1/user.proto | 4 +- buf.gen.yaml | 1 + build/docker/server/README.md | 12 +- descriptor.bin | Bin 696786 -> 691423 bytes managed/models/database.go | 16 + managed/models/role_helpers.go | 2 +- managed/models/settings.go | 115 ++- managed/models/settings_helpers.go | 151 +-- managed/models/settings_helpers_test.go | 130 ++- managed/models/user_flags_helpers.go | 12 +- managed/services/checks/checks.go | 10 +- managed/services/checks/checks_test.go | 8 +- .../services/grafana/access_control_cache.go | 2 +- managed/services/grafana/auth_server_test.go | 3 +- managed/services/inventory/services.go | 2 +- .../services/management/alerting/service.go | 14 +- .../management/alerting/service_test.go | 3 +- managed/services/management/azure_database.go | 2 +- .../management/backup/artifacts_service.go | 2 +- .../management/backup/backups_service.go | 24 +- .../management/backup/backups_service_test.go | 21 +- .../management/backup/locations_service.go | 2 +- .../backup/restore_history_service.go | 2 +- managed/services/management/checks.go | 20 +- managed/services/management/checks_test.go | 8 +- managed/services/management/role.go | 14 +- managed/services/management/role_test.go | 28 +- managed/services/platform/platform.go | 17 +- managed/services/server/server.go | 97 +- managed/services/server/server_test.go | 53 +- managed/services/supervisord/supervisord.go | 6 +- .../services/supervisord/supervisord_test.go | 2 +- managed/services/telemetry/telemetry.go | 2 +- managed/services/user/user.go | 12 +- managed/utils/envvars/parser.go | 80 +- managed/utils/envvars/parser_test.go | 33 +- managed/utils/pprof/pprof_test.go | 7 +- managed/utils/tests/asserts.go | 4 +- 87 files changed, 2707 insertions(+), 2781 deletions(-) create mode 100644 api/common/common.pb.go create mode 100644 api/common/common.pb.validate.go create mode 100644 api/common/common.proto diff --git a/.golangci.yml b/.golangci.yml index a36a87a56f..b1b3db9ab7 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -81,11 +81,11 @@ linters: enable-all: true disable: # keep the rules sorted alpahbetically + - deadcode # unmaintained, we leverage `unused` + - dupl # we can't avoid duplicating code - execinquery # false positives only - exhaustivestruct # too annoying - exhaustruct # too many files to fix/nolint - - deadcode # unmaintained, we leverage `unused` - - dupl # we can't avoid duplicating code - funlen # useless - gochecknoglobals # mostly useless - gochecknoinits # we use init functions @@ -100,6 +100,7 @@ linters: - maligned # deprecated - nlreturn # too annoying - nosnakecase # deprecated + - protogetter # we need direct access to proto fields - rowserrcheck # disabled because of generics - scopelint # too many false positives - structcheck # replaced by unused diff --git a/agent/agents/cache/cache_test.go b/agent/agents/cache/cache_test.go index 6299f736bb..7b90eaca70 100644 --- a/agent/agents/cache/cache_test.go +++ b/agent/agents/cache/cache_test.go @@ -146,13 +146,13 @@ func TestCacheErrors(t *testing.T) { t.Parallel() var err error _, err = New(100, time.Second*100, 100, logrus.WithField("test", t.Name())) - assert.NotNil(t, err) + assert.Error(t, err) //nolint:testifylint _, err = New([]float64{}, time.Second*100, 100, logrus.WithField("test", t.Name())) - assert.NotNil(t, err) + assert.Error(t, err) //nolint:testifylint _, err = New(struct{}{}, time.Second*100, 100, logrus.WithField("test", t.Name())) - assert.NotNil(t, err) + assert.Error(t, err) //nolint:testifylint }) t.Run("WrongTypeOnRefresh", func(t *testing.T) { diff --git a/agent/utils/mongo_fix/mongo_fix_test.go b/agent/utils/mongo_fix/mongo_fix_test.go index 146a6135de..24afab1a7e 100644 --- a/agent/utils/mongo_fix/mongo_fix_test.go +++ b/agent/utils/mongo_fix/mongo_fix_test.go @@ -72,8 +72,8 @@ func TestClientOptionsForDSN(t *testing.T) { assert.Equal(t, err.Error(), tt.error) } else { assert.Empty(t, err) - assert.Equal(t, got.Auth.Username, tt.expectedUser) - assert.Equal(t, got.Auth.Password, tt.expectedPassword) + assert.Equal(t, tt.expectedUser, got.Auth.Username) + assert.Equal(t, tt.expectedPassword, got.Auth.Password) } }) } diff --git a/api-tests/management/alerting/alerting_test.go b/api-tests/management/alerting/alerting_test.go index 7cee370324..a28b7c8f68 100644 --- a/api-tests/management/alerting/alerting_test.go +++ b/api-tests/management/alerting/alerting_test.go @@ -40,8 +40,7 @@ import ( ) // Note: Even though the Alerting service checks for alerting enabled or disabled before returning results -// we don't enable or disable Alerting explicit in our tests since it is enabled by default through -// DISABLE_ALERTING env var. +// we don't enable or disable Alerting explicit in our tests since it is enabled by default. func TestRulesAPI(t *testing.T) { t.Parallel() client := alertingClient.Default.AlertingService diff --git a/api-tests/management/backup/backups_test.go b/api-tests/management/backup/backups_test.go index 94cea5f064..560585c309 100644 --- a/api-tests/management/backup/backups_test.go +++ b/api-tests/management/backup/backups_test.go @@ -120,10 +120,10 @@ func TestScheduleBackup(t *testing.T) { body := backups.ChangeScheduledBackupBody{ ScheduledBackupID: backupRes.Payload.ScheduledBackupID, - Enabled: true, - CronExpression: "0 2 2 2 2", - Name: "test2", - Description: "test2", + Enabled: pointer.ToBool(true), + CronExpression: pointer.ToString("0 2 2 2 2"), + Name: pointer.ToString("test2"), + Description: pointer.ToString("test2"), } changeRes, err := client.ChangeScheduledBackup(&backups.ChangeScheduledBackupParams{ Body: body, diff --git a/api-tests/server/advisors_test.go b/api-tests/server/advisors_test.go index 81097d772c..7d2f044e1a 100644 --- a/api-tests/server/advisors_test.go +++ b/api-tests/server/advisors_test.go @@ -138,9 +138,8 @@ func TestChangeSecurityChecks(t *testing.T) { Body: security_checks.ChangeSecurityChecksBody{ Params: []*security_checks.ChangeSecurityChecksParamsBodyParamsItems0{ { - Name: check.Name, - Disable: !check.Disabled, - Enable: check.Disabled, + Name: check.Name, + Enable: pointer.ToBool(!check.Enabled), }, }, }, @@ -156,7 +155,7 @@ func TestChangeSecurityChecks(t *testing.T) { for _, c := range resp.Payload.Checks { if c.Name == check.Name { - assert.Equal(t, !check.Disabled, c.Disabled) + assert.NotEqual(t, check.Enabled, c.Enabled) break } } @@ -248,8 +247,7 @@ func toggleAdvisorChecks(t *testing.T, enable bool) { res, err := serverClient.Default.ServerService.ChangeSettings(&server_service.ChangeSettingsParams{ Body: server_service.ChangeSettingsBody{ - EnableStt: enable, - DisableStt: !enable, + EnableStt: pointer.ToBool(enable), }, Context: pmmapitests.Context, }) diff --git a/api-tests/server/helpers.go b/api-tests/server/helpers.go index b8e54cbaf1..15dbec8308 100644 --- a/api-tests/server/helpers.go +++ b/api-tests/server/helpers.go @@ -35,9 +35,9 @@ func restoreSettingsDefaults(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableStt: true, - EnableTelemetry: true, - EnableAlerting: true, + EnableStt: pointer.ToBool(true), + EnableTelemetry: pointer.ToBool(true), + EnableAlerting: pointer.ToBool(true), MetricsResolutions: &server.ChangeSettingsParamsBodyMetricsResolutions{ Hr: "5s", Mr: "10s", @@ -49,7 +49,9 @@ func restoreSettingsDefaults(t *testing.T) { RareInterval: "280800s", }, DataRetention: "2592000s", - AWSPartitions: []string{"aws"}, + AWSPartitions: &server.ChangeSettingsParamsBodyAWSPartitions{ + Values: []string{"aws"}, + }, }, Context: pmmapitests.Context, }) diff --git a/api-tests/server/platform_test.go b/api-tests/server/platform_test.go index 48f215776c..5dc6df7919 100644 --- a/api-tests/server/platform_test.go +++ b/api-tests/server/platform_test.go @@ -20,6 +20,7 @@ import ( "os" "testing" + "github.com/AlekSi/pointer" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" @@ -56,7 +57,7 @@ func TestPlatform(t *testing.T) { // Set the PMM address to localhost. res, err := serverClient.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - PMMPublicAddress: "localhost", + PMMPublicAddress: pointer.ToString("localhost"), }, Context: pmmapitests.Context, }) diff --git a/api-tests/server/settings_test.go b/api-tests/server/settings_test.go index 73ead0bd5c..049c872991 100644 --- a/api-tests/server/settings_test.go +++ b/api-tests/server/settings_test.go @@ -24,6 +24,7 @@ import ( "net/url" "testing" + "github.com/AlekSi/pointer" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" @@ -53,7 +54,7 @@ func TestSettings(t *testing.T) { assert.Equal(t, expectedSTTCheckIntervals, res.Payload.Settings.SttCheckIntervals) assert.Equal(t, "2592000s", res.Payload.Settings.DataRetention) assert.Equal(t, []string{"aws"}, res.Payload.Settings.AWSPartitions) - assert.False(t, res.Payload.Settings.UpdatesDisabled) + assert.True(t, res.Payload.Settings.UpdatesEnabled) assert.True(t, res.Payload.Settings.AlertingEnabled) t.Run("ChangeSettings", func(t *testing.T) { @@ -64,44 +65,29 @@ func TestSettings(t *testing.T) { defer restoreSettingsDefaults(t) res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableUpdates: true, + EnableUpdates: pointer.ToBool(false), }, Context: pmmapitests.Context, }) require.NoError(t, err) - assert.True(t, res.Payload.Settings.UpdatesDisabled) + assert.False(t, res.Payload.Settings.UpdatesEnabled) resg, err := serverClient.Default.ServerService.GetSettings(nil) require.NoError(t, err) - assert.True(t, resg.Payload.Settings.UpdatesDisabled) + assert.False(t, resg.Payload.Settings.UpdatesEnabled) res, err = serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableUpdates: true, + EnableUpdates: pointer.ToBool(true), }, Context: pmmapitests.Context, }) require.NoError(t, err) - assert.False(t, res.Payload.Settings.UpdatesDisabled) + assert.True(t, res.Payload.Settings.UpdatesEnabled) resg, err = serverClient.Default.ServerService.GetSettings(nil) require.NoError(t, err) - assert.False(t, resg.Payload.Settings.UpdatesDisabled) - }) - - t.Run("InvalidBothEnableAndDisableUpdates", func(t *testing.T) { - defer restoreSettingsDefaults(t) - - res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ - Body: server.ChangeSettingsBody{ - EnableUpdates: true, - DisableUpdates: true, - }, - Context: pmmapitests.Context, - }) - pmmapitests.AssertAPIErrorf(t, err, 400, codes.InvalidArgument, - `Invalid argument: both enable_updates and disable_updates are present.`) - assert.Empty(t, res) + assert.True(t, resg.Payload.Settings.UpdatesEnabled) }) }) @@ -110,7 +96,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableAlerting: true, + EnableAlerting: pointer.ToBool(false), }, Context: pmmapitests.Context, }) @@ -118,28 +104,13 @@ func TestSettings(t *testing.T) { assert.False(t, res.Payload.Settings.AlertingEnabled) }) - t.Run("InvalidBothEnableAndDisableAdvisors", func(t *testing.T) { - defer restoreSettingsDefaults(t) - - res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ - Body: server.ChangeSettingsBody{ - EnableStt: true, - DisableStt: true, - }, - Context: pmmapitests.Context, - }) - pmmapitests.AssertAPIErrorf(t, err, 400, codes.InvalidArgument, - `Invalid argument: both enable_stt and disable_stt are present.`) - assert.Empty(t, res) - }) - t.Run("EnableAdviorsAndEnableTelemetry", func(t *testing.T) { defer restoreSettingsDefaults(t) res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableStt: true, - EnableTelemetry: true, + EnableStt: pointer.ToBool(true), + EnableTelemetry: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -158,8 +129,8 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableStt: true, - DisableTelemetry: true, + EnableStt: pointer.ToBool(true), + EnableTelemetry: pointer.ToBool(false), }, Context: pmmapitests.Context, }) @@ -173,8 +144,8 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableStt: true, - EnableTelemetry: true, + EnableStt: pointer.ToBool(false), + EnableTelemetry: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -193,8 +164,8 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableStt: true, - DisableTelemetry: true, + EnableStt: pointer.ToBool(false), + EnableTelemetry: pointer.ToBool(false), }, Context: pmmapitests.Context, }) @@ -214,7 +185,7 @@ func TestSettings(t *testing.T) { // Ensure Telemetry is enabled res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableTelemetry: true, + EnableTelemetry: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -223,7 +194,7 @@ func TestSettings(t *testing.T) { res, err = serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableStt: true, + EnableStt: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -241,7 +212,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableStt: true, + EnableStt: pointer.ToBool(false), }, Context: pmmapitests.Context, }) @@ -259,7 +230,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableStt: true, + EnableStt: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -275,7 +246,7 @@ func TestSettings(t *testing.T) { t.Run("EnableAdvisorsWhileItIsEnabled", func(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableStt: true, + EnableStt: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -291,7 +262,7 @@ func TestSettings(t *testing.T) { t.Run("DisableTelemetryWhileAdvisorsEnabled", func(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableTelemetry: true, + EnableTelemetry: pointer.ToBool(false), }, Context: pmmapitests.Context, }) @@ -306,7 +277,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableTelemetry: true, + EnableTelemetry: pointer.ToBool(false), }, Context: pmmapitests.Context, }) @@ -324,7 +295,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableStt: true, + EnableStt: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -343,7 +314,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - EnableTelemetry: true, + EnableTelemetry: pointer.ToBool(true), }, Context: pmmapitests.Context, }) @@ -357,27 +328,12 @@ func TestSettings(t *testing.T) { }) }) - t.Run("InvalidBothEnableAndDisableTelemetry", func(t *testing.T) { - defer restoreSettingsDefaults(t) - - res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ - Body: server.ChangeSettingsBody{ - EnableTelemetry: true, - DisableTelemetry: true, - }, - Context: pmmapitests.Context, - }) - pmmapitests.AssertAPIErrorf(t, err, 400, codes.InvalidArgument, - `Invalid argument: both enable_telemetry and disable_telemetry are present.`) - assert.Empty(t, res) - }) - t.Run("InvalidPartition", func(t *testing.T) { defer restoreSettingsDefaults(t) res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - AWSPartitions: []string{"aws-123"}, + AWSPartitions: &server.ChangeSettingsParamsBodyAWSPartitions{Values: []string{"aws-123"}}, }, Context: pmmapitests.Context, }) @@ -392,7 +348,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ // We're expecting that 10 elements will be more than number of default partitions, which currently equals 6. - AWSPartitions: []string{"aws", "aws", "aws", "aws", "aws", "aws", "aws", "aws", "aws", "aws"}, + AWSPartitions: &server.ChangeSettingsParamsBodyAWSPartitions{Values: []string{"aws", "aws", "aws", "aws", "aws", "aws", "aws", "aws", "aws", "aws"}}, }, Context: pmmapitests.Context, }) @@ -544,7 +500,7 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - SSHKey: "some-invalid-ssh-key", + SSHKey: pointer.ToString("some-invalid-ssh-key"), }, Context: pmmapitests.Context, }) @@ -562,7 +518,7 @@ func TestSettings(t *testing.T) { "weTHzBE+lpXHdR2se1 qsandbox" res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - SSHKey: sshKey, + SSHKey: pointer.ToString(sshKey), }, Context: pmmapitests.Context, }) @@ -575,14 +531,14 @@ func TestSettings(t *testing.T) { res, err := serverClient.Default.ServerService.ChangeSettings(&server.ChangeSettingsParams{ Body: server.ChangeSettingsBody{ - DisableTelemetry: true, + EnableTelemetry: pointer.ToBool(false), MetricsResolutions: &server.ChangeSettingsParamsBodyMetricsResolutions{ Hr: "2s", Mr: "15s", Lr: "120s", // 2 minutes }, - DataRetention: "864000s", // 240 hours - AWSPartitions: []string{"aws-cn", "aws", "aws-cn"}, // duplicates are ok + DataRetention: "864000s", // 240 hours + AWSPartitions: &server.ChangeSettingsParamsBodyAWSPartitions{Values: []string{"aws-cn", "aws", "aws-cn"}}, // duplicates are ok }, Context: pmmapitests.Context, }) diff --git a/api/buf.yaml b/api/buf.yaml index 972cdf7977..a892de90c5 100644 --- a/api/buf.yaml +++ b/api/buf.yaml @@ -25,6 +25,9 @@ lint: - management/v1/node/node.proto - management/v1/role/role.proto - management/v1/service/service.proto + PACKAGE_VERSION_SUFFIX: + - common/common.proto # We don't want version this file + deps: - buf.build/googleapis/googleapis diff --git a/api/common/common.pb.go b/api/common/common.pb.go new file mode 100644 index 0000000000..2426f03a9f --- /dev/null +++ b/api/common/common.pb.go @@ -0,0 +1,154 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc (unknown) +// source: common/common.proto + +package common + +import ( + reflect "reflect" + sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// A wrapper for a string array. This type allows to distinguish between an empty array and a null value. +type StringArray struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *StringArray) Reset() { + *x = StringArray{} + if protoimpl.UnsafeEnabled { + mi := &file_common_common_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StringArray) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StringArray) ProtoMessage() {} + +func (x *StringArray) ProtoReflect() protoreflect.Message { + mi := &file_common_common_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StringArray.ProtoReflect.Descriptor instead. +func (*StringArray) Descriptor() ([]byte, []int) { + return file_common_common_proto_rawDescGZIP(), []int{0} +} + +func (x *StringArray) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +var File_common_common_proto protoreflect.FileDescriptor + +var file_common_common_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x25, 0x0a, + 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x16, 0x0a, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x42, 0x74, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x21, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, + 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x43, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x12, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_common_common_proto_rawDescOnce sync.Once + file_common_common_proto_rawDescData = file_common_common_proto_rawDesc +) + +func file_common_common_proto_rawDescGZIP() []byte { + file_common_common_proto_rawDescOnce.Do(func() { + file_common_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_common_proto_rawDescData) + }) + return file_common_common_proto_rawDescData +} + +var ( + file_common_common_proto_msgTypes = make([]protoimpl.MessageInfo, 1) + file_common_common_proto_goTypes = []interface{}{ + (*StringArray)(nil), // 0: common.StringArray + } +) + +var file_common_common_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_common_common_proto_init() } +func file_common_common_proto_init() { + if File_common_common_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_common_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StringArray); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_common_common_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_common_common_proto_goTypes, + DependencyIndexes: file_common_common_proto_depIdxs, + MessageInfos: file_common_common_proto_msgTypes, + }.Build() + File_common_common_proto = out.File + file_common_common_proto_rawDesc = nil + file_common_common_proto_goTypes = nil + file_common_common_proto_depIdxs = nil +} diff --git a/api/common/common.pb.validate.go b/api/common/common.pb.validate.go new file mode 100644 index 0000000000..1c35c6ce91 --- /dev/null +++ b/api/common/common.pb.validate.go @@ -0,0 +1,135 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: common/common.proto + +package common + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +) + +// Validate checks the field values on StringArray with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *StringArray) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on StringArray with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in StringArrayMultiError, or +// nil if none found. +func (m *StringArray) ValidateAll() error { + return m.validate(true) +} + +func (m *StringArray) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return StringArrayMultiError(errors) + } + + return nil +} + +// StringArrayMultiError is an error wrapping multiple validation errors +// returned by StringArray.ValidateAll() if the designated constraints aren't met. +type StringArrayMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StringArrayMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m StringArrayMultiError) AllErrors() []error { return m } + +// StringArrayValidationError is the validation error returned by +// StringArray.Validate if the designated constraints aren't met. +type StringArrayValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StringArrayValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StringArrayValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StringArrayValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StringArrayValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StringArrayValidationError) ErrorName() string { return "StringArrayValidationError" } + +// Error satisfies the builtin error interface +func (e StringArrayValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStringArray.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StringArrayValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StringArrayValidationError{} diff --git a/api/common/common.proto b/api/common/common.proto new file mode 100644 index 0000000000..c3c1547cee --- /dev/null +++ b/api/common/common.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +package common; + +// A wrapper for a string array. This type allows to distinguish between an empty array and a null value. +message StringArray { + repeated string values = 1; +} diff --git a/api/inventory/v1/json/client/services_service/change_service_responses.go b/api/inventory/v1/json/client/services_service/change_service_responses.go index 3006c74ddd..fe7a1df30e 100644 --- a/api/inventory/v1/json/client/services_service/change_service_responses.go +++ b/api/inventory/v1/json/client/services_service/change_service_responses.go @@ -125,16 +125,16 @@ type ChangeServiceBody struct { ServiceID string `json:"service_id,omitempty"` // environment - Environment string `json:"environment,omitempty"` + Environment *string `json:"environment,omitempty"` // cluster - Cluster string `json:"cluster,omitempty"` + Cluster *string `json:"cluster,omitempty"` // replication set - ReplicationSet string `json:"replication_set,omitempty"` + ReplicationSet *string `json:"replication_set,omitempty"` // external group - ExternalGroup string `json:"external_group,omitempty"` + ExternalGroup *string `json:"external_group,omitempty"` } // Validate validates this change service body diff --git a/api/inventory/v1/json/v1.json b/api/inventory/v1/json/v1.json index d23cea7658..e4912d7d93 100644 --- a/api/inventory/v1/json/v1.json +++ b/api/inventory/v1/json/v1.json @@ -10684,18 +10684,22 @@ "properties": { "cluster": { "type": "string", + "x-nullable": true, "x-order": 2 }, "environment": { "type": "string", + "x-nullable": true, "x-order": 1 }, "external_group": { "type": "string", + "x-nullable": true, "x-order": 4 }, "replication_set": { "type": "string", + "x-nullable": true, "x-order": 3 }, "service_id": { diff --git a/api/management/v1/backup/backups.pb.go b/api/management/v1/backup/backups.pb.go index fea1aebc9c..328ba65cf3 100644 --- a/api/management/v1/backup/backups.pb.go +++ b/api/management/v1/backup/backups.pb.go @@ -17,7 +17,6 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -909,22 +908,22 @@ type ChangeScheduledBackupRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ScheduledBackupId string `protobuf:"bytes,1,opt,name=scheduled_backup_id,json=scheduledBackupId,proto3" json:"scheduled_backup_id,omitempty"` - Enabled *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + ScheduledBackupId string `protobuf:"bytes,1,opt,name=scheduled_backup_id,json=scheduledBackupId,proto3" json:"scheduled_backup_id,omitempty"` + Enabled *bool `protobuf:"varint,2,opt,name=enabled,proto3,oneof" json:"enabled,omitempty"` // How often backup should be run in cron format. - CronExpression *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=cron_expression,json=cronExpression,proto3" json:"cron_expression,omitempty"` + CronExpression *string `protobuf:"bytes,3,opt,name=cron_expression,json=cronExpression,proto3,oneof" json:"cron_expression,omitempty"` // First backup wouldn't happen before this time. StartTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` // Name of backup. - Name *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + Name *string `protobuf:"bytes,5,opt,name=name,proto3,oneof" json:"name,omitempty"` // Human-readable description. - Description *wrapperspb.StringValue `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Description *string `protobuf:"bytes,6,opt,name=description,proto3,oneof" json:"description,omitempty"` // Delay between each retry. Should have a suffix in JSON: 1s, 1m, 1h. RetryInterval *durationpb.Duration `protobuf:"bytes,7,opt,name=retry_interval,json=retryInterval,proto3" json:"retry_interval,omitempty"` // How many times to retry a failed backup before giving up. - Retries *wrapperspb.UInt32Value `protobuf:"bytes,8,opt,name=retries,proto3" json:"retries,omitempty"` + Retries *uint32 `protobuf:"varint,8,opt,name=retries,proto3,oneof" json:"retries,omitempty"` // How many artifacts keep. 0 - unlimited. - Retention *wrapperspb.UInt32Value `protobuf:"bytes,9,opt,name=retention,proto3" json:"retention,omitempty"` + Retention *uint32 `protobuf:"varint,9,opt,name=retention,proto3,oneof" json:"retention,omitempty"` } func (x *ChangeScheduledBackupRequest) Reset() { @@ -966,18 +965,18 @@ func (x *ChangeScheduledBackupRequest) GetScheduledBackupId() string { return "" } -func (x *ChangeScheduledBackupRequest) GetEnabled() *wrapperspb.BoolValue { - if x != nil { - return x.Enabled +func (x *ChangeScheduledBackupRequest) GetEnabled() bool { + if x != nil && x.Enabled != nil { + return *x.Enabled } - return nil + return false } -func (x *ChangeScheduledBackupRequest) GetCronExpression() *wrapperspb.StringValue { - if x != nil { - return x.CronExpression +func (x *ChangeScheduledBackupRequest) GetCronExpression() string { + if x != nil && x.CronExpression != nil { + return *x.CronExpression } - return nil + return "" } func (x *ChangeScheduledBackupRequest) GetStartTime() *timestamppb.Timestamp { @@ -987,18 +986,18 @@ func (x *ChangeScheduledBackupRequest) GetStartTime() *timestamppb.Timestamp { return nil } -func (x *ChangeScheduledBackupRequest) GetName() *wrapperspb.StringValue { - if x != nil { - return x.Name +func (x *ChangeScheduledBackupRequest) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } - return nil + return "" } -func (x *ChangeScheduledBackupRequest) GetDescription() *wrapperspb.StringValue { - if x != nil { - return x.Description +func (x *ChangeScheduledBackupRequest) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description } - return nil + return "" } func (x *ChangeScheduledBackupRequest) GetRetryInterval() *durationpb.Duration { @@ -1008,18 +1007,18 @@ func (x *ChangeScheduledBackupRequest) GetRetryInterval() *durationpb.Duration { return nil } -func (x *ChangeScheduledBackupRequest) GetRetries() *wrapperspb.UInt32Value { - if x != nil { - return x.Retries +func (x *ChangeScheduledBackupRequest) GetRetries() uint32 { + if x != nil && x.Retries != nil { + return *x.Retries } - return nil + return 0 } -func (x *ChangeScheduledBackupRequest) GetRetention() *wrapperspb.UInt32Value { - if x != nil { - return x.Retention +func (x *ChangeScheduledBackupRequest) GetRetention() uint32 { + if x != nil && x.Retention != nil { + return *x.Retention } - return nil + return 0 } type ChangeScheduledBackupResponse struct { @@ -1338,9 +1337,7 @@ var file_management_v1_backup_backups_proto_rawDesc = []byte{ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, @@ -1496,211 +1493,207 @@ var file_management_v1_backup_backups_proto_rawDesc = []byte{ 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x10, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x22, 0xb7, 0x04, 0x0a, 0x1c, 0x43, + 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x22, 0xf6, 0x03, 0x0a, 0x1c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x11, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0f, 0x63, 0x72, - 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, + 0x63, 0x72, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, - 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x12, 0x36, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, - 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1f, 0x0a, 0x1d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x11, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x22, 0x1f, - 0x0a, 0x1d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x7e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x22, - 0x4c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, - 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x39, 0x0a, - 0x08, 0x4c, 0x6f, 0x67, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x75, - 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x75, - 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0xb7, 0x10, 0x0a, 0x0e, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe9, 0x03, 0x0a, 0x0b, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x61, 0x63, + 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x0e, + 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0d, 0x72, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1d, + 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x48, + 0x04, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, + 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, + 0x48, 0x05, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x12, 0x0a, 0x10, + 0x5f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x1f, 0x0a, 0x1d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x11, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x22, 0x1f, 0x0a, + 0x1d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7e, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x22, 0x4c, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x27, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x39, 0x0a, 0x08, + 0x4c, 0x6f, 0x67, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0xb7, 0x10, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe9, 0x03, 0x0a, 0x0b, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x03, 0x92, 0x41, 0xe8, - 0x02, 0x1a, 0xe5, 0x02, 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x20, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3a, 0x0a, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x20, 0x2d, - 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x0a, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x58, - 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, 0x20, 0x64, 0x69, 0x66, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x78, 0x62, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x0a, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, - 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, 0x4c, 0x45, - 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, 0x20, 0x78, 0x74, - 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, - 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0xce, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, - 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x03, 0x92, 0x41, 0xe8, 0x02, + 0x1a, 0xe5, 0x02, 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, + 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3a, 0x0a, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, + 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, + 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x20, 0x2d, 0x20, + 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x0a, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x58, 0x54, + 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x78, 0x62, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x0a, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4f, + 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, 0x4c, 0x45, 0x5f, + 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, 0x20, 0x78, 0x74, 0x72, + 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x4d, + 0x79, 0x53, 0x51, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, + 0x61, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, + 0x2a, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, + 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0xce, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x76, 0x31, 0x2f, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x76, 0x31, 0x2f, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xf8, 0x04, 0x0a, 0x0d, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1f, 0x2e, 0x62, 0x61, 0x63, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xf8, 0x04, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa3, 0x04, - 0x92, 0x41, 0xef, 0x03, 0x1a, 0xec, 0x03, 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, - 0x64, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3a, 0x0a, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, - 0x4b, 0x55, 0x50, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, - 0x44, 0x20, 0x2d, 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, - 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x0a, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, 0x20, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x78, 0x62, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x0a, 0x45, 0x52, 0x52, 0x4f, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa3, 0x04, 0x92, + 0x41, 0xef, 0x03, 0x1a, 0xec, 0x03, 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, + 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3a, 0x0a, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, + 0x55, 0x50, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, + 0x20, 0x2d, 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x73, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x6f, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x0a, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, 0x20, 0x64, 0x69, + 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x20, 0x6f, 0x66, 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x78, 0x62, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x0a, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, + 0x4c, 0x45, 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, 0x20, + 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, + 0x68, 0x20, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x20, 0x61, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x0a, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, - 0x42, 0x4c, 0x45, 0x5f, 0x58, 0x54, 0x52, 0x41, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x20, 0x2d, - 0x20, 0x78, 0x74, 0x72, 0x61, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x0a, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, - 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x59, 0x53, 0x51, - 0x4c, 0x20, 0x2d, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x4d, 0x79, 0x53, 0x51, 0x4c, - 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, - 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x9f, - 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x26, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, - 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, - 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x27, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x12, 0x27, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, - 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x12, 0x72, - 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, + 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, + 0x20, 0x2d, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x4c, 0x6f, - 0x67, 0x73, 0x42, 0x9c, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x76, 0x31, 0xa2, 0x02, - 0x03, 0x42, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x56, 0x31, - 0xca, 0x02, 0x09, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x15, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0a, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x3a, 0x56, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x52, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x9f, 0x01, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x26, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, + 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x12, + 0xa4, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x27, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x12, 0x27, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x12, 0x72, 0x0a, + 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x2f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, + 0x73, 0x42, 0x9c, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x42, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x09, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x15, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x0a, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1742,9 +1735,6 @@ var ( (*v1.MongoDBService)(nil), // 21: inventory.v1.MongoDBService (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp (BackupMode)(0), // 23: backup.v1.BackupMode - (*wrapperspb.BoolValue)(nil), // 24: google.protobuf.BoolValue - (*wrapperspb.StringValue)(nil), // 25: google.protobuf.StringValue - (*wrapperspb.UInt32Value)(nil), // 26: google.protobuf.UInt32Value } ) @@ -1765,36 +1755,30 @@ var file_management_v1_backup_backups_proto_depIdxs = []int32{ 23, // 13: backup.v1.ScheduleBackupRequest.mode:type_name -> backup.v1.BackupMode 19, // 14: backup.v1.ScheduleBackupRequest.data_model:type_name -> backup.v1.DataModel 6, // 15: backup.v1.ListScheduledBackupsResponse.scheduled_backups:type_name -> backup.v1.ScheduledBackup - 24, // 16: backup.v1.ChangeScheduledBackupRequest.enabled:type_name -> google.protobuf.BoolValue - 25, // 17: backup.v1.ChangeScheduledBackupRequest.cron_expression:type_name -> google.protobuf.StringValue - 22, // 18: backup.v1.ChangeScheduledBackupRequest.start_time:type_name -> google.protobuf.Timestamp - 25, // 19: backup.v1.ChangeScheduledBackupRequest.name:type_name -> google.protobuf.StringValue - 25, // 20: backup.v1.ChangeScheduledBackupRequest.description:type_name -> google.protobuf.StringValue - 18, // 21: backup.v1.ChangeScheduledBackupRequest.retry_interval:type_name -> google.protobuf.Duration - 26, // 22: backup.v1.ChangeScheduledBackupRequest.retries:type_name -> google.protobuf.UInt32Value - 26, // 23: backup.v1.ChangeScheduledBackupRequest.retention:type_name -> google.protobuf.UInt32Value - 17, // 24: backup.v1.GetLogsResponse.logs:type_name -> backup.v1.LogChunk - 0, // 25: backup.v1.BackupsService.StartBackup:input_type -> backup.v1.StartBackupRequest - 2, // 26: backup.v1.BackupsService.ListArtifactCompatibleServices:input_type -> backup.v1.ListArtifactCompatibleServicesRequest - 4, // 27: backup.v1.BackupsService.RestoreBackup:input_type -> backup.v1.RestoreBackupRequest - 7, // 28: backup.v1.BackupsService.ScheduleBackup:input_type -> backup.v1.ScheduleBackupRequest - 9, // 29: backup.v1.BackupsService.ListScheduledBackups:input_type -> backup.v1.ListScheduledBackupsRequest - 11, // 30: backup.v1.BackupsService.ChangeScheduledBackup:input_type -> backup.v1.ChangeScheduledBackupRequest - 13, // 31: backup.v1.BackupsService.RemoveScheduledBackup:input_type -> backup.v1.RemoveScheduledBackupRequest - 15, // 32: backup.v1.BackupsService.GetLogs:input_type -> backup.v1.GetLogsRequest - 1, // 33: backup.v1.BackupsService.StartBackup:output_type -> backup.v1.StartBackupResponse - 3, // 34: backup.v1.BackupsService.ListArtifactCompatibleServices:output_type -> backup.v1.ListArtifactCompatibleServicesResponse - 5, // 35: backup.v1.BackupsService.RestoreBackup:output_type -> backup.v1.RestoreBackupResponse - 8, // 36: backup.v1.BackupsService.ScheduleBackup:output_type -> backup.v1.ScheduleBackupResponse - 10, // 37: backup.v1.BackupsService.ListScheduledBackups:output_type -> backup.v1.ListScheduledBackupsResponse - 12, // 38: backup.v1.BackupsService.ChangeScheduledBackup:output_type -> backup.v1.ChangeScheduledBackupResponse - 14, // 39: backup.v1.BackupsService.RemoveScheduledBackup:output_type -> backup.v1.RemoveScheduledBackupResponse - 16, // 40: backup.v1.BackupsService.GetLogs:output_type -> backup.v1.GetLogsResponse - 33, // [33:41] is the sub-list for method output_type - 25, // [25:33] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 22, // 16: backup.v1.ChangeScheduledBackupRequest.start_time:type_name -> google.protobuf.Timestamp + 18, // 17: backup.v1.ChangeScheduledBackupRequest.retry_interval:type_name -> google.protobuf.Duration + 17, // 18: backup.v1.GetLogsResponse.logs:type_name -> backup.v1.LogChunk + 0, // 19: backup.v1.BackupsService.StartBackup:input_type -> backup.v1.StartBackupRequest + 2, // 20: backup.v1.BackupsService.ListArtifactCompatibleServices:input_type -> backup.v1.ListArtifactCompatibleServicesRequest + 4, // 21: backup.v1.BackupsService.RestoreBackup:input_type -> backup.v1.RestoreBackupRequest + 7, // 22: backup.v1.BackupsService.ScheduleBackup:input_type -> backup.v1.ScheduleBackupRequest + 9, // 23: backup.v1.BackupsService.ListScheduledBackups:input_type -> backup.v1.ListScheduledBackupsRequest + 11, // 24: backup.v1.BackupsService.ChangeScheduledBackup:input_type -> backup.v1.ChangeScheduledBackupRequest + 13, // 25: backup.v1.BackupsService.RemoveScheduledBackup:input_type -> backup.v1.RemoveScheduledBackupRequest + 15, // 26: backup.v1.BackupsService.GetLogs:input_type -> backup.v1.GetLogsRequest + 1, // 27: backup.v1.BackupsService.StartBackup:output_type -> backup.v1.StartBackupResponse + 3, // 28: backup.v1.BackupsService.ListArtifactCompatibleServices:output_type -> backup.v1.ListArtifactCompatibleServicesResponse + 5, // 29: backup.v1.BackupsService.RestoreBackup:output_type -> backup.v1.RestoreBackupResponse + 8, // 30: backup.v1.BackupsService.ScheduleBackup:output_type -> backup.v1.ScheduleBackupResponse + 10, // 31: backup.v1.BackupsService.ListScheduledBackups:output_type -> backup.v1.ListScheduledBackupsResponse + 12, // 32: backup.v1.BackupsService.ChangeScheduledBackup:output_type -> backup.v1.ChangeScheduledBackupResponse + 14, // 33: backup.v1.BackupsService.RemoveScheduledBackup:output_type -> backup.v1.RemoveScheduledBackupResponse + 16, // 34: backup.v1.BackupsService.GetLogs:output_type -> backup.v1.GetLogsResponse + 27, // [27:35] is the sub-list for method output_type + 19, // [19:27] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_management_v1_backup_backups_proto_init() } @@ -2021,6 +2005,7 @@ func file_management_v1_backup_backups_proto_init() { } } } + file_management_v1_backup_backups_proto_msgTypes[11].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/management/v1/backup/backups.pb.validate.go b/api/management/v1/backup/backups.pb.validate.go index 329152a321..dd2835e656 100644 --- a/api/management/v1/backup/backups.pb.validate.go +++ b/api/management/v1/backup/backups.pb.validate.go @@ -1681,64 +1681,6 @@ func (m *ChangeScheduledBackupRequest) validate(all bool) error { errors = append(errors, err) } - if all { - switch v := interface{}(m.GetEnabled()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Enabled", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Enabled", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetEnabled()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeScheduledBackupRequestValidationError{ - field: "Enabled", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetCronExpression()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "CronExpression", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "CronExpression", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetCronExpression()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeScheduledBackupRequestValidationError{ - field: "CronExpression", - reason: "embedded message failed validation", - cause: err, - } - } - } - if all { switch v := interface{}(m.GetStartTime()).(type) { case interface{ ValidateAll() error }: @@ -1768,64 +1710,6 @@ func (m *ChangeScheduledBackupRequest) validate(all bool) error { } } - if all { - switch v := interface{}(m.GetName()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Name", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Name", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetName()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeScheduledBackupRequestValidationError{ - field: "Name", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetDescription()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Description", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Description", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetDescription()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeScheduledBackupRequestValidationError{ - field: "Description", - reason: "embedded message failed validation", - cause: err, - } - } - } - if all { switch v := interface{}(m.GetRetryInterval()).(type) { case interface{ ValidateAll() error }: @@ -1855,62 +1739,28 @@ func (m *ChangeScheduledBackupRequest) validate(all bool) error { } } - if all { - switch v := interface{}(m.GetRetries()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Retries", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Retries", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetRetries()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeScheduledBackupRequestValidationError{ - field: "Retries", - reason: "embedded message failed validation", - cause: err, - } - } + if m.Enabled != nil { + // no validation rules for Enabled } - if all { - switch v := interface{}(m.GetRetention()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Retention", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeScheduledBackupRequestValidationError{ - field: "Retention", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetRetention()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ChangeScheduledBackupRequestValidationError{ - field: "Retention", - reason: "embedded message failed validation", - cause: err, - } - } + if m.CronExpression != nil { + // no validation rules for CronExpression + } + + if m.Name != nil { + // no validation rules for Name + } + + if m.Description != nil { + // no validation rules for Description + } + + if m.Retries != nil { + // no validation rules for Retries + } + + if m.Retention != nil { + // no validation rules for Retention } if len(errors) > 0 { diff --git a/api/management/v1/backup/backups.proto b/api/management/v1/backup/backups.proto index e718d4a778..75f71aeae9 100644 --- a/api/management/v1/backup/backups.proto +++ b/api/management/v1/backup/backups.proto @@ -5,7 +5,6 @@ package backup.v1; import "google/api/annotations.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; -import "google/protobuf/wrappers.proto"; import "inventory/v1/services.proto"; import "management/v1/backup/common.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; @@ -142,21 +141,21 @@ message ListScheduledBackupsResponse { message ChangeScheduledBackupRequest { string scheduled_backup_id = 1 [(validate.rules).string.min_len = 1]; - google.protobuf.BoolValue enabled = 2; + optional bool enabled = 2; // How often backup should be run in cron format. - google.protobuf.StringValue cron_expression = 3; + optional string cron_expression = 3; // First backup wouldn't happen before this time. google.protobuf.Timestamp start_time = 4; // Name of backup. - google.protobuf.StringValue name = 5; + optional string name = 5; // Human-readable description. - google.protobuf.StringValue description = 6; + optional string description = 6; // Delay between each retry. Should have a suffix in JSON: 1s, 1m, 1h. google.protobuf.Duration retry_interval = 7; // How many times to retry a failed backup before giving up. - google.protobuf.UInt32Value retries = 8; + optional uint32 retries = 8; // How many artifacts keep. 0 - unlimited. - google.protobuf.UInt32Value retention = 9; + optional uint32 retention = 9; } message ChangeScheduledBackupResponse {} diff --git a/api/management/v1/backup/json/backup.json b/api/management/v1/backup/json/backup.json index 7e7e3f96c4..002d660b69 100644 --- a/api/management/v1/backup/json/backup.json +++ b/api/management/v1/backup/json/backup.json @@ -400,32 +400,38 @@ "cron_expression": { "description": "How often backup should be run in cron format.", "type": "string", + "x-nullable": true, "x-order": 2 }, "description": { "description": "Human-readable description.", "type": "string", + "x-nullable": true, "x-order": 5 }, "enabled": { "type": "boolean", + "x-nullable": true, "x-order": 1 }, "name": { "description": "Name of backup.", "type": "string", + "x-nullable": true, "x-order": 4 }, "retention": { "description": "How many artifacts keep. 0 - unlimited.", "type": "integer", "format": "int64", + "x-nullable": true, "x-order": 8 }, "retries": { "description": "How many times to retry a failed backup before giving up.", "type": "integer", "format": "int64", + "x-nullable": true, "x-order": 7 }, "retry_interval": { diff --git a/api/management/v1/backup/json/client/backups_service/change_scheduled_backup_responses.go b/api/management/v1/backup/json/client/backups_service/change_scheduled_backup_responses.go index a8d239f5ab..f40496960d 100644 --- a/api/management/v1/backup/json/client/backups_service/change_scheduled_backup_responses.go +++ b/api/management/v1/backup/json/client/backups_service/change_scheduled_backup_responses.go @@ -126,29 +126,29 @@ type ChangeScheduledBackupBody struct { ScheduledBackupID string `json:"scheduled_backup_id,omitempty"` // enabled - Enabled bool `json:"enabled,omitempty"` + Enabled *bool `json:"enabled,omitempty"` // How often backup should be run in cron format. - CronExpression string `json:"cron_expression,omitempty"` + CronExpression *string `json:"cron_expression,omitempty"` // First backup wouldn't happen before this time. // Format: date-time StartTime strfmt.DateTime `json:"start_time,omitempty"` // Name of backup. - Name string `json:"name,omitempty"` + Name *string `json:"name,omitempty"` // Human-readable description. - Description string `json:"description,omitempty"` + Description *string `json:"description,omitempty"` // Delay between each retry. Should have a suffix in JSON: 1s, 1m, 1h. RetryInterval string `json:"retry_interval,omitempty"` // How many times to retry a failed backup before giving up. - Retries int64 `json:"retries,omitempty"` + Retries *int64 `json:"retries,omitempty"` // How many artifacts keep. 0 - unlimited. - Retention int64 `json:"retention,omitempty"` + Retention *int64 `json:"retention,omitempty"` } // Validate validates this change scheduled backup body diff --git a/api/management/v1/checks.pb.go b/api/management/v1/checks.pb.go index 889c3ed508..33117e3296 100644 --- a/api/management/v1/checks.pb.go +++ b/api/management/v1/checks.pb.go @@ -471,8 +471,8 @@ type SecurityCheck struct { // Machine-readable name (ID) that is used in expression. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // True if that check is disabled. - Disabled bool `protobuf:"varint,2,opt,name=disabled,proto3" json:"disabled,omitempty"` + // True if that check is enabled. + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` // Long human-readable description. Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` // Short human-readable summary. @@ -522,9 +522,9 @@ func (x *SecurityCheck) GetName() string { return "" } -func (x *SecurityCheck) GetDisabled() bool { +func (x *SecurityCheck) GetEnabled() bool { if x != nil { - return x.Disabled + return x.Enabled } return false } @@ -657,9 +657,8 @@ type ChangeSecurityCheckParams struct { unknownFields protoimpl.UnknownFields // The name of the check to change. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enable bool `protobuf:"varint,2,opt,name=enable,proto3" json:"enable,omitempty"` - Disable bool `protobuf:"varint,3,opt,name=disable,proto3" json:"disable,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enable *bool `protobuf:"varint,2,opt,name=enable,proto3,oneof" json:"enable,omitempty"` // check execution interval. Interval SecurityCheckInterval `protobuf:"varint,4,opt,name=interval,proto3,enum=management.v1.SecurityCheckInterval" json:"interval,omitempty"` } @@ -704,15 +703,8 @@ func (x *ChangeSecurityCheckParams) GetName() string { } func (x *ChangeSecurityCheckParams) GetEnable() bool { - if x != nil { - return x.Enable - } - return false -} - -func (x *ChangeSecurityCheckParams) GetDisable() bool { - if x != nil { - return x.Disable + if x != nil && x.Enable != nil { + return *x.Enable } return false } @@ -1526,274 +1518,274 @@ var file_management_v1_checks_proto_rawDesc = []byte{ 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf8, 0x01, 0x0a, 0x0d, 0x53, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf6, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x06, 0x66, 0x61, - 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, - 0x6f, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, - 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0xc5, 0x01, 0x0a, 0x07, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, 0xa3, 0x01, - 0x0a, 0x19, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x22, 0x24, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x63, 0x0a, 0x1f, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x32, - 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x52, - 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, + 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x08, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x22, 0xc5, 0x01, 0x0a, 0x07, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x19, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, + 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x06, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x14, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x32, 0x0a, 0x08, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x08, 0x61, 0x64, 0x76, - 0x69, 0x73, 0x6f, 0x72, 0x73, 0x22, 0x5f, 0x0a, 0x1b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x39, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x73, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, - 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x22, - 0x4e, 0x0a, 0x17, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, - 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, - 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x22, - 0x1a, 0x0a, 0x18, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0xae, 0x01, 0x0a, 0x15, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, - 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x56, 0x41, 0x4c, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, - 0x0a, 0x20, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, - 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x56, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, - 0x52, 0x44, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, - 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x56, 0x41, 0x4c, 0x5f, - 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, - 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x56, 0x41, 0x4c, 0x5f, 0x52, 0x41, 0x52, 0x45, 0x10, 0x03, 0x2a, 0xa1, 0x01, 0x0a, - 0x12, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x61, 0x6d, - 0x69, 0x6c, 0x79, 0x12, 0x24, 0x0a, 0x20, 0x41, 0x44, 0x56, 0x49, 0x53, 0x4f, 0x52, 0x5f, 0x43, - 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x56, - 0x49, 0x53, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x41, 0x4d, 0x49, 0x4c, - 0x59, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x44, 0x56, - 0x49, 0x53, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x41, 0x4d, 0x49, 0x4c, - 0x59, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x51, 0x4c, 0x10, 0x02, 0x12, 0x20, - 0x0a, 0x1c, 0x41, 0x44, 0x56, 0x49, 0x53, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, - 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x10, 0x03, - 0x32, 0xa6, 0x10, 0x0a, 0x15, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8f, 0x02, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x12, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa3, 0x01, 0x92, 0x41, 0x65, 0x12, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x1a, 0x4d, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, - 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x01, 0x2a, 0x22, 0x30, 0x2f, 0x76, 0x31, 0x2f, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x24, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x63, 0x0a, + 0x1f, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x02, + 0x18, 0x01, 0x22, 0x32, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x52, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x06, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, + 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, + 0x08, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x22, 0x5f, 0x0a, 0x1b, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x73, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x67, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x73, 0x22, 0x4e, 0x0a, 0x17, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6c, + 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x69, 0x6c, 0x65, + 0x6e, 0x63, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, + 0xae, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x45, 0x43, + 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x54, 0x45, + 0x52, 0x56, 0x41, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, + 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x56, 0x41, 0x4c, 0x5f, 0x53, 0x54, + 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x43, 0x55, + 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x56, 0x41, 0x4c, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x20, + 0x0a, 0x1c, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, + 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x56, 0x41, 0x4c, 0x5f, 0x52, 0x41, 0x52, 0x45, 0x10, 0x03, + 0x2a, 0xa1, 0x01, 0x0a, 0x12, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x24, 0x0a, 0x20, 0x41, 0x44, 0x56, 0x49, 0x53, + 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, + 0x1a, 0x41, 0x44, 0x56, 0x49, 0x53, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, + 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x10, 0x01, 0x12, 0x23, 0x0a, + 0x1f, 0x41, 0x44, 0x56, 0x49, 0x53, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, + 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x51, 0x4c, + 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x44, 0x56, 0x49, 0x53, 0x4f, 0x52, 0x5f, 0x43, 0x48, + 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, + 0x44, 0x42, 0x10, 0x03, 0x32, 0xa6, 0x10, 0x0a, 0x15, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8f, + 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa3, 0x01, 0x92, 0x41, 0x65, + 0x12, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x4d, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, + 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x73, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x01, 0x2a, 0x22, 0x30, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x12, 0xe5, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x82, 0x01, 0x92, 0x41, 0x4a, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x1a, 0x35, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, + 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0xf2, 0x01, 0x0a, 0x10, 0x54, 0x6f, 0x67, + 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x26, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, + 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8c, + 0x01, 0x92, 0x41, 0x4d, 0x12, 0x12, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x20, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x1a, 0x35, 0x53, 0x69, 0x6c, 0x65, 0x6e, 0x63, + 0x65, 0x2f, 0x55, 0x6e, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6c, 0x65, 0x72, + 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, + 0x63, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x58, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xe5, 0x01, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x12, 0x25, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x82, 0x01, 0x92, 0x41, 0x4a, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x1a, 0x35, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, - 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x12, 0xf2, 0x01, 0x0a, 0x10, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8c, 0x01, 0x92, 0x41, 0x4d, - 0x12, 0x12, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x41, - 0x6c, 0x65, 0x72, 0x74, 0x1a, 0x35, 0x53, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x2f, 0x55, 0x6e, - 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x58, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x88, 0x02, 0x01, 0x12, 0x8e, 0x02, 0x0a, 0x17, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x92, 0x41, 0x55, 0x12, 0x1a, 0x47, 0x65, 0x74, 0x20, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x35, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, - 0x54, 0x6f, 0x6f, 0x6c, 0x27, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x58, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x88, 0x02, 0x01, 0x12, 0xcf, 0x02, 0x0a, 0x13, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe0, 0x01, 0x92, 0x41, 0xae, 0x01, - 0x12, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x1a, 0x94, 0x01, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x73, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x54, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x66, - 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, - 0x6e, 0x27, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0xe1, 0x01, 0x0a, - 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x12, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x76, 0x92, 0x41, 0x46, 0x12, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x1a, 0x2f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, - 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x76, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x88, 0x02, 0x01, 0x12, 0x8e, 0x02, + 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x92, 0x41, 0x55, 0x12, 0x1a, + 0x47, 0x65, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x20, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x35, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x73, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x54, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x27, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x2e, 0x58, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0xc5, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, - 0x73, 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x88, 0x02, 0x01, 0x12, 0xcf, + 0x02, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe0, 0x01, + 0x92, 0x41, 0xae, 0x01, 0x12, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x1a, 0x94, 0x01, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x65, 0x73, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, + 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x20, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x61, + 0x72, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x41, 0x6c, 0x6c, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, + 0x64, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x20, 0x61, 0x72, 0x65, 0x6e, 0x27, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x76, 0x31, + 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x12, 0xe1, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x76, 0x92, 0x41, + 0x46, 0x12, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x20, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x1a, 0x2f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, + 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, + 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0xc5, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x76, + 0x69, 0x73, 0x6f, 0x72, 0x73, 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6c, 0x92, 0x41, 0x42, 0x12, - 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x1a, 0x31, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x64, 0x76, 0x69, 0x73, - 0x6f, 0x72, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x8e, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, + 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6c, + 0x92, 0x41, 0x42, 0x12, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, + 0x72, 0x73, 0x1a, 0x31, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, + 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x8e, 0x02, 0x0a, + 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x92, 0x41, 0x6a, - 0x12, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x1a, 0x50, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x2f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x20, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x20, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x20, 0x62, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, - 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x2f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0xac, 0x01, 0x0a, 0x11, 0x63, 0x6f, - 0x6d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, - 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, - 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x4d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0d, 0x4d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x19, 0x4d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, + 0x01, 0x92, 0x41, 0x6a, 0x12, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x1a, 0x50, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x54, + 0x6f, 0x6f, 0x6c, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x20, 0x62, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x2f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0xac, 0x01, + 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, + 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x19, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2157,6 +2149,7 @@ func file_management_v1_checks_proto_init() { } } } + file_management_v1_checks_proto_msgTypes[5].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/management/v1/checks.pb.validate.go b/api/management/v1/checks.pb.validate.go index 3fdaf8fc7b..a70d3e1771 100644 --- a/api/management/v1/checks.pb.validate.go +++ b/api/management/v1/checks.pb.validate.go @@ -412,7 +412,7 @@ func (m *SecurityCheck) validate(all bool) error { // no validation rules for Name - // no validation rules for Disabled + // no validation rules for Enabled // no validation rules for Description @@ -666,12 +666,12 @@ func (m *ChangeSecurityCheckParams) validate(all bool) error { // no validation rules for Name - // no validation rules for Enable - - // no validation rules for Disable - // no validation rules for Interval + if m.Enable != nil { + // no validation rules for Enable + } + if len(errors) > 0 { return ChangeSecurityCheckParamsMultiError(errors) } diff --git a/api/management/v1/checks.proto b/api/management/v1/checks.proto index 8d8220ea4d..73016aac63 100644 --- a/api/management/v1/checks.proto +++ b/api/management/v1/checks.proto @@ -78,8 +78,8 @@ message CheckResult { message SecurityCheck { // Machine-readable name (ID) that is used in expression. string name = 1; - // True if that check is disabled. - bool disabled = 2; + // True if that check is enabled. + bool enabled = 2; // Long human-readable description. string description = 3; // Short human-readable summary. @@ -109,8 +109,7 @@ message Advisor { message ChangeSecurityCheckParams { // The name of the check to change. string name = 1; - bool enable = 2; - bool disable = 3; + optional bool enable = 2; // check execution interval. SecurityCheckInterval interval = 4; } diff --git a/api/management/v1/json/client/security_checks_service/change_security_checks_responses.go b/api/management/v1/json/client/security_checks_service/change_security_checks_responses.go index 6519c99b41..5a903a889b 100644 --- a/api/management/v1/json/client/security_checks_service/change_security_checks_responses.go +++ b/api/management/v1/json/client/security_checks_service/change_security_checks_responses.go @@ -366,10 +366,7 @@ type ChangeSecurityChecksParamsBodyParamsItems0 struct { Name string `json:"name,omitempty"` // enable - Enable bool `json:"enable,omitempty"` - - // disable - Disable bool `json:"disable,omitempty"` + Enable *bool `json:"enable,omitempty"` // SecurityCheckInterval represents possible execution interval values for checks. // Enum: [SECURITY_CHECK_INTERVAL_UNSPECIFIED SECURITY_CHECK_INTERVAL_STANDARD SECURITY_CHECK_INTERVAL_FREQUENT SECURITY_CHECK_INTERVAL_RARE] diff --git a/api/management/v1/json/client/security_checks_service/list_advisors_responses.go b/api/management/v1/json/client/security_checks_service/list_advisors_responses.go index 827ac596c0..af08917273 100644 --- a/api/management/v1/json/client/security_checks_service/list_advisors_responses.go +++ b/api/management/v1/json/client/security_checks_service/list_advisors_responses.go @@ -480,8 +480,8 @@ type ListAdvisorsOKBodyAdvisorsItems0ChecksItems0 struct { // Machine-readable name (ID) that is used in expression. Name string `json:"name,omitempty"` - // True if that check is disabled. - Disabled bool `json:"disabled,omitempty"` + // True if that check is enabled. + Enabled bool `json:"enabled,omitempty"` // Long human-readable description. Description string `json:"description,omitempty"` diff --git a/api/management/v1/json/client/security_checks_service/list_security_checks_responses.go b/api/management/v1/json/client/security_checks_service/list_security_checks_responses.go index 5de7d539d9..52ea5a99cc 100644 --- a/api/management/v1/json/client/security_checks_service/list_security_checks_responses.go +++ b/api/management/v1/json/client/security_checks_service/list_security_checks_responses.go @@ -367,8 +367,8 @@ type ListSecurityChecksOKBodyChecksItems0 struct { // Machine-readable name (ID) that is used in expression. Name string `json:"name,omitempty"` - // True if that check is disabled. - Disabled bool `json:"disabled,omitempty"` + // True if that check is enabled. + Enabled bool `json:"enabled,omitempty"` // Long human-readable description. Description string `json:"description,omitempty"` diff --git a/api/management/v1/json/v1.json b/api/management/v1/json/v1.json index 20486919ee..00450ae260 100644 --- a/api/management/v1/json/v1.json +++ b/api/management/v1/json/v1.json @@ -1429,8 +1429,8 @@ "type": "string", "x-order": 2 }, - "disabled": { - "description": "True if that check is disabled.", + "enabled": { + "description": "True if that check is enabled.", "type": "boolean", "x-order": 1 }, @@ -6256,12 +6256,9 @@ "description": "ChangeSecurityCheckParams specifies a single check parameters.", "type": "object", "properties": { - "disable": { - "type": "boolean", - "x-order": 2 - }, "enable": { "type": "boolean", + "x-nullable": true, "x-order": 1 }, "interval": { @@ -6274,7 +6271,7 @@ "SECURITY_CHECK_INTERVAL_FREQUENT", "SECURITY_CHECK_INTERVAL_RARE" ], - "x-order": 3 + "x-order": 2 }, "name": { "description": "The name of the check to change.", @@ -6651,8 +6648,8 @@ "type": "string", "x-order": 2 }, - "disabled": { - "description": "True if that check is disabled.", + "enabled": { + "description": "True if that check is enabled.", "type": "boolean", "x-order": 1 }, diff --git a/api/management/v1/role/json/client/role_service/update_role_responses.go b/api/management/v1/role/json/client/role_service/update_role_responses.go index ae260c6ff3..601c677e2b 100644 --- a/api/management/v1/role/json/client/role_service/update_role_responses.go +++ b/api/management/v1/role/json/client/role_service/update_role_responses.go @@ -125,13 +125,13 @@ type UpdateRoleBody struct { RoleID int64 `json:"role_id,omitempty"` // title - Title string `json:"title,omitempty"` + Title *string `json:"title,omitempty"` // filter - Filter string `json:"filter,omitempty"` + Filter *string `json:"filter,omitempty"` // description - Description string `json:"description,omitempty"` + Description *string `json:"description,omitempty"` } // Validate validates this update role body diff --git a/api/management/v1/role/json/role.json b/api/management/v1/role/json/role.json index 049d00883d..1e8b5d4709 100644 --- a/api/management/v1/role/json/role.json +++ b/api/management/v1/role/json/role.json @@ -497,10 +497,12 @@ "properties": { "description": { "type": "string", + "x-nullable": true, "x-order": 3 }, "filter": { "type": "string", + "x-nullable": true, "x-order": 2 }, "role_id": { @@ -510,6 +512,7 @@ }, "title": { "type": "string", + "x-nullable": true, "x-order": 1 } } diff --git a/api/management/v1/role/role.pb.go b/api/management/v1/role/role.pb.go index 3b09b23d99..8762ca414f 100644 --- a/api/management/v1/role/role.pb.go +++ b/api/management/v1/role/role.pb.go @@ -139,10 +139,10 @@ type UpdateRoleRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RoleId uint32 `protobuf:"varint,1,opt,name=role_id,json=roleId,proto3" json:"role_id,omitempty"` - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` - Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + RoleId uint32 `protobuf:"varint,1,opt,name=role_id,json=roleId,proto3" json:"role_id,omitempty"` + Title *string `protobuf:"bytes,2,opt,name=title,proto3,oneof" json:"title,omitempty"` + Filter *string `protobuf:"bytes,3,opt,name=filter,proto3,oneof" json:"filter,omitempty"` + Description *string `protobuf:"bytes,4,opt,name=description,proto3,oneof" json:"description,omitempty"` } func (x *UpdateRoleRequest) Reset() { @@ -185,22 +185,22 @@ func (x *UpdateRoleRequest) GetRoleId() uint32 { } func (x *UpdateRoleRequest) GetTitle() string { - if x != nil { - return x.Title + if x != nil && x.Title != nil { + return *x.Title } return "" } func (x *UpdateRoleRequest) GetFilter() string { - if x != nil { - return x.Filter + if x != nil && x.Filter != nil { + return *x.Filter } return "" } func (x *UpdateRoleRequest) GetDescription() string { - if x != nil { - return x.Description + if x != nil && x.Description != nil { + return *x.Description } return "" } @@ -811,147 +811,150 @@ var file_management_v1_role_role_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x22, 0x2d, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, - 0x64, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, - 0x00, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x05, 0x74, 0x69, 0x74, + 0x00, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, - 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, - 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x22, - 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, - 0x00, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, - 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x39, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, - 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, - 0x22, 0x18, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x12, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x15, 0x0a, - 0x13, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc8, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, - 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x1a, 0x73, - 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x6f, 0x6c, - 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x32, 0x9b, 0x09, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x92, 0x41, 0x22, 0x12, 0x0b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, - 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, - 0x12, 0x1f, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x50, 0x92, 0x41, 0x28, 0x12, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, - 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x2e, + 0x01, 0x48, 0x00, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, 0x0a, 0x11, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x20, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x06, 0x72, 0x6f, 0x6c, + 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, + 0x65, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x72, + 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x7a, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x39, 0x0a, 0x15, 0x53, 0x65, 0x74, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x06, 0x72, 0x6f, + 0x6c, 0x65, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, + 0x0a, 0x12, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc8, 0x01, 0x0a, + 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x1a, 0x73, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x17, + 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x9b, 0x09, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x92, 0x41, 0x22, 0x12, 0x0b, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x13, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x1e, 0x12, 0x0b, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x73, 0x20, 0x61, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x90, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x72, 0x6f, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x23, 0x12, 0x08, 0x47, - 0x65, 0x74, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x17, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, - 0x65, 0x73, 0x20, 0x61, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x2e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x47, - 0x65, 0x74, 0x12, 0x8e, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x12, 0x1e, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x40, 0x92, 0x41, 0x1a, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6c, - 0x65, 0x73, 0x1a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x2e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0xc1, 0x01, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x92, 0x41, 0x45, 0x12, 0x0c, 0x41, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x1a, 0x35, 0x41, 0x73, 0x73, - 0x69, 0x67, 0x6e, 0x73, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x55, 0x73, 0x65, - 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, - 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, - 0x2f, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x12, 0xc7, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x23, 0x2e, 0x72, 0x6f, 0x6c, - 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, - 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x92, 0x41, 0x3e, 0x12, 0x10, 0x53, 0x65, 0x74, 0x20, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x2a, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x55, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, - 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x42, 0xa9, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x09, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, - 0x6c, 0x65, 0x3b, 0x72, 0x6f, 0x6c, 0x65, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, - 0x03, 0x52, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0xca, 0x02, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xe2, 0x02, 0x18, 0x52, 0x6f, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, - 0x52, 0x6f, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x92, 0x41, 0x28, 0x12, 0x0b, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, + 0x6f, 0x6c, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, + 0x6c, 0x65, 0x2f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x0a, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x6f, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x1e, + 0x12, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x0f, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, + 0x1c, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, + 0x23, 0x12, 0x08, 0x47, 0x65, 0x74, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x17, 0x52, 0x65, 0x74, + 0x72, 0x69, 0x65, 0x76, 0x65, 0x73, 0x20, 0x61, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x20, 0x62, 0x79, + 0x20, 0x49, 0x44, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, + 0x6c, 0x65, 0x2f, 0x47, 0x65, 0x74, 0x12, 0x8e, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1a, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, + 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x1a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, + 0x6c, 0x65, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0xc1, 0x01, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x72, 0x6f, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x92, 0x41, + 0x45, 0x12, 0x0c, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x1a, + 0x35, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x20, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x78, 0x69, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, + 0x20, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, + 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, + 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x12, 0xc7, 0x01, 0x0a, 0x0e, + 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x23, + 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x92, 0x41, 0x3e, 0x12, 0x10, + 0x53, 0x65, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x6f, 0x6c, 0x65, + 0x1a, 0x2a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, 0x20, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x55, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x52, 0x6f, 0x6c, 0x65, 0x2f, 0x53, 0x65, 0x74, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0xa9, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x6f, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x09, 0x52, 0x6f, 0x6c, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x3b, 0x72, 0x6f, 0x6c, 0x65, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x2e, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x5c, 0x56, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x18, 0x52, 0x6f, 0x6c, 0x65, 0x5c, 0x56, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x0d, 0x52, 0x6f, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1197,6 +1200,7 @@ func file_management_v1_role_role_proto_init() { } } } + file_management_v1_role_role_proto_msgTypes[2].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/management/v1/role/role.pb.validate.go b/api/management/v1/role/role.pb.validate.go index f802c0cc0d..fdac6442b6 100644 --- a/api/management/v1/role/role.pb.validate.go +++ b/api/management/v1/role/role.pb.validate.go @@ -289,20 +289,26 @@ func (m *UpdateRoleRequest) validate(all bool) error { errors = append(errors, err) } - if utf8.RuneCountInString(m.GetTitle()) < 1 { - err := UpdateRoleRequestValidationError{ - field: "Title", - reason: "value length must be at least 1 runes", - } - if !all { - return err + if m.Title != nil { + if utf8.RuneCountInString(m.GetTitle()) < 1 { + err := UpdateRoleRequestValidationError{ + field: "Title", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) } - errors = append(errors, err) } - // no validation rules for Filter + if m.Filter != nil { + // no validation rules for Filter + } - // no validation rules for Description + if m.Description != nil { + // no validation rules for Description + } if len(errors) > 0 { return UpdateRoleRequestMultiError(errors) diff --git a/api/management/v1/role/role.proto b/api/management/v1/role/role.proto index 67a565965b..a6f545ad3f 100644 --- a/api/management/v1/role/role.proto +++ b/api/management/v1/role/role.proto @@ -18,9 +18,9 @@ message CreateRoleResponse { message UpdateRoleRequest { uint32 role_id = 1 [(validate.rules).uint32.gt = 0]; - string title = 2 [(validate.rules).string.min_len = 1]; - string filter = 3; - string description = 4; + optional string title = 2 [(validate.rules).string.min_len = 1]; + optional string filter = 3; + optional string description = 4; } message UpdateRoleResponse {} diff --git a/api/platform/v1/json/client/platform_service/search_organization_entitlements_responses.go b/api/platform/v1/json/client/platform_service/search_organization_entitlements_responses.go index 38839fe40c..7903f50fb0 100644 --- a/api/platform/v1/json/client/platform_service/search_organization_entitlements_responses.go +++ b/api/platform/v1/json/client/platform_service/search_organization_entitlements_responses.go @@ -373,16 +373,16 @@ type SearchOrganizationEntitlementsOKBodyEntitlementsItems0 struct { Summary string `json:"summary,omitempty"` // Entitlement tier. - Tier string `json:"tier,omitempty"` + Tier *string `json:"tier,omitempty"` // Total units covered by this entitlement. - TotalUnits string `json:"total_units,omitempty"` + TotalUnits *string `json:"total_units,omitempty"` // Flag indicates that unlimited units are covered. - UnlimitedUnits bool `json:"unlimited_units,omitempty"` + UnlimitedUnits *bool `json:"unlimited_units,omitempty"` // Support level covered by this entitlement. - SupportLevel string `json:"support_level,omitempty"` + SupportLevel *string `json:"support_level,omitempty"` // Percona product families covered by this entitlement. SoftwareFamilies []string `json:"software_families"` @@ -519,10 +519,10 @@ swagger:model SearchOrganizationEntitlementsOKBodyEntitlementsItems0Platform */ type SearchOrganizationEntitlementsOKBodyEntitlementsItems0Platform struct { // Flag indicates that security advisors are covered by this entitlement. - SecurityAdvisor string `json:"security_advisor,omitempty"` + SecurityAdvisor *string `json:"security_advisor,omitempty"` // Flag indicates that config advisors are covered by this entitlement. - ConfigAdvisor string `json:"config_advisor,omitempty"` + ConfigAdvisor *string `json:"config_advisor,omitempty"` } // Validate validates this search organization entitlements OK body entitlements items0 platform diff --git a/api/platform/v1/json/v1.json b/api/platform/v1/json/v1.json index 31e82c2408..9249c820e1 100644 --- a/api/platform/v1/json/v1.json +++ b/api/platform/v1/json/v1.json @@ -296,11 +296,13 @@ "config_advisor": { "description": "Flag indicates that config advisors are covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 1 }, "security_advisor": { "description": "Flag indicates that security advisors are covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 0 } }, @@ -328,21 +330,25 @@ "support_level": { "description": "Support level covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 6 }, "tier": { "description": "Entitlement tier.", "type": "string", + "x-nullable": true, "x-order": 3 }, "total_units": { "description": "Total units covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 4 }, "unlimited_units": { "description": "Flag indicates that unlimited units are covered.", "type": "boolean", + "x-nullable": true, "x-order": 5 } } diff --git a/api/platform/v1/platform.pb.go b/api/platform/v1/platform.pb.go index 64e28527ff..4f7b1a0212 100644 --- a/api/platform/v1/platform.pb.go +++ b/api/platform/v1/platform.pb.go @@ -16,7 +16,6 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" ) const ( @@ -536,13 +535,13 @@ type OrganizationEntitlement struct { // Entitlement short summary. Summary string `protobuf:"bytes,3,opt,name=summary,proto3" json:"summary,omitempty"` // Entitlement tier. - Tier *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=tier,proto3" json:"tier,omitempty"` + Tier *string `protobuf:"bytes,4,opt,name=tier,proto3,oneof" json:"tier,omitempty"` // Total units covered by this entitlement. - TotalUnits *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=total_units,json=totalUnits,proto3" json:"total_units,omitempty"` + TotalUnits *string `protobuf:"bytes,5,opt,name=total_units,json=totalUnits,proto3,oneof" json:"total_units,omitempty"` // Flag indicates that unlimited units are covered. - UnlimitedUnits *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=unlimited_units,json=unlimitedUnits,proto3" json:"unlimited_units,omitempty"` + UnlimitedUnits *bool `protobuf:"varint,6,opt,name=unlimited_units,json=unlimitedUnits,proto3,oneof" json:"unlimited_units,omitempty"` // Support level covered by this entitlement. - SupportLevel *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=support_level,json=supportLevel,proto3" json:"support_level,omitempty"` + SupportLevel *string `protobuf:"bytes,7,opt,name=support_level,json=supportLevel,proto3,oneof" json:"support_level,omitempty"` // Percona product families covered by this entitlement. SoftwareFamilies []string `protobuf:"bytes,8,rep,name=software_families,json=softwareFamilies,proto3" json:"software_families,omitempty"` // Entitlement start data. @@ -608,32 +607,32 @@ func (x *OrganizationEntitlement) GetSummary() string { return "" } -func (x *OrganizationEntitlement) GetTier() *wrapperspb.StringValue { - if x != nil { - return x.Tier +func (x *OrganizationEntitlement) GetTier() string { + if x != nil && x.Tier != nil { + return *x.Tier } - return nil + return "" } -func (x *OrganizationEntitlement) GetTotalUnits() *wrapperspb.StringValue { - if x != nil { - return x.TotalUnits +func (x *OrganizationEntitlement) GetTotalUnits() string { + if x != nil && x.TotalUnits != nil { + return *x.TotalUnits } - return nil + return "" } -func (x *OrganizationEntitlement) GetUnlimitedUnits() *wrapperspb.BoolValue { - if x != nil { - return x.UnlimitedUnits +func (x *OrganizationEntitlement) GetUnlimitedUnits() bool { + if x != nil && x.UnlimitedUnits != nil { + return *x.UnlimitedUnits } - return nil + return false } -func (x *OrganizationEntitlement) GetSupportLevel() *wrapperspb.StringValue { - if x != nil { - return x.SupportLevel +func (x *OrganizationEntitlement) GetSupportLevel() string { + if x != nil && x.SupportLevel != nil { + return *x.SupportLevel } - return nil + return "" } func (x *OrganizationEntitlement) GetSoftwareFamilies() []string { @@ -959,9 +958,9 @@ type OrganizationEntitlement_Platform struct { unknownFields protoimpl.UnknownFields // Flag indicates that security advisors are covered by this entitlement. - SecurityAdvisor *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=security_advisor,json=securityAdvisor,proto3" json:"security_advisor,omitempty"` + SecurityAdvisor *string `protobuf:"bytes,1,opt,name=security_advisor,json=securityAdvisor,proto3,oneof" json:"security_advisor,omitempty"` // Flag indicates that config advisors are covered by this entitlement. - ConfigAdvisor *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=config_advisor,json=configAdvisor,proto3" json:"config_advisor,omitempty"` + ConfigAdvisor *string `protobuf:"bytes,2,opt,name=config_advisor,json=configAdvisor,proto3,oneof" json:"config_advisor,omitempty"` } func (x *OrganizationEntitlement_Platform) Reset() { @@ -996,18 +995,18 @@ func (*OrganizationEntitlement_Platform) Descriptor() ([]byte, []int) { return file_platform_v1_platform_proto_rawDescGZIP(), []int{9, 0} } -func (x *OrganizationEntitlement_Platform) GetSecurityAdvisor() *wrapperspb.StringValue { - if x != nil { - return x.SecurityAdvisor +func (x *OrganizationEntitlement_Platform) GetSecurityAdvisor() string { + if x != nil && x.SecurityAdvisor != nil { + return *x.SecurityAdvisor } - return nil + return "" } -func (x *OrganizationEntitlement_Platform) GetConfigAdvisor() *wrapperspb.StringValue { - if x != nil { - return x.ConfigAdvisor +func (x *OrganizationEntitlement_Platform) GetConfigAdvisor() string { + if x != nil && x.ConfigAdvisor != nil { + return *x.ConfigAdvisor } - return nil + return "" } // CustomerSuccess contains the contanct details of the customer success employee assigned to a customer's account. @@ -1075,9 +1074,7 @@ var file_platform_v1_platform_proto_rawDesc = []byte{ 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, @@ -1135,224 +1132,221 @@ var file_platform_v1_platform_proto_rawDesc = []byte{ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xdd, 0x05, 0x0a, 0x17, 0x4f, 0x72, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xb0, 0x05, 0x0a, 0x17, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x04, 0x74, - 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x74, 0x69, 0x65, 0x72, 0x12, 0x3d, 0x0a, - 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0f, - 0x75, 0x6e, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0e, 0x75, 0x6e, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x55, 0x6e, 0x69, 0x74, - 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, - 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x10, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, - 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x08, - 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, - 0x61, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x1a, 0x98, - 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x47, 0x0a, 0x10, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x41, 0x64, 0x76, - 0x69, 0x73, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe9, 0x01, 0x0a, 0x1d, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x0f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x53, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x54, - 0x69, 0x63, 0x6b, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x1a, 0x3b, 0x0a, 0x0f, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x65, 0x72, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc7, 0x01, 0x0a, 0x12, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x6d, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6d, 0x6d, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x6d, 0x6d, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x70, 0x6d, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x35, 0x0a, - 0x17, 0x70, 0x6d, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6c, 0x65, - 0x6d, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x70, 0x6d, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x6f, 0x50, 0x6f, - 0x72, 0x74, 0x61, 0x6c, 0x22, 0x13, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x12, 0x55, 0x73, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x32, 0xab, 0x0f, 0x0a, 0x0f, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x87, 0x02, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x04, 0x74, + 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x65, + 0x72, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x6e, + 0x69, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x75, 0x6e, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x0e, 0x75, 0x6e, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, + 0x55, 0x6e, 0x69, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x03, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x88, + 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x66, + 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x73, + 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x12, + 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, + 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x1a, 0x8e, 0x01, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2e, 0x0a, 0x10, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x41, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x64, 0x76, 0x69, 0x73, + 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x42, 0x07, 0x0a, + 0x05, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x75, 0x6e, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x1e, 0x0a, 0x1c, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe9, 0x01, 0x0a, + 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, + 0x0a, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x53, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x0f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x53, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, + 0x65, 0x77, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x55, 0x72, 0x6c, 0x1a, 0x3b, 0x0a, 0x0f, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc7, 0x01, + 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x6d, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, + 0x6d, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, + 0x70, 0x6d, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6d, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x35, 0x0a, 0x17, 0x70, 0x6d, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x14, 0x70, 0x6d, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, + 0x6f, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x22, 0x13, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x12, + 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x32, 0xab, 0x0f, 0x0a, + 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x87, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc0, 0x01, 0x92, 0x41, 0x9d, 0x01, 0x12, 0x07, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x1a, 0x91, 0x01, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x20, 0x61, - 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, - 0x6e, 0x61, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x2e, 0x20, 0x54, 0x68, 0x61, 0x74, 0x20, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, - 0x74, 0x6f, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, - 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7b, 0x92, 0x41, 0x56, 0x12, 0x0a, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x1a, 0x48, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x20, 0x61, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x6f, 0x6e, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x61, - 0x6c, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, - 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x12, 0xd4, 0x02, 0x0a, 0x19, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc0, 0x01, 0x92, 0x41, 0x9d, 0x01, 0x12, 0x07, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x1a, 0x91, 0x01, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x20, 0x61, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, + 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x50, 0x65, + 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x2e, 0x20, 0x54, 0x68, + 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, + 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, + 0x6e, 0x61, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7b, 0x92, 0x41, 0x56, 0x12, + 0x0a, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x1a, 0x48, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x20, 0x61, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, + 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x50, 0x6f, + 0x72, 0x74, 0x61, 0x6c, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, + 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0xd4, 0x02, 0x0a, 0x19, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd7, 0x01, 0x92, 0x41, 0xa2, 0x01, 0x12, 0x19, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x1a, 0x84, 0x01, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xd7, 0x01, 0x92, 0x41, 0xa2, 0x01, 0x12, 0x19, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x1a, 0x84, 0x01, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x20, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, - 0x61, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, - 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, - 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0xf6, 0x02, 0x0a, 0x1e, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x20, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x62, 0x65, 0x6c, 0x6f, + 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x65, 0x72, + 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, + 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x2e, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0xf6, + 0x02, 0x0a, 0x1e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x32, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x32, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xea, 0x01, 0x92, 0x41, 0xb0, 0x01, 0x12, 0x1e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x8d, - 0x01, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, - 0x66, 0x65, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x27, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, - 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x2e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0xcb, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xda, 0x01, 0x92, 0x41, 0xa9, 0x01, 0x12, 0x15, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x8f, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x65, 0x74, 0x63, - 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, - 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0xac, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x5d, 0x92, 0x41, 0x38, 0x12, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x1a, 0x2a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x20, 0x49, 0x44, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0xf3, 0x01, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xa3, 0x01, 0x92, 0x41, 0x7e, 0x12, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x1a, 0x70, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, - 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x50, 0x65, - 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x72, - 0x20, 0x6e, 0x6f, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, - 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x55, 0x73, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0xb3, 0x01, 0x92, 0x41, 0x10, 0x12, 0x0e, 0x0a, - 0x0c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x41, 0x50, 0x49, 0x0a, 0x0f, 0x63, - 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x0d, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, - 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x0b, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, - 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x0c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xea, 0x01, 0x92, 0x41, 0xb0, + 0x01, 0x12, 0x1e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x1a, 0x8d, 0x01, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x27, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x20, + 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, + 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, + 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, + 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xcb, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x29, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xda, 0x01, 0x92, 0x41, 0xa9, 0x01, 0x12, + 0x15, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x8f, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x63, 0x74, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, + 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, + 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, + 0x2a, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xac, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x92, 0x41, 0x38, 0x12, 0x0a, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x2a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x49, 0x44, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, + 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0xf3, 0x01, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa3, 0x01, 0x92, 0x41, 0x7e, 0x12, 0x0a, 0x55, 0x73, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x70, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, + 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, + 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x67, + 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, + 0x20, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, + 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0xb3, 0x01, 0x92, 0x41, 0x10, + 0x12, 0x0e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x41, 0x50, 0x49, + 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x42, 0x0d, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x0b, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0b, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x0c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1389,8 +1383,6 @@ var ( (*OrganizationEntitlement_Platform)(nil), // 16: platform.v1.OrganizationEntitlement.Platform (*GetContactInformationResponse_CustomerSuccess)(nil), // 17: platform.v1.GetContactInformationResponse.CustomerSuccess (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp - (*wrapperspb.StringValue)(nil), // 19: google.protobuf.StringValue - (*wrapperspb.BoolValue)(nil), // 20: google.protobuf.BoolValue } ) @@ -1398,35 +1390,29 @@ var file_platform_v1_platform_proto_depIdxs = []int32{ 6, // 0: platform.v1.SearchOrganizationTicketsResponse.tickets:type_name -> platform.v1.OrganizationTicket 18, // 1: platform.v1.OrganizationTicket.create_time:type_name -> google.protobuf.Timestamp 9, // 2: platform.v1.SearchOrganizationEntitlementsResponse.entitlements:type_name -> platform.v1.OrganizationEntitlement - 19, // 3: platform.v1.OrganizationEntitlement.tier:type_name -> google.protobuf.StringValue - 19, // 4: platform.v1.OrganizationEntitlement.total_units:type_name -> google.protobuf.StringValue - 20, // 5: platform.v1.OrganizationEntitlement.unlimited_units:type_name -> google.protobuf.BoolValue - 19, // 6: platform.v1.OrganizationEntitlement.support_level:type_name -> google.protobuf.StringValue - 18, // 7: platform.v1.OrganizationEntitlement.start_date:type_name -> google.protobuf.Timestamp - 18, // 8: platform.v1.OrganizationEntitlement.end_date:type_name -> google.protobuf.Timestamp - 16, // 9: platform.v1.OrganizationEntitlement.platform:type_name -> platform.v1.OrganizationEntitlement.Platform - 17, // 10: platform.v1.GetContactInformationResponse.customer_success:type_name -> platform.v1.GetContactInformationResponse.CustomerSuccess - 19, // 11: platform.v1.OrganizationEntitlement.Platform.security_advisor:type_name -> google.protobuf.StringValue - 19, // 12: platform.v1.OrganizationEntitlement.Platform.config_advisor:type_name -> google.protobuf.StringValue - 0, // 13: platform.v1.PlatformService.Connect:input_type -> platform.v1.ConnectRequest - 2, // 14: platform.v1.PlatformService.Disconnect:input_type -> platform.v1.DisconnectRequest - 4, // 15: platform.v1.PlatformService.SearchOrganizationTickets:input_type -> platform.v1.SearchOrganizationTicketsRequest - 7, // 16: platform.v1.PlatformService.SearchOrganizationEntitlements:input_type -> platform.v1.SearchOrganizationEntitlementsRequest - 10, // 17: platform.v1.PlatformService.GetContactInformation:input_type -> platform.v1.GetContactInformationRequest - 12, // 18: platform.v1.PlatformService.ServerInfo:input_type -> platform.v1.ServerInfoRequest - 14, // 19: platform.v1.PlatformService.UserStatus:input_type -> platform.v1.UserStatusRequest - 1, // 20: platform.v1.PlatformService.Connect:output_type -> platform.v1.ConnectResponse - 3, // 21: platform.v1.PlatformService.Disconnect:output_type -> platform.v1.DisconnectResponse - 5, // 22: platform.v1.PlatformService.SearchOrganizationTickets:output_type -> platform.v1.SearchOrganizationTicketsResponse - 8, // 23: platform.v1.PlatformService.SearchOrganizationEntitlements:output_type -> platform.v1.SearchOrganizationEntitlementsResponse - 11, // 24: platform.v1.PlatformService.GetContactInformation:output_type -> platform.v1.GetContactInformationResponse - 13, // 25: platform.v1.PlatformService.ServerInfo:output_type -> platform.v1.ServerInfoResponse - 15, // 26: platform.v1.PlatformService.UserStatus:output_type -> platform.v1.UserStatusResponse - 20, // [20:27] is the sub-list for method output_type - 13, // [13:20] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 18, // 3: platform.v1.OrganizationEntitlement.start_date:type_name -> google.protobuf.Timestamp + 18, // 4: platform.v1.OrganizationEntitlement.end_date:type_name -> google.protobuf.Timestamp + 16, // 5: platform.v1.OrganizationEntitlement.platform:type_name -> platform.v1.OrganizationEntitlement.Platform + 17, // 6: platform.v1.GetContactInformationResponse.customer_success:type_name -> platform.v1.GetContactInformationResponse.CustomerSuccess + 0, // 7: platform.v1.PlatformService.Connect:input_type -> platform.v1.ConnectRequest + 2, // 8: platform.v1.PlatformService.Disconnect:input_type -> platform.v1.DisconnectRequest + 4, // 9: platform.v1.PlatformService.SearchOrganizationTickets:input_type -> platform.v1.SearchOrganizationTicketsRequest + 7, // 10: platform.v1.PlatformService.SearchOrganizationEntitlements:input_type -> platform.v1.SearchOrganizationEntitlementsRequest + 10, // 11: platform.v1.PlatformService.GetContactInformation:input_type -> platform.v1.GetContactInformationRequest + 12, // 12: platform.v1.PlatformService.ServerInfo:input_type -> platform.v1.ServerInfoRequest + 14, // 13: platform.v1.PlatformService.UserStatus:input_type -> platform.v1.UserStatusRequest + 1, // 14: platform.v1.PlatformService.Connect:output_type -> platform.v1.ConnectResponse + 3, // 15: platform.v1.PlatformService.Disconnect:output_type -> platform.v1.DisconnectResponse + 5, // 16: platform.v1.PlatformService.SearchOrganizationTickets:output_type -> platform.v1.SearchOrganizationTicketsResponse + 8, // 17: platform.v1.PlatformService.SearchOrganizationEntitlements:output_type -> platform.v1.SearchOrganizationEntitlementsResponse + 11, // 18: platform.v1.PlatformService.GetContactInformation:output_type -> platform.v1.GetContactInformationResponse + 13, // 19: platform.v1.PlatformService.ServerInfo:output_type -> platform.v1.ServerInfoResponse + 15, // 20: platform.v1.PlatformService.UserStatus:output_type -> platform.v1.UserStatusResponse + 14, // [14:21] is the sub-list for method output_type + 7, // [7:14] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name } func init() { file_platform_v1_platform_proto_init() } @@ -1652,6 +1638,8 @@ func file_platform_v1_platform_proto_init() { } } } + file_platform_v1_platform_proto_msgTypes[9].OneofWrappers = []interface{}{} + file_platform_v1_platform_proto_msgTypes[16].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/platform/v1/platform.pb.validate.go b/api/platform/v1/platform.pb.validate.go index 315192f728..9b8a01204a 100644 --- a/api/platform/v1/platform.pb.validate.go +++ b/api/platform/v1/platform.pb.validate.go @@ -1122,122 +1122,6 @@ func (m *OrganizationEntitlement) validate(all bool) error { // no validation rules for Summary - if all { - switch v := interface{}(m.GetTier()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "Tier", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "Tier", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTier()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OrganizationEntitlementValidationError{ - field: "Tier", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetTotalUnits()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "TotalUnits", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "TotalUnits", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTotalUnits()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OrganizationEntitlementValidationError{ - field: "TotalUnits", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetUnlimitedUnits()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "UnlimitedUnits", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "UnlimitedUnits", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetUnlimitedUnits()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OrganizationEntitlementValidationError{ - field: "UnlimitedUnits", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetSupportLevel()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "SupportLevel", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, OrganizationEntitlementValidationError{ - field: "SupportLevel", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetSupportLevel()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OrganizationEntitlementValidationError{ - field: "SupportLevel", - reason: "embedded message failed validation", - cause: err, - } - } - } - if all { switch v := interface{}(m.GetStartDate()).(type) { case interface{ ValidateAll() error }: @@ -1325,6 +1209,22 @@ func (m *OrganizationEntitlement) validate(all bool) error { } } + if m.Tier != nil { + // no validation rules for Tier + } + + if m.TotalUnits != nil { + // no validation rules for TotalUnits + } + + if m.UnlimitedUnits != nil { + // no validation rules for UnlimitedUnits + } + + if m.SupportLevel != nil { + // no validation rules for SupportLevel + } + if len(errors) > 0 { return OrganizationEntitlementMultiError(errors) } @@ -2083,62 +1983,12 @@ func (m *OrganizationEntitlement_Platform) validate(all bool) error { var errors []error - if all { - switch v := interface{}(m.GetSecurityAdvisor()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, OrganizationEntitlement_PlatformValidationError{ - field: "SecurityAdvisor", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, OrganizationEntitlement_PlatformValidationError{ - field: "SecurityAdvisor", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetSecurityAdvisor()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OrganizationEntitlement_PlatformValidationError{ - field: "SecurityAdvisor", - reason: "embedded message failed validation", - cause: err, - } - } + if m.SecurityAdvisor != nil { + // no validation rules for SecurityAdvisor } - if all { - switch v := interface{}(m.GetConfigAdvisor()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, OrganizationEntitlement_PlatformValidationError{ - field: "ConfigAdvisor", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, OrganizationEntitlement_PlatformValidationError{ - field: "ConfigAdvisor", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetConfigAdvisor()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return OrganizationEntitlement_PlatformValidationError{ - field: "ConfigAdvisor", - reason: "embedded message failed validation", - cause: err, - } - } + if m.ConfigAdvisor != nil { + // no validation rules for ConfigAdvisor } if len(errors) > 0 { diff --git a/api/platform/v1/platform.proto b/api/platform/v1/platform.proto index 989b7135f6..0d4092829a 100644 --- a/api/platform/v1/platform.proto +++ b/api/platform/v1/platform.proto @@ -4,7 +4,6 @@ package platform.v1; import "google/api/annotations.proto"; import "google/protobuf/timestamp.proto"; -import "google/protobuf/wrappers.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; import "validate/validate.proto"; @@ -72,9 +71,9 @@ message OrganizationEntitlement { // Platform indicates platform specific entitlements. message Platform { // Flag indicates that security advisors are covered by this entitlement. - google.protobuf.StringValue security_advisor = 1; + optional string security_advisor = 1; // Flag indicates that config advisors are covered by this entitlement. - google.protobuf.StringValue config_advisor = 2; + optional string config_advisor = 2; } // Entitlement number. string number = 1; @@ -83,13 +82,13 @@ message OrganizationEntitlement { // Entitlement short summary. string summary = 3; // Entitlement tier. - google.protobuf.StringValue tier = 4; + optional string tier = 4; // Total units covered by this entitlement. - google.protobuf.StringValue total_units = 5; + optional string total_units = 5; // Flag indicates that unlimited units are covered. - google.protobuf.BoolValue unlimited_units = 6; + optional bool unlimited_units = 6; // Support level covered by this entitlement. - google.protobuf.StringValue support_level = 7; + optional string support_level = 7; // Percona product families covered by this entitlement. repeated string software_families = 8; // Entitlement start data. diff --git a/api/server/v1/json/client/server_service/change_settings_responses.go b/api/server/v1/json/client/server_service/change_settings_responses.go index 7dd19992a1..9190129576 100644 --- a/api/server/v1/json/client/server_service/change_settings_responses.go +++ b/api/server/v1/json/client/server_service/change_settings_responses.go @@ -124,61 +124,37 @@ swagger:model ChangeSettingsBody */ type ChangeSettingsBody struct { // enable updates - EnableUpdates bool `json:"enable_updates,omitempty"` - - // disable updates - DisableUpdates bool `json:"disable_updates,omitempty"` + EnableUpdates *bool `json:"enable_updates,omitempty"` // enable telemetry - EnableTelemetry bool `json:"enable_telemetry,omitempty"` - - // disable telemetry - DisableTelemetry bool `json:"disable_telemetry,omitempty"` + EnableTelemetry *bool `json:"enable_telemetry,omitempty"` // A number of full days for Prometheus and QAN data retention. Should have a suffix in JSON: 2592000s, 43200m, 720h. DataRetention string `json:"data_retention,omitempty"` // ssh key - SSHKey string `json:"ssh_key,omitempty"` - - // aws partitions - AWSPartitions []string `json:"aws_partitions"` + SSHKey *string `json:"ssh_key,omitempty"` // Enable Security Threat Tool. - EnableStt bool `json:"enable_stt,omitempty"` - - // Disable Security Threat Tool. - DisableStt bool `json:"disable_stt,omitempty"` + EnableStt *bool `json:"enable_stt,omitempty"` // Enable Alerting. - EnableAlerting bool `json:"enable_alerting,omitempty"` - - // Disable Alerting. - DisableAlerting bool `json:"disable_alerting,omitempty"` + EnableAlerting *bool `json:"enable_alerting,omitempty"` // PMM Server public address. - PMMPublicAddress string `json:"pmm_public_address,omitempty"` - - // remove pmm public address - RemovePMMPublicAddress bool `json:"remove_pmm_public_address,omitempty"` + PMMPublicAddress *string `json:"pmm_public_address,omitempty"` // Enable Azure Discover. - EnableAzurediscover bool `json:"enable_azurediscover,omitempty"` - - // Disable Azure Discover. - DisableAzurediscover bool `json:"disable_azurediscover,omitempty"` + EnableAzurediscover *bool `json:"enable_azurediscover,omitempty"` // Enable Backup Management. - EnableBackupManagement bool `json:"enable_backup_management,omitempty"` - - // Disable Backup Management. - DisableBackupManagement bool `json:"disable_backup_management,omitempty"` + EnableBackupManagement *bool `json:"enable_backup_management,omitempty"` // Enable Access Control - EnableAccessControl bool `json:"enable_access_control,omitempty"` + EnableAccessControl *bool `json:"enable_access_control,omitempty"` - // Disable Access Control - DisableAccessControl bool `json:"disable_access_control,omitempty"` + // aws partitions + AWSPartitions *ChangeSettingsParamsBodyAWSPartitions `json:"aws_partitions,omitempty"` // metrics resolutions MetricsResolutions *ChangeSettingsParamsBodyMetricsResolutions `json:"metrics_resolutions,omitempty"` @@ -191,6 +167,10 @@ type ChangeSettingsBody struct { func (o *ChangeSettingsBody) Validate(formats strfmt.Registry) error { var res []error + if err := o.validateAWSPartitions(formats); err != nil { + res = append(res, err) + } + if err := o.validateMetricsResolutions(formats); err != nil { res = append(res, err) } @@ -205,6 +185,25 @@ func (o *ChangeSettingsBody) Validate(formats strfmt.Registry) error { return nil } +func (o *ChangeSettingsBody) validateAWSPartitions(formats strfmt.Registry) error { + if swag.IsZero(o.AWSPartitions) { // not required + return nil + } + + if o.AWSPartitions != nil { + if err := o.AWSPartitions.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("body" + "." + "aws_partitions") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("body" + "." + "aws_partitions") + } + return err + } + } + + return nil +} + func (o *ChangeSettingsBody) validateMetricsResolutions(formats strfmt.Registry) error { if swag.IsZero(o.MetricsResolutions) { // not required return nil @@ -247,6 +246,10 @@ func (o *ChangeSettingsBody) validateSttCheckIntervals(formats strfmt.Registry) func (o *ChangeSettingsBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error + if err := o.contextValidateAWSPartitions(ctx, formats); err != nil { + res = append(res, err) + } + if err := o.contextValidateMetricsResolutions(ctx, formats); err != nil { res = append(res, err) } @@ -261,6 +264,21 @@ func (o *ChangeSettingsBody) ContextValidate(ctx context.Context, formats strfmt return nil } +func (o *ChangeSettingsBody) contextValidateAWSPartitions(ctx context.Context, formats strfmt.Registry) error { + if o.AWSPartitions != nil { + if err := o.AWSPartitions.ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("body" + "." + "aws_partitions") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("body" + "." + "aws_partitions") + } + return err + } + } + + return nil +} + func (o *ChangeSettingsBody) contextValidateMetricsResolutions(ctx context.Context, formats strfmt.Registry) error { if o.MetricsResolutions != nil { if err := o.MetricsResolutions.ContextValidate(ctx, formats); err != nil { @@ -655,8 +673,8 @@ ChangeSettingsOKBodySettings Settings represents PMM Server settings. swagger:model ChangeSettingsOKBodySettings */ type ChangeSettingsOKBodySettings struct { - // True if updates are disabled. - UpdatesDisabled bool `json:"updates_disabled,omitempty"` + // True if updates are enabled. + UpdatesEnabled bool `json:"updates_enabled,omitempty"` // True if telemetry is enabled. TelemetryEnabled bool `json:"telemetry_enabled,omitempty"` @@ -915,6 +933,43 @@ func (o *ChangeSettingsOKBodySettingsSttCheckIntervals) UnmarshalBinary(b []byte return nil } +/* +ChangeSettingsParamsBodyAWSPartitions A wrapper for a string array. This type allows to distinguish between an empty array and a null value. +swagger:model ChangeSettingsParamsBodyAWSPartitions +*/ +type ChangeSettingsParamsBodyAWSPartitions struct { + // values + Values []string `json:"values"` +} + +// Validate validates this change settings params body AWS partitions +func (o *ChangeSettingsParamsBodyAWSPartitions) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this change settings params body AWS partitions based on context it is used +func (o *ChangeSettingsParamsBodyAWSPartitions) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ChangeSettingsParamsBodyAWSPartitions) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ChangeSettingsParamsBodyAWSPartitions) UnmarshalBinary(b []byte) error { + var res ChangeSettingsParamsBodyAWSPartitions + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + /* ChangeSettingsParamsBodyMetricsResolutions MetricsResolutions represents Prometheus exporters metrics resolutions. swagger:model ChangeSettingsParamsBodyMetricsResolutions diff --git a/api/server/v1/json/client/server_service/get_settings_responses.go b/api/server/v1/json/client/server_service/get_settings_responses.go index 158c7a6f81..24979b72a9 100644 --- a/api/server/v1/json/client/server_service/get_settings_responses.go +++ b/api/server/v1/json/client/server_service/get_settings_responses.go @@ -464,8 +464,8 @@ GetSettingsOKBodySettings Settings represents PMM Server settings. swagger:model GetSettingsOKBodySettings */ type GetSettingsOKBodySettings struct { - // True if updates are disabled. - UpdatesDisabled bool `json:"updates_disabled,omitempty"` + // True if updates are enabled. + UpdatesEnabled bool `json:"updates_enabled,omitempty"` // True if telemetry is enabled. TelemetryEnabled bool `json:"telemetry_enabled,omitempty"` diff --git a/api/server/v1/json/v1.json b/api/server/v1/json/v1.json index 8af12bad6e..125edb6603 100644 --- a/api/server/v1/json/v1.json +++ b/api/server/v1/json/v1.json @@ -148,81 +148,63 @@ "type": "object", "properties": { "aws_partitions": { - "type": "array", - "items": { - "type": "string" + "description": "A wrapper for a string array. This type allows to distinguish between an empty array and a null value.", + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + }, + "x-order": 0 + } }, - "x-order": 7 + "x-nullable": true, + "x-order": 5 }, "data_retention": { "description": "A number of full days for Prometheus and QAN data retention. Should have a suffix in JSON: 2592000s, 43200m, 720h.", "type": "string", - "x-order": 5 - }, - "disable_access_control": { - "type": "boolean", - "title": "Disable Access Control", - "x-order": 20 - }, - "disable_alerting": { - "description": "Disable Alerting.", - "type": "boolean", - "x-order": 11 - }, - "disable_azurediscover": { - "description": "Disable Azure Discover.", - "type": "boolean", - "x-order": 16 - }, - "disable_backup_management": { - "description": "Disable Backup Management.", - "type": "boolean", - "x-order": 18 - }, - "disable_stt": { - "description": "Disable Security Threat Tool.", - "type": "boolean", - "x-order": 9 - }, - "disable_telemetry": { - "type": "boolean", "x-order": 3 }, - "disable_updates": { - "type": "boolean", - "x-order": 1 - }, "enable_access_control": { "type": "boolean", "title": "Enable Access Control", - "x-order": 19 + "x-nullable": true, + "x-order": 12 }, "enable_alerting": { "description": "Enable Alerting.", "type": "boolean", - "x-order": 10 + "x-nullable": true, + "x-order": 7 }, "enable_azurediscover": { "description": "Enable Azure Discover.", "type": "boolean", - "x-order": 15 + "x-nullable": true, + "x-order": 10 }, "enable_backup_management": { "description": "Enable Backup Management.", "type": "boolean", - "x-order": 17 + "x-nullable": true, + "x-order": 11 }, "enable_stt": { "description": "Enable Security Threat Tool.", "type": "boolean", - "x-order": 8 + "x-nullable": true, + "x-order": 6 }, "enable_telemetry": { "type": "boolean", - "x-order": 2 + "x-nullable": true, + "x-order": 1 }, "enable_updates": { "type": "boolean", + "x-nullable": true, "x-order": 0 }, "metrics_resolutions": { @@ -245,20 +227,18 @@ "x-order": 1 } }, - "x-order": 4 + "x-order": 2 }, "pmm_public_address": { "description": "PMM Server public address.", "type": "string", - "x-order": 12 - }, - "remove_pmm_public_address": { - "type": "boolean", - "x-order": 13 + "x-nullable": true, + "x-order": 8 }, "ssh_key": { "type": "string", - "x-order": 6 + "x-nullable": true, + "x-order": 4 }, "stt_check_intervals": { "description": "STTCheckIntervals represents intervals between STT checks.", @@ -280,7 +260,7 @@ "x-order": 0 } }, - "x-order": 14 + "x-order": 9 } } } @@ -414,8 +394,8 @@ }, "x-order": 14 }, - "updates_disabled": { - "description": "True if updates are disabled.", + "updates_enabled": { + "description": "True if updates are enabled.", "type": "boolean", "x-order": 0 } @@ -607,8 +587,8 @@ }, "x-order": 14 }, - "updates_disabled": { - "description": "True if updates are disabled.", + "updates_enabled": { + "description": "True if updates are enabled.", "type": "boolean", "x-order": 0 } diff --git a/api/server/v1/server.pb.go b/api/server/v1/server.pb.go index 1a9996c598..38c71171b6 100644 --- a/api/server/v1/server.pb.go +++ b/api/server/v1/server.pb.go @@ -17,6 +17,8 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" + + common "github.com/percona/pmm/api/common" ) const ( @@ -926,8 +928,8 @@ type Settings struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // True if updates are disabled. - UpdatesDisabled bool `protobuf:"varint,1,opt,name=updates_disabled,json=updatesDisabled,proto3" json:"updates_disabled,omitempty"` + // True if updates are enabled. + UpdatesEnabled bool `protobuf:"varint,1,opt,name=updates_enabled,json=updatesEnabled,proto3" json:"updates_enabled,omitempty"` // True if telemetry is enabled. TelemetryEnabled bool `protobuf:"varint,2,opt,name=telemetry_enabled,json=telemetryEnabled,proto3" json:"telemetry_enabled,omitempty"` MetricsResolutions *MetricsResolutions `protobuf:"bytes,3,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` @@ -990,9 +992,9 @@ func (*Settings) Descriptor() ([]byte, []int) { return file_server_v1_server_proto_rawDescGZIP(), []int{15} } -func (x *Settings) GetUpdatesDisabled() bool { +func (x *Settings) GetUpdatesEnabled() bool { if x != nil { - return x.UpdatesDisabled + return x.UpdatesEnabled } return false } @@ -1199,40 +1201,27 @@ type ChangeSettingsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnableUpdates bool `protobuf:"varint,28,opt,name=enable_updates,json=enableUpdates,proto3" json:"enable_updates,omitempty"` - DisableUpdates bool `protobuf:"varint,29,opt,name=disable_updates,json=disableUpdates,proto3" json:"disable_updates,omitempty"` - EnableTelemetry bool `protobuf:"varint,1,opt,name=enable_telemetry,json=enableTelemetry,proto3" json:"enable_telemetry,omitempty"` - DisableTelemetry bool `protobuf:"varint,2,opt,name=disable_telemetry,json=disableTelemetry,proto3" json:"disable_telemetry,omitempty"` + EnableUpdates *bool `protobuf:"varint,28,opt,name=enable_updates,json=enableUpdates,proto3,oneof" json:"enable_updates,omitempty"` + EnableTelemetry *bool `protobuf:"varint,1,opt,name=enable_telemetry,json=enableTelemetry,proto3,oneof" json:"enable_telemetry,omitempty"` MetricsResolutions *MetricsResolutions `protobuf:"bytes,3,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` // A number of full days for Prometheus and QAN data retention. Should have a suffix in JSON: 2592000s, 43200m, 720h. DataRetention *durationpb.Duration `protobuf:"bytes,4,opt,name=data_retention,json=dataRetention,proto3" json:"data_retention,omitempty"` - SshKey string `protobuf:"bytes,5,opt,name=ssh_key,json=sshKey,proto3" json:"ssh_key,omitempty"` - AwsPartitions []string `protobuf:"bytes,6,rep,name=aws_partitions,json=awsPartitions,proto3" json:"aws_partitions,omitempty"` + SshKey *string `protobuf:"bytes,5,opt,name=ssh_key,json=sshKey,proto3,oneof" json:"ssh_key,omitempty"` + AwsPartitions *common.StringArray `protobuf:"bytes,6,opt,name=aws_partitions,json=awsPartitions,proto3,oneof" json:"aws_partitions,omitempty"` // Enable Security Threat Tool. - EnableStt bool `protobuf:"varint,11,opt,name=enable_stt,json=enableStt,proto3" json:"enable_stt,omitempty"` - // Disable Security Threat Tool. - DisableStt bool `protobuf:"varint,12,opt,name=disable_stt,json=disableStt,proto3" json:"disable_stt,omitempty"` + EnableStt *bool `protobuf:"varint,11,opt,name=enable_stt,json=enableStt,proto3,oneof" json:"enable_stt,omitempty"` // Enable Alerting. - EnableAlerting bool `protobuf:"varint,13,opt,name=enable_alerting,json=enableAlerting,proto3" json:"enable_alerting,omitempty"` - // Disable Alerting. - DisableAlerting bool `protobuf:"varint,14,opt,name=disable_alerting,json=disableAlerting,proto3" json:"disable_alerting,omitempty"` + EnableAlerting *bool `protobuf:"varint,13,opt,name=enable_alerting,json=enableAlerting,proto3,oneof" json:"enable_alerting,omitempty"` // PMM Server public address. - PmmPublicAddress string `protobuf:"bytes,19,opt,name=pmm_public_address,json=pmmPublicAddress,proto3" json:"pmm_public_address,omitempty"` - RemovePmmPublicAddress bool `protobuf:"varint,20,opt,name=remove_pmm_public_address,json=removePmmPublicAddress,proto3" json:"remove_pmm_public_address,omitempty"` + PmmPublicAddress *string `protobuf:"bytes,19,opt,name=pmm_public_address,json=pmmPublicAddress,proto3,oneof" json:"pmm_public_address,omitempty"` // Intervals between STT check runs. SttCheckIntervals *STTCheckIntervals `protobuf:"bytes,21,opt,name=stt_check_intervals,json=sttCheckIntervals,proto3" json:"stt_check_intervals,omitempty"` // Enable Azure Discover. - EnableAzurediscover bool `protobuf:"varint,22,opt,name=enable_azurediscover,json=enableAzurediscover,proto3" json:"enable_azurediscover,omitempty"` - // Disable Azure Discover. - DisableAzurediscover bool `protobuf:"varint,23,opt,name=disable_azurediscover,json=disableAzurediscover,proto3" json:"disable_azurediscover,omitempty"` + EnableAzurediscover *bool `protobuf:"varint,22,opt,name=enable_azurediscover,json=enableAzurediscover,proto3,oneof" json:"enable_azurediscover,omitempty"` // Enable Backup Management. - EnableBackupManagement bool `protobuf:"varint,24,opt,name=enable_backup_management,json=enableBackupManagement,proto3" json:"enable_backup_management,omitempty"` - // Disable Backup Management. - DisableBackupManagement bool `protobuf:"varint,25,opt,name=disable_backup_management,json=disableBackupManagement,proto3" json:"disable_backup_management,omitempty"` + EnableBackupManagement *bool `protobuf:"varint,24,opt,name=enable_backup_management,json=enableBackupManagement,proto3,oneof" json:"enable_backup_management,omitempty"` // Enable Access Control - EnableAccessControl bool `protobuf:"varint,30,opt,name=enable_access_control,json=enableAccessControl,proto3" json:"enable_access_control,omitempty"` - // Disable Access Control - DisableAccessControl bool `protobuf:"varint,31,opt,name=disable_access_control,json=disableAccessControl,proto3" json:"disable_access_control,omitempty"` + EnableAccessControl *bool `protobuf:"varint,30,opt,name=enable_access_control,json=enableAccessControl,proto3,oneof" json:"enable_access_control,omitempty"` } func (x *ChangeSettingsRequest) Reset() { @@ -1268,29 +1257,15 @@ func (*ChangeSettingsRequest) Descriptor() ([]byte, []int) { } func (x *ChangeSettingsRequest) GetEnableUpdates() bool { - if x != nil { - return x.EnableUpdates - } - return false -} - -func (x *ChangeSettingsRequest) GetDisableUpdates() bool { - if x != nil { - return x.DisableUpdates + if x != nil && x.EnableUpdates != nil { + return *x.EnableUpdates } return false } func (x *ChangeSettingsRequest) GetEnableTelemetry() bool { - if x != nil { - return x.EnableTelemetry - } - return false -} - -func (x *ChangeSettingsRequest) GetDisableTelemetry() bool { - if x != nil { - return x.DisableTelemetry + if x != nil && x.EnableTelemetry != nil { + return *x.EnableTelemetry } return false } @@ -1310,13 +1285,13 @@ func (x *ChangeSettingsRequest) GetDataRetention() *durationpb.Duration { } func (x *ChangeSettingsRequest) GetSshKey() string { - if x != nil { - return x.SshKey + if x != nil && x.SshKey != nil { + return *x.SshKey } return "" } -func (x *ChangeSettingsRequest) GetAwsPartitions() []string { +func (x *ChangeSettingsRequest) GetAwsPartitions() *common.StringArray { if x != nil { return x.AwsPartitions } @@ -1324,47 +1299,26 @@ func (x *ChangeSettingsRequest) GetAwsPartitions() []string { } func (x *ChangeSettingsRequest) GetEnableStt() bool { - if x != nil { - return x.EnableStt - } - return false -} - -func (x *ChangeSettingsRequest) GetDisableStt() bool { - if x != nil { - return x.DisableStt + if x != nil && x.EnableStt != nil { + return *x.EnableStt } return false } func (x *ChangeSettingsRequest) GetEnableAlerting() bool { - if x != nil { - return x.EnableAlerting - } - return false -} - -func (x *ChangeSettingsRequest) GetDisableAlerting() bool { - if x != nil { - return x.DisableAlerting + if x != nil && x.EnableAlerting != nil { + return *x.EnableAlerting } return false } func (x *ChangeSettingsRequest) GetPmmPublicAddress() string { - if x != nil { - return x.PmmPublicAddress + if x != nil && x.PmmPublicAddress != nil { + return *x.PmmPublicAddress } return "" } -func (x *ChangeSettingsRequest) GetRemovePmmPublicAddress() bool { - if x != nil { - return x.RemovePmmPublicAddress - } - return false -} - func (x *ChangeSettingsRequest) GetSttCheckIntervals() *STTCheckIntervals { if x != nil { return x.SttCheckIntervals @@ -1373,43 +1327,22 @@ func (x *ChangeSettingsRequest) GetSttCheckIntervals() *STTCheckIntervals { } func (x *ChangeSettingsRequest) GetEnableAzurediscover() bool { - if x != nil { - return x.EnableAzurediscover - } - return false -} - -func (x *ChangeSettingsRequest) GetDisableAzurediscover() bool { - if x != nil { - return x.DisableAzurediscover + if x != nil && x.EnableAzurediscover != nil { + return *x.EnableAzurediscover } return false } func (x *ChangeSettingsRequest) GetEnableBackupManagement() bool { - if x != nil { - return x.EnableBackupManagement - } - return false -} - -func (x *ChangeSettingsRequest) GetDisableBackupManagement() bool { - if x != nil { - return x.DisableBackupManagement + if x != nil && x.EnableBackupManagement != nil { + return *x.EnableBackupManagement } return false } func (x *ChangeSettingsRequest) GetEnableAccessControl() bool { - if x != nil { - return x.EnableAccessControl - } - return false -} - -func (x *ChangeSettingsRequest) GetDisableAccessControl() bool { - if x != nil { - return x.DisableAccessControl + if x != nil && x.EnableAccessControl != nil { + return *x.EnableAccessControl } return false } @@ -1552,384 +1485,378 @@ var File_server_v1_server_proto protoreflect.FileDescriptor var file_server_v1_server_proto_rawDesc = []byte{ 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x84, 0x01, 0x0a, 0x0b, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6c, - 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x22, 0x26, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x22, 0xdd, 0x01, 0x0a, 0x0f, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x07, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x12, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x12, 0x0a, 0x10, 0x52, 0x65, - 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x13, - 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x1b, 0x0a, 0x19, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x13, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x6e, 0x6c, - 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6f, 0x6e, 0x6c, 0x79, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x8a, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x2e, - 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x76, 0x31, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, + 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x84, 0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x75, + 0x6c, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x26, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x75, 0x6d, + 0x6d, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x22, + 0xdd, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, + 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x30, 0x0a, + 0x07, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x29, - 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x77, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x73, 0x55, 0x72, - 0x6c, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x14, 0x0a, 0x12, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x53, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, - 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, - 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x53, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x12, + 0x4e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x12, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, + 0x12, 0x0a, 0x10, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x13, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x4c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x61, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x34, + 0x0a, 0x16, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, + 0x6f, 0x6e, 0x6c, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x8a, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x26, + 0x0a, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x77, 0x73, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, + 0x65, 0x77, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x22, 0x14, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x66, 0x0a, 0x14, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, - 0x64, 0x6f, 0x6e, 0x65, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x02, 0x68, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x53, 0x0a, 0x13, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x22, 0x66, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, + 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, + 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x29, 0x0a, 0x02, 0x68, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x68, 0x72, 0x12, 0x29, 0x0a, 0x02, 0x6d, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x02, 0x68, 0x72, 0x12, 0x29, 0x0a, 0x02, 0x6d, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x6f, 0x6e, 0x52, 0x02, 0x6d, 0x72, 0x12, 0x29, 0x0a, 0x02, 0x6c, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6c, + 0x72, 0x22, 0xe3, 0x01, 0x0a, 0x11, 0x53, 0x54, 0x54, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x46, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, + 0x61, 0x72, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6d, - 0x72, 0x12, 0x29, 0x0a, 0x02, 0x6c, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6c, 0x72, 0x22, 0xe3, 0x01, 0x0a, - 0x11, 0x53, 0x54, 0x54, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x73, 0x12, 0x46, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, - 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x61, - 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, + 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, + 0x3e, 0x0a, 0x0d, 0x72, 0x61, 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0c, 0x72, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, + 0x46, 0x0a, 0x11, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0xeb, 0x06, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x5f, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, + 0x11, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, + 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x73, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, + 0x77, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x73, 0x74, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x73, 0x74, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, + 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x2c, 0x0a, 0x12, 0x70, 0x6d, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6d, 0x6d, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, + 0x13, 0x73, 0x74, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x76, 0x61, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x54, 0x54, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x11, 0x73, 0x74, 0x74, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x2f, 0x0a, 0x13, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x73, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, + 0x73, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x4a, + 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x13, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x22, 0xe8, 0x07, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, + 0x0e, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x1c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x61, - 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x46, 0x0a, 0x11, 0x66, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x10, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x22, 0xed, 0x06, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x29, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x73, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x73, 0x68, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x73, 0x68, 0x4b, - 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x74, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x73, 0x74, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6d, 0x61, 0x69, - 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x6c, 0x65, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x07, 0x73, + 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, + 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x0e, 0x61, 0x77, 0x73, + 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x41, 0x72, 0x72, 0x61, 0x79, 0x48, 0x03, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, + 0x52, 0x09, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, + 0x0a, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, + 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x48, 0x05, 0x52, 0x0e, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x70, 0x6d, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6d, 0x6d, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x73, 0x74, - 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x54, 0x54, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x11, 0x73, 0x74, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2f, 0x0a, - 0x13, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x69, 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x74, 0x65, 0x6c, 0x65, - 0x6d, 0x65, 0x74, 0x72, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x32, - 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, 0x6f, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, - 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x4a, 0x04, 0x08, 0x0e, - 0x10, 0x0f, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x22, 0xd4, 0x08, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x1c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, - 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x12, 0x4e, 0x0a, 0x13, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, - 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x77, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, - 0x74, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x74, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, - 0x74, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x74, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, - 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, - 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x41, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6d, 0x6d, 0x5f, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6d, 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x70, 0x6d, 0x6d, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x50, 0x6d, 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x73, 0x74, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x54, 0x54, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x11, 0x73, 0x74, - 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, - 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, + 0x73, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x10, 0x70, 0x6d, 0x6d, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, + 0x4c, 0x0a, 0x13, 0x73, 0x74, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x54, 0x54, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x11, 0x73, 0x74, 0x74, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x36, 0x0a, + 0x14, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x12, 0x33, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x7a, - 0x75, 0x72, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x14, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x48, 0x08, 0x52, 0x16, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x3a, 0x0a, 0x19, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, - 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x1f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x14, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, - 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x4a, - 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, - 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x49, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x22, 0x43, 0x0a, 0x17, 0x41, 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x41, 0x57, 0x53, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2a, 0xce, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x49, - 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, - 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x1e, 0x0a, 0x1a, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x01, 0x12, - 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4f, 0x56, 0x46, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, - 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, - 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x4d, 0x49, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x49, 0x53, - 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, - 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x54, - 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, - 0x44, 0x4f, 0x10, 0x05, 0x32, 0xa2, 0x0d, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7f, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x27, 0x12, 0x07, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x1c, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, - 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xa4, 0x02, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xdb, 0x01, 0x92, 0x41, 0xc5, 0x01, 0x12, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x1a, - 0xaa, 0x01, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, - 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x79, 0x65, 0x74, 0x2e, 0x20, 0x55, 0x73, 0x65, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, - 0x72, 0x6f, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, - 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x7a, 0x12, 0xfd, - 0x01, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x12, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x9c, 0x01, 0x92, 0x41, 0x79, 0x12, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x4c, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x1a, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, - 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, - 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x69, 0x6e, - 0x20, 0x61, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x6e, - 0x27, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xa9, - 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, - 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x58, 0x92, 0x41, 0x39, 0x12, 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x73, 0x1a, 0x28, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x82, 0xd3, + 0x74, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x1e, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x09, 0x52, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, + 0x0f, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, + 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, + 0x79, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x73, 0x74, 0x74, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, + 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x70, 0x6d, 0x6d, 0x5f, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x17, + 0x0a, 0x15, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4a, 0x04, + 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, + 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, + 0x10, 0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x49, + 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x43, 0x0a, 0x17, 0x41, 0x57, 0x53, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x22, 0x1a, + 0x0a, 0x18, 0x41, 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0xce, 0x01, 0x0a, 0x12, 0x44, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, + 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x4f, + 0x43, 0x4b, 0x45, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, + 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4f, 0x56, + 0x46, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x4d, 0x49, 0x10, 0x03, + 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x04, 0x12, + 0x1a, 0x0a, 0x16, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x4f, 0x10, 0x05, 0x32, 0xa2, 0x0d, 0x0a, 0x0d, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7f, 0x0a, + 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3d, 0x92, 0x41, 0x27, 0x12, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x1c, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xa4, + 0x02, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdb, 0x01, 0x92, 0x41, 0xc5, 0x01, 0x12, 0x16, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x1a, 0xaa, 0x01, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, + 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, + 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x79, + 0x65, 0x74, 0x2e, 0x20, 0x55, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x41, 0x50, 0x49, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x6f, 0x63, 0x6b, + 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x4b, 0x75, + 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, + 0x73, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x7a, 0x12, 0xfd, 0x01, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x23, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x92, 0x41, 0x79, 0x12, 0x10, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x20, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x1a, 0x65, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x2e, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, + 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xa9, 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x92, 0x41, 0x39, 0x12, 0x0d, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x28, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x12, 0x96, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x48, 0x92, 0x41, 0x29, 0x12, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x1a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x73, 0x2f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x96, 0x01, 0x0a, 0x0b, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x29, 0x12, 0x0c, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x19, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0xa3, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x92, 0x41, 0x32, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x21, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x92, 0x41, 0x34, 0x12, 0x0c, 0x47, - 0x65, 0x74, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x24, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x73, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x50, 0x4d, 0x4d, - 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x12, 0xa7, 0x01, 0x0a, - 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x92, 0x41, 0x2f, 0x12, 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x1c, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, - 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x10, 0x41, 0x57, 0x53, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x22, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x57, 0x53, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x31, 0x12, 0x12, 0x41, 0x57, 0x53, 0x20, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x1a, 0x1b, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x41, 0x57, 0x53, 0x20, 0x45, 0x43, 0x32, 0x20, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x49, 0x44, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x41, 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x90, 0x01, 0x0a, 0x0d, 0x63, 0x6f, - 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, - 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x76, 0x31, - 0x3b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, - 0x02, 0x09, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x09, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x15, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x65, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0xa3, 0x01, 0x0a, 0x0c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x92, 0x41, + 0x32, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x1a, 0x21, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, + 0x31, 0x2f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0xa0, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x52, 0x92, 0x41, 0x34, 0x12, 0x0c, 0x47, 0x65, 0x74, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x1a, 0x24, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, + 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, + 0x47, 0x65, 0x74, 0x12, 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x92, 0x41, 0x2f, + 0x12, 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x1a, 0x1c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0xb0, 0x01, + 0x0a, 0x10, 0x41, 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0x22, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x31, + 0x12, 0x12, 0x41, 0x57, 0x53, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x1a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x41, 0x57, 0x53, + 0x20, 0x45, 0x43, 0x32, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x49, 0x44, + 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, + 0x41, 0x57, 0x53, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x42, 0x90, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x42, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, + 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x09, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, + 0x15, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1973,6 +1900,7 @@ var ( (*AWSInstanceCheckResponse)(nil), // 22: server.v1.AWSInstanceCheckResponse (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp (*durationpb.Duration)(nil), // 24: google.protobuf.Duration + (*common.StringArray)(nil), // 25: common.StringArray } ) @@ -1996,31 +1924,32 @@ var file_server_v1_server_proto_depIdxs = []int32{ 16, // 16: server.v1.GetSettingsResponse.settings:type_name -> server.v1.Settings 14, // 17: server.v1.ChangeSettingsRequest.metrics_resolutions:type_name -> server.v1.MetricsResolutions 24, // 18: server.v1.ChangeSettingsRequest.data_retention:type_name -> google.protobuf.Duration - 15, // 19: server.v1.ChangeSettingsRequest.stt_check_intervals:type_name -> server.v1.STTCheckIntervals - 16, // 20: server.v1.ChangeSettingsResponse.settings:type_name -> server.v1.Settings - 2, // 21: server.v1.ServerService.Version:input_type -> server.v1.VersionRequest - 4, // 22: server.v1.ServerService.Readiness:input_type -> server.v1.ReadinessRequest - 6, // 23: server.v1.ServerService.LeaderHealthCheck:input_type -> server.v1.LeaderHealthCheckRequest - 8, // 24: server.v1.ServerService.CheckUpdates:input_type -> server.v1.CheckUpdatesRequest - 10, // 25: server.v1.ServerService.StartUpdate:input_type -> server.v1.StartUpdateRequest - 12, // 26: server.v1.ServerService.UpdateStatus:input_type -> server.v1.UpdateStatusRequest - 17, // 27: server.v1.ServerService.GetSettings:input_type -> server.v1.GetSettingsRequest - 19, // 28: server.v1.ServerService.ChangeSettings:input_type -> server.v1.ChangeSettingsRequest - 21, // 29: server.v1.ServerService.AWSInstanceCheck:input_type -> server.v1.AWSInstanceCheckRequest - 3, // 30: server.v1.ServerService.Version:output_type -> server.v1.VersionResponse - 5, // 31: server.v1.ServerService.Readiness:output_type -> server.v1.ReadinessResponse - 7, // 32: server.v1.ServerService.LeaderHealthCheck:output_type -> server.v1.LeaderHealthCheckResponse - 9, // 33: server.v1.ServerService.CheckUpdates:output_type -> server.v1.CheckUpdatesResponse - 11, // 34: server.v1.ServerService.StartUpdate:output_type -> server.v1.StartUpdateResponse - 13, // 35: server.v1.ServerService.UpdateStatus:output_type -> server.v1.UpdateStatusResponse - 18, // 36: server.v1.ServerService.GetSettings:output_type -> server.v1.GetSettingsResponse - 20, // 37: server.v1.ServerService.ChangeSettings:output_type -> server.v1.ChangeSettingsResponse - 22, // 38: server.v1.ServerService.AWSInstanceCheck:output_type -> server.v1.AWSInstanceCheckResponse - 30, // [30:39] is the sub-list for method output_type - 21, // [21:30] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 25, // 19: server.v1.ChangeSettingsRequest.aws_partitions:type_name -> common.StringArray + 15, // 20: server.v1.ChangeSettingsRequest.stt_check_intervals:type_name -> server.v1.STTCheckIntervals + 16, // 21: server.v1.ChangeSettingsResponse.settings:type_name -> server.v1.Settings + 2, // 22: server.v1.ServerService.Version:input_type -> server.v1.VersionRequest + 4, // 23: server.v1.ServerService.Readiness:input_type -> server.v1.ReadinessRequest + 6, // 24: server.v1.ServerService.LeaderHealthCheck:input_type -> server.v1.LeaderHealthCheckRequest + 8, // 25: server.v1.ServerService.CheckUpdates:input_type -> server.v1.CheckUpdatesRequest + 10, // 26: server.v1.ServerService.StartUpdate:input_type -> server.v1.StartUpdateRequest + 12, // 27: server.v1.ServerService.UpdateStatus:input_type -> server.v1.UpdateStatusRequest + 17, // 28: server.v1.ServerService.GetSettings:input_type -> server.v1.GetSettingsRequest + 19, // 29: server.v1.ServerService.ChangeSettings:input_type -> server.v1.ChangeSettingsRequest + 21, // 30: server.v1.ServerService.AWSInstanceCheck:input_type -> server.v1.AWSInstanceCheckRequest + 3, // 31: server.v1.ServerService.Version:output_type -> server.v1.VersionResponse + 5, // 32: server.v1.ServerService.Readiness:output_type -> server.v1.ReadinessResponse + 7, // 33: server.v1.ServerService.LeaderHealthCheck:output_type -> server.v1.LeaderHealthCheckResponse + 9, // 34: server.v1.ServerService.CheckUpdates:output_type -> server.v1.CheckUpdatesResponse + 11, // 35: server.v1.ServerService.StartUpdate:output_type -> server.v1.StartUpdateResponse + 13, // 36: server.v1.ServerService.UpdateStatus:output_type -> server.v1.UpdateStatusResponse + 18, // 37: server.v1.ServerService.GetSettings:output_type -> server.v1.GetSettingsResponse + 20, // 38: server.v1.ServerService.ChangeSettings:output_type -> server.v1.ChangeSettingsResponse + 22, // 39: server.v1.ServerService.AWSInstanceCheck:output_type -> server.v1.AWSInstanceCheckResponse + 31, // [31:40] is the sub-list for method output_type + 22, // [22:31] is the sub-list for method input_type + 22, // [22:22] is the sub-list for extension type_name + 22, // [22:22] is the sub-list for extension extendee + 0, // [0:22] is the sub-list for field type_name } func init() { file_server_v1_server_proto_init() } @@ -2294,6 +2223,7 @@ func file_server_v1_server_proto_init() { } } } + file_server_v1_server_proto_msgTypes[18].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/server/v1/server.pb.validate.go b/api/server/v1/server.pb.validate.go index 37641ce2ff..0d019013a0 100644 --- a/api/server/v1/server.pb.validate.go +++ b/api/server/v1/server.pb.validate.go @@ -1956,7 +1956,7 @@ func (m *Settings) validate(all bool) error { var errors []error - // no validation rules for UpdatesDisabled + // no validation rules for UpdatesEnabled // no validation rules for TelemetryEnabled @@ -2399,14 +2399,6 @@ func (m *ChangeSettingsRequest) validate(all bool) error { var errors []error - // no validation rules for EnableUpdates - - // no validation rules for DisableUpdates - - // no validation rules for EnableTelemetry - - // no validation rules for DisableTelemetry - if all { switch v := interface{}(m.GetMetricsResolutions()).(type) { case interface{ ValidateAll() error }: @@ -2465,20 +2457,6 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } } - // no validation rules for SshKey - - // no validation rules for EnableStt - - // no validation rules for DisableStt - - // no validation rules for EnableAlerting - - // no validation rules for DisableAlerting - - // no validation rules for PmmPublicAddress - - // no validation rules for RemovePmmPublicAddress - if all { switch v := interface{}(m.GetSttCheckIntervals()).(type) { case interface{ ValidateAll() error }: @@ -2508,17 +2486,72 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } } - // no validation rules for EnableAzurediscover + if m.EnableUpdates != nil { + // no validation rules for EnableUpdates + } + + if m.EnableTelemetry != nil { + // no validation rules for EnableTelemetry + } + + if m.SshKey != nil { + // no validation rules for SshKey + } + + if m.AwsPartitions != nil { + if all { + switch v := interface{}(m.GetAwsPartitions()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeSettingsRequestValidationError{ + field: "AwsPartitions", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeSettingsRequestValidationError{ + field: "AwsPartitions", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAwsPartitions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeSettingsRequestValidationError{ + field: "AwsPartitions", + reason: "embedded message failed validation", + cause: err, + } + } + } + } + + if m.EnableStt != nil { + // no validation rules for EnableStt + } - // no validation rules for DisableAzurediscover + if m.EnableAlerting != nil { + // no validation rules for EnableAlerting + } - // no validation rules for EnableBackupManagement + if m.PmmPublicAddress != nil { + // no validation rules for PmmPublicAddress + } - // no validation rules for DisableBackupManagement + if m.EnableAzurediscover != nil { + // no validation rules for EnableAzurediscover + } - // no validation rules for EnableAccessControl + if m.EnableBackupManagement != nil { + // no validation rules for EnableBackupManagement + } - // no validation rules for DisableAccessControl + if m.EnableAccessControl != nil { + // no validation rules for EnableAccessControl + } if len(errors) > 0 { return ChangeSettingsRequestMultiError(errors) diff --git a/api/server/v1/server.proto b/api/server/v1/server.proto index 65a591684e..f3607e14c9 100644 --- a/api/server/v1/server.proto +++ b/api/server/v1/server.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package server.v1; +import "common/common.proto"; import "google/api/annotations.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; @@ -126,8 +127,8 @@ message STTCheckIntervals { message Settings { reserved 7, 8, 13, 14; // Removed fields - // True if updates are disabled. - bool updates_disabled = 1; + // True if updates are enabled. + bool updates_enabled = 1; // True if telemetry is enabled. bool telemetry_enabled = 2; MetricsResolutions metrics_resolutions = 3; @@ -167,40 +168,27 @@ message GetSettingsResponse { message ChangeSettingsRequest { reserved 7, 8, 9, 10, 15, 16, 17, 18; //Removed fields - bool enable_updates = 28; - bool disable_updates = 29; - bool enable_telemetry = 1; - bool disable_telemetry = 2; + optional bool enable_updates = 28; + optional bool enable_telemetry = 1; MetricsResolutions metrics_resolutions = 3; // A number of full days for Prometheus and QAN data retention. Should have a suffix in JSON: 2592000s, 43200m, 720h. google.protobuf.Duration data_retention = 4; - string ssh_key = 5; - repeated string aws_partitions = 6; + optional string ssh_key = 5; + optional common.StringArray aws_partitions = 6; // Enable Security Threat Tool. - bool enable_stt = 11; - // Disable Security Threat Tool. - bool disable_stt = 12; + optional bool enable_stt = 11; // Enable Alerting. - bool enable_alerting = 13; - // Disable Alerting. - bool disable_alerting = 14; + optional bool enable_alerting = 13; // PMM Server public address. - string pmm_public_address = 19; - bool remove_pmm_public_address = 20; + optional string pmm_public_address = 19; // Intervals between STT check runs. STTCheckIntervals stt_check_intervals = 21; // Enable Azure Discover. - bool enable_azurediscover = 22; - // Disable Azure Discover. - bool disable_azurediscover = 23; + optional bool enable_azurediscover = 22; // Enable Backup Management. - bool enable_backup_management = 24; - // Disable Backup Management. - bool disable_backup_management = 25; + optional bool enable_backup_management = 24; // Enable Access Control - bool enable_access_control = 30; - // Disable Access Control - bool disable_access_control = 31; + optional bool enable_access_control = 30; } message ChangeSettingsResponse { diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index 70a7dae64e..2b58280140 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -2627,21 +2627,25 @@ "tier": { "description": "Entitlement tier.", "type": "string", + "x-nullable": true, "x-order": 3 }, "total_units": { "description": "Total units covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 4 }, "unlimited_units": { "description": "Flag indicates that unlimited units are covered.", "type": "boolean", + "x-nullable": true, "x-order": 5 }, "support_level": { "description": "Support level covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 6 }, "software_families": { @@ -2671,11 +2675,13 @@ "security_advisor": { "description": "Flag indicates that security advisors are covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 0 }, "config_advisor": { "description": "Flag indicates that config advisors are covered by this entitlement.", "type": "string", + "x-nullable": true, "x-order": 1 } }, @@ -3000,19 +3006,13 @@ "properties": { "enable_updates": { "type": "boolean", + "x-nullable": true, "x-order": 0 }, - "disable_updates": { - "type": "boolean", - "x-order": 1 - }, "enable_telemetry": { "type": "boolean", - "x-order": 2 - }, - "disable_telemetry": { - "type": "boolean", - "x-order": 3 + "x-nullable": true, + "x-order": 1 }, "metrics_resolutions": { "description": "MetricsResolutions represents Prometheus exporters metrics resolutions.", @@ -3034,52 +3034,50 @@ "x-order": 2 } }, - "x-order": 4 + "x-order": 2 }, "data_retention": { "description": "A number of full days for Prometheus and QAN data retention. Should have a suffix in JSON: 2592000s, 43200m, 720h.", "type": "string", - "x-order": 5 + "x-order": 3 }, "ssh_key": { "type": "string", - "x-order": 6 + "x-nullable": true, + "x-order": 4 }, "aws_partitions": { - "type": "array", - "items": { - "type": "string" + "description": "A wrapper for a string array. This type allows to distinguish between an empty array and a null value.", + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + }, + "x-order": 0 + } }, - "x-order": 7 + "x-nullable": true, + "x-order": 5 }, "enable_stt": { "description": "Enable Security Threat Tool.", "type": "boolean", - "x-order": 8 - }, - "disable_stt": { - "description": "Disable Security Threat Tool.", - "type": "boolean", - "x-order": 9 + "x-nullable": true, + "x-order": 6 }, "enable_alerting": { "description": "Enable Alerting.", "type": "boolean", - "x-order": 10 - }, - "disable_alerting": { - "description": "Disable Alerting.", - "type": "boolean", - "x-order": 11 + "x-nullable": true, + "x-order": 7 }, "pmm_public_address": { "description": "PMM Server public address.", "type": "string", - "x-order": 12 - }, - "remove_pmm_public_address": { - "type": "boolean", - "x-order": 13 + "x-nullable": true, + "x-order": 8 }, "stt_check_intervals": { "description": "STTCheckIntervals represents intervals between STT checks.", @@ -3101,37 +3099,25 @@ "x-order": 2 } }, - "x-order": 14 + "x-order": 9 }, "enable_azurediscover": { "description": "Enable Azure Discover.", "type": "boolean", - "x-order": 15 - }, - "disable_azurediscover": { - "description": "Disable Azure Discover.", - "type": "boolean", - "x-order": 16 + "x-nullable": true, + "x-order": 10 }, "enable_backup_management": { "description": "Enable Backup Management.", "type": "boolean", - "x-order": 17 - }, - "disable_backup_management": { - "description": "Disable Backup Management.", - "type": "boolean", - "x-order": 18 + "x-nullable": true, + "x-order": 11 }, "enable_access_control": { "type": "boolean", "title": "Enable Access Control", - "x-order": 19 - }, - "disable_access_control": { - "type": "boolean", - "title": "Disable Access Control", - "x-order": 20 + "x-nullable": true, + "x-order": 12 } } } @@ -3147,8 +3133,8 @@ "description": "Settings represents PMM Server settings.", "type": "object", "properties": { - "updates_disabled": { - "description": "True if updates are disabled.", + "updates_enabled": { + "description": "True if updates are enabled.", "type": "boolean", "x-order": 0 }, @@ -3340,8 +3326,8 @@ "description": "Settings represents PMM Server settings.", "type": "object", "properties": { - "updates_disabled": { - "description": "True if updates are disabled.", + "updates_enabled": { + "description": "True if updates are enabled.", "type": "boolean", "x-order": 0 }, @@ -14484,18 +14470,22 @@ }, "environment": { "type": "string", + "x-nullable": true, "x-order": 1 }, "cluster": { "type": "string", + "x-nullable": true, "x-order": 2 }, "replication_set": { "type": "string", + "x-nullable": true, "x-order": 3 }, "external_group": { "type": "string", + "x-nullable": true, "x-order": 4 } } @@ -17251,8 +17241,8 @@ "type": "string", "x-order": 0 }, - "disabled": { - "description": "True if that check is disabled.", + "enabled": { + "description": "True if that check is enabled.", "type": "boolean", "x-order": 1 }, @@ -23351,14 +23341,17 @@ }, "title": { "type": "string", + "x-nullable": true, "x-order": 1 }, "filter": { "type": "string", + "x-nullable": true, "x-order": 2 }, "description": { "type": "string", + "x-nullable": true, "x-order": 3 } } @@ -23435,12 +23428,9 @@ }, "enable": { "type": "boolean", + "x-nullable": true, "x-order": 1 }, - "disable": { - "type": "boolean", - "x-order": 2 - }, "interval": { "description": "SecurityCheckInterval represents possible execution interval values for checks.", "type": "string", @@ -23451,7 +23441,7 @@ "SECURITY_CHECK_INTERVAL_FREQUENT", "SECURITY_CHECK_INTERVAL_RARE" ], - "x-order": 3 + "x-order": 2 } } }, @@ -23823,8 +23813,8 @@ "type": "string", "x-order": 0 }, - "disabled": { - "description": "True if that check is disabled.", + "enabled": { + "description": "True if that check is enabled.", "type": "boolean", "x-order": 1 }, @@ -26193,11 +26183,13 @@ }, "enabled": { "type": "boolean", + "x-nullable": true, "x-order": 1 }, "cron_expression": { "description": "How often backup should be run in cron format.", "type": "string", + "x-nullable": true, "x-order": 2 }, "start_time": { @@ -26209,11 +26201,13 @@ "name": { "description": "Name of backup.", "type": "string", + "x-nullable": true, "x-order": 4 }, "description": { "description": "Human-readable description.", "type": "string", + "x-nullable": true, "x-order": 5 }, "retry_interval": { @@ -26225,12 +26219,14 @@ "description": "How many times to retry a failed backup before giving up.", "type": "integer", "format": "int64", + "x-nullable": true, "x-order": 7 }, "retention": { "description": "How many artifacts keep. 0 - unlimited.", "type": "integer", "format": "int64", + "x-nullable": true, "x-order": 8 } } @@ -28419,11 +28415,13 @@ "product_tour_completed": { "type": "boolean", "title": "Product Tour", + "x-nullable": true, "x-order": 0 }, "alerting_tour_completed": { "type": "boolean", "title": "Alerting Tour", + "x-nullable": true, "x-order": 1 } } diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index 0f0386a131..d4655e8280 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -149,19 +149,13 @@ "properties": { "enable_updates": { "type": "boolean", + "x-nullable": true, "x-order": 0 }, - "disable_updates": { - "type": "boolean", - "x-order": 1 - }, "enable_telemetry": { "type": "boolean", - "x-order": 2 - }, - "disable_telemetry": { - "type": "boolean", - "x-order": 3 + "x-nullable": true, + "x-order": 1 }, "metrics_resolutions": { "description": "MetricsResolutions represents Prometheus exporters metrics resolutions.", @@ -183,52 +177,50 @@ "x-order": 2 } }, - "x-order": 4 + "x-order": 2 }, "data_retention": { "description": "A number of full days for Prometheus and QAN data retention. Should have a suffix in JSON: 2592000s, 43200m, 720h.", "type": "string", - "x-order": 5 + "x-order": 3 }, "ssh_key": { "type": "string", - "x-order": 6 + "x-nullable": true, + "x-order": 4 }, "aws_partitions": { - "type": "array", - "items": { - "type": "string" + "description": "A wrapper for a string array. This type allows to distinguish between an empty array and a null value.", + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + }, + "x-order": 0 + } }, - "x-order": 7 + "x-nullable": true, + "x-order": 5 }, "enable_stt": { "description": "Enable Security Threat Tool.", "type": "boolean", - "x-order": 8 - }, - "disable_stt": { - "description": "Disable Security Threat Tool.", - "type": "boolean", - "x-order": 9 + "x-nullable": true, + "x-order": 6 }, "enable_alerting": { "description": "Enable Alerting.", "type": "boolean", - "x-order": 10 - }, - "disable_alerting": { - "description": "Disable Alerting.", - "type": "boolean", - "x-order": 11 + "x-nullable": true, + "x-order": 7 }, "pmm_public_address": { "description": "PMM Server public address.", "type": "string", - "x-order": 12 - }, - "remove_pmm_public_address": { - "type": "boolean", - "x-order": 13 + "x-nullable": true, + "x-order": 8 }, "stt_check_intervals": { "description": "STTCheckIntervals represents intervals between STT checks.", @@ -250,37 +242,25 @@ "x-order": 2 } }, - "x-order": 14 + "x-order": 9 }, "enable_azurediscover": { "description": "Enable Azure Discover.", "type": "boolean", - "x-order": 15 - }, - "disable_azurediscover": { - "description": "Disable Azure Discover.", - "type": "boolean", - "x-order": 16 + "x-nullable": true, + "x-order": 10 }, "enable_backup_management": { "description": "Enable Backup Management.", "type": "boolean", - "x-order": 17 - }, - "disable_backup_management": { - "description": "Disable Backup Management.", - "type": "boolean", - "x-order": 18 + "x-nullable": true, + "x-order": 11 }, "enable_access_control": { "type": "boolean", "title": "Enable Access Control", - "x-order": 19 - }, - "disable_access_control": { - "type": "boolean", - "title": "Disable Access Control", - "x-order": 20 + "x-nullable": true, + "x-order": 12 } } } @@ -296,8 +276,8 @@ "description": "Settings represents PMM Server settings.", "type": "object", "properties": { - "updates_disabled": { - "description": "True if updates are disabled.", + "updates_enabled": { + "description": "True if updates are enabled.", "type": "boolean", "x-order": 0 }, @@ -489,8 +469,8 @@ "description": "Settings represents PMM Server settings.", "type": "object", "properties": { - "updates_disabled": { - "description": "True if updates are disabled.", + "updates_enabled": { + "description": "True if updates are enabled.", "type": "boolean", "x-order": 0 }, @@ -2456,8 +2436,8 @@ "type": "string", "x-order": 0 }, - "disabled": { - "description": "True if that check is disabled.", + "enabled": { + "description": "True if that check is enabled.", "type": "boolean", "x-order": 1 }, @@ -7270,12 +7250,9 @@ }, "enable": { "type": "boolean", + "x-nullable": true, "x-order": 1 }, - "disable": { - "type": "boolean", - "x-order": 2 - }, "interval": { "description": "SecurityCheckInterval represents possible execution interval values for checks.", "type": "string", @@ -7286,7 +7263,7 @@ "SECURITY_CHECK_INTERVAL_FREQUENT", "SECURITY_CHECK_INTERVAL_RARE" ], - "x-order": 3 + "x-order": 2 } } }, @@ -7658,8 +7635,8 @@ "type": "string", "x-order": 0 }, - "disabled": { - "description": "True if that check is disabled.", + "enabled": { + "description": "True if that check is enabled.", "type": "boolean", "x-order": 1 }, @@ -9173,11 +9150,13 @@ }, "enabled": { "type": "boolean", + "x-nullable": true, "x-order": 1 }, "cron_expression": { "description": "How often backup should be run in cron format.", "type": "string", + "x-nullable": true, "x-order": 2 }, "start_time": { @@ -9189,11 +9168,13 @@ "name": { "description": "Name of backup.", "type": "string", + "x-nullable": true, "x-order": 4 }, "description": { "description": "Human-readable description.", "type": "string", + "x-nullable": true, "x-order": 5 }, "retry_interval": { @@ -9205,12 +9186,14 @@ "description": "How many times to retry a failed backup before giving up.", "type": "integer", "format": "int64", + "x-nullable": true, "x-order": 7 }, "retention": { "description": "How many artifacts keep. 0 - unlimited.", "type": "integer", "format": "int64", + "x-nullable": true, "x-order": 8 } } @@ -10947,11 +10930,13 @@ "product_tour_completed": { "type": "boolean", "title": "Product Tour", + "x-nullable": true, "x-order": 0 }, "alerting_tour_completed": { "type": "boolean", "title": "Alerting Tour", + "x-nullable": true, "x-order": 1 } } diff --git a/api/user/v1/json/client/user_service/update_user_responses.go b/api/user/v1/json/client/user_service/update_user_responses.go index 2aa321601d..f69a50c86c 100644 --- a/api/user/v1/json/client/user_service/update_user_responses.go +++ b/api/user/v1/json/client/user_service/update_user_responses.go @@ -124,10 +124,10 @@ swagger:model UpdateUserBody */ type UpdateUserBody struct { // Product Tour - ProductTourCompleted bool `json:"product_tour_completed,omitempty"` + ProductTourCompleted *bool `json:"product_tour_completed,omitempty"` // Alerting Tour - AlertingTourCompleted bool `json:"alerting_tour_completed,omitempty"` + AlertingTourCompleted *bool `json:"alerting_tour_completed,omitempty"` } // Validate validates this update user body diff --git a/api/user/v1/json/v1.json b/api/user/v1/json/v1.json index 908ec35c1e..e13d39325f 100644 --- a/api/user/v1/json/v1.json +++ b/api/user/v1/json/v1.json @@ -99,11 +99,13 @@ "alerting_tour_completed": { "type": "boolean", "title": "Alerting Tour", + "x-nullable": true, "x-order": 1 }, "product_tour_completed": { "type": "boolean", "title": "Product Tour", + "x-nullable": true, "x-order": 0 } } diff --git a/api/user/v1/user.pb.go b/api/user/v1/user.pb.go index 587c44173d..b1b068c22d 100644 --- a/api/user/v1/user.pb.go +++ b/api/user/v1/user.pb.go @@ -133,9 +133,9 @@ type UpdateUserRequest struct { unknownFields protoimpl.UnknownFields // Product Tour - ProductTourCompleted bool `protobuf:"varint,2,opt,name=product_tour_completed,json=productTourCompleted,proto3" json:"product_tour_completed,omitempty"` + ProductTourCompleted *bool `protobuf:"varint,2,opt,name=product_tour_completed,json=productTourCompleted,proto3,oneof" json:"product_tour_completed,omitempty"` // Alerting Tour - AlertingTourCompleted bool `protobuf:"varint,3,opt,name=alerting_tour_completed,json=alertingTourCompleted,proto3" json:"alerting_tour_completed,omitempty"` + AlertingTourCompleted *bool `protobuf:"varint,3,opt,name=alerting_tour_completed,json=alertingTourCompleted,proto3,oneof" json:"alerting_tour_completed,omitempty"` } func (x *UpdateUserRequest) Reset() { @@ -171,15 +171,15 @@ func (*UpdateUserRequest) Descriptor() ([]byte, []int) { } func (x *UpdateUserRequest) GetProductTourCompleted() bool { - if x != nil { - return x.ProductTourCompleted + if x != nil && x.ProductTourCompleted != nil { + return *x.ProductTourCompleted } return false } func (x *UpdateUserRequest) GetAlertingTourCompleted() bool { - if x != nil { - return x.AlertingTourCompleted + if x != nil && x.AlertingTourCompleted != nil { + return *x.AlertingTourCompleted } return false } @@ -411,76 +411,80 @@ var file_user_v1_user_proto_rawDesc = []byte{ 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x75, 0x72, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x6f, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x5f, 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, - 0x6f, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x9b, 0x01, 0x0a, - 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x6f, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, - 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x75, - 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x92, - 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x1a, 0x40, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, - 0x49, 0x64, 0x73, 0x32, 0xe4, 0x03, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, 0x39, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x25, 0x52, 0x65, 0x74, 0x72, 0x69, - 0x65, 0x76, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, - 0x12, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x39, 0x12, 0x0b, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x2a, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x67, 0x69, - 0x76, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x50, 0x4d, 0x4d, 0x20, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x1a, - 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0xae, 0x01, 0x0a, 0x09, 0x4c, 0x69, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, - 0x92, 0x41, 0x52, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x1a, 0x33, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0d, 0x2f, 0x76, 0x31, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x8f, 0x01, 0x92, 0x41, 0x0c, - 0x12, 0x0a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x20, 0x41, 0x50, 0x49, 0x0a, 0x0b, 0x63, 0x6f, - 0x6d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x09, 0x55, 0x73, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x76, - 0x31, 0xa2, 0x02, 0x03, 0x55, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x56, - 0x31, 0xca, 0x02, 0x07, 0x55, 0x73, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x13, 0x55, 0x73, - 0x65, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x08, 0x55, 0x73, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, + 0x52, 0x14, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x6f, 0x75, 0x72, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x61, 0x6c, 0x65, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x15, 0x61, 0x6c, + 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x5f, 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, + 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x9b, 0x01, + 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x34, 0x0a, + 0x16, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x54, 0x6f, 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, + 0x74, 0x6f, 0x75, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, + 0x75, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x12, 0x0a, 0x10, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x92, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x1a, 0x40, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x6f, 0x6c, + 0x65, 0x49, 0x64, 0x73, 0x32, 0xe4, 0x03, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x12, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, 0x39, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x75, 0x73, + 0x65, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x25, 0x52, 0x65, 0x74, 0x72, + 0x69, 0x65, 0x76, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x50, 0x4d, 0x4d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, + 0x72, 0x12, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x12, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x39, 0x12, 0x0b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x2a, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x67, + 0x69, 0x76, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x50, 0x4d, 0x4d, + 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, + 0x1a, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0xae, 0x01, 0x0a, 0x09, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x6a, 0x92, 0x41, 0x52, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x1a, 0x33, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, + 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x50, 0x4d, 0x4d, 0x20, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0d, 0x2f, 0x76, + 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x8f, 0x01, 0x92, 0x41, + 0x0c, 0x12, 0x0a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x20, 0x41, 0x50, 0x49, 0x0a, 0x0b, 0x63, + 0x6f, 0x6d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x09, 0x55, 0x73, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x73, 0x65, 0x72, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x55, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x55, 0x73, 0x65, 0x72, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x07, 0x55, 0x73, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x13, 0x55, + 0x73, 0x65, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x08, 0x55, 0x73, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -614,6 +618,7 @@ func file_user_v1_user_proto_init() { } } } + file_user_v1_user_proto_msgTypes[2].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/user/v1/user.pb.validate.go b/api/user/v1/user.pb.validate.go index e676962626..aacc93faf4 100644 --- a/api/user/v1/user.pb.validate.go +++ b/api/user/v1/user.pb.validate.go @@ -263,9 +263,13 @@ func (m *UpdateUserRequest) validate(all bool) error { var errors []error - // no validation rules for ProductTourCompleted + if m.ProductTourCompleted != nil { + // no validation rules for ProductTourCompleted + } - // no validation rules for AlertingTourCompleted + if m.AlertingTourCompleted != nil { + // no validation rules for AlertingTourCompleted + } if len(errors) > 0 { return UpdateUserRequestMultiError(errors) diff --git a/api/user/v1/user.proto b/api/user/v1/user.proto index fb6dfdddf5..87a3a9d2b5 100644 --- a/api/user/v1/user.proto +++ b/api/user/v1/user.proto @@ -22,9 +22,9 @@ message GetUserResponse { message UpdateUserRequest { // Product Tour - bool product_tour_completed = 2; + optional bool product_tour_completed = 2; // Alerting Tour - bool alerting_tour_completed = 3; + optional bool alerting_tour_completed = 3; } message UpdateUserResponse { diff --git a/buf.gen.yaml b/buf.gen.yaml index 7e5c9548d2..14a735945a 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -40,3 +40,4 @@ plugins: opt: - simple_operation_ids=true - json_names_for_fields=false + - proto3_optional_nullable=true diff --git a/build/docker/server/README.md b/build/docker/server/README.md index d49a8136c2..e59d1d6e2e 100644 --- a/build/docker/server/README.md +++ b/build/docker/server/README.md @@ -25,17 +25,17 @@ You can use these environment variables (-e VAR) when running the Docker image. | Variable | Description | |--------------------------|-----------------------------------------------------------------------------------------------------------------------------| -| DISABLE_UPDATES | Disable automatic updates | -| DISABLE_TELEMETRY | Disable built-in telemetry and disable STT if telemetry is disabled | -| DISABLE_ALERTING | Disable percona alerting | +| ENABLE_UPDATES | Enable/disable automatic updates | +| ENABLE_TELEMETRY | Enable/disable built-in telemetry and disable STT if telemetry is disabled | +| ENABLE_ALERTING | Enable/disable percona alerting | | METRICS_RESOLUTION | High metrics resolution in seconds | | METRICS_RESOLUTION_HR | High metrics resolution (same as above) | | METRICS_RESOLUTION_MR | Medium metrics resolution in seconds | | METRICS_RESOLUTION_LR | Low metrics resolution in seconds | | DATA_RETENTION | How long to keep time-series data in ClickHouse. This variable accepts golang style duration format, example: 24h, 30m, 10s | -| ENABLE_VM_CACHE | Enable cache in VM | -| ENABLE_AZUREDISCOVER | Enable support for discovery of Azure databases | -| ENABLE_BACKUP_MANAGEMENT | Enable integrated backup tools | +| ENABLE_VM_CACHE | Enable/disable cache in VM | +| ENABLE_AZUREDISCOVER | Enable/disable support for discovery of Azure databases | +| ENABLE_BACKUP_MANAGEMENT | Enable/disable integrated backup tools | | PMM_PUBLIC_ADDRESS | External IP address or the DNS name on which PMM server is running. | | PMM_DEBUG | Enables a more verbose log level | | PMM_TRACE | Enables a more verbose log level including traceback information | diff --git a/descriptor.bin b/descriptor.bin index bd6b1b127e5563c334ae724fb5689bbbba129132..668c17c80c48d72f88ab05e58bd19fadc58683e3 100644 GIT binary patch delta 38502 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

l$uF{}n6oJKXaal<4qn=(A9sjx zuA)9(g;KC@V_p@OLVRgmXX)>W#fRVzExbC~adcV&day2KK$}>sjmuRUU0uUC-1v$b2eq2{S5%+dv3{ z0OiIYAl~dtSVA750EFri*0!q_M)6Bnx9;Mhu(nmWjKywKrO?*aGF?i7O1Y64!}x~H zcDs~3DS<@j-$?FLl>uT8=0;X{ve@z?D8>qsiiV21Nno5=%bB6o5#(l|ePupo$VkDERuI~MV;Iv43V94_+R05&!K)$5C$4i^jgS%) zjUr7uL!sL0$QcU%S2L_AC}Ege%@AEsAeA7;Im36xFc<1P7 zLJ@X2OBVWAu7n*t!p)3W;1u;x^c|a<83;iZ3qk+{BPa;%n;9qpYgo|6rtdAxXix9? zf$E{Kf=y}K89H}LEF8zG9$@P|)B#B_hcs=D zPG8&_nWJ%aD+_cB&_egEtbKtPD;TnOuvm#0Dl}5>VB+kBVPPS1Ba7XsIx(G*+^9Qo zOX|d%(24z)DfCxBlm{%wCLn}2>9Glj@;2$t4G8}?>CR11cJ58oxoPy`z~$ZABRXJt zxAq82fty+E@5&>(zPFjBTnZ~KE1g`rm#Mv3Ab12QJpzRAy$lRb?E?sp?q%XlN2Sl%=LHdhTO}{K9IwID-VJb;ib#Pr=`%PFFibYcYz9@t zHiqRZQUpTJ0F*rg5dC%=OGvYTP~FB_Ngn`F$~Gq6*klQr4>Cj22oUN8P@c;J6uIry zl{H}KKFDxotq0l=Yn6|%*kg>hYweb$h}*??)tF1G0+y9YPCm-i{X-y_29(bZ2-A-; zwLuLC%a1Z_P)k*0He(A`JYS~p3Q(((SIrC&06jf&q1v3z5CaUB+s#k1*iqi`E@x2i zBtzF3DOOgo-MoVt&+^%KIj5v{uy9e8cAIywa8Z@~*ula@Rn)BgG_#&zdYwI{7FAWE z+$n%md?&MBG!gfNo6RcaB2hZ_nxALJE6mIrmppX}|KwUHpPzHLGw{sknJvEOgY{h6 za(O=!xEPR*AUR2PJGLzs8I=_>sGveyP`(E&2eZ z!}e>eRf)1qo%A(UJzUwQJ>p%=`d4UM?*);pmSdcRmD%B@%k z?PtaTUb)#h>D>J++=Zo;o&7A_g{1|U{Vd#trA^-Vne|a~uT#6Bh2U(q8W;EZkwG7sw|p++n3%+)tVHd02|x>s5)e6zt=E$&4ei zl;rg&Wx>5pw==(tN}+w+FQZcE@a>mTDYQd-h*@8UrRaTJm3WSL7VOb}%Zwknx5fF> z$=@LHj?aY45(!z~e*#4Gv?y1^<_FTVX)(@d=y)#RR&6~G450@C!%C+ES&GQdBRV~xXK`ka&3$yR6yd-}HSDKCb>3si>PEop?86y_~ z>uH%mbBm+SOp`V8tB*O4o+M|Laj{y~0IsA73lQS!21HQ`!EQr_T*N>g%rqd(py)kL zQ=yrB!_Q8q6ipXq;wX>QAzx}~$$^HOVsqqVP|PN9){izKY)l_! zBUYk~2%Dw|1V{lf#N61QquJwJx3f@ipm3#9aGVr0LIje-LH zz+xRmphAKB0_M_J<_!zs_CgjzHxXHgwo}$Z1~2JtA;RrN%#hzj1H#)7P{&F1HeAFK z^7V&Ym|eu$$SVgM{+IHpd;BTibv)EOp~H24~XKIv4nh;0YY~f%aUOlAc|i`VH%Z!t=JVTwn~*kVbKaXr?IRw zDg@EG*oq~TLMdVN4vbO|y~`>9gzidKEH;x#8l|jc72U)`;yVd9u~=tOkrZFuL=hi7 zJwCs;Mpr(C8*6ms<3+!g#nvgm=q0}vF`2A<@s>xBETdu|_ys7R9uR)r%n~wC0fg?& zti5y-5Psdva4wdfJ_zjfEOxsp1#2wUdOb}H=;;yq$~FXwqy2$pKmZKkTXh@-2(!1! zI10p15zcKoRsw=Yfbt9*pvY~hEz?W)HW?flRu+yOMbR;R$aMq5_x`ETvr^>JMrO$G z&Sr_{29(bYh*CDPgq*PeLU$u;EsvN2qLhscM@)q&au9*FtfMU9AfR**P~<8H0in7H z4$?R_tX6@IF#0}KXRRQLK)S#uj%-B^Zss@q;dCqCtg8x%klC!mE;m5-F8oje^20K&Wh?0GIkqHa-i*VjVN!HB&g#rl_;H{C=HPyqPi1~{Hdh5!U@D^FEL{;oVYZ}R~c?&>Lq52o`O;-Pe{V(pndG0qvSbSJ-e%T& zp?^BWQ;Ct(ei^LEhAa?g0ulF#0Io^+2TO?6zCtBVPV$wXIaz$G<(`{DtR^PZ@RTCL zPni5-072B`Cv4C;syQhlJRw%o5ur+yu8`Ch%sLcSl{_4%lFk>NAZq-Y8AsvCs3cz) zch5>8G!uM+QYm2kI_lUIFn%3%Yzi2UFzdUpK6JpS5~UL)^*ytG44sgN169&#!U+VG zKQUvzVdm8)`FXZGGW8RPPPGcflRvTW7%9b*Ke6x_DaDh=nDuMugpMawqI80!eq+`= zu!3w9c`i^TT_K!6%z3S0EQJ%7BzY&toq5@{Mi`(|;CZbP2I#chajg*s=oEM^Fswx| zFV8dSz*8kkCrE0sVcifqA&&%7QZsX1?xiYVLtmplkrRu=caoUzdsMHEC2!#+TwNjxH@(?PuQlSzMLZwy+m6Rlw zja%hoV;oEB$Wu$|t=bI+>C$#5;?it&kOcsRWQT>&a`@!zuoQ|^v(-r!h@zBiECWa@ z067M|kjPbxQy}ds?F;6FMrgG@2TN#5lJt^=%|{Ymt9I-eZg%l5<7YQHBbwjp;+<`> zZM<8#H!+2SDos;R!^Gt`6BTQN+T&8jhQ`t z>Xd0yn(8MjNjlQvqFK_yj8Gbr+*z|{%xGwAnlQC~PW{wer?n{79M?jnpGwIv%okU9 zU!~p1e0S{BiA^|fG%cv$^SgPiQy#iV`mFj%vm2*0U0FMM&XidVjpRwGpEjvs`o&W& znJ`f%%ASQYIxS^-BwLr|XHL*2w0K>npFZJ43*vYT)sE;rvNp;@b%?_>;q%D{ugmb$ zCYoCY9HFk52rgf?)+VX1V!v9C9PZ&~7G^wmdP@SZl))m{=EmH`Tnxad8q zbnGS3mK|QGftks>^z(X;%tYiy{Re53h_y3?U@ucForyfy%M`3-lO*kpWVR|6A412g zFEF#PiP)8w_w$PQ>;1g!VOgP7Dk=+0OVTQJ^enNmL{@1RCM$=+RkA8}T(Vl1h%Zo! zQ#IMVw7+*6|LF!NV}zVKAsH635w4*gY4a&JmWSZSw8;5fEXh&bf!*?A>L3yopNC%; zxLk}+Ori4moBh3M`1KdLkt+|D-!D5ArHT^`#i*Y_${vRz{Rd9Q)qn6tXTpLQrf9Cs+g?Z}Me_$iYv zuW!O}yJ;8IH-_86G!?`*?}Ryd4x%jFF{S4%!|JNs=!VWa$+JoF z1VlM*veNE>O)cMzR}S(DOS^^gRO8)LgF^!LyP?75i3xy8{+B^s`%-+PMfpQjTdBI8 zJls%;Zr4%RM^#tz=LUJ5Qq`DpQ+41t1LUjoJ8J}!)um;Ao{-0b_AqkuS|(4bpE0qq zX&R2og|&eF2W09}sfBuk=Q?NyvIiD>lfnwxqLnRI3OANK>L&WR13~Pz(}9a2rWMJff4y67#aPH zOgxEd(%FquEBG&iy%wo{p%b(`(9hF5=rkt#sh$fL2FALJE=q+Abjw8-1;GrC)kSLy zgVjkWtOx`+^Fm)y(F+N+s%s(()lr*}uOpxiuvgnb9-5LX3AMN@bq@L_?zRn$)w8_O zN&an5uQmT?tv4uRsQOVh&jh0lGfw5{bzWVoVYm-_76v_1spt__m%QOTbEuciud4F~ z3`4Vzuv#FncBBMqZA8ng2*ZUDtvW^+Pd)-O*E5twWRJ8uHV~kROdvME%F30Wg;D z7~&O`jt%9hgt1sAry7O?oK8G>G>XP??$p&!jEqxz*N}kxIP6_Z`vBvy zWq098Ub_K!u<@#?JaKAhyowHhU}8Kr>SU3`o8z&7MjOo@g(hcWn{Mk#UJaQzGc*Aj zGtUf7&{#WD1sG6*i8GV(zPd;8%-Kdqo<7v;PbSU|P0&C)TP@>33?|ObpqV;7I1RM3 zvBE>YpnT=Kzy-1NtJ$9*-Uugxopf_1KJX#sshpXJ#i_1v#HuNlFY1cUR5jrhPcLD7b!LuUwWYIDbMTHNuduoo zm{+LK8~{&rg(^j?1DaQ;Lo`6NrhA17##_=joU7Uz0D5ynJ*tPf>X;q!pf(o+OcsYR zeI-6RL5{biT}mMN?f`v>0R|knq${LY7T(Jz!M>1`@n80~VC&r-f+JARIf$RN*3NjrS+hdEWC$`x&|yC z#GC(cPs#Q}Rq#5G`kFB<&FqMpmzHLBpm|lZ(4xx;%YAxj=7i-wk~(3zPcF@< zq-$hNU~T4QX1sx#Xhf?_>Eq2viDhC`5*;bQj;?lz7HVFOT%v`Vmm`;G3Fd^=J-twK z!s;GLVI^-**f?^bMkc9iE6pd5^PHcJSFhw_PW3ys`hVT(;ot4I3iz+T*tK#x-*yys zw!432`|j!WO-;DuGb`wfS^12~6PxO1>DwQ;>4RB0=HxPY==A3Cr~B*8)IrD39&+i# z>6g@N<#F{haWkli=F@UVaDvjw%@-5<*tnK5{S0Y}=H3;4hLUZnpISc+cUG>H1!DG{ zE_24~43Z!1XOYm9N&LyP{OfTH%b7Ln(g~N>Um4z)v5_#c{z?)a$ch7y`M zwH_r+za+P%kc^L0^-!zQNxISxW=xwlVaDu>rcRlJ6@efH`QJ^=!Lc>O+r~i8m2cjHqaW1SkX`qrP@%ee5j;=K9^x~}T7{j3T9ca7Aw_OrF>#N(f|uC3oj zXIvy6aKg0k3F~tGoC&<}Oh3Ch=Uo4E*PC~$TtL~%Ylqv}9CwZqt=rM7j^2UsSSRr( zUa@wpgg=w-wa%t2yktGBs$Ak5al}O}Vp;r^N&Y3N7V*~fa*d0qsHGt`T?xQaOB{B@ z8=4S|wZxG+DTu7JFblO0Bo5U=5HBJ#4d(`>AV9hyRwj@|@AY&Xh>{j5s!zueG91RC zvhlXg2qoz$GD1nb2FwgdN`zKTJZ>NZ8e~zF9bivR zs)0_;01?bs1Oa$qTRE|Iyhpu1HZ2EN?r3H$>LQo_t={j%kBy3F;10$_x1=_=tC~_mc<%MpNsv@b@?hTl8>IBFT))m7|F+i1qEav)&IFHl!K!| z;bozX7yET57pl-mUlx)}Q0lUf+S~#gcZ^lYAebt;BLWYaonie3cYloRylg)I5vAjp?sWsOcv zizVJt{`MvQpt90Xo*XJolb1W>Vs0recdWrH2MW;c%4;w6*VcB$kvCZYb%3tfB^r@P zSyvIt;m__d+L<>k66%f*a$ksQ#9mHStcKq{#XqkLb&4v4cog~JF?(XmkHo19^u&%I ziDQ|lcdRdoU)ZTPw(Y4UaG;@otX9?_&58PBKOL`TI;nsa0$zNXKd^M53O11jiGgZW zOrB5}h_wZId>&bY`LfIWp>=~pd8)F(_(Uc>pFG$;7&ApG7mE%p%J&Hdt)h|4Mlo|<0gZwBpdjx{~D9j$IsW5jOt5y?f$~YFWI8_ghS&WOF zC98*KedEw9G(hNhG^X~sdDUyC``Ns1n%|{#ymCt%hc?HnUMr%utIe>r7~o7no!IDRzPMg65cif)_*-Vm5a!|8<(*sq|cB2WgNv zSJ?rAopV*`n6d@t`BZvw-T9$Bm3w|DPvxGk%Ec*<3uBkaa%moSAvy;Q>lXC%7x9Ot z`yG2$vnNm?^`-qdC@|2mC4ErAjnUK z7qsx%g1XAZd{%>BT6(eSDoBHoiye7s5(x4ar=??&Nz5`Yi_PROHuz_xU50j~Q^#V4 zIhB{r@JE(TRTmfJ)N*QDIV^x+V=9KlNFfjN)A{W){86}np=WheQ`19v@^L!khYNZ5 zID_ZR^iL_B5z3Q~GeUXtafXl=r+S-Wf96YO`oq&`cH9{@aQXyOVt!yI`qCU_LmW^s z=ip>L)uT9{V$Q+A`mRDA=I8S2M!y2rB&3gNq8{hAmE;A4GUt|c6_fZhs>iGN4UK+P z=~baT`FK@mpM1Ou_IsfoF+sgLc02!~(eKsrY8+L~2aTm;oTPZ!EWdp!m5^(j=^i!p zaR{Xl!g~ssCEnF!e(ca+ZA! zousD|BXmaEz$Z^nY4W?Ja0^50;Q4S6%aKQ96e)OVBsDOgk@RoD^n({S~ z3Z1xH!_+rx)8#L0F#Ie~tx%y~*x=LW`a{asMk;g?Z*8PPUv*wfDs-nlUHr5L|8TC~ zv;VrNfz!~y>-4n=$iTun`e1_WD&i+LSV^h!6KCbt^RZXLPb~82nx{i^>!U*HgCy&z zP>R*k=|^mD;}2fx4@%*bneLEuobEP;SGp{PJ|BWpX0**Gj@{vu8HM8Vlt0dx5$lQb z^_y7iE+)@B(y_Zu@;stCTYslM5GRk>0m@D+kJ;VXOWy#H=j`s(7YlIC?j9EVhcX+$ z>^*coi+C_Vx7p0^z6w0JnSt!c+kl7=XT&0i5icN(rhxj?W(K~Kvcwg~Lm?}el4J!! za4ltt95&NIG6i)m*-Zu1J8?2io}dE~!Vwh0fYJ$!;ms^pQb*v?@IM|3S>#GtwEt#? zAA6Uj()d0e3fcVjDJ6^nzL_QEFO~-$jqKy05Js*vjFG*W;TK_~VH(oMLm`V?A&Yk+ z&d{k7t2nR-{{dz5spE}X^xZCbym1T5P%hIO9nyugyMRiiTEuM>*@1yz3Q(KE;xQnW z-Gx*18U@UdqY}cfbRV&qv;-G%IYm%;4;UtP1D0G42;Hrk%K@RgmAIT%xgZUAKOgm1 ze_o1+{C-X3$bjDcn#Tc2kgiS1GU4t6xHhHygCT<2d)nWAK#x_tn_%eyePap`mL8xR zQ_>P-aR;W-7niRB!Rz6j7(h6MJ2CQ*B_K>~W9`LRKR8dczKyQ-brsJ7S*%^+G}qOB z=OI{7Bcy$z4`pwUYLvRfc9x;Ko*?_}tX+ZFH4Erc*u!WWJ|N|{9fH$KgtQ^L4)$)66L2U9a(zDSUK`kTyg=-Sl*1h+ZsDvkW~%=yK}Q#PLM3 zIOF>ai#@B@kk0r%qfZ^?R9$TPh=CC669EqSPSrzTk(%zd84UQ%Z1 zVD9sDFqaP1i-Wl@@*&sy{ZlXMSA;y6`=Y+RCJ*MmNVnIhI{=~syvT64CKIQ?2+I3( zFS0!Oy%C(ledYLbxUbMT++lL-WEYEVH5fjvMW2koca>(TFGtL1&F_VK|B{2r;@C+?^0K5;)~H{BY6bEJjZ{};1r$TtN`JA!{`RRC3HfcuT_cC36ffGSht5x$n&)- z2@70s0=M}$8peHaq9V!p62Et9qY<87r>|{pG{V#C^zPYc;PkpQPv6npWLS5HPUx>~ zs>Dd@9>dxaIw8NdDU-tQuI*~==gyvjbDYzgN8jMTkT7n}Y0lw(8#?;ieXXC(`tXz2 z`t6P3F@AviIdR(1=*R!E)-ULf?V@bGr7*r>cH@wSX)~tc6K9iYH=~W;dICOcH+lA? zrU^~R#9>X9TbJkOPT*Is^;ZgpgbUfsl=CY*AJb5Eo>185JT#&9DTMprWr{Km=4k z0i_TX5gZo;MMdMjjVq&~gXj-&-xow-7t`p2o!c{Kk=_33IOS;tBWyYOo!nVpoxm{)d~z7xb_v1j=K&+Wv&A8BXt zYdtT~cGXmK%>}c*jQfU_6WBZAvA5%_dQUt#aqNh(b;)K~BAhz;#1n;I#fSYrzTy12 z4K1y`A=Wy#d3H_eW}3OISp4C$s!S(wm<5rVJHFw+Dvui= zl<5zzJncV}Me3P#rW^c0vE8!FtTjiQ2^3BL@(s7T?K=FgM~L$HhSN=_)BiSv8d!6{ z$h7Eb>7P!2SPzu*e?13WD3qQQ2LIatc~QtO8*aK?$pJs%n^q1BtQ~Q;t3TYgtQ;d2 zSg*wSuusiFlL6v{4A*b($0-k@uf)Ah8kz*Nb2M}b<__^Y_#O$n_qu5YC3P9>mkHZY ze+{;?tzK*XKhv&wEpBL2Ok`zsSEd*&zZUP=%kMArVCD5V|E{N1-7m*5;M41I!&agO zG+&Q99W{jJ>+!74{s^H7^!K>Yn=hE}4m?giglUO1Un!U{_xE_BgN88o_ju4lLt&s- zvENIWgX)`cBZse?Y3A{5mzowIyvMZ5k*3XA(0?sMNZ`>$S)|oA! zeAl@Ky|2CT+@#Kh^}X@#J%rC)0{i`V>_g>q7f8MzcMFBpF68qEaiiNnp$G`Gz-byn z_=9+Qo`x{{LA)U8_eNFZ1@@=$*p>Vr@0i6IpT^w+(O~n);^(Tt0-zE;*OdSWd!OqD z3kZ9k>jn#mI`~{SSc0;_eohUxJ8C$O+SZqGzTh`Ae-Z#}e;L`PD)=()$%cnq*#43l z9>&PgT__cm(d4>U_U+cF92%}%? zmqt(;{hD5yGz$5BaU(0YXYxdT>rZCy+B}0AIMQUh07MDHv&asum6oF|!;Uz2Az&^#1r zI?y~6J*xxFL-EWk^{lAOANczB&6s~1>5^WWb$ zf2#O7Za7NFgU-)!S8_(4;X&u;I5>kyFVFA;>laCSaL~uY{-S9Q5SqWl73~2+^B1DM zo)(*8X-wxkG zJ7~_g6;mP?n)B_fY{8UyM*F~8$P2zQhaQ9f(F_*aiqimLXQ8bq5)gJ4+KM6pVP~P; ztG7Qyc#sxYi){YPeQrPXHq)TJ$PU|I8nhSLp6(}U&|YNc<_Ut$GtvWVvCX?JG7I5< zIx1^%)Y=u2SKDrPK~r6cRF>I_T7mEgfU*k#LUx(0s1*=am)VM1yGm+ZW-Dq% zw(6zJY(=eIsgp0a6}1B4F##pD0*YKkt$?t;+*Z_@AK2I0u~o|Fd`MnvqutSPkWW6Z zgjGqcfG`UzTQVSoSK1vUV*|qMN-|plYAp!tH8v)3?x$w&^fk7d6x3Qk7T5BjpPD01 zUaOxTi7>R*R+9ig7+PzqNdO>v)mmFk0tiZqT5Bs#Eue>AXA4f941k(l7ulv~UuP>$ zMJ{ZwvlXWT!uC2_aVkM+dz}qV?T0ETFupOUY~K{wrh;$MZwsSsDLCl%t#0t2071Ml#;SyR42w>Tt1WrM9q5)djIY(Ch99Nz?PeBG2g2Nz>{pY)r=1inwxD! zeSpy1Y%A(3Aky4o^Z6f|-Jt2C%q>xU5ovC*6$2s{npx01#H6Cpt(`y#u4O zJg<45prohgHSZ^hfnLzO4}^yWl=T8Aaux3b!ukuE_qzr5%XaK<%I9v7eA#x31n+k< zVneWivyEP&VFAJ{pq%&vLU@NA6zW`<-C-B?1iKhkVPNmHV+Z-U`^}Q{oi-L0v<57s zT6lwR*bm-+Lq9zdVdxFb`+zX?hUR@hJp3D)_X)~}e?#+rAwB#q$@`}Qpk{YPw&~e- zY2HUJZ12*%4+z`4H189Xws#Tl4-^iA_jlv9@mn^#6{peLC=~3EH2LlTQNnKh?f_B3 zZaroLqJ-W0)e)2>?50;IOMv{_yy|=NsPeZXqclFe9T}zZ;cY!W6w>&xhsKBUTKtda z-J{zlAQboLQ34Q(duWuHA)W@Zdu={;fq4#}dI0O>y^$h~6?=8VE)-+MUK%TiZwn2) z`S%px0tlq|77&{6X}$$Sk?(1~Ei^Dvd?5LjXB5x9A^T5V^MJ7W&yZ(<(dPcCJ1ariS^ued zwmbFpA2iPbp(6lFo&^-Sie~{~{RhpnJp%h*cI@BE=N^#!m+kfxJljL??9aB*TQDgg z%mM})LilI9qg(_c7iNF9u?QrdEeh=4?btfL^9S(k@0w?es1_FR^W)awN%$Xiu)tAu z00?sn95u@Zgt-Ndnq>o`3KlqOmQ7Gr!2(CkvWut+F6Z-qGYcl;f0({JGEEh5xuYi8 z$c5?49W}`Ygz3v2HOVF@O<(SSY-x>IM3d|*9G>x$IpE|gBCAy56^>dIK?qi_aMYp* z5LT~n)S8H(w0eaDf|XVwzr^8dVYOmOWR)0pNo186b_rRf8F&#f?3Iq(tpLDNUg@aS zE+90obksx~5SmvyY9d}l6Y;AZxmy7sP^d{9d$pq$jmU-O)sEuWBI4NPj-1m12&6a` z5Sq&!HKzrH=5j~PX^V(suW{s@764^l6M0J{dyS*!w8(|#HIACo7E$G`bmW{C0GcZ! zO(NNqj#||t7n&>SZPJ{!h)8xd|KMkHJEUb3adL9rKRy%4v4+smZ9kre> zB6_`^*Zk-$(tNCJ?crF z>}E$T<$>_*fRbteA$zlKUx2WBvu?FL7;-E5Jqn(fWhY-!QmlUn_HM=j-n@UVcA zY5+y9q8dP0U+<`;e6PU1)roCVKKFv;t&XCaUgYye$LKv!a0?*J0!yj^gz!d3Q4Ju> zZgfC3)u5W@x4?~+u5|4|2b={f*}xw|yg0K(i|nrZ;i z`0mnFLs0hIyEN4lQx)7zR8utm?#L)T`rVpjAOoX!Ymxzk(YrOt5R^vmCX%70YcY|` zR=hR-`*O4IBtWemJc>s$3(BPgwJrMD)nL;haA;CFLy#l4YH z;+lISqr^4$YOX0JuDMTf4FKG^Pq$4#Xx^u}1`wL}X|5?I*B?+^10ay%8bD}1pj$N{ zG#?cxs;pa1}ru>meg&5`$M@?rS1C>V{OlQUkAHgt>@i&+?q5LsNE%}NC zr99@i*`oadLgg{1OINYvD<(>Lf{!z--W5+obx4%*gyVEoDnuzyILU5eW?M{@@|0v< zzSFSmil-b!y2yg!Q<`)Eq4<<0-C|;tXB6oIp!%MPiX=*TMw2dbq4^Av?n&aoFi-od z!`Wu@xY}YdNBe7}NprNnI!=LdmgZ=Gbqaf^=ffQBdC7mNVj~SN@p;XEfY5wi^B*8I zpC|sK!=B!O{gM;=o1%o?kbKE;%LLK%rVjkFrZFHq383r`fRKGzzg0k3eVLlBSeXLj zy}qnF1VPy$Ue+|$oBGoZO=Cdt8Bo#~pvYA;1_w%6_Nz{8r}DW3lCL^$x$wEf zh#iAtJjakU1_-l&(kvi^UvqM6MI{2l>}yW{0e&A;MQLE~a$^5+sSKOt^q zrSBqErzL7BRmX1Pvk_x=>uNwEEbi7!1_+D0HIo6N7IteUBPeTOw`Q_Zs)e`3r0I10 zj~aeEGEH^xw&pYB!t~pk&j4ZiZOvx{rRlec&!{Vx5})nC>&q?SYz58^Z?LVLu}F|F z5ZN%lN54QonBSub4G`w{==VoZn%_h3Pnw7PUd|k=u3~Rwln8BaWRwVPuO_roBDD7u zp#k7&-_z|I5Ss64LIZ^6dz#QniO@b!ga#mxA~Zl~exL~r5SkxoLMtUg`{*!2Ljtrv ziaaJl`$!WSa-sc^CbUu_G^`kzRZxTfq4-IpNVN7z^r%E@pJ-YurRw{PXsx^!|3mS! zNRi0xGfi&Dh2m#KZsWyU1G#R)K0DIxxnj`_Cc}SBaAT$qY zk}M1CAD!6Gig3yx`J?0Z7KBqqtnia2Ng((GDEk;7WPj3a1Q1q#3P}h=&$q33$ z_LC;bGU}uM(j*B4p8+MC0g7Bjl7O)OFHMr=f&GgU`%U>=4#{5}w?z0{E|!(QI!29n zt$;8KD5C)YA^fY;xkBf{?5|E$wV3Nw1olEVwuv9t-m1!2=&HG11=YeLSB7u^pb{3j zsuBQUZ;`9km4L9f$W`k~K-9q^SFI}v$~su&s&!=r)xly{o`?g$_TtDkRl#CcEi91> z+lyVbumptd#jaXd5|p+VyWq$=G^PsT$ff++H0$We&1(^z3I}~@_5&DE4u=z^1WAx6Yr}c3q*rgkp)^qRuBy?bHy5xUz3iR#WGhl zePp5NWv*I60zz?_tCo-z#DXhav4pGv5Gd3n7F^+~B_wj8xx!UPIu*o%*Yb)CtGxQ! z$V;NWYh87c0~x4X>tZrO6V?i%zE$pjoa8*7VfhtE)z3*BxXM*0IZ%OxRjxY8sUQx# z&W%oTkN}sji?oRduXEL061mX6&c$4kh_Hgzk!#$;h!81IU*oD7A0X7%xN61+2=z5C zW_+|USwTdIgT!pBxEBB8@z=U)`UVKawXRw-1441FtJcgFH1AvI$~7|pid+}H9^%7w zu39rA7n81n1rg$Uz6_^Xl8(f^eP()A#5#UDtQLfcJh5zwn8(p=`287~9S1ok`p}5giQ@uWc{TDZO zrz=;ieIWT4S55W$Q2)K%RV!8?JT;(v%Ycx*UAJaHSiPNEvzY1u<2~Q*s*M(cvX|ZN zsugP=>Q8sLYQ+i!p8+L{0g7D3Vt}xIhpSesm4Ut4jcrjrS3+{LtEPIDg2nE3)l?4< zW&x#HKnUOMs;M3z%--!{sy7f*y{f?8=Eh#-S)Hr_8QWa9kC@?AQ7zmrS!@yjD&c-z z34pM7zh*H&*t=h|7$EB4e$8S8WgXnFS*(icU_1Z5lT|cvdt{WJeY>VF$iV1!O<#a8 zx?R&3L1}b5(bs4+g({-2hw$2R>-epk-5mb@on{6v?QCUFAgVx)e1nifIS=VK2#9hX zqBlsxIv~nfT;OEcdkR?KJ=>?CHo&Vz;MtZ$~aPpQheU^N=d4v}gJE+1AMw&qgXl zY0tW9l?EB8JnLeWMwC`Xl=j@=l!g?P_?)IRK&U^bDGd;+Atkb%kzZqQMjHdGOry~Ky+THVTDid2ZjUW#5EvDizlI%cRM65GL7LM)I0Tx<{~6Q|uM$AsCsTaPkxd;d~1SnfFAY@$)XZ%iXirbyG&RYRa!`E~=)U@P_6h zAT$|3Ng9A6S8)*_tiPeTs3x%AbYpKRpKBobrt8)UpKHkH-L5fepy*M6Fbgb?&jBI4 z+wC@7=fdo6_t=q`P#9KiV87$W{>6voSpzfPaotM6MYUw{T{WWuKqb7ZD*+Jp-qli!J~^)Ge*288;T)W4}4)e;wd?ed+TRagT6 z&95VuiHp8=)m{~Hq4~9|_Nr>B0{6+u4*rK1`!xLlLUEs_KR_t%)AUzMjI>`(b^uW1 z{-{VIqy3uxkPFTIn*M5ujJ|ipUR6H;Xnr4Q5+{AHSrEC<{GM2lXsnhv=^*?Qr>A&O znqmRV4h{(2gPP9(p?i=fg>-saOXPHj_^b;QX>09Jq(~HXC~6KwQHM0E)e=ShK&+O8 zA}u$6h!lyae$d>8TqypaxviFFTR(}}7N1{e*{Pp2!665FKWTykgx*h@;Q9vkzunkx ziY)p<^52>)`cl{aMH3tlyaANY4+z;`^kV?R>My#h^pynni|#APR(<6cO>ljwtNp48 z4hXFQP!b%V$W;Uf28OKS21B6*%8Ce7f z;RRmd2tjawFuTATH5x&shSfi?7kjZA`4io(qV&Zcj(ll5tv^{@$`5qMcG^-;Jv|a( zXsM^xihwY*)KhCkK(zCvo?0sslti)A!&)&Zj6(e?{$Yic$2at_?31sGEYp);<*5;@ zzj*SiypA$x9uStV@;cRt*lB{&@>O2eK+*F06R$1vcoX6oc)KFYFJBg!rYc|NsiP@K z!s%sRZWpBpw1OW~gduoEq(a=aB2pplT0tr_kLgd`buC|6gn7)ho?5ja5h~YuYSjV= zm1{kuD8NUKgnl zPhA(O5Kmo4D!qjYcxsJj^x$WG?&gbAg8qW7kS2F<0HMFeQ_~2kz3h~rhPaP^k1}bYktmKIr`x8&C^ThdH3IIN@^VFgT5Sr^ewdeta<~mO; zdIkjc&0cJSYSRNCd9#ODQ#wc+KrL{+rxraxs6s&54*?;&-cy?ZfUvsW(~BNpJj8lW zEqVyb2D9E%i=F}0C~oo8q6Y{*1Im5~C~{Rl1cdclJhkW<7}y)V*lo(^fsowjAx?^X z9w-()n><4v0|3G-V0+Q=03p1|OUu;|W;c0V^F>5JU0~no#h&Ebi>;FMJINvihtyFm zZ06q2fJp5*_>u}Lq2+D`w?Bx#=9A8HdzXiSJ zPBXs-05!WMvQ5vv#Z!AW$c61K^rnXjchJx7;X8X zgbJQyJFhIYrdDo`RH%b(*Q8Y^I@oq1ts0?X2lhjr@d$sq)T*9@|6~KJ6LW!wJWnzZ zAbfks!?m4stjPdfQp$GrB7wTeYTVbXPix z-u|KjKEHt4lS3LH%mT|3 zZ$JpY;HeXDK$v~O!-;n#s$x)J|ILei%F`>XKIwlWi!`JSB8#umkT!S{{zo0Ws_Os{ z=3dop1Q6z4)dL$K-o~qXU?V6y)T?@68$?yGlLofJu{$H9^yoYFmWPm{Mngm&>;`d|&ZD^j6uw#!o+ ziI5>78ZKzgHi$;E-TVNRvO7|tZnirrg+{a8R7#OhLEXL0hg4d<%HNJusGGg*dHJH< z3=-Y!ZLeFQQo-BX!&j5ao=Anpu|1wA&o2gvKDNh87K$CtLDYTr@-Hf_!DIJED%5NC zdY-(51{pZE*DID0Sb(V0y4MzVfsDY zApv3fJw1XCq9N`BzO%|IF8@GxNF+k#13eG}LgfRhS?a@sXb%1n_2HUY{Es^OC{m;; z_(!@YBNvJvQBS7fbP!F!KT*Re0KEJ}52t|8{6r6@fYAIz52u3z`*Sb$mFiD}A^Ewd zP89}I>;FP?01*5ElpFvE*)KE)0K)1Q;cyC!YWqTS06|%=UuX^(Os(=u%>h908BlTn zpvYAm00`?}Y7Q6@*xz`uZ5Ys@2Eri)gzHoJ*S=U8W2VgdFdIx z53h&e?8=Mfi>sZ(Aoru^cJYt*4LcUtKYO^3^F^&SrsL1JSxu)Mb`1X8zj($KJ|EH7 z8j$+Mv&H2e$^d!%;&l)~-ULy~FJAc&8omfxf&Hsz&G&7;qwk4?Z95)E@V82gq!#$r zB1m=c9U-*}wF*A}_U@!5FYkf1fILZIr*Q!n}@ojN=lQQAN5GS$GT*u;bb{dwBd}GHbON^oR{6$_(upno;KVANDNqHYRHD&U ze#f2~!iiOW)v?M6(4W29x7LJC7|IEiD4ifF?py0ZCk)|)N~#t$VFvbk-?#%#6ejtZ z{jGvjg}4|A7l?q@N7Z7&qxDg>5Ff9Pss*=^?OS|nW9X5oJW`3$Ba+(WTepWEnZhHL zG>klQ$?Lm(<9?noz#5vm%eTdR5&l?k;4VL>T2%?L`(6H^Q&g2$P}}TVTSEsd<$y|* z4v^G6zI9*dfF&GIN!S-cIhYV__l+k|C4G~8=KyO+YP)ZX*)L_niS2%ue#!}2_iXov zovECN!~BE3^>FA!TsffD^FCS^n|3I^Q{*{Pi*0dO2S=l zJh2nlJA7joJQ)aty50Wz_!CbcA9d+f%(7r)@z{?j&edJ zN+(Ear*Hi|bixr%s3hqG`p$0OcwaiPax#uci;l9&Q@bNiTzIlO@`T30-H|6Q%6QAS z_Jp3e$`h3+Jt3)geCxf?6IXbmk|v1i@B;fo-}nli9Fyd49A%xD`p~z<%CL3nT~^1mL8y)&qUuP%i65fspi%#as5%lb|D$jH96FIuPN+ob z1WEndw|)zqNC+oX(mA3!+JW8^##IS3cXE;sJ>BfVYlm0`ym_$IHMJmNi#vg+gm!Re zL85fBpC%|4n|bjCiTdSCRZ2UQv@l^^kU&^;)Hc2q~!3@PWYperVD@C zgXt5-_3&pR6AtC@4Y!-^dEX%z?v^F&Qq?}%!=Yt~vQw2q*d&ZEOH8{~JA~`Y_VR>v zZRk*Y<&a904w2N#gmqo$PAYp8PLw)$ZAy!?ACu}hvp*%Rj6WNu@ zC)#o3iK8Z}N=bwDwF&FS(1$eTgG!V>kkm~H>z2@mG~t6vl3h3*I}i!uZukHm`O8r7 z$i_s-Bk6ErV)y2zewO<~Jp*+e0VPl@lsaIzdu*B&^M$6Y0VUm4wwf9yTMe zwq#x|?!$UqtQB&_>FPcoDz zDp7huQuimU2SZOXgeNMgkMN{JU_YENo`EL?NnSe~$6OC5Y;oBQrFMW54<}?OJ3%<{ zaH7v}Mw5s`2-K%lzzm`smJ* zcZXYT?+%Zz|9Z*26?WUb70$w{yjQ#X`R6t@ojbFkk5D*!?m2xfY_6X(r=hup*Ly~G zs=J>U(KPq$nGKWcXU=WFo_hQO`X`$uSuqo5x(s0h) znLddm8)lu|Fnv0lPtIv>oYmOccmaeOXD3_FYe-I&@4Z65_ljY&=S>xM@QJ1ALVeE6 z`e_X}d_jrgM_@QDMHY z2V;#5GwJhB)02&@Ey?K(=hV-g*_yn78WN_X>JfBRB+skIXP#y^C1*9%&qgVD8hWVY zg^jJ}!T08dISuu#@Ix5IGpAbUdFCbI>MvK%$ zVA8)bwIWs~5?NrJE2Kjhg z=%cW6gpUw_kH;w=fuMYx@(~C=9tR)kbz`6!8yn9G{@d%Gd$^N_QTc!I5=&5Xta{xh zc{wh8-O|z#ZbAZXj#IB22-@S+>jr|GZmH!C=oe%M4Lq8 zF;7udX_1qs9bT0+)kpXU0r+^Ds!AXzpQfr32tJ;ssuH_8Q(|ZT-&GkpNmcoOdx?!s zbBe0UIC)urL{R~8pL$OH%$A0!s(oUU)jZej;OApY$|iRkjSjgTL?0rHN7O0u;cO!g z3aJYLLAMcGRSLn`M(k9bOCR6D?rc-6`M>|qD!-n<9;UhW`wsp-WRi_R)d45=@ zQtk*hAptkfS9J;m?ekTg0>RDmRrACa-G#B_#s9T=o=tNJU8&)`;=eeF4Px^`)jVBt za$eXxg`FdOgaCY;ruld>T5Y1Rt zKIHaj`(Ubr6UsJ=&;PS?YP(wBX_#G)$>Q{EgD)7%I%kG$V!X}?j^)3d>twC2Ixh3@ znHA4J&pE-X^sU+Tvl_DFt1FJ{TzJ?U8ZXj=!G2`7o%G`MX2YlnQdC*UPi7Qw~!1Y9YJIzLI|J}FS*DmQM% zw#pcs+n0AsvpVuibK(x~{y$F7F$j(ohUBXeq?6kXVn19P2vPB}2w z;W>|i9SqEaV-5V3OPyoV2D_cbQL7k9hw`qMIYlKyl?^#w4#hz$c?JYuhT=4^6lL1v z=5RjqGN-&`cqmVGF~7zC$C|A;%r;OLk>3W@K81m+1mxy*ea-PkpWI_%W@i1o=yd=LBF*g__Gh+6Eq;2|1` z#6-6d?Az~1_U*v`vB=3fp;6hE^V>#66LNmrs3;f+?YvP@Fd<2qjcSJC5Le8IW+=hQ zNI|{K2yGJu%}{M0dGLFNqGKS~o}uWNkhDDmbWEMuAv&JL|8|8lWX!D49u+uCb$&>| z-Yj%}YKK6uHw$rTG@BwM?ae}1nzRSuridIIG0|&MjR6Rjn-nwHBHkbwO8Y98efpSI9Es%ItsClLBi5&Hcd8*R`L4F>VIn)~*qNz)aY<|`Xrz|Ba8{y(elFc9a(7i-8e<0{y zqMAQ0*#_pNMrSbPaO~^Nos*o^G@UjJr5S9KB3Jebh{DXJs#gHP%%$iR{e=tQtCW$4 z`|O2>;-&nOD;>WyrAWu2uoW|VRZM+v)u-~VW=56p z6A05TK>2lKKuja9W(gVm2?*7zS(h>`jEB0KrTSEgr@~p_3KqLXl|msuD|9IdD&-nx zj1r1Ks4GDERDh7ZMn4rG%w9teMO6og_3$;U+ei@~MNsrWBo!Vjs%%68-PgL78O2J0 z0(k(%NjdaE7Jzy3yN`gdel0_g^I%kWLIhecqnf{Zg;OH}kC6oZRm_kPUVzYF#q!IQ zb+7|qWtGwgx{entbB0!47Zr(KZ(YaG?d20tu*7u?{k}jHi7H;hj9&bjWlonGlm(#6 zqJ_j7mM=eZm=N>yHB5ZwkbFh0tz||9-?z-^RRu)=tq2AH%$G4`kVJ`V8G190X`u+& zb&N=048M7~<5#X@AOYzcNC0_Y0R^GBjudff2Ssd{+{BC$%mN12NdXE7MUpNTbO4wy zL)#z^^_v(%+o*RXC~$2(Gs>uk*QB5bpcSdruV?x4bB~aO;(At6DjG8S)~zg7EE+QP zqg$B>3N>EcSqU zZ2ErQHikt8S-@`R>yk2!Dd>=`&4;&+*D9zSWN zBF6|UpRtIvpjj3-H0HG8>Sq*?FrH!e0IzW`t#t>;NRgw8H4q-$cbr22$YE^RZ zVTRG1Y7n_leVAc5ABx~O2T^d3v)GUP-IdOe;Bjg+$BUC;q(8}w=Xm)lXH4oz79I*y zaNLtDJQOBBo@C*nFlyO;idoMx9la1!hr%jR#ymhO{#RzbXks=K#>T0Xvqk9$jeCI^ ze`99u_~Z$V{D)P}>62ezw)h?(j-n|z?gdsfhMtHZoOppvx@{Y+5!%)rpnG*v&fWm=S99 zyIJ4kl@k=e_7=1Dgih!%H9MAnon{IJM;YKlUv!4IEq~GB?fol<$o<|GhTQM{eHHF+VZS%Q z@pD1#+ve z=BQ~n@}M>cqX13Y;{=+GqTDXYY3DUen~`j|sA1aN)<(YM6DLR^7jx-mgfC00w4Q0s zrrSU@}H7+O%FEKnj>!%!~a`w8EU{ z_7VyX6fRZ@DTg#P!cviz2NY;cQ*5vqke>5nTrn?6&@5Wy!Ou$yFFF$-@emPCdDFeawSFl(QG0~xE`4!BiOIe16x%3hi zyHbv?DT^l4OPKog8BBp`Zg0qMv;x5|K@-k=r!Sx|(6znu^CfYdMQuqlWh^nrJO&*ng!l53?hh*&9jz>tEuXX;!y_CFB5z zEJ&_k9p%&;5T&hP`31r#qR>{d*lJ~zW>G8U0>!e@$R?)TA_|QV9tluB5+Dj$#S-#? z0in8z6^Ssq6iK6$Rji_qcqV+1>3SCHC90IBW7pFJkscP`|K+-_X~M#FU1O?n1B>0L z{G!ji-=M2nObswuma}6Z_ys8a0EH5|Q$6_n^&-DvR$ zc%0Au))}9AfQ8}fG<|!3h2iVu*8?mJUq=Po+ZiU7|2chAi87{-q#kD0V~{%hZi7lX zSq!h3z+w9MA_j2`CL{ODIi$E3hcT9>Z%?u;v3@5AC!S>ePdaS+cElV~Pv2Ccbb=;% zm_uSxsGN{@8&uLo!U;_AUS`IdaN@iqPyfzoPQA=*@hvcvO7pyznfw+QK{)X;8#qo+ z`_R;OFsmzqVr|N`x+yG6r)l8dnDts%QFxa+@dEr4N;rpv72XoJVF=L@&<_=5pJqMlR zQ~$y?j;d*zcK(Znw_#}7`7ajUhM{Ta&&>KYbV5%%Ribo)q<&-80`z+MCgfcQm2{zS z0#nmPhOrz@oSWpE{^6Ye=S4<1d#Cy7A|sr=(@w`CBb>d{{PYULS_<>>a+02(szm7o zNnL4J%R(pQT?a~PyX=tT{bW2))^_DSx0GxUY{0a1(6?>@U;Uk1 z**1T_n{tdVa@yDr?q@7D5JVfNGeyk!GC_n2VQQ19;!BW+8BnHJ_X|nv)Mj=ZAojG8 zr}nfnGy8+*=yVbj$xhgfkcMa?*(o$j6Uk2M$N+*cTh|GD5mFB*3;P{Xk52KjLOq%| zW~nV|sF7sn?6#MGax=TKzw-Axd4Cr1BaRC5YDq}@T4v!V_MfN1h4UX~C=gyuL@35Gf|Lmkgh zI0{f0QKFB2GH^UYX95_La0DQ@fK74mV#UMKztO!b$?Vq(BCGsOlDMU~K@MP?RF@W_-npvdf8EPgYB zHVbgoXlt=I?lj$yktQ0lTxS502&OuS@S&rdoLDZV4W>n_v>a@RQH6mwy2Mn74?SKN zH%I(J3ZgP7#^jXV-mFwtFoNtgRHa>2^qP$6=!)nyGLMpyv97{A`H)1U5GCW46~<`a z)I_)m{>S$-sZ`7%d&GLl*F?udJ>1^@38-NaN6-`XGbA}dHsd7Lde?XJs*hF2Cy;>6 zo|x^CM?hFu^~4-kA=v7P{a%IOR8MU8jzx)>6qdvW@kdL%v1ui6t}99t5eH?wbE#KQ zQl_{-MjVud$BxuK%0MCV02$^h_|#Ibqy%4Y6r~`>fD%0!6(l1LD)0dc+Du230m72` z_EN7~No6QcwOolEJMs|{uwRMyEh7{Fs`>AwUVce+C{NW{t*BB)7*wOF;ls7iMpe}E zQDt7wR4vw|(jwJ!ZC)>pV6qlF*SSI-q}LB8yzO!HJ_l#J6h9uG6Vstxzpzw#EB(Sa z3Ocmwhuzhru!1TdfYU96HaAY2(SXzDhV%KpGOuIFfKZ***aO0|VLH7V&?(E$5$ae$ z*YV!vUY9Ub1c3&SuM6dASzQNt=`{Ml(R_BfmzO#^v`t)<;i_=~;Yo)lXsICby2IY^?lSyH zETYZfxEp;stmANNWb7Q4ds0#k1;4q*(X>vJk`e=k24qi zAE{EiJRw;TsuD?^fbb;>;Pa^Hu{@~sdX$V+m5MZIj8!ck2=Zgm^68y>)M&@?sg+(~ ziH>1L8YQaZU?9kk!)_1719{Z)C-5zmUTJDVXrGKsP^YtyfcylU&Pw|LlZ;+yQ^z8r z5mO3kn&|r?xSp!t6I(r#uu@Y9wkF{yN+D9mNfaIIc+@LSF)DIPk`pn~^66DxIn~W6 zp)U21Q*at3b&0x8!I=_;Yj`xBI1S%`t(LFkvnsEs4|Gpcy$ku!JuOde@&G~iG_39E z_p5LpJuv@dRPs^PUcYkjzjl^-!=LiC67_~ZL1~0gLVG=vKV0pN9B`&;cOHFQ$UGC9 zH_}0B#%JP};S_@QnK&S%SQ=cc56r2&UyV1hWNPRl^^K|OR38$MpNicjEWjX-L+xpN zdyO}~WLhXs2ien9NC+e#KMf%v*e!-U4ze3~Wvw^rjE2xVI88eM0zN^-opPC7Npn(pl)I4Wd znWF6qhzgly`4NVdS&8%r!--jFt6Ck|v#m~HHqAX}AEr(XcXlEp%7^;w5on7vQN%VB z?M+Go6+2cy@?D4xD{~Hh=#8FT>{pp{(Cjej1A@_Jp4HE*PBp70FOGN3W_&11%2O9< z#B4r&Ll8M&_w^-CoSX=Y@Jy5A#$Q8uFkv4`FCh4ITJme9Va)Z!flMFAmk{ zNiX)~HY@U=b}_bDr5eB`DSWL->d`Fw5;c2hFD56KIC7)}B2kQ#R2hhNx=d9D1vy=Y z%Ajp2oL|moBG89+IB3IcK0|%b&W$*~L_~x9LK6_C6o6vaq$lMZTY%yBCurkiHN)||c7pMb3@@{c(mBIUpDtEzh^QovUWn($j>yf-xSjW@ z^VXzpX13UmrF0Z|GfNItD_y*4z~g7CMLz9ztYw4wWdMo1``}>o1`LhInq3 zv_U$6-Htn%aUUN18b0DE@5a=f(WxHobKDu7>d`*OozbZt?P1)-aBQrd(1%_sQ940V zTd`pjIw5yDR1*EhCY}~Dv^fSRR`Ros_HL#PGW|gVnkPRHoh{LJ#{<#X5^ZE0u|cM{ zJC4{OBdH@c$mDj1N|MKq*zQmpWMxTy@gT1s9kS{#kkEF=lTizx?T#m-7C;*rM{JPk z?T#Zh$Vlpl4Klgip^_HLn!tX?4jh7_CYpJl!QQ1Q9GYq;XuD%aklO4fq#LD_2+w=`Ru=ZQPV z?)Y?>K2awJrGAI$#qu0*N+fIuvl+^4D9y)>@K^KrFn?$YOD$DIOKWR(LdbhEWkPFf zP=LE8$|~iz6ZyVMA^|*$(yyP{&`edA-CjP6Odh6EsXn!(P%v zja7c8_VePo%?)s68cZ~2X9rpg?4cwR7oj~(eJ`S~OL z?4h_@lcO!1EduzaAQ~3eLTOT(og=JtRsu4>@5C@WsP+-;JIe2Le0Kg3E>6R3D*A=>qCS#uV&~P)>Hikv>YTwrfZEr@8*?W90_P!|H4|yvx&B-rT{wm-a_+ z*D;QHRU#JfNhkZ~rV{baG&sk_tg4+MjvWbLplydxK8)0aFy6Q8QKSTs)jrIkSwedZ zv{Demkl7yLZ_*+_njy9uV1wobX>x~+5as1{^;1$3qkVcPNo(5lP!bGprbAK+;wdul zA!%6}P1Q5x>;)#l!e#~z?4%&(79He-2w5~Q?|?%psRpJrJ75NMGA0oi?yXKS>@b;*;HDj?YJg6#>K_F=Y?AL}Nk$YeDi`&L6? zM_kcK^70A(@Zm}2r@W$*R9gb_icV6U2!Wit>#H;LI=W+WLkm8!om0f`o8b2-!4DWx zHBlNQiq!MU?VKV!FD;_PyX?h(pWqKH>4mRtN_q0ESDM~>rTHRV>7htt@wR*OvnTpP zN_&U$4Gob(?R8!D@wmRd*Qm>GjH9pMM&Aiiy~Kez;6(i1)*4HARY4wyW;AB2qu z8GDYbAw2sO|JdO}LV2pPA^3_lRiF$8ACi>iVn_k~EE!l?S2%B~p#g4=Xe#5ovNEA@?3eU^ZJLR(>K4@}n_bCO?5t-J@ZjmZ&a)F?`3V{>bn~3eq62Z=?W`2>KiCdeKL+a3iJe zG{4(v`W_0>Ag}MC070Jaq0p8f0@9>f)n)BS?c_#X}O3{|>Z z6`m1lQR!!>(h>A91sh4C;nK2j3K|9V-*)uW^?dN3{2l}9)k+*`uv)M734kD9AINP$ zAXu#jSK@na&_>oYzV1(c9oGG__aluGl@~yep9U{zqq7|~kp}+TpZt=N2GvB62Kfd@ z-gyCnd_!6~cA~_hwJ|n_k3Ykol-7v%N8!0*!8(IKc!qy`$qW_MFITEFy2$PT1RFEZ z9gY|BFh7fzoavufGAooPA7_Q~H4n?iZ=u}R2_Ala7K z#k|v5{^+z8umpV<644o0dGi@(`Mpc@%>xm^ftv?qqAQ5_4RbDn$jgL0%wNc#Jj<`Z zr31N;O%wHaVHZhSKq&LV(lW6pkVf@5k7rHst4rpE^5o;Z&_4M%5BB?`9@B&PrLpzA zd5Yh^{iO&1&7)N>`p0Gbp(%cT>av8~@J#pURUd{>3Ly-O5T`7>7wX6WMS_Iw?s#pP)h{2}E%Z;hG$u4Vs9%^U20@l5#@LKiXz?syT9% z{(mger7?_&m-9EL`h8ND>u?AeZhSd&WXy;RH@;j)I{^q+8RTz(A=((KfHDp}1q|IQbRasQkjAE=)Ws;Yn5oYYr;F1K zKpFD^2-U?5qpU2JmX3=VhFPhKZ3}EU$O!dx1FJKFGL!{SE-3~ z2ha8gl_NpBj^Pmb>O1f0B7XjAhMyp&zJS}_fwi0$O!F%$mq+DcBttY-xbH%d^UFzv zCQ<41$yeO0=*F*^;dkd7rulYxc+moxP{lFbp&L|J}Lsy5OJj%wTwgC)L+Ng%RsbE zI&>d_Xt%T2-;`MjM7y1$mxu@hG@d(n<+&ijI~dqb#E=maBJe7LU;qKhk$_s%9Snpg zWkH5VKp`url4J$KG+N3MS=>Q!RtoA|vYQI1ZQj9fPfO+!I~)#$Fmk06=+k$wY)K`7 zM|5yF6tc*bvUvY@usj*77I@U(4~IfFFF&P((c$l4NqHS7@TjLB4uvpsrD62+I~ab1 zO*%{+`*0{^kt<{|C{pyA?1u>HgHM1m9u1Hotne=8$gi0LqblyA$CJ7+j9VqL%_G7O zx`0}jUchFiezFg_P~FVL?~CIF5P2i+O{>yDzkuY@crVU+LED$c1 z$S}S@+!X=T#nS89qQ?y63So7NBfxBxu9?U&0|=E0D8~#ysBYC`1|U?ovb54NpLWXN z2AsT?ryBkFsW=qx)guNnpm?tyFaV)=FWp>{?m~8(9xwv&n>m1zbpfHeO%E7=P~D~n zjDRjZ;lhff1R!`X?yraoP{42q_gCbA0SHs~=>Y=}rtYHwqf9st0>_4DXa3@!{a$tS zQ-wgf&WOh!V2(CKJpKSRcp91m;_(O3!79=%{ruC`oJ*dYWC_w)~ zhIs;=_60=dxWtmjt7iCJQuHBjAgxJ!-WD|y;`26YB;AB2`1}zXu{u)86g{8RyH7aC z7L8l{z7AxxJtF%@^oSIQ&wD?jN2CB`A4kZd9FmGsbWIXSzX>A!$MlEQagPAJ;=nAbw-#aT;Ri2QdR8e{A!X=XOux+ei(~_?TRaxCigd z^z&-zCk~M-?;t@ImY&q(8z7u`lEyds9z;Mt@%l8mf67e1TU|PQ0Mb6tSnxD+bVsJK z;AwK7roI7<1W=9R{53OdxDg?Dv3jE!{)X!AG3asuRPNw54#4x|gVmsAfM&-Y%qpA^y93W0q zjgcKs6j95-VGuKfU(;ix3|f9okCBKxegnr>$}BnX21Op%;Wa$zc$D#56lFY0o}=wy zv4;(Yucl5wD{g2`w%|`AKBYLPncp+puMGAud{`a38uD;$FI_zPezxB?wfD%wwY^6k zuI;76H8@9FAUFi1){=7qiVvF0r08Hx-9kD%?pP(g1fGT-PS!qU#@9H}Xk++#J-@BV ze=7AUv&Gba@-g^)$}+@^kRV>;r>yj7RV=gAD(pS z<2IET9k(4|)}hc5LmaoMB>DYroVNYQjQNNp#rM0np6?G!{TPL_(sA35Q8+6NmOn<} ztaOm}6SMvuI-!r-RAO}8_6xIq51o+5Z7K=-i>P84T4)$o!--x=KC9WUN-Z?P>x6XN zw$KQ#6VkA|&q95x zahpmSE}Xz=+gii86;4zq`CBdMx@)7FpyRf+QBBZfU~NB5Z{F(nPi->7dxsQVyvYdf9nv&nlM&uKq`2YR z4C{{22_0Rm5~UL)b*Ew79XcVSi&YXfCgB8v;O{YvHaJm{L15)=GVPrmiMExEk zjLfGQ$vp-l^QC$EJo>$cb${rD{)oCtjHDhgtcOA;vj(<@h7m6h4}Ep z$<0mE=i=k76PxBX%UDHhuw%O}8%5L3iQIh8Ry)IT^F2G+O~e5jpeuYfef^bwb`k!E cR&J<88#=j;4DduAwq|m>6}BB*>VIqgKhH-vn*aa+ diff --git a/managed/models/database.go b/managed/models/database.go index d18b05bc83..495b72d986 100644 --- a/managed/models/database.go +++ b/managed/models/database.go @@ -962,6 +962,22 @@ var databaseSchema = [][]string{ 102: { `UPDATE settings SET settings = settings - 'alert_manager_url'`, }, + 103: { + `UPDATE settings SET settings = jsonb_insert(settings, '{alerting,enabled}', to_jsonb(NOT ((settings#>'{alerting,disabled}')::boolean))) WHERE (settings#>'{alerting,disabled}') IS NOT NULL`, + `UPDATE settings SET settings = settings #- '{alerting, disabled}';`, + + `UPDATE settings SET settings = settings || jsonb_set(settings, '{updates,enabled}', to_jsonb( NOT ((settings#>'{updates,disabled}')::boolean))) WHERE (settings#>'{updates,disabled}') IS NOT NULL`, + `UPDATE settings SET settings = settings #- '{updates, disabled}';`, + + `UPDATE settings SET settings = settings || jsonb_set(settings, '{telemetry,enabled}', to_jsonb( NOT ((settings#>'{telemetry,disabled}')::boolean))) WHERE (settings#>'{telemetry,disabled}') IS NOT NULL`, + `UPDATE settings SET settings = settings #- '{telemetry, disabled}';`, + + `UPDATE settings SET settings = settings || jsonb_set(settings, '{backup_management,enabled}', to_jsonb( NOT ((settings#>'{backup_management,disabled}')::boolean))) WHERE (settings#>'{backup_management,disabled}') IS NOT NULL`, + `UPDATE settings SET settings = settings #- '{backup_management, disabled}';`, + + `UPDATE settings SET settings = settings || jsonb_set(settings, '{sass,enabled}', to_jsonb( NOT ((settings#>'{sass,stt_disabled}')::boolean))) WHERE (settings#>'{sass,stt_disabled}') IS NOT NULL`, + `UPDATE settings SET settings = settings #- '{sass, stt_disabled}';`, + }, } // ^^^ Avoid default values in schema definition. ^^^ diff --git a/managed/models/role_helpers.go b/managed/models/role_helpers.go index da1c25057b..30ea14938a 100644 --- a/managed/models/role_helpers.go +++ b/managed/models/role_helpers.go @@ -199,7 +199,7 @@ func ChangeDefaultRole(tx *reform.TX, roleID int) error { } var p ChangeSettingsParams - p.DefaultRoleID = roleID + p.DefaultRoleID = &roleID _, err := UpdateSettings(tx, &p) diff --git a/managed/models/settings.go b/managed/models/settings.go index 49619ac57b..b55f238b84 100644 --- a/managed/models/settings.go +++ b/managed/models/settings.go @@ -21,6 +21,18 @@ import ( "github.com/aws/aws-sdk-go/aws/endpoints" ) +// Default values for settings. These values are used when settings are not set. +const ( + AdvisorsEnabledDefault = true + AlertingEnabledDefault = true + TelemetryEnabledDefault = true + UpdatesEnabledDefault = true + BackupManagementEnabledDefault = true + VictoriaMetricsCacheEnabledDefault = false + AzureDiscoverEnabledDefault = false + AccessControlEnabledDefault = false +) + // MetricsResolutions contains standard VictoriaMetrics metrics resolutions. type MetricsResolutions struct { HR time.Duration `json:"hr"` @@ -28,32 +40,26 @@ type MetricsResolutions struct { LR time.Duration `json:"lr"` } -// SaaS contains settings related to the SaaS platform. -type SaaS struct { +type Advisors struct { // Advisor checks disabled, false by default. - STTDisabled bool `json:"stt_disabled"` + Enabled *bool `json:"enabled"` // List of disabled STT checks DisabledSTTChecks []string `json:"disabled_stt_checks"` // STT check intervals STTCheckIntervals STTCheckIntervals `json:"stt_check_intervals"` } -// Alerting contains settings related to Percona Alerting. -type Alerting struct { - Disabled bool `json:"disabled"` -} - // Settings contains PMM Server settings. type Settings struct { PMMPublicAddress string `json:"pmm_public_address"` Updates struct { - Disabled bool `json:"disabled"` + Enabled *bool `json:"enabled"` } `json:"updates"` Telemetry struct { - Disabled bool `json:"disabled"` - UUID string `json:"uuid"` + Enabled *bool `json:"enabled"` + UUID string `json:"uuid"` } `json:"telemetry"` MetricsResolutions MetricsResolutions `json:"metrics_resolutions"` @@ -67,19 +73,21 @@ type Settings struct { SSHKey string `json:"ssh_key"` VictoriaMetrics struct { - CacheEnabled bool `json:"cache_enabled"` + CacheEnabled *bool `json:"cache_enabled"` } `json:"victoria_metrics"` - SaaS SaaS `json:"sass"` // sic :( + SaaS Advisors `json:"sass"` // sic :( - Alerting Alerting `json:"alerting"` + Alerting struct { + Enabled *bool `json:"enabled"` + } `json:"alerting"` Azurediscover struct { - Enabled bool `json:"enabled"` + Enabled *bool `json:"enabled"` } `json:"azure"` BackupManagement struct { - Disabled bool `json:"disabled"` + Enabled *bool `json:"enabled"` } `json:"backup_management"` // PMMServerID is generated on the first start of PMM server. @@ -91,10 +99,75 @@ type Settings struct { // AccessControl holds information about access control. AccessControl struct { // Enabled is true if access control is enabled. - Enabled bool `json:"enabled"` + Enabled *bool `json:"enabled"` } `json:"access_control"` } +// IsAlertingEnabled returns true if alerting is enabled. +func (s *Settings) IsAlertingEnabled() bool { + if s.Alerting.Enabled != nil { + return *s.Alerting.Enabled + } + return AlertingEnabledDefault +} + +// IsTelemetryEnabled returns true if telemetry is enabled. +func (s *Settings) IsTelemetryEnabled() bool { + if s.Telemetry.Enabled != nil { + return *s.Telemetry.Enabled + } + return TelemetryEnabledDefault +} + +// IsUpdatesEnabled returns true if updates are enabled. +func (s *Settings) IsUpdatesEnabled() bool { + if s.Updates.Enabled != nil { + return *s.Updates.Enabled + } + return UpdatesEnabledDefault +} + +// IsBackupManagementEnabled returns true if backup management is enabled. +func (s *Settings) IsBackupManagementEnabled() bool { + if s.BackupManagement.Enabled != nil { + return *s.BackupManagement.Enabled + } + return BackupManagementEnabledDefault +} + +// IsAdvisorsEnabled returns true if advisors are enabled. +func (s *Settings) IsAdvisorsEnabled() bool { + if s.SaaS.Enabled != nil { + return *s.SaaS.Enabled + } + + return AdvisorsEnabledDefault +} + +// IsAzureDiscoverEnabled returns true if Azure discovery is enabled. +func (s *Settings) IsAzureDiscoverEnabled() bool { + if s.Azurediscover.Enabled != nil { + return *s.Azurediscover.Enabled + } + return AzureDiscoverEnabledDefault +} + +// IsAccessControlEnabled returns true if access control is enabled. +func (s *Settings) IsAccessControlEnabled() bool { + if s.AccessControl.Enabled != nil { + return *s.AccessControl.Enabled + } + return AccessControlEnabledDefault +} + +// IsVictoriaMetricsCacheEnabled returns true if VictoriaMetrics cache is enabled. +func (s *Settings) IsVictoriaMetricsCacheEnabled() bool { + if s.VictoriaMetrics.CacheEnabled != nil { + return *s.VictoriaMetrics.CacheEnabled + } + return VictoriaMetricsCacheEnabledDefault +} + // STTCheckIntervals represents intervals between STT checks. type STTCheckIntervals struct { StandardInterval time.Duration `json:"standard_interval"` @@ -136,12 +209,4 @@ func (s *Settings) fillDefaults() { if s.SaaS.STTCheckIntervals.FrequentInterval == 0 { s.SaaS.STTCheckIntervals.FrequentInterval = 4 * time.Hour } - - // AWSInstanceChecked is false by default - // SSHKey is empty by default - // SaaS.STTDisabled is false by default - // Alerting.Disabled is false by default - // VictoriaMetrics CacheEnable is false by default - // PMMPublicAddress is empty by default - // Azurediscover.Enabled is false by default } diff --git a/managed/models/settings_helpers.go b/managed/models/settings_helpers.go index ff91017456..0083c4d460 100644 --- a/managed/models/settings_helpers.go +++ b/managed/models/settings_helpers.go @@ -20,6 +20,7 @@ import ( "fmt" "time" + "github.com/AlekSi/pointer" "github.com/google/uuid" "github.com/pkg/errors" "gopkg.in/reform.v1" @@ -49,24 +50,22 @@ func GetSettings(q reform.DBTX) (*Settings, error) { // ChangeSettingsParams contains values to change data in settings table. type ChangeSettingsParams struct { - DisableUpdates bool - EnableUpdates bool + EnableUpdates *bool - DisableTelemetry bool - EnableTelemetry bool + EnableTelemetry *bool MetricsResolutions MetricsResolutions DataRetention time.Duration + // List of AWS partitions to use. If empty - default partitions will be used. If nil - no changes will be made. AWSPartitions []string - SSHKey string + SSHKey *string // Enable Security Threat Tool - EnableSTT bool - // Disable Security Threat Tool - DisableSTT bool + EnableSTT *bool + // List of STT checks to disable DisableSTTChecks []string // List of STT checks to enable @@ -75,36 +74,24 @@ type ChangeSettingsParams struct { STTCheckIntervals STTCheckIntervals // Enable Azure Discover features. - EnableAzurediscover bool - // Disable Azure Discover features. - DisableAzurediscover bool - + EnableAzurediscover *bool // Enable Percona Alerting features. - EnableAlerting bool - // Disable Percona Alerting features. - DisableAlerting bool + EnableAlerting *bool // Enable Access Control features. - EnableAccessControl bool - // Disable Access Control features. - DisableAccessControl bool + EnableAccessControl *bool // EnableVMCache enables caching for vmdb search queries - EnableVMCache bool - // DisableVMCache disables caching for vmdb search queries - DisableVMCache bool + EnableVMCache *bool // PMM Server public address. - PMMPublicAddress string - RemovePMMPublicAddress bool + PMMPublicAddress *string // Enable Backup Management features. - EnableBackupManagement bool - // Disable Backup Management features. - DisableBackupManagement bool + EnableBackupManagement *bool // DefaultRoleID sets a default role to be assigned to new users. - DefaultRoleID int + DefaultRoleID *int } // SetPMMServerID should be run on start up to generate unique PMM Server ID. @@ -127,13 +114,13 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err return nil, NewInvalidArgumentError(err.Error()) } - if params.DefaultRoleID != 0 { + if params.DefaultRoleID != nil { tx, ok := q.(*reform.TX) if !ok { return nil, fmt.Errorf("%w: changing Role ID requires a *reform.TX", ErrTxRequired) } - if err := lockRoleForChange(tx, params.DefaultRoleID); err != nil { + if err := lockRoleForChange(tx, *params.DefaultRoleID); err != nil { return nil, err } } @@ -143,18 +130,16 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err return nil, err } - if params.DisableUpdates { - settings.Updates.Disabled = true - } - if params.EnableUpdates { - settings.Updates.Disabled = false - } - if params.DisableTelemetry { - settings.Telemetry.Disabled = true - settings.Telemetry.UUID = "" + if params.EnableUpdates != nil { + settings.Updates.Enabled = params.EnableUpdates } - if params.EnableTelemetry { - settings.Telemetry.Disabled = false + + if params.EnableTelemetry != nil { + settings.Telemetry.Enabled = params.EnableTelemetry + + if !*settings.Telemetry.Enabled { + settings.Telemetry.UUID = "" + } } if params.MetricsResolutions.LR != 0 { settings.MetricsResolutions.LR = params.MetricsResolutions.LR @@ -169,18 +154,16 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err settings.DataRetention = params.DataRetention } - if len(params.AWSPartitions) != 0 { + if params.AWSPartitions != nil { settings.AWSPartitions = deduplicateStrings(params.AWSPartitions) } - if params.SSHKey != "" { - settings.SSHKey = params.SSHKey - } - if params.DisableSTT { - settings.SaaS.STTDisabled = true + if params.SSHKey != nil { + settings.SSHKey = pointer.GetString(params.SSHKey) } - if params.EnableSTT { - settings.SaaS.STTDisabled = false + + if params.EnableSTT != nil { + settings.SaaS.Enabled = params.EnableSTT } if params.STTCheckIntervals.RareInterval != 0 { @@ -212,54 +195,32 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err settings.SaaS.DisabledSTTChecks = res } - if params.DisableVMCache { - settings.VictoriaMetrics.CacheEnabled = false + if params.EnableVMCache != nil { + settings.VictoriaMetrics.CacheEnabled = params.EnableVMCache } - if params.EnableVMCache { - settings.VictoriaMetrics.CacheEnabled = true + if params.PMMPublicAddress != nil { + settings.PMMPublicAddress = pointer.GetString(params.PMMPublicAddress) } - if params.PMMPublicAddress != "" { - settings.PMMPublicAddress = params.PMMPublicAddress + if params.EnableAzurediscover != nil { + settings.Azurediscover.Enabled = params.EnableAzurediscover } - if params.RemovePMMPublicAddress { - settings.PMMPublicAddress = "" + if params.EnableAlerting != nil { + settings.Alerting.Enabled = params.EnableAlerting } - if params.DisableAzurediscover { - settings.Azurediscover.Enabled = false - } - if params.EnableAzurediscover { - settings.Azurediscover.Enabled = true + if params.EnableAccessControl != nil { + settings.AccessControl.Enabled = params.EnableAccessControl } - if params.DisableAlerting { - settings.Alerting.Disabled = true + if params.EnableBackupManagement != nil { + settings.BackupManagement.Enabled = params.EnableBackupManagement } - if params.EnableAlerting { - settings.Alerting.Disabled = false - } - - if params.DisableAccessControl { - settings.AccessControl.Enabled = false - } - if params.EnableAccessControl { - settings.AccessControl.Enabled = true - } - - if params.DisableBackupManagement { - settings.BackupManagement.Disabled = true - } - - if params.EnableBackupManagement { - settings.BackupManagement.Disabled = false - } - - if params.DefaultRoleID != 0 { - settings.DefaultRoleID = params.DefaultRoleID + if params.DefaultRoleID != nil { + settings.DefaultRoleID = *params.DefaultRoleID } err = SaveSettings(q, settings) @@ -280,24 +241,6 @@ func lockRoleForChange(tx *reform.TX, roleID int) error { // ValidateSettings validates settings changes. func ValidateSettings(params *ChangeSettingsParams) error { //nolint:cyclop - if params.EnableUpdates && params.DisableUpdates { - return errors.New("both enable_updates and disable_updates are present") - } - if params.EnableTelemetry && params.DisableTelemetry { - return errors.New("both enable_telemetry and disable_telemetry are present") - } - if params.EnableSTT && params.DisableSTT { - return errors.New("both enable_stt and disable_stt are present") - } - if params.EnableVMCache && params.DisableVMCache { - return errors.New("both enable_vm_cache and disable_vm_cache are present") - } - if params.EnableAlerting && params.DisableAlerting { - return errors.New("both enable_alerting and disable_alerting are present") - } - if params.EnableBackupManagement && params.DisableBackupManagement { - return errors.New("both enable_backup_management and disable_backup_management are present") - } // TODO: consider refactoring this and the validation for STT check intervals checkCases := []struct { dur time.Duration @@ -366,10 +309,6 @@ func ValidateSettings(params *ChangeSettingsParams) error { //nolint:cyclop return err } - if params.PMMPublicAddress != "" && params.RemovePMMPublicAddress { - return errors.New("both pmm_public_address and remove_pmm_public_address are present") - } - return nil } diff --git a/managed/models/settings_helpers_test.go b/managed/models/settings_helpers_test.go index 654fd226ae..8f4f700da6 100644 --- a/managed/models/settings_helpers_test.go +++ b/managed/models/settings_helpers_test.go @@ -19,6 +19,7 @@ import ( "testing" "time" + "github.com/AlekSi/pointer" "github.com/pkg/errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -44,7 +45,7 @@ func TestSettings(t *testing.T) { }, DataRetention: 30 * 24 * time.Hour, AWSPartitions: []string{"aws"}, - SaaS: models.SaaS{ + SaaS: models.Advisors{ STTCheckIntervals: models.STTCheckIntervals{ StandardInterval: 24 * time.Hour, RareInterval: 78 * time.Hour, @@ -68,7 +69,7 @@ func TestSettings(t *testing.T) { }, DataRetention: 30 * 24 * time.Hour, AWSPartitions: []string{"aws"}, - SaaS: models.SaaS{ + SaaS: models.Advisors{ STTCheckIntervals: models.STTCheckIntervals{ StandardInterval: 24 * time.Hour, RareInterval: 78 * time.Hour, @@ -103,16 +104,16 @@ func TestSettings(t *testing.T) { require.NoError(t, err) assert.Equal(t, []string{"aws", "aws-cn"}, settings.AWSPartitions) - s = &models.ChangeSettingsParams{ - AWSPartitions: []string{}, - } + // Nil is treated as not changed + s = &models.ChangeSettingsParams{AWSPartitions: nil} settings, err = models.UpdateSettings(sqlDB, s) require.NoError(t, err) assert.Equal(t, []string{"aws", "aws-cn"}, settings.AWSPartitions) - settings = &models.Settings{AWSPartitions: []string{}} - err = models.SaveSettings(sqlDB, settings) - assert.NoError(t, err) + // Empty list is treated as reset to default + s = &models.ChangeSettingsParams{AWSPartitions: []string{}} + settings, err = models.UpdateSettings(sqlDB, s) + require.NoError(t, err) assert.Equal(t, []string{"aws"}, settings.AWSPartitions) }) @@ -147,106 +148,84 @@ func TestSettings(t *testing.T) { t.Run("Updates validation", func(t *testing.T) { ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - DisableUpdates: false, + EnableUpdates: pointer.ToBool(true), }) require.NoError(t, err) - assert.False(t, ns.Updates.Disabled) - - _, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableUpdates: true, - DisableUpdates: true, - }) - var errInvalidArgument *models.InvalidArgumentError - assert.True(t, errors.As(err, &errInvalidArgument)) - assert.EqualError(t, err, `invalid argument: both enable_updates and disable_updates are present`) + assert.True(t, *ns.Updates.Enabled) ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - DisableUpdates: true, + EnableUpdates: pointer.ToBool(false), }) require.NoError(t, err) - assert.True(t, ns.Updates.Disabled) + assert.False(t, *ns.Updates.Enabled) }) - t.Run("Telemetry and STT validation", func(t *testing.T) { + t.Run("Telemetry and Advisors validation", func(t *testing.T) { // ensure initial default state ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableTelemetry: true, - EnableSTT: true, + EnableTelemetry: pointer.ToBool(true), + EnableSTT: pointer.ToBool(true), }) require.NoError(t, err) - assert.False(t, ns.Telemetry.Disabled) - assert.False(t, ns.SaaS.STTDisabled) - - _, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableTelemetry: true, - DisableTelemetry: true, - }) - var errInvalidArgument *models.InvalidArgumentError - assert.True(t, errors.As(err, &errInvalidArgument)) - assert.EqualError(t, err, `invalid argument: both enable_telemetry and disable_telemetry are present`) - - _, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableSTT: true, - DisableSTT: true, - }) - assert.True(t, errors.As(err, &errInvalidArgument)) - assert.EqualError(t, err, `invalid argument: both enable_stt and disable_stt are present`) + assert.True(t, *ns.Telemetry.Enabled) + assert.True(t, *ns.SaaS.Enabled) // disable telemetry, enable STT ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - DisableTelemetry: true, - EnableSTT: true, + EnableTelemetry: pointer.ToBool(false), + EnableSTT: pointer.ToBool(true), }) require.NoError(t, err) - assert.True(t, ns.Telemetry.Disabled) - assert.False(t, ns.SaaS.STTDisabled) + assert.False(t, *ns.Telemetry.Enabled) + assert.True(t, *ns.SaaS.Enabled) // disable STT, enable Telemetry ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableTelemetry: true, - DisableSTT: true, + EnableTelemetry: pointer.ToBool(true), + EnableSTT: pointer.ToBool(false), }) require.NoError(t, err) - assert.False(t, ns.Telemetry.Disabled) - assert.True(t, ns.SaaS.STTDisabled) + assert.True(t, *ns.Telemetry.Enabled) + assert.False(t, *ns.SaaS.Enabled) // enable both ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableSTT: true, - EnableTelemetry: true, + EnableSTT: pointer.ToBool(true), + EnableTelemetry: pointer.ToBool(true), }) require.NoError(t, err) - assert.False(t, ns.Telemetry.Disabled) - assert.False(t, ns.SaaS.STTDisabled) + assert.True(t, *ns.Telemetry.Enabled) + assert.True(t, *ns.SaaS.Enabled) // disable STT ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - DisableSTT: true, + EnableSTT: pointer.ToBool(false), }) require.NoError(t, err) - assert.False(t, ns.Telemetry.Disabled) - assert.True(t, ns.SaaS.STTDisabled) + assert.True(t, *ns.Telemetry.Enabled) + assert.False(t, *ns.SaaS.Enabled) + // enable STT ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableSTT: true, + EnableSTT: pointer.ToBool(true), }) require.NoError(t, err) - assert.False(t, ns.Telemetry.Disabled) - assert.False(t, ns.SaaS.STTDisabled) + assert.True(t, *ns.Telemetry.Enabled) + assert.True(t, *ns.SaaS.Enabled) // restore initial default state ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableTelemetry: true, - EnableSTT: true, + EnableSTT: pointer.ToBool(true), + EnableTelemetry: pointer.ToBool(true), }) require.NoError(t, err) - assert.False(t, ns.Telemetry.Disabled) - assert.False(t, ns.SaaS.STTDisabled) + assert.True(t, *ns.Telemetry.Enabled) + assert.True(t, *ns.SaaS.Enabled) }) t.Run("Check that telemetry disabling resets telemetry UUID", func(t *testing.T) { ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - EnableTelemetry: true, + EnableTelemetry: pointer.ToBool(true), }) require.NoError(t, err) @@ -260,7 +239,7 @@ func TestSettings(t *testing.T) { assert.Equal(t, uuid, ns.Telemetry.UUID) ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ - DisableTelemetry: true, + EnableTelemetry: pointer.ToBool(false), }) require.NoError(t, err) assert.Empty(t, ns.Telemetry.UUID) @@ -288,32 +267,33 @@ func TestSettings(t *testing.T) { }) t.Run("enable azure discover", func(t *testing.T) { - _, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{DisableAzurediscover: true}) + s, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAzurediscover: pointer.ToBool(false)}) require.NoError(t, err) + assert.False(t, *s.Azurediscover.Enabled) - ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAzurediscover: true}) + ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAzurediscover: pointer.ToBool(true)}) require.NoError(t, err) - assert.True(t, ns.Azurediscover.Enabled) + assert.True(t, *ns.Azurediscover.Enabled) }) t.Run("enable Access Control", func(t *testing.T) { - s, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{DisableAccessControl: true}) + s, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAccessControl: pointer.ToBool(false)}) require.NoError(t, err) - assert.False(t, s.AccessControl.Enabled) + assert.False(t, *s.AccessControl.Enabled) - ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAccessControl: true}) + ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAccessControl: pointer.ToBool(true)}) require.NoError(t, err) - assert.True(t, ns.AccessControl.Enabled) + assert.True(t, *ns.AccessControl.Enabled) }) t.Run("disable percona alerting", func(t *testing.T) { - s, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{DisableAlerting: true}) + s, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAlerting: pointer.ToBool(false)}) require.NoError(t, err) - assert.True(t, s.Alerting.Disabled) + assert.False(t, *s.Alerting.Enabled) - ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAlerting: true}) + ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{EnableAlerting: pointer.ToBool(true)}) require.NoError(t, err) - assert.False(t, ns.Alerting.Disabled) + assert.True(t, *ns.Alerting.Enabled) }) t.Run("Set PMM server ID", func(t *testing.T) { diff --git a/managed/models/user_flags_helpers.go b/managed/models/user_flags_helpers.go index 20f7faea2b..7909153b3d 100644 --- a/managed/models/user_flags_helpers.go +++ b/managed/models/user_flags_helpers.go @@ -32,8 +32,8 @@ type CreateUserParams struct { // UpdateUserParams has parameters to update existing user. type UpdateUserParams struct { UserID int - Tour bool - AlertingTour bool + Tour *bool + AlertingTour *bool } // GetOrCreateUser returns user and optionally creates it, if not in database yet. @@ -101,8 +101,12 @@ func UpdateUser(q *reform.Querier, params *UpdateUserParams) (*UserDetails, erro return nil, err } - row.Tour = params.Tour - row.AlertingTour = params.AlertingTour + if params.Tour != nil { + row.Tour = *params.Tour + } + if params.AlertingTour != nil { + row.AlertingTour = *params.AlertingTour + } if err = q.Update(row); err != nil { return nil, errors.Wrap(err, "failed to update user") diff --git a/managed/services/checks/checks.go b/managed/services/checks/checks.go index 292b196fda..8747d742a8 100644 --- a/managed/services/checks/checks.go +++ b/managed/services/checks/checks.go @@ -253,7 +253,7 @@ func (s *Service) GetSecurityCheckResults() ([]services.CheckResult, error) { return nil, err } - if settings.SaaS.STTDisabled { + if !settings.IsAdvisorsEnabled() { return nil, services.ErrAdvisorsDisabled } @@ -267,7 +267,7 @@ func (s *Service) GetChecksResults(_ context.Context, serviceID string) ([]servi return nil, err } - if settings.SaaS.STTDisabled { + if !settings.IsAdvisorsEnabled() { return nil, services.ErrAdvisorsDisabled } @@ -282,7 +282,7 @@ func (s *Service) runChecksGroup(ctx context.Context, intervalGroup check.Interv return errors.WithStack(err) } - if settings.SaaS.STTDisabled { + if !settings.IsAdvisorsEnabled() { return services.ErrAdvisorsDisabled } @@ -298,7 +298,7 @@ func (s *Service) StartChecks(checkNames []string) error { return errors.WithStack(err) } - if settings.SaaS.STTDisabled { + if !settings.IsAdvisorsEnabled() { return services.ErrAdvisorsDisabled } @@ -1452,7 +1452,7 @@ func (s *Service) downloadAdvisors(ctx context.Context) ([]check.Advisor, error) return nil, err } - if settings.Telemetry.Disabled { + if !settings.IsTelemetryEnabled() { s.l.Debug("Advisors downloading skipped due to disabled telemetry.") return nil, nil } diff --git a/managed/services/checks/checks_test.go b/managed/services/checks/checks_test.go index b38f0b1d4e..60e9021960 100644 --- a/managed/services/checks/checks_test.go +++ b/managed/services/checks/checks_test.go @@ -100,7 +100,7 @@ func TestDownloadAdvisors(t *testing.T) { t.Run("disabled telemetry", func(t *testing.T) { _, err := models.UpdateSettings(db.Querier, &models.ChangeSettingsParams{ - DisableTelemetry: true, + EnableTelemetry: pointer.ToBool(false), }) require.NoError(t, err) @@ -403,7 +403,7 @@ func TestGetSecurityCheckResults(t *testing.T) { settings, err := models.GetSettings(db) require.NoError(t, err) - settings.SaaS.STTDisabled = true + settings.SaaS.Enabled = pointer.ToBool(false) err = models.SaveSettings(db, settings) require.NoError(t, err) @@ -448,7 +448,7 @@ func TestStartChecks(t *testing.T) { settings, err := models.GetSettings(db) require.NoError(t, err) - settings.SaaS.STTDisabled = true + settings.SaaS.Enabled = pointer.ToBool(false) err = models.SaveSettings(db, settings) require.NoError(t, err) @@ -823,7 +823,7 @@ func TestGetFailedChecks(t *testing.T) { settings, err := models.GetSettings(db) require.NoError(t, err) - settings.SaaS.STTDisabled = true + settings.SaaS.Enabled = pointer.ToBool(false) err = models.SaveSettings(db, settings) require.NoError(t, err) diff --git a/managed/services/grafana/access_control_cache.go b/managed/services/grafana/access_control_cache.go index 96502298c5..67f7a85f65 100644 --- a/managed/services/grafana/access_control_cache.go +++ b/managed/services/grafana/access_control_cache.go @@ -64,7 +64,7 @@ func (a *accessControl) reload() (bool, error) { return false, err } - a.enabled = settings.AccessControl.Enabled + a.enabled = settings.IsAccessControlEnabled() a.lastUpdated = time.Now() return a.enabled, nil diff --git a/managed/services/grafana/auth_server_test.go b/managed/services/grafana/auth_server_test.go index ff0eab1e43..7c7b328d2f 100644 --- a/managed/services/grafana/auth_server_test.go +++ b/managed/services/grafana/auth_server_test.go @@ -26,6 +26,7 @@ import ( "testing" "time" + "github.com/AlekSi/pointer" "github.com/google/uuid" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" @@ -315,7 +316,7 @@ func TestAuthServerAddVMGatewayToken(t *testing.T) { // Enable access control _, err = models.UpdateSettings(db.Querier, &models.ChangeSettingsParams{ - EnableAccessControl: true, + EnableAccessControl: pointer.ToBool(true), }) require.NoError(t, err) diff --git a/managed/services/inventory/services.go b/managed/services/inventory/services.go index 8c642ad2fa..282ccc4c11 100644 --- a/managed/services/inventory/services.go +++ b/managed/services/inventory/services.go @@ -75,7 +75,7 @@ func (ss *ServicesService) List(ctx context.Context, filters models.ServiceFilte return res, nil } -// ListActiveServiceTypes lists all active Service Types +// ListActiveServiceTypes lists all active Service Types. func (ss *ServicesService) ListActiveServiceTypes(ctx context.Context) ([]inventoryv1.ServiceType, error) { var types []models.ServiceType e := ss.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { diff --git a/managed/services/management/alerting/service.go b/managed/services/management/alerting/service.go index eabad36af5..a742f2a93c 100644 --- a/managed/services/management/alerting/service.go +++ b/managed/services/management/alerting/service.go @@ -108,7 +108,7 @@ func (s *Service) Enabled() bool { s.l.WithError(err).Error("can't get settings") return false } - return !settings.Alerting.Disabled + return settings.IsAlertingEnabled() } // GetTemplates return collected templates. @@ -306,7 +306,7 @@ func (s *Service) downloadTemplates(ctx context.Context) ([]*models.Template, er return nil, err } - if settings.Telemetry.Disabled { + if !settings.IsTelemetryEnabled() { s.l.Debug("Alert templates downloading skipped due to disabled telemetry.") return nil, nil } @@ -418,7 +418,7 @@ func (s *Service) ListTemplates(ctx context.Context, req *alerting.ListTemplates return nil, err } - if settings.Alerting.Disabled { + if !settings.IsAlertingEnabled() { return nil, services.ErrAlertingDisabled } @@ -483,7 +483,7 @@ func (s *Service) CreateTemplate(ctx context.Context, req *alerting.CreateTempla return nil, err } - if settings.Alerting.Disabled { + if !settings.IsAlertingEnabled() { return nil, services.ErrAlertingDisabled } @@ -537,7 +537,7 @@ func (s *Service) UpdateTemplate(ctx context.Context, req *alerting.UpdateTempla return nil, err } - if settings.Alerting.Disabled { + if !settings.IsAlertingEnabled() { return nil, services.ErrAlertingDisabled } @@ -588,7 +588,7 @@ func (s *Service) DeleteTemplate(ctx context.Context, req *alerting.DeleteTempla return nil, err } - if settings.Alerting.Disabled { + if !settings.IsAlertingEnabled() { return nil, services.ErrAlertingDisabled } @@ -685,7 +685,7 @@ func (s *Service) CreateRule(ctx context.Context, req *alerting.CreateRuleReques return nil, err } - if settings.Alerting.Disabled { + if !settings.IsAlertingEnabled() { return nil, services.ErrAlertingDisabled } diff --git a/managed/services/management/alerting/service_test.go b/managed/services/management/alerting/service_test.go index e6e5368e45..8ed48cc81f 100644 --- a/managed/services/management/alerting/service_test.go +++ b/managed/services/management/alerting/service_test.go @@ -21,6 +21,7 @@ import ( "testing" "time" + "github.com/AlekSi/pointer" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gopkg.in/reform.v1" @@ -146,7 +147,7 @@ func TestDownloadTemplates(t *testing.T) { t.Run("with disabled telemetry", func(t *testing.T) { _, err := models.UpdateSettings(db.Querier, &models.ChangeSettingsParams{ - DisableTelemetry: true, + EnableTelemetry: pointer.ToBool(false), }) require.NoError(t, err) diff --git a/managed/services/management/azure_database.go b/managed/services/management/azure_database.go index a375fdfa84..76a169a6b5 100644 --- a/managed/services/management/azure_database.go +++ b/managed/services/management/azure_database.go @@ -83,7 +83,7 @@ func (s *AzureDatabaseService) Enabled() bool { s.l.WithError(err).Error("can't get settings") return false } - return settings.Azurediscover.Enabled + return settings.IsAzureDiscoverEnabled() } // AzureDatabaseInstanceData reflects Azure Database Instance Data of Discovery Response. diff --git a/managed/services/management/backup/artifacts_service.go b/managed/services/management/backup/artifacts_service.go index d61a441c78..6548ebdebe 100644 --- a/managed/services/management/backup/artifacts_service.go +++ b/managed/services/management/backup/artifacts_service.go @@ -59,7 +59,7 @@ func (s *ArtifactsService) Enabled() bool { s.l.WithError(err).Error("can't get settings") return false } - return !settings.BackupManagement.Disabled + return settings.IsBackupManagementEnabled() } // ListArtifacts returns a list of all artifacts. diff --git a/managed/services/management/backup/backups_service.go b/managed/services/management/backup/backups_service.go index 122fd57f0b..ea37f88bef 100644 --- a/managed/services/management/backup/backups_service.go +++ b/managed/services/management/backup/backups_service.go @@ -30,7 +30,6 @@ import ( "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/durationpb" "google.golang.org/protobuf/types/known/timestamppb" - "google.golang.org/protobuf/types/known/wrapperspb" "gopkg.in/reform.v1" inventoryv1 "github.com/percona/pmm/api/inventory/v1" @@ -145,7 +144,7 @@ func (s *BackupsService) RestoreBackup( for _, t := range tasks { if _, err := s.ChangeScheduledBackup(ctx, &backuppb.ChangeScheduledBackupRequest{ ScheduledBackupId: t.ID, - Enabled: &wrapperspb.BoolValue{Value: false}, + Enabled: pointer.ToBool(false), }); err != nil { return nil, err } @@ -341,19 +340,19 @@ func (s *BackupsService) ChangeScheduledBackup(ctx context.Context, req *backupp } if req.Name != nil { - data.Name = req.Name.Value + data.Name = *req.Name } if req.Description != nil { - data.Description = req.Description.Value + data.Description = *req.Description } if req.Retention != nil { - data.Retention = req.Retention.Value + data.Retention = *req.Retention } if req.Retries != nil { - if req.Retries.Value > maxRetriesAttempts { + if *req.Retries > maxRetriesAttempts { return status.Errorf(codes.InvalidArgument, "exceeded max retries %d", maxRetriesAttempts) } - data.Retries = req.Retries.Value + data.Retries = *req.Retries } if req.RetryInterval != nil { if req.RetryInterval.AsDuration() > maxRetryInterval { @@ -364,20 +363,17 @@ func (s *BackupsService) ChangeScheduledBackup(ctx context.Context, req *backupp serviceID = data.ServiceID params := models.ChangeScheduledTaskParams{ - Data: scheduledTask.Data, + Data: scheduledTask.Data, + CronExpression: req.CronExpression, } if req.Enabled != nil { - params.Disable = pointer.ToBool(!req.Enabled.Value) - if scheduledTask.Type == models.ScheduledMongoDBBackupTask && !req.Enabled.Value { + params.Disable = pointer.ToBool(!*req.Enabled) + if scheduledTask.Type == models.ScheduledMongoDBBackupTask && !*req.Enabled { disablePITR = data.Mode == models.PITR } } - if req.CronExpression != nil { - params.CronExpression = pointer.ToString(req.CronExpression.Value) - } - err = s.scheduleService.Update(req.ScheduledBackupId, params) return convertError(err) diff --git a/managed/services/management/backup/backups_service_test.go b/managed/services/management/backup/backups_service_test.go index 091b5435b5..3c641a03ca 100644 --- a/managed/services/management/backup/backups_service_test.go +++ b/managed/services/management/backup/backups_service_test.go @@ -29,7 +29,6 @@ import ( "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/durationpb" "google.golang.org/protobuf/types/known/timestamppb" - "google.golang.org/protobuf/types/known/wrapperspb" "gopkg.in/reform.v1" "gopkg.in/reform.v1/dialects/postgresql" @@ -366,12 +365,12 @@ func TestScheduledBackups(t *testing.T) { changeReq := &backuppb.ChangeScheduledBackupRequest{ ScheduledBackupId: task.ID, - Enabled: wrapperspb.Bool(false), - CronExpression: wrapperspb.String("2 * * * *"), + Enabled: pointer.ToBool(false), + CronExpression: pointer.ToString("2 * * * *"), StartTime: timestamppb.New(time.Now()), - Name: wrapperspb.String("test"), - Description: wrapperspb.String("test"), - Retries: wrapperspb.UInt32(0), + Name: pointer.ToString("test"), + Description: pointer.ToString("test"), + Retries: pointer.ToUint32(0), RetryInterval: durationpb.New(time.Second), } _, err = backupSvc.ChangeScheduledBackup(ctx, changeReq) @@ -380,11 +379,11 @@ func TestScheduledBackups(t *testing.T) { task, err = models.FindScheduledTaskByID(db.Querier, res.ScheduledBackupId) require.NoError(t, err) data = task.Data.MySQLBackupTask - assert.Equal(t, changeReq.CronExpression.GetValue(), task.CronExpression) - assert.Equal(t, changeReq.Enabled.GetValue(), !task.Disabled) - assert.Equal(t, changeReq.Name.GetValue(), data.Name) - assert.Equal(t, changeReq.Description.GetValue(), data.Description) - assert.Equal(t, changeReq.Retries.GetValue(), data.Retries) + assert.Equal(t, *changeReq.CronExpression, task.CronExpression) + assert.Equal(t, *changeReq.Enabled, !task.Disabled) + assert.Equal(t, *changeReq.Name, data.Name) + assert.Equal(t, *changeReq.Description, data.Description) + assert.Equal(t, *changeReq.Retries, data.Retries) assert.Equal(t, changeReq.RetryInterval.AsDuration(), data.RetryInterval) }) diff --git a/managed/services/management/backup/locations_service.go b/managed/services/management/backup/locations_service.go index 49f6f4fcaa..576620f2c7 100644 --- a/managed/services/management/backup/locations_service.go +++ b/managed/services/management/backup/locations_service.go @@ -54,7 +54,7 @@ func (s *LocationsService) Enabled() bool { s.l.WithError(err).Error("can't get settings") return false } - return !settings.BackupManagement.Disabled + return settings.IsBackupManagementEnabled() } // ListLocations returns list of all available backup locations. diff --git a/managed/services/management/backup/restore_history_service.go b/managed/services/management/backup/restore_history_service.go index 582514909b..afb41427b7 100644 --- a/managed/services/management/backup/restore_history_service.go +++ b/managed/services/management/backup/restore_history_service.go @@ -51,7 +51,7 @@ func (s *RestoreHistoryService) Enabled() bool { s.l.WithError(err).Error("can't get settings") return false } - return !settings.BackupManagement.Disabled + return settings.IsBackupManagementEnabled() } // ListRestoreHistory returns a list of restore history. diff --git a/managed/services/management/checks.go b/managed/services/management/checks.go index 7cce6077ad..f587b97888 100644 --- a/managed/services/management/checks.go +++ b/managed/services/management/checks.go @@ -239,7 +239,7 @@ func (s *ChecksAPIService) ListSecurityChecks(_ context.Context, _ *managementv1 _, disabled := m[c.Name] res = append(res, &managementv1.SecurityCheck{ Name: c.Name, - Disabled: disabled, + Enabled: !disabled, Summary: c.Summary, Family: convertFamily(c.GetFamily()), Description: c.Description, @@ -273,7 +273,7 @@ func (s *ChecksAPIService) ListAdvisors(_ context.Context, _ *managementv1.ListA _, disabled := m[c.Name] checks = append(checks, &managementv1.SecurityCheck{ Name: c.Name, - Disabled: disabled, + Enabled: !disabled, Summary: c.Summary, Family: convertFamily(c.GetFamily()), Description: c.Description, @@ -330,10 +330,6 @@ func (s *ChecksAPIService) ChangeSecurityChecks(_ context.Context, req *manageme var enableChecks, disableChecks []string changeIntervalParams := make(map[string]check.Interval) for _, check := range req.Params { - if check.Enable && check.Disable { - return nil, status.Errorf(codes.InvalidArgument, "Check %s has enable and disable parameters set to the true.", check.Name) - } - if check.Interval != managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_UNSPECIFIED { interval, err := convertAPIInterval(check.Interval) if err != nil { @@ -342,12 +338,12 @@ func (s *ChecksAPIService) ChangeSecurityChecks(_ context.Context, req *manageme changeIntervalParams[check.Name] = interval } - if check.Enable { - enableChecks = append(enableChecks, check.Name) - } - - if check.Disable { - disableChecks = append(disableChecks, check.Name) + if check.Enable != nil { + if *check.Enable { + enableChecks = append(enableChecks, check.Name) + } else { + disableChecks = append(disableChecks, check.Name) + } } } diff --git a/managed/services/management/checks_test.go b/managed/services/management/checks_test.go index 3591c97b80..8ea9b32f7d 100644 --- a/managed/services/management/checks_test.go +++ b/managed/services/management/checks_test.go @@ -382,10 +382,10 @@ func TestListSecurityChecks(t *testing.T) { assert.ElementsMatch(t, resp.Checks, []*managementv1.SecurityCheck{ - {Name: "one", Disabled: false, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_STANDARD}, - {Name: "two", Disabled: true, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_FREQUENT}, - {Name: "three", Disabled: false, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_RARE}, - {Name: "four", Disabled: false, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_STANDARD}, + {Name: "one", Enabled: true, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_STANDARD}, + {Name: "two", Enabled: false, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_FREQUENT}, + {Name: "three", Enabled: true, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_RARE}, + {Name: "four", Enabled: true, Interval: managementv1.SecurityCheckInterval_SECURITY_CHECK_INTERVAL_STANDARD}, }, ) }) diff --git a/managed/services/management/role.go b/managed/services/management/role.go index d15b77bb23..8d71058b95 100644 --- a/managed/services/management/role.go +++ b/managed/services/management/role.go @@ -54,7 +54,7 @@ func (r *RoleService) Enabled() bool { logrus.WithError(err).Error("cannot get settings") return false } - return settings.AccessControl.Enabled + return settings.IsAccessControlEnabled() } // CreateRole creates a new Role. @@ -86,9 +86,15 @@ func (r *RoleService) UpdateRole(_ context.Context, req *rolev1beta1.UpdateRoleR return nil, err } - role.Title = req.Title - role.Description = req.Description - role.Filter = req.Filter + if req.Title != nil { + role.Title = *req.Title + } + if req.Description != nil { + role.Description = *req.Description + } + if req.Filter != nil { + role.Filter = *req.Filter + } if err := r.db.Update(&role); err != nil { return nil, err diff --git a/managed/services/management/role_test.go b/managed/services/management/role_test.go index 6c60d7c013..b5a66179a4 100644 --- a/managed/services/management/role_test.go +++ b/managed/services/management/role_test.go @@ -19,6 +19,7 @@ import ( "context" "testing" + "github.com/AlekSi/pointer" "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -81,16 +82,21 @@ func TestRoleService(t *testing.T) { _, roleID := createDummyRoles(ctx, t, s) _, err := s.UpdateRole(ctx, &rolev1beta1.UpdateRoleRequest{ - RoleId: roleID, - Title: "Role B - updated", - Filter: "filter B - updated", + RoleId: roleID, + Title: pointer.ToString("Role B - updated"), + Filter: pointer.ToString(""), // Filter was reset. + Description: nil, // Description is not updated. }) require.NoError(t, err) roles, err := s.ListRoles(ctx, &rolev1beta1.ListRolesRequest{}) require.NoError(t, err) - assert.Equal(t, roles.Roles[0].Title, "Role A") - assert.Equal(t, roles.Roles[1].Title, "Role B - updated") + assert.Equal(t, "Role A", roles.Roles[0].Title) + assert.Equal(t, "filter A", roles.Roles[0].Filter) + assert.Equal(t, "Role A description", roles.Roles[0].Description) + assert.Equal(t, "Role B - updated", roles.Roles[1].Title) + assert.Empty(t, roles.Roles[1].Filter) + assert.Equal(t, "Role B description", roles.Roles[1].Description) }) t.Run("Shall return not found", func(t *testing.T) { @@ -100,8 +106,6 @@ func TestRoleService(t *testing.T) { _, err := s.UpdateRole(ctx, &rolev1beta1.UpdateRoleRequest{ RoleId: 0, - Title: "", - Filter: "", }) tests.AssertGRPCErrorCode(t, codes.NotFound, err) }) @@ -258,14 +262,16 @@ func createDummyRoles(ctx context.Context, t *testing.T, s *RoleService) (uint32 t.Helper() rA, err := s.CreateRole(ctx, &rolev1beta1.CreateRoleRequest{ - Title: "Role A", - Filter: "filter A", + Title: "Role A", + Filter: "filter A", + Description: "Role A description", }) require.NoError(t, err) rB, err := s.CreateRole(ctx, &rolev1beta1.CreateRoleRequest{ - Title: "Role B", - Filter: "filter B", + Title: "Role B", + Filter: "filter B", + Description: "Role B description", }) require.NoError(t, err) diff --git a/managed/services/platform/platform.go b/managed/services/platform/platform.go index b0fb364467..a4ecc7f1dc 100644 --- a/managed/services/platform/platform.go +++ b/managed/services/platform/platform.go @@ -27,7 +27,6 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/timestamppb" - "google.golang.org/protobuf/types/known/wrapperspb" "gopkg.in/reform.v1" platformv1 "github.com/percona/pmm/api/platform/v1" @@ -117,7 +116,7 @@ func (s *Service) Connect(ctx context.Context, req *platformv1.ConnectRequest) ( return nil, err } - if !settings.SaaS.STTDisabled { + if settings.IsAdvisorsEnabled() { s.checksService.CollectAdvisors(ctx) } @@ -175,7 +174,7 @@ func (s *Service) Disconnect(ctx context.Context, req *platformv1.DisconnectRequ return nil, err } - if !settings.SaaS.STTDisabled { + if settings.IsAdvisorsEnabled() { s.checksService.CollectAdvisors(ctx) } @@ -324,16 +323,16 @@ func convertEntitlement(ent *platform.EntitlementResponse) (*platformv1.Organiza Number: ent.Number, Name: ent.Name, Summary: ent.Summary, - Tier: &wrapperspb.StringValue{Value: ent.Tier}, - TotalUnits: &wrapperspb.StringValue{Value: ent.TotalUnits}, - UnlimitedUnits: &wrapperspb.BoolValue{Value: ent.UnlimitedUnits}, - SupportLevel: &wrapperspb.StringValue{Value: ent.SupportLevel}, + Tier: &ent.Tier, + TotalUnits: &ent.TotalUnits, + UnlimitedUnits: &ent.UnlimitedUnits, + SupportLevel: &ent.SupportLevel, SoftwareFamilies: ent.SoftwareFamilies, StartDate: timestamppb.New(startDate), EndDate: timestamppb.New(endDate), Platform: &platformv1.OrganizationEntitlement_Platform{ - ConfigAdvisor: &wrapperspb.StringValue{Value: ent.Platform.ConfigAdvisor}, - SecurityAdvisor: &wrapperspb.StringValue{Value: ent.Platform.SecurityAdvisor}, + ConfigAdvisor: &ent.Platform.ConfigAdvisor, + SecurityAdvisor: &ent.Platform.SecurityAdvisor, }, }, nil } diff --git a/managed/services/server/server.go b/managed/services/server/server.go index cd8d86e78c..2bcd282f03 100644 --- a/managed/services/server/server.go +++ b/managed/services/server/server.go @@ -30,6 +30,7 @@ import ( "sync" "time" + "github.com/AlekSi/pointer" "github.com/google/uuid" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -254,7 +255,7 @@ func (s *Server) onlyInstalledVersionResponse(ctx context.Context) *serverv1.Che // CheckUpdates checks PMM Server updates availability. func (s *Server) CheckUpdates(ctx context.Context, req *serverv1.CheckUpdatesRequest) (*serverv1.CheckUpdatesResponse, error) { s.envRW.RLock() - updatesDisabled := s.envSettings.DisableUpdates + updatesEnabled := s.envSettings.EnableUpdates s.envRW.RUnlock() if req.OnlyInstalledVersion { @@ -285,7 +286,7 @@ func (s *Server) CheckUpdates(ctx context.Context, req *serverv1.CheckUpdatesReq LatestNewsUrl: v.LatestNewsURL, } - if updatesDisabled { + if updatesEnabled != nil && !*updatesEnabled { res.UpdateAvailable = false } @@ -307,11 +308,11 @@ func (s *Server) CheckUpdates(ctx context.Context, req *serverv1.CheckUpdatesReq // StartUpdate starts PMM Server update. func (s *Server) StartUpdate(ctx context.Context, req *serverv1.StartUpdateRequest) (*serverv1.StartUpdateResponse, error) { s.envRW.RLock() - updatesDisabled := s.envSettings.DisableUpdates + updatesEnabled := s.envSettings.EnableUpdates s.envRW.RUnlock() - if updatesDisabled { - return nil, status.Error(codes.FailedPrecondition, "Updates are disabled via DISABLE_UPDATES environment variable.") + if updatesEnabled != nil && !*updatesEnabled { + return nil, status.Error(codes.FailedPrecondition, "Updates are disabled via ENABLE_UPDATES environment variable.") } offset, err := s.supervisord.StartUpdate() @@ -420,8 +421,8 @@ func (s *Server) readUpdateAuthToken() (string, error) { // Checking if PMM is connected to Platform is separated from settings for security and concurrency reasons. func (s *Server) convertSettings(settings *models.Settings, connectedToPlatform bool) *serverv1.Settings { res := &serverv1.Settings{ - UpdatesDisabled: settings.Updates.Disabled, - TelemetryEnabled: !settings.Telemetry.Disabled, + UpdatesEnabled: settings.IsUpdatesEnabled(), + TelemetryEnabled: settings.IsTelemetryEnabled(), MetricsResolutions: &serverv1.MetricsResolutions{ Hr: durationpb.New(settings.MetricsResolutions.HR), Mr: durationpb.New(settings.MetricsResolutions.MR), @@ -435,17 +436,17 @@ func (s *Server) convertSettings(settings *models.Settings, connectedToPlatform DataRetention: durationpb.New(settings.DataRetention), SshKey: settings.SSHKey, AwsPartitions: settings.AWSPartitions, - SttEnabled: !settings.SaaS.STTDisabled, - AzurediscoverEnabled: settings.Azurediscover.Enabled, + SttEnabled: settings.IsAdvisorsEnabled(), + AzurediscoverEnabled: settings.IsAzureDiscoverEnabled(), PmmPublicAddress: settings.PMMPublicAddress, - AlertingEnabled: !settings.Alerting.Disabled, - BackupManagementEnabled: !settings.BackupManagement.Disabled, + AlertingEnabled: settings.IsAlertingEnabled(), + BackupManagementEnabled: settings.IsBackupManagementEnabled(), ConnectedToPlatform: connectedToPlatform, TelemetrySummaries: s.telemetryService.GetSummaries(), - EnableAccessControl: settings.AccessControl.Enabled, + EnableAccessControl: settings.IsAccessControlEnabled(), DefaultRoleId: uint32(settings.DefaultRoleID), } @@ -472,35 +473,28 @@ func (s *Server) GetSettings(ctx context.Context, req *serverv1.GetSettingsReque func (s *Server) validateChangeSettingsRequest(ctx context.Context, req *serverv1.ChangeSettingsRequest) error { metricsRes := req.MetricsResolutions - if req.PmmPublicAddress != "" && req.RemovePmmPublicAddress { - return status.Error(codes.InvalidArgument, "Both pmm_public_address and remove_pmm_public_address are present.") - } - - if req.SshKey != "" { - if err := s.validateSSHKey(ctx, req.SshKey); err != nil { + if req.SshKey != nil { + if err := s.validateSSHKey(ctx, *req.SshKey); err != nil { return err } } // check request parameters compatibility with environment variables - if req.EnableUpdates && s.envSettings.DisableUpdates { - return status.Error(codes.FailedPrecondition, "Updates are disabled via DISABLE_UPDATES environment variable.") + if req.EnableUpdates != nil && s.envSettings.EnableUpdates != nil && *req.EnableUpdates != *s.envSettings.EnableUpdates { + return status.Error(codes.FailedPrecondition, "Updates are configured via ENABLE_UPDATES environment variable.") } - // ignore req.DisableTelemetry and req.DisableStt even if they are present since that will not change anything - if req.EnableTelemetry && s.envSettings.DisableTelemetry { - return status.Error(codes.FailedPrecondition, "Telemetry is disabled via DISABLE_TELEMETRY environment variable.") + if req.EnableTelemetry != nil && s.envSettings.EnableTelemetry != nil && *req.EnableTelemetry != *s.envSettings.EnableTelemetry { + return status.Error(codes.FailedPrecondition, "Telemetry is configured via ENABLE_TELEMETRY environment variable.") } - // ignore req.EnableAlerting even if they are present since that will not change anything - if req.DisableAlerting && s.envSettings.EnableAlerting { - return status.Error(codes.FailedPrecondition, "Alerting is enabled via ENABLE_ALERTING environment variable.") + if req.EnableAlerting != nil && s.envSettings.EnableAlerting != nil && *req.EnableAlerting != *s.envSettings.EnableAlerting { + return status.Error(codes.FailedPrecondition, "Alerting is configured via ENABLE_ALERTING environment variable.") } - // ignore req.DisableAzurediscover even if they are present since that will not change anything - if req.DisableAzurediscover && s.envSettings.EnableAzurediscover { - return status.Error(codes.FailedPrecondition, "Azure Discover is enabled via ENABLE_AZUREDISCOVER environment variable.") + if req.EnableAzurediscover != nil && s.envSettings.EnableAzurediscover != nil && *req.EnableAzurediscover != *s.envSettings.EnableAzurediscover { + return status.Error(codes.FailedPrecondition, "Azure Discover is configured via ENABLE_AZUREDISCOVER environment variable.") } if !canUpdateDurationSetting(metricsRes.GetHr().AsDuration(), s.envSettings.MetricsResolutions.HR) { @@ -526,7 +520,6 @@ func (s *Server) validateChangeSettingsRequest(ctx context.Context, req *serverv func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSettingsRequest) (*serverv1.ChangeSettingsResponse, error) { s.envRW.RLock() defer s.envRW.RUnlock() - if err := s.validateChangeSettingsRequest(ctx, req); err != nil { return nil, err } @@ -541,10 +534,14 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting metricsRes := req.MetricsResolutions sttCheckIntervals := req.SttCheckIntervals settingsParams := &models.ChangeSettingsParams{ - DisableUpdates: req.DisableUpdates, - EnableUpdates: req.EnableUpdates, - DisableTelemetry: req.DisableTelemetry, - EnableTelemetry: req.EnableTelemetry, + EnableUpdates: req.EnableUpdates, + EnableTelemetry: req.EnableTelemetry, + EnableSTT: req.EnableStt, + EnableAzurediscover: req.EnableAzurediscover, + PMMPublicAddress: req.PmmPublicAddress, + EnableAlerting: req.EnableAlerting, + EnableBackupManagement: req.EnableBackupManagement, + EnableAccessControl: req.EnableAccessControl, STTCheckIntervals: models.STTCheckIntervals{ RareInterval: sttCheckIntervals.GetRareInterval().AsDuration(), StandardInterval: sttCheckIntervals.GetStandardInterval().AsDuration(), @@ -555,23 +552,13 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting MR: metricsRes.GetMr().AsDuration(), LR: metricsRes.GetLr().AsDuration(), }, - DataRetention: req.DataRetention.AsDuration(), - AWSPartitions: req.AwsPartitions, - SSHKey: req.SshKey, - EnableSTT: req.EnableStt, - DisableSTT: req.DisableStt, - EnableAzurediscover: req.EnableAzurediscover, - DisableAzurediscover: req.DisableAzurediscover, - PMMPublicAddress: req.PmmPublicAddress, - RemovePMMPublicAddress: req.RemovePmmPublicAddress, - - EnableAlerting: req.EnableAlerting, - DisableAlerting: req.DisableAlerting, - EnableBackupManagement: req.EnableBackupManagement, - DisableBackupManagement: req.DisableBackupManagement, + DataRetention: req.DataRetention.AsDuration(), + SSHKey: req.SshKey, + } - EnableAccessControl: req.EnableAccessControl, - DisableAccessControl: req.DisableAccessControl, + if req.AwsPartitions != nil { + // Nil treated as "do not change", empty slice treated as "reset to default" + settingsParams.AWSPartitions = req.AwsPartitions.Values } var errInvalidArgument *models.InvalidArgumentError @@ -585,8 +572,8 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting } // absent value means "do not change" - if req.SshKey != "" { - if err = s.writeSSHKey(req.SshKey); err != nil { + if req.SshKey != nil { + if err = s.writeSSHKey(pointer.GetString(req.SshKey)); err != nil { return errors.WithStack(err) } } @@ -611,7 +598,7 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting // When STT moved from disabled state to enabled force checks download and execution. var sttStarted bool - if oldSettings.SaaS.STTDisabled && !newSettings.SaaS.STTDisabled { + if !oldSettings.IsAdvisorsEnabled() && newSettings.IsAdvisorsEnabled() { sttStarted = true if err := s.checksService.StartChecks(nil); err != nil { s.l.Error(err) @@ -619,13 +606,13 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting } // When STT moved from enabled state to disabled drop all existing STT alerts. - if !oldSettings.SaaS.STTDisabled && newSettings.SaaS.STTDisabled { + if oldSettings.IsAdvisorsEnabled() && !newSettings.IsAdvisorsEnabled() { s.checksService.CleanupAlerts() } // When telemetry state is switched force alert templates and STT checks files collection. // If telemetry switched off that will drop previously downloaded files. - if oldSettings.Telemetry.Disabled != newSettings.Telemetry.Disabled { + if oldSettings.IsTelemetryEnabled() != newSettings.IsTelemetryEnabled() { s.templatesService.CollectTemplates(ctx) if !sttStarted { s.checksService.CollectAdvisors(ctx) diff --git a/managed/services/server/server_test.go b/managed/services/server/server_test.go index 8e77f48ff2..da85f5f791 100644 --- a/managed/services/server/server_test.go +++ b/managed/services/server/server_test.go @@ -20,6 +20,7 @@ import ( "testing" "time" + "github.com/AlekSi/pointer" "github.com/pkg/errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -90,8 +91,8 @@ func TestServer(t *testing.T) { t.Run("Typical", func(t *testing.T) { s := newServer(t) errs := s.UpdateSettingsFromEnv([]string{ - "DISABLE_UPDATES=true", - "DISABLE_TELEMETRY=1", + "ENABLE_UPDATES=true", + "ENABLE_TELEMETRY=1", "METRICS_RESOLUTION_HR=1s", "METRICS_RESOLUTION_MR=2s", "METRICS_RESOLUTION_LR=3s", @@ -99,24 +100,24 @@ func TestServer(t *testing.T) { "PMM_PUBLIC_ADDRESS=1.2.3.4:5678", }) require.Empty(t, errs) - assert.Equal(t, true, s.envSettings.DisableUpdates) - assert.Equal(t, true, s.envSettings.DisableTelemetry) + assert.True(t, *s.envSettings.EnableUpdates) + assert.True(t, *s.envSettings.EnableTelemetry) assert.Equal(t, time.Second, s.envSettings.MetricsResolutions.HR) assert.Equal(t, 2*time.Second, s.envSettings.MetricsResolutions.MR) assert.Equal(t, 3*time.Second, s.envSettings.MetricsResolutions.LR) assert.Equal(t, 10*24*time.Hour, s.envSettings.DataRetention) - assert.Equal(t, "1.2.3.4:5678", s.envSettings.PMMPublicAddress) + assert.Equal(t, "1.2.3.4:5678", *s.envSettings.PMMPublicAddress) }) t.Run("Untypical", func(t *testing.T) { s := newServer(t) errs := s.UpdateSettingsFromEnv([]string{ - "DISABLE_TELEMETRY=TrUe", + "ENABLE_TELEMETRY=TrUe", "METRICS_RESOLUTION=3S", "DATA_RETENTION=360H", }) require.Empty(t, errs) - assert.Equal(t, true, s.envSettings.DisableTelemetry) + assert.True(t, *s.envSettings.EnableTelemetry) assert.Equal(t, 3*time.Second, s.envSettings.MetricsResolutions.HR) assert.Equal(t, 15*24*time.Hour, s.envSettings.DataRetention) }) @@ -124,21 +125,21 @@ func TestServer(t *testing.T) { t.Run("NoValue", func(t *testing.T) { s := newServer(t) errs := s.UpdateSettingsFromEnv([]string{ - "DISABLE_TELEMETRY", + "ENABLE_TELEMETRY", }) require.Len(t, errs, 1) - require.EqualError(t, errs[0], `failed to parse environment variable "DISABLE_TELEMETRY"`) - assert.False(t, s.envSettings.DisableTelemetry) + require.EqualError(t, errs[0], `failed to parse environment variable "ENABLE_TELEMETRY"`) + assert.Nil(t, s.envSettings.EnableTelemetry) }) t.Run("InvalidValue", func(t *testing.T) { s := newServer(t) errs := s.UpdateSettingsFromEnv([]string{ - "DISABLE_TELEMETRY=", + "ENABLE_TELEMETRY=", }) require.Len(t, errs, 1) - require.EqualError(t, errs[0], `invalid value "" for environment variable "DISABLE_TELEMETRY"`) - assert.False(t, s.envSettings.DisableTelemetry) + require.EqualError(t, errs[0], `invalid value "" for environment variable "ENABLE_TELEMETRY"`) + assert.Nil(t, s.envSettings.EnableTelemetry) }) t.Run("MetricsLessThenMin", func(t *testing.T) { @@ -193,29 +194,29 @@ func TestServer(t *testing.T) { ctx := context.TODO() - s.envSettings.DisableUpdates = true - expected := status.New(codes.FailedPrecondition, "Updates are disabled via DISABLE_UPDATES environment variable.") + s.envSettings.EnableUpdates = pointer.ToBool(true) + expected := status.New(codes.FailedPrecondition, "Updates are configured via ENABLE_UPDATES environment variable.") tests.AssertGRPCError(t, expected, s.validateChangeSettingsRequest(ctx, &serverv1.ChangeSettingsRequest{ - EnableUpdates: true, + EnableUpdates: pointer.ToBool(false), })) assert.NoError(t, s.validateChangeSettingsRequest(ctx, &serverv1.ChangeSettingsRequest{ - DisableUpdates: true, + EnableUpdates: pointer.ToBool(true), })) - s.envSettings.DisableTelemetry = true - expected = status.New(codes.FailedPrecondition, "Telemetry is disabled via DISABLE_TELEMETRY environment variable.") + s.envSettings.EnableTelemetry = pointer.ToBool(true) + expected = status.New(codes.FailedPrecondition, "Telemetry is configured via ENABLE_TELEMETRY environment variable.") tests.AssertGRPCError(t, expected, s.validateChangeSettingsRequest(ctx, &serverv1.ChangeSettingsRequest{ - EnableTelemetry: true, + EnableTelemetry: pointer.ToBool(false), })) assert.NoError(t, s.validateChangeSettingsRequest(ctx, &serverv1.ChangeSettingsRequest{ - DisableTelemetry: true, + EnableTelemetry: pointer.ToBool(true), })) assert.NoError(t, s.validateChangeSettingsRequest(ctx, &serverv1.ChangeSettingsRequest{ - EnableStt: true, + EnableStt: pointer.ToBool(false), })) assert.NoError(t, s.validateChangeSettingsRequest(ctx, &serverv1.ChangeSettingsRequest{ - DisableStt: true, + EnableStt: pointer.ToBool(true), })) }) @@ -230,7 +231,7 @@ func TestServer(t *testing.T) { ctx := context.TODO() s, err := server.ChangeSettings(ctx, &serverv1.ChangeSettingsRequest{ - EnableTelemetry: true, + EnableTelemetry: pointer.ToBool(true), }) require.NoError(t, err) require.NotNil(t, s) @@ -248,13 +249,13 @@ func TestServer(t *testing.T) { ctx := context.TODO() s, err := server.ChangeSettings(ctx, &serverv1.ChangeSettingsRequest{ - DisableAlerting: true, + EnableAlerting: pointer.ToBool(false), }) require.NoError(t, err) require.NotNil(t, s) s, err = server.ChangeSettings(ctx, &serverv1.ChangeSettingsRequest{ - EnableAlerting: true, + EnableAlerting: pointer.ToBool(true), }) require.NoError(t, err) require.NotNil(t, s) diff --git a/managed/services/supervisord/supervisord.go b/managed/services/supervisord/supervisord.go index d3a5c310fd..32843f9ea5 100644 --- a/managed/services/supervisord/supervisord.go +++ b/managed/services/supervisord/supervisord.go @@ -424,7 +424,7 @@ func (s *Service) marshalConfig(tmpl *template.Template, settings *models.Settin "DataRetentionHours": int(settings.DataRetention.Hours()), "DataRetentionDays": int(settings.DataRetention.Hours() / 24), "VMAlertFlags": s.vmParams.VMAlertFlags, - "VMDBCacheDisable": !settings.VictoriaMetrics.CacheEnabled, + "VMDBCacheDisable": !settings.IsVictoriaMetricsCacheEnabled(), "VMURL": s.vmParams.URL(), "ExternalVM": s.vmParams.ExternalVM(), "InterfaceToBind": envvars.GetInterfaceToBind(), @@ -500,8 +500,8 @@ func (s *Service) addClusterParams(templateParams map[string]interface{}) { } templateParams["HANodes"] = strings.Join(nodes, ",") } - //- GF_UNIFIED_ALERTING_HA_ADVERTISE_ADDRESS=172.20.0.5:9095 - //- GF_UNIFIED_ALERTING_HA_PEERS=pmm-server-active:9095,pmm-server-passive:9095 + // - GF_UNIFIED_ALERTING_HA_ADVERTISE_ADDRESS=172.20.0.5:9095 + // - GF_UNIFIED_ALERTING_HA_PEERS=pmm-server-active:9095,pmm-server-passive:9095 } // saveConfigAndReload saves given supervisord program configuration to file and reloads it. diff --git a/managed/services/supervisord/supervisord_test.go b/managed/services/supervisord/supervisord_test.go index 1aea3d39cc..5891f4b68e 100644 --- a/managed/services/supervisord/supervisord_test.go +++ b/managed/services/supervisord/supervisord_test.go @@ -51,7 +51,7 @@ func TestConfig(t *testing.T) { settings := &models.Settings{ DataRetention: 30 * 24 * time.Hour, } - settings.VictoriaMetrics.CacheEnabled = false + settings.VictoriaMetrics.CacheEnabled = pointer.ToBool(false) for _, tmpl := range templates.Templates() { n := tmpl.Name() diff --git a/managed/services/telemetry/telemetry.go b/managed/services/telemetry/telemetry.go index 8ad88470ab..215d3a744a 100644 --- a/managed/services/telemetry/telemetry.go +++ b/managed/services/telemetry/telemetry.go @@ -128,7 +128,7 @@ func (s *Service) Run(ctx context.Context) { s.l.Debugf("Failed to retrieve settings: %s.", err) return } - if settings.Telemetry.Disabled { + if !settings.IsTelemetryEnabled() { s.l.Info("Disabled via settings.") return } diff --git a/managed/services/user/user.go b/managed/services/user/user.go index 96258811e5..14b210d84f 100644 --- a/managed/services/user/user.go +++ b/managed/services/user/user.go @@ -95,16 +95,8 @@ func (s *Service) UpdateUser(ctx context.Context, req *userv1.UpdateUserRequest) params := &models.UpdateUserParams{ UserID: userInfo.ID, - Tour: userInfo.Tour, - AlertingTour: userInfo.AlertingTour, - } - - // Only allow to set flags - if req.ProductTourCompleted { - params.Tour = req.ProductTourCompleted - } - if req.AlertingTourCompleted { - params.AlertingTour = req.AlertingTourCompleted + Tour: req.ProductTourCompleted, + AlertingTour: req.AlertingTourCompleted, } userInfo, err = models.UpdateUser(tx.Querier, params) diff --git a/managed/utils/envvars/parser.go b/managed/utils/envvars/parser.go index 58266da869..cb2032ffb7 100644 --- a/managed/utils/envvars/parser.go +++ b/managed/utils/envvars/parser.go @@ -24,6 +24,7 @@ import ( "strings" "time" + "github.com/AlekSi/pointer" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -55,9 +56,9 @@ func (e InvalidDurationError) Error() string { return string(e) } // In case of error, the docker run terminates. // Short description of environment variables: // - PATH, HOSTNAME, TERM, HOME are default environment variables that will be ignored; -// - DISABLE_UPDATES is a boolean flag to enable or disable pmm-server update; -// - DISABLE_TELEMETRY is a boolean flag to enable or disable pmm telemetry (and disable STT if telemetry is disabled); -// - DISABLE_ALERTING disables Percona Alerting; +// - ENABLE_UPDATES is a boolean flag to enable or disable pmm-server update; +// - ENABLE_TELEMETRY is a boolean flag to enable or disable pmm telemetry (and disable STT if telemetry is disabled); +// - ENABLE_ALERTING disables Percona Alerting; // - METRICS_RESOLUTION, METRICS_RESOLUTION_MR, METRICS_RESOLUTION_HR, METRICS_RESOLUTION_LR are durations of metrics resolution; // - DATA_RETENTION is the duration of how long keep time-series data in ClickHouse; // - ENABLE_AZUREDISCOVER enables Azure Discover; @@ -95,56 +96,70 @@ func ParseEnvVars(envs []string) (*models.ChangeSettingsParams, []error, []strin case "PERCONA_TEST_PMM_CLICKHOUSE_DATABASE", "PERCONA_TEST_PMM_CLICKHOUSE_ADDR", "PERCONA_TEST_PMM_CLICKHOUSE_BLOCK_SIZE", "PERCONA_TEST_PMM_CLICKHOUSE_POOL_SIZE": //nolint:lll // skip env variables for external clickhouse continue - case "DISABLE_UPDATES": - envSettings.DisableUpdates, err = strconv.ParseBool(v) + case "ENABLE_UPDATES": + b, err := strconv.ParseBool(v) if err != nil { - err = fmt.Errorf("invalid value %q for environment variable %q", v, k) + errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) + continue } - case "DISABLE_TELEMETRY": - envSettings.DisableTelemetry, err = strconv.ParseBool(v) + envSettings.EnableUpdates = &b + case "ENABLE_TELEMETRY": + b, err := strconv.ParseBool(v) if err != nil { - err = fmt.Errorf("invalid value %q for environment variable %q", v, k) + errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) + continue } + envSettings.EnableTelemetry = &b case "METRICS_RESOLUTION", "METRICS_RESOLUTION_HR": if envSettings.MetricsResolutions.HR, err = parseStringDuration(v); err != nil { - err = formatEnvVariableError(err, env, v) + errs = append(errs, formatEnvVariableError(err, env, v)) + continue } case "METRICS_RESOLUTION_MR": if envSettings.MetricsResolutions.MR, err = parseStringDuration(v); err != nil { - err = formatEnvVariableError(err, env, v) + errs = append(errs, formatEnvVariableError(err, env, v)) + continue } case "METRICS_RESOLUTION_LR": if envSettings.MetricsResolutions.LR, err = parseStringDuration(v); err != nil { - err = formatEnvVariableError(err, env, v) + errs = append(errs, formatEnvVariableError(err, env, v)) + continue } case "DATA_RETENTION": if envSettings.DataRetention, err = parseStringDuration(v); err != nil { - err = formatEnvVariableError(err, env, v) + errs = append(errs, formatEnvVariableError(err, env, v)) + continue } case "ENABLE_VM_CACHE": - envSettings.EnableVMCache, err = strconv.ParseBool(v) + b, err := strconv.ParseBool(v) if err != nil { - err = fmt.Errorf("invalid value %q for environment variable %q", v, k) - } - if !envSettings.EnableVMCache { - // disable cache explicitly - envSettings.DisableVMCache = true + errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) + continue } - case "DISABLE_ALERTING": - envSettings.DisableAlerting, err = strconv.ParseBool(v) + envSettings.EnableVMCache = &b + case "ENABLE_ALERTING": + b, err := strconv.ParseBool(v) if err != nil { - err = fmt.Errorf("invalid value %q for environment variable %q", v, k) + errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) + continue } + envSettings.EnableAlerting = &b + case "ENABLE_AZUREDISCOVER": - envSettings.EnableAzurediscover, err = strconv.ParseBool(v) + b, err := strconv.ParseBool(v) if err != nil { - err = fmt.Errorf("invalid value %q for environment variable %q", v, k) + errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) + continue } - case "DISABLE_BACKUP_MANAGEMENT": - envSettings.DisableBackupManagement, err = strconv.ParseBool(v) + envSettings.EnableAzurediscover = &b + + case "ENABLE_BACKUP_MANAGEMENT": + b, err := strconv.ParseBool(v) if err != nil { - err = fmt.Errorf("invalid value %q for environment variable %q", v, k) + errs = append(errs, fmt.Errorf("invalid value %q for environment variable %q", v, k)) + continue } + envSettings.EnableBackupManagement = &b case "PERCONA_TEST_AUTH_HOST", "PERCONA_TEST_CHECKS_HOST", "PERCONA_TEST_TELEMETRY_HOST", "PERCONA_TEST_SAAS_HOST": warns = append(warns, fmt.Sprintf("environment variable %q is removed and replaced by %q", k, envPlatformAddress)) @@ -153,7 +168,7 @@ func ParseEnvVars(envs []string) (*models.ChangeSettingsParams, []error, []strin warns = append(warns, fmt.Sprintf("environment variable %q is removed and replaced by %q", k, envPlatformPublicKey)) case "PMM_PUBLIC_ADDRESS": - envSettings.PMMPublicAddress = v + envSettings.PMMPublicAddress = pointer.ToString(v) case "PMM_VM_URL": _, err = url.Parse(v) @@ -171,13 +186,14 @@ func ParseEnvVars(envs []string) (*models.ChangeSettingsParams, []error, []strin continue case envEnableAccessControl: - envSettings.EnableAccessControl, err = strconv.ParseBool(v) + b, err := strconv.ParseBool(v) if err != nil { err = fmt.Errorf("invalid value %q for environment variable %q", v, k) errs = append(errs, err) continue } - envSettings.DisableAccessControl = !envSettings.EnableAccessControl + + envSettings.EnableAccessControl = &b case envPlatformAPITimeout: // This variable is not part of the settings and is parsed separately. @@ -223,10 +239,6 @@ func ParseEnvVars(envs []string) (*models.ChangeSettingsParams, []error, []strin warns = append(warns, fmt.Sprintf("environment variable %q IS NOT SUPPORTED and WILL BE REMOVED IN THE FUTURE", k)) } - - if err != nil { - errs = append(errs, err) - } } return envSettings, errs, warns diff --git a/managed/utils/envvars/parser_test.go b/managed/utils/envvars/parser_test.go index 2d823ea055..48985d05cd 100644 --- a/managed/utils/envvars/parser_test.go +++ b/managed/utils/envvars/parser_test.go @@ -21,6 +21,7 @@ import ( "testing" "time" + "github.com/AlekSi/pointer" "github.com/stretchr/testify/assert" "github.com/percona/pmm/managed/models" @@ -33,18 +34,18 @@ func TestEnvVarValidator(t *testing.T) { t.Parallel() envs := []string{ - "DISABLE_UPDATES=True", - "DISABLE_TELEMETRY=True", + "ENABLE_UPDATES=false", + "ENABLE_TELEMETRY=True", "METRICS_RESOLUTION=5m", "METRICS_RESOLUTION_MR=5s", "METRICS_RESOLUTION_LR=1h", "DATA_RETENTION=72h", } expectedEnvVars := &models.ChangeSettingsParams{ - DataRetention: 72 * time.Hour, - DisableTelemetry: true, - DisableSTT: false, - DisableUpdates: true, + DataRetention: 72 * time.Hour, + EnableTelemetry: pointer.ToBool(true), + EnableUpdates: pointer.ToBool(false), + EnableSTT: nil, MetricsResolutions: models.MetricsResolutions{ HR: 5 * time.Minute, MR: 5 * time.Second, @@ -117,10 +118,10 @@ func TestEnvVarValidator(t *testing.T) { t.Parallel() envs := []string{ - "DISABLE_UPDATES", - "DISABLE_TELEMETRY", - "DISABLE_UPDATES=5", - "DISABLE_TELEMETRY=X", + "ENABLE_UPDATES", + "ENABLE_TELEMETRY", + "ENABLE_UPDATES=5", + "ENABLE_TELEMETRY=X", "METRICS_RESOLUTION=5f", "METRICS_RESOLUTION_MR=s5", "METRICS_RESOLUTION_LR=1hour", @@ -129,10 +130,10 @@ func TestEnvVarValidator(t *testing.T) { expectedEnvVars := &models.ChangeSettingsParams{} expectedErrs := []error{ - fmt.Errorf(`failed to parse environment variable "DISABLE_UPDATES"`), - fmt.Errorf(`failed to parse environment variable "DISABLE_TELEMETRY"`), - fmt.Errorf(`invalid value "5" for environment variable "DISABLE_UPDATES"`), - fmt.Errorf(`invalid value "x" for environment variable "DISABLE_TELEMETRY"`), + fmt.Errorf(`failed to parse environment variable "ENABLE_UPDATES"`), + fmt.Errorf(`failed to parse environment variable "ENABLE_TELEMETRY"`), + fmt.Errorf(`invalid value "5" for environment variable "ENABLE_UPDATES"`), + fmt.Errorf(`invalid value "x" for environment variable "ENABLE_TELEMETRY"`), fmt.Errorf(`environment variable "METRICS_RESOLUTION=5f" has invalid duration 5f`), fmt.Errorf(`environment variable "METRICS_RESOLUTION_MR=s5" has invalid duration s5`), fmt.Errorf(`environment variable "METRICS_RESOLUTION_LR=1hour" has invalid duration 1hour`), @@ -140,8 +141,8 @@ func TestEnvVarValidator(t *testing.T) { } gotEnvVars, gotErrs, gotWarns := ParseEnvVars(envs) - assert.Equal(t, gotEnvVars, expectedEnvVars) - assert.Equal(t, gotErrs, expectedErrs) + assert.Equal(t, expectedEnvVars, gotEnvVars) + assert.Equal(t, expectedErrs, gotErrs) assert.Nil(t, gotWarns) }) diff --git a/managed/utils/pprof/pprof_test.go b/managed/utils/pprof/pprof_test.go index 1dcc59a4ba..5b1e53e546 100644 --- a/managed/utils/pprof/pprof_test.go +++ b/managed/utils/pprof/pprof_test.go @@ -23,6 +23,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestHeap(t *testing.T) { @@ -30,15 +31,15 @@ func TestHeap(t *testing.T) { t.Run("Heap test", func(t *testing.T) { t.Parallel() heapBytes, err := Heap(true) - assert.NoError(t, err) + require.NoError(t, err) // read gzip reader, err := gzip.NewReader(bytes.NewBuffer(heapBytes)) - assert.NoError(t, err) + require.NoError(t, err) var resB bytes.Buffer _, err = resB.ReadFrom(reader) - assert.NoError(t, err) + require.NoError(t, err) assert.NotEmpty(t, resB.Bytes()) }) } diff --git a/managed/utils/tests/asserts.go b/managed/utils/tests/asserts.go index cb52d9296a..a78cd8483e 100644 --- a/managed/utils/tests/asserts.go +++ b/managed/utils/tests/asserts.go @@ -33,7 +33,7 @@ func AssertGRPCError(tb testing.TB, expected *status.Status, actual error) { return } err := s.Err() - if !assert.NotNil(tb, err) { + if !assert.Error(tb, err) { //nolint:testifylint return } assert.Equal(tb, expected.Err().Error(), err.Error()) // gives the best error message @@ -61,5 +61,5 @@ func AssertGRPCErrorCode(tb testing.TB, expectedCode codes.Code, actual error) { return } - assert.Equal(tb, s.Code(), expectedCode) + assert.Equal(tb, expectedCode, s.Code()) }